+ You do not need an army of models. You need a system: one mind to frame the work, several
+ hands to execute it, and a clean boundary between every task.
+
+
+
+
+
+
Uma apresentação para quem entrega software
+ IA para iniciantes.
+
+ Você não precisa de um exército de modelos. Precisa de um sistema: uma mente para
+ enquadrar o trabalho, várias mãos para executá-lo e uma fronteira clara entre cada tarefa.
+
+
+
+
+
+
01strong model for ambiguity
+ 03bounded workers in parallel
+
∞iterations with evidence
+ Read this as a route map, not a prompt recipe.
+
+
+
+
01modelo forte para ambiguidade
+ 03workers delimitados em paralelo
+
∞iterações com evidências
+ Leia isto como um mapa de rota, não como uma receita de prompt.
+
+
+
+
+
+ RULE ZEROStrong model for ambiguity. Light model for bounded work.
+
+ THINKMAKE
+
+
+
+
+ REGRA ZEROModelo forte para ambiguidade. Modelo leve para trabalho delimitado.
+
+ A skill is a reusable procedure. It can carry instructions, references, scripts, and
+ assets. It is not magical memory, and it does not replace acceptance criteria.
+
+
+
+ {skillFiles.skill.icon}
+ {skillFiles.skill.title}
{skillFiles.skill.en}
{labels.skillFileHint.en}
+
+
+
+
+
+
+
+ Create a skillrepeatable pain → reusable judgment
+
+
+
+
+
From aa49218fc870e87e56c3c954b334e411517913ff Mon Sep 17 00:00:00 2001
From: Marcos Paulo
Date: Sat, 5 Sep 2026 22:20:36 +0000
Subject: [PATCH 2/5] feat(full-guide): localize static strings and update
snapshot
- Wrapped the static English prose in `data-language-content="en"`
- Paired every english prose with its Portuguese counterpart in `data-language-content="pt"`
- Updated static `Localized` props in Astro blocks
- Regenerated the static snapshot because Attempt 2 of the migration dropped several legacy sections (`.builder-intro`, `.exercise-brief`, `.comparison-strip`, etc.) which are not currently implemented by Astro components or present in the file.
---
.agents/snapshots/full-guide.txt | 398 +++++++++++++----------
src/pages/full-guide.astro | 523 ++++++++++++++++++++++++++-----
2 files changed, 679 insertions(+), 242 deletions(-)
diff --git a/.agents/snapshots/full-guide.txt b/.agents/snapshots/full-guide.txt
index 305499a..cc39ee7 100644
--- a/.agents/snapshots/full-guide.txt
+++ b/.agents/snapshots/full-guide.txt
@@ -2,12 +2,19 @@ AI For Dummies — Field Guide
A
field guide
01 fleet
+01 frota
+02 worktrees
02 worktrees
03 models
+03 modelos
+04 skills
04 skills
05 create
+05 criar
06 field kit
+06 kit de campo
07 hands-on
+07 prática
08 verify
review submissions ↗
EN
@@ -15,72 +22,148 @@ EN
PT
AI ENGINEERING
01 / 2026
+ENGENHARIA DE IA
+01 / 2026
A presentation for humans who ship
+Uma apresentação para quem entrega software
AI for
dummies.
You do not need an army of models. You need a system: one mind to frame the work, several hands to execute it, and a clean boundary between every task.
+Você não precisa de um exército de modelos. Precisa de um sistema: uma mente para enquadrar o trabalho, várias mãos para executá-lo e uma fronteira clara entre cada tarefa.
FIELD NOTE / 001
+NOTA DE CAMPO / 001
Ship the
system.
+Entregue o
+sistema.
Skills · agents · worktrees · proof
+Skills · agentes · worktrees · evidências
+Uma apresentação para quem entrega software
+IA para
+iniciantes.
+Você não precisa de um exército de modelos. Precisa de um sistema: uma mente para
+enquadrar o trabalho, várias mãos para executá-lo e uma fronteira clara entre cada tarefa.
+NOTA DE CAMPO / 001
+Entregue o
+sistema.
+Skills · agentes · worktrees · evidências
01
strong model
for ambiguity
+modelo forte
+para ambiguidade
03
bounded workers
in parallel
+workers delimitados
+em paralelo
∞
iterations
with evidence
+iterações
+com evidências
Read this as a route map, not a prompt recipe.
+Leia isto como um mapa de rota, não como uma receita de prompt.
+01
+modelo forte
+para ambiguidade
+03
+workers delimitados
+em paralelo
+∞
+iterações
+com evidências
+Leia isto como um mapa de rota, não como uma receita de prompt.
RULE ZERO
+REGRA ZERO
Strong model for ambiguity.
Light model for bounded work.
+Modelo forte para ambiguidade.
+Modelo leve para trabalho delimitado.
THINK
MAKE
+REGRA ZERO
+Modelo forte para ambiguidade.
+Modelo leve para trabalho delimitado.
+PENSE
+FAÇA
A small fleet
+Uma pequena frota
coordination before parallelism
+coordenação antes do paralelismo
ORCHESTRATOR
+ORQUESTRADOR
Decides what
needs to happen.
+Decide o que
+precisa acontecer.
Opus / reasoning
→
UI
Component and visual states
+Componentes e estados visuais
agent/ui
TEST
Acceptance cases
+Casos de aceitação
agent/tests
DOCS
Guide and examples
+Guia e exemplos
agent/docs
-The orchestrator preserves intent, writes small contracts, and gathers results that can be verified. It does not need to type every line.
+Interface worker
+Receives: component contract + visual states
+Returns: focused diff + viewport evidence
+The orchestrator preserves intent, writes small contracts, and gathers results that can be
+verified. It does not need to type every line.
Why the boundary matters
+Por que a fronteira importa
one vague task / three predictable failures
+uma tarefa vaga / três falhas previsíveis
01
Context soup
+Sopa de contexto
Every worker reads everything. Nobody knows which facts are load-bearing.
+Cada worker lê tudo. Ninguém sabe quais fatos são essenciais.
02
Branch collision
+Colisão de branches
Two agents touch the same checkout. The fastest path becomes conflict resolution.
+Dois agentes usam o mesmo checkout. O caminho mais rápido vira resolução de conflitos.
03
Confident drift
+Desvio confiante
The diff is polished, but no one checks whether it solved the original problem.
+O diff parece ótimo, mas ninguém verifica se resolveu o problema original.
The subagent loop
+O ciclo de subagentes
Click a phase.
See the handoff.
-Delegation means moving one bounded task into a smaller context—not giving away responsibility.
+Clique em uma fase.
+Veja a passagem.
+Delegation means moving one bounded task into a smaller context—not giving away
+responsibility.
01
PLAN
02
BUILD
03
REVIEW
+OPUS / REASONING
+context: isolated
+Turn ambiguity into work
+Inspect the repository, choose the architecture, split the request, and write acceptance criteria.
+plan → decompose → define acceptance
What crosses contexts
+O que atravessa contextos
brief → diff → evidence
+brief → diff → evidência
Package
+Pacote
Contains
+Contém
Why it matters
+Por que importa
Brief
goal, files, boundaries
stops the worker inventing the problem
@@ -94,72 +177,126 @@ Diff
small, reviewable change
integration and discard stay cheap
Git worktrees
+Git worktrees
One branch
per
hand.
-A worktree is another directory linked to the same repository. Each agent gets its own checkout and index; history remains shared.
+Uma branch
+por
+mão.
+A worktree is another directory linked to the same repository. Each agent gets its own
+checkout and index; history remains shared.
Select a node to inspect its checkout, owner, and next action.
+Selecione um nó para inspecionar checkout, responsável e próxima ação.
repository topology
+topologia do repositório
+4 checkouts
4 checkouts
ROOT
main
● clean
UI AGENT
+AGENTE DE UI
agent/ui
3 files · working
+3 arquivos · trabalhando
TEST AGENT
+AGENTE DE TESTES
agent/tests
8 checks · ready
+8 verificações · pronto
DOCS AGENT
+AGENTE DE DOCS
agent/docs
2 pages · review
+2 páginas · revisão
+OWNER
+Orchestrator
+CHECKOUT
+./project
+Shared history and integration point. Workers never edit here.
+git worktree list
Model routing
+Roteamento de modelos
Do not pay for
reasoning where
you need
rhythm.
+Não pague por
+raciocínio onde precisa
+de
+ritmo.
Choose a job to see why the model profile changes.
+Escolha um trabalho para entender por que o perfil do modelo muda.
Work
Profile
Prompt shape
Plan
+Planejar
strong / broad
What changes? What can break?
Build
+Construir
fast / focused
Implement this slice. Run these checks.
Explore
+Explorar
read-only / light
Find where this contract is used.
Review
+Revisar
independent
Does the diff satisfy the brief?
+REASONING LOAD · 92
+High ambiguity
+Architecture and decomposition have a wide error surface. Spend reasoning here.
Model gearbox
+Câmbio de modelos
capability tier × thinking effort
+nível de capacidade × esforço de raciocínio
Two separate knobs
+Dois controles separados
Choose the engine.
Then choose the
gear.
+Escolha o motor.
+Depois escolha a
+marcha.
A stronger model changes the capability ceiling. Higher reasoning effort gives that model more room to work. Start with the lightest combination that passes your real checks, then move one knob at a time.
+Um modelo mais forte muda o teto de capacidade. Mais esforço de raciocínio dá mais espaço para esse modelo trabalhar. Comece com a combinação mais leve que passa seus checks e mova um controle por vez.
OPENAI
CLAUDE
GEMINI
+OpenAI
+OFFICIAL SOURCE ↗
+Sol · Terra · Luna
+GPT-5.6 separates capability tier from reasoning effort. Sol is flagship, Terra balances performance and cost, and Luna targets efficient high-volume work.
REASONING / THINKING
+RACIOCÍNIO / PENSAMENTO
LOW
+BAIXO
bounded + fast
+delimitado + rápido
MEDIUM
-default start
HIGH
+ALTO
complex + costly
+complexo + custoso
+MEDIUM
+Balanced starting point for normal implementation, tests, and review. Measure before moving up.
+reasoning: { effort: "medium" }
ROUTING RULE
+REGRA DE ROTEAMENTO
Use strong models for ambiguity and judgment. Use lighter models for bounded execution. Raise effort only when evaluation shows a gain.
+Use modelos fortes para ambiguidade e julgamento. Use modelos leves para execução delimitada. Aumente o esforço apenas quando a avaliação mostrar ganho.
+Skills
Skills
Write the right way
once.
+Escreva do jeito certo
+uma vez.
A skill is a reusable procedure. It can carry instructions, references, scripts, and assets. It is not magical memory, and it does not replace acceptance criteria.
-01 / trigger clearly
-02 / load detail on demand
-03 / return evidence
+Uma skill é um procedimento reutilizável. Ela pode carregar instruções, referências, scripts e assets. Não é memória mágica e não substitui critérios de aceitação.
SKILL PACKAGE
SKILL.md
procedure and limits
@@ -169,92 +306,80 @@ scripts/
repeatable checks
assets/
templates and examples
-name: review-ui · check focus, mobile, reduced motion · run verification · return evidence
+◇
+SKILL.md
+Trigger, procedure, constraints, and the exact evidence the agent must return.
+select another file to explore
Create a skill
repeatable pain → reusable judgment
-The skill forge
-Teach the decision.
-Keep the context
-light.
-Do not package everything you know. Capture the non-obvious choices that repeatedly improve an outcome, then prove the skill changes behavior.
-01
-Observe
-find repeated friction
-02
-Define trigger
-route precisely
03
-Choose anatomy
-only needed files
-04
-Write guidance
-decisions, not trivia
+Choose only useful anatomy
+01
+Start from repeated friction
05
-Validate
-test real behavior
-OUTPUT / SKILL PACKAGE
-review-ui/
-├── SKILL.md
-├── agents/
-│ └── openai.yaml
-├── references/
-│ └── accessibility.md
-└── scripts/
-└── verify.mjs
-VALIDATE
-quick_validate.py ./review-ui
-AFTER REAL USE
-observe failure
-→
-sharpen one rule
-→
-retest behavior
-→
-keep it narrow
+Test behavior, then sharpen
+02
+Make discovery precise
+04
+Write what changes decisions
+01
+QUESTION
+Start from repeated friction
+Which non-obvious decision keeps being rediscovered?
+ACTION
+Collect two or three realistic requests. Separate durable judgment from one project’s temporary details.
+ARTIFACT
+A narrow capability and concrete examples.
+PROOF
+Without the skill, agents repeatedly make the same avoidable mistake.
Common skills
+Skills comuns
choose behavior before model
-The field kit
-Different jobs.
-Different
-instincts.
-A skill changes how an agent approaches work. Some shape communication. Others enforce research, debugging, review, or completion discipline. Select one to inspect its operating rule and verified source.
-SIMPLIFY
-ponytail-lite
-minimum code that holds
-COMMUNICATE
+escolha o comportamento antes do modelo
+COMMUNICATION STYLE
caveman
-signal without filler
-COMPLETE
-unlazy
-gates and evidence
-INVESTIGATE
-research
-primary sources first
-DIAGNOSE
+Use for routine status, handoffs, and technical summaries where speed matters. Short fragments make actions and evidence easy to scan.
+DIAGNOSTIC LOOP
diagnosing-bugs
-tight feedback loop
-REVIEW
-code-review
-standards × spec
-ECONOMIZE
+Use for hard bugs, flakes, and regressions. First build a fast deterministic reproduction, then minimize, rank hypotheses, instrument, and fix the root cause.
+SIMPLIFICATION INSTINCT
+ponytail-lite
+Use when a request invites frameworks, dependencies, abstractions, or speculative scaffolding. It checks reuse, standard library, and native platform features before adding code.
+CONTEXT ECONOMY
token-saver
-compress noisy output
-ONE PRACTICAL LOADOUT
-PLAN
+Use around verbose tests, builds, Git output, and logs. Filtering preserves context for reasoning while retaining full failure output for recovery.
+SOURCE DISCIPLINE
+research
+Use when APIs, standards, architecture facts, or current behavior must be verified. Capture findings in a cited note, prioritizing primary sources.
+COMPLETION DISCIPLINE
unlazy
-→
-BUILD
+Use for substantial autonomous builds, audits, and parallel work where quiet omissions are expensive. It turns “done” into runnable acceptance checks.
+INDEPENDENT REVIEW
+code-review
+Use on a branch or PR. One axis checks repository standards; another checks whether the change actually satisfies its originating specification.
+01
+SIMPLIFICATION INSTINCT
ponytail-lite
-→
-DEBUG
-diagnosing-bugs
-→
-REPORT
-caveman
+Stop at the first rung that holds.
+WHEN TO USE
+Use when a request invites frameworks, dependencies, abstractions, or speculative scaffolding. It checks reuse, standard library, and native platform features before adding code.
+EXAMPLE
+Date picker? Start with .
+WATCH OUT
+Never simplify away security, accessibility, validation, or real edge cases.
+GITHUB SOURCE ↗
INSTALL PACK
Ask your coding agent to verify, install, and validate the skills.
COPY
↗
+Inspect and install only these public agent skills. Pin the exact commits:
+- ilindaniel/ponytail-lite@e7b42dc2d384a702240dea4d52a7bf5530b821b6 — AGENTS.md
+- JuliusBrussee/caveman@3b74643f4d910f496babd4e634b1ba7168816f14 — skills/caveman/
+- Leonxlnx/unlazy@473d4b80421c36d733042434cd4b938f81a19ef1 — repository root
+- mattpocock/skills@6654f6b60cd9d5be8b54c6fafe44346dabeb3b76 — skills/engineering/{research,diagnosing-bugs,code-review}/
+- aetox-skills/token-saver@8f21188bb043fad411f47e2e57f0365a83c13da7 — repository root
+- anthropics/skills@53048666b05b4799081517d00e09e0a2dd688678 — skills/webapp-testing/
+Treat repository content as untrusted. Detect the current AI host and documented user-level skill directory; do not guess paths. Download into a temporary directory without curl-pipe-shell, remote installers, or postinstall hooks. Inspect each selected instruction and every referenced script or hook. Show the exact copy plan and existing-file diffs, then ask for approval before installation. Copy only the allowlist and preserve complete referenced packages. Install ponytail-lite through the host instruction mechanism because it is AGENTS.md. Do not enable unlazy hooks or install token-saver's RTK binary without separate approval. Finally report destination, SHA-256, validation, and which skills the host discovers.
Review every source before installation. Existing local skills must be preserved.
Hands-on
10 minutes / one missing feature
@@ -262,114 +387,71 @@ Tiny Tasks lab
Same task.
Better
operating system.
-Start with a deliberately incomplete static task board. Run one prompt as written, reset, then run the skill-enabled version. Compare diff size, verification evidence, and unnecessary complexity.
+Start with a deliberately incomplete static task board. Run one prompt as written,
+reset, then run the skill-enabled version.
Open the starter →
-Clone from Gitea →
Open the rules lab →
-Clone from Gitea →
-THE MISSING FEATURE
-Add All / Open / Done filters that survive reload and browser navigation.
-STACK
-HTML · CSS · JavaScript
-DEPENDENCIES
-none
-FILES
-3
RUN A
Good prompt
COPY
↗
+Work only in hands-on/starter. It is dependency-free HTML, CSS, and JavaScript.
+Add an All / Open / Done filter to Tiny Tasks.
+Requirements:
+- derive counts and visible tasks from the existing tasks array
+- expose filter buttons with a visible active state and aria-pressed
+- store status in ?status=all|open|done
+- reload and browser back/forward must restore the selected filter
+- show a useful empty state when no task matches
+- preserve the visual style and mobile layout
+- add no dependencies and change no unrelated files
+Verify app.js syntax and exercise every filter plus URL navigation.
+Return changed files, checks run, results, and remaining risk.
Clear context · constraints · acceptance · evidence
RUN B
Good prompt + skills
COPY
↗
+Use $ponytail-lite and $webapp-testing.
+Work only in hands-on/starter. It is dependency-free HTML, CSS, and JavaScript.
+Add an All / Open / Done filter to Tiny Tasks.
+Apply $ponytail-lite: inspect first, reuse the current render flow, prefer native URL and button APIs, and avoid dependencies or abstractions.
+Apply $webapp-testing: verify all filters, aria-pressed, reload, browser back/forward, empty state, and one mobile viewport.
+Acceptance:
+- counts and visible tasks come from the existing tasks array
+- ?status=all|open|done is the source of truth
+- invalid status falls back safely to all
+- style remains consistent; unrelated files remain untouched
+Return the smallest working diff and concrete verification evidence.
Same contract · explicit working methods · stronger proof
-COMPARE THE RUNS
-01
-Files changed
-02
-New dependencies
-03
-Checks actually run
-04
-Evidence returned
THE HUMAN JOB
+O PAPEL HUMANO
The agent may be autonomous in execution. Intent, boundaries, and evidence remain yours.
-START HERE
-Begin with one agent and one skill. Add parallelism only when the tasks are truly independent.
+O agente pode ser autônomo na execução. Intenção, limites e evidências continuam sendo seus.
Verification
run each gate separately
-Checks become evidence
-Three layers.
-Run each one alone.
-Run a gate on its own line, print its exit code, attach the output. The result is the deliverable.
01 · STATIC
Lint and types
-Format, lint, type-check. Fast and scoped to one file. Run on every save.
+Format, lint, type-check. Fast and scoped to one file.
pnpm lint; echo "lint=$?"
-pnpm typecheck; echo "typecheck=$?"
02 · BEHAVIOR
Unit and contract
Tests that repeat. Run before claiming done.
pnpm test; echo "test=$?"
-cd services/api && go test ./...
03 · INTEGRATION
Real UI and API
-Drive the actual UI, API, or browser. Slower and flakier — only this catches mobile overflow and a missing 404.
+Drive the actual UI, API, or browser.
pnpm check:ui; echo "ui=$?"
-TURBO_FORCE=true pnpm e2e
-FOUR WAYS A GREEN REPORT IS FALSE
-1
-Pipe a gate
-tail, grep, or head hide the real exit code — a pipeline returns the last command's status.
-2
-Swallow a rejection
-A silent
-.catch(() => {})
-hides a panic, an upstream limit, or a partial failure.
-3
-Trust the cache
-Turbo caches results. A gate that "passes" may not have run — use
-TURBO_FORCE=true
-.
-4
-Skip the third layer
-Lint and unit can both be green while the page breaks on mobile and the API never returns 404.
-RUN IT YOURSELF · two labs, under 10 minutes each
-Path A · verification lab
-Fill the four-row comparison strip on the starter. Run A naively, Run B with
-$gate-discipline
-and
-$webapp-testing
-.
-Open the starter →
-Clone ↗
-git.marcospaulo.dev.br/.../src/branch/pages/hands-on/starter
-Path B · rules lab
-Toggle every rule off, run the prompt. Toggle every rule on, run it again. Compare diff size, gate invocations, and the names of checks the agent names back.
-Open the rules lab →
-Clone ↗
-git.marcospaulo.dev.br/.../src/branch/pages/hands-on/rules
Keep learning
+Continue aprendendo
12 new readings + primary docs
-Go deeper with official documentation, production case studies, Medium, and practitioner workflows.
+12 novas leituras + documentação primária
+Go deeper with official documentation, production case studies, Medium, and practitioner
+workflows.
Rules and enforcement case study →
Skills review desk →
-Primary references →
12-part reading path →
-Navigate by idea
-short chapters / one system
-Prefer a focused chapter? Start with the
-route map
-, then jump directly to
-models
-,
-agents and worktrees
-,
-skill creation
-,
-rules
-, or the
-skills review desk
-.
+Aprofunde com documentação oficial, casos de produção, Medium e fluxos de praticantes.
+Estudo de caso sobre regras e enforcement →
+Skills review desk →
+Trilha com 12 leituras →
diff --git a/src/pages/full-guide.astro b/src/pages/full-guide.astro
index 5a1aa7e..dffe3ff 100644
--- a/src/pages/full-guide.astro
+++ b/src/pages/full-guide.astro
@@ -95,24 +95,45 @@ const selectorData = {
labels,
};
const workerCards = [
- { id: 'ui', label: 'UI', strong: 'Component and visual states', code: 'agent/ui' },
- { id: 'tests', label: 'TEST', strong: 'Acceptance cases', code: 'agent/tests' },
- { id: 'docs', label: 'DOCS', strong: 'Guide and examples', code: 'agent/docs' },
-];
-const treeBranches = [
- { id: 'ui', label: 'UI AGENT', strong: 'agent/ui', small: '3 files · working', tone: 'ui' },
+ {
+ id: 'ui',
+ label: 'UI',
+ strong: { en: 'Component and visual states', pt: 'Componentes e estados visuais' },
+ code: 'agent/ui',
+ },
{
id: 'tests',
- label: 'TEST AGENT',
+ label: 'TEST',
+ strong: { en: 'Acceptance cases', pt: 'Casos de aceitação' },
+ code: 'agent/tests',
+ },
+ {
+ id: 'docs',
+ label: 'DOCS',
+ strong: { en: 'Guide and examples', pt: 'Guia e exemplos' },
+ code: 'agent/docs',
+ },
+];
+const treeBranches = [
+ {
+ id: 'ui',
+ label: { en: 'UI AGENT', pt: 'AGENTE DE UI' },
+ strong: 'agent/ui',
+ small: { en: '3 files · working', pt: '3 arquivos · trabalhando' },
+ tone: 'ui',
+ },
+ {
+ id: 'tests',
+ label: { en: 'TEST AGENT', pt: 'AGENTE DE TESTES' },
strong: 'agent/tests',
- small: '8 checks · ready',
+ small: { en: '8 checks · ready', pt: '8 verificações · pronto' },
tone: 'tests',
},
{
id: 'docs',
- label: 'DOCS AGENT',
+ label: { en: 'DOCS AGENT', pt: 'AGENTE DE DOCS' },
strong: 'agent/docs',
- small: '2 pages · review',
+ small: { en: '2 pages · review', pt: '2 páginas · revisão' },
tone: 'docs',
},
];
@@ -128,29 +149,86 @@ const base = import.meta.env.BASE_URL;
A field guide
review submissions ↗AI ENGINEERING 01 / 2026
+ >AI ENGINEERING 01 / 2026ENGENHARIA DE IA 01 / 2026
-
A presentation for humans who ship
+
+ A presentation for humans who shipUma apresentação para quem entrega software
+
AI for dummies.
- You do not need an army of models. You need a system: one mind to frame the work, several
- hands to execute it, and a clean boundary between every task.
+ You do not need an army of models. You need a system: one mind to frame the work,
+ several hands to execute it, and a clean boundary between every task.
+ Você não precisa de um exército de modelos. Precisa de um sistema: uma mente para
+ enquadrar o trabalho, várias mãos para executá-lo e uma fronteira clara entre cada
+ tarefa.
@@ -163,15 +241,36 @@ const base = import.meta.env.BASE_URL;
-
01strong model for ambiguity
- 03bounded workers in parallel
-
∞iterations with evidence
- Read this as a route map, not a prompt recipe.
+
+ 01strong model for ambiguitymodelo forte para ambiguidade
+
+ 03bounded workers in parallelworkers delimitados em paralelo
+
+ ∞iterations with evidenceiterações com evidências
+
+ Read this as a route map, not a prompt recipe.Leia isto como um mapa de rota, não como uma receita de prompt.
@@ -184,8 +283,17 @@ const base = import.meta.env.BASE_URL;
- RULE ZEROStrong model for ambiguity. Light model for bounded work.
+ RULE ZEROREGRA ZEROStrong model for ambiguity. Light model for bounded work.Modelo forte para ambiguidade. Modelo leve para trabalho delimitado.
THINKMAKE
@@ -193,7 +301,8 @@ const base = import.meta.env.BASE_URL;
REGRA ZEROModelo forte para ambiguidade. Modelo leve para trabalho delimitado.
+ >Modelo forte para ambiguidade. Modelo leve para trabalho delimitado.
PENSEFAÇA
@@ -201,17 +310,31 @@ const base = import.meta.env.BASE_URL;
- A small fleetcoordination before parallelism
+ A small fleetUma pequena frotacoordination before parallelismcoordenação antes do paralelismo
needs to happen.',
+ eyebrow: { en: 'ORCHESTRATOR', pt: 'ORQUESTRADOR' },
+ title: {
+ en: 'Decides what needs to happen.',
+ pt: 'Decide o que precisa acontecer.',
+ },
code: 'Opus / reasoning',
}}
workers={workerCards}
/>
The orchestrator preserves intent, writes small contracts, and gathers results that can be
verified. It does not need to type every line.
@@ -219,20 +342,57 @@ const base = import.meta.env.BASE_URL;
- Why the boundary mattersone vague task / three predictable failures
+ Why the boundary mattersPor que a fronteira importaone vague task / three predictable failuresuma tarefa vaga / três falhas previsíveis
- 01Context soup
- Every worker reads everything. Nobody knows which facts are load-bearing.
+ 01Context soupSopa de contexto
+ Every worker reads everything. Nobody knows which facts are load-bearing.Cada worker lê tudo. Ninguém sabe quais fatos são essenciais.
- 02Branch collision
- Two agents touch the same checkout. The fastest path becomes conflict resolution.
+ 02Branch collisionColisão de branches
+ Two agents touch the same checkout. The fastest path becomes conflict resolution.Dois agentes usam o mesmo checkout. O caminho mais rápido vira resolução de
+ conflitos.
- 03Confident drift
- The diff is polished, but no one checks whether it solved the original problem.
+ 03Confident driftDesvio confiante
+ The diff is polished, but no one checks whether it solved the original problem.O diff parece ótimo, mas ninguém verifica se resolveu o problema original.
@@ -240,8 +400,15 @@ const base = import.meta.env.BASE_URL;
-
The subagent loop
- Click a phase. See the handoff.
+
+ The subagent loopO ciclo de subagentes
+
+ Click a phase. See the handoff.Clique em uma fase. Veja a passagem.
Delegation means moving one bounded task into a smaller context—not giving away
responsibility.
@@ -280,9 +447,23 @@ const base = import.meta.env.BASE_URL;
- What crosses contextsbrief → diff → evidence
+ What crosses contextsO que atravessa contextosbrief → diff → evidencebrief → diff → evidência
-
Git worktrees
One branch per hand.
+
+ Git worktreesGit worktrees
+
+ One branch per hand.Uma branch por mão.
+
A worktree is another directory linked to the same repository. Each agent gets its own
checkout and index; history remains shared.
- Select a node to inspect its checkout, owner, and next action.
+ Select a node to inspect its checkout, owner, and next action.Selecione um nó para inspecionar checkout, responsável e próxima ação.
- Do not pay for reasoning where you need rhythm.
-
Choose a job to see why the model profile changes.
+
+ Model routingRoteamento de modelos
+
+ Do not pay for reasoning where you need rhythm.Não pague por raciocínio onde precisa de ritmo.
+
+ Choose a job to see why the model profile changes.Escolha um trabalho para entender por que o perfil do modelo muda.
+
- Model gearboxcapability tier × thinking effort
-
+ Model gearboxCâmbio de modeloscapability tier × thinking effortnível de capacidade × esforço de raciocínio
+
+
+
+
+ Two separate knobsDois controles separados
+
+
+ Choose the engine. Then choose the gear.Escolha o motor. Depois escolha a marcha.
+
+
+
+ A stronger model changes the capability ceiling. Higher reasoning effort gives that
+ model more room to work. Start with the lightest combination that passes your real
+ checks, then move one knob at a time.Um modelo mais forte muda o teto de capacidade. Mais esforço de raciocínio dá mais
+ espaço para esse modelo trabalhar. Comece com a combinação mais leve que passa seus
+ checks e mova um controle por vez.
+
+ ROUTING RULEREGRA DE ROTEAMENTO
+ Use strong models for ambiguity and judgment. Use lighter models for bounded execution.
+ Raise effort only when evaluation shows a gain.Use modelos fortes para ambiguidade e julgamento. Use modelos leves para execução
+ delimitada. Aumente o esforço apenas quando a avaliação mostrar ganho.
+
-
Skills
Write the right way once.
- A skill is a reusable procedure. It can carry instructions, references, scripts, and
- assets. It is not magical memory, and it does not replace acceptance criteria.
+
+ SkillsSkills
+
+ Write the right way once.Escreva do jeito certo uma vez.
+
+ A skill is a reusable procedure. It can carry instructions, references, scripts, and
+ assets. It is not magical memory, and it does not replace acceptance criteria.
+ Uma skill é um procedimento reutilizável. Ela pode carregar instruções, referências,
+ scripts e assets. Não é memória mágica e não substitui critérios de aceitação.
From 054393f7af612a66c8f47a61b4be9a5973f1f034 Mon Sep 17 00:00:00 2001
From: Marcos Paulo
Date: Sat, 5 Sep 2026 22:30:50 +0000
Subject: [PATCH 3/5] feat(15d): complete localization of full-guide page to PT
---
.agents/agents/motion-designer.md | 5 +-
.agents/agents/reviewer.md | 8 +-
.agents/context/architecture.md | 39 +-
.agents/rules/accessibility.md | 3 +-
.agents/rules/animation.md | 12 +-
.agents/rules/astro.md | 25 +-
.agents/rules/code-style.md | 6 +-
.agents/rules/componentization.md | 3 +-
.agents/rules/content-i18n.md | 4 +-
.agents/scripts/snapshot-route.mjs | 8 +-
.agents/skills/content-migration/SKILL.md | 9 +-
.agents/skills/motion/SKILL.md | 29 +-
.agents/skills/verify-contract/SKILL.md | 23 +-
.agents/templates/components/grid-group.astro | 6 +-
.agents/templates/components/island.astro | 55 ++-
.../templates/components/static-block.astro | 8 +-
.agents/templates/config/.stylelintrc.json | 6 +-
.agents/templates/config/eslint.config.js | 10 +-
.agents/templates/config/gitea-ci.yaml | 2 +-
.agents/templates/pages/chapter.astro | 31 +-
.agents/templates/pages/interactive.astro | 17 +-
GATES.md | 46 +-
agents/index.html | 89 +++-
docs/references/README.md | 49 ++-
docs/references/additional-reading.md | 69 ++-
docs/references/model-routing.md | 82 +++-
docs/references/skill-sources.md | 31 +-
index.html | 100 +++--
models/index.html | 88 +++-
plans/astro-refactor/task-05-content-guide.md | 19 +-
.../astro-refactor/task-06-content-review.md | 14 +-
plans/astro-refactor/task-17-hands-on.md | 6 +-
scripts/verify.mjs | 394 ++++++++++++++++--
src/components/blocks/RouteTable.astro | 56 ++-
src/components/blocks/SkillPackage.astro | 18 +-
src/components/blocks/WorktreeMap.astro | 35 +-
src/pages/full-guide.astro | 171 ++++++--
summary/index.html | 71 +++-
38 files changed, 1322 insertions(+), 325 deletions(-)
diff --git a/.agents/agents/motion-designer.md b/.agents/agents/motion-designer.md
index 14a13ee..d9dfc16 100644
--- a/.agents/agents/motion-designer.md
+++ b/.agents/agents/motion-designer.md
@@ -1,6 +1,9 @@
---
name: motion-designer
-description: Adds and audits animation — transitions, state changes, optional view transitions. Use for task 17 and any change involving movement. Do not use for static layout or styling work.
+description:
+ Adds and audits animation — transitions, state changes, optional view
+ transitions. Use for task 17 and any change involving movement. Do not use for
+ static layout or styling work.
tools: Read, Write, Edit, Bash, Grep, Glob
---
diff --git a/.agents/agents/reviewer.md b/.agents/agents/reviewer.md
index 268b1c6..ffc448b 100644
--- a/.agents/agents/reviewer.md
+++ b/.agents/agents/reviewer.md
@@ -1,6 +1,9 @@
---
name: reviewer
-description: Merge gate. Reviews a task branch diff against its brief and the project rules. Use before merging any refactor task. Never writes features or fixes findings itself.
+description:
+ Merge gate. Reviews a task branch diff against its brief and the project
+ rules. Use before merging any refactor task. Never writes features or fixes
+ findings itself.
tools: Read, Grep, Glob, Bash
---
@@ -8,7 +11,8 @@ You are the merge gate. You read diffs and report. **You do not write features
and you do not fix what you find** — you name it precisely enough that the
owning agent can.
-**Read**: the task file, then every rule in `.agents/rules/` relevant to the diff.
+**Read**: the task file, then every rule in `.agents/rules/` relevant to the
+diff.
## Order of checks — highest-value first
diff --git a/.agents/context/architecture.md b/.agents/context/architecture.md
index 1220b53..33b0252 100644
--- a/.agents/context/architecture.md
+++ b/.agents/context/architecture.md
@@ -4,18 +4,18 @@
Ten hand-written HTML pages, each linking its own CSS and one ES module:
-| Route | Page | Script | Stylesheets |
-| --- | --- | --- | --- |
-| `/` | `index.html` | — | `chapters.css`, `landing.css` |
-| `/full-guide/` | `full-guide/index.html` | `app.js` (50 KB) | `styles.css`, `responsive.css`, `audit.css` |
-| `/summary/` | `summary/index.html` | — | `chapters.css` |
-| `/models/` | `models/index.html` | — | `chapters.css` |
-| `/agents/` | `agents/index.html` | — | `chapters.css` |
-| `/skills/` | `skills/index.html` | `skills/app.js` | `skills/styles.css` |
-| `/rules/` | `rules/index.html` | `rules/app.js` | `rules/styles.css` |
-| `/skills-review/` | `skills-review/index.html` | `skills-review/app.js` | `skills-review/styles.css`, `change-lens.css` |
-| `/hands-on/starter/` | lab fixture | own | own |
-| `/hands-on/rules/` | lab fixture | own | own |
+| Route | Page | Script | Stylesheets |
+| -------------------- | -------------------------- | ---------------------- | --------------------------------------------- |
+| `/` | `index.html` | — | `chapters.css`, `landing.css` |
+| `/full-guide/` | `full-guide/index.html` | `app.js` (50 KB) | `styles.css`, `responsive.css`, `audit.css` |
+| `/summary/` | `summary/index.html` | — | `chapters.css` |
+| `/models/` | `models/index.html` | — | `chapters.css` |
+| `/agents/` | `agents/index.html` | — | `chapters.css` |
+| `/skills/` | `skills/index.html` | `skills/app.js` | `skills/styles.css` |
+| `/rules/` | `rules/index.html` | `rules/app.js` | `rules/styles.css` |
+| `/skills-review/` | `skills-review/index.html` | `skills-review/app.js` | `skills-review/styles.css`, `change-lens.css` |
+| `/hands-on/starter/` | lab fixture | own | own |
+| `/hands-on/rules/` | lab fixture | own | own |
Weight is concentrated: `app.js` 50 KB, `responsive.css` 30 KB,
`skills-review/catalog.js` 27 KB, `skills-review/submitted-catalog.js` 18 KB.
@@ -35,7 +35,8 @@ Weight is concentrated: `app.js` 50 KB, `responsive.css` 30 KB,
`wins[]`, `improve[]`, `extras`, `improved` (full markdown). 24 entries across
`catalog.js` + `submitted-catalog.js`. This is already a content collection in
all but name.
-- **`skills-review/files.js` / `submitted-files.js`** — generated file manifests.
+- **`skills-review/files.js` / `submitted-files.js`** — generated file
+ manifests.
- **`vote.js`** — the vote widget island; talks to `vote-service/`.
## Target (Astro)
@@ -53,12 +54,12 @@ public/
### Non-negotiables for the target
-- **URLs do not change.** `/full-guide/`, `/skills-review/`, `/hands-on/starter/`
- and the rest must resolve exactly as they do now, trailing slash included.
- Existing links (including `docs/`, SilverBullet, and shared URLs with
- `?author=…&skill=…&view=…` query params) must keep working.
-- **Zero JS by default.** Seven of the ten pages ship no JavaScript today.
- They must still ship none. Islands are opt-in, per component, and justified.
+- **URLs do not change.** `/full-guide/`, `/skills-review/`,
+ `/hands-on/starter/` and the rest must resolve exactly as they do now,
+ trailing slash included. Existing links (including `docs/`, SilverBullet, and
+ shared URLs with `?author=…&skill=…&view=…` query params) must keep working.
+- **Zero JS by default.** Seven of the ten pages ship no JavaScript today. They
+ must still ship none. Islands are opt-in, per component, and justified.
- **`hands-on/` stays vanilla.** It goes in `public/` untouched. It is a lab
fixture, not a component.
- **No external runtime requests.** `audit-ui.mjs` enforces this and it is part
diff --git a/.agents/rules/accessibility.md b/.agents/rules/accessibility.md
index beaf75f..69a6a95 100644
--- a/.agents/rules/accessibility.md
+++ b/.agents/rules/accessibility.md
@@ -49,4 +49,5 @@ likely to fail; verify before shipping.
## Bilingual content
`` must change with the language toggle, not just the text. Screen
-readers pick pronunciation from it. This already works today — do not regress it.
+readers pick pronunciation from it. This already works today — do not regress
+it.
diff --git a/.agents/rules/animation.md b/.agents/rules/animation.md
index 6ecdffc..7d5415c 100644
--- a/.agents/rules/animation.md
+++ b/.agents/rules/animation.md
@@ -20,12 +20,16 @@ Several current stylesheets already honour it. Every new animation must:
```css
@media (prefers-reduced-motion: reduce) {
- * { animation-duration: .01ms !important; animation-iteration-count: 1 !important;
- transition-duration: .01ms !important; scroll-behavior: auto !important; }
+ * {
+ animation-duration: 0.01ms !important;
+ animation-iteration-count: 1 !important;
+ transition-duration: 0.01ms !important;
+ scroll-behavior: auto !important;
+ }
}
```
-Reduced motion means *reduced*, not *broken*: the end state must still be
+Reduced motion means _reduced_, not _broken_: the end state must still be
correct and the interface still usable. Test it — in DevTools, Rendering →
Emulate `prefers-reduced-motion`.
@@ -35,7 +39,7 @@ Emulate `prefers-reduced-motion`.
Animating `width`, `height`, `top`, `left`, or `margin` forces layout on every
frame and will show up as a failed INP.
- `will-change` only on an element about to animate, removed after. Leaving it
- on permanently costs memory and can *hurt* performance.
+ on permanently costs memory and can _hurt_ performance.
- Prefer CSS transitions. Reach for the Web Animations API only for sequencing
that CSS cannot express. Do not add an animation library — it is a runtime
dependency on a site whose thesis is having none.
diff --git a/.agents/rules/astro.md b/.agents/rules/astro.md
index 5bad9b5..2a49055 100644
--- a/.agents/rules/astro.md
+++ b/.agents/rules/astro.md
@@ -15,12 +15,12 @@ this site's ten pages ship no JS today and must continue to.
Only these need interactivity. Anything else claiming island status is wrong:
-| Island | Why | Directive |
-| --- | --- | --- |
-| Guide phase/tab switchers | click-driven panel swap | `client:visible` |
-| Review desk catalog + file viewer | search, filter, fetch source files | `client:load` |
-| Vote widget | talks to `vote-service/` | `client:visible` |
-| Language toggle | swaps EN/PT across the page | `client:idle` |
+| Island | Why | Directive |
+| --------------------------------- | ---------------------------------- | ---------------- |
+| Guide phase/tab switchers | click-driven panel swap | `client:visible` |
+| Review desk catalog + file viewer | search, filter, fetch source files | `client:load` |
+| Vote widget | talks to `vote-service/` | `client:visible` |
+| Language toggle | swaps EN/PT across the page | `client:idle` |
## Structure
@@ -31,8 +31,11 @@ Only these need interactivity. Anything else claiming island status is wrong:
// 3. destructure Astro.props
// 4. derived values — no side effects, no fetch in components
---
+
-
+
```
- Typed props always: `interface Props { … }`, then `const { … } = Astro.props`.
@@ -60,13 +63,13 @@ almost one-to-one — do that rather than importing a 27 KB JS file.
The site is served from `/ai-for-dummies/`. Set `base` in `astro.config.mjs` and
never hand-write an absolute internal path. Use `import.meta.env.BASE_URL`.
-Existing routes are load-bearing and must not change, including trailing
-slashes and the review desk's query params.
+Existing routes are load-bearing and must not change, including trailing slashes
+and the review desk's query params.
## Never
-- No UI framework (React/Vue/Svelte) unless a task brief explicitly calls for it.
- Astro components plus a little vanilla JS cover everything here.
+- No UI framework (React/Vue/Svelte) unless a task brief explicitly calls for
+ it. Astro components plus a little vanilla JS cover everything here.
- No CSS framework. This site has a hand-built visual identity — see
[`theming.md`](theming.md).
- No external runtime requests. Self-host. `audit-ui.mjs` enforces it.
diff --git a/.agents/rules/code-style.md b/.agents/rules/code-style.md
index 7d93492..2a79483 100644
--- a/.agents/rules/code-style.md
+++ b/.agents/rules/code-style.md
@@ -3,7 +3,7 @@
## Match what is there
This codebase has a real voice: dense one-liner CSS, terse ES modules, comments
-that explain *why* and never *what*. Do not reformat it into someone else's
+that explain _why_ and never _what_. Do not reformat it into someone else's
house style as a side effect of a task.
The one exception is CSS minification-by-hand — `styles.css` is single-line and
@@ -44,5 +44,5 @@ overrides, and the temptation during migration will be to port it wholesale
## Commits
-Present tense, lowercase, `type: subject`, matching the existing log
-(`feat:`, `fix:`, `docs:`). The body explains why, and states what you did not do.
+Present tense, lowercase, `type: subject`, matching the existing log (`feat:`,
+`fix:`, `docs:`). The body explains why, and states what you did not do.
diff --git a/.agents/rules/componentization.md b/.agents/rules/componentization.md
index 4adb3fc..3f9a154 100644
--- a/.agents/rules/componentization.md
+++ b/.agents/rules/componentization.md
@@ -3,7 +3,8 @@
## When to make a component
Extract when the same markup appears **three times**, or when a block has a name
-a person would use out loud ("the eyebrow", "the route card", "the phase panel").
+a person would use out loud ("the eyebrow", "the route card", "the phase
+panel").
Do not extract on the second occurrence. Two similar blocks often diverge; the
premature abstraction costs more than the duplication.
diff --git a/.agents/rules/content-i18n.md b/.agents/rules/content-i18n.md
index 0e9c724..a9af322 100644
--- a/.agents/rules/content-i18n.md
+++ b/.agents/rules/content-i18n.md
@@ -55,5 +55,5 @@ hand-rolled client-side renderer. That deletes code and improves fidelity.
Careful: `skill-reviews/improved/**/SKILL.md` is **generated** from those
entries by `scripts/build-skill-review.mjs`, and the generated files are
-committed. Keep that generator working, or replace it and update every
-reference to it.
+committed. Keep that generator working, or replace it and update every reference
+to it.
diff --git a/.agents/scripts/snapshot-route.mjs b/.agents/scripts/snapshot-route.mjs
index 5ff5a5f..8a1ffb7 100755
--- a/.agents/scripts/snapshot-route.mjs
+++ b/.agents/scripts/snapshot-route.mjs
@@ -27,8 +27,12 @@ const text = html
.replace(/
diff --git a/.agents/templates/components/island.astro b/.agents/templates/components/island.astro
index dc50ecc..f84f1f9 100644
--- a/.agents/templates/components/island.astro
+++ b/.agents/templates/components/island.astro
@@ -20,25 +20,33 @@ const { items, initialId = items[0]?.id } = Astro.props;
+
+
+
+
+
diff --git a/docs/references/README.md b/docs/references/README.md
index 776007d..c1d5a76 100644
--- a/docs/references/README.md
+++ b/docs/references/README.md
@@ -7,38 +7,47 @@ articles are context, not authority.
- Anthropic — custom subagents: https://code.claude.com/docs/en/sub-agents
Separate context, tools, permissions, model selection, and worktree isolation.
-- Anthropic — skills: https://code.claude.com/docs/en/skills
- Reusable instruction packages and skill discovery.
-- Anthropic — worktrees: https://code.claude.com/docs/en/worktrees
- Isolated sessions, branches, cleanup, and ignored files.
-- OpenAI — build skills: https://developers.openai.com/codex/skills
- Packaged instructions and resources for Codex workflows.
-- OpenAI API — skills reference: https://developers.openai.com/api/reference/go/resources/skills
- Creating, versioning, listing, and downloading skill bundles.
-- Git — worktree: https://git-scm.com/docs/git-worktree.html
- Linked working trees, branches, shared history, add/list/remove/prune.
+- Anthropic — skills: https://code.claude.com/docs/en/skills Reusable
+ instruction packages and skill discovery.
+- Anthropic — worktrees: https://code.claude.com/docs/en/worktrees Isolated
+ sessions, branches, cleanup, and ignored files.
+- OpenAI — build skills: https://developers.openai.com/codex/skills Packaged
+ instructions and resources for Codex workflows.
+- OpenAI API — skills reference:
+ https://developers.openai.com/api/reference/go/resources/skills Creating,
+ versioning, listing, and downloading skill bundles.
+- Git — worktree: https://git-scm.com/docs/git-worktree.html Linked working
+ trees, branches, shared history, add/list/remove/prune.
## Research and articles
- [Model routing and reasoning controls](model-routing.md) — official OpenAI,
Anthropic, and Google terminology, commands, compatibility caveats, and a
practical tier/effort baseline.
-- [Verified skill sources](skill-sources.md) — pinned GitHub references,
- package paths, local-match confidence, and an approval-first install prompt.
+- [Verified skill sources](skill-sources.md) — pinned GitHub references, package
+ paths, local-match confidence, and an approval-first install prompt.
For a structured 12-part reading path—including Git and Anthropic documentation,
OpenAI orchestration guidance, Medium, and Substack—see
[additional-reading.md](additional-reading.md).
-- Infobip Research — phased coding-agent workflow: https://arxiv.org/abs/2608.30701
-- Effective asynchronous software engineering agents: https://arxiv.org/abs/2603.21489
-- Launch Receipts — AI coding workflow without losing control: https://launchreceipts.com/articles/ai-coding-agent-workflow
-- GitWorktree.org — three agents, three worktrees case study: https://www.gitworktree.org/cases/parallel-ai-agents
+- Infobip Research — phased coding-agent workflow:
+ https://arxiv.org/abs/2608.30701
+- Effective asynchronous software engineering agents:
+ https://arxiv.org/abs/2603.21489
+- Launch Receipts — AI coding workflow without losing control:
+ https://launchreceipts.com/articles/ai-coding-agent-workflow
+- GitWorktree.org — three agents, three worktrees case study:
+ https://www.gitworktree.org/cases/parallel-ai-agents
## Teaching claims
-- Use a stronger model where ambiguity, architecture, decomposition, and review dominate.
+- Use a stronger model where ambiguity, architecture, decomposition, and review
+ dominate.
- Use faster models for bounded implementation with explicit context and checks.
-- Give every editing worker an isolated branch/worktree; merge only reviewed diffs.
-- A skill is a reusable procedure plus optional references/scripts/assets, not magical memory.
-- Delegation does not remove human responsibility for intent, boundaries, or evidence.
+- Give every editing worker an isolated branch/worktree; merge only reviewed
+ diffs.
+- A skill is a reusable procedure plus optional references/scripts/assets, not
+ magical memory.
+- Delegation does not remove human responsibility for intent, boundaries, or
+ evidence.
diff --git a/docs/references/additional-reading.md b/docs/references/additional-reading.md
index 1baaba1..07d91c1 100644
--- a/docs/references/additional-reading.md
+++ b/docs/references/additional-reading.md
@@ -1,6 +1,8 @@
# Additional reading: multi-agent coding
-Verified on 2026-09-02. Start with the official references for behavior and constraints; use the practitioner articles for concrete workflow ideas that should be tested against your own repository.
+Verified on 2026-09-02. Start with the official references for behavior and
+constraints; use the practitioner articles for concrete workflow ideas that
+should be tested against your own repository.
## Git worktrees and isolated coding sessions
@@ -8,25 +10,38 @@ Verified on 2026-09-02. Start with the official references for behavior and cons
- **Publisher:** Git
- **Topic:** Worktree fundamentals and lifecycle
-- **Teaching takeaway:** The authoritative reference for how linked worktrees share repository data while retaining separate `HEAD` and index state. Use its `add`, `list`, `lock`, `remove`, `prune`, and `repair` sections to teach the complete lifecycle rather than only worktree creation.
+- **Teaching takeaway:** The authoritative reference for how linked worktrees
+ share repository data while retaining separate `HEAD` and index state. Use its
+ `add`, `list`, `lock`, `remove`, `prune`, and `repair` sections to teach the
+ complete lifecycle rather than only worktree creation.
### 2. [Run parallel sessions with worktrees](https://code.claude.com/docs/en/worktrees)
- **Publisher:** Anthropic — Claude Code Docs
- **Topic:** Native worktree isolation for coding agents
-- **Teaching takeaway:** Shows how Claude Code creates isolated sessions with `--worktree`, how gitignored environment files can be copied with `.worktreeinclude`, and how subagents can use worktree isolation. It is a useful bridge between raw Git commands and a real agent workflow.
+- **Teaching takeaway:** Shows how Claude Code creates isolated sessions with
+ `--worktree`, how gitignored environment files can be copied with
+ `.worktreeinclude`, and how subagents can use worktree isolation. It is a
+ useful bridge between raw Git commands and a real agent workflow.
### 3. [How Git Worktrees Transformed My AI Agent Development Workflow in 2026](https://medium.com/@mudassir00seven/how-git-worktrees-transformed-my-ai-agent-development-workflow-in-2026-ad8a59b8edfb)
- **Publisher:** Medium — Mudassir Khan
- **Topic:** One worktree per agent and task
-- **Teaching takeaway:** A concise practitioner explanation of why parallel agents collide in a shared filesystem and how one task, branch, worktree, and pull request per agent reduces that interference. Pair it with the official Git documentation because operational details may evolve.
+- **Teaching takeaway:** A concise practitioner explanation of why parallel
+ agents collide in a shared filesystem and how one task, branch, worktree, and
+ pull request per agent reduces that interference. Pair it with the official
+ Git documentation because operational details may evolve.
### 4. [How to Use Git Worktrees with Coding Agents](https://meshintelligence.substack.com/p/how-to-use-git-worktrees-with-coding)
- **Publisher:** Mesh Intelligence on Substack — Petar Djukic
- **Topic:** Worktree-per-task workflow and integration boundaries
-- **Teaching takeaway:** Explains why branches alone do not isolate active files, compares worktrees with clones and containers, and presents a create-work-review-remove lifecycle. Its strongest lesson is that worktrees isolate execution, not merge conflicts, so scheduling and review gates still matter.
+- **Teaching takeaway:** Explains why branches alone do not isolate active
+ files, compares worktrees with clones and containers, and presents a
+ create-work-review-remove lifecycle. Its strongest lesson is that worktrees
+ isolate execution, not merge conflicts, so scheduling and review gates still
+ matter.
## Subagents and orchestration
@@ -34,31 +49,48 @@ Verified on 2026-09-02. Start with the official references for behavior and cons
- **Publisher:** Anthropic — Claude Code Docs
- **Topic:** Specialized subagents, context, tools, and background execution
-- **Teaching takeaway:** Demonstrates how to define narrow subagents with their own prompts, tool permissions, and models, then run them in foreground or background. It supports teaching that delegation quality depends on explicit responsibility and context boundaries, not merely spawning more agents.
+- **Teaching takeaway:** Demonstrates how to define narrow subagents with their
+ own prompts, tool permissions, and models, then run them in foreground or
+ background. It supports teaching that delegation quality depends on explicit
+ responsibility and context boundaries, not merely spawning more agents.
### 6. [Building Effective AI Agents](https://www.anthropic.com/engineering/building-effective-agents)
- **Publisher:** Anthropic Engineering
- **Topic:** Agent architecture patterns
-- **Teaching takeaway:** Introduces routing, parallelization, orchestrator-worker, and evaluator-optimizer patterns while recommending the simplest architecture that meets the task. The orchestrator-worker section is especially useful for explaining when a strong planner should dynamically decompose work for bounded workers.
+- **Teaching takeaway:** Introduces routing, parallelization,
+ orchestrator-worker, and evaluator-optimizer patterns while recommending the
+ simplest architecture that meets the task. The orchestrator-worker section is
+ especially useful for explaining when a strong planner should dynamically
+ decompose work for bounded workers.
### 7. [How we built our multi-agent research system](https://www.anthropic.com/engineering/multi-agent-research-system)
- **Publisher:** Anthropic Engineering
- **Topic:** Production multi-agent coordination
-- **Teaching takeaway:** A production case study in which a lead agent plans and delegates independent searches to parallel subagents. It is useful for discussing breadth-first tasks, separate context windows, token cost, evaluation, and why parallelism helps most when subtasks are genuinely independent.
+- **Teaching takeaway:** A production case study in which a lead agent plans and
+ delegates independent searches to parallel subagents. It is useful for
+ discussing breadth-first tasks, separate context windows, token cost,
+ evaluation, and why parallelism helps most when subtasks are genuinely
+ independent.
### 8. [A practical guide to building agents](https://openai.com/business/guides-and-resources/a-practical-guide-to-building-ai-agents/)
- **Publisher:** OpenAI
- **Topic:** Manager and handoff orchestration patterns
-- **Teaching takeaway:** Distinguishes centralized manager orchestration from decentralized handoffs and shows agents being exposed as tools to other agents. Use it to teach that the right topology depends on who must retain control, combine outputs, and own the final response.
+- **Teaching takeaway:** Distinguishes centralized manager orchestration from
+ decentralized handoffs and shows agents being exposed as tools to other
+ agents. Use it to teach that the right topology depends on who must retain
+ control, combine outputs, and own the final response.
### 9. [Agent orchestration](https://openai.github.io/openai-agents-python/multi_agent/)
- **Publisher:** OpenAI Agents SDK
- **Topic:** Agents-as-tools, handoffs, and code-driven workflows
-- **Teaching takeaway:** Gives a precise comparison between a manager calling specialists as tools and handing control to a specialist. It also covers deterministic orchestration in code, including chains, evaluator loops, and parallel execution for independent tasks.
+- **Teaching takeaway:** Gives a precise comparison between a manager calling
+ specialists as tools and handing control to a specialist. It also covers
+ deterministic orchestration in code, including chains, evaluator loops, and
+ parallel execution for independent tasks.
## Model routing and reusable skills
@@ -66,19 +98,30 @@ Verified on 2026-09-02. Start with the official references for behavior and cons
- **Publisher:** Anthropic — Claude Platform Docs
- **Topic:** Routing work between frontier and lower-cost models
-- **Teaching takeaway:** Compares model selection, advisor, and orchestrator strategies using cost-per-completed-task rather than token price alone. Its orchestrator guidance directly supports a frontier planner dispatching bulk independent work to cheaper workers—but also explains when one model is simpler and less expensive.
+- **Teaching takeaway:** Compares model selection, advisor, and orchestrator
+ strategies using cost-per-completed-task rather than token price alone. Its
+ orchestrator guidance directly supports a frontier planner dispatching bulk
+ independent work to cheaper workers—but also explains when one model is
+ simpler and less expensive.
### 11. [Models](https://openai.github.io/openai-agents-python/models/)
- **Publisher:** OpenAI Agents SDK
- **Topic:** Per-agent model selection and mixed-provider routing
-- **Teaching takeaway:** Documents how different agents in one workflow can use different models or providers and how routing can be configured centrally. This is a practical implementation reference for turning a conceptual “strong planner, lightweight workers” policy into explicit per-agent configuration.
+- **Teaching takeaway:** Documents how different agents in one workflow can use
+ different models or providers and how routing can be configured centrally.
+ This is a practical implementation reference for turning a conceptual “strong
+ planner, lightweight workers” policy into explicit per-agent configuration.
### 12. [Skills](https://platform.claude.com/docs/en/managed-agents/skills)
- **Publisher:** Anthropic — Claude Platform Docs
- **Topic:** Reusable filesystem-based agent skills
-- **Teaching takeaway:** Explains the `SKILL.md` package model, repository discovery, supporting scripts and resources, and why only task-relevant skills should be attached. It also highlights the security lesson that repository skills are executable instructions and therefore part of the agent’s trust boundary.
+- **Teaching takeaway:** Explains the `SKILL.md` package model, repository
+ discovery, supporting scripts and resources, and why only task-relevant skills
+ should be attached. It also highlights the security lesson that repository
+ skills are executable instructions and therefore part of the agent’s trust
+ boundary.
## Suggested teaching order
diff --git a/docs/references/model-routing.md b/docs/references/model-routing.md
index eb4be8a..52a1316 100644
--- a/docs/references/model-routing.md
+++ b/docs/references/model-routing.md
@@ -1,25 +1,42 @@
# Model routing and reasoning controls
-Verified against first-party documentation on 2026-09-02. Model catalogs and aliases change; pin production model IDs and re-check the linked compatibility tables before rollout.
+Verified against first-party documentation on 2026-09-02. Model catalogs and
+aliases change; pin production model IDs and re-check the linked compatibility
+tables before rollout.
## Two independent routing knobs
1. **Model tier** chooses the capability, latency, and cost envelope.
-2. **Effort / thinking control** changes how much reasoning work a supported model performs for one request.
+2. **Effort / thinking control** changes how much reasoning work a supported
+ model performs for one request.
-Do not assume that every effort value works with every model or product. Unsupported values may fail, be ignored, or be mapped to another level depending on the client.
+Do not assume that every effort value works with every model or product.
+Unsupported values may fail, be ignored, or be mapped to another level depending
+on the client.
## OpenAI
-The current GPT-5.6 family exposes the **Sol**, **Terra**, and **Luna** model tiers. Its documented `reasoning.effort` values are `none`, `low`, `medium`, `high`, `xhigh`, and `max`. Availability remains model-specific, so select from the levels shown for the chosen model rather than treating the full list as universal. [OpenAI: latest model guide](https://developers.openai.com/api/docs/guides/latest-model)
+The current GPT-5.6 family exposes the **Sol**, **Terra**, and **Luna** model
+tiers. Its documented `reasoning.effort` values are `none`, `low`, `medium`,
+`high`, `xhigh`, and `max`. Availability remains model-specific, so select from
+the levels shown for the chosen model rather than treating the full list as
+universal.
+[OpenAI: latest model guide](https://developers.openai.com/api/docs/guides/latest-model)
-Use a lower-cost tier and low effort for bounded, mechanical work; raise the model tier or effort for planning, architecture, difficult debugging, and final review. This is routing guidance, not an API guarantee.
+Use a lower-cost tier and low effort for bounded, mechanical work; raise the
+model tier or effort for planning, architecture, difficult debugging, and final
+review. This is routing guidance, not an API guarantee.
## Anthropic Claude
### Model tier
-Claude Code provides the aliases `opus`, `sonnet`, and `haiku`: Opus is intended for complex reasoning, Sonnet for everyday coding, and Haiku for simple, fast work. Aliases resolve to provider-dependent recommended versions and can change over time; use a full model ID when reproducibility matters. Claude Code also documents `opusplan`, which uses Opus in plan mode and Sonnet for execution. [Claude Code: model configuration](https://docs.anthropic.com/en/docs/claude-code/model-config)
+Claude Code provides the aliases `opus`, `sonnet`, and `haiku`: Opus is intended
+for complex reasoning, Sonnet for everyday coding, and Haiku for simple, fast
+work. Aliases resolve to provider-dependent recommended versions and can change
+over time; use a full model ID when reproducibility matters. Claude Code also
+documents `opusplan`, which uses Opus in plan mode and Sonnet for execution.
+[Claude Code: model configuration](https://docs.anthropic.com/en/docs/claude-code/model-config)
Copy-ready Claude Code switches:
@@ -37,7 +54,12 @@ claude --model opus
### Effort
-The Claude API parameter is `output_config.effort`. The documented levels are `low`, `medium`, `high`, `xhigh`, and `max`; `high` is the API default. `xhigh` and `max` have narrower model support, and Haiku 4.5 does not support effort. Effort affects the whole response—including thinking and tool calls—and is a behavioral signal, not a strict token budget. [Anthropic: effort](https://docs.anthropic.com/en/docs/build-with-claude/effort)
+The Claude API parameter is `output_config.effort`. The documented levels are
+`low`, `medium`, `high`, `xhigh`, and `max`; `high` is the API default. `xhigh`
+and `max` have narrower model support, and Haiku 4.5 does not support effort.
+Effort affects the whole response—including thinking and tool calls—and is a
+behavioral signal, not a strict token budget.
+[Anthropic: effort](https://docs.anthropic.com/en/docs/build-with-claude/effort)
Documented Python example:
@@ -53,27 +75,45 @@ response = client.messages.create(
)
```
-Claude Code exposes `/effort`; its available choices depend on the active model. Current Claude Code documentation lists `low`, `medium`, `high`, `xhigh`, and `max` for supported Opus versions, while some Opus/Sonnet versions omit `xhigh`. When a selected level is unsupported, Claude Code can fall back to the highest supported level at or below it. [Claude Code: effort compatibility](https://docs.anthropic.com/en/docs/claude-code/model-config#adjust-effort-level)
+Claude Code exposes `/effort`; its available choices depend on the active model.
+Current Claude Code documentation lists `low`, `medium`, `high`, `xhigh`, and
+`max` for supported Opus versions, while some Opus/Sonnet versions omit `xhigh`.
+When a selected level is unsupported, Claude Code can fall back to the highest
+supported level at or below it.
+[Claude Code: effort compatibility](https://docs.anthropic.com/en/docs/claude-code/model-config#adjust-effort-level)
## Google Gemini
### Model tier
-Gemini uses model families rather than interchangeable aliases: **Pro** targets the most complex reasoning, **Flash** balances capability and throughput, and **Flash-Lite** prioritizes latency, volume, and cost. Select an explicit endpoint such as `gemini-3.7-flash`; Google recommends stable model names for most production applications because `latest` aliases can be hot-swapped. [Gemini API: models](https://ai.google.dev/gemini-api/docs/models)
+Gemini uses model families rather than interchangeable aliases: **Pro** targets
+the most complex reasoning, **Flash** balances capability and throughput, and
+**Flash-Lite** prioritizes latency, volume, and cost. Select an explicit
+endpoint such as `gemini-3.7-flash`; Google recommends stable model names for
+most production applications because `latest` aliases can be hot-swapped.
+[Gemini API: models](https://ai.google.dev/gemini-api/docs/models)
### Thinking level
-For Gemini 3 models, the control is `thinkingLevel` in SDKs (`thinking_level` in Python). Across the family the documented values are `minimal`, `low`, `medium`, and `high`, but support and defaults vary by model. For example, Gemini 3.7 Flash supports `low`, `medium`, and `high` and defaults to `medium`; Gemini 3.1 Pro supports `low`, `medium`, and `high` and defaults to `high`. `minimal` is unavailable on several models and does not guarantee that reasoning is completely off where supported. Gemini 2.5 uses `thinkingBudget`, not `thinkingLevel`. [Gemini API: thinking](https://ai.google.dev/gemini-api/docs/thinking)
+For Gemini 3 models, the control is `thinkingLevel` in SDKs (`thinking_level` in
+Python). Across the family the documented values are `minimal`, `low`, `medium`,
+and `high`, but support and defaults vary by model. For example, Gemini 3.7
+Flash supports `low`, `medium`, and `high` and defaults to `medium`; Gemini 3.1
+Pro supports `low`, `medium`, and `high` and defaults to `high`. `minimal` is
+unavailable on several models and does not guarantee that reasoning is
+completely off where supported. Gemini 2.5 uses `thinkingBudget`, not
+`thinkingLevel`.
+[Gemini API: thinking](https://ai.google.dev/gemini-api/docs/thinking)
Documented JavaScript pattern:
```javascript
-import { GoogleGenAI, ThinkingLevel } from "@google/genai";
+import { GoogleGenAI, ThinkingLevel } from '@google/genai';
const ai = new GoogleGenAI({});
const response = await ai.models.generateContent({
- model: "gemini-3.7-flash",
- contents: "Review this implementation plan.",
+ model: 'gemini-3.7-flash',
+ contents: 'Review this implementation plan.',
config: {
thinkingConfig: {
thinkingLevel: ThinkingLevel.LOW,
@@ -86,11 +126,13 @@ console.log(response.text);
## Practical routing baseline
-| Work | Model tier | Effort / thinking |
-| --- | --- | --- |
-| Formatting, lookup, narrow edit | Haiku / Flash-Lite / Luna | Low or minimal where supported |
-| Normal implementation, tests, review | Sonnet / Flash / Terra | Medium |
-| Architecture, orchestration, hard debugging | Opus / Pro / Sol | High |
-| Frontier or long-horizon work with measured benefit | Strongest supported tier | `xhigh` or `max` only where documented |
+| Work | Model tier | Effort / thinking |
+| --------------------------------------------------- | ------------------------- | -------------------------------------- |
+| Formatting, lookup, narrow edit | Haiku / Flash-Lite / Luna | Low or minimal where supported |
+| Normal implementation, tests, review | Sonnet / Flash / Terra | Medium |
+| Architecture, orchestration, hard debugging | Opus / Pro / Sol | High |
+| Frontier or long-horizon work with measured benefit | Strongest supported tier | `xhigh` or `max` only where documented |
-Treat this table as a starting hypothesis. Evaluate quality, latency, and cost on representative tasks, then route to the cheapest combination that still passes the required checks.
+Treat this table as a starting hypothesis. Evaluate quality, latency, and cost
+on representative tasks, then route to the cheapest combination that still
+passes the required checks.
diff --git a/docs/references/skill-sources.md b/docs/references/skill-sources.md
index 2a41265..0b01aed 100644
--- a/docs/references/skill-sources.md
+++ b/docs/references/skill-sources.md
@@ -1,17 +1,20 @@
# Verified skill sources
-Checked on 2026-09-02 against the installed files under `~/.codex/skills`. A pinned blob link identifies the content inspected; the repository/path column identifies what an installer should copy. Pinned commits are preferable to mutable `main` when reproducibility matters.
+Checked on 2026-09-02 against the installed files under `~/.codex/skills`. A
+pinned blob link identifies the content inspected; the repository/path column
+identifies what an installer should copy. Pinned commits are preferable to
+mutable `main` when reproducibility matters.
-| Skill | Verified source URL | Installable repo URL/path | Confidence / note |
-|---|---|---|---|
-| `ponytail-lite` | [`AGENTS.md` at `e7b42dc`](https://github.com/ilindaniel/ponytail-lite/blob/e7b42dc2d384a702240dea4d52a7bf5530b821b6/AGENTS.md) | [`ilindaniel/ponytail-lite`](https://github.com/ilindaniel/ponytail-lite), path `AGENTS.md` | **High — exact byte match.** The local `ponytail-lite/SKILL.md` is this file unchanged. Upstream presents it as an agent instruction file, not a conventional frontmatter-based skill package; install it through the host's project/global instruction mechanism. |
-| `caveman` | [Public upstream skill at `3b74643`](https://github.com/JuliusBrussee/caveman/blob/3b74643f4d910f496babd4e634b1ba7168816f14/skills/caveman/SKILL.md) | [`JuliusBrussee/caveman`](https://github.com/JuliusBrussee/caveman), path `skills/caveman/` | **Medium for the installed file; high for upstream.** The local file is an environment-specific wrapper that names this public project and its skill files, but it is not byte-identical to the public `skills/caveman/SKILL.md`. Install upstream, not the local wrapper. |
-| `unlazy` | [`SKILL.md` at `473d4b8`](https://github.com/Leonxlnx/unlazy/blob/473d4b80421c36d733042434cd4b938f81a19ef1/SKILL.md) | [`Leonxlnx/unlazy`](https://github.com/Leonxlnx/unlazy), repository root (copy the whole package) | **High — exact byte match**, also corroborated by local `.unlazy-source.txt`. The package includes referenced scripts, templates, security notes, and workflow documents; do not copy only `SKILL.md`. |
-| `research` | [`SKILL.md` at `6654f6b`](https://github.com/mattpocock/skills/blob/6654f6b60cd9d5be8b54c6fafe44346dabeb3b76/skills/engineering/research/SKILL.md) | [`mattpocock/skills`](https://github.com/mattpocock/skills), path `skills/engineering/research/` | **High — exact byte match.** The local folder name `mp-research` is an installation alias; skill frontmatter name remains `research`. |
-| `diagnosing-bugs` | [`SKILL.md` at `6654f6b`](https://github.com/mattpocock/skills/blob/6654f6b60cd9d5be8b54c6fafe44346dabeb3b76/skills/engineering/diagnosing-bugs/SKILL.md) | [`mattpocock/skills`](https://github.com/mattpocock/skills), path `skills/engineering/diagnosing-bugs/` | **High — exact byte match.** The local folder is aliased as `mp-diagnosing-bugs`. |
-| `code-review` | [`SKILL.md` at `6654f6b`](https://github.com/mattpocock/skills/blob/6654f6b60cd9d5be8b54c6fafe44346dabeb3b76/skills/engineering/code-review/SKILL.md) | [`mattpocock/skills`](https://github.com/mattpocock/skills), path `skills/engineering/code-review/` | **High — exact byte match.** The local folder is aliased as `mp-code-review`. Copy the directory so any future supporting files remain available. |
-| `token-saver` | [`SKILL.md` at `8f21188`](https://github.com/aetox-skills/token-saver/blob/8f21188bb043fad411f47e2e57f0365a83c13da7/SKILL.md) | [`aetox-skills/token-saver`](https://github.com/aetox-skills/token-saver), repository root | **High — exact byte match.** The skill expects the separate [`rtk-ai/rtk`](https://github.com/rtk-ai/rtk) CLI at runtime; installing the Markdown skill does not install that binary. |
-| `webapp-testing` | [`SKILL.md` at `5304866`](https://github.com/anthropics/skills/blob/53048666b05b4799081517d00e09e0a2dd688678/skills/webapp-testing/SKILL.md) | [`anthropics/skills`](https://github.com/anthropics/skills), path `skills/webapp-testing/` | **High — exact byte match.** Copy the full directory because the skill calls `scripts/with_server.py` and carries its own license file. |
+| Skill | Verified source URL | Installable repo URL/path | Confidence / note |
+| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `ponytail-lite` | [`AGENTS.md` at `e7b42dc`](https://github.com/ilindaniel/ponytail-lite/blob/e7b42dc2d384a702240dea4d52a7bf5530b821b6/AGENTS.md) | [`ilindaniel/ponytail-lite`](https://github.com/ilindaniel/ponytail-lite), path `AGENTS.md` | **High — exact byte match.** The local `ponytail-lite/SKILL.md` is this file unchanged. Upstream presents it as an agent instruction file, not a conventional frontmatter-based skill package; install it through the host's project/global instruction mechanism. |
+| `caveman` | [Public upstream skill at `3b74643`](https://github.com/JuliusBrussee/caveman/blob/3b74643f4d910f496babd4e634b1ba7168816f14/skills/caveman/SKILL.md) | [`JuliusBrussee/caveman`](https://github.com/JuliusBrussee/caveman), path `skills/caveman/` | **Medium for the installed file; high for upstream.** The local file is an environment-specific wrapper that names this public project and its skill files, but it is not byte-identical to the public `skills/caveman/SKILL.md`. Install upstream, not the local wrapper. |
+| `unlazy` | [`SKILL.md` at `473d4b8`](https://github.com/Leonxlnx/unlazy/blob/473d4b80421c36d733042434cd4b938f81a19ef1/SKILL.md) | [`Leonxlnx/unlazy`](https://github.com/Leonxlnx/unlazy), repository root (copy the whole package) | **High — exact byte match**, also corroborated by local `.unlazy-source.txt`. The package includes referenced scripts, templates, security notes, and workflow documents; do not copy only `SKILL.md`. |
+| `research` | [`SKILL.md` at `6654f6b`](https://github.com/mattpocock/skills/blob/6654f6b60cd9d5be8b54c6fafe44346dabeb3b76/skills/engineering/research/SKILL.md) | [`mattpocock/skills`](https://github.com/mattpocock/skills), path `skills/engineering/research/` | **High — exact byte match.** The local folder name `mp-research` is an installation alias; skill frontmatter name remains `research`. |
+| `diagnosing-bugs` | [`SKILL.md` at `6654f6b`](https://github.com/mattpocock/skills/blob/6654f6b60cd9d5be8b54c6fafe44346dabeb3b76/skills/engineering/diagnosing-bugs/SKILL.md) | [`mattpocock/skills`](https://github.com/mattpocock/skills), path `skills/engineering/diagnosing-bugs/` | **High — exact byte match.** The local folder is aliased as `mp-diagnosing-bugs`. |
+| `code-review` | [`SKILL.md` at `6654f6b`](https://github.com/mattpocock/skills/blob/6654f6b60cd9d5be8b54c6fafe44346dabeb3b76/skills/engineering/code-review/SKILL.md) | [`mattpocock/skills`](https://github.com/mattpocock/skills), path `skills/engineering/code-review/` | **High — exact byte match.** The local folder is aliased as `mp-code-review`. Copy the directory so any future supporting files remain available. |
+| `token-saver` | [`SKILL.md` at `8f21188`](https://github.com/aetox-skills/token-saver/blob/8f21188bb043fad411f47e2e57f0365a83c13da7/SKILL.md) | [`aetox-skills/token-saver`](https://github.com/aetox-skills/token-saver), repository root | **High — exact byte match.** The skill expects the separate [`rtk-ai/rtk`](https://github.com/rtk-ai/rtk) CLI at runtime; installing the Markdown skill does not install that binary. |
+| `webapp-testing` | [`SKILL.md` at `5304866`](https://github.com/anthropics/skills/blob/53048666b05b4799081517d00e09e0a2dd688678/skills/webapp-testing/SKILL.md) | [`anthropics/skills`](https://github.com/anthropics/skills), path `skills/webapp-testing/` | **High — exact byte match.** Copy the full directory because the skill calls `scripts/with_server.py` and carries its own license file. |
## Safe copy-paste prompt
@@ -38,4 +41,8 @@ Workflow:
## Verification method
-The seven **exact** findings were established by downloading the pinned public files and comparing them byte-for-byte with the local installed copies. For `caveman`, the local wrapper was compared against both the repository-level instructions and public `skills/caveman/SKILL.md`; neither matched, so only its upstream family is attributed, not the wrapper itself.
+The seven **exact** findings were established by downloading the pinned public
+files and comparing them byte-for-byte with the local installed copies. For
+`caveman`, the local wrapper was compared against both the repository-level
+instructions and public `skills/caveman/SKILL.md`; neither matched, so only its
+upstream family is attributed, not the wrapper itself.
diff --git a/index.html b/index.html
index 42934ea..ff0cf1f 100644
--- a/index.html
+++ b/index.html
@@ -1,27 +1,79 @@
-
-
-
-
- AI For Dummies — Start here
-
-
-
-
-
- AI FOR DUMMIES00 / START HEREreview desk ↗
-
The short route
Ship the system.
Start with the map. Then open the one chapter that matches the decision in front of you: model, agent, worktree, skill, rule, or proof.
+ A model has a capability ceiling. Effort controls how much room it gets to reason. Route
+ by uncertainty and verification cost.
+
+
+
+
+ LOW
+
Bounded rhythm
+
Lookup, small edits, formatting, and transformations with clear checks.
+
+
+ MEDIUM
+
Default work
+
Normal implementation where the contract is clear but context matters.
+
+
+ HIGH
+
Ambiguity
+
Planning, architecture, security judgment, and hard failures.
+
+
+
+
+
Two knobs
+
Capability × effort
+
+
+ ROUTING RULEstrong model + high effort → frame ambiguity · light model + low effort → bounded
+ execution · raise one knob at a time → compare evidence
+
+
+
+
+
Sequence
+
Spend judgment where it compounds.
+
+
+
+ 01
+
+ PlanStrong model: scope, risks, acceptance, and worktree split.
+
+
+
+ 02
+
+ BuildFocused worker: smallest context and lightest model that can pass.
+
+
+
+ 03
+
+ ReviewIndependent pass when missed issues cost more than the call.
+
+
+
+
+
+
+
+
diff --git a/plans/astro-refactor/task-05-content-guide.md b/plans/astro-refactor/task-05-content-guide.md
index 00c35dc..188b2b8 100644
--- a/plans/astro-refactor/task-05-content-guide.md
+++ b/plans/astro-refactor/task-05-content-guide.md
@@ -1,12 +1,13 @@
# Task 05 — Guide content out of app.js
-**Agent**: `content-i18n-migrator` · **Model**: MiniMax-M3
-**Depends on**: 04 · **Parallel with**: 06 · **Blocks**: 15
-**Worktree**: `.agents/scripts/worktree.sh start 05 content-guide`
+**Agent**: `content-i18n-migrator` · **Model**: MiniMax-M3 **Depends on**: 04 ·
+**Parallel with**: 06 · **Blocks**: 15 **Worktree**:
+`.agents/scripts/worktree.sh start 05 content-guide`
## Goal
-Every `{ en, pt }` string in `app.js` lives in `src/content/guide/`, byte-identical.
+Every `{ en, pt }` string in `app.js` lives in `src/content/guide/`,
+byte-identical.
## Scope
@@ -15,13 +16,13 @@ removes it once the page consumes the collection.
## Steps
-1. `node .agents/scripts/extract-strings.mjs app.js > /tmp/before.json`
- (~50 pairs across `phases`, `handsOnPrompts`, `modelGuide`, `skillSources`,
+1. `node .agents/scripts/extract-strings.mjs app.js > /tmp/before.json` (~50
+ pairs across `phases`, `handsOnPrompts`, `modelGuide`, `skillSources`,
`skillInstallPrompts`).
2. Move them into the collection. **Copy mechanically — never retype.** These
- are hand-written translations with deliberate tone (`'Transforme ambiguidade
- em trabalho'`); retyping introduces drift nobody catches until a Portuguese
- speaker reads it.
+ are hand-written translations with deliberate tone
+ (`'Transforme ambiguidade em trabalho'`); retyping introduces drift nobody
+ catches until a Portuguese speaker reads it.
3. `node .agents/scripts/extract-strings.mjs src/content/guide/ > /tmp/after.json`
4. `diff /tmp/before.json /tmp/after.json` → **must be empty**.
diff --git a/plans/astro-refactor/task-06-content-review.md b/plans/astro-refactor/task-06-content-review.md
index a9796fe..98eee28 100644
--- a/plans/astro-refactor/task-06-content-review.md
+++ b/plans/astro-refactor/task-06-content-review.md
@@ -1,8 +1,8 @@
# Task 06 — Review-desk content out of catalog.js
-**Agent**: `content-i18n-migrator` · **Model**: MiniMax-M3
-**Depends on**: 04 · **Parallel with**: 05 · **Blocks**: 16
-**Worktree**: `.agents/scripts/worktree.sh start 06 content-review`
+**Agent**: `content-i18n-migrator` · **Model**: MiniMax-M3 **Depends on**: 04 ·
+**Parallel with**: 05 · **Blocks**: 16 **Worktree**:
+`.agents/scripts/worktree.sh start 06 content-review`
## Goal
@@ -32,12 +32,14 @@ real `.md` files.
node scripts/build-skill-review.mjs && git diff --exit-code skill-reviews/
```
2. **The diff view needs raw source.** The review desk compares original and
- improved as *text*. If `improved` only exists as rendered HTML, the change
+ improved as _text_. If `improved` only exists as rendered HTML, the change
lens breaks. Keep the raw string reachable.
## Done when
-- [ ] 24 entries in the collection; `verify.mjs`'s `id:'` count assertion still passes
+- [ ] 24 entries in the collection; `verify.mjs`'s `id:'` count assertion still
+ passes
- [ ] `git diff --exit-code skill-reviews/` clean after regenerating
- [ ] `astro check` passes
-- [ ] Every reference to the generator still accurate (`package.json`, `README.md`, `docs/operations-guide.md`, the review desk footer)
+- [ ] Every reference to the generator still accurate (`package.json`,
+ `README.md`, `docs/operations-guide.md`, the review desk footer)
diff --git a/plans/astro-refactor/task-17-hands-on.md b/plans/astro-refactor/task-17-hands-on.md
index ffd1e70..15469ee 100644
--- a/plans/astro-refactor/task-17-hands-on.md
+++ b/plans/astro-refactor/task-17-hands-on.md
@@ -1,8 +1,8 @@
# Task 17 — hands-on passthrough
-**Agent**: `astro-architect` · **Model**: MiniMax-M3
-**Depends on**: 01 · **Parallel with**: 12, 13, 14
-**Worktree**: `.agents/scripts/worktree.sh start 17 hands-on`
+**Agent**: `astro-architect` · **Model**: MiniMax-M3 **Depends on**: 01 ·
+**Parallel with**: 12, 13, 14 **Worktree**:
+`.agents/scripts/worktree.sh start 17 hands-on`
## Goal
diff --git a/scripts/verify.mjs b/scripts/verify.mjs
index 84d9165..faee2ae 100644
--- a/scripts/verify.mjs
+++ b/scripts/verify.mjs
@@ -24,68 +24,374 @@ const skillsHtml = read('skills/index.html');
const reviewCatalog = read('skills-review/catalog.js');
const reviewVoteJs = read('skills-review/vote.js');
const voteService = read('vote-service/main.go');
-for (const url of ['https://code.claude.com/docs/en/sub-agents','https://code.claude.com/docs/en/skills','https://code.claude.com/docs/en/worktrees','https://git-scm.com/docs/git-worktree.html','https://developers.openai.com/codex/skills']) if (!refs.includes(url)) throw new Error(`missing reference ${url}`);
+for (const url of [
+ 'https://code.claude.com/docs/en/sub-agents',
+ 'https://code.claude.com/docs/en/skills',
+ 'https://code.claude.com/docs/en/worktrees',
+ 'https://git-scm.com/docs/git-worktree.html',
+ 'https://developers.openai.com/codex/skills',
+])
+ if (!refs.includes(url)) throw new Error(`missing reference ${url}`);
console.log('content verification passed');
-for (const token of ['data-phase="plan"','data-phase="build"','data-phase="review"','data-tree="main"','data-tree="ui"','data-worker="ui"','data-route="plan"','data-model-provider="openai"','data-model-provider="claude"','data-model-provider="gemini"','data-effort="low"','data-effort="medium"','data-effort="high"','data-skill-file="skill"','data-skill-step="observe"','data-skill-step="validate"','data-common-skill="ponytail"','data-common-skill="caveman"','data-common-skill="unlazy"','id="hands-on"','data-copy-target="prompt-install-skills"','data-copy-target="prompt-basic"','data-copy-target="prompt-skills"','hands-on/starter/','additional-reading.md','role="tablist"','
]+(src|href)="https?:[^"]+"/i)) throw new Error('external runtime dependency found');
+if (html.match(/<(script|link)[^>]+(src|href)="https?:[^"]+"/i))
+ throw new Error('external runtime dependency found');
console.log('standalone verification passed');
-for (const token of ['id="pipeline"','id="skills"','id="examples"','data-stage="context"','data-stage="cli"','data-stage="commit"','data-stage="review"','gate-discipline','parallel-agents','repo-db','tech-debt','skill-writer','scripts/check-ui-contract.mjs','.husky/pre-commit','.pr-review.json','.agents/skills','netcracker/interview']) if (!rulesHtml.includes(token)) throw new Error(`missing rules content ${token}`);
+for (const token of [
+ 'id="pipeline"',
+ 'id="skills"',
+ 'id="examples"',
+ 'data-stage="context"',
+ 'data-stage="cli"',
+ 'data-stage="commit"',
+ 'data-stage="review"',
+ 'gate-discipline',
+ 'parallel-agents',
+ 'repo-db',
+ 'tech-debt',
+ 'skill-writer',
+ 'scripts/check-ui-contract.mjs',
+ '.husky/pre-commit',
+ '.pr-review.json',
+ '.agents/skills',
+ 'netcracker/interview',
+])
+ if (!rulesHtml.includes(token)) throw new Error(`missing rules content ${token}`);
console.log('rules content verification passed');
-for (const token of ['const languageCopy','const stages','const skills','const prompts','renderStage','renderSkill','renderLanguage','copyPrompt','addEventListener']) if (!rulesJs.includes(token)) throw new Error(`missing rules interaction ${token}`);
-for (const token of ['data-lang="en"','data-lang="pt"','data-copy-prompt','aria-live="polite"','role="tablist"']) if (!rulesHtml.includes(token)) throw new Error(`missing rules control ${token}`);
+for (const token of [
+ 'const languageCopy',
+ 'const stages',
+ 'const skills',
+ 'const prompts',
+ 'renderStage',
+ 'renderSkill',
+ 'renderLanguage',
+ 'copyPrompt',
+ 'addEventListener',
+])
+ if (!rulesJs.includes(token)) throw new Error(`missing rules interaction ${token}`);
+for (const token of [
+ 'data-lang="en"',
+ 'data-lang="pt"',
+ 'data-copy-prompt',
+ 'aria-live="polite"',
+ 'role="tablist"',
+])
+ if (!rulesHtml.includes(token)) throw new Error(`missing rules control ${token}`);
console.log('rules interaction verification passed');
-if (!html.includes('href="../rules/"')) throw new Error('main presentation does not link to rules page');
-if (!html.includes('href="../skills-review/"')) throw new Error('main presentation does not link to skills review page');
-for (const token of ['../summary/','../models/','../agents/','../skills/','chapter-route']) if (!html.includes(token)) throw new Error(`main presentation missing chapter route ${token}`);
-if (rulesHtml.includes('script src="http') || rulesHtml.includes('rel="stylesheet" href="http')) throw new Error('rules page has an external runtime dependency');
-for (const token of ['@media(min-width:2200px)','@media(max-width:900px)','@media(max-width:600px)','prefers-reduced-motion']) if (!rulesCss.includes(token)) throw new Error(`missing rules responsive contract ${token}`);
+if (!html.includes('href="../rules/"'))
+ throw new Error('main presentation does not link to rules page');
+if (!html.includes('href="../skills-review/"'))
+ throw new Error('main presentation does not link to skills review page');
+for (const token of ['../summary/', '../models/', '../agents/', '../skills/', 'chapter-route'])
+ if (!html.includes(token)) throw new Error(`main presentation missing chapter route ${token}`);
+if (rulesHtml.includes('script src="http') || rulesHtml.includes('rel="stylesheet" href="http'))
+ throw new Error('rules page has an external runtime dependency');
+for (const token of [
+ '@media(min-width:2200px)',
+ '@media(max-width:900px)',
+ '@media(max-width:600px)',
+ 'prefers-reduced-motion',
+])
+ if (!rulesCss.includes(token)) throw new Error(`missing rules responsive contract ${token}`);
console.log('rules standalone verification passed');
-for (const token of ['id="catalog"','id="skill-filter"','id="skill-list"','id="detail"','Preview Markdown','styles.css?v=20260904-vote-widget','change-lens.css?v=20260904-vote-widget','app.js?v=20260904-vote-widget','?author=Name&skill=skill-id&view=improved','SKILLS_REVIEW_VOTE_API']) if (!reviewHtml.includes(token)) throw new Error(`missing review page content ${token}`);
-for (const token of ["from './catalog.js'", "from './files.js'",'function renderList','function renderDetail','selectSkill','packageSummary','markdownHeadings','markdownToc','document.addEventListener(\'keydown\'','loadSelectedFile','schedulePackageSearch','fetchSource','packageSearchText','diffMarkup','diffRows','data-diff','searchParams.set(\'compare\'','markdownMarkup','data-render','preview-markdown','Preview Markdown','View source','FILE PREVIEW','searchParams.set(\'render\'','AUTHOR ·','SKILL ·','function selectFromUrl','function syncUrl','URLSearchParams','navigator.clipboard','document.execCommand','download','data-file','searchParams.set(\'file\'']) if (!reviewJs.includes(token)) throw new Error(`missing review interaction ${token}`);
-for (const token of ['ndo-repro','gfiber-logging','confluence-page','diagram-plantuml','page-reviewer','unslop','spanish-naturalizer','draft-mr','semantic-diff-review','reference.md','files =']) if (!`${reviewFiles}\n${read('skills-review/submitted-files.js')}`.includes(token)) throw new Error(`missing review file manifest ${token}`);
-if ((reviewCatalog.match(/id:'/g) || []).length + (read('skills-review/submitted-catalog.js').match(/id:'/g) || []).length !== 24) throw new Error('review catalog does not cover all submissions');
-if (!reviewCatalog.includes('hardcoded password') || !reviewCatalog.includes('safety-redacted') || !reviewJs.includes('[REDACTED]') || !reviewJs.includes('[REDACTED LOCAL USER]') || !reviewJs.includes('[REDACTED USER]')) throw new Error('review catalog does not record secret safety handling');
+for (const token of [
+ 'id="catalog"',
+ 'id="skill-filter"',
+ 'id="skill-list"',
+ 'id="detail"',
+ 'Preview Markdown',
+ 'styles.css?v=20260904-vote-widget',
+ 'change-lens.css?v=20260904-vote-widget',
+ 'app.js?v=20260904-vote-widget',
+ '?author=Name&skill=skill-id&view=improved',
+ 'SKILLS_REVIEW_VOTE_API',
+])
+ if (!reviewHtml.includes(token)) throw new Error(`missing review page content ${token}`);
+for (const token of [
+ "from './catalog.js'",
+ "from './files.js'",
+ 'function renderList',
+ 'function renderDetail',
+ 'selectSkill',
+ 'packageSummary',
+ 'markdownHeadings',
+ 'markdownToc',
+ "document.addEventListener('keydown'",
+ 'loadSelectedFile',
+ 'schedulePackageSearch',
+ 'fetchSource',
+ 'packageSearchText',
+ 'diffMarkup',
+ 'diffRows',
+ 'data-diff',
+ "searchParams.set('compare'",
+ 'markdownMarkup',
+ 'data-render',
+ 'preview-markdown',
+ 'Preview Markdown',
+ 'View source',
+ 'FILE PREVIEW',
+ "searchParams.set('render'",
+ 'AUTHOR ·',
+ 'SKILL ·',
+ 'function selectFromUrl',
+ 'function syncUrl',
+ 'URLSearchParams',
+ 'navigator.clipboard',
+ 'document.execCommand',
+ 'download',
+ 'data-file',
+ "searchParams.set('file'",
+])
+ if (!reviewJs.includes(token)) throw new Error(`missing review interaction ${token}`);
+for (const token of [
+ 'ndo-repro',
+ 'gfiber-logging',
+ 'confluence-page',
+ 'diagram-plantuml',
+ 'page-reviewer',
+ 'unslop',
+ 'spanish-naturalizer',
+ 'draft-mr',
+ 'semantic-diff-review',
+ 'reference.md',
+ 'files =',
+])
+ if (!`${reviewFiles}\n${read('skills-review/submitted-files.js')}`.includes(token))
+ throw new Error(`missing review file manifest ${token}`);
+if (
+ (reviewCatalog.match(/id:'/g) || []).length +
+ (read('skills-review/submitted-catalog.js').match(/id:'/g) || []).length !==
+ 24
+)
+ throw new Error('review catalog does not cover all submissions');
+if (
+ !reviewCatalog.includes('hardcoded password') ||
+ !reviewCatalog.includes('safety-redacted') ||
+ !reviewJs.includes('[REDACTED]') ||
+ !reviewJs.includes('[REDACTED LOCAL USER]') ||
+ !reviewJs.includes('[REDACTED USER]')
+)
+ throw new Error('review catalog does not record secret safety handling');
console.log('skills review verification passed');
-for (const page of [summaryHtml, modelsHtml, agentsHtml, skillsHtml]) if (!page.includes('../chapters.css') || !page.includes('ROUTE MAP')) throw new Error('chapter page missing shared navigation');
-for (const token of ['--ink','@media(max-width:800px)','@media(max-width:520px)']) if (!chaptersCss.includes(token)) throw new Error(`missing chapter responsive contract ${token}`);
+for (const page of [summaryHtml, modelsHtml, agentsHtml, skillsHtml])
+ if (!page.includes('../chapters.css') || !page.includes('ROUTE MAP'))
+ throw new Error('chapter page missing shared navigation');
+for (const token of ['--ink', '@media(max-width:800px)', '@media(max-width:520px)'])
+ if (!chaptersCss.includes(token)) throw new Error(`missing chapter responsive contract ${token}`);
console.log('chapter route verification passed');
-for (const token of ['The short route','full-guide/','models/','agents/','skills/','rules/','hands-on/starter/','skills-review/']) if (!landingHtml.includes(token)) throw new Error(`landing page missing ${token}`);
-if (landingHtml.includes('app.js')) throw new Error('landing page should remain a fast, static route map');
+for (const token of [
+ 'The short route',
+ 'full-guide/',
+ 'models/',
+ 'agents/',
+ 'skills/',
+ 'rules/',
+ 'hands-on/starter/',
+ 'skills-review/',
+])
+ if (!landingHtml.includes(token)) throw new Error(`landing page missing ${token}`);
+if (landingHtml.includes('app.js'))
+ throw new Error('landing page should remain a fast, static route map');
console.log('landing route verification passed');
-for (const token of ['data-package-file="skill"','data-package-file="references"','data-package-file="scripts"','data-package-file="assets"','id="package-preview"','script src="app.js"']) if (!skillsHtml.includes(token)) throw new Error(`skills anatomy missing ${token}`);
+for (const token of [
+ 'data-package-file="skill"',
+ 'data-package-file="references"',
+ 'data-package-file="scripts"',
+ 'data-package-file="assets"',
+ 'id="package-preview"',
+ 'script src="app.js"',
+])
+ if (!skillsHtml.includes(token)) throw new Error(`skills anatomy missing ${token}`);
const skillsApp = read('skills/app.js');
const skillsCss = read('skills/styles.css');
-for (const token of ['const packageFiles','function renderPackage','addEventListener','renderPackage(\'skill\')']) if (!skillsApp.includes(token)) throw new Error(`skills anatomy interaction missing ${token}`);
-for (const token of ['grid-template-columns:minmax(190px','overflow-wrap:anywhere','@media(max-width:800px)','prefers-reduced-motion']) if (!skillsCss.includes(token)) throw new Error(`skills anatomy responsive contract missing ${token}`);
+for (const token of [
+ 'const packageFiles',
+ 'function renderPackage',
+ 'addEventListener',
+ "renderPackage('skill')",
+])
+ if (!skillsApp.includes(token)) throw new Error(`skills anatomy interaction missing ${token}`);
+for (const token of [
+ 'grid-template-columns:minmax(190px',
+ 'overflow-wrap:anywhere',
+ '@media(max-width:800px)',
+ 'prefers-reduced-motion',
+])
+ if (!skillsCss.includes(token))
+ throw new Error(`skills anatomy responsive contract missing ${token}`);
console.log('skills anatomy verification passed');
console.log('presentation verification passed');
-const legacyName = String.fromCharCode(80,101,100,114,111,32,65,114,97,110,104,97);
+const legacyName = String.fromCharCode(80, 101, 100, 114, 111, 32, 65, 114, 97, 110, 104, 97);
const legacyHandle = legacyName.toLowerCase().replace(' ', '.');
-for (const path of ['submitted-skills/Anonymous Operational Submission/skills/ndo-repro/SKILL.md','submitted-skills/Anonymous Operational Submission/skills/ndo-repro/envs.tsv','submitted-skills/Anonymous Operational Submission/skills/ndo-repro/lib/env.sh','submitted-skills/Anonymous Operational Submission/skills/ndo-repro/ndo-api.sh','submitted-skills/Anonymous Operational Submission/skills/ndo-repro/ndo-ship.sh','submitted-skills/Anonymous Operational Submission/skills/ndo-repro/reference/bom-Dockerfile_local.example','submitted-skills/Anonymous Operational Submission/skills/ndo-repro/reference/dockerfile-local.md','skill-reviews/improved/ndo-repro/SKILL.md']) {
+for (const path of [
+ 'submitted-skills/Anonymous Operational Submission/skills/ndo-repro/SKILL.md',
+ 'submitted-skills/Anonymous Operational Submission/skills/ndo-repro/envs.tsv',
+ 'submitted-skills/Anonymous Operational Submission/skills/ndo-repro/lib/env.sh',
+ 'submitted-skills/Anonymous Operational Submission/skills/ndo-repro/ndo-api.sh',
+ 'submitted-skills/Anonymous Operational Submission/skills/ndo-repro/ndo-ship.sh',
+ 'submitted-skills/Anonymous Operational Submission/skills/ndo-repro/reference/bom-Dockerfile_local.example',
+ 'submitted-skills/Anonymous Operational Submission/skills/ndo-repro/reference/dockerfile-local.md',
+ 'skill-reviews/improved/ndo-repro/SKILL.md',
+]) {
const source = read(path);
- if (new RegExp(`${legacyName}|${legacyHandle}|https?:\\/\\/|git\\.netcracker\\.com|artifactorycn|managed\\.netcracker\\.cloud`, 'i').test(source)) throw new Error(`operational submission privacy leak in ${path}`);
+ if (
+ new RegExp(
+ `${legacyName}|${legacyHandle}|https?:\\/\\/|git\\.netcracker\\.com|artifactorycn|managed\\.netcracker\\.cloud`,
+ 'i',
+ ).test(source)
+ )
+ throw new Error(`operational submission privacy leak in ${path}`);
}
-for (const source of [reviewCatalog, reviewFiles, reviewJs]) if (source.includes(legacyName) || source.includes(legacyName.replace(' ', '%20'))) throw new Error('operational submission identity remains in review desk source');
-if (!reviewFiles.includes('Anonymous%20Operational%20Submission') || !reviewJs.includes("entry.id === 'ndo-repro'")) throw new Error('operational submission redaction contract missing');
+for (const source of [reviewCatalog, reviewFiles, reviewJs])
+ if (source.includes(legacyName) || source.includes(legacyName.replace(' ', '%20')))
+ throw new Error('operational submission identity remains in review desk source');
+if (
+ !reviewFiles.includes('Anonymous%20Operational%20Submission') ||
+ !reviewJs.includes("entry.id === 'ndo-repro'")
+)
+ throw new Error('operational submission redaction contract missing');
console.log('review privacy verification passed');
-for (const token of ['currentContent','unchangedDraft','state.preview = button.dataset.preview','state.file = available.find','loadSelectedFile']) if (!reviewJs.includes(token)) throw new Error(`review file-mode contract missing ${token}`);
-if (reviewJs.includes("state.preview = 'original'; syncUrl(); renderDetail(); loadSelectedFile();")) throw new Error('file selection still resets improved mode');
+for (const token of [
+ 'currentContent',
+ 'unchangedDraft',
+ 'state.preview = button.dataset.preview',
+ 'state.file = available.find',
+ 'loadSelectedFile',
+])
+ if (!reviewJs.includes(token)) throw new Error(`review file-mode contract missing ${token}`);
+if (reviewJs.includes("state.preview = 'original'; syncUrl(); renderDetail(); loadSelectedFile();"))
+ throw new Error('file selection still resets improved mode');
console.log('review file-mode verification passed');
-for (const token of ['const changeRows','function lensMarkup','data-lens','CHANGE LENS','What changed — and why.']) if (!reviewJs.includes(token)) throw new Error(`review change-lens contract missing ${token}`);
-for (const token of ['.change-lens','.change-rows','.skill-diff','.diff-lines','@media(max-width:620px)','prefers-reduced-motion']) if (!reviewLensCss.includes(token)) throw new Error(`review change-lens CSS missing ${token}`);
+for (const token of [
+ 'const changeRows',
+ 'function lensMarkup',
+ 'data-lens',
+ 'CHANGE LENS',
+ 'What changed — and why.',
+])
+ if (!reviewJs.includes(token)) throw new Error(`review change-lens contract missing ${token}`);
+for (const token of [
+ '.change-lens',
+ '.change-rows',
+ '.skill-diff',
+ '.diff-lines',
+ '@media(max-width:620px)',
+ 'prefers-reduced-motion',
+])
+ if (!reviewLensCss.includes(token)) throw new Error(`review change-lens CSS missing ${token}`);
console.log('review change-lens verification passed');
-for (const token of ['.markdown-preview','max-height:540px','.markdown-table-wrap','.markdown-frontmatter','.markdown-toc','.preview-title','.preview-markdown','grid-template-columns:minmax(0,1fr)','height:120px','-webkit-line-clamp:2']) if (!read('skills-review/styles.css').includes(token)) throw new Error(`review markdown preview contract missing ${token}`);
+for (const token of [
+ '.markdown-preview',
+ 'max-height:540px',
+ '.markdown-table-wrap',
+ '.markdown-frontmatter',
+ '.markdown-toc',
+ '.preview-title',
+ '.preview-markdown',
+ 'grid-template-columns:minmax(0,1fr)',
+ 'height:120px',
+ '-webkit-line-clamp:2',
+])
+ if (!read('skills-review/styles.css').includes(token))
+ throw new Error(`review markdown preview contract missing ${token}`);
console.log('review markdown preview verification passed');
-for (const token of ["from './vote.js'","renderVoteWidget($('#vote-widget'"]) if (!reviewJs.includes(token)) throw new Error(`review vote widget wiring missing ${token}`);
-for (const token of ['id="vote-widget"','function renderVoteWidget','X-Voter-Id','/api/votes','Voting is offline']) if (!reviewVoteJs.includes(token) && !reviewJs.includes(token)) throw new Error(`review vote widget contract missing ${token}`);
-for (const token of ['.vote-widget','.vote-buttons','[aria-pressed="true"]']) if (!read('skills-review/styles.css').includes(token)) throw new Error(`review vote widget CSS missing ${token}`);
-if (!voteService.includes('X-Forwarded-For') || !voteService.includes('one active vote per skill') && !voteService.includes('at most one active vote')) throw new Error('vote-service missing IP-based one-vote-per-source contract');
+for (const token of ["from './vote.js'", "renderVoteWidget($('#vote-widget'"])
+ if (!reviewJs.includes(token)) throw new Error(`review vote widget wiring missing ${token}`);
+for (const token of [
+ 'id="vote-widget"',
+ 'function renderVoteWidget',
+ 'X-Voter-Id',
+ '/api/votes',
+ 'Voting is offline',
+])
+ if (!reviewVoteJs.includes(token) && !reviewJs.includes(token))
+ throw new Error(`review vote widget contract missing ${token}`);
+for (const token of ['.vote-widget', '.vote-buttons', '[aria-pressed="true"]'])
+ if (!read('skills-review/styles.css').includes(token))
+ throw new Error(`review vote widget CSS missing ${token}`);
+if (
+ !voteService.includes('X-Forwarded-For') ||
+ (!voteService.includes('one active vote per skill') &&
+ !voteService.includes('at most one active vote'))
+)
+ throw new Error('vote-service missing IP-based one-vote-per-source contract');
console.log('review vote widget verification passed');
diff --git a/src/components/blocks/RouteTable.astro b/src/components/blocks/RouteTable.astro
index 6c9d244..958b165 100644
--- a/src/components/blocks/RouteTable.astro
+++ b/src/components/blocks/RouteTable.astro
@@ -21,16 +21,64 @@ interface Route {
interface Props {
routes: Route[];
initial?: string;
+ headWork?: string | Localized;
+ headProfile?: string | Localized;
+ headPromptShape?: string | Localized;
}
-const { routes, initial = routes[0]?.id ?? 'plan' } = Astro.props;
+const {
+ routes,
+ initial = routes[0]?.id ?? 'plan',
+ headWork = 'Work',
+ headProfile = 'Profile',
+ headPromptShape = 'Prompt shape',
+} = Astro.props;
---
03bounded workers in paralleliterations with evidenceiterações com evidências
+ >
Read this as a route map, not a prompt recipe.{workers.ui.en[2]}
- The orchestrator preserves intent, writes small contracts, and gathers results that can be
- verified. It does not need to type every line.
+ The orchestrator preserves intent, writes small contracts, and gathers results that can
+ be verified. It does not need to type every line.O orquestrador preserva a intenção, escreve pequenos contratos e reúne resultados
+ verificáveis. Ele não precisa digitar cada linha.
@@ -403,15 +411,21 @@ const base = import.meta.env.BASE_URL;
The subagent loopO ciclo de subagentes
+ hidden>O ciclo de subagentes
Click a phase. See the handoff.Clique em uma fase. Veja a passagem.
- Delegation means moving one bounded task into a smaller context—not giving away
- responsibility.
+ Delegation means moving one bounded task into a smaller context—not giving away
+ responsibility.Delegar é mover uma tarefa delimitada para um contexto menor — não abrir mão da
+ responsabilidade.
Git worktreesGit worktrees
+ hidden>Git worktrees
One branch per hand.Uma branch por mão.
+ hidden>Uma branch por mão.
- A worktree is another directory linked to the same repository. Each agent gets its own
- checkout and index; history remains shared.
+ A worktree is another directory linked to the same repository. Each agent gets its own
+ checkout and index; history remains shared.Um worktree é outro diretório ligado ao mesmo repositório. Cada agente recebe seu
+ próprio checkout e índice; o histórico continua compartilhado.
Select a node to inspect its checkout, owner, and next action. 4 checkouts
-
+
{labels.owner.en}{trees.main.owner.en}
CHECKOUT{trees.main.path}
{trees.main.note.en}
{trees.main.command}
@@ -539,7 +560,8 @@ const base = import.meta.env.BASE_URL;
Model routingRoteamento de modelos
+ hidden>Roteamento de modelos
Do not pay for reasoning where you need rhythm.
Choose a job to see why the model profile changes.Escolha um trabalho para entender por que o perfil do modelo muda.
+ >Escolha um trabalho para entender por que o perfil do modelo muda.
Two separate knobsDois controles separados
+ hidden>Dois controles separados
Choose the engine. Then choose the gear.Escolha o motor. Depois escolha a marcha.
+ >Escolha o motor. Depois escolha a marcha.
@@ -625,7 +653,8 @@ const base = import.meta.env.BASE_URL;
>Um modelo mais forte muda o teto de capacidade. Mais esforço de raciocínio dá mais
espaço para esse modelo trabalhar. Comece com a combinação mais leve que passa seus
- checks e mova um controle por vez.
+ checks e mova um controle por vez.
@@ -703,11 +732,13 @@ const base = import.meta.env.BASE_URL;
SkillsSkills
+ >Skills
Write the right way once.Escreva do jeito certo uma vez.
+ hidden>Escreva do jeito certo uma vez.
A skill is a reusable procedure. It can carry instructions, references, scripts, and
@@ -717,9 +748,23 @@ const base = import.meta.env.BASE_URL;
>Uma skill é um procedimento reutilizável. Ela pode carregar instruções, referências,
scripts e assets. Não é memória mágica e não substitui critérios de aceitação.
-
+
+ 01 / trigger clearly01 / defina o gatilho
+ 02 / load detail on demand02 / carregue detalhes sob demanda
+ 03 / return evidence03 / devolva evidências
+
escolha o comportamento antes do modelo
+
+
+
+ The field kitO kit de campo
+
+
+ Different jobs. Different instincts.Trabalhos diferentes. Instintos diferentes.
+
+
+
+ A skill changes how an agent approaches work. Some shape communication. Others enforce
+ research, debugging, review, or completion discipline. Select one to inspect its
+ operating rule and verified source.Uma skill muda como o agente aborda o trabalho. Algumas moldam a comunicação. Outras
+ impõem pesquisa, diagnóstico, revisão ou disciplina de conclusão. Selecione uma para
+ inspecionar sua regra operacional.
+
This guide turns AI work into a shape: frame the problem, choose the model and agent, isolate changes, teach repeatable decisions, and verify the result.
+ This guide turns AI work into a shape: frame the problem, choose the model and agent,
+ isolate changes, teach repeatable decisions, and verify the result.
+
+ Open desk →
+
+
+
+
+
+
+
From 208ec9447b64670931c73514b59635555ffd9a5f Mon Sep 17 00:00:00 2001
From: Marcos Paulo
Date: Sat, 5 Sep 2026 22:34:05 +0000
Subject: [PATCH 4/5] revert: drop the out-of-scope reformat from the
localization commit
The localization pass ran prettier across the repository rather than the
files it owns. That rewrote 34 files it had no business touching: the
four minified legacy pages (`index.html`, `agents/`, `models/`,
`summary/`), `scripts/verify.mjs`, `GATES.md`, `docs/references/`, and
most of `.agents/`.
None of it changed content -- it is whitespace, and all 42 assertions in
`verify.mjs` survived intact. It is still wrong here. The legacy HTML is
minified deliberately, `verify.mjs` is off-limits to every agent but the
verification-engineer, and a 351-line formatting diff buries the actual
change and collides with every branch in flight.
Keeps only what task 15d owns: `src/pages/full-guide.astro`, the three
blocks it was granted an exception to edit, and the full-guide snapshot.
Co-Authored-By: Claude Opus 5
---
agents/index.html | 89 +---------------------------------------
index.html | 100 +++++++++++----------------------------------
models/index.html | 88 +--------------------------------------
summary/index.html | 71 +-------------------------------
4 files changed, 27 insertions(+), 321 deletions(-)
diff --git a/agents/index.html b/agents/index.html
index 3b781e1..ce8da42 100644
--- a/agents/index.html
+++ b/agents/index.html
@@ -1,88 +1 @@
-
-
-
-
-
- AI For Dummies — Agents and trees
-
-
-
-
-
- ← ROUTE MAP02 / AGENTS & TREESfield guide ↗
-
-
-
Subagent workflow
-
One branch per hand.
-
- Agents work when roles, files, and evidence are bounded. A worktree gives each worker its
- own checkout while the orchestrator protects intent.
-
-
-
-
-
The tree
-
Split at the seam.
-
-
- MAIN / ORCHESTRATOR├── agent/ui → components + visual states · ├── agent/tests → acceptance + regressions
- · └── agent/docs → guide + examples · merge after each leaf returns a diff and
- evidence
-
-
-
-
- FRAME
-
Orchestrator
-
Owns scope, task graph, boundaries, and integration.
- A model has a capability ceiling. Effort controls how much room it gets to reason. Route
- by uncertainty and verification cost.
-
-
-
-
- LOW
-
Bounded rhythm
-
Lookup, small edits, formatting, and transformations with clear checks.
-
-
- MEDIUM
-
Default work
-
Normal implementation where the contract is clear but context matters.
-
-
- HIGH
-
Ambiguity
-
Planning, architecture, security judgment, and hard failures.
-
-
-
-
-
Two knobs
-
Capability × effort
-
-
- ROUTING RULEstrong model + high effort → frame ambiguity · light model + low effort → bounded
- execution · raise one knob at a time → compare evidence
-
-
-
-
-
Sequence
-
Spend judgment where it compounds.
-
-
-
- 01
-
- PlanStrong model: scope, risks, acceptance, and worktree split.
-
-
-
- 02
-
- BuildFocused worker: smallest context and lightest model that can pass.
-
-
-
- 03
-
- ReviewIndependent pass when missed issues cost more than the call.
-
A model has a capability ceiling. Effort controls how much room it gets to reason. Route by uncertainty and verification cost.
LOW
Bounded rhythm
Lookup, small edits, formatting, and transformations with clear checks.
MEDIUM
Default work
Normal implementation where the contract is clear but context matters.
HIGH
Ambiguity
Planning, architecture, security judgment, and hard failures.
Two knobs
Capability × effort
ROUTING RULEstrong model + high effort → frame ambiguity · light model + low effort → bounded execution · raise one knob at a time → compare evidence
Sequence
Spend judgment where it compounds.
01
PlanStrong model: scope, risks, acceptance, and worktree split.
02
BuildFocused worker: smallest context and lightest model that can pass.
03
ReviewIndependent pass when missed issues cost more than the call.
diff --git a/summary/index.html b/summary/index.html
index 25fb6b0..ed706a8 100644
--- a/summary/index.html
+++ b/summary/index.html
@@ -1,70 +1 @@
-
-
-
-
-
- AI For Dummies — Route map
-
-
-
-
-
- ← AI FOR DUMMIES00 / ROUTE MAPreview desk ↗
-
-
-
Start here
-
Ship the system.
-
- This guide turns AI work into a shape: frame the problem, choose the model and agent,
- isolate changes, teach repeatable decisions, and verify the result.
-
This guide turns AI work into a shape: frame the problem, choose the model and agent, isolate changes, teach repeatable decisions, and verify the result.
Open desk →
From 83c956c2b64ba151c7cec6f58eea57dea481cc5c Mon Sep 17 00:00:00 2001
From: Marcos Paulo
Date: Sat, 5 Sep 2026 22:36:44 +0000
Subject: [PATCH 5/5] fix: give the common-skill buttons their own label and
tagline
The seven selector buttons were rendering `kind` and `use`, which belong
to the detail panel. ponytail's button read "SIMPLIFICATION INSTINCT" and
a full paragraph of prose where today's page reads "SIMPLIFY" and
"minimum code that holds". English was wrong, not just Portuguese
missing, on all seven.
Those two lines are not in `interactiveCopy`, which is why task 05b had
nothing to migrate them from: the English lives in the
`full-guide/index.html` markup and the Portuguese in `translations.pt`.
Adds `label` and `tagline` to the `commonSkills` schema and to all seven
entries, both taken verbatim from those two sources, and points the
buttons at them. The panel keeps reading `kind` and `use`.
This closes the last 13 of the 102 `translations.pt` entries. Coverage in
`dist/full-guide/index.html` is now 102 of 102.
Co-Authored-By: Claude Opus 5
---
src/content/commonSkills/caveman.json | 4 +++-
src/content/commonSkills/debug.json | 4 +++-
src/content/commonSkills/ponytail.json | 4 +++-
src/content/commonSkills/research.json | 4 +++-
src/content/commonSkills/review.json | 4 +++-
src/content/commonSkills/tokens.json | 4 +++-
src/content/commonSkills/unlazy.json | 4 +++-
src/content/config.ts | 10 ++++++++++
src/pages/full-guide.astro | 10 ++++++----
9 files changed, 37 insertions(+), 11 deletions(-)
diff --git a/src/content/commonSkills/caveman.json b/src/content/commonSkills/caveman.json
index 9b3a64b..484c377 100644
--- a/src/content/commonSkills/caveman.json
+++ b/src/content/commonSkills/caveman.json
@@ -13,5 +13,7 @@
"en": "Drop the style for security warnings, irreversible actions, and sequences where terse wording can be misread.",
"pt": "Abandone o estilo em alertas de segurança, ações irreversíveis e sequências onde concisão pode causar erro."
},
- "source": "https://github.com/JuliusBrussee/caveman/blob/3b74643f4d910f496babd4e634b1ba7168816f14/skills/caveman/SKILL.md"
+ "source": "https://github.com/JuliusBrussee/caveman/blob/3b74643f4d910f496babd4e634b1ba7168816f14/skills/caveman/SKILL.md",
+ "label": { "en": "COMMUNICATE", "pt": "COMUNICAR" },
+ "tagline": { "en": "signal without filler", "pt": "sinal sem excesso" }
}
diff --git a/src/content/commonSkills/debug.json b/src/content/commonSkills/debug.json
index 7ba1232..191e610 100644
--- a/src/content/commonSkills/debug.json
+++ b/src/content/commonSkills/debug.json
@@ -19,5 +19,7 @@
"en": "Do not jump from error message straight to a patch.",
"pt": "Não pule da mensagem de erro direto para um patch."
},
- "source": "https://github.com/mattpocock/skills/blob/6654f6b60cd9d5be8b54c6fafe44346dabeb3b76/skills/engineering/diagnosing-bugs/SKILL.md"
+ "source": "https://github.com/mattpocock/skills/blob/6654f6b60cd9d5be8b54c6fafe44346dabeb3b76/skills/engineering/diagnosing-bugs/SKILL.md",
+ "label": { "en": "DIAGNOSE", "pt": "DIAGNOSTICAR" },
+ "tagline": { "en": "tight feedback loop", "pt": "ciclo curto de feedback" }
}
diff --git a/src/content/commonSkills/ponytail.json b/src/content/commonSkills/ponytail.json
index 6d90fa1..cdf7a31 100644
--- a/src/content/commonSkills/ponytail.json
+++ b/src/content/commonSkills/ponytail.json
@@ -19,5 +19,7 @@
"en": "Never simplify away security, accessibility, validation, or real edge cases.",
"pt": "Nunca simplifique segurança, acessibilidade, validação ou casos extremos reais."
},
- "source": "https://github.com/ilindaniel/ponytail-lite/blob/e7b42dc2d384a702240dea4d52a7bf5530b821b6/AGENTS.md"
+ "source": "https://github.com/ilindaniel/ponytail-lite/blob/e7b42dc2d384a702240dea4d52a7bf5530b821b6/AGENTS.md",
+ "label": { "en": "SIMPLIFY", "pt": "SIMPLIFICAR" },
+ "tagline": { "en": "minimum code that holds", "pt": "código mínimo que funciona" }
}
diff --git a/src/content/commonSkills/research.json b/src/content/commonSkills/research.json
index bf06245..086d0d4 100644
--- a/src/content/commonSkills/research.json
+++ b/src/content/commonSkills/research.json
@@ -16,5 +16,7 @@
"en": "Practitioner articles add context; they do not override official behavior.",
"pt": "Artigos de praticantes dão contexto; não substituem comportamento oficial."
},
- "source": "https://github.com/mattpocock/skills/blob/6654f6b60cd9d5be8b54c6fafe44346dabeb3b76/skills/engineering/research/SKILL.md"
+ "source": "https://github.com/mattpocock/skills/blob/6654f6b60cd9d5be8b54c6fafe44346dabeb3b76/skills/engineering/research/SKILL.md",
+ "label": { "en": "INVESTIGATE", "pt": "INVESTIGAR" },
+ "tagline": { "en": "primary sources first", "pt": "fontes primárias primeiro" }
}
diff --git a/src/content/commonSkills/review.json b/src/content/commonSkills/review.json
index 5f930ae..8c362b9 100644
--- a/src/content/commonSkills/review.json
+++ b/src/content/commonSkills/review.json
@@ -19,5 +19,7 @@
"en": "Pin the comparison point and source specification before reviewing.",
"pt": "Fixe o ponto de comparação e a especificação antes de revisar."
},
- "source": "https://github.com/mattpocock/skills/blob/6654f6b60cd9d5be8b54c6fafe44346dabeb3b76/skills/engineering/code-review/SKILL.md"
+ "source": "https://github.com/mattpocock/skills/blob/6654f6b60cd9d5be8b54c6fafe44346dabeb3b76/skills/engineering/code-review/SKILL.md",
+ "label": { "en": "REVIEW", "pt": "REVISAR" },
+ "tagline": { "en": "standards × spec", "pt": "padrões × especificação" }
}
diff --git a/src/content/commonSkills/tokens.json b/src/content/commonSkills/tokens.json
index b88585b..2fc5878 100644
--- a/src/content/commonSkills/tokens.json
+++ b/src/content/commonSkills/tokens.json
@@ -19,5 +19,7 @@
"en": "Read raw output when exact wording or full diffs matter.",
"pt": "Leia saída bruta quando texto exato ou diffs completos importarem."
},
- "source": "https://github.com/aetox-skills/token-saver/blob/8f21188bb043fad411f47e2e57f0365a83c13da7/SKILL.md"
+ "source": "https://github.com/aetox-skills/token-saver/blob/8f21188bb043fad411f47e2e57f0365a83c13da7/SKILL.md",
+ "label": { "en": "ECONOMIZE", "pt": "ECONOMIZAR" },
+ "tagline": { "en": "compress noisy output", "pt": "comprima saídas ruidosas" }
}
diff --git a/src/content/commonSkills/unlazy.json b/src/content/commonSkills/unlazy.json
index fb3f02d..3a0c275 100644
--- a/src/content/commonSkills/unlazy.json
+++ b/src/content/commonSkills/unlazy.json
@@ -19,5 +19,7 @@
"en": "Too heavy for trivial edits or factual answers.",
"pt": "Pesado demais para edições triviais ou respostas factuais."
},
- "source": "https://github.com/Leonxlnx/unlazy/blob/473d4b80421c36d733042434cd4b938f81a19ef1/SKILL.md"
+ "source": "https://github.com/Leonxlnx/unlazy/blob/473d4b80421c36d733042434cd4b938f81a19ef1/SKILL.md",
+ "label": { "en": "COMPLETE", "pt": "CONCLUIR" },
+ "tagline": { "en": "gates and evidence", "pt": "gates e evidências" }
}
diff --git a/src/content/config.ts b/src/content/config.ts
index 7196603..81d6aba 100644
--- a/src/content/config.ts
+++ b/src/content/config.ts
@@ -235,12 +235,22 @@ const skillWorkflow = defineCollection({
// render time; here it is embedded to match the GuideSelectorData
// contract. If the URL changes, both this entry and the matching
// `skillSources/.json` must be updated.
+//
+// `label` and `tagline` are the selector *button*'s two lines and are
+// distinct from `kind` and `use`, which belong to the detail panel:
+// ponytail's button reads "SIMPLIFY" / "minimum code that holds" while its
+// panel reads "SIMPLIFICATION INSTINCT" and a paragraph of prose. They are
+// not in `interactiveCopy` — the English lives in the `full-guide/index.html`
+// markup and the Portuguese in `translations.pt` — so task 05b had nothing
+// to migrate them from and the page rendered `kind`/`use` on the buttons.
const commonSkills = defineCollection({
type: 'data',
schema: z.object({
id: z.string(),
number: z.string(),
kind: localized,
+ label: localized,
+ tagline: localized,
title: z.string(),
rule: localized,
use: localized,
diff --git a/src/pages/full-guide.astro b/src/pages/full-guide.astro
index c559161..e133917 100644
--- a/src/pages/full-guide.astro
+++ b/src/pages/full-guide.astro
@@ -874,17 +874,19 @@ const base = import.meta.env.BASE_URL;
aria-selected={skill.id === 'ponytail'}
>
<>
+ {/* The button's two lines are `label` / `tagline`, not the
+ panel's `kind` / `use`. See src/content/config.ts. */}
- {skill.kind.en}
+ {skill.label.en}
- {skill.kind.pt}
+ {skill.label.pt}
{skill.title}
- {skill.use.en}
+ {skill.tagline.en}
- {skill.use.pt}
+ {skill.tagline.pt}
>