Nanocoder v1.28.0 - ACP for Zed, slimmer tool surface, session resume, copy command Nanocoder v1.28.0 introduces an Agent Client Protocol server enabling native integration with editors like Zed, consolidates its built-in tool surface from 33 to 19 tools with automatic profile selection, and adds session resume functionality. The update also includes structured tool-result validation, API-reported context usage, a skill linter, and new provider support, all developed by the non-profit Nano Collective community. Nanocoder v1.28.0 is out. Headline additions: an Agent Client Protocol server so editors like Zed can drive Nanocoder natively, a consolidation of the built-in tool surface from 33 tools down to 19 with automatic profile selection, and session resume that replays the full message and tool-call history into the chat view. Underneath: structured tool-result validation, API-reported context usage, a skill linter, two new first-class providers, and a long list of fixes for local-model workflows. Built by the Nano Collective https://nanocollective.org - a community collective building AI tooling not for profit, but for the community. Full changelog lives in the repo at https://github.com/Nano-Collective/nanocoder https://github.com/Nano-Collective/nanocoder . Agent Client Protocol ACP for Zed and other editors Nanocoder can now run as an Agent Client Protocol https://agentclientprotocol.com agent: nanocoder --acp When launched with --acp , Nanocoder speaks JSON-RPC over stdin/stdout and the editor becomes the UI. Streaming text, tool cards, before/after diffs for string replace and write file , permission prompts, model switching, and ask user options all render in the editor instead of the terminal. The four development modes normal , auto-accept , yolo , plan are exposed as session modes selectable from the editor; sessions start in auto-accept . The new module lives at source/acp/ and covers the agent, server, session, conversation loop, content conversion, capability negotiation, and permission handling. Thanks to @Avtrkrb. Closes 529. Follow-up work added the missing ACP docs, kept the parallel tool-execution loop in sync with the plain shell, and made NANOCODER MAX TURNS configurable with a raised default so long ACP and plain-mode runs are not cut short mid-task. Setup in Zed is two lines in settings.json : { "agent servers": { "Nanocoder": { "command": "nanocoder", "args": "--acp" } } } Full setup notes and limitations in-memory session history across editor restarts, selection-only ask user , no image or audio processing are in the ACP docs at https://github.com/Nano-Collective/nanocoder https://github.com/Nano-Collective/nanocoder . Tool surface consolidated: 33 down to 19 The built-in tool surface has been consolidated from 33 tools down to 19, with a new auto-detected tune profile as the default. The headline shape changes: Tasks collapse from four tools into a single write tasks that replaces the whole list. No IDs for the model to juggle, just a current state. File ops merge delete , move , copy , and create directory into one file op . Git shrinks from eleven tools to six: status , diff , log , add , commit , pr . Rarer operations flow through execute bash . On top of the consolidation, the auto tune profile is now the default. It infers full , minimal , or nano from the active model's parameter count, so a small local model automatically gets the slim tool set and shortened prompt while a cloud model is unchanged. The profile re-resolves live on model switch and is surfaced in the input indicator e.g. tune: nano auto . /usage and the context indicator rebuild from the live tune, mode, and model with the profile-filtered tool count, so the numbers reflect what is actually loaded. Roughly 6.3k lines were removed across this work. Structured tool results and single-source validation Tool arguments are now type-checked against each tool's JSON schema at the execution boundary schema-validate.ts . A malformed model output returns a clear, field-level error the model can self-correct from instead of being coerced at the render layer. Validation runs through a single withValidation seam shared by both the native and XML-fallback execution paths, ahead of any per-tool validator. Approval policy is centralised the same way, and the old global mode context is removed. The current development mode including a mid-run switch via Shift+Tab is honoured consistently across the main loop and subagents. Subagents no longer capture normal once at startup and silently ignore a later switch. Session resume with full history replay Resuming a saved session now replays the message and tool-call history into the chat view via a new session-history-renderer , so you pick up exactly where you left off with the conversation visible rather than an empty screen. Companion fixes resolved an autosave race, a history-truncation edge case, and resume-after-save paths, all with regression coverage. Thanks to @akramcodez. Closes 545. /copy for the last assistant response A new /copy slash command copies the most recent assistant response to the system clipboard. Cross-platform via clipboardy pbcopy on macOS, xclip on Linux, clip.exe on Windows . Surfaces a clear warning when there is no assistant message and a real error when the clipboard write fails. Safer local-model defaults Two additions aimed squarely at smaller local models running unattended: Read-before-edit guards. string replace and write file now require the file to have been read first. A blind edit to a never-read file is rejected at the tool boundary. Tool-call loop detection. A tool-signature tracker detects a model repeating the same tool call in a tight loop and breaks the cycle. Both make local models materially safer to leave running on their own. Skill linter and command template ergonomics A new skill linter - /skills check