Local-first control plane for coding agents across codex, claude_code, and opencode.
AgentDock helps you inspect, resume, and switch agent threads from one desktop workspace without replacing the upstream CLIs.
- Keep multi-provider agent workflows in one place instead of jumping between separate histories.
- Preserve provider-native session data as source of truth while maintaining a local unified index.
- Provide a shared contract layer so desktop, mobile, and adapters stay semantically aligned.
- Build local-first by default: your runtime, SQLite state, and CLI integrations stay on your machine.
- Optimize for real coding loops: reconnect quickly, find old threads, and continue execution with context.
| Capability | Status | Notes |
|---|---|---|
Provider scope (codex, claude_code, opencode) |
Now | Reflected in TS and Rust contracts. |
| Local-first desktop runtime (Tauri + React) | Now | Host runtime in Rust, UI in React/Vite. |
| Unified thread listing and resume foundations | Now | Provider adapters expose list/resume entry points. |
| Cross-provider switch context orchestration | In Progress | Summary + fallback flow is part of Phase 1 goals. |
| Mobile remote-control workflows | Planned | Expo shell exists; full loop is not Phase 1 scope. |
From the repository root:
bun installRun desktop:
bun run dev:desktopRun mobile:
bun run dev:mobileIf you only need the desktop web UI (without Tauri host):
bun run dev- Bun
1.1.27+(workspace package manager). - Rust stable toolchain (see
rust-toolchain.toml). - Platform dependencies required by Tauri v2 and Expo.
- Provider CLIs installed and reachable in
PATHfor the providers you want to use:codexclaude(forclaude_code)opencode
Optional environment overrides used by adapters:
| Variable | Purpose |
|---|---|
AGENTDOCK_CODEX_HOME_DIR |
Override Codex sessions directory root. |
AGENTDOCK_CLAUDE_CONFIG_DIR |
Override Claude config directory root. |
AGENTDOCK_CLAUDE_BIN |
Override Claude CLI binary name/path. |
AGENTDOCK_OPENCODE_DATA_DIR |
Override OpenCode data directory root. |
AGENTDOCK_OPENCODE_BIN |
Override OpenCode CLI binary name/path. |
Run these from the repository root:
| Command | Purpose |
|---|---|
bun run dev:desktop |
Start the desktop app with Tauri. |
bun run dev:mobile |
Start the Expo dev server for mobile. |
bun run dev |
Start desktop web UI only (Vite). |
bun run build |
Run build scripts in all workspaces that define one. |
bun run lint |
Run workspace lint/type-style checks. |
bun run typecheck |
Run TypeScript checks and cargo check --workspace. |
bun run test |
Run workspace tests and cargo test --workspace. |
Focused examples:
bun run --filter @agentdock/contracts test
bun run --filter @agentdock/desktop typecheck
cargo test -p provider-codex -- list_threads_reads_codex_sessionsapps/
desktop/ Tauri desktop app (React UI + Rust host)
mobile/ Expo mobile shell
packages/
contracts/ Shared TypeScript provider contracts
config-typescript/ Shared tsconfig presets
config-eslint/ Shared ESLint flat config preset
crates/
provider-contract/ Shared Rust provider contract + trait
provider-codex/ Codex provider adapter
provider-claude/ Claude provider adapter
provider-opencode/ OpenCode provider adapter
agentdock-core/ SQLite bootstrap and migrations
docs/
agentdock-phase1-prd.md
Provider IDs are currently fixed to:
type ProviderId = "codex" | "claude_code" | "opencode";Keep TypeScript and Rust contracts aligned in the same change whenever provider fields, IDs, or error semantics change:
- TypeScript:
packages/contracts/src/provider.ts - Rust:
crates/provider-contract/src/lib.rs
Current project phase: Alpha / Phase 1.
Phase 1 intent and acceptance details are documented in:
Current focus:
- Provider connectivity and health checks.
- Unified thread retrieval and resume flows.
- Cross-provider switching baseline with event logging.
- Stable local migration and contract alignment workflows.
Out of Phase 1 scope:
- Team collaboration and cloud sync.
- Full billing systems.
- Full mobile remote-control production loop.
- Fork and create a branch for your change.
- Implement code and tests with the existing contracts/style.
- Run baseline checks:
bun run typecheck
bun run test- Use Conventional Commit messages (for example:
feat(desktop): add provider health panel). - Open a PR with:
- What changed
- Why it changed
- Commands/tests you ran
- Screenshots for desktop/mobile UI updates
No. AgentDock orchestrates and indexes workflows around provider CLIs; execution still happens through each provider's CLI.
codex, claude_code, and opencode.
AgentDock is local-first. Provider-native session data remains with each CLI, while AgentDock maintains local SQLite-backed indexing and metadata.
Desktop/mobile surfaces rely on TypeScript, while the host and adapters use Rust. Contract parity keeps behavior consistent across both runtimes.
Not yet. Mobile support is currently positioned as a remote-control workflow shell, with full production scope outside Phase 1.
Licensed under the MIT License. See LICENSE.