A concise base prompt
One working sentence by default. Tool rules, mode constraints, and project context are appended only when the run actually uses them.
A local-first coding harness where every prompt, thought, tool call, approval, and diff is a typed event you can inspect — and a running agent you can retune without stopping it.
npx @nervekit/desktop@latestSimulated Nerve run: the user prompt, the agent's reasoning, a read tool call with its bounded output, an approval gate for an edit, the applied diff, a verification command, and the final reply.
Add a retry budget to the run recovery path.
Recovery lives in run-recovery.ts. A budget needs the retry count and the base delay in one place, so both call sites read one constant.
packages/harness/src/run-recovery.tsRead 214 lines
packages/harness/src/run-recovery.ts+12 −3 · retry budget wired into the recovery loop
pnpm test --filter @nervekit/harness -- run-recovery✓ recovery continues from checkpoint (12 tests) Done in 3.2s
Retry budget added: three attempts on a 2s exponential base.
Retune the run while it runs
Model, thinking level, agent mode, permission — change any of them on an active conversation and it applies from the next provider request. The controls below are wired to the stream.
None of these recreate the conversation. The event already streaming finishes under the old settings; the change applies to the next provider request. Plan mode constrains edits to Nerve's plan storage; read-only blocks mutation, execution, and ordinary network.
Simulated Nerve run that reacts to the controls beside it: changing model, thinking, mode, or permission adds a configuration marker to the stream and the next agent turn follows the new settings.
The policy test is flaky — pin it down.
The failure is time-dependent. Freezing the clock before the assertion should make it deterministic.
examples/policy-window.test.tsRead 168 lines
examples/policy-window.test.ts+4 −4 · clock frozen before the assertion
demo test policy-window --repeat 2019 passed · 1 failed on attempt 14 assertion raced a debounce timer
Deflaked: the clock is frozen before the assertion now.
Nothing happens off-screen
Prompts, reasoning, tool calls, results, approvals, and recovery are separate events. Each keeps its evidence, and all of it stays in history.
Tool calls retain the inputs they were given and the bounded output they produced, and both stay inspectable afterwards.
In supervised mode the run is blocked while a review gate is pending. Nothing below the gate executes until you answer it.
Reasoning appears when a provider returns it. Nerve never reconstructs private reasoning a provider withholds.
Add a retry budget to the run recovery path.
promptLocating the recovery entry point before editing anything.
reasoningpackages/harness/src/run-recovery.ts
214 lines · bounded output
doneedit needs review
waitingrun-recovery.ts · +12 −3
Retry budget added: three attempts, 2s exponential base.
replyThe harness stays out of the way
No walls of instructions wrapping every request. A concise base prompt, a small polished tool surface, and constraints enforced in the policy layer — so the model's capability reaches your code intact.
“Work in the current project, use tools safely, and keep responses concise.”nerve-system-prompt.ts · the default base prompt
readgrepfindlseditwritebashpython_execweb_searchweb_fetchtask_startexploreask_usertodos_setOne working sentence by default. Tool rules, mode constraints, and project context are appended only when the run actually uses them.
A compact set of workspace tools with bounded output, so the model spends its tokens on your problem instead of on ceremony.
Plan mode keeps research available and constrains edits to plan storage — in the policy layer, not in paragraphs of instructions.
One workbench, your whole stack
Point Nerve at the workspace that holds your API, web app, and mobile app. It discovers the repositories beneath it and keeps Git, diffs, and pull requests for all of them in one shell.
The workbench is the interface
Real project context stays connected across the conversation, Git, pull requests, and supervised tasks.
Inspect every action
Prompts, reasoning, commands, edits, results, and recovery stay separate and inspectable.


Every change, accounted for
Watch the working tree change as the agent works. Stage, unstage, discard, fetch, pull, push, and sync from the same shell as the conversation.


Review before you merge
Open a pull request, read its summary, inspect files, and see check status without leaving the workbench.


Supervised processes
Run and revisit development servers, builds, and tests with durable output and explicit start, stop, and restart controls.


Tuned defaults, visible seams
Provider failures, context limits, and wrong turns are expected states in Nerve — handled by defaults you can see and change, never by dead ends.
A failed provider call is retried three times on a 2s exponential base before the run is surfaced as failed.
The balanced profile compacts near 80% of context retaining roughly 15%, and auto-continues up to three times.
other profiles: 70/10 · 90/25After a daemon restart, active runs with valid checkpoints become interrupted — and can be continued, not replayed.
Navigate to any earlier entry and continue on a new branch. The previous lineage stays in history.
Cumulative tokens, cache activity, estimated cost, and context fraction in the composer — plus session and weekly subscription windows.
subscription windows: OAuth Anthropic · OpenAI CodexDesktop or browser notifications with independent sounds for questions, plan reviews, approvals, completions, and failures.
Conversation history
The whole conversation is a navigable graph of messages, tool calls, and branches. Zoom into any node to read its arguments and result, then jump to that point or fork a new branch from it.


Wherever the daemon is reachable
Responsive by design
Connect from another device on your LAN and keep conversations, composer controls, and dock panels within reach.
Set up LAN access





Ready when you are
Three steps, no account, and nothing leaves your machine until you ask it to.
npx @nervekit/desktop@latest