The deep dive · chapter 8 · 9 steps
Making it yours
How a lesson from one job reaches the next one, turning a repeatable chore into a skill instead of a project, keeping the repository healthy, and running the same setup on six different assistants.
1. The problem — learning the same thing twice
You finished something last month, and it went wrong in a way you understood completely by the end. This month it went wrong the same way.
The knowledge existed. It was in somebody's head, or in a note at the bottom of a document nobody opens at the start of a job. Whatever mechanism was supposed to carry it forward, it didn't.
Same shape for chores. There's a fiddly six-step thing you do every release — the steps are known, the order matters, and you get one wrong roughly every third time.
2. Lessons in, chores out
Lessons in, chores out
aidlc — zsh$ ls .aidlc/guidance/ accessibility.md api-conventions.md index.yaml lessons-digest.md secure-defaults.md
.aidlc/guidance/lessons.md (after the first retrospective)
- Two sessions in one folder collide on git, not on state. Use a worktree. - A follow-up written as prose is not a work item. A fresh setup has only the digest. lessons.md appears when the first retrospective runs. Each line is read at the start of the next job.
step 1 of 3Three separate mechanisms in one transcript. Take them one at a time.
3. Guidance — read at the start, not the end
.aidlc/guidance/holds files that get read at the start of a job. That single detail is the whole mechanism.lessons.mdis the one fed by finishing work. It doesn't exist in a fresh setup — the first frame shows onlylessons-digest.md, the short distillation that ships with it. When your first piece of work completes, the retrospective captures what was learned and createslessons.mdwith it. Next job, before anything else happens, those lines get read.Contrast with the failure mode: writing the same lesson into the completed job's own write-up. That file is read by nobody, ever again. The distinction between guidance (read at the start of every job) and record (read when investigating that particular job) is the entire difference between a lesson that carries forward and one that doesn't.
Alongside lessons sit the layers you write yourself — secure-defaults, accessibility, api-conventions — active when listed in
index.yaml. Those are yours to edit; the framework won't overwrite them.Two disciplines keep the file usable. A cap — around three lessons per completed job, or the file becomes something nobody reads, at which point it's decorative. And consolidation: when it gets long, the run of near-duplicates about the same mistake collapses into one entry that says it better.
4. Skills — for the chore, not the change
The rule is one line: the lifecycle for changes to the system, a skill for repeatable operations of the system.
Adding a feature so posts can belong to a series changes what the system can do — that's a piece of work with steps and documents. Publishing a post is a chore the system already supports, done the same way every time — wrapping each one in seven steps is ceremony, and it's the fastest way to make everybody route around all of this.
aidlc add skill publish-release-notes --description "Publish notes for a tagged release"The skill is written to
.aidlc/operational-skills/publish-release-notes.md, with a small file for your assistant beside it. It always asks before writing, because a skill is instructions an agent will run later.The important part is what gets scaffolded with it: the verification lives inside the skill. Facts checked, links resolved, build run — as steps of the skill itself, not as a review wrapped around each invocation. A skill carrying its own checks produces checked output every time it runs. A skill relying on somebody remembering to review it produces checked output sometimes.
There's an escape hatch worth knowing. Sometimes running a chore reveals a missing capability — you go to publish and find there's no way to mark something a draft. At that point the chore stops being the work, and the missing capability becomes an ordinary piece of work. What you must not do is quietly grow the skill into building the feature.
aidlc add actionis the smaller sibling: run something automatically on a lifecycle event. This project uses one to cut a branch whenever work starts, and one to move an idea todonewhen the work it became completes.5. Doctor — repairing the repository
Repositories accumulate rubbish: ignore rules that no longer cover what they should, layouts left over from an older version, generated files that got committed by accident.
aidlc doctor --dry-runTwo tiers, and the split is the interesting bit. Safe repairs apply on their own — adding a missing ignore rule harms nobody. The rest describe themselves and wait for your yes, because anything that could surprise you must be your decision.
--dry-runshows both without doing either, and--yesconfirms them all. In the frame, doctor would add five missing.gitattributesentries. The lines that startskippedare checks that found nothing to do here.The same pass runs during
aidlc update, with one difference that's a deliberate design choice:doctorexits non-zero when confirmable work is pending, andupdatenever fails for it. A command you run to check health should be able to fail; a command you run to get the latest version should not fail because of unrelated tidying.6. Hooks, and a short statement of what the repo is for
Two more things you set up once. Both are opt-in or one command.
A session that knows where it is. When an assistant session starts, is cleared or is compacted, it forgets which piece of work it had a claim on. The session-start hook tells it which instance is claimed.
aidlc initinstalls it by default for Claude Code. In an older project, add it yourself:aidlc hook installFrom then on a new session is told the claimed instance (with its template and scope), its phase and the next step, in three lines at most. If you run the hook by hand in a project with a claim, it prints this:
AIDLC: instance price-alerts is claimed in this checkout (full-feature template, full scope). Phase: ideation. Phase instructions: .aidlc/skills/aidlc-ideation.md Next step: produce idea.md. Resume with the aidlc-continue skill.A guard you choose. Planning phases are for documents. The phase guard asks before a project file outside
.aidlc/is edited during ideation, requirements or design:aidlc hook install --guardIt only asks. It never blocks on its own, and it can't see files written through the shell, so it is a guardrail, not a wall. It is for Claude Code. To take it away again:
aidlc hook remove --guardaidlc hook removeon its own removes both hooks.The constitution is the other thing every phase reads first. It says what this repo is for and what it must never become. You don't write it from nothing. You start from your product vision document:
aidlc constitution import docs/vision.mdThat reads a
.docx,.md,.markdownor.txtfile into a snapshot and lists the statements it found:Imported docs/vision.md → .aidlc/context/vision-source.md extractor: text, statements: 4Then the
aidlc-constitutionskill turns those statements into.aidlc/context/constitution.md. Every phase reads that file at the start, the way it reads guidance. It is also what makes "no, not for us" a reason someone can read when you triage an idea.Visions change. To see whether yours did:
aidlc constitution checkIt reports statements added or removed since the last import, and says whether the constitution cites any that were removed. It is advice only. It never stops a phase.
7. The same setup on six assistants
The lifecycle instructions live once, in
.aidlc/skills/, as plain markdown. Setup packages that same text into whatever native format each assistant expects — Claude Code and Codex each get files in their own convention, generated from one canonical body.npx @rasensio/aidlc init --platform claude-codeWhich means switching assistants, or having two people on different ones, doesn't fork your process. The rules are in your repository; the packaging is per-tool. And when the framework updates,
aidlc updaterefreshes the generated files and leaves everything you wrote — your guidance layers, your context documents, your ideas — alone.One caution learned the hard way here:
npx <tool>will happily prefer a globally installed copy over your local one. If a command reports that nothing changed while you're looking at changed files on disk, that's usually why.8. Checkpoint
checkpoint
This checkpoint needs JavaScript.
9. What you can do now
You've been through the whole surface. Concretely, you can now: read a piece of work's state off the disk; pick the right amount of process for it; read a blocked check and fix it; ask what the project already knows instead of re-reading code; find out what something cost, including the bugs it caused; keep an idea list that doesn't rot; run alongside somebody else without losing work; and turn a repeated lesson or a repeated chore into something that carries itself forward; and tell a new session where it is, ask before code changes during planning, and keep a short statement of what the repo is for.
The one thing worth carrying out of all of it: every check you add is paid for by every future job, forever. This project shipped eleven features in nine days and then spent five days almost entirely on fixes, because most of what it had shipped were features that watch the process rather than serve a user. Guidance somebody reads costs nothing to anyone who doesn't need it. A gate costs everybody, every time. Prefer the former, and hold the latter to a much higher bar.
When you want to know why something works the way it does,
aidlc explainis where to ask.Reference for everything mentioned here: the command reference, the skills, the workflows, and the glossary for any word that's been used carefully.