by he-yufeng
Minimal AI coding agent (~950 Lines Python) inspired by Claude Code. Works with any LLM. Think nanoGPT for coding agents.
# Add to your Claude Code skills
git clone https://github.com/he-yufeng/NanoCoderLast scanned: 5/30/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-30T15:20:36.923Z",
"npmAuditRan": true,
"pipAuditRan": true
}NanoCoder is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by he-yufeng. Minimal AI coding agent (~950 Lines Python) inspired by Claude Code. Works with any LLM. Think nanoGPT for coding agents. It has 252 GitHub stars.
Yes. NanoCoder passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/he-yufeng/NanoCoder" and add it to your Claude Code skills directory (see the Installation section above).
NanoCoder is primarily written in Python. It is open-source under he-yufeng on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh NanoCoder against similar tools.
No comments yet. Be the first to share your thoughts!
中文 | English | Claude Code Architecture Deep Dive (7 articles)
512,000 lines of TypeScript → 950 lines of Python.
I spent two days reverse-engineering the leaked Claude Code source — all half a million lines. Then I stripped it down to the load-bearing walls and rebuilt them in Python. The result: every key architectural pattern from Claude Code, in a codebase you can read in one sitting.
NanoCoder is not another AI coding tool. It's a blueprint — the nanoGPT of coding agents. Read it, fork it, build your own.
$ nanocoder -m kimi-k2.5
You > read main.py and fix the broken import
> read_file(file_path='main.py')
> edit_file(file_path='main.py', ...)
--- a/main.py
+++ b/main.py
@@ -1 +1 @@
-from utils import halper
+from utils import helper
Fixed: halper → helper.
Claude Code's 512K lines distilled to 7 patterns that actually matter:
| Pattern | Claude Code | NanoCoder |
|---|---|---|
| Search-and-replace editing (unique match + diff) | FileEditTool | tools/edit.py — 70 lines |
| Parallel tool execution | StreamingToolExecutor (530 lines) | agent.py — ThreadPool |
| 3-layer context compression | HISTORY_SNIP → Microcompact → CONTEXT_COLLAPSE | context.py — 145 lines |
| Sub-agent with isolated context | AgentTool (1,397 lines) | tools/agent.py — 50 lines |
| Dangerous command blocking | BashTool (1,143 lines) | tools/bash.py — 95 lines |
| Session persistence | QueryEngine (1,295 lines) | session.py — 65 lines |
| Dynamic system prompt | prompts.ts (914 lines) | prompt.py — 35 lines |
Every pattern is a real, runnable implementation — not a diagram or a blog post.
pip install nanocoderagent
Pick your model — any OpenAI-compatible API works:
# Kimi K2.5
export OPENAI_API_KEY=your-key OPENAI_BASE_URL=https://api.moonshot.ai/v1
nanocoder -m kimi-k2.5
# Claude Opus 4.6 (via OpenRouter)
export OPENAI_API_KEY=your-key OPENAI_BASE_URL=https://openrouter.ai/api/v1
nanocoder -m anthropic/claude-opus-4-6
# OpenAI GPT-5
export OPENAI_API_KEY=sk-...
nanocoder -m gpt-5
# DeepSeek V3
export OPENAI_API_KEY=sk-... OPENAI_BASE_URL=https://api.deepseek.com
nanocoder -m deepseek-chat
# Qwen 3.5
export OPENAI_API_KEY=sk-... OPENAI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
nanocoder -m qwen-max
# Ollama (local)
export OPENAI_API_KEY=ollama OPENAI_BASE_URL=http://localhost:11434/v1
nanocoder -m qwen3:32b
# One-shot mode
nanocoder -p "add error handling to parse_config()"
The whole thing fits in your head:
nanocoder/
├── cli.py REPL + commands 160 lines
├── agent.py Agent loop + parallel tools 120 lines
├── llm.py Streaming client + retry 150 lines
├── context.py 3-layer compression 145 lines
├── session.py Save/resume 65 lines
├── prompt.py System prompt 35 lines
├── config.py Env config 30 lines
└── tools/
├── bash.py Shell + safety + cd tracking 95 lines
├── edit.py Search-replace + diff 70 lines
├── read.py File reading 40 lines
├── write.py File writing 30 lines
├── glob_tool.py File search 35 lines
├── grep.py Content search 65 lines
└── agent.py Sub-agent spawning 50 lines
from nanocoder import Agent, LLM
llm = LLM(model="kimi-k2.5", api_key="your-key", base_url="https://api.moonshot.ai/v1")
agent = Agent(llm=llm)
response = agent.chat("find all TODO comments in this project and list them")
from nanocoder.tools.base import Tool
class HttpTool(Tool):
name = "http"
description = "Fetch a URL."
parameters = {"type": "object", "properties": {"url": {"type": "string"}}, "required": ["url"]}
def execute(self, url: str) -> str:
import urllib.request
return urllib.request.urlopen(url).read().decode()[:5000]
/model <name> Switch model mid-conversation
/compact Compress context (like Claude Code's /compact)
/tokens Token usage
/save Save session to disk
/sessions List saved sessions
/reset Clear history
quit Exit
| Claude Code | Claw-Code | Aider | NanoCoder | |
|---|---|---|---|---|
| Code | 512K lines (closed) | 100K+ lines | 50K+ lines | 1,300 lines |
| Models | Anthropic only | Multi | Multi | Any OpenAI-compatible |
| Readable? | No | Hard | Medium | One afternoon |
| Purpose | Use it | Use it | Use it | Understand it, build yours |
I wrote 7 articles breaking down Claude Code's architecture — the agent loop, tool system, context compression, streaming executor, multi-agent, and 44 hidden feature flags. If you want to understand why NanoCoder is designed this way, start there.
MIT. Fork it, learn from it, ship something better. A mention of this project is appreciated.
Built by Yufeng He · Agentic AI Researcher @ Moonshot AI (Kimi)
Claude Code Source Analysis — 170K+ reads, 6000 bookmarks on Zhihu