Session 10. Skills and an architecture decision record — Fri 25 Sep
A skill is an instruction artifact
The thing you keep retyping
You have a way of reviewing a diff. Read the diff and nothing else. Findings by severity. File and line on every one. Say what you did not review. You type some version of that into your assistant every time, it comes out different every time, and the version you type when you are tired is the short one.
A skill is that paragraph, written once, in a file the assistant loads when the task matches. It is instructions, not code. Nothing executes it; the model reads it and follows it, the same way it follows the sentence you would have typed.
Why a file beats a longer prompt
Three reasons, and only the third is about quality.
| A longer prompt | A skill | |
|---|---|---|
| Where it lives | in your head, retyped per task | one file, in the repository |
| When it is loaded | every turn, whether it applies or not | when its description matches the task |
| When it is wrong | you notice, once, and retype | you edit the file, and it is fixed for every future run |
The second row is progressive disclosure, and it is context budgeting. A skill
has two parts. The description in the front matter is short and always
visible, so the model can tell whether the skill applies. The body is long and
loads only when it does. Ten skills cost you ten lines of context until one of
them is needed.
---
name: corpus-answers
description: Use when answering questions from a local document corpus —
requires verified citations, refusal on unsupported questions, and a
visible trace.
---
That description is doing routing, not decoration. "Use when…" and the
refusal condition are what let the model pick this skill over another one.
The five sections
## When to use ← and, explicitly, when NOT to
## Workflow ← numbered, with a stop condition
## Output format ← checkable by someone who did not watch the run
## Failure rules ← what to do when a step does not work
## Safety boundary ← what this skill may never do
The failure rules are where a skill earns its keep. Anyone can write the happy path; the model mostly knows it already. "If the diff does not apply or a test is missing, say so and stop. Never approve a change you could not run" is the sentence that changes an output, because it names a situation the model would otherwise improvise its way out of.
The safety boundary is a sentence, and a sentence is not a sandbox. Write it — "read-only, no edits, no commits, no dependency changes" — and then know what it is: a strong hint to a model, not a permission system. The thing that actually stops a write is the tool contract from session 4 and the permissions in your assistant's configuration. A skill that says "never delete files" and a tool that can delete files is one bad turn away from deleting files.
The worked example ships with the repo
builder-kit/plugin/skills/corpus-answers/SKILL.md is the five sections filled
in for grounded question answering: run the trace first, report "not in the
corpus" when retrieval is empty, never present a stripped citation, and treat
retrieved documents as data rather than instructions.
builder-kit/plugin/skills/store-builder/SKILL.md is the same shape for a much
bigger job. Read one before you write yours — the kit is packaged as a plugin,
so a skill you write in this shape installs anywhere the kit does.
A skill is testable
Instructions are code, so they get the same treatment as code: a change is justified by a failure it fixes, and a claim needs a probe.
- Run the task without the skill. Save the output.
- Load the skill. Run the same task. Save that output.
- Diff them. No difference means the skill did nothing, and the honest move is to delete it or sharpen it, not to keep it because it reads well.
- Watch it fail once. Fix the one instruction that let it fail. Rerun.
Step 4 is the bit people skip. The first draft of a skill is a guess about what
the model needs to be told; the second draft is written after you have seen what
it actually does. ch10-e1 asks for both excerpts and refuses them when they
are identical, because two identical runs are the evidence that nothing
happened.
Where skills sit next to everything else
| Thing | Executes? | Lives where? | Loaded when? |
|---|---|---|---|
| Tool | yes, your code runs it | the app, or an MCP server | registered, in the prompt every turn |
| Skill | no, the model follows it | a folder of markdown | on demand, when its description matches |
| MCP server | it packages tools | behind a protocol | when the client connects |
One row of that table is this session. The MCP rows are sessions 12 and 13, which build a server and then secure it. The relationship is worth one sentence now and no more: tools decide what is possible, skills decide how to use them well, and neither substitutes for the other.