A small terminal coding agent written in Python
Project description
nanocode-cli
A coding agent I use, maintain, and customize in one Python file.
Editing code and running tools in one interactive session.
Install
Requires Python 3.11+ and uv.
uv tool install nanocode-cli
nanocode --init-config
Configure any OpenAI-compatible provider in ~/.nanocode/config.toml. For example, DeepSeek Flash:
[provider]
active = "default"
[provider.default]
url = "https://api.deepseek.com"
key = "API_KEY"
model = "deepseek-v4-flash"
Replace url, key, and model with the values from your provider.
Then start:
nanocode
Upgrade: nanocode upgrade
Common flags:
--resume [UID]: resume a saved session; without UID, resumes latest--yolo: skip tool confirmations--mcp <selector>: choose which MCP servers to enable--config <path>: use a specific TOML config file
A working personal agent
nanocode does not introduce a new kind of coding agent. It combines familiar features—reading and editing files, running commands, follow-ups, sessions, diffs, MCP, and skills—into a tool I use personally.
It works on real repositories, including its own: I use nanocode to build and maintain nanocode. Everything ships in one Python module, so I can change the behavior directly whenever I want the workflow to work differently.
Resuming a saved session with its conversation and tool history.
Highlights
- Live follow-ups: type while the agent works; queued input joins the next model request or can interrupt the current one.
- Anchored edits: structured edits use
line:hashanchors and reject stale file content instead of guessing. - Resumable sessions: conversation, completed tool calls, diffs, and working memory survive interruption and
--resume. - Built-in diff viewer:
/diffshows changes from the latest user round and the net session result. - Prompt-cache aware: stable instructions, environment, and tool schemas preserve reusable request prefixes.
- Provider compatibility: tested with DeepSeek, OpenCode, Alibaba Cloud, and ZenMux; other OpenAI-compatible endpoints should work in principle. Anthropic APIs, remote/local MCP servers, and Markdown skills are also supported.
Common commands
| Command | Description |
|---|---|
/help |
Show the complete command and tool reference |
/status |
Runtime status: token usage, context %, cache hit rate |
/context |
Model context frame — environment and memory (goal/plan/known/check) |
/diff |
Latest edit diffs and net session diff (interactive, tabbed) |
/compact |
Compact context now |
/mcp |
Manage MCP servers and tools |
/model [MODEL] |
Show or switch model |
/yolo |
Toggle tool confirmations |
Run /help for every command, tool, and shortcut. Interactive selectors support j/k, arrows, / search, Enter, and Esc; input supports history completion and Ctrl-R search.
Configuration
Config file: ~/.nanocode/config.toml
The generated file documents common provider and runtime options. Multiple [provider.<name>] sections are supported; select one with [provider] active = "name". Use /config to inspect the active configuration and /help for runtime commands.
MCP
Connect to Model Context Protocol servers and expose their tools through MCP.
Remote server (HTTP):
[mcp.example]
url = "https://example.com/mcp"
bearer_token_env_var = "EXAMPLE_MCP_TOKEN" # optional
enabled = true
Local server (stdio):
[mcp.filesystem]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
enabled = true
Runtime management: /mcp to view status, /mcp tools [server] to list tools, /mcp login/logout <server> for OAuth.
Skills
Skills are instruction packs the agent loads on demand. Each skill is a folder with a SKILL.md.
- Discovery:
.nanocode/skills/(project) and~/.nanocode/skills/(user); project wins on name clash - Model view: only a name + description index sits in context; the full body loads on
Skill(name)call - Inline reference: type
$namein a message (Tab-completes) to inject that skill's instructions - Bundled scripts:
{skill_dir}expands to the skill's absolute path for running viaBash - Built-in: ships with a
nanocode-helpskill containing a self-contained manual and auto-generated command/tool/config lists
Safety
Use at your own risk. nanocode can edit files and run shell commands in the environment where it is started. It does not provide sandbox protection. Run it inside your own sandbox, container, VM, or other isolated environment when needed.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nanocode_cli-0.9.1.tar.gz.
File metadata
- Download URL: nanocode_cli-0.9.1.tar.gz
- Upload date:
- Size: 117.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6dbed979ba377eeaa1a765b26b721484a6c3900bc114b163afc0ece2d6496a8e
|
|
| MD5 |
bf46dba0c18e2d30580900232cfae778
|
|
| BLAKE2b-256 |
1bf8fe2135aa5d2c796dede7ce63e383c0ee38d3927098f0ce989437177ae178
|
File details
Details for the file nanocode_cli-0.9.1-py3-none-any.whl.
File metadata
- Download URL: nanocode_cli-0.9.1-py3-none-any.whl
- Upload date:
- Size: 113.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
24648e1de2db32f5440ef647d80629997bad01aaaf49de025598469c0cd3cde6
|
|
| MD5 |
0532fe28f2b4b2820352d12b81948b6c
|
|
| BLAKE2b-256 |
55c8afe59297257ac91a1f86bce0e90e95fc782cbaa47ff03a0838465c3c3db6
|