fable-architecture
Skill0 starsChanged 3 months agoMITView on GitHub
An architecture decision framework for agent-assisted development. Use when designing any new system, feature, integration, or migration, before writing code. Encodes the 2-4-options-with-trade-offs method, YAGNI enforcement, boring-tech defaults, and the boundary rules that keep a small system from turning into a distributed one by accident.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- imMamdouhaboammar/get-fabletheir own version, first seen Aug 28, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- imMamdouhaboammar/get-fable★ 6same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository4 other files it gives its agents.
- fable-code-reviewSkill
- fable-debuggingSkill
- fable-prompt-craftSkill
- panelSkill
The file
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 6 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈6
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 14
Pick against a stated priority order: Write yours down before you start.
- Distinctive: line 21
Keep that list in your own repo, not here.
- Distinctive: line 39
One writer per datum: If two services write the same table, the design is wrong.
- Distinctive: line 56
Every migration needs a rollback line: "if X breaks, we flip Y back", written down before cutover.
- Distinctive: line 58
Never migrate data and change schema in the same step.
- Distinctive: line 64
If the doc exceeds about two pages, the design is probably too big for the requirement.
≈ “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
Architecture Judgment
Architecture is where cheap models fail quietly: they produce a plausible design instead of the right-sized one. The failure is almost never "too simple". It is over-engineering, wrong boundaries, or ignoring the operational reality of a small team running everything on one box.
The decision procedure (always)
- State the actual requirement in one sentence, including scale honestly. "Handles our lead magnets" means hundreds a day, not millions. Design for 10x current need, not 1000x.
- Generate 2-4 genuinely different options, not one option with three coats of paint. For each: build time, operational burden, failure modes, escape hatch (how hard to migrate off).
- Pick against a stated priority order. Write yours down before you start. A common one for small teams is build fast, then ship fast, then monetize, where the tiebreaker is "which reaches a working state quickest without cutting quality."
- Present trade-offs summarized, then implement the chosen one. Do not present a menu and stop. Recommend and proceed.
Pin your own stack first
Before an agent designs anything, give it your locked infrastructure as non-negotiable context: what you run on, what you will never introduce, and which system is the record of truth for each kind of data. Agents default to whatever is fashionable, which is how a one-box project acquires a managed queue nobody asked for.
Keep that list in your own repo, not here. The point is that it exists and that every design references it.
Default choices (boring wins)
| Need | Default | Reach for the alternative only when |
| New service | Another container on the box you already run | Truly bursty compute, then discuss |
| Database | Postgres | Embedded or local-only tool, then SQLite |
| Queue/async | Postgres table plus a poller, or cron | More than 1 job/sec sustained, then a real broker |
| File delivery | Object storage plus presigned URLs | Tiny private files, then serve from the app behind auth |
| Auth (internal tools) | Whatever your platform already provides | Multi-user, then a real auth service |
| One provider, chosen once | Never add a second one | |
| Scheduled work | cron on the box | Needs visibility, then a job table plus a dashboard |
A Postgres table used as a queue is not a hack. At small scale it is the correct design: transactional, observable with SQL, and zero new infrastructure.
Boundary-drawing rules
- One writer per datum. If two services write the same table, the design is wrong. Pick an owner, the other calls its API.
- Push at the edges, sync truth in the middle. External surfaces (forms, webhooks, chat integrations) push into one ingestion endpoint. That endpoint owns validation and fan-out. Never let three surfaces each talk to your email provider directly.
- Webhooks: verify, ack fast, process async. Auth-check the caller, write the raw payload to a table, return 200, process from the table. Never do slow work inside the webhook response.
- Idempotency everywhere external systems retry. Dedupe key on a natural pair or the event ID. Design assuming every webhook is delivered twice.
- Fail open on side-effects, fail closed on auth. An email-provider outage must not block a content save (log it, retry later). A missing token must always block a write.
YAGNI tripwires, stop if you catch yourself designing these
- Microservices for a solo or two-person product. It is a monolith until proven otherwise.
- A generic plugin system or rules engine for the second use case. Wait for the third.
- Kafka, Redis, or Kubernetes at small scale. See the defaults table.
- Multi-region, multi-tenant, or white-label "while we're at it." Ship single-tenant, refactor at customer three.
- Config options for behavior nobody asked to vary.
Migration and cutover judgment
- Strangler over big-bang. The new system takes new traffic first, the old system stays read-only until parity is proven.
- Every migration needs a rollback line: "if X breaks, we flip Y back", written down before cutover.
- DNS: drop the TTL a day before cutover, not during.
- Never migrate data and change schema in the same step.
Design doc format (what to produce)
One markdown file. Requirement in one sentence, then options considered (2-4, with a trade-offs table), then the chosen design (diagram-in-text, data model, API surface), then failure modes and mitigations, then what you are explicitly not building, then the cutover and rollback plan if you are replacing something.
If the doc exceeds about two pages, the design is probably too big for the requirement.
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.

