Release · Nanocoder · Nano-Collective

Nanocoder v1.30.0

What's new in Nanocoder v1.30.0, released Aug 26, 2026 (). Newer: v1.31.0 (Sep 26, 2026)

Release notes

Nanocoder v1.30.0

What's Changed

  • Added first-class provider template for Groq to the setup wizard.

  • Added first-class provider template for OrcaRouter to the setup wizard.

  • Added a /commit slash command that generates Conventional Commit messages from staged Git diffs using the active LLM client. Thanks to @DeepamJha. Closes #757.

  • Consolidated upload actions under a single '+' menu in the VS Code webview to reduce UI clutter and improve scalability for future attachment types.

  • Added context attachment functionality with UI for file/folder chips and drag-and-drop support.

  • Added Settings Tab to the VS Code extension webview for configuring providers and behavior directly from the UI.

  • list_directory no longer includes file sizes by default — they cost an lstat syscall per file plus output tokens for information that's rarely needed just to orient in a directory. Pass showSizes=true to opt back in, or use read_file with metadata_only=true for a single file's size.

  • Added a per-response token usage and estimated cost indicator. Every assistant message in the CLI now ends with a subtle gray footer showing the provider-reported token count and estimated cost (e.g. Tokens: 4.2k | ~$0.01), computed from models.dev pricing; the cost segment is omitted for local/free models and the footer falls back to the previous client-side estimate when the provider reports no usage. The VS Code extension shows the same indicator under each finished response, fed by the per-turn usage now returned on the ACP prompt response. Note: the estimate prices all input tokens at the standard rate — cache read/write discounts are not factored in, so costs can be overstated for providers with prompt caching. Closes #756.

  • Moved the rest of nanocoder's configuration into the /settings menu, so you can set things up without editing .json files by hand. Settings are grouped into Appearance, Input, Behavior, Providers, MCP, and Advanced tabs. New menu items let you set the default mode, auto-compact, sessions, reasoning traces, tool auto-approval, and a Web Search API key; view your configured providers and MCP servers before opening the setup wizards; open the Tune Model and Connect IDE wizards; and see the active NANOCODER_* environment variables. Advanced also includes an in-app JSON editor for agents.config.json: edit strings with the cursor inside the quotes, flip booleans with the arrow keys, and save atomically (a crash can't leave a half-written file).

  • Sunset /setup-providers and /setup-mcp in favour of /settings. Both retired names still work for now — they open the matching /settings tab with a notice instead of erroring. /settings now takes a tab argument (/settings providers, /settings mcp), MCP has its own settings tab, and provider edits made from settings apply to the running session instead of waiting for the next launch. Selecting a provider or MCP server in settings now opens that entry's edit/delete choice directly, with a separate row for adding a new one.

  • Added editor code lenses to the VS Code extension: every function, method, constructor and class now carries Explain Code and Generate Tests links, and clicking one reveals the chat view and sends that symbol - instruction, file:startLine-endLine and the source, fenced with the document language - as a prompt. Symbols come from the language server, so no per-language parsing is involved, and the lenses can be turned off with nanocoder.codeLens. Long symbols are capped before being inlined, so a lens click on a large class cannot spend a whole context window on one turn. Also fixes a pre-existing hang where sending a message while a tool approval was still pending left the composer spinning forever. Closes #750.

  • Added @ mention autocomplete to the VS Code extension's chat composer: typing @ opens a floating dropdown of workspace files, folders and open editors, and selecting one attaches it as a context chip. Search runs on the extension host, which merges your files.exclude and search.exclude settings into the exclude list so hidden files stay out of the dropdown, and a bare @ lists open editor tabs with no disk I/O. Attached files are now read with a 100 KB cap and binaries are skipped, so a mis-picked lockfile can no longer swallow the context window. Closes #747.

  • Added support for image uploads and pasting in the VS Code extension chat panel, allowing users to send multimodal messages (text + images) to the AI assistant.

  • VS Code extension: Added /copy code and a Ctrl+Alt+Shift+C (Cmd+Alt+Shift+C on macOS) keybinding to copy the last code block from the previous assistant response.

  • Added a copy-to-clipboard button to the VS Code extension's chat panel: hovering over a user prompt or agent response bubble reveals a clipboard icon that copies the raw markdown text and briefly shows a checkmark to confirm. Streamed agent responses always copy the latest in-progress text. Closes #746.

  • execute_bash and custom tools now truncate long output by keeping both the head and the tail (tail-weighted) instead of only the head, so the actionable part of compiler/test-runner output (error list, failure summary, exit status) — which usually lands at the end — isn't discarded.

  • Bound string_replace results to a context window around the edited range.

  • Fixed the Atlas Cloud wizard to store provider-qualified GPT-5.6 model IDs, while preserving compatibility with existing shorthand configurations. Thanks to @RealBhupesh. Closes #803.

  • Bound oversized tool results before they re-enter model context while preserving both the beginning and the actionable tail.

  • Fixed diff_edit returning the entire modified file by limiting results to changed-region previews. Thanks to @RealBhupesh. Closes #795.

  • Added a nanocoder svg pulse effect as a visual loading indicator in vscode extension. It uses the provided svg and css to create a pulsing animation that indicates when the agent is processing a request.

  • Added /commit --copy (short form -c), which copies the generated Conventional Commit message to the system clipboard. If the clipboard is unavailable the message is still shown with a note, rather than being lost, and an unrecognised option now reports a usage line instead of being silently ignored. /commit also shows a spinner while the model generates the message, so the round-trip is no longer a silent pause - commands opt into this by declaring progressLabel.

  • Defer ink and @/app loading in the CLI entry point until the interactive TUI branch, so --acp, --plain and auth paths no longer pay the Ink/App module-graph cost at startup.

  • Fixed bash commands entered with ! keeping the whitespace that followed the prefix, so ! git status now runs git status instead of git status.

  • Fixed the VS Code extension's stop button leaving a request running. Two holes: AcpSession.cancel() aborted the current controller and immediately replaced it with a fresh one, so a cancel that landed before the turn read the signal — the window while the agent is still resolving the prompt's file references — handed the turn an unaborted controller and the stop was lost. The controller is now rotated when a turn begins instead. Separately, the extension never answered the agent's pending permission request when you hit stop: the tool card kept its spinner and Allow/Deny buttons, and because the request stayed on the pending list every later message was refused with "Please approve or deny the pending tool before sending a new message" until the window was reloaded. Stopping (or reconnecting after the agent process restarts) now resolves those requests as cancelled. Thanks to @akramcodez. Closes #864.

  • Fixed Cannot read properties of undefined (reading 'summaryParts') when streaming from GitHub Copilot with reasoning models such as gpt-5.3-codex. Copilot's Responses API proxy rotates the opaque reasoning item id mid-stream while output_index

…