Product tour

The private AI coding agent, as it ships.

What Topsoil actually shows you, surface by surface, starting with the terminal and the editor. The same agent, the same permission model and the same privacy posture in each one.

Terminal · macOS, Windows, Linux

Terminal AI coding agent for bastions and build servers.

On a build server, a jump host or a locked-down workstation, a desktop application is not an option. Same models, same gates, same project context — in a terminal.

jordan@route-planner — topsoil models
$ topsoil models
Models in us-east-1 (refreshed now)

OpenAI
  openai.gpt-5.6-terra              GPT-5.6 Terra         tools · docs
  openai.gpt-5.4                    GPT-5.4               tools · docs

Anthropic
* us.anthropic.claude-sonnet-4-5    US Claude Sonnet 4.5  tools · docs · images
  us.anthropic.claude-opus-4-5      US Claude Opus 4.5    tools · docs · images

xAI
  us-gov.xai.grok-4.6               US-GOV Grok 4.6       tools · docs · images

Amazon
  us.amazon.nova-pro-v1:0           US Nova Pro           tools · docs · images

* default model     tools / docs / images: what the CLI sends

Models come from your account. Enable a family and it appears here. The default is marked; /model opens a scrollable picker rather than asking for an id.

jordan@route-planner — topsoil
Topsoil  ·  us.anthropic.claude-sonnet-4-5  ·  act/default  ~/Projects/route-planner

› Explain the stale ETA cache and propose a fix

· search     etaCache                  4 matches
· read       src/eta/cache.ts          41 lines
· read       src/eta/reroute.ts        28 lines

The cache key is route.id only, and a reroute keeps the same id while it changes the
stops, so the next request serves the old entry until the five-minute TTL
runs out.

Fix — add the route's revision to the key:

  const key = `${route.id}:${route.revision}`;

Review patch  src/eta/cache.ts  (+1 −1)
  −  const entry = etaCache.get(route.id);
  +  const entry = etaCache.get(`${route.id}:${route.revision}`);

  y accept  ·  n reject  ·  a always this path  ·  esc stop the turn

› Ask anything · / for commands · @ for files

Real work, and the same gate. Search the repository, read the file, explain the defect, propose the change — and the patch waits for a keystroke before it is written.

Topsoil 1.3.4 in a terminal on the harbor-rates service: a three-step plan, grep and read_file on the sliding-window limiter, the root cause explained, and a permission card asking to add a regression test, with Allow once, Deny and Always allow.

Plan, read, then explain. Asked why Pro tenants get 429s after a quiet period, Topsoil plans three steps, greps and reads the limiter, names the root cause, and asks before writing a regression test.

Topsoil 1.3.4 in a terminal, working in its own git worktree: the new regression test is added, npm test reproduces the bug with 4 passing and 1 failing, and a permission card shows the red and green fix to src/limiter/sliding-window.ts with Allow once, Deny and Always allow.

Reproduce first, and nothing is written without a keystroke. The new test fails on npm test, then apply_patch shows the exact lines of the fix — y allows it once, a always allows it for the session.

Topsoil 1.3.4 after the fix: all 5 tests pass, a table lists the three files changed, and Topsoil confirms in a scratch copy that the new test fails without the change.

Then it proves the fix. All five tests pass, the change is summarized by file, and Topsoil checks in a scratch copy that the new test fails without the change.

Topsoil 1.3.4 reviewing its own change before a pull request: ready to open, 0 blocking, 2 suggestions and 1 follow-up, each anchored to a file and line.

A review before the pull request. Ask for a review and Topsoil reads its own diff against main: ready to open, nothing blocking, with each suggestion anchored to a file and line.

The whole run, in seven frames. Plan, permission, the failing test and the fix, the passing suite, the review and the pull request description. 460 KB, and it only loads when you press play.

jordan@route-planner — topsoil
› /goal --budget 1 the ETA cache tests pass

Stages: explore, design, plan, implement, verify, review, document

…

Topsoil run budget exceeded. This run spent $1.20 of its $1.00 run budget in 2
attempts. The work so far is on topsoil/goal-x. Raise it with
TOPSOIL_TASK_BUDGET_USD (or taskBudgetUsd in ~/.topsoil/config.json), then run it
again. A /goal can also be started with --budget <amount>.

Hand over a piece of work, with a ceiling. /task, /goal and /loop plan first, work in an isolated worktree and verify before they propose. The first line lists the stages the run will go through; a budget stop says which budget, where the work is, and the process exits with code 3, so a scheduler can tell it from a failure. The messages are Topsoil's; the amounts and the branch are an example.

Delivery

From backlog to pull request with isolated git worktrees.

A walkthrough of /task, from an issue to a pull request a person reviews.

  1. Pick the work. /tasks lists what Topsoil can see in GitHub Issues, or in Jira Data Center inside your network. /task <id> takes one.
  2. Explore and design. Topsoil finds where the change belongs and picks an approach, writing nothing.
  3. Approve the plan. The file-by-file plan is shown to you once. Nothing is written before you approve.
  4. Implement in a worktree. The change is made on its own topsoil/ branch in its own git worktree; your working tree is untouched.
  5. Verify. The project’s checks run, and new tests must fail without the change before verify can pass.
  6. Review and document. A second model, which can be from another vendor, reviews; its findings and how the change was verified go into the pull request.
  7. A person merges. The pull request opens on GitHub or Bitbucket Data Center. Topsoil does not merge it.

