The Andrej Karpathy Skills project identifies silent assumption-making as one of the most costly LLM coding failure modes. When a model receives an ambiguous request, it typically picks one interpretation and runs with it — writing code, creating files, and structuring solutions in ways the user never intended. By the time the mistake surfaces, significant work has to be discarded. This principle — Think Before Coding — forces explicit reasoning before any implementation begins.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/multica-ai/andrej-karpathy-skills/llms.txt
Use this file to discover all available pages before exploring further.
The core problem
From Andrej Karpathy’s original observation:“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 surface inconsistencies, don’t present tradeoffs, don’t push back when they should.”The four sub-rules below address each failure mode directly.
The four sub-rules
State assumptions explicitly
State assumptions explicitly
Before implementing, write out every assumption the solution depends on. If you’re uncertain about any of them, ask rather than guess.Assumptions to surface include:
- Who the feature is for (all users? admins? a subset?)
- What format output should take (file? API response? UI?)
- Which fields or data should be included
- What scale or volume the solution needs to handle
Present multiple interpretations
Present multiple interpretations
When a request is ambiguous, don’t pick silently. Present the distinct interpretations you can see, explain the tradeoffs between them, and ask which one to pursue.This is especially important when:
- The same word can mean different things (“faster” could mean lower latency, higher throughput, or better perceived speed)
- The scope of a feature isn’t defined (“export data” could mean a UI download, a background job, or an API endpoint)
- Constraints differ significantly across approaches (in-memory vs. database-backed, synchronous vs. async)
Push back when warranted
Push back when warranted
If a simpler approach exists, say so. If the request as stated would lead to an over-engineered or fragile solution, push back before implementing.Pushing back is not refusing to help — it’s providing the same advice a senior engineer on the team would offer. Examples:
- “You asked for a caching layer, but the query runs in 30ms. Is caching worth the added complexity here?”
- “This could be a single function instead of a class hierarchy. Should I keep it simple?”
Stop when confused
Stop when confused
If something in the request is genuinely unclear, stop. Name exactly what’s confusing and ask a targeted question. Don’t attempt to implement through confusion and hope the result is right.“Unclear” means:
- The request contradicts something else in the codebase
- A key term could mean two different things and the choice affects architecture
- A prerequisite is missing (e.g., “add auth” but there’s no user model yet)
Examples from real requests
Hidden assumptions: “Add a feature to export user data”
The request sounds simple, but it hides at least four independent assumptions.Bad example — silent assumption-making
id/email/name are the right fields, and CSV fieldnames match the actual data structure. Every one of those assumptions could be wrong.
Good example — surface assumptions before coding
Multiple interpretations: “Make the search faster”
“Faster” is a single word that covers at least three different problems with different solutions.Bad example — pick silently and over-implement
Good example — present interpretations with tradeoffs
These guidelines bias toward caution over speed. For trivial tasks with obvious intent, use judgment — not every request needs a full clarification round.
What success looks like
This principle is working when clarifying questions come before implementation rather than after mistakes. You should see:- Fewer rewrites caused by wrong initial assumptions
- Smaller, more focused diffs because the scope was agreed on upfront
- Tradeoff discussions that happen in comments, not in code reviews after the fact
Related principles
Simplicity First
Once you know what to build, build the minimum version. No speculative features.
Goal-Driven Execution
Define verifiable success criteria before starting multi-step tasks.