Skills Architecture¶
The author's own map of the AI skills behind this site: how they fit together, who owns what, how work passes between them, and what stays with the author. Three families share one repository:
- Wiki management (the
wild-brewerplugin, run in the Wiki project): capture, intake, media, publish, restructure, rules, health, positioning and release. Private: not released. - The ingredient suite (run in the Ingredient Studio project): the
ingredient-studiorouter and its specialists, which do the brewing work and are released for download under Skills › Ingredients Studio, plus theingredient-suitemaintainer skill, which checks, documents and packages them and is not released. - Culture skills (the Cultures Studio; installed at account level, so usable in either project):
bottle-dregs-analysis, which plans the isolation of bugs from a bottle's dregs against the Isolation Capability Matrix, critiques the plan as the work proceeds, seeds the culture journey and finally merges the plan into it. A standalone skill, released for download under Skills › Cultures Studio.
The wiki and ingredient families never edit each other's files. They meet at two drop zones in inbox/, and the author
approves, pastes and commits everything in between.
Architecture¶
The diagram is wider than the page: scroll sideways to follow it.
%%{init: {"flowchart": {"nodeSpacing": 45, "rankSpacing": 70, "padding": 12}, "themeVariables": {"fontSize": "16px"}}}%%
%% wb:fit 1.8
flowchart LR
A(["Author"])
subgraph IS["Ingredient Studio project"]
R["ingredient-studio<br/>router"] --> ADV["advisory specialist<br/>sensory"]
R --> SP["process specialists<br/>maillard, treatments"]
ADV -. "forms, partners" .-> SP
M["ingredient-suite<br/>maintainer"]
SK[("skills/")]
SU[("suite/")]
end
subgraph HO["Hand-over: inbox/"]
IR[("raw/<br/>documents")]
IREL[("releases/<br/>bundles")]
end
subgraph WP["Wiki project"]
CAP["wiki-capture<br/>wiki-media"]
INT["wiki-intake"]
REL["wiki-release-skill"]
PUB["wiki-publish"]
GOV["wiki-rules, restructure,<br/>health, positioning"]
end
DOC[("docs/ + rules")]
CF["Cloudflare<br/>live site"]
subgraph CSG["Cultures Studio (account skill, either project)"]
BD["bottle-dregs-analysis"]
WK[("work/<br/>isolation-plans/")]
end
A -- "request, go" --> R
SP -- "design .md<br/>(via designs/)" --> IR
ADV -- "analysis page .md<br/>(via designs/analysis/)" --> IR
M -. "checks" .-> SK
M -. "guide sources" .-> SU
M -- "suite:release" --> IREL
A -- "notes, photos" --> CAP
IR --> INT
IREL --> REL
CAP --> PUB
INT --> PUB
REL --> PUB
PUB -- "pages" --> DOC
GOV -- "rules, moves" --> DOC
PUB -- "change set" --> A
A -- "commit, push" --> CF
A -- "bottle, micrographs,<br/>progress" --> BD
DOC -. "matrix, procedure,<br/>journey log" .-> BD
BD -- "plans, critiques,<br/>merge drafts" --> WK
BD -- "journey seed,<br/>plan and outcome" --> CAP
The router runs two kinds of specialist. Process specialists (Maillard, Treatments) own preparations: designs, doses, process verdicts and batch-log blocks. The advisory specialist (Sensory) owns what an ingredient brings to a living beer, its precedent and its pairings: it runs first, frames the work, carries hazards to their owners and writes no batch-log block. In route R2 the router composes one ingredient analysis page from the sensory, chemistry and treatments sections.
Read it left to right: ideas and requests enter through the router, the capture skills or
bottle-dregs-analysis; finished material crosses into the wiki only through inbox/raw/
(documents), inbox/releases/ (skill releases) or wiki-capture (journeys); only wiki-publish
writes the final pages; only the author commits and pushes.
bottle-dregs-analysis reads the wiki (the matrix, the isolation procedure, the journey log) but
never writes docs/: its plans are committed working files in work/, and anything bound for a
journey page goes through wiki-capture.
Who owns what¶
| Area | Owner | Others may | Gate |
|---|---|---|---|
skills/ (router, specialists) |
Ingredient Studio project | Wiki: read only | suite_check.py |
skills/bottle-dregs-analysis/ |
Author, from either project (a CHANGELOG-vN.md per version) |
Wiki: copies it to skills-src/ to release |
read in full before each release |
skills-src/ (scrubbed copies of standalone skills) |
Wiki project (wiki-release-skill Path B) | wb.py package-skill privacy patterns, plus a read-through |
|
work/isolation-plans/ (plans, critiques, merge drafts) |
bottle-dregs-analysis; committed, never published; old plans change only in frontmatter (status, journey) |
Wiki: read the merge draft | the plan's gates, checked by Critique |
docs/cultures/isolation-capability-matrix.md |
Author (Status and Held; a procedure's values follow from its Needs; IDs never reused) | bottle-dregs-analysis reads it when it writes a plan |
wb.py check |
suite/ (guide sources, scrub rules, golden outputs, scripts) |
Ingredient Studio project (ingredient-suite) |
nobody else | suite_check.py --full |
Shared records: registry.yaml, specialists.yaml, batch-log.md, each specialist's data/ |
Author (skills emit blocks, the author pastes) | skills read | registry_check.py, specialists_check.py |
designs/ (design archive) |
Ingredient specialists write; designs are never edited afterwards | Wiki: read the copy in inbox/raw/ |
the specialist's calculator |
designs/analysis/ (ingredient analysis pages) |
Ingredient Studio (R2, sensory:3/sensory:4); one page per ingredient family, updated in place (page_version and a changelog row); each hand-over copy is a new file (-v2, -v3) |
Wiki: read the copy in inbox/raw/ |
sensory_calc.py; the sources on the page |
inbox/raw/ |
Written once by whoever hands over (the author, or the studio on "send to the wiki") | Wiki: read only | wiki-intake fidelity diff |
inbox/releases/<bundle>/ |
Written once by suite:release |
Wiki: read, verify, apply; never edit | wb.py release-verify |
docs/ pages |
Wiki project, through wiki-publish | the ingredient guides are generated pages: body and title fields come from suite/docs/; a hand edit fails validate |
wb.py check |
docs/technical/skills/ (Skills: Ingredients Studio, Cultures Studio) |
Wiki project; the Ingredients Studio guides are generated pages (Path A), the Cultures Studio guides are wiki pages written at release (Path B) | wb.py check |
|
docs/skills/downloads/ (zips only; /skills/ redirects to Skills) |
Wiki project (zips copied from a verified bundle or packaged by Path B, never overwritten) | release-verify, package-skill |
|
WIKI.md, wiki.config.yaml, templates, tools/wb.py |
wiki-rules | every wiki skill reads them first | wiki-rules impact analysis |
plugin/ (wiki skill source) |
Author, via the plugin customiser | reinstall after a change | |
| git: commit, push, deploy | Author only | skills use git --no-optional-locks status/diff/log |
Cloudflare build |
Hand-over points¶
| From | To | Through | Rule |
|---|---|---|---|
| Ingredient specialist | Wiki | "send to the wiki": the design .md copied into inbox/raw/ (never the .json) |
wiki-intake keeps the substance, proves it with a fidelity diff, and hands to wiki-publish |
| Ingredient Studio (R2) | Wiki | "send to the wiki": the analysis page copied into inbox/raw/ |
wiki-intake publishes it in Ingredient Analysis; a later version replaces the page at the same URL (rules 0.17.0) |
ingredient-suite |
Wiki | suite:release: a bundle in inbox/releases/ (manifest, deterministic zips, guide bodies) |
wiki-release-skill Path A verifies and applies it with no content edits; the bundle is never edited |
| Wiki | Ingredient suite | the hand-back list: positioning proposals, link rewrites from a restructure, or a hand edit found on a generated page | fixed in suite/docs/, then a docs-only bundle |
| Wiki (after the commit) | Ingredient suite | suite:released <bundle> |
sets released: in the register and re-renders the tables |
bottle-dregs-analysis (Mode 3) |
Wiki | a journey seed handed to wiki-capture |
capture allocates the ID with wb.py; the plan gets journey:, the journey gets plan: (a slug, not a link) |
| Author | Wiki | progress told to wiki-capture, citing plan steps |
log headings carry them, e.g. (P03, P04); Critique reads them back |
bottle-dregs-analysis (Mode 4) |
Wiki | work/isolation-plans/<slug>/merge-<date>.md handed to wiki-capture |
becomes the journey's ## Plan and outcome section when it is banked or closed; the plan is marked merged |
| Any skill | Author | a change set, the blocks to paste, a suggested commit message | nothing reaches git without the author |
Roles and responsibilities¶
| Activity | Ingredient skills | ingredient-suite |
Wiki skills | Author |
|---|---|---|---|---|
| Ingredient design, critique, analysis page (R2), debrief | does (router proposes; sensory frames, the process specialist builds) | approves the route; cooks; tastes | ||
Registry, register, batch log, data/ updates |
emit the block | pastes, runs the checker | ||
| Change or add a skill | does (lifecycle checklist, checks, changelog) | asks, approves | ||
| Skill guide text | owns (suite/docs/) |
publish it unchanged | reviews | |
| Release | builds the bundle | verify, apply, publish | says "go", commits, then suite:released |
|
| Notes, photos, journeys, tastings | capture, media, publish | supplies material | ||
Isolation plan, critique, journey seed, merge (bottle-dregs-analysis) |
capture turns the seed and merge into the journey; Path B releases the skill | opens the bottle, feeds progress, keeps the matrix current, decides to proceed | ||
| Finished documents | intake, publish | drops them in inbox/raw/ |
||
| Site rules and structure | rules, restructure | decides | ||
| Health and findability | health, positioning | acts on the external checklist | ||
| Deleting anything | never | never | never | only the author (inbox/attic/ is the holding area) |
The author's responsibilities¶
- Approve before work starts. The router and the maintainer propose and wait for "go"; the Opus-level wiki skills ask before continuing on a smaller model.
- Own the shared records. Paste the blocks the skills emit, then run the checker they name.
- Trigger the hand-overs. "send to the wiki",
suite:release, "release the bundle", thensuite:releasedonce committed. - Review, commit and push. Every change set arrives with a commit message; nothing reaches git or the live site otherwise.
- Keep the tools current. Reinstall the
wild-brewerplugin after its source changes, and re-uploadbottle-dregs-analysisas an account skill after each release; connect the repo root in each project. - Keep the matrix current. Set Status and Held when kit arrives or runs out; ask for a matrix review when a live plan should take the change into account.
- Choose the session model (below) and start one job per session.
- Empty
inbox/attic/when happy: superseded files and bundles wait there because no skill deletes. - Keep personal details out of anything bound for
docs/or a zip. The privacy patterns and the scrub rules catch known ones; the author is the last check.
Guardrails every skill shares¶
- The rules files are read first and win over any skill.
- git is read-only; nothing is deleted;
inbox/raw/andinbox/releases/are never edited. - Deterministic gates decide, not the model:
wb.py check,wb.py release-verify, the intake fidelity diff,suite_check.py --full, and the privacy patterns (the suite's list is a superset of the wiki's, and the check says so if not). - A generated page is changed only at its source; the wiki hands changes back rather than editing.
Wiki skills at a glance¶
| Skill | Use it for | Say something like | Hands over to |
|---|---|---|---|
| wiki-capture | Raw notes, photos, measurements and ideas into drafts; dated log entries on living pages (journeys, isolates, experiments, prep-designs) | "new bottle", "I plated…", "update the journey", "log this", "I tasted…", "write this up" | wiki-media (photos), wiki-publish |
| wiki-intake | A finished Markdown document (protocol, primer, prep design, skill user guide) made to fit the wiki without changing its substance; fidelity diff and review notes; new versions of published documents | "intake this", "publish this document", "add my protocol/primer/design" | wiki-publish |
| wiki-media | Photos and short clips: backs up originals with checksums, strips EXIF/GPS, resizes to WebP, H.264 video with poster; ready-to-paste Markdown; CSV data for tables and charts | "condition these photos", "add these plate/microscope shots", "upload this video" | the page that embeds them |
| wiki-publish | The single route onto the site: places a draft, assigns the ID, cross-links, regenerates nav and indexes, runs the strict check, gives a commit message | "publish this", "put it on the wiki", "add this to the site" | you (review, commit, push) |
| wiki-release-skill | Shares AI skills for download. A release bundle (the ingredient skills) is verified and applied as it comes: zips plus generated guide pages. A standalone skill is copied to skills-src, scrubbed, versioned, zipped under CC0 and given a page | "release the bundle", "publish my skill", "release a new version of the skill" | wiki-publish |
| wiki-restructure | New sections or topics, splits, merges, renames and moves, with redirects so old URLs keep working | "add a new chapter", "reorganise", "move these pages", "rename the section" | wiki-publish (checks) |
| wiki-rules | Changes to the house rules (WIKI.md, wiki.config.yaml): sections, page types, fields, vocabularies, ID prefixes, media presets, validation; impact analysis, migration, changelog |
"from now on…", "add a stage/status/field", "change the rules" | wiki-restructure / wiki-publish if pages move |
| wiki-positioning | Search-positioning audit that keeps the notebook voice: templates, sitemap, structured data, changed pages only (ledger), approved title, summary and link edits, Search Console import, external checklist. Proposals for generated pages go back upstream | "SEO audit", "how findable is the site", "here is the Search Console export" | wiki-rules (template levers), you (external tasks) |
| wiki-health | Health check: strict build, rule validation, broken links, orphans, unused media, oversized files, privacy leaks, stale drafts and journeys, live site vs local build, unapplied release bundles, hand-edited generated pages | "check the wiki", "health check", "what's stale", "what needs attention" | fixes via the relevant skill |
Culture skills at a glance¶
| Skill | Use it for | Say something like | Hands over to |
|---|---|---|---|
| bottle-dregs-analysis | Mode 1: research the beer, read the dregs micrographs, write an isolation plan against the matrix. Mode 2: critique the plan against changes, progress or a changed matrix; updated plan on request. Mode 3: seed the journey from the adopted plan. Mode 4: merge the plan and its outcome into the journey |
"I'm opening a bottle of…", "here are the dregs", "I plated, here is what I see: critique the plan", "review the plan against the new matrix", "let's go: start the journey", "the journey is banked: merge the plan" |
wiki-capture (seed, progress, merge), then wiki-publish |
Typical flows¶
- New bottle or plating round: wiki-capture → wiki-media → wiki-publish.
- Bottle with an isolation plan: bottle-dregs-analysis Mode 1 (plan v1) → Mode 2 as needed (critiques, plan v2 …) → Mode 3 when you proceed (wiki-capture → wiki-publish) → progress through wiki-capture, citing plan steps → Mode 2 against the journey log → Mode 4 when banked or closed (wiki-capture → wiki-publish).
- Finished write-up: drop it in
inbox/raw/→ wiki-intake → wiki-publish. - Ingredient design to the wiki: router (proposal, "go") → specialist design in
designs/→ "send to the wiki" → wiki-intake → wiki-publish. - Ingredient analysis to the wiki:
sensory:1(scope) →R2on the brief →designs/analysis/<id>.md→ "send to the wiki" → wiki-intake (a new version keeps the URL) → wiki-publish. - Skill change:
suite:changeor an edit inskills/→suite:check→suite:docswhen the guide is affected. Release later. - Skill release:
suite:check --full→suite:release→ wiki-release-skill (Path A) → wiki-publish → commit →suite:released. - Guide fix only: edit
suite/docs/→suite:release --docs-only→ Path A. - Standalone skill (not in the suite, e.g. bottle-dregs-analysis): change it in
skills/with a changelog → wiki-release-skill (Path B: copy toskills-src/, scrub, zip) → wiki-publish → commit → re-upload the account skill. - Section getting crowded: wiki-health → wiki-restructure (generated pages it touches go on the hand-back list).
- Changing how things are done: wiki-rules, then wiki-health.
Choosing the model¶
Model and effort matter most for the skills that change many pages or publish something that cannot be recalled. The table reflects the Claude line-up in September 2026.
| Skill | Default | Step up or down when | Risk |
|---|---|---|---|
| wiki-capture | Sonnet 5, medium effort | Opus 5 for messy notes, many photos, or updates across several pages | Invented facts when notes are sparse |
| wiki-media | Sonnet 5, low | Haiku 4.5 if you supply the captions | Poor alt text for plate and microscope shots |
| wiki-publish | Sonnet 5, medium | Opus 5 if the draft needs a new section | Low: wb.py check gates it |
| wiki-health | Sonnet 5, medium | Haiku 4.5 for a scheduled, report-only run | Missed privacy leaks on a small model |
| wiki-positioning | Sonnet 5, medium | Opus 5 for a first full audit or a large Search Console review | Voice drift in titles and summaries |
| wiki-intake | Opus 5, high | Sonnet 5 for a new version with a small diff | Weak technical review of protocols and primers |
| wiki-release-skill | Opus 5, high (Path B) | Sonnet 5 for Path A bundles and version bumps | A personal detail left in a public zip (Path B); Path A is gated by release-verify |
| wiki-rules | Opus 5, high | Fable 5.1 for a breaking schema change | Migration errors across many pages |
| wiki-restructure | Opus 5, high | Fable 5.1 for a large reorganisation | Broken links and redirects |
The four Opus skills check which model is running and ask before continuing on a smaller one.
On the ingredient side the same logic applies: the router and the specialists do chemistry and
safety reasoning, so run designs, critiques and debriefs on Opus 5 at high effort, and the sensory
scope and profile too (research breadth and evidence grading); the
ingredient-suite maintainer's checks and builds are deterministic scripts, so Sonnet 5 is enough
unless a skill change itself needs chemistry judgement. bottle-dregs-analysis reads micrographs,
researches the beer and weighs route trade-offs: run Modes 1 and 2 on Opus 5 at high effort;
Modes 3 and 4 only transcribe from the plan and the journey, so Sonnet 5 is enough.
Hints¶
- Choose the model when you start the session. Skill frontmatter sets a model too, but it only takes effect when you type the skill as
/wiki-…; when Claude picks the skill from your wording, the session model runs. - Chains run on one model. capture → media → publish uses the session model throughout, so pick for the hardest step.
- One job per session. A fresh session for each bottle, document or restructure beats one long mixed session.
- Give it everything up front: the journey or page ID, dated notes, labelled photos, and what you want out.
- Ask for a dry run first on anything that touches many pages: "
/wiki-restructureSplit technical into maillard and acids topics. Dry run only: show the target tree, move table, link rewrites and rules changes, and apply nothing." wiki-rules works the same way ("impact analysis only"). - Trust the gates, not the model.
wb.py check, the intake fidelity diff and the privacy patterns catch mistakes whichever model ran.
Under the bonnet: tools/wb.py¶
| Command | Does |
|---|---|
config |
Summary of the rules (JSON) |
pages |
Published pages and their frontmatter |
next-id PREFIX / next-isolate PARENT |
Next free ID (BUG, EXP, ING, PRT) |
new TYPE |
Template into inbox/drafts/ |
media SRC... |
Condition media, back up originals |
fidelity ORIGINAL NEW |
What an intake changed in the prose |
package-skill DIR |
CC0 zip into docs/skills/downloads/ (Path B) |
release-verify BUNDLE / release-apply BUNDLE |
Check a release bundle; apply it (zips plus generated pages) (Path A) |
seo / seo-stamp / seo-decline / seo-gsc |
Search-positioning facts, ledger and Search Console import |
move OLD NEW / redirect OLD NEW |
Move pages with redirects |
nav / index |
Regenerate navigation and wb:auto blocks |
validate / build / check |
Rules, strict build, and the pre-publish gate |
And suite/scripts/ (ingredient suite, not shipped)¶
| Script | Does |
|---|---|
suite_check.py [--full] |
Register, registry, versions and changelogs, calculators against golden output, references, boundary notes, eval directives; --full adds guides, links, wiki drift, the hash contract and a scrub dry run |
suite_docs.py render / status |
Re-render the specialist tables in the guide source; each guide against its wiki page |
suite_release.py [--dry-run] |
Build a release bundle into inbox/releases/; --mark-released after the wiki commit |
Local preview on Windows: .venv\Scripts\zensical serve, then open http://localhost:8000.