Skip to main content
What separates a good session from a frustrating one is mostly knowing how input reaches the agent and when the agent is allowed to act. That is this page.

The object model

  • A session is one agent process inside a workspace.
  • A chat thread is the durable conversation. Threads outlive processes: kill the session, restart the app, reconnect from another machine — the thread and its transcript are still there, because archcar owns them, not the UI.
  • A turn is everything the agent does between one of your messages and the next. One tool call is not a turn.
Several sessions in one workspace is normal and share the branch on purpose. Several workspaces is how you keep work independently reviewable. Do not reach for a second workspace when what you want is a second chat.

Which agents actually run

Starting a session

Options at launch: --model, --plan-mode, --fast-mode, --approval-mode, --reasoning-mode, --effort-mode, and for Codex --codex-personality, --codex-goals, --codex-skills. They are passed through to the harness, so the accepted values are the provider’s, not Archductor’s. session open prints or runs the equivalent command for an external terminal instead of a managed session — useful when you want the agent’s own TUI.

Queueing versus steering

This is the part worth internalising. Messages go into a durable input queue owned by the daemon. They are not typed into a terminal. Consequences:
  • A message survives the app closing, the daemon restarting, and you switching machines.
  • It is delivered when the agent is ready for it, not into the middle of a running turn — so you can queue three follow-ups while the agent works and they arrive in order, each as its own turn.
Steering is the opposite: deliver now, into the turn in flight.
In the app that is mod+enter. Use it to redirect an agent that has gone the wrong way; use the normal queue for everything else. Interrupting a good turn to add a nice-to-have wastes the turn. archductor archcar interrupt <session-id> stops the turn without sending anything. Input kinds — user, review-prompt, control-command, raw-terminal — control how the input is framed. You rarely set them by hand; the app uses them when staging a review comment or a failing check into a session, which is the feature that replaces copy-pasting diffs into chat.

Permission prompts

When an agent asks to do something that needs approval, the request becomes an interaction the daemon holds. It does not block on a TUI you have to be looking at.
--always records the approval so the same request is not asked again. deny --message is the useful form: the message reaches the agent, so it can choose a different approach rather than just failing.

Plan mode

Plan mode puts a chat into research-and-propose instead of build. You get a plan to read before any file is written.
In the app: mod+shift+tab to toggle, mod+shift+enter to approve. Worth using by default for anything touching more than a couple of files — reading a plan is much cheaper than reading a diff you then have to reject. Plans the agent saves live under the workspace’s .context/plans/ and are listed by archductor archcar context-plans <workspace>.

Mid-session controls

Switching model mid-thread is the common one: start cheap, escalate when the agent is clearly out of its depth, without losing the conversation.

Keeping track of who did what

With several sessions in one workspace, “which agent wrote this” stops being obvious. The daemon tracks it.
A snapshot writes a durable patch under .context/archductor/contributions/, records the commands the daemon ran, and keeps any risks or blockers you attach. Those risks then appear in the generated PR body, which is the point — the person reviewing should not have to excavate them from chat. Tasks and summaries are the same idea at workspace scale:
context-briefing is the one to hand a fresh agent that is picking up someone else’s workspace.

Background tasks

Fire-and-forget: create the workspace, run the agent, run the checks, write the summary, optionally open the PR — without you watching.
A supervisor thread ticks every 10 seconds and moves the task through pending → running → checking → summarizing → opening_pr → ready, or to failed / cancelled. Liveness comes from real session state, not from guessing at terminal output. The desktop shows an OS notification on ready and failed. --agent provider[=prompt] (repeatable) runs additional agents in the same workspace, each with its own session and optionally its own prompt. All of them link to the workspace task, so per-agent provenance still works.
Background tasks run Codex and Claude only. A shell has no idle signal, so there is nothing to advance the task on.
--no-checks skips the repository’s configured checks. --open-pr opens a draft; add --ready-pr for ready-for-review.

MCP

Archductor is an MCP server, so an agent can query and drive Archductor itself.
Two profiles, for two different jobs:
  • full — an external client driving Archductor: workspaces, tasks, sessions, prompts, summaries, context, changes and diffs, checks, review status, PR draft and create, background tasks.
  • session — what an agent needs to keep its own workspace context current, and nothing else: set_workspace_context, get_context_briefing, get_summary, list_tasks, create_task, update_task. This is the right default for mcp register, because an agent that can archive its own workspace is a hazard, not a feature.
Because the tools are archcar requests, an MCP client can drive a remote daemon by pointing it at one — see Running on a server. The server deliberately exposes no presentation state. Layouts, panel positions, and theme are not MCP tools.

Skills and MCP servers across agents

Different agents keep skills and MCP servers in different places, so installing something in one does not give it to the others. sync fixes that with a union: whatever any provider has, every selected provider gets.
It only ever adds and overwrites; nothing is deleted, and any file it replaces is copied to <name>.archductor-backup first. Run sync-plan before sync — the preview is the whole point of them being separate commands.

Known rough edges

  • Terminal rendering handles common ANSI and control redraws but is not a full terminal emulator. Programs that assume one may render wrong.
  • Pull-request review-thread resolve and reopen are CLI-only (archductor pr resolve-thread, archductor pr reopen-thread).
  • There is no product policy yet for Codex unsafe-approval or sandbox bypass. Treat approval modes as something you set deliberately, per session.