Skip to main content

A small terminal coding agent written in Python

Project description

nanocode

A small terminal coding agent written in Python.

nanocode is pre-1.0 software. Commands, configuration, and tool behavior may change before a stable release.

nanocode screenshot

Features

  • Current turn flow: Interim answers, tool results, and appended user input stay in order during a running task.
  • Latest file state: Read and Edit maintain a current, line-numbered file view with stale-range checks.
  • Anchored edits: line:hash anchors catch stale edits before they touch the wrong code.
  • Working memory: Note keeps the active goal, plan, and known facts separate from noisy tool output.
  • Symbol index: Jump from names to outlines, references, and changed files without searching blindly.
  • Tool recall: Prompt output is bounded, while raw tr.N results remain recallable when needed.
  • Terminal-native UI: Model picking, history search, confirmations, live command output, appended input, and status stay in the terminal.

Install

uv tool install nanocode-cli

For local development:

uv sync --extra dev
uv run nanocode

Usage

Start the CLI:

nanocode

Useful arguments:

  • --config <path>: use a TOML config file.
  • --init-config: create a default config file.
  • --yolo: skip confirmations for mutating tools.
  • -v, --version: show the version.

During a running turn, the +> prompt accepts follow-up input for the next model request.

Commands

  • /help: show commands and tools.
  • /status: show runtime status.
  • /config: show active config.
  • /api [auto|chat|anthropic]: show or set provider API format.
  • /debug [on|off]: toggle model I/O debug traces.
  • /compact: compact context now.
  • /index [force]: sync or rebuild the code symbol index.
  • /provider [NAME]: show or set provider.
  • /model [MODEL]: show or set model.
  • /reason: choose reasoning effort.
  • /set KEY VALUE: set provider/runtime values.
  • /yolo: toggle tool confirmations.
  • /exit, /quit: exit.

Interactive selectors support j/k, arrows, / search, Enter, and Esc. Input supports history, completion, and Ctrl-R history search.

Tools

  • File: Read, LineCount, List, Find, Search.
  • Code index: InspectCode.
  • Edit: Edit creates or patches file content.
  • Shell: Bash, Git.
  • Tool results: Recall.
  • Working notes: Note.

Read, Search, and InspectCode return line anchors where useful. Edit uses current line:hash anchors to reject stale edits.

Configuration

Run:

nanocode --init-config

Default config location is ~/.nanocode/config.toml.

Main fields:

  • [provider] active = "name"
  • [provider.<name>]: url, key, model, api, prompt_cache_key, available_models, reasoning, chat_reasoning, temperature, timeout
  • [paths] data_dir
  • [runtime] shell_timeout, max_agent_steps, max_context_tokens, yolo

api = "auto" chooses between Chat Completions and Anthropic Messages using provider/model profiles. prompt_cache_key = "auto" derives a stable key from provider, model, workspace, and tool schema names.

Context Design

Each model request is built manually from explicit messages. Stable context comes first, conversation stays as messages, working memory follows, and the latest file state is appended at the end.

model request
+--------------------------------------------------+
| system                                           |
|   concise agent contract and tool rules          |
+--------------------------------------------------+
| user                                             |
|   Environment                                   |
+--------------------------------------------------+
| user/assistant                                  |
|   conversation, compacted summaries, tools      |
+--------------------------------------------------+
| user                                             |
|   Memory: goal, plan, known, date               |
+--------------------------------------------------+
| user                                             |
|   FILE STATE: latest Read/Edit file view        |
+--------------------------------------------------+

Core rules:

  • Mid-turn assistant text and appended user input are kept as conversation.
  • Earlier conversation is compacted into an explicit summary when the context grows too large.
  • FILE STATE is updated by successful Read and Edit tools and shows current listed file ranges, with recent files first.
  • Newer file lines overwrite older lines; edit invalidations clear stale ranges.
  • File lines are checked against current file stat or line hash before being shown.
  • Successful Read and Edit tool messages point to FILE STATE instead of repeating file bodies.
  • Other tool outputs are bounded in conversation messages and can be recalled by tr.N.

Safety

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nanocode_cli-0.5.7.tar.gz (54.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nanocode_cli-0.5.7-py3-none-any.whl (52.9 kB view details)

Uploaded Python 3

File details

Details for the file nanocode_cli-0.5.7.tar.gz.

File metadata

  • Download URL: nanocode_cli-0.5.7.tar.gz
  • Upload date:
  • Size: 54.9 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

Hashes for nanocode_cli-0.5.7.tar.gz
Algorithm Hash digest
SHA256 43ade61a43fe8754bd8477458be53903647938eade5ba720de541beb9f6167da
MD5 dabb76e06b28796e0c4f603182144700
BLAKE2b-256 1c7e13ec6e32ec592cd492da81a8ad5dd352b371feb111a8368f5d2247bb9f35

See more details on using hashes here.

File details

Details for the file nanocode_cli-0.5.7-py3-none-any.whl.

File metadata

  • Download URL: nanocode_cli-0.5.7-py3-none-any.whl
  • Upload date:
  • Size: 52.9 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

Hashes for nanocode_cli-0.5.7-py3-none-any.whl
Algorithm Hash digest
SHA256 3cdd399a755d56b4fb5a8c6a02198f01d59fb6efb67c71d333711d3bf560b7b6
MD5 c1b42eae2d169e0d93217b80ab08ebea
BLAKE2b-256 efbe3ddbf08c1c7a935b5cc6098cbb7ab648b9bb21c4feb8f12bf5c9b9a86cb0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page