andrej-karpathy-skills: The markdown patch that teaches Claude Code to behave like a senior engineer

A tiny Claude plugin turns Karpathy’s anti-overengineering rules into a practical workflow for minimal diffs, test-driven execution, and fewer AI self-inflicted wounds.

8 min read • View on GitHub • More from forrestchang

A wide black-ink editorial scene of a mechanic applying a thin paper patch onto a restless clockwork machine, where one side is tangled with oversized gears and loose parts while the patched side runs smoothly. The image explains how a small markdown layer can change the behavior of an agentic coding system without changing the machine itself.
A few text files become a behavior layer. The novelty is not the advice, it is the packaging.
Key Takeaways

The weird part is the whole point. This repository is mostly markdown, but it behaves like infrastructure. Instead of asking you to remember Karpathy’s advice, it loads that advice into Claude Code as a living constraint set.

That matters because AI coding failures are usually not dramatic. They are mundane: wrong assumptions, sprawling abstractions, and helpful edits that break unrelated code. This repo treats those as workflow bugs, not personality quirks.

The strange power of a few markdown files

At a glance, forrestchang/andrej-karpathy-skills looks too small to matter. Then you realize the point is not size. It is that a handful of files can change how an agent thinks, chooses, and edits.

The models make wrong assumptions on your behalf and just run along with them without checking. They don't manage their confusion, don't seek clarifications, don't present tradeoffs, don't push back when they should.

Andrej Karpathy, AI Researcher/Developer (Observations quoted in project) · forrestchang/andrej-karpathy-skills README

That is the project’s core diagnosis. Claude Code is capable, but without guardrails it can turn confidence into churn. This repo tries to reduce churn by making restraint part of the installation.

What the repository actually ships

The structure is simple and deliberate. The root CLAUDE.md gives project-level instructions. The skill file, skills/karpathy-guidelines/SKILL.md, packages the same philosophy for Claude Code’s skill system. EXAMPLES.md gives the model contrast cases. .claude-plugin/marketplace.json turns the whole thing into something you can install instead of copy by hand.

A plain-text repo becomes a behavior system by shaping what the agent sees, what it remembers, and how it narrows its choices.

A medium-close editorial illustration of two workbenches side by side. On the left, an AI assistant assembles an absurdly elaborate machine for a trivial task, with too many gears, brackets, and decorative parts. On the right, the same assistant follows a checklist and builds one clean tool with only the necessary parts. The image explains how constraints reduce overengineering rather than intelligence.
The repo is less about making Claude smarter and more about making it less self-indulgent.

The four constraints that change the output

The repo’s philosophy collapses into four rules. First, think before coding. Second, keep it simple. Third, make surgical changes. Fourth, work toward a testable goal. None of these are groundbreaking in isolation. The difference is that they are written as operational constraints for a machine that otherwise wants to move fast and explain itself later.

LLMs are exceptionally good at looping until they meet specific goals... Don't tell it what to do, give it success criteria and watch it go.

Andrej Karpathy, AI Researcher/Developer (Observations quoted in project) · forrestchang/andrej-karpathy-skills README

That last point is the subtle one. The repo does not just ask for obedience. It redirects the agent toward outcomes that can be checked. That is a better fit for coding than vague instructions, because code either passes or it does not.

The most useful rule may be the simplest: do not improve adjacent code. That sounds almost rude until you have watched an assistant refactor half a directory to solve a one-line bug.

Why “don’t improve adjacent code” matters most

This repo understands something many prompt files miss. In professional codebases, the biggest cost of AI assistance is often not incorrect logic. It is collateral damage. A clean diff is often more valuable than a clever one.

That makes the project less like a style guide and more like a treaty. It tells the model where not to roam. It asks for targeted movement, not exploratory renovation.

Examples as a negative dataset

EXAMPLES.md does more than demonstrate the right answer. It names the wrong reflexes: over-abstracting, creating needless indirection, and turning a small problem into an architecture exercise. That is useful because LLMs often learn boundaries better from contrasts than from abstract warnings.

PatternManual prompt snippetsandrej-karpathy-skillsGeneric assistants
Setup effortLow, but repeated every sessionLow after installLow to medium
ReusabilityWeak, copied by handStrong, installed as a skillStrong, but generic
Behavioral specificityVaries by authorHigh, opinionated and narrowMedium, tool-defined
Diff disciplineDepends on user memoryExplicitly enforcedInconsistent
Test-loop orientationOptionalCentralOften present, but not the headline
Distribution modelPaste and hopePlugin or repo fileClosed product defaults

The point of the examples is not to show off best practices. It is to pin down the failure shape. Once the model sees what not to do, the rules stop being abstract and start acting like a fence.

Why the plugin packaging matters

The packaging is the story. A prompt in a README is advice. A prompt inside a plugin manifest is a dependency. That shift changes how people trust it, share it, and keep it in sync with a workflow.

That is also why this repo feels bigger than it is. It points to a future where behavioral boundaries are versioned artifacts, not one-off reminders. You do not just invoke a model. You install the norms that shape it.

How it compares to other ways of steering AI coding

The contrast is not really about winner and loser. It is about control surface. Copilot, Cursor, and raw Claude instructions all help, but they live at different levels of specificity. This repo is narrow on purpose, and that narrowness is the advantage.

ApproachWhat it optimizesStrengthWeakness
Generic prompt filesAd hoc guidanceFast to tryEasy to drift
Raw CLAUDE.mdProject-level instructionSimple and localHarder to distribute cleanly
andrej-karpathy-skillsBehavioral constraintOpinionated, installable, repeatableWorks best for teams who want this exact philosophy
Broader coding assistantsGeneral productivityIntegrated experienceLess explicit about code discipline

If you want a philosophy, this repo gives you one. If you want a product, it gives you an install path. That combination explains why a few markdown files can attract outsized attention.

What this says about agentic coding

The real lesson is not that prompts matter. Everyone already knows that. The lesson is that the next layer of AI tooling may be governance: constraints, defaults, and distribution mechanisms that shape model behavior before the first line of code is written.

They really like to overcomplicate code and APIs, bloat abstractions, don't clean up dead code... implement a bloated construction over 1000 lines when 100 would do.

Andrej Karpathy, AI Researcher/Developer (Observations quoted in project) · forrestchang/andrej-karpathy-skills README

That is why this repository feels like an early signal, not a gimmick. It packages judgment. And in agentic coding, packaged judgment may become as important as model quality.