DopeAgent
Active developmentA personal agent OS — one local daemon, many thin clients.
A Rust control plane runs locally and owns the runtime, LLM providers, channel connectors, storage and events. Clients stay thin: a React web UI, a full-screen Rust TUI, chat-channel connectors, and a TypeScript SDK — all speaking the same JSON Schema contracts.
Overview
The daemon is the product. Everything that has to be correct — session state, provider routing, the tool harness, the event log — lives in one Rust workspace behind a local HTTP API, so a client is never more than a view onto it. The daemon binary is `dope-cli`; the HTTP API is `dope-api`.
Cross-language contracts live in `schemas/` as JSON Schema and are the source of truth for the API, events and config — the Rust daemon and the TypeScript clients are generated against the same definitions rather than kept in sync by convention.
A stated working assumption is that long-lived agent state must be observable, replayable and safe to evolve; context engineering, memory, planning, handoff and policy are being redesigned rather than lightly patched.
What it does
- Rust control plane: runtime, LLM providers, channels/connectors, store, events, HTTP API and harness in one workspace.
- Three surfaces over one daemon: React 19 + Vite web UI, full-screen Rust TUI (`dope-tui`), and chat-channel connectors.
- TypeScript client SDK (`@dope/client`) generated against the shared JSON Schema contracts.
- Separate test and prod environments — `~/.dope-test` on port 19192 versus `~/.dope` on 19191, with live connectors disabled by default in test.
- The earlier Go daemon was fully replaced by the Rust workspace; the migration is recorded in `crates/MIGRATION.md`.