从 Claude Code 提取的轻量级 AI 编码代理 SDK。
基于Claude Code 的生产架构重新构建。保留所有能力,去除冗余。开源、完全可定制、生产就绪。
💡 基于 Claude Code — 与驱动 Anthropic 官方编码测试引擎相同,现在作为独立 SDK 提供。
English | 简体中文
npm install codenano
60 秒内构建你自己的 Claude Code。无需 IDE。无限制。
从 Claude Code 的生产引擎中提取。大规模验证,为开发者优化。
3 行代码运行你的第一个代理:
import { createAgent, coreTools } from 'codenano'
const agent = createAgent({
model: 'claude-sonnet-4-6',
tools: coreTools(), // Read, Edit, Write, Glob, Grep, Bash
})
const result = await agent.ask('读取 package.json 并总结它')
console.log(result.text)
就是这样。无需复杂设置。无需配置地狱。只有纯粹的生产力。
for await (const event of agent.stream('这里有什么文件?')) {
if (event.type === 'text') process.stdout.write(event.text)
}
const session = agent.session()
await session.send('读取 main.ts')
await session.send('现在解释它做什么')
const agent = createAgent({
model: 'claude-sonnet-4-6',
tools: coreTools(),
persistence: { enabled: true }, // 保存到 ~/.agent-core/sessions/
})
const session = agent.session()
console.log(session.id) // 保存这个 UUID
await session.send('分析代码库')
// 之后 — 从上次中断处恢复
const resumed = agent.session(session.id)
await resumed.send('我们发现了什么?')
const agent = createAgent({
model: 'claude-sonnet-4-6',
memory: {
autoLoad: true, // 将已保存的记忆注入系统提示
extractStrategy: 'auto', // 每轮结束后自动提取记忆
},
})
// 代理从对话中学习,并在会话间记忆:
// - 用户偏好和角色
// - 工作方式反馈(避免什么/重复什么)
// - 项目上下文和决策
// - 外部系统的指引
记忆以带有 frontmatter 的 markdown 文件存储,由 MEMORY.md 索引。也可以直接使用独立 API:
import { saveMemory, scanMemories, loadMemoryIndex } from 'codenano'
saveMemory({
name: 'user_role',
description: '用户是后端工程师',
type: 'user',
content: '擅长 Go 和 Python,刚接触 React',
}, '/path/to/memory')
const memories = scanMemories('/path/to/memory')
记忆和会话持久化都有合理的默认路径,也支持自定义。目录不存在时会自动创建。
| 功能 | 默认路径 | 自定义配置 |
|---|---|---|
| 记忆 | ~/.agent-core/memory/<cwd-hash>/ |
memory.memoryDir |
| 会话 | ~/.agent-core/sessions/ |
persistence.storageDir |
// 使用默认路径 — 零配置
const agent = createAgent({
model: 'claude-sonnet-4-6',
memory: { autoLoad: true, extractStrategy: 'auto' },
persistence: { enabled: true },
})
// 或指定自定义路径
const agent = createAgent({
model: 'claude-sonnet-4-6',
memory: { memoryDir: './my-project/memory', autoLoad: true },
persistence: { enabled: true, storageDir: './my-project/sessions' },
})
每个 Result 都包含 costUSD — 基于模型定价的 API 费用估算。
const result = await agent.ask('解释这段代码')
console.log(`费用: $${result.costUSD.toFixed(4)}`) // 例如 $0.0047
独立 API 用于预算管理:
import { CostTracker, calculateCostUSD } from 'codenano'
const tracker = new CostTracker()
tracker.add('claude-sonnet-4-6', result.usage)
console.log(`总计: $${tracker.summary.totalUSD.toFixed(4)}`)
自动检测 git 仓库状态,注入系统提示:
import { getGitState, buildGitPromptSection } from 'codenano'
const state = getGitState()
// { isGit: true, branch: 'main', commitHash: 'abc123...', isClean: false, ... }
const section = buildGitPromptSection(state)
// "- Is a git repository: true\n- Current branch: main\n..."
在每个生命周期点观察和控制代理行为:
const agent = createAgent({
model: 'claude-sonnet-4-6',
tools: coreTools(),
onTurnStart: ({ turnNumber }) => console.log(`第 ${turnNumber} 轮`),
// 阻止危险工具
onPreToolUse: ({ toolName, toolInput }) => {
if (toolName === 'Bash' && toolInput.command?.includes('rm -rf'))
return { block: '破坏性命令已被阻止' }
},
onPostToolUse: ({ toolName, output }) => console.log(`${toolName}: ${output.slice(0, 50)}`),
onCompact: ({ messagesBefore, messagesAfter }) => console.log(`压缩: ${messagesBefore} → ${messagesAfter}`),
onError: ({ error }) => console.error(error.message),
onMaxTurns: () => console.warn('达到最大轮次'),
})
所有钩子都是尽力执行 — 钩子中的错误不会导致代理崩溃。
import { createAgent, createAgentTool, coreTools } from 'codenano'
const config = { model: 'claude-sonnet-4-6', tools: coreTools() }
const agentTool = createAgentTool(config)
const agent = createAgent({
...config,
tools: [...coreTools(), agentTool], // 模型现在可以生成子代理
})
分析对话上下文,识别压缩机会:
import { analyzeContext, classifyTool } from 'codenano'
const analysis = analyzeContext(session.history)
// { toolCalls: 5, duplicateFileReads: { '/a.ts': 3 }, collapsibleResults: 4, ... }
classifyTool('Grep') // 'search'
classifyTool('Bash') // 'execute'
连接任何 MCP server,使用其工具:
import { createAgent, connectMCPServers } from 'codenano'
const { tools, connections } = await connectMCPServers([
{ name: 'github', transport: 'stdio', command: 'npx', args: ['-y', '@modelcontextprotocol/server-github'] },
])
const agent = createAgent({ model: 'claude-sonnet-4-6', tools })
const result = await agent.ask('列出未关闭的 issue')
import { defineTool } from 'codenano'
import { z } from 'zod'
const readFile = defineTool({
name: 'ReadFile',
description: '从磁盘读取文件',
input: z.object({ path: z.string() }),
execute: async ({ path }) => fs.readFileSync(path, 'utf-8'),
isReadOnly: true,
})
const agent = createAgent({
model: 'claude-sonnet-4-6',
tools: [readFile],
})
相同的引擎。不同的理念。
| 特性 | codenano | Claude Code |
|---|---|---|
| 基于 | Claude Code 核心 | Anthropic 官方产品 |
| 代码行数 | ~6,500(仅核心) | 150,000+(完整应用) |
| 包含内容 | 代理引擎 | 引擎 + IDE + UI |
| 设置时间 | < 1 分钟 | 安装 IDE 扩展 |
| 用例 | 构建自定义代理 | 在 IDE 中直接使用 |
| 可定制性 | ✅ 完全开放 | ⚠️ 闭源 |
| 独立运行 | ✅ 是 | ❌ 需要 IDE |
| 生产就绪 | ✅ 是 | ✅ 是 |
| 开源 | ✅ MIT 许可 | ❌ 专有 |
这样理解: - Claude Code = 完整汽车(引擎 + 车身 + 内饰) - codenano = 只有引擎(自己造车)
何时使用 codenano: - 构建自定义 AI 编码工具 - 将代理集成到你的产品中 - 需要完全控制行为 - 想要理解它如何工作
何时使用 Claude Code: - 只想用 AI 辅助编码 - 更喜欢 Anthropic 官方支持 - 满意 IDE 集成
codenano 提取了 Claude Code 的代理循环:
1. 用户发送消息
2. 代理使用工具调用 Claude API
3. Claude 决定:响应或使用工具
4. 如果使用工具 → 执行 → 发送结果
5. 重复直到完成
我们从 Claude Code 提取了什么: - ✅ 代理循环逻辑 - ✅ 工具执行系统 - ✅ 流式支持 - ✅ 多轮会话 - ✅ 自动压缩(上下文管理) - ✅ 权限系统 - ✅ 重试和回退
我们排除了什么: - ❌ IDE 集成 - ❌ UI 组件 - ❌ 文件监视器 - ❌ Git UI - ❌ 桌面应用外壳
结果:纯粹的代理引擎,可嵌入任何地方。
开箱即用,零配置: - 文件操作: Read、Edit、Write - 代码搜索: Glob(模式匹配)、Grep(正则搜索) - 执行: Bash 命令 - 高级: Web 搜索、Web 获取、笔记本、LSP 等
coreTools() // 基础 6 个工具
extendedTools() // 核心 + 5 个
allTools() // 全部 17 个工具
清晰、模块化的架构:
codenano/
src/
agent.ts # 核心代理循环
session.ts # 多轮对话
session-storage.ts # 会话持久化(JSONL)
hooks.ts # 生命周期钩子
cost-tracker.ts # 成本追踪
git.ts # Git 状态检测
context-analysis.ts # 工具分类与上下文分析
tools/ # 17 个内置工具 + createAgentTool
prompt/ # 系统提示构建器
memory/ # 持久化记忆系统
provider.ts # Anthropic SDK + Bedrock
compact.ts # 自动压缩逻辑
tests/ # 374 个测试
examples/ # 可运行示例
docs/ # 完整文档
374 个测试。100% 生产就绪。
| 文档 | 你将学到 |
|---|---|
| 架构 | 代理循环、交互模式、流事件 |
| 工具 | 内置工具、自定义工具、权限 |
| 配置 | 完整配置参考、CLAUDE.md 支持 |
| 可靠性 | 自动压缩、重试、回退、预算 |
| 提示系统 | 系统提示架构 |
| 差异分析 | SDK vs Claude Code 对比 |
# 单元测试(374 个测试)
npm test
# 带覆盖率
npx vitest run --coverage
# 集成测试(需要 API 密钥)
ANTHROPIC_API_KEY=sk-xxx npm run test:integration
已实现: - [x] 记忆系统(跨会话持久化) - [x] 任务管理工具 - [x] 查询追踪(调试/分析) - [x] 停止钩子(生命周期回调) - [x] 工具结果预算 - [x] 会话持久化(JSONL 保存/恢复) - [x] 扩展钩子(8 个生命周期钩子) - [x] 成本追踪(基于 token 的 USD 估算) - [x] Git 集成(状态检测、提示注入) - [x] 子代理生成(createAgentTool) - [x] 上下文折叠(工具分类、上下文分析) - [x] MCP 协议支持(stdio/SSE/HTTP 传输)
路线图已全部完成!
更快交付你的 AI 编码产品。停止与臃肿框架搏斗。几天而非几个月上市。
从第一天起就生产就绪。经过实战检验的架构、全面测试、完全控制你的技术栈。
真正好用。清晰的 API、优秀的文档、零魔法。按你想要的方式构建。
MIT 许可证。
npm install codenano
有问题?查看文档或提交 issue。
准备构建?查看示例获取灵感。
$ claude mcp add codenano \
-- python -m otcore.mcp_server <graph>