{
 "season": "Season 1",
 "checked": "2026-10-21",
 "level0": {
  "title": "Copy code out of a chat tab",
  "line": "Everyone starts here. It doesn't count, and nobody's judging."
 },
 "tiers": [
  {
   "n": 1,
   "era": "Stone Age",
   "name": "First contact",
   "line": "It edits, it runs things, it answers. You stop copy-pasting."
  },
  {
   "n": 2,
   "era": "Fire",
   "name": "Context",
   "line": "It knows what you know, because you told it."
  },
  {
   "n": 3,
   "era": "Wheel",
   "name": "Checks",
   "line": "It proves the thing works before it says done."
  },
  {
   "n": 4,
   "era": "Bronze Age",
   "name": "Tools",
   "line": "It reaches past the repo: CLIs, servers, your browser, your inbox."
  },
  {
   "n": 5,
   "era": "Iron Age",
   "name": "Your setup",
   "line": "Rules, skills, hooks and memory that you wrote yourself."
  },
  {
   "n": 6,
   "era": "Steam",
   "name": "Second opinions",
   "line": "Another agent reads it before you do."
  },
  {
   "n": 7,
   "era": "Electric",
   "name": "Off the desk",
   "line": "It works while you sleep, sit on the couch, or close the laptop."
  },
  {
   "n": 8,
   "era": "Silicon",
   "name": "Orchestra",
   "line": "Many agents, one plan, and you still know who's doing what."
  },
  {
   "n": 9,
   "era": "Orbit",
   "name": "Harness",
   "line": "You build the system the agents work in."
  },
  {
   "n": 10,
   "era": "Stone, again",
   "name": "Full circle",
   "line": "Less config, more judgement. You read the 5% that matters."
  }
 ],
 "levels": [
  {
   "n": 1,
   "id": "install-an-agent",
   "title": "Install a coding agent",
   "line": "One that reads your files and runs commands, not a chat tab.",
   "check": "Any agent config folder exists: ~/.claude, ~/.codex, ~/.cursor, ~/.config/opencode, ~/.gemini, ~/.factory, ~/.pi. You're reading this from inside one, so: yes.",
   "how": "file",
   "from": {
    "h": "mitchellh",
    "name": "Mitchell Hashimoto",
    "q": "To find value, you must use an agent.",
    "url": "https://mitchellh.com/writing/my-ai-adoption-journey"
   }
  },
  {
   "n": 2,
   "id": "let-it-edit",
   "title": "Let it edit the files",
   "line": "Stop pasting code between a chat window and your editor. It writes to disk; you read the diff.",
   "check": "Its file-edit tool shows up in session logs (Edit, Write, apply_patch).",
   "how": "history"
  },
  {
   "n": 3,
   "id": "ask-before-change",
   "title": "Ask before you change",
   "line": "\"How does auth work here?\" Ask it what you'd ask a senior engineer on day one.",
   "check": "5+ prompts that are questions about the code (how, why, where, what does).",
   "how": "history",
   "from": {
    "h": null,
    "name": "Anthropic, Claude Code best practices",
    "q": "Ask it the questions you'd ask a senior engineer about the codebase.",
    "url": "https://code.claude.com/docs/en/best-practices",
    "paraphrase": true
   }
  },
  {
   "n": 4,
   "id": "paste-the-error",
   "title": "Paste the whole error",
   "line": "The full stack trace or log, not your summary of it.",
   "check": "5+ prompts with pasted blocks or raw logs ([Pasted text …], stack traces).",
   "how": "history"
  },
  {
   "n": 5,
   "id": "screenshot",
   "title": "Send it a screenshot",
   "line": "A picture of the broken layout beats a paragraph about it. \"Fix this\" + image is a whole prompt.",
   "check": "3+ prompts with an image attached ([Image #…]).",
   "how": "history",
   "from": {
    "h": "steipete",
    "name": "Peter Steinberger",
    "q": "Attaches a screenshot to a large share of his prompts; \"fix padding\" plus an image is enough.",
    "url": "https://steipete.me/posts/just-talk-to-it",
    "paraphrase": true
   }
  },
  {
   "n": 6,
   "id": "interrupt",
   "title": "Interrupt it",
   "line": "Hit Esc the moment it heads the wrong way. Waiting for it to finish costs more.",
   "check": "5+ interrupted turns in session logs (\"[Request interrupted by user]\").",
   "how": "history",
   "from": {
    "h": "steipete",
    "name": "Peter Steinberger",
    "q": "Don't be afraid of stopping models mid-way.",
    "url": "https://steipete.me/posts/just-talk-to-it"
   }
  },
  {
   "n": 7,
   "id": "point-at-files",
   "title": "Point at the files",
   "line": "@-mention the file or paste the path, so it doesn't go hunting.",
   "check": "10+ prompts with @file mentions or explicit file paths.",
   "how": "history"
  },
  {
   "n": 8,
   "id": "commit-often",
   "title": "Commit small and often",
   "line": "A clean git tree is the best undo button you have. Commit before you let it loose.",
   "check": "It ran git commit 5+ times in your sessions, or you use checkpoints.",
   "how": "history"
  },
  {
   "n": 9,
   "id": "fresh-session",
   "title": "Start a fresh session",
   "line": "When it gets confused, /clear and ask again. Arguing with a polluted context never wins.",
   "check": "/clear, /new or a fresh session after a failed attempt, 3+ times.",
   "how": "history",
   "from": {
    "h": null,
    "name": "Anthropic, Claude Code best practices",
    "q": "After two failed corrections, /clear and write a better first prompt.",
    "url": "https://code.claude.com/docs/en/best-practices",
    "paraphrase": true
   }
  },
  {
   "n": 10,
   "id": "not-code",
   "title": "Use it for something that isn't code",
   "line": "Rename 400 photos, sort the receipts, untangle a spreadsheet. It's a computer that does chores.",
   "check": "1+ session in a folder that isn't a git repo (Downloads, Documents, home).",
   "how": "history"
  },
  {
   "n": 11,
   "id": "rules-file",
   "title": "Write a rules file",
   "line": "AGENTS.md or CLAUDE.md: how to build, test and run this repo, and what never to do.",
   "check": "An AGENTS.md, CLAUDE.md, GEMINI.md or .cursor/rules in any repo you work in.",
   "how": "file",
   "from": {
    "h": "leerob",
    "name": "Lee Robinson",
    "q": "I started with zero custom rules. I only added a rules file later after the model got a few things wrong",
    "url": "https://leerob.com/pixo"
   }
  },
  {
   "n": 12,
   "id": "global-rules",
   "title": "Write down how you like to work",
   "line": "One global file for every project: your taste, your tools, your pet peeves.",
   "check": "~/.claude/CLAUDE.md or ~/.codex/AGENTS.md exists and isn't empty.",
   "how": "file"
  },
  {
   "n": 13,
   "id": "voice",
   "title": "Talk instead of type",
   "line": "Dictate. You'll give it three times the context you'd ever bother typing.",
   "check": "A dictation app is installed (Wispr Flow, superwhisper, MacWhisper, VoiceInk, OpenWhispr, Aqua, Spokenly, Handy), or prompts read like speech (um, uh, long run-ons).",
   "how": "file",
   "from": {
    "h": "thdxr",
    "name": "Dax Raad",
    "q": "the thing that killed my editor for me was fast local voice models more than OpenCode",
    "url": "https://x.com/thdxr/status/2078527322563449007"
   }
  },
  {
   "n": 14,
   "id": "hand-it-docs",
   "title": "Hand it the docs",
   "line": "Paste the URL of the API reference, the issue, the RFC. Let it read instead of guess.",
   "check": "10+ prompts with URLs, or web fetches in session logs.",
   "how": "history"
  },
  {
   "n": 15,
   "id": "point-at-example",
   "title": "Point at an example",
   "line": "\"Do it like UserCard.tsx.\" One good example beats a paragraph of conventions.",
   "check": "Prompts that name an existing file or project to copy (\"like X\", \"same as Y\", \"follow Z\").",
   "how": "history"
  },
  {
   "n": 16,
   "id": "done-looks-like",
   "title": "Say what done looks like",
   "line": "What's wrong, where, and how you'll know it's fixed. \"Fix login\" isn't a task.",
   "check": "Prompts that state a finish line (\"done when\", \"until\", \"should show\").",
   "how": "history",
   "from": {
    "h": null,
    "name": "OpenAI, Codex best practices",
    "q": "Goal, Context, Constraints, Done when: their prompt template.",
    "url": "https://learn.chatgpt.com/guides/best-practices",
    "paraphrase": true
   }
  },
  {
   "n": 17,
   "id": "plan-first",
   "title": "Ask for a plan first",
   "line": "Plan mode, or \"don't write code yet\". A plan is ten times shorter than the diff it saves you.",
   "check": "Plan mode used, or 5+ prompts asking for a plan before code.",
   "how": "history",
   "from": {
    "h": "leerob",
    "name": "Lee Robinson",
    "q": "Plan mode in Cursor is one of the most underrated features.",
    "url": "https://leerob.com/pixo"
   },
   "vs": {
    "h": "steipete",
    "name": "Peter Steinberger",
    "q": "Skips plan mode; asks for options and talks it through instead.",
    "url": "https://steipete.me/posts/just-talk-to-it",
    "paraphrase": true
   }
  },
  {
   "n": 18,
   "id": "three-versions",
   "title": "Ask for three versions",
   "line": "Of the UI, the name, the approach. Pick one, or steal from all three. Variants are nearly free now.",
   "check": "5+ prompts asking for variants, options or versions.",
   "how": "history"
  },
  {
   "n": 19,
   "id": "interview-me",
   "title": "Let it interview you",
   "line": "\"Ask me questions until you understand what I want.\" Then it builds the right thing.",
   "check": "Its ask-the-user tool used, a grill-me style skill installed, or prompts like \"ask me\" / \"interview me\".",
   "how": "history",
   "from": {
    "h": "mattpocock",
    "name": "Matt Pocock",
    "q": "grill-me",
    "url": "https://github.com/mattpocock/skills/blob/7a030a8b0dcaa601bb0dda9aaf174affb3d61145/README.md#L103",
    "skill": true
   }
  },
  {
   "n": 20,
   "id": "rule-after-mistake",
   "title": "Add a rule after every mistake",
   "line": "It did something dumb? It goes in the rules file, so it never does it twice.",
   "check": "A rules file changed 3+ times, agent memory notes saved, or prompts like \"add this to AGENTS.md\".",
   "how": "history",
   "from": {
    "h": "bcherny",
    "name": "Boris Cherny",
    "q": "Anytime we see Claude do something incorrectly we add it to the CLAUDE.md",
    "url": "https://x.com/bcherny/status/2007179840848597422"
   }
  },
  {
   "n": 21,
   "id": "way-to-verify",
   "title": "Give it a way to check its work",
   "line": "Tests, a build, a screenshot to compare. Then it fixes its own mistakes before you see them.",
   "check": "10+ prompts that ask it to verify, test, or make sure it works.",
   "how": "history",
   "from": {
    "h": "bcherny",
    "name": "Boris Cherny",
    "q": "give Claude a way to verify its work… 2-3x the quality",
    "url": "https://x.com/bcherny/status/2044847858634064115"
   }
  },
  {
   "n": 22,
   "id": "failing-test-first",
   "title": "Failing test first",
   "line": "Reproduce the bug in a test, watch it fail, then fix. Proof before the fix.",
   "check": "Prompts about failing tests, TDD or red/green, or a TDD skill installed.",
   "how": "history",
   "from": {
    "h": "kepano",
    "name": "Steph Ango",
    "q": "Verify the same fixture fails before the fix and passes afterward; do not change expectations to match buggy behavior.",
    "url": "https://github.com/kepano/defuddle/blob/49d14ecc4089696565c2479b2f57db72be199adc/AGENTS.md#L17"
   }
  },
  {
   "n": 23,
   "id": "browser",
   "title": "Let it drive a browser",
   "line": "Playwright, agent-browser, Chrome. It clicks through what it built instead of guessing.",
   "check": "A browser MCP or skill installed, or 10+ browser-automation calls.",
   "how": "file"
  },
  {
   "n": 24,
   "id": "proof",
   "title": "Ask for proof, not \"done!\"",
   "line": "The command it ran and the real output. A screenshot. A video of it working.",
   "check": "5+ prompts asking for proof, screenshots or recordings of the result.",
   "how": "history",
   "from": {
    "h": "mrnugget",
    "name": "Thorsten Ball",
    "q": "give me irrefutable proof that this works. Dazzle me. Give me a video as proof, or something.",
    "url": "https://registerspill.thorstenball.com/p/joy-and-curiosity-99"
   }
  },
  {
   "n": 25,
   "id": "rewind",
   "title": "Undo the conversation, not just the code",
   "line": "Rewind or a checkpoint takes you back to before it went wrong. Try risky things.",
   "check": "/rewind or a checkpoint restore used by you at least once (typed, not just mentioned).",
   "how": "history"
  },
  {
   "n": 26,
   "id": "your-clis",
   "title": "Teach it your CLIs",
   "line": "gh, aws, stripe, supabase. \"Run foo --help\" and it learns the rest.",
   "check": "It ran 3+ different third-party CLIs (gh, aws, gcloud, vercel, netlify, stripe, supabase, wrangler, fly…).",
   "how": "history"
  },
  {
   "n": 27,
   "id": "allowlist",
   "title": "Pre-approve the safe stuff",
   "line": "An allowlist for tests, lint and git status. Approval fatigue is how you end up clicking yes to everything.",
   "check": "Permission allow rules, Codex rules, or auto mode configured.",
   "how": "file"
  },
  {
   "n": 28,
   "id": "side-question",
   "title": "Ask side questions without derailing",
   "line": "/btw, or a second session. The answer never pollutes the main context.",
   "check": "/btw used, or a parallel throwaway session for a quick question.",
   "how": "history"
  },
  {
   "n": 29,
   "id": "queue",
   "title": "Type the next message while it works",
   "line": "Queue follow-ups instead of waiting for it to finish.",
   "check": "Queued prompts in your agent's stats or logs, 20+.",
   "how": "history"
  },
  {
   "n": 30,
   "id": "ping-when-done",
   "title": "Get pinged when it's done",
   "line": "A hook, a sound, a push to your phone. Then go do something else.",
   "check": "A hook or script that notifies you when it's done (sound, push, notification), or a rule telling it to.",
   "how": "file",
   "from": {
    "h": "chrismccord",
    "name": "Chris McCord",
    "q": "when it's done work it runs a `notify msg` bash function I have",
    "url": "https://x.com/chris_mccord/status/2016576023400181773"
   },
   "vs": {
    "h": "mitchellh",
    "name": "Mitchell Hashimoto",
    "q": "Turns agent notifications off, so he decides when to switch context.",
    "url": "https://mitchellh.com/writing/my-ai-adoption-journey",
    "paraphrase": true
   }
  },
  {
   "n": 31,
   "id": "install-skill",
   "title": "Install a skill",
   "line": "Someone else's packaged know-how, loaded only when it's needed.",
   "check": "1+ skill folder in ~/.claude/skills, ~/.codex/skills, ~/.agents/skills or a repo's .claude/skills.",
   "how": "file"
  },
  {
   "n": 32,
   "id": "mcp",
   "title": "Connect a tool server",
   "line": "MCP for the things without a good CLI: Figma, Linear, your database.",
   "check": "1+ MCP server configured.",
   "how": "file",
   "vs": {
    "h": "steipete",
    "name": "Peter Steinberger",
    "q": "Prefers CLIs: the GitHub MCP alone ate 23k tokens of context.",
    "url": "https://steipete.me/posts/just-talk-to-it",
    "paraphrase": true
   }
  },
  {
   "n": 33,
   "id": "opens-the-pr",
   "title": "Let it open the PR",
   "line": "Branch, commit, push, write the description. You review.",
   "check": "It ran gh pr create (or similar) 3+ times.",
   "how": "history"
  },
  {
   "n": 34,
   "id": "deploys",
   "title": "Let it ship",
   "line": "Vercel, Netlify, Fly, a TestFlight build. You decide who presses the last button.",
   "check": "It ran a deploy CLI 3+ times.",
   "how": "history"
  },
  {
   "n": 35,
   "id": "slash-command",
   "title": "Save a prompt as a command",
   "line": "The thing you type every week, saved as /ship or /review.",
   "check": "1+ custom command in .claude/commands, or a user-invoked skill you wrote.",
   "how": "file"
  },
  {
   "n": 36,
   "id": "effort-dial",
   "title": "Turn the effort dial",
   "line": "Low for chores, high for the gnarly bug. Pick the model per job.",
   "check": "/effort or /model switched 3+ times, or reasoning effort set in config.",
   "how": "history"
  },
  {
   "n": 37,
   "id": "know-the-burn",
   "title": "Know what you burn",
   "line": "ccusage, CodexBar, /usage. Tokens are a budget; spend them on purpose.",
   "check": "A usage tracker installed, or /usage, /stats, /cost used 3+ times.",
   "how": "file"
  },
  {
   "n": 38,
   "id": "status-line",
   "title": "Watch the context fill up",
   "line": "A status line with context used, model and cost. No more surprise compactions.",
   "check": "A statusLine configured, or /context used 3+ times.",
   "how": "file"
  },
  {
   "n": 39,
   "id": "two-at-once",
   "title": "Two agents at once",
   "line": "One on the bug, one on the feature. Different folders, different problems.",
   "check": "Two sessions active in the same 10 minutes, on 5+ occasions (from prompt timestamps).",
   "how": "history"
  },
  {
   "n": 40,
   "id": "your-inbox",
   "title": "Connect it to your messages",
   "line": "Gmail, Slack, Teams, calendar. \"What did I promise people this week?\"",
   "check": "A mail, chat or calendar connector or MCP configured (names only).",
   "how": "file"
  },
  {
   "n": 41,
   "id": "write-a-skill",
   "title": "Write your own skill",
   "line": "The thing you keep explaining, written down once as a SKILL.md.",
   "check": "A skill you wrote yourself: no upstream source or lockfile entry, or it lives in your own repo.",
   "how": "file"
  },
  {
   "n": 42,
   "id": "subagents",
   "title": "Use subagents",
   "line": "Send helpers to read and search, so your main context stays clean.",
   "check": "10+ subagent runs in session logs.",
   "how": "history",
   "from": {
    "h": "embirico",
    "name": "Alexander Embiricos",
    "q": "Then, when I need anything new, I say \"using a subagent in parallel, do X\"",
    "url": "https://x.com/embirico/status/2046033614106931414"
   }
  },
  {
   "n": 43,
   "id": "format-hook",
   "title": "A hook that tidies every edit",
   "line": "Formatter or linter after each write. Deterministic beats \"please run prettier\" in a rules file.",
   "check": "A post-edit hook that runs a formatter or linter.",
   "how": "file",
   "from": {
    "h": "bcherny",
    "name": "Boris Cherny",
    "q": "We use a PostToolUse hook to format Claude's code.",
    "url": "https://x.com/bcherny/status/2007179852047335529"
   }
  },
  {
   "n": 44,
   "id": "guard-hook",
   "title": "A hook that says no",
   "line": "Block rm -rf, force pushes, pip when you use uv. Rules are advice; hooks are law.",
   "check": "A pre-tool hook that blocks or guards commands.",
   "how": "file",
   "from": {
    "h": "mitsuhiko",
    "name": "Armin Ronacher",
    "q": "Replaces the bash tool with a `uv`-aware version that injects Python command shims and blocks common non-`uv` workflows.",
    "url": "https://github.com/mitsuhiko/agent-stuff/blob/0865c849befd2021490679f96a8dee58c84ac857/README.md#L63"
   }
  },
  {
   "n": 45,
   "id": "memory",
   "title": "Let it keep notes",
   "line": "Memory, notes.md, PROGRESS.md. It shouldn't relearn your project every morning.",
   "check": "5+ memory notes, Codex memories on, or notes/progress files in your repos.",
   "how": "file",
   "from": {
    "h": "simonw",
    "name": "Simon Willison",
    "q": "Create a notes.md file in that folder and append notes to it as you work, tracking what you tried and anything you learned along the way.",
    "url": "https://github.com/simonw/research/blob/ba0cb97b42da153c13c465fb617f5c45f1f03b04/AGENTS.md#L3"
   }
  },
  {
   "n": 46,
   "id": "one-rules-file",
   "title": "One rules file for every agent",
   "line": "Symlink CLAUDE.md to AGENTS.md. Same rules, whichever agent you open.",
   "check": "A CLAUDE.md that is a symlink to, or imports, an AGENTS.md (or the other way round).",
   "how": "file",
   "from": {
    "h": "steipete",
    "name": "Peter Steinberger",
    "q": "~/.codex/AGENTS.md -> ~/Projects/agent-scripts/AGENTS.MD\n~/.claude/CLAUDE.md -> ~/Projects/agent-scripts/AGENTS.MD",
    "url": "https://github.com/steipete/agent-scripts/blob/79150cfac4a6ba4df13cf30176bf2db85170ae6c/README.md#L65-L67"
   }
  },
  {
   "n": 47,
   "id": "small-rules",
   "title": "Keep the rules file small",
   "line": "A map to your docs, not an encyclopedia. Would removing this line cause a mistake? No? Delete it.",
   "check": "The rules file of the repo you work in most is under 150 lines and points to other docs for the rest.",
   "how": "file",
   "from": {
    "h": "kentcdodds",
    "name": "Kent C. Dodds",
    "q": "This file is included in full context for every agent conversation. Keep it tiny and stable.",
    "url": "https://github.com/kentcdodds/kentcdodds.com/blob/b61c7ff4200c4aa0e35326d1a7baeb8a51d86673/AGENTS.md#L3-L4"
   }
  },
  {
   "n": 48,
   "id": "spec-first",
   "title": "Spec first",
   "line": "Two paragraphs in, a SPEC.md out, and a fresh session builds from the spec.",
   "check": "A SPEC.md, PLAN.md or plans/ folder in a repo you work in.",
   "how": "file",
   "from": {
    "h": "matklad",
    "name": "Alex Kladov",
    "q": "I was providing structure, Claude was painting by the numbers.",
    "url": "https://matklad.github.io/2026/01/20/vibecoding-2.html"
   }
  },
  {
   "n": 49,
   "id": "handoff",
   "title": "Write a handoff",
   "line": "Before the context fills, it writes down where it is. The next session picks up in one read.",
   "check": "A PROGRESS.md, HANDOFF.md or todo.md, or a handoff skill.",
   "how": "file",
   "from": {
    "h": "tqbf",
    "name": "Thomas Ptacek",
    "q": "I should be able to tell a future agent \"read PLAN.md and PROGRESS.md\" and trust it's up to speed with this codebase.",
    "url": "https://github.com/tqbf/swiftui-app/blob/3ca1cc4b8ffdbd3b628cc847574c9951b036fe12/CLAUDE.md#L5-L6"
   }
  },
  {
   "n": 50,
   "id": "worktrees",
   "title": "One worktree per agent",
   "line": "Parallel agents in one checkout trip over each other. Worktrees don't.",
   "check": "git worktree list shows 2+ in any repo.",
   "how": "file",
   "from": {
    "h": "bcherny",
    "name": "Boris Cherny",
    "q": "Worktrees are essential… dozens of Claudes",
    "url": "https://x.com/bcherny/status/2038454353787519164"
   },
   "vs": {
    "h": "steipete",
    "name": "Peter Steinberger (2025, he uses them now)",
    "q": "Why not worktrees? I run one dev server, as I evolve my project I click through it and test multiple changes at once.",
    "url": "https://steipete.me/posts/just-talk-to-it"
   }
  },
  {
   "n": 51,
   "id": "agent-reviews",
   "title": "Have an agent review the diff",
   "line": "/code-review, Codex /review, a fresh session. Before you read it, not instead.",
   "check": "A review command, review skill or review subagent used 3+ times.",
   "how": "history",
   "from": {
    "h": "filosottile",
    "name": "Filippo Valsorda",
    "q": "making a human review a change before an LLM is disrespectful.",
    "url": "https://bsky.app/profile/filippo.abyssdomain.expert/post/3moq6sdq6xk2l"
   }
  },
  {
   "n": 52,
   "id": "cross-model",
   "title": "Cross-model review",
   "line": "Claude writes, GPT reviews, or the other way round. Different models miss different things.",
   "check": "One vendor's agent asked to review another's work (codex exec / claude -p review, or prompts that hand a diff across).",
   "how": "history",
   "from": {
    "h": "dhh",
    "name": "DHH",
    "q": "Review this with claude",
    "url": "https://x.com/dhh/status/2107882896195199116"
   }
  },
  {
   "n": 53,
   "id": "fresh-eyes",
   "title": "Fresh-eyes review",
   "line": "Same model, empty context: \"read this as if you didn't write it\".",
   "check": "Reviews run in a fresh context (a new session or a subagent), not in the session that wrote the code.",
   "how": "history",
   "from": {
    "h": "harperreed",
    "name": "Harper Reed",
    "q": "carefully read over all of the new code you just wrote … with \"fresh eyes,\" looking super carefully for any obvious bugs … Use a subagent.",
    "url": "https://github.com/harperreed/dotfiles/blob/6db272a76a71b098272c7c8a26ae084d197a43ac/.claude/commands/careful-review.md#L1"
   }
  },
  {
   "n": 54,
   "id": "quiz-me",
   "title": "Make it quiz you on the diff",
   "line": "It explains the change, then asks you five questions. Merge only if you pass.",
   "check": "An explain-diff or quiz skill, or prompts asking it to explain or quiz you on a change.",
   "how": "history",
   "from": {
    "h": "thariqs",
    "name": "Thariq Shihipar",
    "q": "I only merge after I pass the quiz perfectly.",
    "url": "https://x.com/trq212/status/2073100352921215386"
   }
  },
  {
   "n": 55,
   "id": "diagram",
   "title": "Ask for a diagram",
   "line": "Architecture, data flow, the state machine. Pictures review faster than prose.",
   "check": "3+ prompts asking for a diagram, chart or visual explanation.",
   "how": "history",
   "from": {
    "h": "dexhorthy",
    "name": "Dex Horthy",
    "q": "/show-me prompts the agent to use concise visuals to explain what's happening, instead of walls of prose.",
    "url": "https://www.humanlayer.dev/blog/show-me-skill"
   }
  },
  {
   "n": 56,
   "id": "babysit-pr",
   "title": "Let it babysit the PR",
   "line": "It watches CI and the review bots, fixes, pushes, and repeats until it's green.",
   "check": "It checked CI or PR status (gh pr checks, gh run) 5+ times.",
   "how": "history"
  },
  {
   "n": 57,
   "id": "two-jobs",
   "title": "Two agents, two jobs",
   "line": "Claude writes the code, Codex draws the images. Or one builds and the other reviews.",
   "check": "One agent launched another (codex exec, claude -p, gemini -p) 3+ times.",
   "how": "history"
  },
  {
   "n": 58,
   "id": "headless",
   "title": "Run it headless",
   "line": "claude -p, codex exec. Pipe logs in, get JSON out, put it in a script.",
   "check": "3+ headless runs in shell history or logs.",
   "how": "history"
  },
  {
   "n": 59,
   "id": "motion-video",
   "title": "Have it make a video",
   "line": "A 30-second motion explainer of what you shipped, for the colleague who won't read the PR.",
   "check": "Remotion, Hyperframes or ffmpeg renders from a session, or a video skill installed.",
   "how": "history"
  },
  {
   "n": 60,
   "id": "yolo-in-a-box",
   "title": "Skip the prompts, inside a box",
   "line": "Full autonomy in a container or a fresh VM with no prod keys. Not in your home folder.",
   "check": "Permission prompts off AND a sandbox (devcontainer, Docker, VM, /sandbox). Prompts off without a box doesn't count.",
   "how": "file",
   "from": {
    "h": "crawshaw",
    "name": "David Crawshaw",
    "q": "You have to turn off the sandbox, which means you have to provide your own sandbox. I have tried just about everything and I highly recommend: use a fresh VM.",
    "url": "https://crawshaw.io/blog/eight-more-months-of-agents"
   }
  },
  {
   "n": 61,
   "id": "schedule",
   "title": "Schedule a prompt",
   "line": "For later, or every morning: /loop, /schedule, cron, launchd.",
   "check": "A scheduled or recurring agent run (loop/cron tools, a launchd or cron entry that calls an agent).",
   "how": "file"
  },
  {
   "n": 62,
   "id": "overnight",
   "title": "Let it work while you sleep",
   "line": "Kick off a few tasks before bed, review them with coffee.",
   "check": "Agent activity between 1am and 6am while you typed nothing.",
   "how": "history",
   "from": {
    "h": "calvinfo",
    "name": "Calvin French-Owen",
    "q": "This is over-hyped on Twitter, but I do really try and kick off 3-4 tasks in Codex before going to bed, so they'll be ready for review in the morning.",
    "url": "https://calv.info/agents-feb-2026"
   }
  },
  {
   "n": 63,
   "id": "from-your-phone",
   "title": "Drive it from your phone",
   "line": "Remote Control, the Codex app, ssh + mosh + tmux. Unblock it from the couch.",
   "check": "Remote control set up, a mobile session, or mosh/Tailscale used to reach your agent box.",
   "how": "self",
   "from": {
    "h": "harperreed",
    "name": "Harper Reed",
    "q": "Claude Code is better on your phone",
    "url": "https://harper.blog/2026/01/05/claude-code-is-better-on-your-phone/",
    "title": true
   }
  },
  {
   "n": 64,
   "id": "cloud-chores",
   "title": "Hand chores to a cloud agent",
   "line": "Codex cloud, Claude on the web, Cursor background agents, Devin. The boring stuff, no laptop needed.",
   "check": "Cloud or remote agent tasks in your history.",
   "how": "self",
   "from": {
    "h": "adamwathan",
    "name": "Adam Wathan",
    "q": "I feed this thing every little random tedious OSS task that I'd otherwise neglect on my TODO list",
    "url": "https://x.com/adamwathan/status/2017616165455949851"
   }
  },
  {
   "n": 65,
   "id": "cant-fake-done",
   "title": "A finish line it can't fake",
   "line": "\"Don't stop until the test passes and the screenshot matches.\" Then let it run.",
   "check": "3+ prompts like \"don't stop until\" / \"keep going until\", or a goal set with /goal.",
   "how": "history"
  },
  {
   "n": 66,
   "id": "ralph",
   "title": "Run it in a loop",
   "line": "Same prompt, fresh context, again and again until the spec is done.",
   "check": "A shell loop or script that re-runs an agent, or /loop until a condition.",
   "how": "history",
   "from": {
    "h": "ghuntley",
    "name": "Geoffrey Huntley",
    "q": "while :; do cat PROMPT.md | claude-code ; done",
    "url": "https://ghuntley.com/ralph/"
   }
  },
  {
   "n": 67,
   "id": "agent-in-ci",
   "title": "Put an agent in CI",
   "line": "@claude on issues, Codex on every PR. It's a teammate with a GitHub login now.",
   "check": "claude-code-action, codex action or similar in a .github/workflows file.",
   "how": "file"
  },
  {
   "n": 68,
   "id": "best-of-four",
   "title": "Run it four times, keep the best",
   "line": "Same task, parallel attempts, thirty seconds each to judge. Throwing work away is fine now.",
   "check": "The same task run in 2+ parallel sessions or worktrees.",
   "how": "history",
   "from": {
    "h": "embirico",
    "name": "Alexander Embiricos",
    "q": "So I might kind of throw throw codex at it but I might just do it four times in parallel instead.",
    "url": "https://www.youtube.com/watch?v=xeZDHGjG5zM&t=1375"
   }
  },
  {
   "n": 69,
   "id": "make-them-argue",
   "title": "Make two agents argue",
   "line": "One proposes, one attacks, until they agree or you see exactly why they can't. Nice.",
   "check": "Multi-round back-and-forth between two agents (rounds of review and fix, or relayed replies).",
   "how": "history",
   "from": {
    "h": "dexhorthy",
    "name": "Dex Horthy",
    "q": "let sol and fable implement / review / argue over night",
    "url": "https://x.com/dexhorthy/status/2092244659057909765"
   }
  },
  {
   "n": 70,
   "id": "always-on",
   "title": "An always-on machine",
   "line": "A box that keeps agents running when your laptop sleeps. A Mac mini, a VPS, a shed.",
   "check": "Agents running on another machine you reach over ssh.",
   "how": "self",
   "from": {
    "h": "dhh",
    "name": "DHH",
    "q": "all my agent and compile work now happens on an AI shed.",
    "url": "https://x.com/dhh/status/2107463006552793231"
   }
  },
  {
   "n": 71,
   "id": "five-at-once",
   "title": "Five at once",
   "line": "Five agents, five problems, and you still know what each one is doing.",
   "check": "5+ sessions or background agents running at the same time.",
   "how": "history"
  },
  {
   "n": 72,
   "id": "coordinator",
   "title": "A coordinator agent",
   "line": "One agent hands out the work, checks on the others, and reports to you.",
   "check": "One agent messaging or steering others (agent teams, SendMessage, an orchestrator session).",
   "how": "history",
   "from": {
    "h": "awesomekling",
    "name": "Andreas Kling",
    "q": "Tell coordinator to parallelize the work over 4 separate computers via SSH",
    "url": "https://x.com/awesomekling/status/2102089363631059199"
   }
  },
  {
   "n": 73,
   "id": "model-roles",
   "title": "Strong model plans, fast model builds",
   "line": "Pay for thinking where it matters. Different models for design, code and review.",
   "check": "Per-agent model settings, or 3+ prompts assigning models to roles.",
   "how": "history",
   "from": {
    "h": "steveyegge",
    "name": "Steve Yegge",
    "q": "Every implementation bead goes through this lifecycle: Fable design, Opus implementation, Fable review.",
    "url": "https://yegge.ai/essays/the-shape-of-things-to-come/"
   }
  },
  {
   "n": 74,
   "id": "named-agents",
   "title": "Give agents job titles",
   "line": "A security reviewer, a tester, a docs writer, each with its own tools and model.",
   "check": "2+ custom agent definitions (.claude/agents/*.md or equivalent).",
   "how": "file"
  },
  {
   "n": 75,
   "id": "workflows",
   "title": "Script the whole pipeline",
   "line": "A rerunnable multi-agent workflow, not a heroic one-off session.",
   "check": "A workflow tool used, or a script that chains several agent runs.",
   "how": "history"
  },
  {
   "n": 76,
   "id": "adversarial",
   "title": "Adversarial reviewers",
   "line": "Two refuters per builder, and points for every real bug they find.",
   "check": "Reviews run by 2+ competing or adversarial agents.",
   "how": "history",
   "from": {
    "h": "obra",
    "name": "Jesse Vincent",
    "q": "Assign two subagents to review your work adversarially. Tell them that whoever finds the largest number of legitimate significant issues gets 5 points.",
    "url": "https://github.com/obra/dotfiles/blob/6ebb5ba848526b2bfd5b5ab3cb30741ff32c4447/.claude/commands/par.md#L1"
   }
  },
  {
   "n": 77,
   "id": "ensemble",
   "title": "Three bug hunters, one report",
   "line": "Run several reviewers, then have one agent rule out the false positives.",
   "check": "Findings from 2+ review tools merged into one triaged list.",
   "how": "history",
   "from": {
    "h": "nolanlawson",
    "name": "Nolan Lawson",
    "q": "Run a Claude sub-agent, Codex, and Cursor Bugbot to find bugs in this PR ranked by critical/high/medium/low.",
    "url": "https://nolanlawson.com/2026/05/25/using-ai-to-write-better-code-more-slowly/"
   }
  },
  {
   "n": 78,
   "id": "compound",
   "title": "Every task makes the next one easier",
   "line": "After each job it writes the lesson into a skill or rule. Next time is cheaper.",
   "check": "Rules, skills or memory edited by agent sessions 5+ times.",
   "how": "history",
   "from": {
    "h": "kieranklaassen",
    "name": "Kieran Klaassen",
    "q": "Compound is still the most important step, because the whole point is that every feature should make the next feature easier.",
    "url": "https://every.to/p/compound-engineering-gets-an-upgrade"
   }
  },
  {
   "n": 79,
   "id": "rules-to-checks",
   "title": "Turn rules into checks",
   "line": "Written \"never do X\" twice? Make it a lint rule or a type, so it can't happen.",
   "check": "Custom lint rules, ast-grep rules or check scripts in a repo.",
   "how": "file",
   "from": {
    "h": "josevalim",
    "name": "José Valim",
    "q": "encode as many rules as possible into deterministic checks (first) and adversarial reviews (second), instead of relying exclusively on a bunch of AGENTS.md files to do the job.",
    "url": "https://x.com/josevalim/status/2075221914549686774"
   }
  },
  {
   "n": 80,
   "id": "tool-for-agent",
   "title": "Build a tool for your agent",
   "line": "A small CLI made for it to call: --json output, good --help, no prompts.",
   "check": "Your own scripts or CLIs that agents call regularly.",
   "how": "history"
  },
  {
   "n": 81,
   "id": "skill-evals",
   "title": "Test your skills",
   "line": "Does it trigger when it should? Does it actually help? An eval tells you.",
   "check": "Eval files for a skill or plugin, or a plugin eval run.",
   "how": "file"
  },
  {
   "n": 82,
   "id": "share-skills",
   "title": "Publish your skills",
   "line": "A public repo of your skills, so your team (or strangers) can steal them.",
   "check": "Your skills live in a git repo with a remote.",
   "how": "file",
   "from": {
    "h": "steipete",
    "name": "Peter Steinberger",
    "q": "agent-scripts",
    "url": "https://github.com/steipete/agent-scripts",
    "repo": true
   }
  },
  {
   "n": 83,
   "id": "team-chat",
   "title": "An agent in your team's chat",
   "line": "Tag it in Slack, it opens the PR. Your teammates use it without installing anything.",
   "check": "A chat-integrated agent set up (Slack app, Claude Tag, Devin, a bot).",
   "how": "self",
   "from": {
    "h": null,
    "name": "Cat Wu and Thariq Shihipar, via Simon Willison",
    "q": "Claude Tag lands 65% of the Claude Code team's product PRs.",
    "url": "https://simonwillison.net/2026/Jul/21/cat-and-thariq/",
    "paraphrase": true
   }
  },
  {
   "n": 84,
   "id": "sdk",
   "title": "Build on the Agent SDK",
   "line": "Your own agent product, with the same loop under the hood.",
   "check": "An agent SDK in a project's dependencies (Claude Agent SDK, Codex SDK, OpenAI Agents).",
   "how": "file"
  },
  {
   "n": 85,
   "id": "about-you",
   "title": "A wiki about you, for your agents",
   "line": "How you think, what you've decided, what you can't stand. Loaded only when it's relevant.",
   "check": "A personal context repo or folder that your agents load when relevant, through a rule or a skill.",
   "how": "file"
  },
  {
   "n": 86,
   "id": "agents-talk",
   "title": "Your agents talk to each other",
   "line": "No more \"Codex says: [paste]\". They pass findings directly while you do something else.",
   "check": "Agents sending each other messages or reading each other's output, without you relaying it.",
   "how": "history"
  },
  {
   "n": 87,
   "id": "sensors",
   "title": "Sensors next to the agent",
   "line": "Lint, types, coverage, mutation score, always running, where it can read them.",
   "check": "Watch-mode checks or a dashboard the agent reads while it works.",
   "how": "self",
   "from": {
    "h": "birgitta410",
    "name": "Birgitta Böckeler",
    "q": "Sensors for coding agents",
    "url": "https://martinfowler.com/articles/sensors-for-coding-agents.html",
    "title": true
   }
  },
  {
   "n": 88,
   "id": "release-qa",
   "title": "A QA script it runs before release",
   "line": "Every release, the same long checklist, run by the agent, start to finish.",
   "check": "A QA or release checklist file, or a release skill.",
   "how": "file",
   "from": {
    "h": "antirez",
    "name": "Salvatore Sanfilippo",
    "q": "QA_BEFORE_RELEASES.md",
    "url": "https://antirez.com/news/168",
    "file": true
   }
  },
  {
   "n": 89,
   "id": "hardware",
   "title": "Hardware in the loop",
   "line": "It flashes the board, reads the serial port, watches the LED. Or the Stream Deck.",
   "check": "Device tools driven by an agent (serial, adb, simctl, esptool, arduino-cli…).",
   "how": "history",
   "from": {
    "h": "torvalds",
    "name": "Linus Torvalds",
    "q": "I started the day with \"I want to connect two pedals together and have them validate each other\", and ended the day with three pedals, a signal generator, and a USB MIDI dongle all connected together as a validation bench with automated checks.",
    "url": "https://github.com/torvalds/GuitarPedal/commit/d1b95dc5e71e0a2d42912001c5fa4469bbc88766"
   }
  },
  {
   "n": 90,
   "id": "practice-what-it-preaches",
   "title": "Your git log obeys your rules file",
   "line": "If the rules say \"no AI trailers\", the last 100 commits have none. If they say \"tests pass\", they did.",
   "check": "Compare what your global rules demand with your last 100 commits (trailers, messages). They agree.",
   "how": "file",
   "from": {
    "h": "mikemcquaid",
    "name": "Mike McQuaid",
    "q": "reject \"has AI attribution; remove it and disclose AI use in the PR description.\"",
    "url": "https://github.com/MikeMcQuaid/dotfiles/blob/a340d0ef58084694861946d587a0832a80782898/git-hooks/pre-push#L51"
   }
  },
  {
   "n": 91,
   "id": "delete-config",
   "title": "Delete more config than you add",
   "line": "Prune the rules, skills and servers that don't earn their tokens anymore.",
   "check": "A rules file that got shorter at least once in its git history.",
   "how": "file",
   "from": {
    "h": "thdxr",
    "name": "Dax Raad",
    "q": "when i see people with custom workflows and setups they're all addressing problems that don't exist anymore",
    "url": "https://x.com/thdxr/status/2107260844400931156"
   }
  },
  {
   "n": 92,
   "id": "reset-per-model",
   "title": "Start clean with each new model",
   "line": "Old prompts fight new models. Reset, then add back only what's missing.",
   "check": "Your setup was trimmed or rewritten soon after a major model release.",
   "how": "self",
   "from": {
    "h": "catherinewu",
    "name": "Cat Wu",
    "q": "I generally reset my configs for each new model",
    "url": "https://x.com/_catwu/status/2102556970473709717"
   }
  },
  {
   "n": 93,
   "id": "fewer-on-purpose",
   "title": "Fewer agents, on purpose",
   "line": "You've run ten at once, and you know exactly why you run two now.",
   "check": "You used to run more parallel agents than you do now, by choice.",
   "how": "self",
   "from": {
    "h": "thariqs",
    "name": "Thariq Shihipar",
    "q": "now like it's mostly one active Claude Code session and then a bunch of Claude Tag sessions.",
    "url": "https://www.youtube.com/watch?v=aVO6E181cNU&t=1200s"
   }
  },
  {
   "n": 94,
   "id": "skeleton",
   "title": "Write the skeleton yourself",
   "line": "Types, signatures, the hard 20%. It fills in the bodies.",
   "check": "You write structure and interfaces by hand before handing over.",
   "how": "self",
   "from": {
    "h": "matklad",
    "name": "Alex Kladov",
    "q": "I was providing structure, Claude was painting by the numbers.",
    "url": "https://matklad.github.io/2026/01/20/vibecoding-2.html"
   }
  },
  {
   "n": 95,
   "id": "review-by-risk",
   "title": "Review by risk, not by habit",
   "line": "A copy fix gets a glance. Auth, money and migrations get every line.",
   "check": "Your rules or review setup name the paths that always get a human read.",
   "how": "file",
   "from": {
    "h": "bcherny",
    "name": "Boris Cherny",
    "q": "I read diffs when it's touching critical code, or code that's important to get right. I don't write the code.",
    "url": "https://x.com/bcherny/status/2098210496109572123"
   }
  },
  {
   "n": 96,
   "id": "daily-limit",
   "title": "Cap what it writes per day",
   "line": "No more code than you can actually review. The bottleneck is you, so be the bottleneck on purpose.",
   "check": "You hold back generation to what you can review.",
   "how": "self",
   "from": {
    "h": "badlogic",
    "name": "Mario Zechner",
    "q": "Set yourself limits on how much code you let the clanker generate per day, in line with your ability to actually review the code.",
    "url": "https://mariozechner.at/posts/2026-03-25-thoughts-on-slowing-the-fuck-down/"
   }
  },
  {
   "n": 97,
   "id": "teach-it",
   "title": "Teach it to someone",
   "line": "Pair with a colleague, run a workshop, write the post. You don't know a trick until you've taught it.",
   "check": "Only you know.",
   "how": "self"
  },
  {
   "n": 98,
   "id": "stop-and-ask",
   "title": "It knows when to stop and ask",
   "line": "Stuck agents ask instead of trying a ninth fix. You set that up.",
   "check": "A rule or hook that makes it stop and report when stuck or out of scope.",
   "how": "file"
  },
  {
   "n": 99,
   "id": "read-it-all-once",
   "title": "Read all 3,000 lines, once",
   "line": "At least once, on something that mattered, you read every line it wrote. Then you know what to skip.",
   "check": "Only you know.",
   "how": "self",
   "from": {
    "h": "mitchellh",
    "name": "Mitchell Hashimoto",
    "q": "First, I reviewed the entire diff (yes, all ~3,000 lines of it). Then I reviewed it again. I re-read the entire diff by hand three or four times.",
    "url": "https://mitchellh.com/writing/simdutf-no-libcxx"
   }
  },
  {
   "n": 100,
   "id": "the-five-percent",
   "title": "Read the right 5%",
   "line": "Know which part of the diff can hurt you, and read that part properly. Every time.",
   "check": "Only you know.",
   "how": "self"
  }
 ],
 "pi": {
  "n": 3.14,
  "id": "say-please",
  "title": "Say please",
  "line": "Doesn't help. Doesn't hurt. Doesn't count. You get a π on your card anyway.",
  "check": "\"please\" in at least one prompt."
 },
 "fossils": [
  {
   "title": "\"You are a senior engineer with 20 years of experience.\"",
   "status": "extinct",
   "era": "2023",
   "line": "Role-play preambles. Today's models don't need the pep talk; they need the context."
  },
  {
   "title": "\"I'll tip you $200 for a perfect answer.\"",
   "status": "extinct",
   "era": "2023",
   "line": "It sort of worked once. Nobody ever paid."
  },
  {
   "title": "\"Take a deep breath and work on this step by step.\"",
   "status": "extinct",
   "era": "2023",
   "line": "Reasoning models think before answering anyway."
  },
  {
   "title": "\"Write the full code. No placeholders.\"",
   "status": "extinct",
   "era": "2023–24",
   "line": "From the era of lazy models and \"// rest of the code stays the same\"."
  },
  {
   "title": ".cursorrules",
   "status": "extinct",
   "era": "2024",
   "line": "One file in the repo root. Replaced by rule folders and AGENTS.md, which every agent reads."
  },
  {
   "title": "Codex custom prompts",
   "status": "extinct",
   "era": "2025",
   "line": "Deprecated in favour of skills."
  },
  {
   "title": "\"ultrathink\"",
   "status": "endangered",
   "era": "2025–",
   "line": "Thinking keywords. Effort is a setting now, and reports disagree on whether the word still does anything."
  },
  {
   "title": "\"How many r's are in strawberry?\"",
   "status": "extinct",
   "era": "2024",
   "line": "Retired as a benchmark. Still a good party trick."
  }
 ]
}