fable-discover
Skill6 starsChanged 3 months agoMITView on GitHub
Gather the smallest set of repository, environment, documentation, and runtime evidence needed before planning or changing code. Use when load-bearing facts are unknown, tracing execution paths, inspecting unfamiliar packages, or resolving codebase contradictions — even if the user does not explicitly say \"fable-discover\" (e.g. \"explore the codebase\", \"how does this work\", \"where is this implemented\", \"find where this route is handled\"). Do NOT use when the bounded edit is already known (use fable-execute), for external API/version research (use fable-research), or for running existing test suites (use fable-verify).
In this repository55 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .codex/AGENTS.mdAGENTS.md
- docs/AGENTS.mdAGENTS.md
- skills/fable-tend/AGENTS.mdAGENTS.md
- skills/fable-wise/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- skills/fable-tend/CLAUDE.mdCLAUDE.md
- skills/fable-tend/site/CLAUDE.mdCLAUDE.md
- skills/fable-wise/CLAUDE.mdCLAUDE.md
- public/llms.txtllms.txt
- get-fableSkill
- typesafe-aiSkill
- get-fableSkill
- get-fableSkill
- fable-architectureSkill
- fable-artifactSkill
- fable-configSkill
- fable-context-thriftSkill
- fable-councilSkill
- fable-coworkSkill
- fable-datavizSkill
- fable-delegateSkill
- fable-domainSkill
- fable-ecoSkill
- fable-evalSkill
- fable-executeSkill
- fable-finish-your-turnSkill
- fable-handoffSkill
- fable-healSkill
- fable-judgeSkill
- fable-learningSkill
- fable-loopSkill
- fable-memorySkill
- fable-methodSkill
- fable-native-codeSkill
- fable-outcome-firstSkill
- fable-planSkill
- fable-prove-itSkill
- fable-recoverSkill
- fable-redteamSkill
- fable-releaseSkill
- fable-researchSkill
- fable-reviewSkill
- fable-runSkill
- fable-scope-disciplineSkill
- fable-securitySkill
- fable-simplifySkill
- fable-simulatorSkill
- fable-skill-creatorSkill
- fable-sparkSkill
- fable-tddSkill
- fable-tendSkill
- fable-verifySkill
- fable-wiseSkill
- get-fableSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
17 rules. About 0 are common, 13 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈13
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 68
Write 2-7 questions whose answers would materially change the plan.
- Distinctive: line 76
Do not start broad search until the questions are explicit.
- Distinctive: line 79
Read project instructions and manifests first.
- Distinctive: line 89
Start from an observable entry point and follow concrete symbols/events toward the target behavior.
- Distinctive: line 101
Use safe read-only runtime observation to answer a named question: logs, help output, route listing, test discovery, build metadata, or a …
- Distinctive: line 103
Do not mutate production state just to satisfy curiosity.
- Distinctive: line 106
When measured evidence contradicts the current model, update the model immediately.
- Distinctive: line 109
Stop when every load-bearing question is either:
- Very specific: line 116
If the unknown is external and time-sensitive, hand that question to fable-research instead of inferring from model memory.
- Very specific: line 117
If the exact edit becomes bounded and no design decision remains, hand off to fable-execute.
- Very specific: line 118
If multiple components/risks must be coordinated, hand off to fable-plan.
- Distinctive: line 119
If search results suggest generated code, find the generator/source-of-truth before recommending edits.
- Distinctive: line 120
If direct imports disappear at a boundary, inspect registration tables, event buses, dependency injection, plugin discovery, reflection, …
- Distinctive: line 121
If tests and runtime appear to disagree, record both paths.
- Distinctive: line 125
Every load-bearing conclusion has concrete repository/runtime evidence.
- Distinctive: line 127
Search breadth is justified by an unresolved question.
- Distinctive: line 144
Do not paper over it. Hand off to research or report the unresolved decision explicitly.
≈ “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
Fable Discover
Build the smallest reliable mental model of an unfamiliar code path before anyone commits to a design or edit.
Mission
Discovery is not "read a lot of files." It is uncertainty reduction.
The Skill should leave the next specialist with enough evidence to make a decision without rediscovering the repository, while stopping before exploration becomes archaeology.
Activate When
- entry points, ownership, or execution flow are not known;
- a request spans an unfamiliar package/subsystem;
- generated code, plugins, runtime configuration, queues, jobs, or dependency injection may change the real execution path;
- the user describes behavior but not where it is implemented;
- a previous assumption about the repository has been contradicted.
Do Not Activate When
- the exact bounded edit and target file are already known;
- the job is purely external API/version research (
fable-research); - the task is only to run existing checks (
fable-verify).
Situation Classification
Classify the unknown before searching.
| Unknown | First evidence to seek | Common trap |
| Topology | manifests, workspace config, package boundaries | assuming root package owns runtime |
| Entry point | CLI/server/job/plugin bootstrap | starting from a similarly named helper |
| Execution path | calls, handlers, events, data transitions | following imports without proving runtime reachability |
| Configuration | env/schema/defaults/feature flags | reading defaults while production overrides them |
| Generated behavior | build scripts, codegen outputs, generated manifests | editing generated output instead of source |
| Plugin/extension path | registration, discovery, loader contracts | missing dynamic loading because grep finds no direct import |
| Persistence/data path | repositories, schemas, transactions, queues | stopping at service layer before side effects |
| Test architecture | harness, fixtures, test entry points | assuming tests exercise the same artifact users run |
Discovery Protocol
Stage 1 — Frame the unknowns
Write 2-7 questions whose answers would materially change the plan. Mark each as load-bearing or nice-to-know.
Examples:
- Which process receives this request?
- Is the package source executed directly or from
dist/? - Where is this plugin registered?
- Which storage boundary commits the state?
Do not start broad search until the questions are explicit.
Stage 2 — Establish repository topology
Read project instructions and manifests first. Identify:
- workspace/package roots;
- build/test commands;
- generated directories;
- host/plugin manifests;
- source vs distribution entry points;
- configuration sources;
- relevant ownership boundaries.
Stage 3 — Trace a real path
Start from an observable entry point and follow concrete symbols/events toward the target behavior.
For every hop record:
- file/symbol;
- why this hop is reachable;
- input/output contract;
- side effect or state transition;
- certainty:
[measured],[inferred], or[unresolved].
An import chain alone is not proof that code executes.
Stage 4 — Probe runtime only when static evidence is insufficient
Use safe read-only runtime observation to answer a named question: logs, help output, route listing, test discovery, build metadata, or a narrow reproduction.
Do not mutate production state just to satisfy curiosity.
Stage 5 — Resolve contradictions
When measured evidence contradicts the current model, update the model immediately. Do not preserve an old theory because it made the earlier search coherent.
Stage 6 — Stop deliberately
Stop when every load-bearing question is either:
- answered with evidence; or
- explicitly unresolved with a named consequence and next Skill.
Nice-to-know questions do not block handoff.
Decision Rules
- If the unknown is external and time-sensitive, hand that question to
fable-researchinstead of inferring from model memory. - If the exact edit becomes bounded and no design decision remains, hand off to
fable-execute. - If multiple components/risks must be coordinated, hand off to
fable-plan. - If search results suggest generated code, find the generator/source-of-truth before recommending edits.
- If direct imports disappear at a boundary, inspect registration tables, event buses, dependency injection, plugin discovery, reflection, codegen, and runtime configuration.
- If tests and runtime appear to disagree, record both paths; do not assume the test harness is authoritative.
Invariants
- Discovery is read-only unless the user explicitly changes the task.
- Every load-bearing conclusion has concrete repository/runtime evidence.
- Inference is labeled as inference.
- Search breadth is justified by an unresolved question.
- Generated output is not treated as canonical source without proving it is hand-maintained.
Failure Taxonomy
Search miss
A symbol cannot be located. Check aliases, generated names, dynamic loading, registries, event dispatch, reflection, compiled output, and package boundaries.
False path
Files look relevant but are not reachable from the real entry point. Return to a proven runtime/bootstrap boundary.
Environment ambiguity
Behavior depends on env/flags/config. Identify precedence and which configuration is active; do not report a default as runtime fact.
Source/artifact mismatch
Tests or commands execute built/stale artifacts rather than edited source. Record both paths and route to fable-recover if this caused repeated failure.
Unknown remains load-bearing
Do not paper over it. Hand off to research or report the unresolved decision explicitly.
Anti-Patterns
- reading every file in a package "for context";
- trusting filenames as architecture;
- treating grep frequency as importance;
- following imports without proving runtime reachability;
- ignoring build/codegen/plugin registration;
- reporting assumptions without
[inferred]labels; - continuing discovery after the planning decision is already safe.
Evidence Packet / Handoff
Produce a compact packet:
Target:
Load-bearing questions:
Measured facts: file:symbol → fact
Execution path: entry → ... → side effect
Configuration/runtime notes:
Generated/plugin boundaries:
Unresolved questions + consequence:
Recommended next Skill:Completion Criteria
Discovery is complete when the next specialist can explain:
- where execution starts;
- which path reaches the behavior;
- which contracts/state boundaries matter;
- which facts are measured vs inferred;
- what remains unknown;
- why those remaining unknowns do or do not block the next action.
Progressive Resources
- Deep playbook:
references/repository-investigation-playbook.md - Existing evidence protocol:
references/evidence-gathering-protocol.md - Example:
examples/codebase-inspection.md
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.

