Releases: Nano-Collective/nanocoder
nanocoder v1.23.0
What's Changed
-
Added
ask_usertool for interactive question prompts. The LLM can now present the user with a question and selectable options during a conversation, returning their answer to guide the next step. Uses a global question-queue to bridge the tool's suspended Promise with the Ink UI component. -
Added per-project cron scheduler for running AI tasks on a schedule. Schedule files live in
.nanocoder/schedules/as markdown prompts with YAML frontmatter, managed via the/schedulecommand (create,add,remove,list,logs,start). Includes cron expression parsing, sequential job queue with deduplication, dedicated scheduler mode with auto-accept, and run history logging. -
Added centralized graceful shutdown system. A
ShutdownManagernow coordinates cleanup of all services (VS Code server, MCP client, LSP manager, health monitor, logger) on exit, preventing orphaned child processes and dangling connections. Configurable viaNANOCODER_DEFAULT_SHUTDOWN_TIMEOUTenv variable. Closes #239. -
Added file operation tools:
delete_file,move_file,create_directory, andcopy_file. Reorganized existing file tools into afile-ops/directory group. -
Added readline keybind support to text input. Replaces
ink-text-inputwith a customTextInputcomponent supporting Ctrl+W (delete word), Ctrl+U (kill to start), Ctrl+K (kill to end), Ctrl+A/E (jump to start/end), and Ctrl+B/F (move char). Closes #354. -
Added
/context-maxcommand andNANOCODER_CONTEXT_LIMITenv variable for manual context length override on models not listed on models.dev. Resolution order: session override > env variable > models.dev > null. Closes #379. -
Added
/idecommand matching the--vscodeflag for toggling VS Code integration from within a session. -
Added persistent context percentage display in the mode indicator, replacing the previous context checker component.
-
Added
includeandpathparameters tosearch_file_contentstool for scoping searches to specific file patterns and directories. -
Added Kanagawa theme.
-
Refactored the skills system into custom commands, eliminating redundant parsers, loaders, and test suites. Commands gain optional skill-like fields (
tags,triggers,estimated-tokens,resources) for auto-injection and relevance scoring. The/skillscommand is removed and its functionality absorbed into/commandswith new subcommands (show,refresh). Thanks to @yashksaini-coder for the initial skills implementation in PR #370. -
V2 type-safe tool system overhaul with defensive parsing. Implements a three-tiered defense system for handling chaotic LLM outputs, preventing crashes from non-string responses and enabling robust self-correction. Includes universal type safety with
ensureString(), response normalization, confidence system inversion, ghost echo deduplication, and AI SDK contract fixes. Local LLM experience is now significantly more stable. Thanks to @cleyesode. Closes #362. -
Fix: XML parser now uses optimistic matching for consistency with the JSON parser. Thanks to @cleyesode.
-
Fix: Bash tool now emits progress immediately on stdout/stderr data instead of waiting for the 500ms timer, so fast-completing commands show streaming output.
-
Fix: Recognize
127.0.0.1as a local server URL and tighten error classification. Ollama users configuring127.0.0.1instead oflocalhostno longer experience misleading connection errors. Replaced broadconnectsubstring match with specific error codes to prevent misclassifying "disconnect"/"reconnect". Closes #366. -
Fix: Skip loading git tools when not inside a git repository.
-
Fix: Strip ANSI escape codes before running regex matching in tool formatters.
-
Fix: Gap in layout during auto-compact.
-
Fix: Hardened
write_filevalidation and MCP client type safety. -
Fix: Use local
TextInputcomponent instead of the missingink-text-inputpackage. -
Fix(mcp): Use Python-based
mcp-server-fetchinstead of non-existent npm package. -
Security: Semgrep and audit fixes.
-
Dependency updates:
ai6.0.95,@ai-sdk/anthropic3.0.46,@ai-sdk/google3.0.30,undici7.22.0,sonic-boom4.2.1.
If there are any problems, feedback or thoughts please drop an issue or message us through Discord! Thank you for using Nanocoder. 🙌
Installation
npm install -g @nanocollective/nanocoderUsage
nanocoderFull Changelog: v1.22.5...v1.23.0
nanocoder v1.22.5
What's Changed
-
Added MiniMax Coding Plan and GLM-5 to provider templates in the configuration wizard.
-
Fix: Model context limit lookups now use models.dev as the primary source instead of the hardcoded fallback table. This prevents stale hardcoded values from overriding accurate upstream data. The hardcoded table remains as an offline-only fallback. Also fixes greedy key matching where shorter keys like
mixtralwould match beforemixtral:8x22b, and replaces first-match name lookups with scored matching for more accurate results. -
Fix: Binary and excessively large files tagged with
@no longer pollute the LLM context window with unreadable content. -
Fix: Diff preview panel no longer steals terminal focus from the active input.
-
Fix: Reduced verbosity of the
string_replaceerror formatter output. -
Fix: Reject null and non-object arguments in JSON tool calls, preventing formatter crashes from malformed tool call arguments. Thanks to @cleyesode.
-
Fix: Restored
formatErrorusage for validation and execution errors. -
Dependency updates:
ink-gradient4.0.0,react19.2.4,@nanocollective/get-md1.1.1,@ai-sdk/anthropic3.0.43,pino10.3.1,@types/react19.2.14.
Installation
npm install -g @nanocollective/nanocoderUsage
nanocoderFull Changelog: v1.22.4...v1.22.5
nanocoder v1.22.4
What's Changed
-
Security: Tool validators now run inside the AI SDK's auto-execution loop. Previously, tools with
needsApproval: false(likeread_file) were auto-executed by the AI SDK'sgenerateTextwithout any path validation, allowing the model to read or write files outside the project directory using absolute or~paths. Validators are now wrapped into each tool'sexecutefunction at registration time, ensuring validation runs in all code paths. -
Security: Reject home directory shorthand (
~) in file path validation. Paths starting with~are not expanded by Node.js and could bypass project boundary checks. -
Fix: Tab characters in code blocks within assistant messages now render at 2-space width instead of the terminal default of 8 spaces. This prevents long lines from wrapping prematurely and eliminates the blocky visual effect on messages containing indented code.
-
Fix:
normalizeIndentationno longer short-circuits when the minimum indent is 0. Previously, if any line in the context window had zero indentation, raw tab characters passed through to the terminal unchanged, rendering at 8-space width instring_replacediff previews.
Installation
npm install -g @nanocollective/nanocoderUsage
nanocoderFull Changelog: v1.22.3...v1.22.4
nanocoder v1.22.3
What's Changed
-
Fix: Removed tool call deduplication from JSON parser that silently dropped duplicate tool calls, breaking the 1:1 pairing between tool calls and results expected by AI SDK. This caused "Tool result is missing for tool call" errors that would end the agent's turn prematurely. Consolidated three overlapping regex patterns into a single comprehensive pattern to prevent duplicate matches. Thanks to @cleyesode.
-
Fix: Added missing capture group for arguments in the consolidated JSON tool call regex pattern, which caused inline tool calls to have empty arguments instead of actual parsed values.
-
Fix: When the model batched read-only and write tools in a single response (e.g.
read_file+string_replace), the auto-executed read tools would recurse into the next conversation turn, abandoning the confirmation-needed write tools. This left orphanedtool_useblocks without matchingtool_resultentries, triggering intermittent "Tool result is missing for tool call" errors with the Anthropic provider. -
Dependency updates:
@ai-sdk/openai-compatible2.0.27,undici7.21.0,@biomejs/biome2.3.14,@types/vscode1.109.0,@types/node25.2.1.
Installation
npm install -g @nanocollective/nanocoderUsage
nanocoderFull Changelog: v1.22.2...v1.22.3
nanocoder v1.22.2
What's Changed
- Fix: Markdown tables in assistant messages were rendered at full terminal width instead of accounting for the message box border and padding, causing broken box-drawing characters when lines wrapped.
Installation
npm install -g @nanocollective/nanocoderUsage
nanocoderFull Changelog: v1.22.1...v1.22.2
nanocoder v1.22.1
What's Changed
-
Added native Anthropic SDK support via
@ai-sdk/anthropicpackage. The Anthropic Claude provider template now usessdkProvider: 'anthropic'for direct API integration instead of the OpenAI-compatible wrapper. -
Fixed Kimi Code provider template to use the native
@ai-sdk/anthropicSDK with correct base URL and configuration passthrough. -
Fix: User message token count now reflects the full assembled content including pasted content and tagged file contents, instead of only counting the placeholder text.
-
Fix: Removed aggressive tool call deduplication that silently dropped duplicate tool call IDs and identical function signatures. This could cause "Tool result is missing for tool call" errors with providers like Anthropic that strictly validate tool call/result pairing.
Installation
npm install -g @nanocollective/nanocoderUsage
nanocoderFull Changelog: v1.22.0...v1.22.1
nanocoder v1.22.0
What's Changed
-
Added
/explorercommand for interactive file browsing with tree view navigation, file preview with syntax highlighting, multi-file selection, search mode, and VS Code integration. Closes #298. -
Added task management tools (
create_task,list_tasks,update_task,delete_task) with/tasksslash command for models to track and manage progress on complex work. Tasks persist in.nanocoder/tasks.jsonand are automatically cleared on CLI boot and/clearcommand. -
Added
/settingscommand for interactive command menu to configure UI theme and shapes without editing config files directly. -
Added
sdkProviderconfiguration option for native Google Gemini support. This fixes the "missing thought_signature" error with Gemini 3 models by using the@ai-sdk/googlepackage. Closes #302. -
Added custom headers support in provider configuration. This enables authentication through tunnels like Cloudflare. Thanks to @nicolalamacchia.
-
Added Kimi Code provider template in configuration wizard.
-
Added new themes with updated user input and user message styling for better visual clarity and consistency.
-
Added token count display after messages and completion message to provide visibility into context usage throughout conversations.
-
Refactored git tools for better consistency, improved error handling, standardized parameter handling across all git operations, and enhanced user feedback messages.
-
Added line truncation in
write_fileandstring_replaceformatters to prevent excessive output from files with very long lines and neaten user experience on narrow terminals. -
Fix:
/usagecommand crash when context data is unavailable. -
Fix: String replace error handling for edge cases.
-
Fix: Multiple security audit issues resolved.
-
Fix: Various styling improvements across components.
-
Fix: Dependency lockfile issues resolved.
If there are any problems, feedback or thoughts please drop an issue or message us through Discord! Thank you for using Nanocoder. 🙌
Installation
npm install -g @nanocollective/nanocoderUsage
nanocoderFull Changelog: v1.21.0...v1.22.0
nanocoder v1.21.0
What's Changed
-
Added
/compactcommand for context compression with--restoreflag support to restore messages from backup. The command now includes auto-compact functionality, consistent token counting, and improved compression for very long messages. Thanks to @Pahari47. -
Added hierarchical configuration loading for both provider configs and MCP servers. Local project configurations now properly override global settings, and Claude Code's object-style MCP configuration format is now supported. Thanks to @Avtrkrb.
-
Added
alwaysAllowconfiguration option for MCP servers to auto-approve trusted tools without confirmation prompts. Thanks to @namar0x0309. -
Added automatic tool support error detection and retry mechanism. Models that don't support function calling are now detected and requests automatically retry without tools. Thanks to @ThomasBrugman.
-
Added
--versionand--helpCLI command options for quick reference. Thanks to @Avtrkrb. -
Added
/quitcommand as an alternative way to exit Nanocoder. Thanks to @Avtrkrb. -
Added
/nanocoder-shapecommand for selecting branding font styles. -
Added keyboard shortcuts documentation to README.
-
Renamed
/setup-configto/setup-providersfor clearer naming. -
Improved
/mcpcommand modal with better colors and title formatting. Thanks to @Avtrkrb. -
Improved
/helpcommand title heading styling. Thanks to @Avtrkrb. -
Added CLI test harness for non-interactive mode testing. Thanks to @akramcodez.
-
Added comprehensive test suite for tool error detection. Thanks to @ThomasBrugman.
-
Added
DisableToolModelsdocumentation to README. Thanks to @ThomasBrugman. -
Fix: Resolved bash tool keeping processes alive after command completion.
-
Fix: Corrected log directory paths and enabled file logging in production.
-
Fix: Improved deprecation message for MCP config to display correct config directory instead of hardcoded Linux path. Thanks to @Avtrkrb.
-
Fix: Resolved shell command security scanning alerts built from environment values. Thanks to @Avtrkrb.
-
Fix: Security audit dependencies updated.
If there are any problems, feedback or thoughts please drop an issue or message us through Discord! Thank you for using Nanocoder. 🙌
Installation
npm install -g @nanocollective/nanocoderUsage
nanocoderFull Changelog: v1.20.4...v1.21.0
nanocoder v1.20.4
What's Changed
-
Fixed configuration wizard blocking users from entering HTTP URLs for remote Ollama servers. The wizard now allows any valid HTTP/HTTPS URL without requiring local network addresses.
-
Fixed
@modelcontextprotocol/sdkdependency version to resolve npm audit security issue. -
Fixed TLS certificate errors when using
uvxMCP servers behind corporate proxies. Nanocoder now automatically adds--native-tlsto uvx commands to use system certificates instead of rustls.
If there are any problems, feedback or thoughts please drop an issue or message us through Discord! Thank you for using Nanocoder. 🙌
Installation
npm install -g @nanocollective/nanocoderUsage
nanocoderFull Changelog: v1.20.3...v1.20.4
nanocoder v1.20.3
What's Changed
-
Fixed
search_file_contentsreturning excessive tokens by truncating long matching lines to 300 characters. Previously, searching in files with long lines (minified JS, base64 data, etc.) could return ~100k tokens for just 30 matches. -
Added validation to
read_fileto reject minified/binary files (lines >10,000 characters). These files consume excessive tokens without providing useful information to the model. Usemetadata_only=trueto still check file properties. -
Fixed
web_searchresult count display showing mismatched values (e.g., "10 / 5 results"). The formatter now correctly uses the same default as the search execution. -
Improved
web_searchandfetch_urlformatter layouts to matchexecute_bashstyle with consistent column alignment and spacing.
If there are any problems, feedback or thoughts please drop an issue or message us through Discord! Thank you for using Nanocoder. 🙌
Installation
npm install -g @nanocollective/nanocoderUsage
nanocoderFull Changelog: v1.20.2...v1.20.3