geneseed 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +217 -5
- package/DESIGN.md +149 -1326
- package/QUICKSTART.md +1 -1
- package/README.md +30 -22
- package/SETUP.md +98 -24
- package/SHIPPED.md +6 -5
- package/adapters/bob/README.md +3 -3
- package/adapters/claude-code/README.md +6 -4
- package/adapters/claude-code/skills/geneseed/SKILL.md +10 -6
- package/adapters/copilot/README.md +5 -4
- package/adapters/opencode/GLOBAL-HARNESS-SPEC.md +11 -6
- package/adapters/opencode/HOW-OPENCODE-LOADS.md +1 -1
- package/adapters/opencode/README.md +15 -9
- package/adapters/opencode/agents/orchestrator.md +1 -1
- package/adapters/opencode/opencode.json +0 -9
- package/adapters/opencode/plugins/geneseed-context.js +7 -7
- package/adapters/opencode/plugins/geneseed-guard.js +6 -6
- package/adapters/opencode/workflows/dispatch.js +1 -1
- package/bin/geneseed.mjs +74 -8
- package/docs/declined.md +53 -2
- package/docs/design-history.md +1290 -0
- package/docs/extending.md +672 -0
- package/docs/limits.md +141 -82
- package/docs/token-footprint.md +15 -4
- package/docs/web/agents.md +1 -1
- package/docs/web/authoring.md +1 -1
- package/docs/web/claude-hooks.md +2 -2
- package/docs/web/collaboration.md +3 -3
- package/docs/web/first-session.md +2 -2
- package/docs/web/footprint.md +14 -7
- package/docs/web/foreman-mode.md +2 -2
- package/docs/web/harnesses.md +5 -3
- package/docs/web/install-quick.md +1 -1
- package/docs/web/model.md +3 -3
- package/docs/web/plugin-context.md +2 -2
- package/docs/web/plugin-guard.md +3 -3
- package/docs/web/plugin-ponytail.md +1 -1
- package/docs/web/rules.md +23 -3
- package/docs/web/setup-choices.md +20 -7
- package/docs/web/themes-author.md +13 -1
- package/docs/web-ui.md +36 -12
- package/geneseed +0 -0
- package/harness.config.json +1 -1
- package/js/catalog.mjs +29 -4
- package/js/checkout.mjs +24 -1
- package/js/cli-table.json +9 -7
- package/js/diff.mjs +8 -3
- package/js/doctor.mjs +374 -26
- package/js/emit.mjs +48 -11
- package/js/generate.mjs +39 -5
- package/js/hooks.mjs +8 -7
- package/js/installs.mjs +101 -4
- package/js/inventory.mjs +150 -20
- package/js/lib/fs.mjs +6 -2
- package/js/mcp.mjs +3 -15
- package/js/migrate.mjs +10 -4
- package/js/render.mjs +116 -11
- package/js/settings.mjs +297 -28
- package/js/setup.mjs +95 -5
- package/js/status.mjs +45 -4
- package/js/themes.mjs +1 -1
- package/js/tui.mjs +46 -3
- package/js/uninstall.mjs +30 -11
- package/js/web/actions.mjs +76 -9
- package/js/web/api.mjs +95 -16
- package/js/web/docs.mjs +33 -5
- package/js/web/jobs.mjs +12 -3
- package/js/web/server.mjs +59 -2
- package/package.json +1 -1
- package/src/AGENT.md.tmpl +75 -65
- package/src/agents/_template.md +4 -4
- package/src/agents/advocate.md +4 -4
- package/src/agents/architect.md +2 -2
- package/src/agents/developer.md +5 -5
- package/src/agents/docs.md +2 -2
- package/src/agents/empiricist.md +3 -3
- package/src/agents/explorer.md +3 -3
- package/src/agents/framer.md +3 -3
- package/src/agents/historian.md +3 -3
- package/src/agents/operator.md +3 -3
- package/src/agents/pragmatist.md +3 -3
- package/src/agents/reviewer.md +2 -2
- package/src/agents/security.md +2 -2
- package/src/agents/skeptic.md +4 -4
- package/src/agents/steward.md +3 -3
- package/src/agents/tester.md +2 -2
- package/src/agents/user-advocate.md +3 -3
- package/src/agents/visionary.md +3 -3
- package/src/doctrines/README.md +41 -0
- package/src/doctrines/craft.md +51 -0
- package/src/doctrines/ops.md +61 -0
- package/src/doctrines/process.md +87 -0
- package/src/doctrines/rigor.md +52 -0
- package/src/laws/universal.md +17 -301
- package/src/memory/README.md +2 -2
- package/src/modes/README.md +2 -2
- package/src/modes/foreman.md +1 -1
- package/src/notebook/README.md +2 -2
- package/src/ontology/universal.md +89 -0
- package/src/postures/README.md +3 -3
- package/src/postures/artisan.md +3 -3
- package/src/postures/assistant.md +1 -1
- package/src/postures/expert.md +1 -1
- package/src/postures/mentor.md +1 -1
- package/src/postures/peer.md +2 -2
- package/src/skills/_template.md +2 -2
- package/src/skills/brainstorm.md +2 -2
- package/src/skills/clarify.md +2 -2
- package/src/skills/codebase-design.md +1 -1
- package/src/skills/commit.md +5 -5
- package/src/skills/council.md +4 -4
- package/src/skills/crash-course.md +1 -1
- package/src/skills/daydream/SKILL.md +1 -1
- package/src/skills/debug.md +2 -2
- package/src/skills/decode.md +1 -1
- package/src/skills/develop.md +6 -6
- package/src/skills/document-project.md +4 -4
- package/src/skills/domain-modeling.md +1 -1
- package/src/skills/drill.md +1 -1
- package/src/skills/feynman.md +1 -1
- package/src/skills/forge-mcp.md +3 -3
- package/src/skills/fresh-eyes.md +4 -4
- package/src/skills/frontend-design.md +1 -1
- package/src/skills/gap-detector.md +1 -1
- package/src/skills/geneseed-code-review.md +1 -1
- package/src/skills/geneseed.md +4 -4
- package/src/skills/git-archaeology.md +1 -1
- package/src/skills/git-rescue.md +3 -3
- package/src/skills/handoff.md +4 -4
- package/src/skills/herdr.md +1 -1
- package/src/skills/ingest.md +3 -3
- package/src/skills/learning-path.md +1 -1
- package/src/skills/migrate.md +5 -5
- package/src/skills/opencode-theme.md +1 -1
- package/src/skills/parallel-agents.md +2 -2
- package/src/skills/pipeline.md +2 -2
- package/src/skills/plan.md +2 -2
- package/src/skills/ponytail.md +1 -1
- package/src/skills/profile.md +1 -1
- package/src/skills/prose.md +2 -2
- package/src/skills/prototype.md +2 -2
- package/src/skills/refactor.md +2 -2
- package/src/skills/release.md +4 -4
- package/src/skills/repo-map.md +5 -5
- package/src/skills/research.md +6 -6
- package/src/skills/review-response.md +3 -3
- package/src/skills/roast-me.md +1 -1
- package/src/skills/rule.md +5 -5
- package/src/skills/ship.md +3 -3
- package/src/skills/tdd.md +2 -2
- package/src/skills/tickets.md +1 -1
- package/src/skills/wayfinder.md +1 -1
- package/src/skills/wiki.md +4 -4
- package/src/skills/workflow.md +2 -2
- package/themes/README.md +17 -7
- package/themes/_TEMPLATE.json +37 -33
- package/themes/biker.json +37 -33
- package/themes/commentator.json +37 -33
- package/themes/cyberpunk.json +37 -33
- package/themes/gamer.json +37 -33
- package/themes/imperial.json +37 -33
- package/themes/joker.json +37 -33
- package/themes/marvin.json +37 -33
- package/themes/mean.json +37 -33
- package/themes/military.json +37 -33
- package/themes/neutral.json +37 -33
- package/themes/pirate.json +37 -33
- package/themes/sports.json +37 -33
- package/themes/verstappen.json +37 -33
- package/themes/wizard.json +37 -33
- package/web/dist/assets/{About-DX1-VTBP.js → About-C0Mk0igT.js} +1 -1
- package/web/dist/assets/{Activity-Dp9NaXOn.js → Activity-C4aJJVXz.js} +1 -1
- package/web/dist/assets/{ActivityDetail-HpOBtrXS.js → ActivityDetail-DaQ85za0.js} +1 -1
- package/web/dist/assets/{Diff-Ct4G3Se8.js → Diff-B3tlO2Yj.js} +1 -1
- package/web/dist/assets/{Doctor-DGjkZFuA.js → Doctor-BNC-5Dmo.js} +1 -1
- package/web/dist/assets/{Graph-b8o-S6kv.js → Graph-us0T6ZcV.js} +1 -1
- package/web/dist/assets/Harnesses-DAMgyfM_.js +1 -0
- package/web/dist/assets/Laws-rOxegJ75.js +1 -0
- package/web/dist/assets/{Library-BEZscyaQ.js → Library-KmwrHA1J.js} +1 -1
- package/web/dist/assets/{Markdown-k_LSLBGq.js → Markdown-0eQOVGSF.js} +1 -1
- package/web/dist/assets/{Profile-DydukTxP.js → Profile-ZU7WV6Xl.js} +1 -1
- package/web/dist/assets/{Rules-CIRG4Ldt.js → Rules-CtDoPhhf.js} +1 -1
- package/web/dist/assets/{Skills-Buoi1IBr.js → Skills-BhoOxdkD.js} +1 -1
- package/web/dist/assets/{StatusBadge-CE_AJttl.js → StatusBadge-CGvYVCwa.js} +1 -1
- package/web/dist/assets/{Themes-CI4o3gJC.js → Themes-Dr7OOkD7.js} +1 -1
- package/web/dist/assets/{activity-BCW7e6Cy.js → activity-B8aq3qtl.js} +1 -1
- package/web/dist/assets/index-2wqPDxuN.css +1 -0
- package/web/dist/assets/{index-B1PIx7RM.js → index-AhMzkdbI.js} +1 -1
- package/web/dist/assets/index-CRftEtBX.js +12 -0
- package/web/dist/assets/{index-Ck2iCdaC.js → index-D0lPN_qW.js} +1 -1
- package/web/dist/index.html +2 -2
- package/web/src/pages/Laws.jsx +282 -88
- package/web/dist/assets/Harnesses-gr3-aHBF.js +0 -1
- package/web/dist/assets/Laws-DTwF5tTC.js +0 -1
- package/web/dist/assets/index-BnTQUSUz.js +0 -12
- package/web/dist/assets/index-DUCsDv7z.css +0 -1
package/src/skills/clarify.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
**Trigger:** a task or whole project arrives with its goal, scope, or success criteria unstated or ambiguous — including non-design work (a refactor, migration, ops chore, investigation) — or the user says "interview me" / "what am I actually trying to do" / "clarify this first". If a concrete design problem is already identified, use the [brainstorm {{SKILL}}](brainstorm.md) instead.
|
|
6
6
|
|
|
7
7
|
## Procedure
|
|
8
|
-
1. Read the current project state and its own docs ({{
|
|
8
|
+
1. Read the current project state and its own docs ({{DOCTRINE}} process 4) so questions are grounded ({{LAW}} III — verify the actual state before designing the interview). If the request bundles several goals, separate them and take one at a time.
|
|
9
9
|
2. Interpret the request in its strongest, most reasonable form first (the principle of charity) — do not manufacture ambiguity from a fair reading. If the goal, scope, and success criteria are already unambiguous, restate them in one line and skip to step 4 — no ceremony on a clear ask. Otherwise interview the user ONE question at a time (multiple-choice when you can), driving at *why* (the outcome wanted), *scope* (what is explicitly in and out), and *done* (how success is judged) — not *how* yet. Keep asking until each is unambiguous.
|
|
10
10
|
3. Name every KEY DECISION the answers imply or leave open — chosen direction, trade-offs accepted, load-bearing constraints, assumptions, and non-goals. Surface each silent assumption as a decision to ratify, not a settled fact.
|
|
11
11
|
4. Write the goal and the key-decision ledger to `BRIEF.md` (or `clarify/<task>.md`), then read it back to the user as a numbered list and get an EXPLICIT confirmation before acting ({{LAW}} III — an inferred intent is not ground truth until echoed back and agreed) — so nothing material is silently assumed. Scope the read-back to decisions that are consequential, irreversible, or genuinely uncertain; correct the file and re-confirm any the user changes.
|
|
@@ -21,7 +21,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
21
21
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
22
22
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
23
23
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
24
|
-
clears {{
|
|
24
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
25
25
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
26
26
|
adding one; when in doubt, leave it out.
|
|
27
27
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
@@ -37,7 +37,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
37
37
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
38
38
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
39
39
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
40
|
-
clears {{
|
|
40
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
41
41
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
42
42
|
adding one; when in doubt, leave it out.
|
|
43
43
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/commit.md
CHANGED
|
@@ -11,22 +11,22 @@
|
|
|
11
11
|
3. Confirm no secret is being committed (universal {{LAW}} I), and no leftover
|
|
12
12
|
debug scaffolding rides along — `console.log`, `debugger`, `print`,
|
|
13
13
|
commented-out code, or hardcoded test values left over from diagnosis
|
|
14
|
-
({{LAW}}
|
|
14
|
+
({{LAW}} VIII).
|
|
15
15
|
4. Write a message: imperative subject ≤50 chars; a body only when the *why*
|
|
16
16
|
isn't obvious from the diff. **Match the repository's existing commit convention**
|
|
17
|
-
(
|
|
17
|
+
({{DOCTRINE}} craft 5) — detect it from commit tooling (`commitlint`,
|
|
18
18
|
`semantic-release`, `release-please`, husky hooks) and recent `git log`. When the
|
|
19
19
|
repo has no discernible convention, default to **Conventional Commits**:
|
|
20
20
|
`type(scope): subject` (`feat`, `fix`, `docs`, `refactor`, `test`, `chore`…),
|
|
21
21
|
with a `!` before the colon or a `BREAKING CHANGE:` footer for a breaking change.
|
|
22
|
-
5. **Get explicit consent before committing (
|
|
22
|
+
5. **Get explicit consent before committing ({{DOCTRINE}} process 5).** On *every*
|
|
23
23
|
branch — feature branches included — first show the user a plain-language summary of
|
|
24
24
|
the change *and* the exact commit message, then wait for explicit acceptance before
|
|
25
25
|
committing. A previous approval is not standing consent; ask again each commit. On a
|
|
26
26
|
*shared branch* (`main`, `master`, `develop`/`development`, a release/hotfix branch,
|
|
27
27
|
or any branch that is not a dedicated feature branch) apply the same gate with extra
|
|
28
28
|
care.
|
|
29
|
-
6. Push only when the user has explicitly approved *that push* ({{
|
|
29
|
+
6. Push only when the user has explicitly approved *that push* ({{DOCTRINE}} process 5 / {{LAW}} IV)
|
|
30
30
|
— never push on your own initiative, on any branch, and never treat one approval as
|
|
31
31
|
consent for the next.
|
|
32
32
|
|
|
@@ -41,7 +41,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
41
41
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
42
42
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
43
43
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
44
|
-
clears {{
|
|
44
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
45
45
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
46
46
|
adding one; when in doubt, leave it out.
|
|
47
47
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/council.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
**Trigger:** the user asks to "convene a council", "debate this", "argue both sides", "stress-test this decision", or wants a change, plan, or claim challenged from several points of view before committing to it.
|
|
6
6
|
|
|
7
7
|
## Procedure
|
|
8
|
-
1. Frame the motion in one line — the exact decision, change, or claim under debate — and name what it feeds (a choice to make, a design to accept, a discussion to settle). Ground it in the real artifact and the project's own docs ({{
|
|
8
|
+
1. Frame the motion in one line — the exact decision, change, or claim under debate — and name what it feeds (a choice to make, a design to accept, a discussion to settle). Ground it in the real artifact and the project's own docs ({{DOCTRINE}} process 4) so the council argues the actual thing; if the motion is unclear or bundles several questions, split it and ask once, then proceed.
|
|
9
9
|
2. Seat the council from the standing roster of read-only debate {{AGENTS}}, each arguing one fixed stance — convene the subset that genuinely clashes on *this* motion (usually 3–6, never the whole bench for its own sake), always anchored by the for/against spine of [advocate](../{{DIR_AGENTS}}/advocate.md) and [skeptic](../{{DIR_AGENTS}}/skeptic.md):
|
|
10
10
|
- [advocate](../{{DIR_AGENTS}}/advocate.md) — the strongest case **for**; [skeptic](../{{DIR_AGENTS}}/skeptic.md) — devil's advocate, failure modes and hidden assumptions.
|
|
11
11
|
- [pragmatist](../{{DIR_AGENTS}}/pragmatist.md) — cost, effort, YAGNI; [steward](../{{DIR_AGENTS}}/steward.md) — long-term architecture and debt; [operator](../{{DIR_AGENTS}}/operator.md) — running it in production.
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
- [user-advocate](../{{DIR_AGENTS}}/user-advocate.md) — whoever consumes the outcome.
|
|
14
14
|
|
|
15
15
|
Hand each chosen seat the motion and a one-line charter scoped to this topic; skip the seats with nothing to say here, and add an ad-hoc seat (e.g. the [security](../{{DIR_AGENTS}}/security.md) surface) only when the topic plainly demands a voice the roster doesn't cover.
|
|
16
|
-
3. Round one — positions: convene the seats by dispatching each stance {{AGENT}} as its own subagent in one batch where the tool supports it (the [parallel-agents {{SKILL}}](parallel-agents.md)), so each argues in an isolated context with no groupthink; where no subagent capability exists, voice each seat in turn as a persona. Each returns its steelmanned brief ({{
|
|
16
|
+
3. Round one — positions: convene the seats by dispatching each stance {{AGENT}} as its own subagent in one batch where the tool supports it (the [parallel-agents {{SKILL}}](parallel-agents.md)), so each argues in an isolated context with no groupthink; where no subagent capability exists, voice each seat in turn as a persona. Each returns its steelmanned brief ({{ONTOLOGY}}: {{ONT_CONDUCT}}) — no hedging, no strawmen.
|
|
17
17
|
4. Round two — clash: put the briefs in front of each other and have the seats rebut only on the points that actually conflict, surfacing the cruxes, the load-bearing assumptions, and where the evidence is thin. Hold to a fixed number of rounds so the debate converges instead of looping; the skeptic already pairs every objection with what would resolve it (the [roast-me {{SKILL}}](roast-me.md) discipline).
|
|
18
|
-
5. The chair synthesises in neutral voice: state the verdict and its reasoning, record the strongest surviving dissent verbatim so it is not lost, list what would change the verdict, and name the single next action. Surface it for the user to decide — the council advises, it does not commit: write no code and push nothing on its own ({{LAW}} IV, {{
|
|
18
|
+
5. The chair synthesises in neutral voice: state the verdict and its reasoning, record the strongest surviving dissent verbatim so it is not lost, list what would change the verdict, and name the single next action. Surface it for the user to decide — the council advises, it does not commit: write no code and push nothing on its own ({{LAW}} IV, {{DOCTRINE}} process 5).
|
|
19
19
|
|
|
20
20
|
## Done when
|
|
21
21
|
- A crisp motion was debated by distinct, steelmanned seats over bounded rounds, and the chair has delivered a verdict, the preserved dissent, and one next action for the user to weigh.
|
|
@@ -27,7 +27,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
27
27
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
28
28
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
29
29
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
30
|
-
clears {{
|
|
30
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
31
31
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
32
32
|
adding one; when in doubt, leave it out.
|
|
33
33
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
@@ -21,7 +21,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
21
21
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
22
22
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
23
23
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
24
|
-
clears {{
|
|
24
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
25
25
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
26
26
|
adding one; when in doubt, leave it out.
|
|
27
27
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
@@ -15,7 +15,7 @@ Inspired by [Gwern's LLM Daydreaming](https://gwern.net/ai-daydreaming).
|
|
|
15
15
|
Before the first run, make sure the pieces this skill depends on are in place:
|
|
16
16
|
|
|
17
17
|
1. **A vault to mine.** Declare your Obsidian vault in the harness `wiki.jsonc`
|
|
18
|
-
(AGENT.md §
|
|
18
|
+
(AGENT.md §8) — give a `wikis[]` entry a `path` to the vault root. Without it the
|
|
19
19
|
skill falls back to detecting a `.obsidian/` folder in the current directory, then
|
|
20
20
|
asks. No vault → nothing to daydream about.
|
|
21
21
|
2. **Parallel subagents.** Synthesis and critique fan out across ~10–20 subagents per
|
package/src/skills/debug.md
CHANGED
|
@@ -18,7 +18,7 @@ faster than thrashing; do not trade it away under pressure.
|
|
|
18
18
|
5. Verify: run the project's checks and read the actual output (universal {{LAW}} III) — the original reproduction now passes and nothing nearby broke. Where a test can pin the bug, add a regression test that fails before the fix and passes after, so it can never silently return. Dispatch the [tester {{AGENT}}](../{{DIR_AGENTS}}/tester.md) for a focused regression check when the blast radius is unclear.
|
|
19
19
|
6. If a fix doesn't work, return to step 1 with what you learned — don't stack a second fix on top. **After three failed fixes, stop fixing:** when each attempt only shifts the symptom elsewhere, the architecture, not the line, is likely wrong. Surface that to the user and decide the approach together before trying again ({{LAW}} II).
|
|
20
20
|
|
|
21
|
-
**Diagnostic logging is scaffolding.** When you add logging to isolate a bug, use the project's real logger at a DEBUG level rather than scattered `print`/`console.log`, prefer correlation IDs over loose object dumps, and **never log secrets, tokens, or PII** ({{LAW}} I). Treat every temporary log as disposable: remove or downgrade each `print`/`console.log`/`debugger` before the change ships ({{LAW}}
|
|
21
|
+
**Diagnostic logging is scaffolding.** When you add logging to isolate a bug, use the project's real logger at a DEBUG level rather than scattered `print`/`console.log`, prefer correlation IDs over loose object dumps, and **never log secrets, tokens, or PII** ({{LAW}} I). Treat every temporary log as disposable: remove or downgrade each `print`/`console.log`/`debugger` before the change ships ({{LAW}} VIII) — leftover debug noise in a diff is a defect, not a free comment.
|
|
22
22
|
|
|
23
23
|
## Done when
|
|
24
24
|
- The failure is reproduced, root-caused, fixed at the cause, and the reproduction passes with no new breakage.
|
|
@@ -30,7 +30,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
30
30
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
31
31
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
32
32
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
33
|
-
clears {{
|
|
33
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
34
34
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
35
35
|
adding one; when in doubt, leave it out.
|
|
36
36
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/decode.md
CHANGED
|
@@ -21,7 +21,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
21
21
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
22
22
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
23
23
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
24
|
-
clears {{
|
|
24
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
25
25
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
26
26
|
adding one; when in doubt, leave it out.
|
|
27
27
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/develop.md
CHANGED
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
**Trigger:** implementing a feature, fixing a bug, or changing code behaviour in a repo that has (or should have) a test suite.
|
|
6
6
|
|
|
7
7
|
## Procedure
|
|
8
|
-
1. Orient on the project's own documentation for what you are about to touch ({{
|
|
9
|
-
2. Make the smallest change that advances the task ({{
|
|
10
|
-
3. Cover the behaviour — test-first via the [tdd {{SKILL}}](tdd.md) where the target is known up front; otherwise write the covering test alongside the change ({{
|
|
11
|
-
4. Run the *affected* tests and read the output ({{LAW}} III); on failure, fix the cause, do not mask it ({{LAW}}
|
|
8
|
+
1. Orient on the project's own documentation for what you are about to touch ({{DOCTRINE}} process 4).
|
|
9
|
+
2. Make the smallest change that advances the task ({{DOCTRINE}} craft 6).
|
|
10
|
+
3. Cover the behaviour — test-first via the [tdd {{SKILL}}](tdd.md) where the target is known up front; otherwise write the covering test alongside the change ({{DOCTRINE}} rigor 3).
|
|
11
|
+
4. Run the *affected* tests and read the output ({{LAW}} III); on failure, fix the cause, do not mask it ({{LAW}} VIII).
|
|
12
12
|
5. Tidy the green code via the [refactor {{SKILL}}](refactor.md) — the tests are your safety net.
|
|
13
|
-
6. Commit the green slice via the [commit {{SKILL}}](commit.md) ({{
|
|
13
|
+
6. Commit the green slice via the [commit {{SKILL}}](commit.md) ({{DOCTRINE}} process 5). Loop one slice at a time; dispatch the [tester {{AGENT}}](../{{DIR_AGENTS}}/tester.md) for heavier or unfamiliar coverage.
|
|
14
14
|
|
|
15
15
|
## Done when
|
|
16
16
|
- The behaviour changed is covered by tests written this session, the affected suite is green with its output shown, and each slice was committed.
|
|
@@ -22,7 +22,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
22
22
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
23
23
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
24
24
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
25
|
-
clears {{
|
|
25
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
26
26
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
27
27
|
adding one; when in doubt, leave it out.
|
|
28
28
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
@@ -13,7 +13,7 @@ into line with the implementation.
|
|
|
13
13
|
that exists — never create a second. If none exists, create `docs/` at the root.
|
|
14
14
|
2. **Survey the code, not the intent.** Map entry points, the public API / modules,
|
|
15
15
|
commands, config, and key directories — read the actual behaviour (universal {{LAW}} III,
|
|
16
|
-
{{
|
|
16
|
+
{{DOCTRINE}} process 4). If there is no `ARCHITECTURE.md`, run [repo-map {{SKILL}}](repo-map.md)
|
|
17
17
|
first so you have the orientation map to build on.
|
|
18
18
|
3. **Reconcile the markdown (whole tree).** Check every existing page against the current
|
|
19
19
|
implementation — renamed or removed APIs, changed flags, dead examples — and fix the
|
|
@@ -28,7 +28,7 @@ into line with the implementation.
|
|
|
28
28
|
- **Fenced generated regions.** Wrap the auto-generated body between
|
|
29
29
|
`<!-- geneseed:doc:start -->` and `<!-- geneseed:doc:end -->` markers, and on re-runs
|
|
30
30
|
rewrite *only* inside them — hand-authored prose outside the markers is never touched
|
|
31
|
-
({{
|
|
31
|
+
({{DOCTRINE}} process 3: edit the layer you own, never the reader's additions).
|
|
32
32
|
- **Diagrams as Mermaid, keyed by purpose.** In the markdown, render diagrams as fenced
|
|
33
33
|
`mermaid` code blocks — they render natively on GitHub, Obsidian, and VS Code with no
|
|
34
34
|
dependency. Pick the kind by what you are showing: sequence for runtime/request flows,
|
|
@@ -56,7 +56,7 @@ into line with the implementation.
|
|
|
56
56
|
- **Stay project-facing** — clean and professional styling, never the harness voice; and
|
|
57
57
|
footer it with `mirrors commit <sha> · generated <date>` so the sync is auditable.
|
|
58
58
|
6. **Do not auto-publish.** Leave the changes for the user to review; stage and commit only
|
|
59
|
-
on consent, via the [commit {{SKILL}}](commit.md) (
|
|
59
|
+
on consent, via the [commit {{SKILL}}](commit.md) ({{DOCTRINE}} process 5).
|
|
60
60
|
|
|
61
61
|
## Done when
|
|
62
62
|
- The doc home mirrors the current implementation: every markdown page carries typed
|
|
@@ -72,7 +72,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
72
72
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
73
73
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
74
74
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
75
|
-
clears {{
|
|
75
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
76
76
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
77
77
|
adding one; when in doubt, leave it out.
|
|
78
78
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
@@ -31,7 +31,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
31
31
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
32
32
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
33
33
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
34
|
-
clears {{
|
|
34
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
35
35
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
36
36
|
adding one; when in doubt, leave it out.
|
|
37
37
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/drill.md
CHANGED
|
@@ -21,7 +21,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
21
21
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
22
22
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
23
23
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
24
|
-
clears {{
|
|
24
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
25
25
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
26
26
|
adding one; when in doubt, leave it out.
|
|
27
27
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/feynman.md
CHANGED
|
@@ -19,7 +19,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
19
19
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
20
20
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
21
21
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
22
|
-
clears {{
|
|
22
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
23
23
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
24
24
|
adding one; when in doubt, leave it out.
|
|
25
25
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/forge-mcp.md
CHANGED
|
@@ -9,7 +9,7 @@ server — exposing an external API or service to an agent as a set of tools.
|
|
|
9
9
|
depends on it.
|
|
10
10
|
|
|
11
11
|
## Procedure
|
|
12
|
-
1. Research first ({{
|
|
12
|
+
1. Research first ({{DOCTRINE}} process 4): read the MCP specification
|
|
13
13
|
(`modelcontextprotocol.io`) and the target service's API docs, then pick the
|
|
14
14
|
SDK — Python (FastMCP) or TypeScript (MCP SDK) — and load its documentation.
|
|
15
15
|
2. Plan the tool surface: list the service's key operations and design
|
|
@@ -18,7 +18,7 @@ depends on it.
|
|
|
18
18
|
real task with it.
|
|
19
19
|
3. Build the core: an authenticated API client, shared error-handling and
|
|
20
20
|
pagination helpers, and response formatting that returns focused, relevant
|
|
21
|
-
data rather than raw dumps ({{
|
|
21
|
+
data rather than raw dumps ({{DOCTRINE}} process 3).
|
|
22
22
|
4. Define each tool's input and output schema (Pydantic or Zod), set the
|
|
23
23
|
annotations (`readOnlyHint`, `destructiveHint`, `idempotentHint`,
|
|
24
24
|
`openWorldHint`), and write error messages that name the specific, actionable
|
|
@@ -41,7 +41,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
41
41
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
42
42
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
43
43
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
44
|
-
clears {{
|
|
44
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
45
45
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
46
46
|
adding one; when in doubt, leave it out.
|
|
47
47
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/fresh-eyes.md
CHANGED
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
|
|
7
7
|
## Procedure
|
|
8
8
|
1. Capture the firewall input as TWO things and nothing else: (a) the **verbatim original task/spec** — the raw issue or request text, NOT a solver-written summary or "spec card" (a distilled card launders the solving session's framing into the rubric, the very bias this {{SKILL}} exists to defeat), and (b) a pointer to the **final artifact** as it stands — file paths, built output, or the command to run it. If the raw task is too thin to yield acceptance criteria, have the **user** (never the solver) confirm a one-line acceptance bar, then proceed ({{LAW}} III); if it is too fuzzy even for that, this is a judgement call — convene [council](council.md) instead.
|
|
9
|
-
2. Deliberately WITHHOLD everything else and say so in the brief: the diff and changed-files list, the chat transcript, the solver's rationale and commit messages, prior test output, and every "it works because…" claim. Each is a vector for confirmation bias — they transmit the author's conviction, and a validator that inherits it cannot judge independently ({{
|
|
10
|
-
3. Dispatch ONE fresh-context validator whose context starts empty — isolation is structural, not promised — using the [reviewer {{AGENT}}](../{{DIR_AGENTS}}/reviewer.md) (read-only, runs the suite, casts a verdict; NOT the [skeptic](../{{DIR_AGENTS}}/skeptic.md), whose charter forbids running commands and casting verdicts), via the dispatch pattern in [parallel-agents {{SKILL}}](parallel-agents.md), keeping the heavy reading out of the main context ({{
|
|
9
|
+
2. Deliberately WITHHOLD everything else and say so in the brief: the diff and changed-files list, the chat transcript, the solver's rationale and commit messages, prior test output, and every "it works because…" claim. Each is a vector for confirmation bias — they transmit the author's conviction, and a validator that inherits it cannot judge independently ({{ONTOLOGY}}: {{ONT_CONDUCT}}). The validator must re-confront the artifact cold, the way an external recipient would.
|
|
10
|
+
3. Dispatch ONE fresh-context validator whose context starts empty — isolation is structural, not promised — using the [reviewer {{AGENT}}](../{{DIR_AGENTS}}/reviewer.md) (read-only, runs the suite, casts a verdict; NOT the [skeptic](../{{DIR_AGENTS}}/skeptic.md), whose charter forbids running commands and casting verdicts), via the dispatch pattern in [parallel-agents {{SKILL}}](parallel-agents.md), keeping the heavy reading out of the main context ({{DOCTRINE}} process 3); a cheaper model suffices for the validator unless the spec is subtle. Dispatch **fresh** — never resume a prior subagent session, which re-inherits its context and breaches the firewall. Where the host has no subagent capability, degrade: write the brief to a file and have the user run it in a separate fresh process; only as a last resort run the persona in-session and **stamp the verdict "SOFT ISOLATION — context bleed possible"** so the user discounts it. Never silently pretend a persona equals a fresh agent.
|
|
11
11
|
4. Inside the fresh context, FIRST derive the rubric blind: from the task ALONE — before looking at the artifact — write a numbered list of observable acceptance criteria, each a yes/no test with a stated check method (a command to run, an output to see, a behaviour to exercise), tagged must-have or nice-to-have. FREEZE this list. Deriving it inside the firewall, from the task and not the solution, is what prevents criteria-fitting — the rubric cannot be bent to match what the artifact happens to do.
|
|
12
12
|
5. THEN reveal the artifact and rule each criterion against it under an inverted burden of proof: actively check it — run the command, exercise the behaviour, read the named output ({{LAW}} III — verify by running, never assume) — and record `Cn: PASS | FAIL | UNVERIFIABLE — <evidence: the exact output/behaviour checked>`. Default is NOT-PASS: mark PASS only after actively confirming; a criterion that cannot be checked is UNVERIFIABLE (a finding, not a pass — name the missing evidence). Flag any **Extra** the artifact added beyond the spec, but cut gold-plating both ways — never FAIL the artifact for a requirement the task never asked for. The validator does NOT fix, refactor, or polish; it only rules.
|
|
13
|
-
6. Return the independent verdict: the per-criterion table, then the overall gate — **SATISFIES** (every must-have PASS, no FAIL), **SATISFIES-WITH-GAPS** (must-haves pass, a nice-to-have fails), or **DOES-NOT-SATISFY** (any must-have FAIL or UNVERIFIABLE), listing the failing criteria with evidence. Report "could not find a fault" as not-proven-false, never as "proven correct". Surface it for the user to decide; the gate advises and applies no changes — write no code, push nothing ({{LAW}} IV, {{
|
|
13
|
+
6. Return the independent verdict: the per-criterion table, then the overall gate — **SATISFIES** (every must-have PASS, no FAIL), **SATISFIES-WITH-GAPS** (must-haves pass, a nice-to-have fails), or **DOES-NOT-SATISFY** (any must-have FAIL or UNVERIFIABLE), listing the failing criteria with evidence. Report "could not find a fault" as not-proven-false, never as "proven correct". Surface it for the user to decide; the gate advises and applies no changes — write no code, push nothing ({{LAW}} IV, {{DOCTRINE}} process 5). On DOES-NOT-SATISFY, hand the failures to the solver (optionally via [review-response](review-response.md)) and re-run fresh-eyes after the fix rather than letting the original context relitigate the ruling.
|
|
14
14
|
|
|
15
15
|
## Done when
|
|
16
16
|
- A fresh context that never saw the solving session derived the acceptance criteria from the original task alone, froze them before seeing the artifact, ruled each PASS/FAIL/UNVERIFIABLE with evidence by checking the live artifact, and returned an overall gate (SATISFIES / SATISFIES-WITH-GAPS / DOES-NOT-SATISFY) for the user to weigh — or, where no true isolation was possible, the verdict is stamped soft-isolation so it is discounted.
|
|
@@ -22,7 +22,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
22
22
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
23
23
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
24
24
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
25
|
-
clears {{
|
|
25
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
26
26
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
27
27
|
adding one; when in doubt, leave it out.
|
|
28
28
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
@@ -51,7 +51,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
51
51
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
52
52
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
53
53
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
54
|
-
clears {{
|
|
54
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
55
55
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
56
56
|
adding one; when in doubt, leave it out.
|
|
57
57
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
@@ -20,7 +20,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
20
20
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
21
21
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
22
22
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
23
|
-
clears {{
|
|
23
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
24
24
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
25
25
|
adding one; when in doubt, leave it out.
|
|
26
26
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
@@ -26,7 +26,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
26
26
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
27
27
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
28
28
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
29
|
-
clears {{
|
|
29
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
30
30
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
31
31
|
adding one; when in doubt, leave it out.
|
|
32
32
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/geneseed.md
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
## Procedure
|
|
8
8
|
1. Locate the deployment. Try in order: `command -v geneseed` (use the launcher if found); `$GENESEED_HARNESS`; `$OPENCODE_CONFIG_DIR`; `~/.config/opencode/AGENT.md`; `.opencode/AGENT.md` walking up from `pwd`; any `AGENT.md` at the repo root. Stop and say so if none resolves — do not run `setup`, `build`, or `upgrade` to "fix" this.
|
|
9
|
-
2. For state — install mode, theme, counts, version fingerprint, drift — prefer the CLI: `geneseed status`, `geneseed version`, `geneseed doctor`, `geneseed diff`. All read-only and cheap ({{
|
|
10
|
-
3. To read a specific piece, read the file directly rather than re-deriving from prose ({{LAW}} III): `<harness>/agents/<name>.md`, `<harness>/skills/<name>/SKILL.md`, `<harness>/memory/<file>.md`, `<harness>/notebook/<file>.md`. {{LAWS}} live as numbered `## N. …` sections inside `<harness>/AGENT.md`.
|
|
11
|
-
4. Side-effecting verbs need explicit assent ({{
|
|
9
|
+
2. For state — install mode, theme, counts, version fingerprint, drift — prefer the CLI: `geneseed status`, `geneseed version`, `geneseed doctor`, `geneseed diff`. All read-only and cheap ({{DOCTRINE}} process 3).
|
|
10
|
+
3. To read a specific piece, read the file directly rather than re-deriving from prose ({{LAW}} III): `<harness>/agents/<name>.md`, `<harness>/skills/<name>/SKILL.md`, `<harness>/memory/<file>.md`, `<harness>/notebook/<file>.md`. The {{ONTOLOGY}}, the {{LAWS}} and the active {{DOCTRINES}} live as their own numbered `## N. …` sections inside `<harness>/AGENT.md`.
|
|
11
|
+
4. Side-effecting verbs need explicit assent ({{DOCTRINE}} process 5): `geneseed learn` (writes to {{MEMORY}}), `geneseed context` (refreshes the project's `context.json`), `geneseed web start|stop` (the local browser UI on `127.0.0.1`). `geneseed web status` is read-only.
|
|
12
12
|
5. Never run `setup`, `build`, `upgrade`, `bootstrap`, `update`, `sync-self`, `link`, `unlink`, or `uninstall` as a side effect — these are scope-changing and only run when the user explicitly asks ({{LAW}} II).
|
|
13
13
|
6. The bundle's directory and section names are theme-independent (plain English everywhere); only voice and prose change per theme. Don't pattern-match on flavour words to find files.
|
|
14
14
|
|
|
@@ -22,7 +22,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
22
22
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
23
23
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
24
24
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
25
|
-
clears {{
|
|
25
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
26
26
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
27
27
|
adding one; when in doubt, leave it out.
|
|
28
28
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
@@ -40,7 +40,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
40
40
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
41
41
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
42
42
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
43
|
-
clears {{
|
|
43
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
44
44
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
45
45
|
adding one; when in doubt, leave it out.
|
|
46
46
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/git-rescue.md
CHANGED
|
@@ -41,13 +41,13 @@ finding *when/why* something changed without altering history, use git-archaeolo
|
|
|
41
41
|
dedicated branch, never a shared one, and keep it the only change in flight
|
|
42
42
|
(universal {{LAW}} II). A rewrite *creates commits* — amend, squash, `--continue`
|
|
43
43
|
all do — so present what will change and get the user's acceptance before running
|
|
44
|
-
it, exactly as for any commit (
|
|
44
|
+
it, exactly as for any commit ({{DOCTRINE}} process 5).
|
|
45
45
|
6. Verify the result before declaring success: inspect `git log --oneline`,
|
|
46
46
|
`git status`, and the diff against the intended state — read the actual output, do
|
|
47
47
|
not assume the rewrite landed as planned (universal {{LAW}} III).
|
|
48
48
|
7. Push only with the user's explicit, per-push consent — and a history rewrite needs a
|
|
49
49
|
**force**-push (`--force-with-lease`), which is doubly outward-facing: present what
|
|
50
|
-
changed and wait for acceptance before pushing (
|
|
50
|
+
changed and wait for acceptance before pushing ({{DOCTRINE}} process 5 / {{LAW}} IV).
|
|
51
51
|
Never force-push a shared branch without confirming it is safe to do so.
|
|
52
52
|
|
|
53
53
|
## Done when
|
|
@@ -61,7 +61,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
61
61
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
62
62
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
63
63
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
64
|
-
clears {{
|
|
64
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
65
65
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
66
66
|
adding one; when in doubt, leave it out.
|
|
67
67
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/handoff.md
CHANGED
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
|
|
7
7
|
## Procedure
|
|
8
8
|
1. Capture the state in the worklog (`WORKLOG.md` or the task's plan file): the goal, what's done, the step in progress, and the exact next step.
|
|
9
|
-
2. Record open decisions, dead ends already ruled out, blockers, and any irreversible changes already made ({{
|
|
10
|
-
3. Promote any durable fact or correction learned this session into {{MEMORY}} (§
|
|
9
|
+
2. Record open decisions, dead ends already ruled out, blockers, and any irreversible changes already made ({{DOCTRINE}} process 2) — so the next agent neither re-derives nor repeats them.
|
|
10
|
+
3. Promote any durable fact or correction learned this session into {{MEMORY}} (§5), not just the worklog.
|
|
11
11
|
4. Point to the live artifacts: branch name, changed files, how to run the tests, and where any failure reproduces.
|
|
12
|
-
5. Put a one-line "resume here" pointer at the top so a fresh context picks up in a single read ({{
|
|
12
|
+
5. Put a one-line "resume here" pointer at the top so a fresh context picks up in a single read ({{DOCTRINE}} process 3).
|
|
13
13
|
6. Verify it: re-read the worklog as a cold reader ({{LAW}} III) — goal, progress, next step, and blockers must be answerable from it alone. Fix what isn't.
|
|
14
14
|
|
|
15
15
|
## Done when
|
|
@@ -22,7 +22,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
22
22
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
23
23
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
24
24
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
25
|
-
clears {{
|
|
25
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
26
26
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
27
27
|
adding one; when in doubt, leave it out.
|
|
28
28
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/herdr.md
CHANGED
|
@@ -157,7 +157,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
157
157
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
158
158
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
159
159
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
160
|
-
clears {{
|
|
160
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
161
161
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
162
162
|
adding one; when in doubt, leave it out.
|
|
163
163
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/ingest.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
**Trigger:** a task needs the *content* of a non-markdown document — a PDF, Word
|
|
6
6
|
(`.docx`), PowerPoint (`.pptx`), Excel (`.xlsx`), HTML, EPUB — or a web URL. This is
|
|
7
7
|
the read-before counterpart for documents the convention can't read directly
|
|
8
|
-
(
|
|
8
|
+
({{DOCTRINE}} process 4): the context discovery only sees `.md`, so anything else
|
|
9
9
|
must be converted first.
|
|
10
10
|
|
|
11
11
|
## Procedure
|
|
@@ -27,7 +27,7 @@ must be converted first.
|
|
|
27
27
|
host's choice. If none is available, report which one to install and stop — do
|
|
28
28
|
not run `pip install`/`brew install` without the user's say-so.
|
|
29
29
|
5. **Read the slice you need**, not the whole dump — locate the relevant section in
|
|
30
|
-
the markdown, then read it (
|
|
30
|
+
the markdown, then read it ({{DOCTRINE}} process 3).
|
|
31
31
|
6. **Treat the converted file as a scratch artifact.** Don't commit it unless the
|
|
32
32
|
task calls for it (universal {{LAW}} IV); prefer a temp path or `.gitignore` it.
|
|
33
33
|
|
|
@@ -42,7 +42,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
42
42
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
43
43
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
44
44
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
45
|
-
clears {{
|
|
45
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
46
46
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
47
47
|
adding one; when in doubt, leave it out.
|
|
48
48
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
@@ -19,7 +19,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
19
19
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
20
20
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
21
21
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
22
|
-
clears {{
|
|
22
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
23
23
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
24
24
|
adding one; when in doubt, leave it out.
|
|
25
25
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/migrate.md
CHANGED
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
onto a new API.
|
|
7
7
|
|
|
8
8
|
## Procedure
|
|
9
|
-
1. Read the upstream migration guide and changelog *first* (
|
|
9
|
+
1. Read the upstream migration guide and changelog *first* ({{DOCTRINE}} process 4);
|
|
10
10
|
list the breaking changes that actually touch this codebase.
|
|
11
11
|
2. Work on a dedicated branch, never directly on a shared one, so a failed
|
|
12
|
-
migration rolls back cleanly (
|
|
12
|
+
migration rolls back cleanly ({{DOCTRINE}} process 5 applies its shared-branch
|
|
13
13
|
care to anything that does land there).
|
|
14
14
|
3. Migrate one dependency — or one breaking change — at a time. Never batch
|
|
15
15
|
unrelated bumps into a single step (universal {{LAW}} II).
|
|
@@ -17,7 +17,7 @@ onto a new API.
|
|
|
17
17
|
lets you bisect a later failure to the exact change that caused it
|
|
18
18
|
(universal {{LAW}} III).
|
|
19
19
|
5. Keep the version bump itself a separate commit from any code changes it forces,
|
|
20
|
-
each through the [commit {{SKILL}}](commit.md) (
|
|
20
|
+
each through the [commit {{SKILL}}](commit.md) ({{DOCTRINE}} process 5), so each
|
|
21
21
|
diff is reviewable in isolation.
|
|
22
22
|
|
|
23
23
|
**Schema migrations stay backward-compatible.** For a database or stored-format
|
|
@@ -29,7 +29,7 @@ change into the same deploy as the code that depends on it (universal {{LAW}} II
|
|
|
29
29
|
## Done when
|
|
30
30
|
- The dependency or API is on the target version, every check passes, and the
|
|
31
31
|
changelog / lockfile reflect the new state with its docs updated
|
|
32
|
-
(
|
|
32
|
+
({{DOCTRINE}} craft 3).
|
|
33
33
|
|
|
34
34
|
## Self-improvement
|
|
35
35
|
|
|
@@ -38,7 +38,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
38
38
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
39
39
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
40
40
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
41
|
-
clears {{
|
|
41
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
42
42
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
43
43
|
adding one; when in doubt, leave it out.
|
|
44
44
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
@@ -45,7 +45,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
45
45
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
46
46
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
47
47
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
48
|
-
clears {{
|
|
48
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
49
49
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
50
50
|
adding one; when in doubt, leave it out.
|
|
51
51
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
## Procedure
|
|
8
8
|
1. Confirm independence: the subtasks must not depend on each other's output or write the same files. If they're sequential or share state, use [plan](plan.md) instead.
|
|
9
9
|
2. Split the work into self-contained units, each with one clear goal and a defined output contract — what it must return.
|
|
10
|
-
3. Dispatch each unit to its own subagent in one batch, each under a handoff envelope: the unit's goal, the inputs it needs, its output contract, and the inherited constraints (no commit/push — {{
|
|
10
|
+
3. Dispatch each unit to its own subagent in one batch, each under a handoff envelope: the unit's goal, the inputs it needs, its output contract, and the inherited constraints (no commit/push — {{DOCTRINE}} process 5 stays with you; gaps reported, never invented). Prefer the read-only [explorer {{AGENT}}](../{{DIR_AGENTS}}/explorer.md) for investigation so the heavy reading stays out of the main context ({{DOCTRINE}} process 3). Where no subagent capability exists, run the units sequentially as personas instead, converging the same way.
|
|
11
11
|
4. Keep the main context lean: collect each subagent's distilled result, not its working transcript.
|
|
12
12
|
5. Converge: reconcile the results, resolve conflicts yourself, and verify the combined outcome.
|
|
13
13
|
|
|
@@ -21,7 +21,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
21
21
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
22
22
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
23
23
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
24
|
-
clears {{
|
|
24
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
25
25
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
26
26
|
adding one; when in doubt, leave it out.
|
|
27
27
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/pipeline.md
CHANGED
|
@@ -28,7 +28,7 @@ The minimum roster per task type. The parent may add specialists on top — secu
|
|
|
28
28
|
5. **Two execution shapes**, chosen by host capability (same pattern as the [workflow {{SKILL}}](workflow.md)):
|
|
29
29
|
- *Deterministic:* where the host exposes a `workflow` tool, run a saved script encoding analyst → developer → (tester ⇄ developer)×≤5 → proof.
|
|
30
30
|
- *Model-driven fallback:* everywhere else, run the same stages via the [parallel-agents {{SKILL}}](parallel-agents.md) or sequential personas, with the same handoff envelopes and the same delivery contract.
|
|
31
|
-
6. On success, attach the mechanical proof to the branch (test + lint output, exit codes) and hand the result back to the parent for the merge decision — the pipeline never commits, pushes, or merges on its own ({{
|
|
31
|
+
6. On success, attach the mechanical proof to the branch (test + lint output, exit codes) and hand the result back to the parent for the merge decision — the pipeline never commits, pushes, or merges on its own ({{DOCTRINE}} process 5).
|
|
32
32
|
|
|
33
33
|
## Delivery contract
|
|
34
34
|
|
|
@@ -45,7 +45,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
45
45
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
46
46
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
47
47
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
48
|
-
clears {{
|
|
48
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
49
49
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
50
50
|
adding one; when in doubt, leave it out.
|
|
51
51
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/plan.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> {{DESC_PLAN}}
|
|
4
4
|
|
|
5
5
|
**Trigger:** a task with more than a couple of steps, or touching several files
|
|
6
|
-
(
|
|
6
|
+
({{DOCTRINE}} process 2).
|
|
7
7
|
|
|
8
8
|
## Procedure
|
|
9
9
|
1. If a design or spec already exists (e.g. from the brainstorm {{SKILL}}), derive the
|
|
@@ -38,7 +38,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
38
38
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
39
39
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
40
40
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
41
|
-
clears {{
|
|
41
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
42
42
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
43
43
|
adding one; when in doubt, leave it out.
|
|
44
44
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
package/src/skills/ponytail.md
CHANGED
|
@@ -22,7 +22,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
22
22
|
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
23
23
|
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
24
24
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
25
|
-
clears {{
|
|
25
|
+
clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
|
|
26
26
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
27
27
|
adding one; when in doubt, leave it out.
|
|
28
28
|
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|