From 9557cae6b608ea67bdcc4552dc47e109b340d390 Mon Sep 17 00:00:00 2001 From: Marcos Paulo Date: Wed, 2 Sep 2026 00:33:49 +0000 Subject: [PATCH] feat: add AI For Dummies presentation --- GATES.md | 23 +++++++++++++++++++++++ app.js | 9 +++++++++ docs/references/README.md | 34 ++++++++++++++++++++++++++++++++++ index.html | 24 ++++++++++++++++++++++++ package.json | 5 +++++ scripts/verify.mjs | 12 ++++++++++++ styles.css | 1 + 7 files changed, 108 insertions(+) create mode 100644 GATES.md create mode 100644 app.js create mode 100644 docs/references/README.md create mode 100644 index.html create mode 100644 package.json create mode 100644 scripts/verify.mjs create mode 100644 styles.css diff --git a/GATES.md b/GATES.md new file mode 100644 index 0000000..dd79756 --- /dev/null +++ b/GATES.md @@ -0,0 +1,23 @@ +# Gates: AI For Dummies standalone presentation + +OWNS: index.html, styles.css, app.js, docs/references/**, scripts/** + +Scope: Deliver a standalone presentation teaching skills, model routing, subagents, and worktrees. + +- [ ] G1: bundled research references and required lesson topics exist + CHECK: node scripts/verify.mjs + EXPECT: content verification passed + EVIDENCE: pending + +- [ ] G2: the standalone presentation has working phase interaction + CHECK: node scripts/verify.mjs + EXPECT: interaction verification passed + EVIDENCE: pending + +- [ ] G3: the document is valid and has no external runtime dependency + CHECK: node scripts/verify.mjs + EXPECT: standalone verification passed + EVIDENCE: pending + +- [ ] G4: responsive and accessibility presentation review + EVIDENCE: pending diff --git a/app.js b/app.js new file mode 100644 index 0000000..a18e6c1 --- /dev/null +++ b/app.js @@ -0,0 +1,9 @@ +const phases = { + plan: { model: 'OPUS / REASONING', title: 'Turn ambiguity into work', copy: 'Inspect the repository, choose the architecture, split the request, and write acceptance criteria.', code: 'plan → decompose → define acceptance' }, + build: { model: 'SONNET, HAIKU, OR EQUIVALENT', title: 'Execute one bounded slice', copy: 'Give each worker enough context, one responsibility, and its own worktree. Less context; less collision.', code: 'brief + worktree → implement → test' }, + review: { model: 'STRONG MODEL OR HUMAN', title: 'Reconnect result to intent', copy: 'Check the diff against the original brief, run the checks, then merge, request changes, or discard.', code: 'diff + checks → review → merge / iterate' } +}; +const panel = document.querySelector('#phase-panel'); +const render = (id) => { const phase = phases[id]; panel.innerHTML = `
${phase.model}context: isolated

${phase.title}

${phase.copy}

