Release · Nanocoder · Nano-Collective

Nanocoder v1.32.0

What's new in Nanocoder v1.32.0, released Nov 4, 2026 (). This is the latest version.

Release notes

Nanocoder v1.32.0

What's Changed

  • Nanocoder's ACP agent now honours the mcpServers an editor sends on session/new, session/load and session/resume. Stdio and HTTP servers are connected for that session only, so their tools exist in that session (and in subagents it starts) and in no other, and your own MCP configuration is never read or changed. Loading or resuming a session replaces its previous servers, and closing it, or deleting it, disconnects them. A server that fails to connect, or uses SSE, is logged and skipped and the request still succeeds. initialize now reports mcpCapabilities (http). A tool whose name an existing tool already has is skipped, and these tools follow the usual approval rules. Sessions with no servers behave as before.

  • ACP extension requests now use the _ prefix ACP reserves for custom methods: _nanocoder/renameSession, _nanocoder/timeline/list, _nanocoder/timeline/revert and _nanocoder/retryTurn. The bare names still work as deprecated aliases and log a one-time notice, and will be removed in a later release. initialize now lists the exact method and notification names under agentCapabilities._meta.nanocoder, so a client can detect support instead of guessing from the version. A custom request the agent doesn't recognise now fails with the standard "Method not found" (-32601) instead of a plain error. The VS Code extension uses the advertised names and falls back to the bare ones for an older agent.

  • ACP sessions now keep their own provider and model. Changing them with session/set_config_option affects only that session (a running turn finishes on the model it started with), its subagents use the model it is on, the config options returned for a session are its own, and saved sessions record their own provider and model. session/resume and session/load restore the saved provider and model when they are still available, and otherwise stay on the default and report the saved choice in _meta["nanocoder/modelFallback"]. The agent advertises agentCapabilities._meta.nanocoder.perSessionModel.

  • ACP clients can now exempt a session from retention with the new _nanocoder/pinSession extension method (sessionId, pinned). Neither retentionDays nor maxSessions deletes a pinned session, and pinned sessions do not count toward maxSessions; session/delete still removes them. session/list entries report the mark as _meta["nanocoder/pinned"], and initialize reports the effective retentionDays and maxSessions as _meta["nanocoder/retention"].

  • ACP clients can now turn tools off for a single session. Send _meta: {"nanocoder/disabledTools": ["browser"]} on session/new, session/load or session/resume, for example to stop Nanocoder's built-in browser when the editor provides its own. The names are added to the user's own disabledTools, never replacing it, and apply to that session only: the tools are left out of the tool list and the prompt, a call the model makes to one anyway is refused and nothing runs, and subagents the session starts respect the same list. The response _meta reports the list in effect under the same key so a client can verify it. The list is not saved with the session and the user's config files are never read or changed for this. The approval policy the response reports no longer lists a tool the session has turned off. Sessions that send nothing are unchanged.

  • ACP clients can now follow each subagent run on its own. Nanocoder sends a _nanocoder/subagent notification as every run starts, progresses and ends (completed, failed or cancelled), with a stable childRunId, the parentRunId (empty for a child of the turn), the parent agent tool call, the subagent's name, progress counts and its result or error. A new _nanocoder/cancelSubagent request cancels one run by childRunId without ending the turn: the run reports cancelled, the parent agent call gets a "Subagent was cancelled" result and carries on, and cancelling the whole turn still cancels every run. The permission request for a subagent's tool call now names its run under _meta as nanocoder/childRunId. Both are listed in agentCapabilities._meta.nanocoder. Clients that ignore the new notification see the same behaviour as before.

  • Add a read-only _nanocoder/timeline/read ACP method that returns a file's before-image for a timeline checkpoint (text, created or unavailable), and report createdFiles and a per-prompt turnId in _nanocoder/timeline/list entries. truncateToMessageIndex changes with every model round-trip, so turnId is what groups the checkpoints of one prompt; checkpoints recorded before this change have no turnId.

  • Clients can now check and grant directory trust without --trust-directory. nanocoder trust --status [--json] reports whether the folder is trusted (trusted, not-trusted, changed or needs-re-approval), what it will run and its fingerprint, and loads nothing from the folder, including its .env and any preferences file in it. nanocoder trust --grant <fingerprint> saves the folder only if its fingerprint still matches, so a client can save exactly what it showed the user. nanocoder --acp now exits with code 3 when it refuses an untrusted folder, instead of 1, which other startup failures still use. Each trust entry also records a fingerprint version, so an entry saved by another version reads as needing re-approval instead of changed. A project .env can no longer set XDG_CONFIG_HOME or APPDATA, which decide where the trust record is stored. Failures to read or save preferences are now written to the log instead of being shown in the chat.

  • Added a first-class provider template for FutureInfra, an OpenAI-compatible AI API router, to the /settings providers wizard. Selecting it fills in the base URL (https://futureinfra.ai/v1/ai) so only an API key and a model name (for example openai/gpt-4o-mini) are needed.

  • Added an agent evaluation harness under benchmarks/agent/, run with pnpm run test:agent-eval. It measures pass/fail, steps, tokens and cost per task by shelling out to nanocoder --plain --json run, so a released tag can be measured with the same harness as the working tree. Six vendored task fixtures each carry machine-checkable assertions and distractor files, so a run working from degraded context fails rather than merely finishing cheaper; every result records the fixture-set id and a content hash of the fixtures. It is deliberately outside pnpm run test:all, since it needs real model calls. Phase 0 of #1197.

  • Added the Agentic CI/CD Gate: Nanocoder can now review pull requests and investigate (and optionally fix) CI failures without an interactive session.

  • git_pr gains diff, comment, review, checks and logs actions (CI run logs support search and pagination).

  • nanocoder verify --pr <n> [--post-review] runs a headless, read-only review with a semgrep pass over the PR's changed files, printing it or posting it as a PR comment. It refuses an untrusted directory (--trust-directory bypasses this for one run), and its reviewer can never comment, review or open PRs itself, whatever alwaysAllow says.

  • The per-project daemon can watch GitHub Actions for failures (ciWatch in your global preferences, requires the gh CLI), run a read-only verify-ci-investigator subagent, post the diagnosis to the branch's PR, and send OS notifications. Skills can react to failures too with a new ci.job.failed trigger (optional branches filter).

  • nanocoder daemon start --trust <comment-only|auto-fix|full-commit> (or nanocoder.verify.trustLevel

…