Agents
| Vendor | How it connects | Notes |
|---|---|---|
| Grok | ACP over stdio | Runs the local Grok CLI |
| Claude | ACP over stdio | Runs the local Claude Code CLI |
| Codex | ACP, plus an App Server | App Server adds native history and capability discovery |
| Cursor | ACP over stdio | Runs cursor-agent |
| Custom | HTTP | Any Anthropic Messages or OpenAI Chat Completions endpoint, hosted or local |
Each vendor runs under its own login. Subscriptions, context and sandboxes are never pooled.
OpenClaw and Hermes are harnesses, not vendors. Settings → LLMs shows whether each is installed. A plan can grant them for one wave, or you can name openclaw/main or hermes/<profile>. Their tasks join the lineup. They get no Usage ring, and delete, rename, credentials and elevate stay blocked.
Chats and projects
- A project is a name. Folders and references are optional, added later.
- Chats belong to a project. Rename, archive, delete, or drag one to another project.
- Vendor, model and thinking effort are set per chat, not per app.
- Fork a chat to try a different model on the same history. When the project has a Git folder, the fork gets a managed worktree — the same isolation subagents use.
- Rewind to an earlier turn.
- A portable transcript follows a chat when its vendor changes.
- Search runs over chat titles and message text across every project.
- A turn's work stays on one compact line while it runs. Open it for the ordered detail: think, tools, think. Consecutive tool calls share one fold; a later thought starts a new hop.
Files you can hand a chat
Drag them onto the window, or paste them in.
- Images — png, jpg, jpeg, webp, gif, bmp
- Audio — mp3, wav, m4a, aac, flac, ogg, opus, webm
- Video — mp4, mov, m4v, webm, avi, mkv
- Documents — pdf, doc, docx, ppt, pptx, xls, xlsx, rtf, odt
- Text and code — txt, md, json, csv, tsv, ts, tsx, js, py, rs, go, java, rb, php, c, cpp, cs, sql, yml, toml, sh, and the rest of the usual list
- Folders — dropped whole, with dotfiles and build output skipped
A chat can also read media the agent wrote, so a generated image shows in the transcript rather than as a path.
Control
- Permission modes — ask, accept-edits, always-approve, plan.
- Sandbox profiles — off, workspace, read-only, strict.
- One permission inbox. Every prompt lands in the same place and is translated to each vendor's own protocol.
- Execution directory — a chat runs in a linked folder or in a managed git worktree, isolated from your working copy.
- Terminal — chat-scoped, in that same directory.
- Git review — a compact Changes control opens the changed files and diffs for the work a chat did. Click a row to open the file beside the chat.
- Change instances — a created file's lines stay green. A later prompt that deletes some of them keeps those lines as red instances in the review.
Spend
- Usage recorded per vendor and per chat, from each vendor's own count: the ACP turn total, or the HTTP response's usage block. A turn is estimated at four characters a token only when the vendor sent no count.
- In is fresh input — what the model read for the first time. Cached is context served back from cache, named apart so a long chat does not read as millions of new tokens. Out is what it wrote.
- Budgets per vendor.
- A weekly pace that tells you when you are ahead of it, before the bill does.
- A daily bank that hands every bot a slice of its plan per day and carries forward what it did not spend.
- A usage view by day, week, month, or all time.
Work that outlives a turn

- Schedules — one-shot and recurring, journalled by the desktop process and recovered after a restart.
- Goals — long-running intent that survives the chat that started it.
- Subagents — lifecycle records, runtime and token ceilings, cascading cancellation, changed-file review, and worktree isolation where the project supports it. A worker gets a worker's context: the short worker rules and only the desk tools it may call.
- Plans — multi-step work that continues after a worker joins.
- Routing — your own chat keeps the model you picked until you set it to Auto; Auto picks the bot and effort for each message. When a chat spawns a worker without naming a bot, the desk picks the bot and effort for the slice. Settings → Routing turns that off, and tunes how any routing weighs leftover, reserve, and local models.
Memory
- A private learning store on your own disk, in SQLite.
- The compiler is a custom bot. Settings → Learning can backfill the last day of human prompts from saved chats.
- Human intent, agent performance, and mismatches between them compile as separate private lanes.
- Settings shows index counts and inferred memories, not raw prompt text.
- Export it, or wipe it, from Settings. Nothing is sent anywhere to hold it.
Extending it
- Skills — two ship with the desk,
deskfor chat-to-chat control andsetupfor adding bots and references. Skills are also listed from Grok, Codex, Claude and Cursor homes, and can be pushed back to a vendor. - MCP servers — attached to a runtime, with the same approval and result path as built-in tools.
- Custom bots — a pasted URL and key become a first-class bot with its own name and colour. Testing the connection asks the provider which models it serves; tick the ones you want. One key is one bot and one leftover ring, however many models it offers.
- The
/palette — new, project, link, model, effort, compact, plan, sandbox, usage, watch, schedule, goal, skills, review, context, rewind, export, memory, hooks, plugins, workflows, and more.
Settings
Profile, connected LLMs, skills, routing, learning, usage, watch.
- The profile shows the Workhorse mark as tiny moving blobs of the bots you have called. Spend sets how many of each colour.
- Settings can export a support report that excludes prompts, messages, file contents, environment variables, URLs and credential values.
- Settings → Profile can check GitHub for a newer desk. A Mac installer downloads that release's disk image and replaces the app.
Platforms
Windows and macOS. Both installers are built and tested on their own machine for every release. Linux builds and tests in CI but has no installer yet.
The source of truth is docs/FEATURES.md in the public repo. Every release updates it.