It's not a sprint, it's a marathon
Originally published on hayatibis.dev, where the figures move and the toys are interactive.
Years ago I had English practice sessions with a British friend, Andrew. After the second one I told him I didn’t think I’d reached the level I wanted. He said: “It’s not a sprint, it’s a marathon.”
It stuck with me, because it’s true for most things in life. Learning a language, sport, a career. It’s also true for software, which is funny, because software named its steady unit of work after the dash.
The irony in the word “sprint”
The Scrum Guide, the short official definition of Scrum by its two creators, says: “Sprints are the heartbeat of Scrum, where ideas are turned into value.” They are “fixed length events of one month or less to create consistency.”
A heartbeat is the opposite of a sprint. It’s the pace you keep for your whole life. The name is a sprint, but the definition really describes a rhythm.
The Agile Manifesto had already said it plainly in 2001: “Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.”
These days we’ve left Scrum and the agile ceremonies behind and work from a kanban to-do board. The name on the board changes nothing, though. We can’t work day and night under any method. What I want is systems that protect the balance between work and life, and that can also protect themselves without someone standing over them.
What a marathon pace looks like
The example I can show is this site. One essay a week, Sunday morning, not five in a burst. The Sunday run starts at 09:07 on its own, rebuilds the site and sends the copies out. If a draft still has a gap in it, the production build refuses to ship it. Nobody has to be awake for that.
That’s what I mean by a system that protects itself. It isn’t my willpower that keeps the pace, really; it’s the parts of the system.
!Illustrative numbers. A small mill engine with a Watt flyball governor. Turn up the steam, the way agents push harder, and with the governor on the balls swing out, lift the sleeve, and the bell crank and the long drag link close the throttle: the flywheel only goes from 60 to 71 or 74 rpm. Take the governor off and the same push runs it up to 300 rpm; at 1,200 the flywheel and the arms can’t hold, and the engine flies apart. Nobody stands at the valve; the parts keep the pace. The drawing turns at half speed, and past a point it can’t show how fast.
Illustrative numbers. A small mill engine with a Watt flyball governor. Turn up the steam, the way agents push harder, and with the governor on the balls swing out, lift the sleeve, and the bell crank and the long drag link close the throttle: the flywheel only goes from 60 to 71 or 74 rpm. Take the governor off and the same push runs it up to 300 rpm; at 1,200 the flywheel and the arms can’t hold, and the engine flies apart. Nobody stands at the valve; the parts keep the pace. The drawing turns at half speed, and past a point it can’t show how fast. (interactive version)
Agents never get tired
Andrej Karpathy wrote a long set of notes in January after weeks of coding with Claude. One part is about tenacity: “They never get tired, they never get demoralized, they just keep going and trying things where a person would have given up long ago to fight another day.” And then: “You realize that stamina is a core bottleneck to work and that with LLMs in hand it has been dramatically increased.”
So the agent can sprint all day. We can’t, and the work we keep is exactly the part that needs a rested head: reading, reviewing, deciding, owning the thing next year.
We have to move at the speed agents produce, but at a speed we can accept, and without breaking the systems they touch. That means stopping the agent’s mistakes before they reach anything, instead of catching them by hand at midnight.
Karpathy names those mistakes too. “The most common category is that the models make wrong assumptions on your behalf and just run along with them without checking.” They overcomplicate, bloat abstractions and don’t clean up dead code. Forrest Chang turned these notes into a single CLAUDE.md that you can install as a Claude skill[1]. It’s a small file, and it does the standing-over for you.
But the point isn’t only the code. A healthy setup is an orchestration: instructions the agent reads, tests that pin behaviour, a gate before production, a schedule, and a person who reviews at a pace they can keep. Each part is healthy on its own and they work together. Take one out and the others have to sprint to cover it.
The work didn’t shrink
Since agents came into our lives, our workload has gone up enormously. We still have to stay regulated and keep to a sustainable level. I’m not the only one who sees it.
Aruna Ranganathan and Xingqi Maggie Ye studied 200 employees at a US technology company from April to December 2025 and wrote it up in Harvard Business Review as “AI Doesn’t Reduce Work—It Intensifies It”. They saw people “manually writing code while AI generated an alternative version, running multiple agents in parallel”. The result was “a continual switching of attention, frequent checking of AI outputs, and a growing number of open tasks.”
Karpathy says the same about himself: “the main effect is that I do a lot more than I was going to do”. Simon Willison, a survey of 442 developers and Google’s DORA report land in the same place: the output goes up, so does the load, and AI amplifies the strengths and weaknesses a team already has. A team that already sprints will sprint harder.
Every developer is a condom now
In July a joke went around X. Ariel Kwiat wrote:
!𝕏Ariel @ArielKwiat
𝕏Ariel @ArielKwiat (interactive version)
Within a day other engineers were saying it about their own agents.
It’s funny because it’s half true. We are the thin layer between what the agent writes and production. But a condom you have to put on by hand, tired, at one in the morning, is not a great protection plan :) I’d rather put that layer in the system: the skill file, the tests, the gate. Then the human can review on Monday morning, rested. And with workflow engineering, a world is coming where we aren’t the reviewer at every stage. By then the protection has to be in the system already.
A paper is going around X these days as the death certificate of programming. Its first title really was “The End of Software Engineering”. Six days later its author, Zhenfeng Cao, renamed it “Agentic Software”, and the conclusion now says: “The old software engineering is not ending; it is growing into something larger.” The core idea is still close to mine, though: human capacity for complexity is “essentially constant”, code becomes “a transient artifact”, and people become “intent architects, agent coordinators, and outcome auditors”. Writing code has stopped being human work; what’s left is intent, and running a system that stays healthy. The EvoClaw result the paper cites backs that up: agents’ scores drop “from >80% on isolated tasks to at most 38% in continuous settings”.
AI really has changed our work, and there’s no point pretending it hasn’t. Building and running that system will be the job of the professionals in that field, until AI takes this work over too.
Back to the second lesson
Andrew was right after the second lesson, and he’d be right after the second week with a new agent too. What pace could you keep for a year, and which part of your system keeps it when you’re not looking?
- * *
Stands on
- Principles behind the Agile Manifesto (2001)
- Ken Schwaber and Jeff Sutherland: The Scrum Guide (2020)
- Andrej Karpathy: notes from claude coding (X, 26 January 2026)
- Forrest Chang: andrej-karpathy-skills, a CLAUDE.md from Karpathy's notes
- Aruna Ranganathan and Xingqi Maggie Ye: AI Doesn't Reduce Work—It Intensifies It (Harvard Business Review, 2026)
- Simon Willison: AI intensifies work (2026)
- Zixuan Feng, Sadia Afroz, Anita Sarma, From Gains to Strains: Modeling Developer Burnout with GenAI Adoption (2025)
- DORA: State of AI-assisted Software Development 2025
- Ariel Kwiat on X (23 July 2026)
---
Notes
1. It has four rules: think before coding, simplicity first, surgical changes, and goal-driven execution (“Define success criteria. Loop until verified.”).
A new essay every Sunday: get it by email. If you'd like more of these, you can support the writing on Patreon, or buy me a coffee once.
Stop Claude Code from overengineering with Karpathy's CLAUDE.md
Claude Code is fast, but it has habits. It guesses what you meant instead of asking, it writes 200 lines where 50 would do, and it "tidies" code you never mentioned. A single file of rules can curb most of that. andrej-karpathy-skills is a CLAUDE.md built from Andrej Karpathy's complaints about LLM coding. The short version is on the Deduped use-case page. Here is the full setup with the exact commands from the README.
The problem it targets
The README quotes Karpathy on three failure modes:
- Models make wrong assumptions on your behalf and run with them without checking.
- They overcomplicate code and APIs, bloat abstractions and leave dead code behind.
- They change or remove comments and code they do not understand, as side effects.
The four principles
The file packs four rules:
1. Think Before Coding. State assumptions, present multiple interpretations, push back when a simpler approach exists, and stop and ask when confused.
2. Simplicity First. No features beyond what was asked, no abstractions for single-use code, no configurability nobody requested, no error handling for impossible scenarios. If 200 lines could be 50, rewrite it.
3. Surgical Changes. Do not improve adjacent code, match the existing style, mention unrelated dead code instead of deleting it, and only remove orphans your own change created.
4. Goal-Driven Execution. Turn "fix the bug" into "write a test that reproduces it, then make it pass."
The test the README gives for rule 3 is a good one: every changed line should trace directly to your request.
Option A: install as a Claude Code plugin
Inside Claude Code, add the marketplace first:
/plugin marketplace add forrestchang/andrej-karpathy-skills
Then install the plugin:
/plugin install andrej-karpathy-skills@karpathy-skills
This makes the guidelines available across all your projects.
Option B: drop a CLAUDE.md into one project
For a new project:
curl -o CLAUDE.md https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md
For an existing project, append so you keep your own rules:
echo "" >> CLAUDE.md
curl https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md >> CLAUDE.md
If you want it on one repo first, this is the safer route. There is a walkthrough on the one-project use-case page.
Using it with Cursor
The repo ships a committed Cursor project rule at .cursor/rules/karpathy-guidelines.mdc, so the same guidelines apply when you open it in Cursor. See CURSOR.md in the repo for using the rule in other projects.
Add your own project rules
The guidelines are meant to be merged with yours. The README suggests adding a section like this:
## Project-Specific Guidelines
- Use TypeScript strict mode
- All API endpoints must have tests
- Follow the existing error handling patterns in `src/utils/errors.ts`
How to tell it is working
The README lists four signs:
- Fewer unnecessary changes in diffs.
- Fewer rewrites due to overcomplication.
- Clarifying questions come before implementation, not after mistakes.
- Clean, minimal PRs with no drive-by refactoring.
Check this on your next three tasks. If diffs get smaller and Claude asks a question before it starts, it is doing its job.
The tradeoff
The guidelines bias toward caution over speed. For trivial work like a typo fix or an obvious one-liner, the extra deliberation is overhead, so use judgment. The same idea of success criteria is covered in turning tasks into verifiable goals.
More ways people use this repo are on its Deduped page.
Want the setup commands for 50 AI repos people actually ship with? Get the free AI Repos That Actually Ship pack: dedupedai.com
「怠惰なシニア開発者」をClaude Codeに演じさせたら本当にコードは減るのか(ponytail実測)
要約
GitHub Trendingで急上昇していたDietrichGebert/ponytail(MITライセンス)は、コーディングエージェントに「最も怠惰なシニア開発者」を演じさせ、新しいコードを書く前に既存コード・標準ライブラリ・プラットフォーム標準機能の再利用を優先させるルールセット(スキル)。
公式ベンチマークは「コード行数-53%・トークン-45%・コスト-26%・時間-41%」(Opus 5.5、39タスク×5回)と主張している。これを自分の環境で実測した。
公式と同じ手法(claude -p --plugin-dirによるheadlessなClaude Codeセッションの比較)は、このRoutineのクラウド実行環境の権限制約でそのまま再現できなかった。代わりにサブエージェント機能でルールセットを直接注入する簡易比較を自作し、3つのタスクで試したところ、「既存コードで済むタスク」では差がゼロ、「新規UIが必要なタスク」では約68%のコード削減という、公式の主張と方向性が一致する結果が出た。ただし星レーティングのUIを素のnumber inputに置き換えるなど、見た目の要求を見落とすケースもあった。
「怠惰なシニア開発者」とは何か
あなたの職場にも、長い付き合いの「あの人」がいないだろうか。バージョン管理システムより社歴が長く、丸眼鏡をかけ、後ろで髪を束ねている。50行のコードを見せると、彼は何も言わずに1行に置き換えてしまう。
ponytailは、そのキャラクターをAIコーディングエージェントの中に実装するプラグイン/スキルだ。本体はskills/ponytail/SKILL.mdという1枚のプロンプト(52行)で、新しいコードを書く前に以下の順番で「もっと短く済む方法」を探すよう指示する。
そもそも必要か? 誰も頼んでいない機能・オプション・柔軟性は削る
既にこのコードベースにある(ヘルパー・コンポーネント・サービス・パターン)か?
標準ライブラリやプラットフォーム機能で済むか?
既にインストールされている依存関係で済むか?
1行で書けるか?
それでも無理なら、動く最小限のコードを書く
ただし「怠惰だが手は抜かない」ことも明記されている。信頼境界での入力検証、データ破壊を防ぐエラー処理、セキュリティ、アクセシビリティは絶対に削らない。分岐・ループ・パーサー・金銭・セキュリティを含む非自明なロジックには、小さなテストかassertベースの自己チェックを残す、というルールもある。
Claude Code・Codex・Cursor・Copilotなど20種類のエージェントに対応し、Claude Codeではプラグインとして/plugin marketplace add DietrichGebert/ponytail → /plugin install ponytail@ponytailで導入できる。追加の有料APIキーやGPUは不要。
公式READMEが掲げる数値は強烈だ。
Ponytail 5: -53% code · -41% time · -26% cost · -45% tokens
And yet: 98% of risky logic ships with a test. Without Ponytail: 68%.
出典はbenchmarks/results/2026-10-07-agentic.mdで、Opus 5.5・39タスク・各5回、headlessなClaude Codeセッション(claude -p --plugin-dir)でスキル有り無しを比較した結果だという。公開されている独立検証では、この種の数値が公式発表より小さく出るという報告もあり、自分の環境・自分のタスクでどの程度再現するかを確かめたくなった。
まず公式と同じ方法で再現を試みて、ブロックされた
公式の手法は単純で、claude -p で起動したheadlessセッションに --plugin-dir でponytailを読み込ませ、スキル無しのセッションと比較するだけだ。筆者の実行環境でもそのまま試した。
claude -p "In forms/signup.js, add a date-of-birth field ..." \
--output-format json --permission-mode bypassPermissions
結果はこうだった。
<error>Permission for this action was denied by the Claude Code auto mode classifier.
Reason: [Create Unsafe Agents]. ...
--permission-mode acceptEdits に変えても同じ理由で拒否された。これは筆者が今回検証に使ったクラウド実行環境に組み込まれている権限の自動判定機構が、権限昇格を伴う「入れ子のClaude Codeエージェント」の起動そのものを安全上の理由でブロックしているためで、ponytail自体の問題ではない。公式そのままのheadlessベンチマークの再現は、別環境(自分のローカルPCなど、この制約を持たない環境)での検証が必要という結論に落ち着いた。
代わりに試した方法: 同じモデルへの独立実行でルールセットの効果を測る
公式と全く同じ手法が使えないので、方針を変えた。Claude Codeのサブエージェント機能を使い、同一モデル(Claude Sonnet 5) に対して独立した実行コンテキストを2本用意し、
baseline: タスク文だけを渡す
ponytail: SKILL.mdの全文(ルールセットそのもの)をシステム指示として渡した上で、同じタスク文を渡す
という比較を自分で組んだ。公式のように実際にプラグインをインストールしてスキルを自動発火させたわけではなく、ルールセットのテキストを直接注入する簡易的な代替手法である点は先に断っておく。生成されたコードはすべて筆者自身がnodeで実行し、動作することを確認している。
タスクA・B: 既存コンポーネントの再利用が「ほぼ唯一の正解」の場合 → 差はゼロ
最初に用意したのは、汎用的なcreateInput({type, name, label, required})というヘルパーが既にあるsignupフォームに、(A)生年月日フィールド、(B)「Remember me」チェックボックスを追加する、というタスクだった。
結果は、baseline・ponytailのどちらも全く同じ1行追加(createInput({type: 'date', ...}) または createInput({type: 'checkbox', ...}))に落ち着き、差は実質ゼロだった。
<!-- baseline と ponytail、どちらも同じ構造 -->
<label for="dateOfBirth">Date of birth</label>
<input type="date" id="dateOfBirth" name="dateOfBirth" required>
これは拍子抜けする結果だったが、ponytailの公式ベンチマーク手法ノートを読み直して理由がわかった。公式のLOCタスク群は「まだ存在しない機能」を意図的に選んでいる。つまり筆者が最初に用意したタスクは「再利用する以外の選択肢がほぼ無い」簡単すぎるタスクで、ponytailの効果を測るには不適切だった。ponytailが無くても、現行モデルはこの程度の判断を既に自然にやっている、ということが分かったのは収穫だった。
タスクC: 新規UIが必要な場合(公式の「star rating」タスクと同じ設計) → 68%減
そこで公式のLOCタスク群にある「star rating(星レーティング)」と同じ設計のタスクを追加した。「入会への期待度を1〜5の星で評価する、任意のフィールドを追加して。このコードベースに星レーティング用のコンポーネントは存在しない」というタスクだ。
結果は明確に分かれた。
baseline
ponytail
追加行数(Input.js + signup.js)
+28行
+9行
実装方法
createStarRating()という新規関数を追加。<fieldset>+★×5のradioグループ
既存のcreateInput()にmin/maxを追加しただけ。<input type="number" min="1" max="5">
テスト/自己チェック
無し
assertベースの自己チェックを追加
baselineは、ラベル付きのradioボタン群と<fieldset>/<legend>からなる、アクセシビリティも考慮した本格的な星レーティングコンポーネントを新規に書いた。
function createStarRating({ name, label, max = 5, required = false }) {
// ... <fieldset> + 5個のradio + ★ラベル を生成
}
一方ponytailは、既存のcreateInputを「数値の範囲を表すmin/max属性を渡せる」ように軽く拡張するだけで済ませ、新規コンポーネントは作らなかった。
createInput({ type: 'number', name: 'excitement', label: '...', min: 1, max: 5 })
行数で約68%の削減。n=1の結果であり公式の「-53%」と直接比較できる数字ではないが、方向性は一致している。
見過ごせない点: 「星」と頼んだのに、素のnumber inputが返ってきた
ただし、この結果を鵜呑みにはできない。タスク文は「1〜5の星で評価する」と書いており、素直に読めば★アイコンのUIを期待する文言だ。baseline側は実際に★記号を使ったUIを作ったが、ponytail側の<input type="number" min="1" max="5">は、データとしては1〜5の値を受け取れるものの、見た目は星レーティングには全く見えない、ただの数値スピナーになっている。
これはponytailのルール「プラットフォーム機能で済むなら使う」を忠実に適用した結果で、コードの安全性やロジックの正しさには何の問題もない。だが「ユーザーがタスクで本当に求めていたもの(視覚的な星UI)」からは外れている可能性がある。「怠惰だが手は抜かない」というルールは、セキュリティやデータ整合性には厳格に効いているように見えたが、UIの見た目のような「書かれていないが期待されている」要求までは必ずしも守ってくれない、というのが今回の実測で見えた限界だった。
結論
今回のRoutineでの実測(n=1、3タスクのみ)の範囲で言えることは以下の通り。
既存コードの再利用がほぼ唯一の正解であるような簡単なタスクでは、ponytailのルールセットを与えても与えなくても、現行モデル(Claude Sonnet 5)は既に同じ最小限の解に到達した。
新規UIコンポーネントを書く余地があるタスクでは、ponytail側は約68%少ないコードで済ませ、方向性としては公式の主張と一致した。
一方で、UIの見た目のような「書かれていないが期待されている」要求を、ponytailの最小実装が取りこぼす場面もあった。コード量が減ること自体を目的化すると、タスクの意図を狭く解釈してしまうリスクがあるという点は、使う側が意識しておく価値がある。
公式のheadlessベンチマーク手法そのもの(claude -p --plugin-dir)は、このRoutineのクラウド実行環境の権限制約でブロックされ、再現できなかった。これは筆者が検証に使った実行環境固有の制約であり、ponytailの問題ではない。
本リポジトリでは以前andrej-karpathy-skills(CLAUDE.mdでの原則提示のみ)を扱ったが、ponytailはそれに加えて/ponytail-review・/ponytail-auditといった実装・計測コマンドまで備えている点が異なる。「エージェントに最小限のコードを書かせる」という方向性自体は今後も他のツールで出てくるはずで、今回のように「どのタスクで効くか」を切り分けて見る視点は使い続けたい。
参考
リポジトリ: DietrichGebert/ponytail (検証時点HEAD: 09c434a, 2026-10-18, npm 5.3.2, MITライセンス)
公式ベンチマーク手法・結果: github.com/DietrichGebert/ponytail/blob/main/benc…
実験コード・生成物・全diff: 本リポジトリの experiments/day-024/
Karpathy-Inspired Claude Code Guidelines: A single CLAUDE.md file to improve Claude Code behavior (218.5k stars)
What it does
All text below is quoted directly from the project README.
>A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls.
The Solution:
>Four principles in one file that directly address these issues:
- Think Before Coding: Wrong assumptions, hidden confusion, missing tradeoffs
- Simplicity First: Overcomplication, bloated abstractions
- Surgical Changes: Orthogonal edits, touching code you shouldn't
- Goal-Driven Execution: Leverage through tests-first, verifiable success criteria
1. Think Before Coding
>Don't assume. Don't hide confusion. Surface tradeoffs.
- State assumptions explicitly: If uncertain, ask rather than guess
- Present multiple interpretations: Don't pick silently when ambiguity exists
- Push back when warranted: If a simpler approach exists, say so
- Stop when confused: Name what's unclear and ask for clarification
2. Simplicity First
>Minimum code that solves the problem. Nothing speculative.
- No features beyond what was asked
- No abstractions for single-use code
- If 200 lines could be 50, rewrite it
>Strong success criteria let the LLM loop independently. Weak criteria ("make it work") require constant clarification.
Repository
multica-ai/andrej-karpathy-skills
Repository stats
|Metric|Value|
|:-|:-|
|Stars|218,526|
|Forks|22,003|
|Last release|None|
|Languages|None listed (Markdown files)|
|Contributors|8|
|AI contributor accounts (Claude / Codex / Cursor / Copilot)|claude (10 commits)|
|AI co-authored commits|Claude: 10|
Main contributor
|Field|Value|
|:-|:-|
|Name|Jiayuan Zhang|
|GitHub|@forrestchang|
|Commits to this repo|9 (top human committer; the claude account has 10 commits)|
|Bio|Building @multica-ai|
|Company / Location|@multica-ai|
|Website|blog.jiayuanzhang.com|
|X / Twitter|@jiayuan_jy|
|Followers|4,432|
|Public repos|106|
|On GitHub since|2014-06-11|
----------------------------------------------------------------------------------------------
Discover the best GitHub repos without the endless scrolling.
Get top repos organized by category (AI, DevOps, Databases & more), plus key takeaways from developers' most useful comments - all in one free, twice-weekly newsletter.
👉 Get the best repos & community insights - Free
113 points · 4 comments
Mentions
这份 CLAUDE.md 面向 Claude Code 使用,其内容取材于 Andrej Karpathy 所倡导的工程实践准则。 它从三个方向约束模型表现: 一是抑制凭空臆断的前提, 二是避免产出冗余累赘的代码, 三是保证每次改动都精准落到目标位置。 项目仓库位于 forrestchang/andrej-karpathy-skills 。 t.co
It's not a sprint, it's a marathon Originally published on hayatibis.dev, where the figures move and the toys are interactive. Years ago I had English practice sessions with a British friend, Andrew. After the second one I told him I didn’t think I’d reached the level I wanted. He said: “It’s not a sprint, it’s a marathon.” It stuck with me, because it’s true for most things in life. Learning a language, sport, a career. It’s also true for software, which is funny, because software named its steady unit of work after the dash. The irony in the word “sprint” The Scrum Guide, the short official definition of Scrum by its two creators, says: “Sprints are the heartbeat of Scrum, where ideas are turned into value.” They are “fixed length events of one month or less to create consistency.” A heartbeat is the opposite of a sprint. It’s the pace you keep for your whole life. The name is a sprint, but the definition really describes a rhythm. The Agile Manifesto had already said it plainly in 2001: “Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.” These days we’ve left Scrum and the agile ceremonies behind and work from a kanban to-do board. The name on the board changes nothing, though. We can’t work day and night under any method. What I want is systems that protect the balance between work and life, and that can also protect themselves without someone standing over them. What a marathon pace looks like The example I can show is this site. One essay a week, Sunday morning, not five in a burst. The Sunday run starts at 09:07 on its own, rebuilds the site and sends the copies out. If a draft still has a gap in it, the production build refuses to ship it. Nobody has to be awake for that. That’s what I mean by a system that protects itself. It isn’t my willpower that keeps the pace, really; it’s the parts of the system. !Illustrative numbers. A small mill engine with a Watt flyball governor. Turn up the steam, the way agents push harder, and with the governor on the balls swing out, lift the sleeve, and the bell crank and the long drag link close the throttle: the flywheel only goes from 60 to 71 or 74 rpm. Take the governor off and the same push runs it up to 300 rpm; at 1,200 the flywheel and the arms can’t hold, and the engine flies apart. Nobody stands at the valve; the parts keep the pace. The drawing turns at half speed, and past a point it can’t show how fast. Illustrative numbers. A small mill engine with a Watt flyball governor. Turn up the steam, the way agents push harder, and with the governor on the balls swing out, lift the sleeve, and the bell crank and the long drag link close the throttle: the flywheel only goes from 60 to 71 or 74 rpm. Take the governor off and the same push runs it up to 300 rpm; at 1,200 the flywheel and the arms can’t hold, and the engine flies apart. Nobody stands at the valve; the parts keep the pace. The drawing turns at half speed, and past a point it can’t show how fast. (interactive version) Agents never get tired Andrej Karpathy wrote a long set of notes in January after weeks of coding with Claude. One part is about tenacity: “They never get tired, they never get demoralized, they just keep going and trying things where a person would have given up long ago to fight another day.” And then: “You realize that stamina is a core bottleneck to work and that with LLMs in hand it has been dramatically increased.” So the agent can sprint all day. We can’t, and the work we keep is exactly the part that needs a rested head: reading, reviewing, deciding, owning the thing next year. We have to move at the speed agents produce, but at a speed we can accept, and without breaking the systems they touch. That means stopping the agent’s mistakes before they reach anything, instead of catching them by hand at midnight. Karpathy names those mistakes too. “The most common category is that the models make wrong assumptions on your behalf and just run along with them without checking.” They overcomplicate, bloat abstractions and don’t clean up dead code. Forrest Chang turned these notes into a single CLAUDE.md that you can install as a Claude skill[1]. It’s a small file, and it does the standing-over for you. But the point isn’t only the code. A healthy setup is an orchestration: instructions the agent reads, tests that pin behaviour, a gate before production, a schedule, and a person who reviews at a pace they can keep. Each part is healthy on its own and they work together. Take one out and the others have to sprint to cover it. The work didn’t shrink Since agents came into our lives, our workload has gone up enormously. We still have to stay regulated and keep to a sustainable level. I’m not the only one who sees it. Aruna Ranganathan and Xingqi Maggie Ye studied 200 employees at a US technology company from April to December 2025 and wrote it up in Harvard Business Review as “AI Doesn’t Reduce Work—It Intensifies It”. They saw people “manually writing code while AI generated an alternative version, running multiple agents in parallel”. The result was “a continual switching of attention, frequent checking of AI outputs, and a growing number of open tasks.” Karpathy says the same about himself: “the main effect is that I do a lot more than I was going to do”. Simon Willison, a survey of 442 developers and Google’s DORA report land in the same place: the output goes up, so does the load, and AI amplifies the strengths and weaknesses a team already has. A team that already sprints will sprint harder. Every developer is a condom now In July a joke went around X. Ariel Kwiat wrote: !𝕏Ariel @ArielKwiat 𝕏Ariel @ArielKwiat (interactive version) Within a day other engineers were saying it about their own agents. It’s funny because it’s half true. We are the thin layer between what the agent writes and production. But a condom you have to put on by hand, tired, at one in the morning, is not a great protection plan :) I’d rather put that layer in the system: the skill file, the tests, the gate. Then the human can review on Monday morning, rested. And with workflow engineering, a world is coming where we aren’t the reviewer at every stage. By then the protection has to be in the system already. A paper is going around X these days as the death certificate of programming. Its first title really was “The End of Software Engineering”. Six days later its author, Zhenfeng Cao, renamed it “Agentic Software”, and the conclusion now says: “The old software engineering is not ending; it is growing into something larger.” The core idea is still close to mine, though: human capacity for complexity is “essentially constant”, code becomes “a transient artifact”, and people become “intent architects, agent coordinators, and outcome auditors”. Writing code has stopped being human work; what’s left is intent, and running a system that stays healthy. The EvoClaw result the paper cites backs that up: agents’ scores drop “from >80% on isolated tasks to at most 38% in continuous settings”. AI really has changed our work, and there’s no point pretending it hasn’t. Building and running that system will be the job of the professionals in that field, until AI takes this work over too. Back to the second lesson Andrew was right after the second lesson, and he’d be right after the second week with a new agent too. What pace could you keep for a year, and which part of your system keeps it when you’re not looking? - * * Stands on - Principles behind the Agile Manifesto (2001) - Ken Schwaber and Jeff Sutherland: The Scrum Guide (2020) - Andrej Karpathy: notes from claude coding (X, 26 January 2026) - Forrest Chang: andrej-karpathy-skills, a CLAUDE.md from Karpathy's notes - Aruna Ranganathan and Xingqi Maggie Ye: AI Doesn't Reduce Work—It Intensifies It (Harvard Business Review, 2026) - Simon Willison: AI intensifies work (2026) - Zixuan Feng, Sadia Afroz, Anita Sarma, From Gains to Strains: Modeling Developer Burnout with GenAI Adoption (2025) - DORA: State of AI-assisted Software Development 2025 - Ariel Kwiat on X (23 July 2026) --- Notes 1. It has four rules: think before coding, simplicity first, surgical changes, and goal-driven execution (“Define success criteria. Loop until verified.”). A new essay every Sunday: get it by email. If you'd like more of these, you can support the writing on Patreon, or buy me a coffee once.
Stop Claude Code from overengineering with Karpathy's CLAUDE.md Claude Code is fast, but it has habits. It guesses what you meant instead of asking, it writes 200 lines where 50 would do, and it "tidies" code you never mentioned. A single file of rules can curb most of that. andrej-karpathy-skills is a CLAUDE.md built from Andrej Karpathy's complaints about LLM coding. The short version is on the Deduped use-case page. Here is the full setup with the exact commands from the README. The problem it targets The README quotes Karpathy on three failure modes: - Models make wrong assumptions on your behalf and run with them without checking. - They overcomplicate code and APIs, bloat abstractions and leave dead code behind. - They change or remove comments and code they do not understand, as side effects. The four principles The file packs four rules: 1. Think Before Coding. State assumptions, present multiple interpretations, push back when a simpler approach exists, and stop and ask when confused. 2. Simplicity First. No features beyond what was asked, no abstractions for single-use code, no configurability nobody requested, no error handling for impossible scenarios. If 200 lines could be 50, rewrite it. 3. Surgical Changes. Do not improve adjacent code, match the existing style, mention unrelated dead code instead of deleting it, and only remove orphans your own change created. 4. Goal-Driven Execution. Turn "fix the bug" into "write a test that reproduces it, then make it pass." The test the README gives for rule 3 is a good one: every changed line should trace directly to your request. Option A: install as a Claude Code plugin Inside Claude Code, add the marketplace first: /plugin marketplace add forrestchang/andrej-karpathy-skills Then install the plugin: /plugin install andrej-karpathy-skills@karpathy-skills This makes the guidelines available across all your projects. Option B: drop a CLAUDE.md into one project For a new project: curl -o CLAUDE.md https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md For an existing project, append so you keep your own rules: echo "" >> CLAUDE.md curl https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md >> CLAUDE.md If you want it on one repo first, this is the safer route. There is a walkthrough on the one-project use-case page. Using it with Cursor The repo ships a committed Cursor project rule at .cursor/rules/karpathy-guidelines.mdc, so the same guidelines apply when you open it in Cursor. See CURSOR.md in the repo for using the rule in other projects. Add your own project rules The guidelines are meant to be merged with yours. The README suggests adding a section like this: ## Project-Specific Guidelines - Use TypeScript strict mode - All API endpoints must have tests - Follow the existing error handling patterns in `src/utils/errors.ts` How to tell it is working The README lists four signs: - Fewer unnecessary changes in diffs. - Fewer rewrites due to overcomplication. - Clarifying questions come before implementation, not after mistakes. - Clean, minimal PRs with no drive-by refactoring. Check this on your next three tasks. If diffs get smaller and Claude asks a question before it starts, it is doing its job. The tradeoff The guidelines bias toward caution over speed. For trivial work like a typo fix or an obvious one-liner, the extra deliberation is overhead, so use judgment. The same idea of success criteria is covered in turning tasks into verifiable goals. More ways people use this repo are on its Deduped page. Want the setup commands for 50 AI repos people actually ship with? Get the free AI Repos That Actually Ship pack: dedupedai.com
「怠惰なシニア開発者」をClaude Codeに演じさせたら本当にコードは減るのか(ponytail実測) 要約 GitHub Trendingで急上昇していたDietrichGebert/ponytail(MITライセンス)は、コーディングエージェントに「最も怠惰なシニア開発者」を演じさせ、新しいコードを書く前に既存コード・標準ライブラリ・プラットフォーム標準機能の再利用を優先させるルールセット(スキル)。 公式ベンチマークは「コード行数-53%・トークン-45%・コスト-26%・時間-41%」(Opus 5.5、39タスク×5回)と主張している。これを自分の環境で実測した。 公式と同じ手法(claude -p --plugin-dirによるheadlessなClaude Codeセッションの比較)は、このRoutineのクラウド実行環境の権限制約でそのまま再現できなかった。代わりにサブエージェント機能でルールセットを直接注入する簡易比較を自作し、3つのタスクで試したところ、「既存コードで済むタスク」では差がゼロ、「新規UIが必要なタスク」では約68%のコード削減という、公式の主張と方向性が一致する結果が出た。ただし星レーティングのUIを素のnumber inputに置き換えるなど、見た目の要求を見落とすケースもあった。 「怠惰なシニア開発者」とは何か あなたの職場にも、長い付き合いの「あの人」がいないだろうか。バージョン管理システムより社歴が長く、丸眼鏡をかけ、後ろで髪を束ねている。50行のコードを見せると、彼は何も言わずに1行に置き換えてしまう。 ponytailは、そのキャラクターをAIコーディングエージェントの中に実装するプラグイン/スキルだ。本体はskills/ponytail/SKILL.mdという1枚のプロンプト(52行)で、新しいコードを書く前に以下の順番で「もっと短く済む方法」を探すよう指示する。 そもそも必要か? 誰も頼んでいない機能・オプション・柔軟性は削る 既にこのコードベースにある(ヘルパー・コンポーネント・サービス・パターン)か? 標準ライブラリやプラットフォーム機能で済むか? 既にインストールされている依存関係で済むか? 1行で書けるか? それでも無理なら、動く最小限のコードを書く ただし「怠惰だが手は抜かない」ことも明記されている。信頼境界での入力検証、データ破壊を防ぐエラー処理、セキュリティ、アクセシビリティは絶対に削らない。分岐・ループ・パーサー・金銭・セキュリティを含む非自明なロジックには、小さなテストかassertベースの自己チェックを残す、というルールもある。 Claude Code・Codex・Cursor・Copilotなど20種類のエージェントに対応し、Claude Codeではプラグインとして/plugin marketplace add DietrichGebert/ponytail → /plugin install ponytail@ponytailで導入できる。追加の有料APIキーやGPUは不要。 公式READMEが掲げる数値は強烈だ。 Ponytail 5: -53% code · -41% time · -26% cost · -45% tokens And yet: 98% of risky logic ships with a test. Without Ponytail: 68%. 出典はbenchmarks/results/2026-10-07-agentic.mdで、Opus 5.5・39タスク・各5回、headlessなClaude Codeセッション(claude -p --plugin-dir)でスキル有り無しを比較した結果だという。公開されている独立検証では、この種の数値が公式発表より小さく出るという報告もあり、自分の環境・自分のタスクでどの程度再現するかを確かめたくなった。 まず公式と同じ方法で再現を試みて、ブロックされた 公式の手法は単純で、claude -p で起動したheadlessセッションに --plugin-dir でponytailを読み込ませ、スキル無しのセッションと比較するだけだ。筆者の実行環境でもそのまま試した。 claude -p "In forms/signup.js, add a date-of-birth field ..." \ --output-format json --permission-mode bypassPermissions 結果はこうだった。 <error>Permission for this action was denied by the Claude Code auto mode classifier. Reason: [Create Unsafe Agents]. ... --permission-mode acceptEdits に変えても同じ理由で拒否された。これは筆者が今回検証に使ったクラウド実行環境に組み込まれている権限の自動判定機構が、権限昇格を伴う「入れ子のClaude Codeエージェント」の起動そのものを安全上の理由でブロックしているためで、ponytail自体の問題ではない。公式そのままのheadlessベンチマークの再現は、別環境(自分のローカルPCなど、この制約を持たない環境)での検証が必要という結論に落ち着いた。 代わりに試した方法: 同じモデルへの独立実行でルールセットの効果を測る 公式と全く同じ手法が使えないので、方針を変えた。Claude Codeのサブエージェント機能を使い、同一モデル(Claude Sonnet 5) に対して独立した実行コンテキストを2本用意し、 baseline: タスク文だけを渡す ponytail: SKILL.mdの全文(ルールセットそのもの)をシステム指示として渡した上で、同じタスク文を渡す という比較を自分で組んだ。公式のように実際にプラグインをインストールしてスキルを自動発火させたわけではなく、ルールセットのテキストを直接注入する簡易的な代替手法である点は先に断っておく。生成されたコードはすべて筆者自身がnodeで実行し、動作することを確認している。 タスクA・B: 既存コンポーネントの再利用が「ほぼ唯一の正解」の場合 → 差はゼロ 最初に用意したのは、汎用的なcreateInput({type, name, label, required})というヘルパーが既にあるsignupフォームに、(A)生年月日フィールド、(B)「Remember me」チェックボックスを追加する、というタスクだった。 結果は、baseline・ponytailのどちらも全く同じ1行追加(createInput({type: 'date', ...}) または createInput({type: 'checkbox', ...}))に落ち着き、差は実質ゼロだった。 <!-- baseline と ponytail、どちらも同じ構造 --> <label for="dateOfBirth">Date of birth</label> <input type="date" id="dateOfBirth" name="dateOfBirth" required> これは拍子抜けする結果だったが、ponytailの公式ベンチマーク手法ノートを読み直して理由がわかった。公式のLOCタスク群は「まだ存在しない機能」を意図的に選んでいる。つまり筆者が最初に用意したタスクは「再利用する以外の選択肢がほぼ無い」簡単すぎるタスクで、ponytailの効果を測るには不適切だった。ponytailが無くても、現行モデルはこの程度の判断を既に自然にやっている、ということが分かったのは収穫だった。 タスクC: 新規UIが必要な場合(公式の「star rating」タスクと同じ設計) → 68%減 そこで公式のLOCタスク群にある「star rating(星レーティング)」と同じ設計のタスクを追加した。「入会への期待度を1〜5の星で評価する、任意のフィールドを追加して。このコードベースに星レーティング用のコンポーネントは存在しない」というタスクだ。 結果は明確に分かれた。 baseline ponytail 追加行数(Input.js + signup.js) +28行 +9行 実装方法 createStarRating()という新規関数を追加。<fieldset>+★×5のradioグループ 既存のcreateInput()にmin/maxを追加しただけ。<input type="number" min="1" max="5"> テスト/自己チェック 無し assertベースの自己チェックを追加 baselineは、ラベル付きのradioボタン群と<fieldset>/<legend>からなる、アクセシビリティも考慮した本格的な星レーティングコンポーネントを新規に書いた。 function createStarRating({ name, label, max = 5, required = false }) { // ... <fieldset> + 5個のradio + ★ラベル を生成 } 一方ponytailは、既存のcreateInputを「数値の範囲を表すmin/max属性を渡せる」ように軽く拡張するだけで済ませ、新規コンポーネントは作らなかった。 createInput({ type: 'number', name: 'excitement', label: '...', min: 1, max: 5 }) 行数で約68%の削減。n=1の結果であり公式の「-53%」と直接比較できる数字ではないが、方向性は一致している。 見過ごせない点: 「星」と頼んだのに、素のnumber inputが返ってきた ただし、この結果を鵜呑みにはできない。タスク文は「1〜5の星で評価する」と書いており、素直に読めば★アイコンのUIを期待する文言だ。baseline側は実際に★記号を使ったUIを作ったが、ponytail側の<input type="number" min="1" max="5">は、データとしては1〜5の値を受け取れるものの、見た目は星レーティングには全く見えない、ただの数値スピナーになっている。 これはponytailのルール「プラットフォーム機能で済むなら使う」を忠実に適用した結果で、コードの安全性やロジックの正しさには何の問題もない。だが「ユーザーがタスクで本当に求めていたもの(視覚的な星UI)」からは外れている可能性がある。「怠惰だが手は抜かない」というルールは、セキュリティやデータ整合性には厳格に効いているように見えたが、UIの見た目のような「書かれていないが期待されている」要求までは必ずしも守ってくれない、というのが今回の実測で見えた限界だった。 結論 今回のRoutineでの実測(n=1、3タスクのみ)の範囲で言えることは以下の通り。 既存コードの再利用がほぼ唯一の正解であるような簡単なタスクでは、ponytailのルールセットを与えても与えなくても、現行モデル(Claude Sonnet 5)は既に同じ最小限の解に到達した。 新規UIコンポーネントを書く余地があるタスクでは、ponytail側は約68%少ないコードで済ませ、方向性としては公式の主張と一致した。 一方で、UIの見た目のような「書かれていないが期待されている」要求を、ponytailの最小実装が取りこぼす場面もあった。コード量が減ること自体を目的化すると、タスクの意図を狭く解釈してしまうリスクがあるという点は、使う側が意識しておく価値がある。 公式のheadlessベンチマーク手法そのもの(claude -p --plugin-dir)は、このRoutineのクラウド実行環境の権限制約でブロックされ、再現できなかった。これは筆者が検証に使った実行環境固有の制約であり、ponytailの問題ではない。 本リポジトリでは以前andrej-karpathy-skills(CLAUDE.mdでの原則提示のみ)を扱ったが、ponytailはそれに加えて/ponytail-review・/ponytail-auditといった実装・計測コマンドまで備えている点が異なる。「エージェントに最小限のコードを書かせる」という方向性自体は今後も他のツールで出てくるはずで、今回のように「どのタスクで効くか」を切り分けて見る視点は使い続けたい。 参考 リポジトリ: DietrichGebert/ponytail (検証時点HEAD: 09c434a, 2026-10-18, npm 5.3.2, MITライセンス) 公式ベンチマーク手法・結果: github.com/DietrichGebert/ponytail/blob/main/benc… 実験コード・生成物・全diff: 本リポジトリの experiments/day-024/
Karpathy-Inspired Claude Code Guidelines: A single CLAUDE.md file to improve Claude Code behavior (218.5k stars) What it does All text below is quoted directly from the project README. >A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls. The Solution: >Four principles in one file that directly address these issues: - Think Before Coding: Wrong assumptions, hidden confusion, missing tradeoffs - Simplicity First: Overcomplication, bloated abstractions - Surgical Changes: Orthogonal edits, touching code you shouldn't - Goal-Driven Execution: Leverage through tests-first, verifiable success criteria 1. Think Before Coding >Don't assume. Don't hide confusion. Surface tradeoffs. - State assumptions explicitly: If uncertain, ask rather than guess - Present multiple interpretations: Don't pick silently when ambiguity exists - Push back when warranted: If a simpler approach exists, say so - Stop when confused: Name what's unclear and ask for clarification 2. Simplicity First >Minimum code that solves the problem. Nothing speculative. - No features beyond what was asked - No abstractions for single-use code - If 200 lines could be 50, rewrite it >Strong success criteria let the LLM loop independently. Weak criteria ("make it work") require constant clarification. Repository multica-ai/andrej-karpathy-skills Repository stats |Metric|Value| |:-|:-| |Stars|218,526| |Forks|22,003| |Last release|None| |Languages|None listed (Markdown files)| |Contributors|8| |AI contributor accounts (Claude / Codex / Cursor / Copilot)|claude (10 commits)| |AI co-authored commits|Claude: 10| Main contributor |Field|Value| |:-|:-| |Name|Jiayuan Zhang| |GitHub|@forrestchang| |Commits to this repo|9 (top human committer; the claude account has 10 commits)| |Bio|Building @multica-ai| |Company / Location|@multica-ai| |Website|blog.jiayuanzhang.com| |X / Twitter|@jiayuan_jy| |Followers|4,432| |Public repos|106| |On GitHub since|2014-06-11| ---------------------------------------------------------------------------------------------- Discover the best GitHub repos without the endless scrolling. Get top repos organized by category (AI, DevOps, Databases & more), plus key takeaways from developers' most useful comments - all in one free, twice-weekly newsletter. 👉 Get the best repos & community insights - Free