A Visual AI Software Company Powered by Multi-Agent Workflow
Status: v0.4.0 ready for users — Windows + Linux installers build end-to-end through GitHub Actions. The 7-PR delivery chain (Phase 0–5 + release polish) shipped 33 commits across the v0.3 → v0.4 transition.
Latest release: v0.4.0-rc1 (draft, see the v0.4-delivery plan)
Author: Thatgfsj License: MIT
Flowntier is not another AI IDE. It is an AI Software Company Operating System.
Users interact with a visual workspace while multiple AI agents collaborate behind the scenes — exactly like a real software company:
需求 → 主理 (Chief) → 计划 (Planner) → 实施 (Worker) × N
↓
评审 ← 审查 (Reviewer) / 找茬 (BugHunter)
↓
交付 ← 汇报 (Reporter) → 需求方
The IDE is only the visualization layer. The workflow is the product.
- All-Rust runtime — the Python FastAPI sidecar and the
Claude Code CLI wrapper (
crates/claude-adapter/) are deleted.crates/agent-coreis a single-process implementation of the agent loop, tool registry, and provider clients. Seedocs/ACCEPTANCE_v0.4.mdfor the boundary-test report that surfaced 8 latent bugs in the previous acceptance runs. - Capabilities —
ToolContextexposes per-toolread / write / bash / networkflags, plusread_only(),no_modify(), andnetwork_off()presets. The agent loop honorsCancellationTokenand tree-kills the entire child process tree on cancel. - Repeat-failure abort — if the same
(tool, args)pair fails three times in a row the loop emitsDone { status: "ABORTED_REPEAT" }instead of burning the whole iteration budget on a loop. - Role prompts rewritten — every role now has a uniform prompt skeleton (Identity / Responsibility / Out-of-scope / Workflow / Output format / Tools). The Worker prompt explicitly warns about the "defined but not wired up" anti-pattern that hit the v0.3 ledger acceptance.
- Provider URL validation —
validate_base_url()rejects bad URLs (https:/x.test,ftp://, …) before they waste a TLS handshake. - Strict acceptance test harness — 28 backend cases + 6 Playwright scenarios. Catches FK violations, wrong response shapes, missing CORS preflight, and concurrency failures that previous runs missed.
Download the installer for the latest release from Releases.
| Artifact | When to use | Size |
|---|---|---|
Flowntier_0.2.5_x64-setup.exe (NSIS) |
Public distribution | ~30 MB |
Flowntier_0.2.5_x64_en-US.msi (MSI) |
Corporate / Group Policy | ~40 MB |
flowntier-desktop.exe (standalone) |
Dev / portable | ~16 MB |
SmartScreen shows "Unknown publisher" because the build is
unsigned. Click More info → Run anyway. Code-signing
documentation: docs/INSTALLER.md.
No Python, no Node.js, no toolchain on the user's machine. The installer bundles everything needed.
v0.4.0 is the first release aimed at real users. Everything in v0.3 that was a stub or TODO has been replaced with a working implementation, and the user-facing failures from v0.3 (silent crashes, settings that don't persist, no installer) are fixed.
- 🛡 Persistent secrets. API keys entered in Settings now
actually persist across quit+relaunch. Stored in AES-256-GCM
ciphertext with a 32-byte DEK in the OS keystore:
Credential Manager (DPAPI) on Windows, Keychain on macOS,
libsecret on Linux. Fallback to a passphrase-protected file
for headless Linux. See
docs/SECURITY.md §"Cryptographic posture". - 🪟 Working installer. GitHub Actions builds NSIS + MSI
installers for Windows and .deb + AppImage for Linux on every
v*tag. macOS deferred to v0.5 per chairman directive. Seedocs/INSTALLER.md. - 🔄 Auto-update. The app checks GitHub Releases on every launch and prompts the user when a newer version is available. Updates are signed with an ed25519 keypair; the public key is compiled into the shell. Signature verification is mandatory.
- 🎯 9 built-in LLM providers. OpenAI, Anthropic, Google AI, DeepSeek, Moonshot Kimi, Zhipu GLM, Xiaomi MiMo, and SiliconFlow — pre-configured with sensible defaults. Custom providers (relay stations, private gateways) supported via the Settings UI.
- 🚨 Graceful error handling. Three layers:
- React ErrorBoundary: any uncaught exception shows a "复制日志 / 重启应用 / 上报问题" screen with a copyable stack trace and pre-filled GitHub issue URL.
- Startup error dialog: if the runtime fails to initialize (data dir unwritable, SQLite migration error), the Tauri shell shows a native error dialog with the log path instead of crashing silently.
- Persistent log file: every Rust log line + every React
error lands in
<data_dir>/logs/flowntier.log.YYYY-MM-DDso the user can attach it to a bug report.
- 🛡 Strict Content Security Policy. Scripts restricted
to
'self'(with Tauri-injected nonces); connect-src limited to the LLM provider base URLs + IPC; frames / objects / form actions blocked. Seedocs/SECURITY.md §"[P2] Content Security Policy". - 🌍 i18n scaffolding.
react-i18next+ language toggle in the TopBar. v0.4 ships zh-CN (default) + en-US (covers all new strings; legacy UI is still zh-CN only and tracked for v0.5). - 👋 First-run Welcome. 3-step wizard: pick a provider,
try the "implement POST /auth/login" sample, enter the
workspace. Dismissing once sets
first_run=false; never shown again. - 🔄 Sidecar version handshake.
GET /api/rpc/versionreturns the sidecar's version +min_compatible. Shell compares; on drift (e.g. user updated shell but not the sidecar binary), a non-blocking warning appears in the dashboard.
The v0.4.0 release chain shipped as 6 PRs (Phase 0 → 5):
- PR #3: Phase 0 — brand rename, source-of-truth version, doc stubs
- PR #4: Phase 1 — release CI + Windows/Linux installers + auto-update
- PR #6: Phase 3 — persistent secrets + provider endpoints + router fix
- PR #7: Phase 4 — Welcome screen + first-run flow
- PR #8: Phase 5 — rpc.version handshake + drift banner
- Phase 6 (this branch) — README/FAQ polish + v0.4.0 tag
The draft Release v0.4.0-rc1 is published on every push to a
v* tag; the maintainer promotes it to public after smoke-testing
on a clean Windows VM and a clean Ubuntu 22.04 VM.
Prerequisites: Rust ≥ 1.85, Node ≥ 24, pnpm ≥ 9, Tauri CLI, WiX (Windows only, automatic).
git clone https://github.com/Thatgfsj/Flowntier.git
cd Flowntier
pnpm install
# Build the Rust sidecar first (flowntier-runtime + agent-core + pipe-server).
cargo build --release -p pipe-server
# Stage the sidecar binary where the Tauri bundler expects it.
mkdir -p apps/desktop/src-tauri/binaries
cp target/release/flowntier-runtime.exe \
apps/desktop/src-tauri/binaries/flowntier_runtime-x86_64-pc-windows-msvc.exe
# Build the installer.
cd apps/desktop
pnpm tauri:buildThe .msi and NSIS installers land in
apps/desktop/target/release/bundle/. ~8 minutes from clean
build, ~30 s incremental.
To run the React UI without packaging:
cd apps/desktop
pnpm tauri:dev┌──────────────────────────────────────────────────────────────────┐
│ Tauri Webview (React 19 + Vite) │
│ ChatZone MissionControl Settings BottomConsole CommandDock │
└─────────────────────────┬────────────────────────────────────────┘
│ tauri::command
┌─────────────────────────┴────────────────────────────────────────┐
│ flowntier-runtime (Rust, single process) │
│ │
│ crates/pipe-server JSON-RPC over \\.\pipe\flowntier_runtime │
│ ↓ │
│ crates/agent-core in-process agent loop + tool registry │
│ ↓ + provider clients (SSE) │
│ ↓ │
│ crates/event-bus pub/sub (Rust ↔ Tauri webview) │
│ ↓ │
│ crates/storage sqlx + SQLite (workflows, usage) │
│ │
│ crates/provider-presets built-in OpenAI/Anthropic/... │
└──────────────────────────────────────────────────────────────────┘
│ HTTPS
▼
LLM Provider APIs
See docs/ARCHITECTURE.md for the full
module-boundary spec and data-flow diagrams.
Flowntier/
├── apps/
│ └── desktop/ # Tauri v2 app (React + Rust sidecar)
│
├── crates/ # Cargo workspace — all Rust
│ ├── agent-core/ # ⭐ in-process agent loop, tools, providers
│ ├── pipe-server/ # ⭐ JSON-RPC + event-push over named pipe
│ ├── event-bus/ # Rust pub/sub
│ ├── tauri-core/ # Tauri app glue
│ ├── config/ # flowntier.toml loader
│ └── storage/ # SQLx repositories
│
├── packages/ # pnpm workspace (TS shared)
│ ├── ui/ # React 19 components
│ ├── workflow/ # workflow client types
│ ├── providers/ # provider metadata tables
│ ├── prompts/ # prompt renderer (TS)
│ └── shared/ # cross-language types
│
├── docs/ # RFCs and acceptance reports
│ ├── ROADMAP.md # milestones, versioning
│ ├── ARCHITECTURE.md # data flow, module boundaries
│ ├── TECH_STACK.md # locked-in tech
│ ├── AGENT_PROTOCOL.md # inter-agent envelopes
│ ├── DEPENDENCIES.md # cargo-deny advisory summary
│ ├── INSTALLER.md # build steps, signing, auto-update
│ ├── ACCEPTANCE_v0.3.md # first acceptance run
│ ├── ACCEPTANCE_v0.3_LEDGER.md
│ ├── ACCEPTANCE_v0.4.md # ⭐ strict acceptance (28 backend + 6 UI)
│ ├── DEPRECATIONS.md
│ └── ...
│
├── .agent/ # repository-wide rules
├── .github/workflows/ # CI
├── acceptance/ # one-shot acceptance artefacts
└── Cargo.lock # committed (apps are binaries)
v0.3 → v0.4 migration: the
runtime/Python package,apps/runtime/Python sidecar, andcrates/claude-adapter/are gone. There is no Python on the runtime path. Seehistory/docs/V03_DELETIONS.mdfor the removal record.
# Run all Rust tests (54 unit + 6 e2e).
cargo test --workspace
# Run the strict acceptance (separate Python harness):
# 1. Start backend
mkdir -p acceptance/ledger-task/backend
cd acceptance/ledger-task/backend
node server.js &
# 2. Start frontend
cd ../frontend
python -m http.server 5501 &
# 3. Run the harness
python ../../backend_strict_test.py # 28/28
python ../../frontend_visual_test.py # 6/6 scenarios with screenshotsBoth harness scripts are committed alongside this README in the
working acceptance directory. See docs/ACCEPTANCE_v0.4.md
for what they actually catch.
| 中文 | English | 职责 |
|---|---|---|
| 主理 | Chief | 接收需求、调度团队、最终交付 |
| 计划 | Planner | 产出 Markdown 方案,不写代码 |
| 实施 | Worker | 写代码、改文件、跑命令 |
| 找茬 | BugHunter | 只读;找 Bug、安全漏洞、边界情况 |
| 审查 | Reviewer | 几乎只读;检查命名、抽象、测试 |
| 汇报 | Reporter | 用大白话给需求方做最终总结 |
System prompts live in crates/agent-core/src/prompt/mod.rs.
| Milestone | Status |
|---|---|
| v0.1 — Foundation (monorepo, CI, RFCs, Windows installer) | ✅ shipped |
| v0.2 — Multi-provider maturity | ✅ shipped |
| v0.3 — Embedded Rust agent + Chat Zone | ✅ shipped |
| v0.4 — Capabilities + repeat-failure abort + strict acceptance | ✅ shipped |
| v0.5 — Bash output streaming + multi-wf isolation + tree-kill | ⏳ in progress |
| v0.6 — Memory + replay | 🎯 next |
| v1.0 — Production | 🎯 target |
The full milestone list with exit criteria is in
docs/ROADMAP.md.
RFC-driven development. Non-trivial changes start as a
document under docs/, get reviewed, then implemented.
Read CONTRIBUTING.md and the
repository-wide rules in .agent/ before opening a
PR. The CI is strict: clippy pedantic, rustfmt, eslint,
prettier, and 60+ unit tests must all pass.
MIT — see LICENSE for the full text.
Author: Thatgfsj Repository: https://github.com/Thatgfsj/Flowntier