Project
The terminal
Differential rendering, a composed frame, and a prompt that stays responsive while the model streams.
Allowed. The edit landed, and a checkpoint was written first.
An arcturn session. The header names the model and the working directory; a prompt asks for input validation on the /signup handler; Arcturn reads the route and greps for existing validation, then stops and asks permission before editing src/routes/signup.ts, offering allow, deny, or always-allow for src/**.ts. The edit is allowed: it lands as 24 lines added and 3 removed, a checkpoint is recorded for /rewind, LSP reports no errors, and the session's spend so far is shown against its budget.
The prompt
arcturn starts an interactive session rooted at your current working directory. Every tool call — reading a file, editing one, running a shell command — is scoped to that directory.
The header names the model in effect and the root the session is bound to, so the two facts that decide what a turn can do are never more than a glance away.
An arcturn session header naming the model and working directory, with a typed prompt asking for input validation on the signup handler.
A tool call
The TUI renders each tool call as it happens. The same activity is available as data: --output-format json emits the agent’s full event stream as newline-delimited JSON, one AgentEvent per line — exactly the shape the SDK gives you.
Diagnostics always go to stderr, so piping stdout stays clean data either way.
A non-interactive arcturn run printing its event stream as newline-delimited JSON: a turn start, a grep tool call start and end, and a completed run end.
A permission ask
The first time Arcturn needs to write a file or run a shell command, it asks — unless a rule already settles it. Allow once, deny, or persist a rule from the prompt itself: always allow src/**.ts writes that rule to project scope.
In non-interactive mode there is no user to answer, so a check that would have asked is denied automatically, with a note on stderr naming the flag that would have allowed it.
A permission prompt: editing src/routes/signup.ts requires approval, offering allow, deny, or always allow for src/**.ts.
A diff
Under --dry-run, file mutations land in a shadow copy of the workspace instead of your tree. /diff prints one aggregate unified diff across every pending change, paths relative to the workspace root, three lines of context per hunk.
/apply writes them back through a temp-file-plus-rename so an interrupted apply can never leave a half-written file; /discard deletes the shadow tree.
The /diff command printing a unified diff of one pending change to src/app.ts inside the dry-run shadow tree.
A delegated agent
/bg <task> starts a full child agent running your task as its sole prompt, off the foreground thread, and returns immediately. /bg logs, /bg cancel and /bg adopt check back on it later — adopting pulls its final result into the live conversation.
A background agent runs in default permission mode, never yolo: there is nowhere to send a prompt for an unattended agent, so it fails closed by construction. It cannot spawn further agents.
The /bg command starting a background agent to fix a flaky retry test, which reports its agent id and session id and returns immediately.
/rewind
/rewind with no argument opens a picker: one row per turn, newest first, each labelled with the prompt that began it and how many files changed after that point.
Choosing one restores the files that changed after that turn and forks the conversation rather than deleting it. The turns you rewound past stay reachable by resuming the session at their own leaf.
The /rewind picker listing turns newest first with how many files changed after each, then the result line reporting restored and deleted files.
Slash commands
The session-level controls, each with a page of documentation behind it.
- /model
Switch model mid-session, or refresh the live catalog.
- /permissions
Print the current rules and pick a permission mode.
- /diff · /apply · /discard
Review, land or drop the dry-run shadow tree.
- /rewind
Restore files from a turn and fork the conversation.
- /cost
Current spend, the ceiling, and a forecast before you commit.
- /bg · /team
A durable background task, or a coordinated set of agents.
- /workflow
Run a file-defined, deterministic multi-step pipeline.
Every turn counts.
Start a session, watch every tool call ask first, then go back and read exactly what happened.