${phase.code}`; document.querySelectorAll('[data-phase]').forEach((button) => { const active = button.dataset.phase === id; button.classList.toggle('active', active); button.setAttribute('aria-selected', String(active)); }); }; +document.querySelectorAll('[data-phase]').forEach((button) => button.addEventListener('click', () => render(button.dataset.phase))); +render('plan'); diff --git a/docs/references/README.md b/docs/references/README.md new file mode 100644 index 0000000..1678220 --- /dev/null +++ b/docs/references/README.md @@ -0,0 +1,34 @@ +# AI For Dummies — reference bundle + +Research captured 2026-09-02. Official documentation is primary; practitioner +articles are context, not authority. + +## Primary documentation + +- 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. + +## Research and articles + +- 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 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. diff --git a/index.html b/index.html new file mode 100644 index 0000000..82b2fa6 --- /dev/null +++ b/index.html @@ -0,0 +1,24 @@ + + + + + + + AI For Dummies — Field Guide + + + +
+
A field guideAI ENGINEERING 01 / 2026
+

A presentation for humans who ship

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.

+
RULE ZEROStrong model for ambiguity.
Light model for bounded work.
+
ORCHESTRATOR

Decides what
needs to happen.

Opus / reasoning
UIComponent and visual statesagent/ui
TESTAcceptance casesagent/tests
DOCSGuide and examplesagent/docs

The orchestrator preserves intent, writes small contracts, and gathers results that can be verified. It does not need to type every line.

+

The subagent loop

Click a phase.
See the handoff.

Delegation means moving one bounded task into a smaller context—not giving away responsibility.

+
PackageContainsWhy it matters
Briefgoal, files, boundariesstops the worker inventing the problem
Worktreebranch and isolated checkoutparallel edits do not collide
Checkstests, build, criteriaturns “looks good” into evidence
Diffsmall, reviewable changeintegration and discard stay cheap
+

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.

git worktree add ../task-ui -b agent/ui · git worktree add ../task-tests -b agent/tests · git worktree list
REPOSITORYmainshared history
UIagent/uiisolated checkout
TESTagent/testsisolated checkout
DOCSagent/docsisolated checkout
+

Model routing

Do not pay for
reasoning where
you need rhythm.

WorkProfilePrompt shape
Planstrong / broadWhat changes? What can break?
Buildfast / focusedImplement this slice. Run these checks.
Exploreread-only / lightFind where this contract is used.
ReviewindependentDoes the diff satisfy the brief?
+

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.

SKILL PACKAGE
SKILL.mdprocedure and limits
references/facts to consult
scripts/repeatable checks
assets/templates and examples
name: review-ui · check focus, mobile, reduced motion · run verification · return evidence
+ +

Based on Claude Code, Codex, Git, and agent-workflow research. Open the reference bundle →

+
+ diff --git a/package.json b/package.json new file mode 100644 index 0000000..dc21720 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "name": "ai-for-dummies", + "private": true, + "scripts": { "verify": "node scripts/verify.mjs", "serve": "python3 -m http.server 4173" } +} diff --git a/scripts/verify.mjs b/scripts/verify.mjs new file mode 100644 index 0000000..0068b62 --- /dev/null +++ b/scripts/verify.mjs @@ -0,0 +1,12 @@ +import { readFileSync } from 'node:fs'; +const read = (path) => readFileSync(new URL(`../${path}`, import.meta.url), 'utf8'); +const html = read('index.html'); +const js = read('app.js'); +const refs = read('docs/references/README.md'); +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"','docs/references/','role="tablist"','span,.rule span,.callout span,.sources{font:500 10px 'DM Mono',monospace;letter-spacing:.1em;text-transform:uppercase}.edition i{display:inline-block;width:6px;height:6px;margin:0 8px;border-radius:50%;background:var(--accent)}.hero{max-width:780px;padding:clamp(75px,12vh,145px) 0 85px}.eyebrow,.section-label,.thesis span{color:var(--accent)}h1{margin:16px 0 24px;font-size:clamp(56px,9vw,126px);line-height:.86;letter-spacing:-.08em}h1 em,h2 em{color:var(--blue);font-family:Georgia,serif;font-weight:400}.lede,.copy>p:last-child,.skills>div:first-child>p:last-child,.worktrees>div:first-child>p,.caption{max-width:570px;color:var(--muted);line-height:1.65}.thesis{display:grid;grid-template-columns:1fr 1fr;gap:30px;align-items:center;margin-bottom:110px;padding:28px;background:var(--gold)}.thesis div:first-child{display:grid;gap:16px}.thesis strong{font-size:clamp(24px,4vw,46px);line-height:1.05;letter-spacing:-.04em}.signal{display:flex;align-items:center;gap:10px}.signal i{width:28px;height:28px;border:1px solid var(--ink);background:var(--paper)}.signal i:nth-of-type(3){background:var(--blue)}.signal b{font:500 10px 'DM Mono',monospace}.fleet{margin-bottom:120px}.section-label{padding-bottom:14px;border-bottom:1px solid var(--line)}.section-label span:last-child{color:var(--muted)}.fleet-grid{display:grid;grid-template-columns:.8fr 50px 1.5fr;gap:24px;margin-top:30px;color:var(--paper);background:var(--deep)}.captain{display:grid;align-content:center;gap:16px;padding:32px}.captain span{color:var(--gold)}h2{margin:14px 0 20px;font-size:clamp(36px,5vw,65px);line-height:.98;letter-spacing:-.06em}.captain h2{font-size:clamp(24px,3vw,38px)}.captain code,.workers code{color:var(--gold);font:11px 'DM Mono',monospace}.arrow{display:grid;place-items:center;color:var(--gold);font-size:30px}.workers{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:#41596b}.workers article{display:grid;align-content:space-between;gap:20px;min-height:180px;padding:22px;background:var(--ink)}.workers span{color:#9eabb4}.workers strong{font-size:16px;line-height:1.2}.caption{margin:22px 0 0 auto}.workflow,.routing,.skills{display:grid;grid-template-columns:.7fr 1fr 1.3fr;gap:40px;align-items:start;margin-bottom:130px;padding-top:80px;border-top:1px solid var(--line)}.phase-tabs{display:grid;gap:8px}.phase-tabs button{display:grid;grid-template-columns:42px 1fr;gap:10px;padding:15px;border:1px solid var(--line);color:var(--ink);background:transparent;font:500 10px 'DM Mono',monospace;letter-spacing:.07em;text-align:left;cursor:pointer}.phase-tabs button b{color:var(--accent)}.phase-tabs button.active{color:var(--paper);border-color:var(--ink);background:var(--ink)}.phase-panel{min-height:260px;padding:30px;color:var(--paper);background:var(--accent)}.phase-meta{display:flex;justify-content:space-between;gap:15px;color:var(--gold);font:500 10px 'DM Mono',monospace}.phase-meta small{color:var(--paper);opacity:.7}.phase-panel h3{margin:44px 0 12px;font-size:clamp(24px,3vw,38px);line-height:1.05}.phase-panel p{line-height:1.6;opacity:.82}.phase-panel code{display:block;margin-top:26px;color:var(--gold);font:11px 'DM Mono',monospace}.handoff{margin-bottom:130px}.handoff table{width:100%;margin-top:30px;border-collapse:collapse;text-align:left}.handoff th,.handoff td{padding:17px 14px;border-bottom:1px solid var(--line)}.handoff thead{color:var(--paper);background:var(--ink);font:500 10px 'DM Mono',monospace;letter-spacing:.08em;text-transform:uppercase}.handoff tbody th{color:var(--blue);font:600 14px 'DM Mono',monospace}.handoff td{color:var(--muted);font-size:13px}.worktrees{display:grid;grid-template-columns:.8fr 1.2fr;gap:50px;align-items:center;margin-bottom:130px;padding:45px;color:var(--paper);background:var(--deep)}.worktrees .eyebrow{color:var(--gold)}.worktrees h2{color:var(--paper)}.worktrees h2 em{color:var(--gold)}.worktrees>div:first-child>p{color:#b0bac1}.worktrees pre{margin:32px 0 0;padding:20px;overflow:auto;color:var(--gold);background:var(--ink)}pre code{font:12px/1.75 'DM Mono',monospace}.map{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:14px;padding-top:90px}.repo{position:absolute;top:0;left:50%;width:180px;padding:17px;transform:translateX(-50%);color:var(--ink);background:var(--gold)}.map>div:not(.repo){min-height:135px;padding:20px;border:1px solid #41596b;background:var(--ink)}.repo span,.map>div:not(.repo) span{display:block;margin-bottom:12px;color:var(--accent);font:500 9px 'DM Mono',monospace}.repo strong,.map>div:not(.repo) strong{display:block;font:14px 'DM Mono',monospace}.repo small,.map>div:not(.repo) small{display:block;margin-top:12px;color:#9eabb4;font-size:11px}.routing{grid-template-columns:.8fr 1.2fr}.route-table{border-top:1px solid var(--line);border-left:1px solid var(--line)}.route-table>div{display:grid;grid-template-columns:.8fr .9fr 1.4fr}.route-table .head{color:var(--paper);background:var(--ink);font:500 10px 'DM Mono',monospace;letter-spacing:.08em;text-transform:uppercase}.route-table>div>*{padding:15px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.route-table strong{font-size:14px}.route-table b{color:var(--blue);letter-spacing:0;text-transform:none}.route-table small{color:var(--muted);font-size:12px}.skills{grid-template-columns:.8fr 1fr;margin-bottom:90px}.skill-package{display:grid;align-content:start;color:var(--paper);background:var(--blue)}.skill-package>span{padding:20px;color:var(--gold);border-bottom:1px solid #ffffff40}.skill-package>div{display:grid;grid-template-columns:1fr 1fr;gap:15px;padding:17px 20px;border-bottom:1px solid #ffffff40}.skill-package code{font:12px 'DM Mono',monospace}.skill-package small{opacity:.7}.skills>pre{grid-column:2;margin:0;padding:28px;overflow:auto;color:#d8dee2;background:var(--ink)}.rule{display:grid;grid-template-columns:150px 1fr;gap:30px;margin-top:55px;padding-top:22px;border-top:4px solid var(--gold)}.rule strong{max-width:850px;font-size:clamp(24px,3.3vw,42px);line-height:1.12}.callout{display:grid;grid-template-columns:150px 1fr;gap:30px;margin-top:70px;padding:27px;background:var(--gold)}.callout strong{max-width:850px;font-size:clamp(22px,3vw,36px);line-height:1.1}.sources{margin-top:90px;color:var(--muted)}.sources p{color:var(--muted);font:13px/1.6 Manrope,Arial,sans-serif;letter-spacing:0;text-transform:none}.sources a{color:var(--blue);font-weight:700}@media(max-width:800px){.thesis,.fleet-grid,.workflow,.worktrees,.routing,.skills{grid-template-columns:1fr}.arrow{transform:rotate(90deg);min-height:35px}.workers{grid-template-columns:1fr}.skills>pre{grid-column:auto}.route-table,.handoff{overflow-x:auto}.route-table>div{min-width:620px}.handoff table{min-width:650px}.rule,.callout{grid-template-columns:1fr}}@media(max-width:600px){.edition{display:none}.worktrees{padding:24px}.map{grid-template-columns:1fr;padding-top:90px}}