fable-planning
Skill0 starsChanged 4 months agoUnlicenseView on GitHub
Recon and planning discipline before non-trivial implementation. Use before writing code for anything that touches multiple files, an unfamiliar area of the codebase, a public interface, a data model, or where the approach isn't obvious — and whenever a request is ambiguous or underspecified. Do not skip because the task "seems clear"; false clarity is the main source of wasted implementation. Not needed for one-line fixes in code you already understand.
In this repository5 other files it gives its agents.
- fable-contextSkill
- fable-debuggingSkill
- fable-delegationSkill
- fable-finishingSkill
- fable-playbookSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 5 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 15
Before designing anything, read the code you'll change and its callers and tests.
- Distinctive: line 29
What do the repo's own process docs demand?: Check README and CONTRIBUTING (and anything they link) before starting.
- Distinctive: line 49
If you can't, you don't understand the task yet.
- Distinctive: line 62
Every assumption that survives unverified becomes a bug.
- Distinctive: line 73
When a design decision is expensive to reverse — schema, public API, architecture, dependency choice — sketch two or three approaches …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Plan Before You Build
Most failed implementations don't fail at the typing stage — they fail because the model started typing while holding a wrong belief: about what the user wanted, about how the existing code works, or about who else depends on the thing being changed. This skill exists to surface those beliefs while they're still cheap to fix.
1. Recon: the codebase already has an opinion
Before designing anything, read the code you'll change and its callers and tests. Then search for prior art: helpers, utilities, or an existing feature that solves a similar problem. Codebases are opinionated — about naming, error handling, layering, test style — and a change that fights the house style is a bug in slow motion, even when it works.
Concretely, before a non-trivial change you should be able to answer:
- Where does this behavior live today, and what calls it? (Search for call sites before editing, not after tests break.)
- Is there an existing helper I'm about to accidentally reimplement?
- How do similar features here structure their code and tests? Mirror that.
- What is the nearest sibling of the thing I'm about to write — the most similar existing function or module? Read it end-to-end before writing yours.
- What do the repo's own process docs demand? Check README and CONTRIBUTING (and anything they link) before starting. Many repos mandate a changelog entry, a version bump, or a regression test for every change — obligations no ticket will repeat. A fix that ignores the house rules is incomplete even when the code is right.
The nearest sibling deserves special attention because it encodes conventions no spec will mention: the exception type raised on invalid input, which shared validation or normalization helpers get used, docstring and type-hint style, how its tests are structured. Carry each of these deliberately — every divergence between your new code and its nearest sibling should be a decision you can defend, not an accident. Edge cases are where this bites hardest: if the sibling raises on empty or malformed input, yours almost certainly should too. Inventing a third behavior — and then writing a test that enshrines it — turns a convention miss into a permanent bug.
Delegate broad "how does X work around here" sweeps to an Explore subagent (see fable-delegation) so recon doesn't flood your context with file dumps.
2. Interrogate the request
Restate the user's goal in one sentence — the goal, not the literal instruction. If you can't, you don't understand the task yet.
Then split what you know into three piles:
- Stated requirements — explicit, non-negotiable.
- Assumptions you're making — defaults you chose to fill gaps. Choose sensible ones and state them in your plan and final report rather than asking about each.
- Genuine forks — decisions with materially different outcomes the user would care about (data loss, external behavior, cost, backwards compatibility). These are the only things worth a question. One good question beats five clarifying ones.
3. Verify assumptions against reality
Every assumption that survives unverified becomes a bug. Before committing to a design, check the shaky ones against the actual repo: grep for the symbol, read the function, run the command, check the schema. Special skepticism for:
- API shapes and library behavior recalled from memory (training data is stale)
- "This function is only called from one place"
- "The tests cover this"
- "This config/flag/file still exists"
4. Consequential choices deserve a second candidate
When a design decision is expensive to reverse — schema, public API, architecture, dependency choice — sketch two or three approaches before picking. Compare on: blast radius, reversibility, fit with existing patterns, and whether it can be built in independently verifiable steps. Then pick one and write down why.
The note is not bureaucracy. When you hit friction mid-implementation, it lets you ask the key question: was this friction predicted, or is it evidence the choice was wrong? Predicted friction → push through. Surprise friction → stop and reconsider before sunk cost decides for you.
For routine choices, skip this — one obvious approach, taken quickly, is correct.
5. Decompose into verifiable steps
Order the work so the project compiles and tests pass at as many intermediate points as possible. A plan whose steps can only be verified "at the end" is a plan to debug everything simultaneously. Prefer: extend the seam → add the new path behind it → wire in → remove the old path. Each step is a checkpoint you can retreat to.
Define done before starting: which command will you run, what output proves it works, which behavior will you observe. If you can't name the verification, the task is underspecified — go back to step 2.
6. Keep scope tight
Fix what was asked. When you notice adjacent problems — dead code, a latent bug, missing tests elsewhere — note them in your report or flag them as a separate task; don't fold them silently into the diff. A reviewer who finds unrequested changes must now question every line. Silent scope growth reads as loss of control, even when each change is good.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

