andrej-karpathy-extension
pi extension that programmatically enforces Karpathy's four coding guidelines. Compatible with pi2dsh for DSH.
Package details
Install andrej-karpathy-extension from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:andrej-karpathy-extension- Package
andrej-karpathy-extension- Version
0.2.1- Published
- Aug 31, 2026
- Downloads
- 156/mo · 156/wk
- Author
- babyhui
- License
- MIT
- Types
- extension
- Size
- 91.2 KB
- Dependencies
- 0 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./extensions/karpathy-guidelines/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
Andrej-Karpathy-Extension
一个 pi Extension,以程序化方式强制执行 Andrej Karpathy 的四条编码准则。兼容 pi2dsh,可在 DSH (DeepSeek Harness) 中运行。
为什么需要它
你当然可以手动把四条准则贴进 system prompt。但问题是:
- 模型会"忘记"。 长对话里,早期的 system prompt 权重会被后续 token 稀释。
- 提醒 ≠ 执行。 模型知道原则,但不会主动检查自己是否违反了它们。
- 没有反馈环。 模型写完 200 行代码后,不会自己说"等等,这可以写成 50 行"。
本 Extension 把准则从"希望模型记住"变成"程序化可见":每次 tool_call 都附上规模信号,每次 tool_result 都检查产出。它提供可见性和提醒,不拦截任何工具调用——判断留给人。
四条准则
蒸馏自 Andrej Karpathy 关于 LLM 编码陷阱的观察:
| # | 准则 | 一句话 |
|---|---|---|
| 1 | Think Before Coding(先想后做) | 不假设、不隐藏困惑,把权衡摆到台面上 |
| 2 | Simplicity First(简单优先) | 用最少的代码解决问题,不写推测性代码 |
| 3 | Surgical Changes(外科手术式修改) | 只改必须改的,只清理自己制造的垃圾 |
| 4 | Goal-Driven Execution(目标驱动执行) | 定义可验证的成功标准,循环直到通过 |
完整措辞见 guidelines.ts——它是唯一来源,system prompt 注入、self_check 清单、/karma 输出都从这里派生。
它做什么
- 常驻欢迎横幅(TUI)。 启动后把四条准则速览固定在输入框上方,整个 session 可见;print/RPC 模式退回一次性通知。
- 把准则注入到每次 system prompt。 模型在每一轮都看到它们,不只是"记得加载 skill"时才看到。
- 为大范围编辑提供可见性。 当单次
write或edit触动的行数超过阈值时,通知你具体数字(只提醒,不拦截)。一次edit调用里的多处替换会合并计算总规模。 - 过度工程时引导。 一次
write/edit后,统计新引入的顶层抽象(函数、类、接口、类型;嵌套声明不计入)。对两者都会先减去文件里原本就有的声明,只算净新增。如果太多,在 tool_result 顶部前置警告让模型重新考虑。 - 改动共享模块时提醒验证。 被改的文件如果有其他源文件相对导入它,在 tool_result 顶部前置波及提示,要求收尾前跑
tsc --noEmit与相关测试。 - 添加
/karma斜杠命令。/karma—— 显示准则 + 当前配置/karma review—— 审查 session 中最近的代码改动/karma configure—— 显示配置路径和如何编辑/karma help—— 显示子命令帮助
- 添加
self_check工具,让 LLM 在决策点可调用,按四条原则逐项走查清单。
效果预览
TUI 启动后,输入框上方常驻:
── Karpathy 编码准则 ────────────────────────────────
先想后做 / 简单优先 / 外科手术式修改 / 目标驱动执行
/karma 详情 · /karma configure 调整阈值
单次 write 超过行数阈值时,通知长这样(文件照常写入,只提醒不拦截):
karpathy | write src/big.ts | 201 行(阈值 150) | +201/-0
一次改动引入过多顶层抽象时,模型会在下一轮收到(这条在界面上不可见,只给模型看)。警告前置在工具结果最前面,要求模型逐条回应:
⚠️ [Karpathy — Simplicity First] 本次改动引入了 3 个新的顶层抽象(阈值:2):
- function `foo` (line 3)
- function `bar` (line 10)
- class `Baz` (line 18)
在继续下一步之前,逐个回答:
1. 每个抽象都是当前用户请求直接需要的吗?
2. 其中某些能否内联到调用方,而不是新建顶层抽象?
3. 一个资深工程师会认为这些属于过度设计吗?
安装
Quick start
pi install npm:andrej-karpathy-extension
临时试用(不写入配置):
pi -e npm:andrej-karpathy-extension
[!IMPORTANT] Extension 以你的完整用户权限运行。安装第三方扩展前请先审查源码。
本地开发
git clone https://github.com/deerxiaohui-hash/andrej-karpathy-extension.git
cd andrej-karpathy-extension
pi -a
仓库已自带 .pi/settings.json,-a 会自动加载扩展。
DSH(通过 pi2dsh)
dsh plugin add pi2dsh
dsh plugin add npm:andrej-karpathy-extension
然后重启 dsh。
配置
编辑 ~/.pi/agent/karpathy.json,然后在 pi 里跑 /reload。
| 选项 | 默认值 | 说明 |
|---|---|---|
maxLinesPerEdit |
150 |
单次 write/edit 触动的总行数上限(新增 + 删除)。超过时 tool guard 会警告 |
maxNewAbstractions |
2 |
单次改动允许的净新增顶层抽象数(函数、类、接口、类型)。超过时 result watcher 会追加警告 |
enableToolGuard |
true |
是否启用大范围编辑观察者(只通知、不拦截) |
enableResultWatcher |
true |
是否启用过度工程检测 |
enableImpactWatcher |
true |
是否启用波及范围提醒(改动被引用的模块时要求验证依赖方) |
strictness |
"medium" |
同时缩放上面两个阈值:low ×1.5 宽松,high ×0.6 严格 |
示例配置:
{
"maxLinesPerEdit": 150,
"maxNewAbstractions": 2,
"enableToolGuard": true,
"enableResultWatcher": true,
"enableImpactWatcher": true,
"strictness": "medium"
}
测试时可用 KARPATHY_CONFIG 环境变量指向别的配置文件。
检测范围是启发式的,刻意接受误报而不是打断工具调用:
- 顶层抽象识别支持 TypeScript / JavaScript / Python,其他语言暂不识别。
- 波及范围只认相对路径导入(
./、../),路径别名与包名导入会被忽略。
pi2dsh 兼容性
| Pi API | pi2dsh 状态 | 说明 |
|---|---|---|
pi.on("before_agent_start") |
✅ 已映射 | → system-prompt/assemble |
pi.on("tool_call") |
✅ 已映射 | 支持阻断(本扩展为观察者模式,未使用阻断) |
pi.on("tool_result") |
✅ 已映射 | 支持修改 content |
pi.registerTool() |
✅ 已映射 | → DSH tool registry |
pi.registerCommand() |
✅ 已映射 | → DSH commands |
ctx.ui.notify/confirm |
✅ 已映射 | |
ctx.sessionManager.getEntries() |
✅ 已映射 | |
ctx.ui.setWidget |
⚠️ TUI 专用 | 扩展按 ctx.mode 守卫,DSH/print 下自动退回 notify |
pi.sendMessage() |
❌ 不可用 | 已替换为 tool_result return |
pi.appendEntry() |
⚠️ 3 级旁路 | 不进 DSH 原生日志 |
开发
npm install # 安装依赖
npm test # 运行全部测试
npx tsc --noEmit # 类型检查(含测试文件)
测试不需要真的跑起 pi——test-harness.ts
提供假的 ExtensionAPI / ExtensionContext,直接把事件喂给 handler。
兼容性检查:
npx pi2dsh inspect npm:andrej-karpathy-extension@latest
许可证
MIT