An atelier for the way you build.
Install TBaguette’s Atelier
Install (or update) TBaguette’s Atelier — a skills library for coding agents — into whichever agent you are. Use your shell tool.
Before you start: confirm git is available (git --version). If it isn't, tell me and stop — there's nothing else to try.
It is a single git repo, https://github.com/LeSplooch/tbaguette-skills.git, shipping an integration for each harness it supports (Claude Code, Codex, Cursor, Devin, GitHub Copilot CLI, Copilot in VS Code, Copilot coding agent, Gemini CLI, Hermes, Kimi Code, OpenCode, Pi). Work out which one you are running in, then take the matching route — you know your own install mechanism better than this prompt does. If you genuinely can't tell which one you are, say so and ask me, rather than falling through to the first route below.
Route A — you read Claude Code's skills directory. Target: ~/.claude/skills/TBaguette (Windows: %USERPROFILE%\.claude\skills\TBaguette). Figure out which case applies:
1. <target>/.git exists — update in place: git -C <target> pull.
2. <target> doesn't exist, or exists and is empty — install fresh:
git clone https://github.com/LeSplooch/tbaguette-skills.git <target>.
3. <target> exists, has content, isn't a git repo, but contains CATALOG.md and skills/ — this is very likely a previous TBaguette install that lost its own git history. Say that plainly, not a "naming collision", and ask me whether to move it aside and re-clone, rather than doing that yourself.
4. Anything else already at that path — stop. Do not delete or modify it. Tell me there's a naming collision that needs a manual look.
Route B — you install plugins or extensions from a git URL with your own command. Use it, against this same repo: Hermes is `hermes plugins install LeSplooch/tbaguette-skills --enable`, where the flag is not optional — Hermes only prompts to enable a plugin when it has a terminal to prompt in, so run from a tool it would otherwise install disabled and load nothing. Hermes also security-scans what it installs, and this library trips that scan: a hundred skills about secrets, untrusted input and shell scripting read, to a pattern matcher, like the things they teach you to watch for. The findings are informational. If the scan stops the install because there is no terminal to confirm in, show me the report and the command and let me decide — do not re-run it with --force on my behalf. Kimi Code is `/plugins install https://github.com/LeSplooch/tbaguette-skills` from inside a session or `kimi plugin install https://github.com/LeSplooch/tbaguette-skills.git` from a shell, Gemini CLI is `gemini extensions install https://github.com/LeSplooch/tbaguette-skills`, Codex is `codex plugin marketplace add LeSplooch/tbaguette-skills` and then installing tbaguette-atelier from it. GitHub Copilot CLI takes two steps rather than one, because the install command needs a marketplace to name first: `copilot plugin marketplace add LeSplooch/tbaguette-skills`, then `copilot plugin install tbaguette-atelier@tbaguette-dev`. In VS Code it is not a shell command at all — tell me to run **Chat: Install Plugin From Source** from the Command Palette and paste https://github.com/LeSplooch/tbaguette-skills.git when it asks; don't clone anything yourself in place of that. If it's a command only I can type, print me the exact line instead of substituting a filesystem clone for it.
Route C — you load plugins from a config file. Show me the exact entry and ask before editing — never edit my config silently. On OpenCode that entry is "tbaguette-skills@git+https://github.com/LeSplooch/tbaguette-skills.git", added to the "plugin" array in opencode.json. If you are the Copilot coding agent, the file is .github/copilot/settings.json in the repository you are working on, and both fields are objects rather than arrays: "extraKnownMarketplaces" gets {"tbaguette-dev": {"source": {"source": "github", "repo": "LeSplooch/tbaguette-skills"}}} and "enabledPlugins" gets {"tbaguette-atelier@tbaguette-dev": true}. That edits a repository I share with other people, so show it to me and wait, the same as any other config.
Route D — none of those. Don't invent a path. Find the directory your harness actually reads: its own dotdir in my home directory, or an existing skills/, plugins/, or extensions/ folder — confirmed to be there, not assumed. Clone-or-pull into a TBaguette-named directory inside it, following Route A's four cases. If nothing you find is clearly right, clone nothing: tell me what you checked and ask.
Whichever route: never delete, move, or overwrite anything to make room. If the clone or pull command itself fails (network, permissions, auth), show me the actual error rather than retrying blindly or guessing why.
After a successful install, verify rather than assume. For a clone you placed yourself:
- <target>/.git exists and git -C <target> rev-parse HEAD succeeds.
- <target>/CATALOG.md exists and <target>/skills/ is non-empty.
- Read <target>/.claude-plugin/plugin.json's "version" field, if present, so you can tell me which version I'm now on.
For a harness-managed install, verify it the way your harness reports installed plugins — on Hermes that is `hermes plugins list`, and the row has to say enabled, not just present.
Then tell me what happened (installed fresh, updated, or already current), which version, and the reload step for my agent specifically — restarting it, Claude Code's /reload-plugins, Kimi Code's /new, Hermes' `hermes gateway restart`. Skills then invoke as tbaguette-atelier:skill-name.
Flag one more thing, because it applies to this very conversation: this session started before the install, so it is still running on the skill list it had at startup, and nothing you just did changes that. Tell me to open a new conversation to pick up the latest — or, if I want to stay in this one, to invoke tbaguette-atelier:using-tbaguette here (if you have no skill tool, read skills/using-tbaguette/SKILL.md from the install instead).
Paste into whichever coding agent you use — it works out which harness it's in and installs the right way for it. It needs a shell tool, which rules out Claude Desktop; on Claude Code it's been exercised against Claude Sonnet (Max).
Only ever touches this folder — verified against your other skills, not just claimed. See how.
Restart your agent (in Claude Code, /reload-plugins), then invoke a skill as tbaguette-atelier:skill-name. On Claude that means Claude Code specifically — the Claude Desktop app and claude.ai chat load skills from your account instead of this folder, so cloning here won’t make them appear there.
A conversation that was already open when you installed or updated — including the one you installed from — is still running on the skill list it started with. Open a new conversation to pick up the latest, or invoke tbaguette-atelier:using-tbaguette in the old one.
New to the Atelier? Getting started walks through the reload, how skills fire without being asked, and what to do when nothing seems to happen.
102 Claude Code skills for the craft between the ticket and the commit, across 12 categories — findable by name, browsable below, and written like something a colleague actually handed you. Grown out of my own projects over time, this collection is created and updated automatically — and often — by Claude Opus, always its latest version, as I code.
Show me the skillsFresh from the oven
Last 48 hoursUse when a run is about to be handed a goal to iterate toward on its own — a loop re-prompting itself until a condition holds…
Planning and delegation delegating-tasks-with-review-gates UpdatedUse when executing a multi-task implementation plan task by task in the current session…
Planning and delegation bounding-autonomous-work UpdatedUse when a stretch of work will finish before any human reads a word of it — a delegated task, a goal handed over instead of a plan…
Planning and delegation evaluating-llm-output UpdatedUse when a feature's correctness depends on text, a label, a decision…
Testing orchestrating-work-end-to-end UpdatedUse when a request will take more than one edit and nothing has decided yet how much process it needs — a feature…
Judgment and meta fanning-out-independent-work UpdatedUse when two or more tasks look independent enough to hand to separate agents — unrelated failures, disjoint subsystems…
Planning and delegation handing-off-for-review UpdatedUse when completing a task or feature and about to hand it off before merging, when stuck and a fresh perspective would help…
Communicating deciding-reversibility UpdatedUse when a choice is blocking progress and the deliberation is costing more than the choice would, when picking a name, a library…
Judgment and metaUpdate notes
-
A climb mod, and Claude Code can dispatch TBaguette's implementer, reviewer and investigator by name
- New, and separate from the skills:
climb, a Claude Code mod in the same marketplace (/plugin install climb --marketplace LeSplooch/tbaguette-skills). Start it with/climb 20 npm test: the mod queues the first iteration, then after every iteration it runs the check itself, so the model's own account of how it did never counts. It logs exit code, score (from ascore: Nline), check time and turn time to.climb-log.tsv, refuses edit-tool changes to paths you protect, and queues the next iteration until the check passes, the budget runs out, the score stops improving, the check hangs, or you stop it. A prompt you send yourself mid-climb is answered normally and does not count.--in <folder>runs the check, keeps the log and resolves protected paths in another folder. A band above the prompt shows the trail. It is the tool half ofdesigning-verifiable-goals, which now points to it. The mod API is early access, and nothing in the skills depends on the mod. - The three delegation roles that Copilot CLI already had are now Claude Code agent types too:
tbaguette-atelier:implementer,tbaguette-atelier:reviewerandtbaguette-atelier:investigator, shipped in the plugin'sagents/folder. Each carries its role's standing rules fromdelegating-tasks-with-review-gates, so a dispatch holds only the task itself instead of the whole pasted template. The reviewer and investigator have no edit or write tool (they keep a shell, so this limits them rather than sealing them). None pins a model: name one per dispatch. delegating-tasks-with-review-gatesnow says to dispatch those types where the harness lists them, rather than a general-purpose agent.
- New, and separate from the skills:
Read all 20 updates
-
A climb mod, and Claude Code can dispatch TBaguette's implementer, reviewer and investigator by name
- New, and separate from the skills:
climb, a Claude Code mod in the same marketplace (/plugin install climb --marketplace LeSplooch/tbaguette-skills). Start it with/climb 20 npm test: the mod queues the first iteration, then after every iteration it runs the check itself, so the model's own account of how it did never counts. It logs exit code, score (from ascore: Nline), check time and turn time to.climb-log.tsv, refuses edit-tool changes to paths you protect, and queues the next iteration until the check passes, the budget runs out, the score stops improving, the check hangs, or you stop it. A prompt you send yourself mid-climb is answered normally and does not count.--in <folder>runs the check, keeps the log and resolves protected paths in another folder. A band above the prompt shows the trail. It is the tool half ofdesigning-verifiable-goals, which now points to it. The mod API is early access, and nothing in the skills depends on the mod. - The three delegation roles that Copilot CLI already had are now Claude Code agent types too:
tbaguette-atelier:implementer,tbaguette-atelier:reviewerandtbaguette-atelier:investigator, shipped in the plugin'sagents/folder. Each carries its role's standing rules fromdelegating-tasks-with-review-gates, so a dispatch holds only the task itself instead of the whole pasted template. The reviewer and investigator have no edit or write tool (they keep a shell, so this limits them rather than sealing them). None pins a model: name one per dispatch. delegating-tasks-with-review-gatesnow says to dispatch those types where the harness lists them, rather than a general-purpose agent.
- New, and separate from the skills:
-
Before a long run starts, build the check it will climb
- New skill,
designing-verifiable-goals, for the moment a goal is about to be handed to a run that will iterate on its own for hours or days: a loop or goal command, an overnight port, "do not stop until it is twice as fast". What such a run actually pursues is the check it is graded against at each iteration, so the skill has you build that check first. Use the strongest kind that exists: a pinned reference, then measured behaviour, then a model judging, with a person only at checkpoints. Make failures part of what must match, keep a slice of cases the run never sees, put a speed target behind correctness rather than trading against it, and write the bar where you want the run to stop, because it will stop there. When the check is a model judging likeness to a reference, the skill treats that judge as something the run will optimize: the reference you pick decides the result, and the judge counts only once it has rejected a deliberately broken copy. It also covers what goal texts usually leave out: a line per iteration, written by the harness rather than the run, logging time spent waiting against time spent working, and a second session asking on a schedule what is blocking the run. evaluating-llm-outputnow says what changes when a judge sits inside a loop that iterates until it approves: each of its leanings becomes the direction the output moves, so re-check it against what the loop produced, not against what existed before.fanning-out-independent-worknow treats memory and cores as a shared surface, next to ports and temp space. When several workers each run a heavy build or test suite on one machine, their footprints add up, and past the edge the operating system can kill the dispatching session itself along with its background agents. Before dispatching, measure one heavy step's peak memory (/usr/bin/time -vreports it on Linux), multiply it by how many workers will hit it at once, and compare that with available memory. If it does not fit, queue the heavy step and keep the rest parallel, and commit work in progress as soon as it builds. The skill now also triggers when several workers will build or test on one machine.
- New skill,
-
A change too large for one reviewer is read by several, each on one area
handing-off-for-reviewnow covers the change that cannot be split: a hand-merged result of parallel workers. Give each reviewer one area chosen by where the change can fail, a detached copy of the one commit under review so line references stay true while the authors keep working, and the instruction that the authors' reports and passing tests are not evidence. Ask for defects only, each with a failure scenario, and keep the readers apart until every report is in. Verify each claim in the code, then take the fixes in order of independent agreement: two readers naming the same defect in different words is stronger than one reader's severity label, though a lone report still gets verified rather than dropped. Itsdescription:now routes to it.
-
Verify the upload before you publish the pointer, not after
deciding-reversibilitynow says where the check goes when a release uploads files and then flips one cheap pointer that running clients poll — a manifest, a tag, a DNS record. Fetch each file from its public address, hash the bytes you received and compare with the digest the pointer is about to carry, and make the flip conditional on that comparison; afterwards check only that the pointer is being served. A bad upload then cannot roll out at all, where the same finding after the flip arrives once the first clients have already run it. Itsdescription:now covers the case, and a symptom row and a red flag carry it.
-
A limit the owner changes mid-run is a ruling, and a pause ends when they say so
orchestrating-work-end-to-endnow has a row, in its table of envelope changes, for the moment an owner sets, tightens, lifts or replaces a bound on a running job: a pause until told to continue, a cap on parallel agents, a spending ceiling. Each change goes into theRulingslog with its value, who set it, when and what lifts it; older lines stay as written and the new one names what it replaces, so the newest is the whole bound. The run also says which of its work it touches and, if the owner meant it for other sessions too, tells them in the same message. A new paragraph under the table covers the pause that matters most: it is lifted by what it names, not by the clock, so a run that resumes because a quota reset has swapped its own condition for the owner's.
-
An approved release note is approved wording, not checked facts
writing-release-notesnow says that approving a note does not check the details in it. An approver usually reads for tone, for what is in and what is left out, and takes every count, name, default and limit on trust from whoever drafted it, so a detail written from memory and then approved has been checked by no one. Re-derive each one from the code, configuration or data it describes, at the latest after the approval and before the note goes out; correct a slip without asking again and say so, and go back to the approver only when a correction changes what the line means. Itsdescription:now covers a note someone approved that is about to be published, and a symptom row carries it.
-
A retry refused by a check its own first attempt passed
designing-for-idempotencynow says where the key lookup goes: after authentication and before any precondition on state. A first attempt that succeeded changed the state its own checks read (the balance it debited, the stock it reserved, the name it claimed), so a retry that validates first is refused, and the caller who lost the first response hears insufficient balance about an operation that went through. On a hit the handler answers from the key's record without re-validating. It also warns that a failure path which undoes "the record for this key" deletes the first attempt's success when this attempt is a retry, and says to undo only what this attempt wrote. A symptom row carries it.
-
A peer handed the same request is crew, even in a checkout of its own
orchestrating-work-end-to-endnow reads the Crew dial past the checkout. A requester can give one request to two sessions without saying so; each works in a quiet tree of its own and readssolo, the two builds diverge wherever the request left a choice open (the storage shape, the names on the wire), and they first meet at the live target both deploy to. The envelope reference now says to read what peer sessions are working on when the run is routed and again before the first live step, and to settle one owner by message before design, while the other build is still a plan; when peers cannot be listed, to ask the requester. It reads asshared tree, and the dial table, the mid-run table and a failure row carry it.
-
Files you staged in a shared checkout are the next writer's to commit
atomic-commitsnow covers the other direction of a sweep. Its shared-tree section warned against staging someone else's files; it now says that files you stage and leave between commands are committed by whoever next runs agit committhat names no paths, under their message, however carefully you named your own paths. The rule is to commit with the paths repeated on the commit (git commit -m "<message>" -- <paths>), which also keeps another writer's staged files out of yours, and to leave nothing staged when a command ends. It notes the two cases that form does not reach — a new file, which needs itsaddin the same command, and a hunk-level split, which would commit the whole file — and how to undo a sweep that has not been pushed. A symptom row carries it.
-
A dedupe key per route lets a second route re-send what the first already handled
designing-for-idempotencynow separates the retries of one operation from two operations aimed at one target. Where the rule is "once per target" and two routes can do it — a single reply and a bulk reply command, a webhook and a nightly sweep — a key minted per operation or scoped per route only dedupes each route against itself, so the second one re-sends what the first handled, every key correct and no retention window long enough to help. It says to check the target's own state on every route (reserved atomically), or key on the target in one shared store, and to read every line of a bulk send's dry run until then. The scope rule now says operation type names the effect, never the code path, and thedescription:and a symptom row carry the new case.
-
Four quiet failures named: a shell loop that stops early, committed output that drifts, a retention rule that eats the archive, a path rule that waves code through
portable-shell-scriptingnow warns that a command inside awhile readloop shares the loop's stdin and can eat the lines not yet read:ssh,cat, an installer's prompt or a nestedreadis enough, and the loop ends with status 0 having handled one or two lines. It says to give such commands</dev/nullor feed the loop from another descriptor, and to test with at least two input lines. Thedescription:now routes this case to the skill.keeping-copies-in-syncnow says that generated output stops being safe from drift the moment it is committed: a served site or checked-in client is a second copy again, and commits made with hooks off, merges and hooks that regenerate from unstaged edits all publish it stale. It asks for the check where the output becomes public, on the pushed revision built by its own generator, and not on the working tree. Thedescription:now routes this case to the skill.deciding-reversibilitynow treats a retention rule as a way a safety net gets cut: a "keep the newest N" or "older than D" job names a folder and a clock, so a deliberate archive sitting beside rolling copies is the oldest file there and is deleted first, silently. It asks you to match the rotating kind of file by pattern, keep what must survive where no rotation reaches, and name the oldest file a rule would take before arming it. Thedescription:now routes this case to the skill.reviewing-code-deeplynow covers the path-shaped exemption: a rule that lightens review for "docs only" or "generated" changes by excluding a directory also exempts the hand-written scripts and styles that publishing layouts put in the same directory, so a change to executable code gets classed as prose. It asks you to exclude what the generator writes by its own list of outputs and to test the filter on a change touching both kinds. Thedescription:now routes this case to the skill.
-
Changing a layer with no test runner now has a shape
writing-the-failing-test-firstnow covers code that sits where no test can run: a UI layer with no component runner, a deploy script, a rendering path only a browser exercises. It asks you to pull each rule out into something a plain test can reach and drive that red-first, to check the remaining wiring some way you can watch, and to say in the report which part was checked by hand. The harness is offered as a choice with its cost rather than added or skipped silently. Thedescription:now routes this case to the skill.checkpointing-long-runsnow lists a deliberate pause as a checkpoint seam: before stopping, write down the resume point, where the unfinished work lives, and what is still running or waiting on a person, so a "where are we?" mid-run is answered from the record and not from the last notification.
-
Pushing a shared branch now means checking whose commits go with it
landing-a-finished-branchnow says that a push publishes the branch tip, not just your change: on a branch another session also commits to, everything ahead of the remote goes out with it. Before pushing it asks you to list those commits (git log @{u}..HEAD), attribute each, and leave out or hold back anything that is not yours, for example by pushing from a clean worktree. Thedescription:now routes this case to the skill.
-
A rule over a closed list is now tested by walking the list
property-based-testingnow says what to do when a property ranges over a small catalogue the code already lists (themes, locales, roles, enum members): iterate that list instead of sampling it, cross it with the other dimension, check the list is not empty, and name the failing member in the report. It also asks for one more case that reconstructs the originally reported input and asserts it measured badly, so the sweep is shown capable of failing. The skill'sdescription:now routes closed-catalogue questions to it.
-
Correcting a page for a changed behaviour now means searching it for the old one
writing-durable-docsnow covers the second half of updating a document when behaviour changes. The section you rewrote is right, but the same behaviour is often still described in a table row, an FAQ answer or a store copy, in other words, and the page now contradicts itself. The skill says to search the document and every copy of it for the feature's name and the old behaviour's verbs (not for your new wording), read each hit, and edit it or keep it with a reason. Thedescription:field now routes a page-being-corrected request to it.
-
A fix checked only by looking now needs a before-build
reproducing-bugsnow covers the defect whose only check is a look (a visual fault, behaviour on one device): the commit before the fix is the control. Keep it buildable in a throwaway tree, run identical steps on the same device and data against the unfixed build and then the fixed one, and compare the captures. A symptom that vanished alongside an unrelated change of setup would otherwise be credited to the fix.
-
Defects only a real screen shows now get a guard
regression-test-from-bugnow says what to do when no test at any layer can render the failure (text clipped by its container, an element pushed off a small screen): verify once on the real target, then pin a conservative proxy for the cause in the content's own test, such as a length or line-count ceiling set from the measurement with margin, and say plainly that it is a proxy.
-
A trigger from outside meets the state that exists when it arrives
modeling-state-machinesnow covers deep links, push actions, widget taps and scheduled jobs that fire while the thing they act on is still starting up: the handler's first chance to run is a moment inside start-up, not the state the person is looking at. Gate on an explicit ready state where the machine has one; otherwise act on a settled read (unchanged for a short quiet period, within a hard cap that degrades on purpose), built as a small pure function and tested with a changing, a constant and a never-settling sequence.
-
A capture on someone else's device is output you cannot take back
redacting-sensitive-outputnow covers the agent as the emitter: a screenshot of a surface that aggregates unrelated content (a notification shade, a launcher, an inbox, a tab strip, terminal scrollback) records the owner's private data beside the one item the task wanted, and the model that loads the image has seen it. The rule is to prefer a structural query filtered to the subject, assert the foreground context before capturing, and, if a stray capture happens anyway, delete it at once and say so. The skill'sdescription:routes to it for screenshots and recordings.
-
Four skills get a rule they were missing
formidable's craft floor now covers the widths between phone and desktop (a row that gains an item breaks first at the width where it stops fitting) and controls that grow for emphasis: a transform enlarges the click target too, so it can swallow a neighbour's clicks. Keep the hit target fixed and test at the neighbour's edge.performance-profilingsays to measure size on the artifact that ships. A part's share before the optimizer and compressor can be many times its share after them.caching-strategyasks you to cost the miss rate against the capacity the cache protects before settling a TTL, not only to ask how fast the data moves.rate-limiting-and-backpressurewarns that removing a retry at one layer does not lower the rate if the layer above re-drives the failure on its own tick.
Older than these, the whole record lives in UPDATES.md.
No skills match . to see all 102 again.
Judgment and meta
11 skillsUse at the start of every conversation, in every project…
Judgment and meta orchestrating-work-end-to-end UpdatedUse when a request will take more than one edit and nothing has decided yet how much process it needs — a feature…
Judgment and meta clairvoyanceUse when a request has been understood and is about to be executed and nothing has yet asked whether it is the right request; before a…
Judgment and meta calibrating-confidenceUse when stating a fact, a cause, a version detail, or an API name that was not checked in this session…
Judgment and meta estimating-effortUse when asked how long something will take, how big a change is, or whether work fits a given window; when producing a plan, schedule…
Judgment and meta deciding-reversibility UpdatedUse when a choice is blocking progress and the deliberation is costing more than the choice would, when picking a name, a library…
Judgment and meta steelmanning-alternativesUse when an approach was adopted because it was the first one that worked and no other was seriously examined…
Judgment and meta managing-scope-driftUse when work has grown past what was asked or the diff is larger than the request implies…
Judgment and meta revalidating-decisionsUse when a recorded decision — an ADR, design doc, wontfix, runbook line…
Judgment and meta reading-specificationsUse when turning a ticket, issue, bug report, RFC, standard, design doc, or a user's request into work; when requirements are vague…
Judgment and meta scoping-before-buildingUse when an idea, feature request, or new project needs to become an approved design before any code gets written…
Judgment and metaPlanning and delegation
8 skillsUse when a spec or set of requirements is settled and the next step is turning it into a multi-step implementation plan…
Planning and delegation working-a-plan-task-by-taskUse when a written plan is ready to execute inline…
Planning and delegation delegating-tasks-with-review-gates UpdatedUse when executing a multi-task implementation plan task by task in the current session…
Planning and delegation fanning-out-independent-work UpdatedUse when two or more tasks look independent enough to hand to separate agents — unrelated failures, disjoint subsystems…
Planning and delegation routing-around-capability-gapsUse when the work needs something the current model or harness cannot do — audio or video input, image or speech output…
Planning and delegation bounding-autonomous-work UpdatedUse when a stretch of work will finish before any human reads a word of it — a delegated task, a goal handed over instead of a plan…
Planning and delegation designing-verifiable-goals UpdatedUse when a run is about to be handed a goal to iterate toward on its own — a loop re-prompting itself until a condition holds…
Planning and delegation checkpointing-long-runsUse when work will outlive the context holding it — a plan spanning days or sessions, a sweep across hundreds of files…
Planning and delegationReading code
7 skillsUse when opening a codebase for the first time, inheriting an unfamiliar or legacy repo, onboarding onto a new project…
Reading code tracing-data-flowUse when a value is wrong, missing, null, empty, or unexpectedly defaulted and its origin is unclear; when asking where a field comes from…
Reading code code-archaeologyUse when code exists without an explanation and the reason matters — an odd workaround, a magic constant, a conditional nobody can justify…
Reading code recovering-agent-contextUse when picking up an existing project for the first time, resuming work that someone or something else started…
Reading code mapping-dependenciesUse when assessing what a change will break, estimating blast radius, chasing circular imports or build cycles…
Reading code finding-the-seamUse when deciding where in a codebase to make a change, when a fix could plausibly go in several places…
Reading code naming-thingsUse when choosing an identifier for a variable, function, type, module, flag, config key, table, or event; when a name is misleading…
Reading codeLanding changes
10 skillsUse when a working tree has grown several unrelated changes, when deciding what belongs in one commit…
Landing changes writing-commit-messagesUse when writing or rewriting a commit message, when drafting a subject line, when a history reads as "fix", "wip"…
Landing changes incremental-migrationUse when replacing a system, library, API, storage engine, or data format that is already in use…
Landing changes refactoring-safelyUse when restructuring existing code without changing what it does, when a change touches many call sites at once…
Landing changes judging-duplicationUse when two pieces of code look nearly identical and merging them is the obvious cleanup, when a reviewer asks why a near-copy exists…
Landing changes deleting-codeUse when removing code, a feature, an endpoint, a config key, a column, or a dependency that appears unused…
Landing changes feature-flaggingUse when hiding unfinished work behind a toggle, when planning a gradual rollout, a kill switch, or a dark launch…
Landing changes resolving-merge-conflictsUse when a merge or rebase reports conflicts, when a long-lived branch has diverged and integration looks painful…
Landing changes isolating-work-with-worktreesUse when starting work that shouldn't touch the current checkout, before running a multi-step plan you might need to abandon cleanly…
Landing changes landing-a-finished-branchUse when implementation is done and its tests are green and it's time to decide how the branch lands, when choosing between a local merge…
Landing changesTesting
11 skillsUse when a test's setup is longer than its assertions, when fixtures are shared across files…
Testing auditing-new-input-categoriesUse when extending a system to handle a new category of input — a new script or writing system, file format, payment method…
Testing property-based-testingUse when example tests only cover the cases someone thought of, when testing parsers, serializers, encoders, sorting, comparators…
Testing testing-the-untestableUse when a test calls the wall clock, sleeps, hits the network, writes to the real filesystem, reads environment variables…
Testing flaky-test-triageUse when a test passes on rerun, fails only in CI, fails only when the whole suite runs, fails after midnight or across a DST change…
Testing regression-test-from-bugUse when a defect has been reported, reproduced, or patched, when writing a test for a production incident or hotfix…
Testing characterization-testingUse when changing, refactoring, extracting, porting, or deleting code that has no tests…
Testing choosing-test-scopeUse when deciding whether a behavior belongs in a unit, integration, contract, or end-to-end test…
Testing grounding-test-doublesUse when writing a mock, stub, fake, or fixture for something you do not control — an HTTP API, a vendor SDK, a queue, a device…
Testing writing-the-failing-test-firstUse when implementing any new feature, fixing a bug, or changing existing behavior — before any production code gets written.
Testing evaluating-llm-output UpdatedUse when a feature's correctness depends on text, a label, a decision…
TestingDebugging and performance
9 skillsUse when a bug report must be turned into a failure that happens on demand, when a defect cannot be reproduced locally…
Debugging and performance bisecting-failuresUse when something worked before and is broken now, when the culprit is one of many commits, config keys, dependency upgrades, data rows…
Debugging and performance reading-stack-tracesUse when a crash, exception, panic, traceback, core dump, or error log must be interpreted…
Debugging and performance debugging-concurrencyUse when a failure depends on timing, thread or task interleaving, or load, when a test passes alone but fails in parallel, when a hang…
Debugging and performance observing-production-safelyUse when diagnosing a live system that users depend on, when the only evidence sits behind production data, when enabling a debug flag…
Debugging and performance performance-profilingUse when something is slow and the cause is unknown, when an optimization needs proof that it helped, when latency, throughput…
Debugging and performance finding-resource-leaksUse when memory, file descriptors, sockets, threads, connections, timers, or event subscriptions grow without bound…
Debugging and performance diagnosing-before-fixingUse when a bug, test failure, crash, or any behavior that doesn't match what the code should do needs a fix and none has been proposed…
Debugging and performance responding-to-incidentsUse when something is broken in production right now — an outage, a degradation, a bad deploy, data going wrong in flight…
Debugging and performanceDesigning systems
15 skillsUse when defining an interface other code will call — a public function or library entry point, an HTTP or RPC endpoint…
Designing systems modeling-errorsUse when deciding how a failure should be represented or handled — choosing between exceptions, result or either types, error codes…
Designing systems designing-for-idempotencyUse when an operation can arrive more than once — retries after a timeout with an unknown outcome, at-least-once queues…
Designing systems choosing-concurrency-modelUse when work must happen at the same time and the approach is undecided — OS threads, async or event loops, actors and message passing…
Designing systems modeling-state-machinesUse when something has a lifecycle — order, job, connection, upload, session, subscription, device…
Designing systems drawing-boundariesUse when deciding what belongs together — module, package, crate, library, process…
Designing systems caching-strategyUse when adding a cache, memo table, CDN layer, or precomputed read path, when users report stale or wrong data after saving a change…
Designing systems schema-evolutionUse when changing a contract that is already in production — adding, removing, renaming, or retyping a field in a database schema…
Designing systems data-migrationsUse when backfilling, transforming, re-encoding, or relocating data that already exists at a size too large for one transaction…
Designing systems configuration-managementUse when adding an environment variable, setting, toggle, or config file entry, when secrets and configuration are tangled together…
Designing systems instrumenting-for-observabilityUse when deciding what to log, measure, or trace, when an incident could not be explained from the telemetry that existed…
Designing systems rate-limiting-and-backpressureUse when a system is receiving more load than it can serve, when designing throttling, quotas, or 429 responses…
Designing systems tracking-data-provenanceUse when a record can be written from more than one kind of source — measured, imported, inferred, user-asserted…
Designing systems keeping-copies-in-syncUse when the same fact — a version number, a policy document, a lockfile entry…
Designing systems building-llm-featuresUse when code calls a language model at runtime — adding the first call, choosing or changing the model identifier…
Designing systemsSecurity (defensive)
7 skillsUse when a design introduces a new trust boundary, a new class of sensitive data, a new external integration…
Security (defensive) handling-untrusted-inputUse when code accepts or parses data from outside its own trust boundary — requests, files, uploads, webhooks, message queues, config…
Security (defensive) validating-numeric-inputUse when a number crosses a trust boundary — a form field, query parameter, JSON body, config value, CSV cell, sensor reading…
Security (defensive) secrets-hygieneUse when handling API keys, tokens, passwords, private keys, certificates, or connection strings — adding one to a service, CI pipeline…
Security (defensive) redacting-sensitive-outputUse when secrets, credentials, tokens, or personal data could reach a log line, error message, stack trace…
Security (defensive) auditing-dependenciesUse when adding, upgrading, replacing, or removing a third-party package or library, when a lockfile diff adds transitive entries…
Security (defensive) least-privilege-designUse when creating or reviewing a role, service account, API key, token scope, IAM or RBAC policy, or access control list…
Security (defensive)Finishing and proving
6 skillsUse when a task is big enough that stopping short would go unnoticed — a sweep across many files, a long autonomous run…
Finishing and proving confirming-before-claiming-doneUse when about to call a fix, a feature, or a test suite done, fixed, or passing; when a change is about to be committed, pushed…
Finishing and proving red-teaming-your-own-workUse when a change, plan, design, recommendation, or answer is finished and has been examined only by whoever produced it…
Finishing and proving karen-and-the-managerUse when work is about to be called done, shipped…
Finishing and proving knowing-when-to-stopUse when work looks done and the next action would be another polish, refactor…
Finishing and proving offering-the-next-moveUse at the end of every task that produced something — a change, an artifact…
Finishing and provingCommunicating
10 skillsUse when writing or restructuring documentation — READMEs, guides, API references, onboarding material…
Communicating writing-agent-instructionsUse when writing, generating, trimming, or reviewing a file a coding agent reads as standing instructions — AGENTS.md, CLAUDE.md…
Communicating writing-adrsUse when recording a technical or architectural decision — picking between technologies, changing a system boundary…
Communicating writing-release-notesUse when preparing release notes, a changelog, an upgrade guide, or a version announcement; when a release contains breaking changes…
Communicating writing-postmortemsUse when writing an incident review or postmortem after an outage, degradation, data loss, failed deploy…
Communicating reviewing-code-deeplyUse when reviewing someone else's change — a pull request, patch, diff, or commit series — deciding what deserves a comment…
Communicating explaining-technical-workUse when writing an explanation of technical work for another person — a status update, a summary of a change or an investigation…
Communicating croutonUse when asked for terse, compressed, or token-saving output — "caveman mode", "be brief", "keep it short", "stop explaining"…
Communicating handing-off-for-review UpdatedUse when completing a task or feature and about to hand it off before merging, when stuck and a fresh perspective would help…
Communicating verifying-review-feedbackUse when code review feedback lands on your own change — from a person, a bot…
CommunicatingEnvironment and tooling
7 skillsUse when writing or reviewing a shell script, when a script works in one shell but fails in another…
Environment and tooling reproducible-environmentsUse when a build or test passes on one machine and fails on another, when an old tag or release can no longer be rebuilt…
Environment and tooling designing-ci-pipelinesUse when building or reworking a CI pipeline, when the build is too slow or nobody trusts its result, when a check fails only in CI…
Environment and tooling upgrading-dependenciesUse when dependency versions have fallen behind, when a security advisory names a package in use…
Environment and tooling keeping-tbaguette-currentUse at the start of every conversation, unconditionally — not gated on how long it's been since the last check — and any time the user…
Environment and tooling tending-tbaguetteUse at the start of every conversation, in any project or repo…
Environment and tooling automating-repetitionUse when a manual sequence has been repeated often enough to consider scripting it, when deciding whether a task is worth automating…
Environment and tooling