Editor · VS Code

VS Code AI agent bridge (diffs in your editor).

There is deliberately no Topsoil panel in VS Code. The agent keeps running as topsoil in the integrated terminal, and the extension lends it what only the editor knows.

  • Unsaved buffers and your selection, so "fix this" means the code actually on screen.
  • Open files and diagnostics, so the agent sees what the language server sees.
  • A diff after the turn, opened on the files it wrote.
  • Installs from the desktop app's Settings or topsoil vscode install — it ships inside the products you already have, not through the Marketplace.

One agent, three ways in. Adding the editor does not add another host to secure, another log to collect, or another copy of your source in flight.

VS Code on macOS with Topsoil 1.3.4: a side-by-side diff of the new test and the limiter fix, opened by the extension, above the integrated terminal where the agent runs in the fix-idle-429 worktree.

The diff opens itself. topsoil -w fix-idle-429 runs in the integrated terminal on its own git worktree; when the turn ends, the extension opens a side-by-side diff of the files it wrote.

Your checkout stays clean

Source Control shows two repositories: your main checkout with no changes, and the agent's worktree holding the fix. Commit there and merge worktree-fix-idle-429 with plain git when you are satisfied — Topsoil never merges on its own.

VS Code Source Control after a Topsoil turn: the main harbor-rates checkout has no changes, and the fix-idle-429 worktree holds the three changed files ready to commit.

Desktop · macOS and Windows

A workspace, not a chat box.

Context you can audit

The side panel is the answer to "what did it actually read?" — the working folder, each attached file, how much of the window is spent and what the turn cost, all while the turn is happening.

Route Planner · Context
Working folder9 files

~/Projects/route-planner

  • src/eta/cache.ts
  • src/eta/reroute.ts
  • src/server.ts
Project files3
  • architecture-overview.md ~186 tokens
  • depot-sla.csv ~49 tokens
  • oncall-runbook.md ~150 tokens
~462 / 50k tokens1% of budget
The Topsoil desktop app with the fix awaiting approval: the regression test has failed, and the fix waits as a red and green patch with Accept once, Reject and Edit new text.

The fix, awaiting approval. The new test has failed, so the bug is proven; the fix waits as a patch until you choose Accept once, Reject or edit the new text. The working folder stays in view on the right, and a shell and terminals are one click away in the Console.

Artifacts
$ /report Route Planner 2.4 readiness
write document docs/route-planner-2.4-readiness.pdf
  • route-planner-2.4-readiness.pdf 3.31 KB
  • q3-proposal-summary.docx 18 KB
  • depot-readiness.xlsx 24 KB

Saved into the working folder and listed under Artifacts.

Real files, not just answers

/report, /memo and /sheet write PDF, Word and Excel into the working folder. Diagrams are rendered. A library of your own documents, held in your own storage, is what the retrieval runs against.

Control

Approve, deny or always allow: permission prompts.

Review patch
src/eta/cache.ts (+1 −1)
−  const entry = etaCache.get(route.id);+  const entry = etaCache.get(`${route.id}:${route.revision}`);
Accept once1 Rejectesc Always this path Always this tool3

The diff arrives before the write. The scope of your answer is on the buttons: once, this path, this tool, or the rest of the chat.

Mode
  • ✓ Ask before edits
    Topsoil asks before it changes files, runs commands, or uses the network.
  • ✓ Edit automatically
    File changes in this folder apply without asking. Commands and the network still ask.
  • ✓ Plan mode
    Topsoil only reads and researches, then proposes a plan for you to approve.

Shift+Tab in the message box switches modes.

Three modes, stated plainly. Plan mode only reads until you approve what it proposes.

Settings · Agent features
  • ✓ File edits
    apply_patch, write_file, notebook_edit, and saved plans.
  • ✓ Shell commands
    run_command, PowerShell, background jobs, and /sandbox.
  • ✓ Git
    git status/diff/log/commit, pull requests, and worktrees.
  • ✓ MCP servers
    Start stdio/HTTP/WebSocket servers and their tools, prompts and skills.
  • ✓ Language servers
    LSP diagnostics and code navigation after edits.
  • ✓ Subagents and tasks
    explore/implement/review/verify, delegate, and background tasks.

Agent tools can read and modify files, run commands, and start local servers. Only enable for projects you trust.

Capabilities are enumerated, not implied

Every agent capability is listed with what it actually permits — which files it may write, which commands it may run, which servers it may start. They are off until someone turns them on, and turning one on is a deliberate act with a confirmation.

That list is also the honest answer to "what can this thing do to my machine?" — a question most AI tools answer with a paragraph of prose.

Get started

See it against your own codebase.

A proof of concept runs in your own AWS account with your models and your material, and ends with findings you can act on.