Release notes
Nanocoder v1.26.0
What's Changed
BREAKING: Removed redundant
nanocoderTools.alwaysAllowsetting. It duplicated the top-levelalwaysAllowwith no extra behaviour. Move any entries fromnanocoderTools.alwaysAllowto the top-levelalwaysAllowarray inagents.config.json. The deprecatedagents.config.example.jsonhas also been removed.Added nano mode — a third tool profile under
/tunedesigned for the smallest open-weights models or low-end hardware running larger models locally. Strictly more aggressive thanminimal: dropsfind_files,list_directory, andagent; trimsCORE PRINCIPLESandCODING PRACTICES; uses ≤4-lineTASK APPROACH,FILE OPERATIONS, andCONSTRAINTSsections; replaces the verboseSYSTEM INFORMATIONblock with a single-line## SYSTEMline; and omitsAGENTS.mdfrom the prompt by default. Brings the system prompt from ~500–700 tokens (minimal) down to ~150–250 tokens. Includes a new "Nano (low-end hardware)" preset and an Include AGENTS.md toggle.Added reasoning trace support. Reasoning content from models (Codex GPT-5, DeepSeek-R1-style, Anthropic extended thinking, etc.) now streams in real time, renders as a collapsible
Thoughtblock above the response, persists across history, and is included in logs. Toggle expansion withCtrl+R, configure default expansion via the new Display Settings panel, and pin per-session via the tuneexpandedReasoningoption.<think>tags are now stripped on the native tool-calling path so reasoning never leaks into rendered output. Thanks to @Daniel5055. Closes #457.Added refined non-interactive mode. A new
--plainflag streams output suitable for CI pipelines, scripts, and pipes — no Ink rendering, no interactive prompts, deterministic exit codes, and proper handling of stdin/stdout. Includes a dedicatednon-interactive-shellcomponent and full test coverage for the plain transport.Reworked VS Code extension integration. Removed the "Ask Nanocoder" command in favour of a more natural flow: highlighted text and the currently focused file are automatically pulled into Nanocoder as context. Backed by a rewritten extension protocol, a simplified extension entrypoint, a new
useVSCodeServerhook, and tighter UI hooks for the development mode indicator and chat input.Added
/renamecommand for renaming the current chat session. Accessible from the chat input and reflected in the development mode indicator. Thanks to @lordoski.Added
defaultModeconfig option for interactive sessions. Set a starting mode (normal,auto-accept,yolo,plan) inagents.config.jsoninstead of always launching in normal mode. Thanks to @lordoski.Added custom system prompt support via
agents.config.json. Define a project-level system prompt that replaces or augments the built-in prompt sections, with full validation and prompt-builder integration. Closes #487.Added per-provider and per-model context window overrides in
agents.config.jsonviacontextWindowandcontextWindows[model]. New resolution order: session override (/context-max,--context-max) → provider model override → provider default →NANOCODER_CONTEXT_LIMIT→ models.dev / Ollama fallback./usage, status bar, auto-compact, and context reporting all use the active provider config consistently. Closes #455.Added subagent context window overrides so delegated agents can run with a different context limit than the main session. Thanks to @zerone0x.
Added
disabledToolsconfig option inagents.config.jsonto disable specific built-in tools project-wide. Honoured by both the main agent and subagents.Added
--trust-directoryCLI flag to bypass the first-run directory trust prompt for automation. Yolo mode now also skips file path validators in line with its "auto-accept everything" semantics.Added JSON tool fallback mode for non-tool-calling open-weights models (Qwen, Kimi, GLM). The tune menu now cycles through Native ON / OFF (XML) / OFF (JSON), with
formatToolsForJSONPrompt()embedding literal JSON Schema and a JSON branch in the tool-call parser. Native path also gains JSON/XML hallucination recovery:parseToolCalls()is run against text content when the SDK reports notool_calls, andstripEmbeddedToolCallText()removes echoed tool-call text so Ghost Echo no longer leaks into the UI or history. Reference #500.Added
<function=...>format to the tool-call parser for models that emit OpenAI-style function tags.Added Display Settings panel under
/settings("Tool Results and Thinking") with two new toggles: Show Thinking by default (Ctrl+R) and Expand Tool Results by default (Ctrl+O), persisted tonanocoder-preferences.json. Thanks to @cleyesode. Closes #499.Added 12+ new themes to the bundled theme set.
Removed the in-repo release content generator workflow. Release content is now generated from another repo via ContentForest.
Bumped CI and devcontainer toolchain to Node.js 22 + pnpm 11 across
pr-checks.yml,release.yml,update-badges.yml, and.devcontainer/Dockerfile.engines.noderaised to>=22, with apackageManagerfield (pnpm@11.x.x) added topackage.jsonso Corepack pins the pnpm version automatically for both contributors and CI — no more drift, no per-workflowversion:lines.CONTRIBUTING.md/docs/getting-started/installation.md/.devcontainer/README.mdupdated to match. Fixes thenode:sqliteERR_UNKNOWN_BUILTIN_MODULEcrash hit by pnpm 11 on Node 20 runners.Migrated pnpm config from
package.jsontopnpm-workspace.yamlfor pnpm 11 compatibility:overrides,patchedDependencies, and the newallowBuildsblock now live in the workspace file. While migrating, audited and removed all 16 existing version overrides — every one was redundant under current dependency resolution (each transitive resolved to a version already exceeding the override's floor), and removing them leftpnpm auditoutput unchanged.Major spring-clean refactor across the codebase. Extracted shared
oauth-logincommand from the duplicatedcodex-loginandcopilot-loginflows; introduced shareditem-selectorcomponent used bymodel-selectorandprovider-selector; centralisedtool-needs-approvallogic; moved AI SDK error-handling specs into a dedicated subdirectory; tightened logging method factory; and trimmed redundant code paths inconversation-loop,subagent-executor, and the plain shell.Refactored
App.tsxand added missing test coverage for the app container and chat input components.Refactored settings theme selector UX. Replaced the scrollable
SelectInputwith arrow-key navigation, real-time theme preview, and a "Theme Name [n/N]" position indicator. Preferences are only persisted on Enter.Updated the system prompt to encourage subagent use more proactively for complex multi-step tasks.
Strip leading and trailing whitespace from assistant messages so blank lines and stray newlines from the model no longer push content around in the UI.
Fix: Empty model responses now trigger a capped auto-continue instead of crashing or burning tokens forever. Empty-response retry notices are coalesced into a single live counter so the chat history stays readable.
Fix: Surface context-size failures explicitly instead of silently retrying empty responses. Thanks to @zerone0x. Closes #501.
…