A durable desktop control plane for coding agents.
Highlights · Quick start · Architecture · Documentation · Releases
SAIWORK2 keeps projects, agent sessions, queued prompts, tool activity, and engine processes in one predictable desktop workspace. The React interface projects authoritative Rust-core state; it does not own processes, persistence, or recovery.
Windows-first. OpenCode is the primary local engine, with an opt-in Generic CLI adapter for trusted one-shot tools.
- Start working immediately. Opening a project starts or rebinds its engine; sending the first prompt creates a session automatically.
- One composer, clear intent. Enter sends by default, Shift+Enter adds a line, and Ctrl+Enter places work in the durable queue. The mapping is configurable.
- Durable queued work. Add, edit, reorder, pause, resume, cancel, and retry prompts without turning the frontend into a second queue authority.
- Agent-native conversations. Streaming answers, tool activity, permission decisions, structured questions, session deletion, and turn undo/redo share one transcript.
- Time is visible. Every message and tool call shows an absolute timestamp and a live relative age.
- Failure stays honest. Unknown outcomes remain
UNKNOWN; uncertain work is never silently retried, and active-run ownership fails closed. - SAIPEN-aware. Project state, task, blocker, validation, Board, and
Knowledge views are available without mirroring canonical
.saipenfiles.
Prerequisites: Windows 10/11 with WebView2, Node.js 20+, Rust stable with the
MSVC toolchain, Visual Studio Build Tools C++, and
OpenCode on PATH.
npm install
npm run tauri devOpen a project, select a model when needed, and type a prompt. Engine and first session startup are automatic; explicit start/stop controls remain available.
Build Windows installers locally with:
npm run tauri build- OpenCode — production: local
opencode serve; sessions, models, streaming, tools, structured questions, cancellation, and undo/redo. - Generic CLI — production, opt-in: trusted executable, prompt over stdin, bounded output and timeout, no shell interpolation.
- DeepSeek Harness — experimental: ACP adapter and deterministic queue path are implemented; real-provider availability still depends on upstream tooling.
- FakeEngine — development only: deterministic failure simulation; excluded from release builds.
React / TypeScript UI
│ commands + events
▼
Rust orchestration core
├─ SQLite durable queue
├─ Process supervisor ── Engine adapters
├─ Workspace + session metadata
└─ SAIPEN read / watch / actions
The boundaries are deliberate: one process owner, one durable queue owner, one event bus, and one desktop runtime. Different workspaces may run concurrently; mutating agent runs inside the same workspace are serialized.
- Local desktop app: no account, telemetry service, or SAIWORK2 cloud.
- Provider credentials stay in each engine's existing authentication store.
- SQLite stores settings, project references, session metadata, and queued prompts. Queue prompts are plaintext at rest.
- Portable mode keeps the database, logs, settings, and runtime data under one
deterministic
data/directory beside the executable.
cargo test --workspace --exclude saiwork2
cargo test -p saiwork2
npm run typecheck
npm test
npm run buildThe Tauri development and release shell requires the Windows MSVC toolchain. Core crates can also be tested with the Windows GNU toolchain.
- Product contract
- Architecture and ownership laws
- Engine contract
- Queue guarantees
- Process lifecycle
- Testing strategy
- Changelog and release notes
SAIWORK2 is Windows-first and is not a full IDE. It does not yet include a terminal emulator, worktree isolation, cloud collaboration, or an automatic SAIPEN-to-queue handoff. See the roadmap for engineering status and planned work.
MIT — see LICENSE. Third-party inventory: KNOWLEDGE/THIRD_PARTY.md.