geneseed 3.6.0 → 3.7.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 +49 -0
- package/DESIGN.md +6 -6
- package/QUICKSTART.md +1 -1
- package/README.md +32 -30
- package/SETUP.md +34 -8
- package/SHIPPED.md +3 -3
- package/adapters/claude-code/skills/geneseed/SKILL.md +1 -1
- package/adapters/openclaude/README.md +64 -0
- package/adapters/opencode/plugins/geneseed-workflow.js +1 -1
- package/adapters/opencode/workflows/_runtime.js +1 -1
- package/docs/extending.md +18 -6
- package/docs/web/exclusions.md +1 -0
- package/docs/web/footprint.md +1 -1
- package/docs/web/harnesses.md +14 -14
- package/docs/web/install-quick.md +1 -1
- package/docs/web/rules.md +1 -1
- package/docs/web/themes-author.md +1 -1
- package/docs/web-ui.md +1 -1
- package/harness.config.json +1 -1
- package/js/README.md +3 -3
- package/js/build/driver.mjs +50 -9
- package/js/build/emit-claude.mjs +1 -1
- package/js/build/generate.mjs +2 -1
- package/js/build/source.mjs +5 -4
- package/js/hosts/hooks.mjs +11 -4
- package/js/hosts/hosts.mjs +17 -2
- package/js/hosts/installs.mjs +32 -2
- package/js/hosts/mcp.mjs +8 -1
- package/js/hosts/settings.mjs +4 -1
- package/js/inspect/diff.mjs +1 -1
- package/js/inspect/doctor.mjs +3 -3
- package/js/inspect/excludes.mjs +7 -5
- package/js/inspect/status.mjs +4 -4
- package/js/maintain/migrate.mjs +1 -1
- package/js/maintain/setup.mjs +7 -2
- package/js/maintain/uninstall.mjs +3 -3
- package/js/web/actions.mjs +7 -5
- package/js/web/api.mjs +2 -2
- package/js/web/docs.mjs +1 -1
- package/package.json +2 -1
- package/src/doctrines/README.md +3 -2
- package/src/doctrines/comms.md +53 -0
- package/src/doctrines/process.md +0 -26
- package/src/skills/parallel-agents.md +1 -1
- package/src/skills/pipeline.md +1 -1
- package/src/skills/token-report/SKILL.md +2 -1
- package/src/skills/token-report/VENDOR.md +3 -3
- package/src/skills/token-report/scripts/token_report.mjs +14 -7
- package/src/skills/workflow.md +2 -2
- package/themes/_TEMPLATE.json +4 -2
- package/themes/biker.json +4 -2
- package/themes/commentator.json +4 -2
- package/themes/cyberpunk.json +4 -2
- package/themes/gamer.json +4 -2
- package/themes/imperial.json +4 -2
- package/themes/joker.json +4 -2
- package/themes/marvin.json +4 -2
- package/themes/mean.json +4 -2
- package/themes/military.json +4 -2
- package/themes/neutral.json +4 -2
- package/themes/pirate.json +4 -2
- package/themes/sports.json +4 -2
- package/themes/verstappen.json +4 -2
- package/themes/wizard.json +4 -2
- package/web/dist/assets/{Activity-Flgf4kHy.js → Activity-CH-7cPIM.js} +1 -1
- package/web/dist/assets/{ActivityDetail-DIpr85nh.js → ActivityDetail-DZvz0xS5.js} +1 -1
- package/web/dist/assets/{CatalogRow-CjyLjaLb.js → CatalogRow-DftXpZHY.js} +1 -1
- package/web/dist/assets/{Diff-Deisdha8.js → Diff-DvwdG0L9.js} +1 -1
- package/web/dist/assets/{Docs-DGUdY4l4.js → Docs-DrJNDPwI.js} +1 -1
- package/web/dist/assets/{Doctor-F74lJ69P.js → Doctor-OTmwmYZg.js} +1 -1
- package/web/dist/assets/{GreenhouseView-D072lBiD.js → GreenhouseView-XxrAdriX.js} +1 -1
- package/web/dist/assets/Harness-C_LYNk5c.js +1 -0
- package/web/dist/assets/{JournalView-DWFqZ0Iw.js → JournalView-BcuyeEaR.js} +1 -1
- package/web/dist/assets/{Laws-BN6g3HU7.js → Laws-CWHrTKY4.js} +1 -1
- package/web/dist/assets/{Library-CDOv4emM.js → Library-CA9IHghn.js} +1 -1
- package/web/dist/assets/{OperatorHudView-CwNIUVX8.js → OperatorHudView-BMRY1Tt4.js} +1 -1
- package/web/dist/assets/{Profile-CpP9BTne.js → Profile-wceET1JY.js} +1 -1
- package/web/dist/assets/{Rules-DFXsUCB7.js → Rules-BEXvY4Tx.js} +1 -1
- package/web/dist/assets/{Settings-BqZVUtJ5.js → Settings-DS2zF0Ez.js} +1 -1
- package/web/dist/assets/{Skills-Cu6kBgfF.js → Skills-DahlOJuI.js} +1 -1
- package/web/dist/assets/{drawable-BgfrEBer.js → drawable-BTHjTzF7.js} +1 -1
- package/web/dist/assets/{index-CAqrWhKl.js → index-AN5Emnrg.js} +2 -2
- package/web/dist/assets/{lawCats-BLgxl151.js → lawCats-Btjp3Hk_.js} +1 -1
- package/web/dist/index.html +1 -1
- package/web/src/pages/Laws.jsx +6 -2
- package/web/dist/assets/Harness-DNRP2Va7.js +0 -1
package/js/maintain/setup.mjs
CHANGED
|
@@ -228,6 +228,7 @@ const DOCTRINE_BLURBS = {
|
|
|
228
228
|
ops: 'how the machine is driven — tool discovery, non-blocking commands, teardown',
|
|
229
229
|
process: 'how a session runs — planning, context economy, docs first, and the consent gate '
|
|
230
230
|
+ 'on every commit and push (drop this pack and that gate goes with it)',
|
|
231
|
+
comms: 'how answers are presented — stable reference codes, a diagram or a table only where it earns its place',
|
|
231
232
|
};
|
|
232
233
|
|
|
233
234
|
/**
|
|
@@ -279,7 +280,7 @@ export function doctrineOptions() {
|
|
|
279
280
|
/**
|
|
280
281
|
* `_harness_setup.EMIT_OPTIONS`.
|
|
281
282
|
*
|
|
282
|
-
* Exported since P6b: `/api/themes` returns the same
|
|
283
|
+
* Exported since P6b: `/api/themes` returns the same eleven as its `emits` list, and a copy
|
|
283
284
|
* of a table under test silently stops being the table under test.
|
|
284
285
|
*/
|
|
285
286
|
export const EMIT_OPTIONS = [
|
|
@@ -292,6 +293,10 @@ export const EMIT_OPTIONS = [
|
|
|
292
293
|
['copilot-global', 'GitHub Copilot personal config dir (~/.copilot) — copilot-instructions.md, agents, skills.'],
|
|
293
294
|
['copilot', 'Per-repo AGENTS.md + .github/ for GitHub Copilot, committed into one repository.'],
|
|
294
295
|
['files', 'Plain bundle for any AGENT.md tool.'],
|
|
296
|
+
// Appended AFTER `files`, not beside the other hosts: the menu is answered by number, and a
|
|
297
|
+
// scripted `setup` that pipes its answers must keep meaning what it meant.
|
|
298
|
+
['openclaude-global', 'OpenClaude global config dir (~/.openclaude) — CLAUDE.md, agents, skills, hooks.'],
|
|
299
|
+
['openclaude', 'Per-repo .openclaude/ (CLAUDE.md, agents, skills, hooks) for OpenClaude, committed into one repository.'],
|
|
295
300
|
];
|
|
296
301
|
|
|
297
302
|
/** `_harness_setup.FOOTPRINT_OPTIONS`. */
|
|
@@ -375,7 +380,7 @@ export function collectSetupLines() {
|
|
|
375
380
|
// Every PROJECT emit needs the repo root — claude/bob/copilot included: without `--out`
|
|
376
381
|
// their CLAUDE.md/.claude land in the generator's default ./Harness, where the host never
|
|
377
382
|
// looks.
|
|
378
|
-
if (['opencode', 'claude', 'bob', 'copilot'].includes(emit)) {
|
|
383
|
+
if (['opencode', 'claude', 'bob', 'copilot', 'openclaude'].includes(emit)) {
|
|
379
384
|
root = ask('Repo root to install into', '.');
|
|
380
385
|
out = root;
|
|
381
386
|
} else if (emit === 'files') {
|
|
@@ -71,7 +71,7 @@ import { comparePaths, isAbsolutePath, within } from '../lib/paths.mjs';
|
|
|
71
71
|
const hostSpec = (host) => HOSTS.find((h) => h.host === host);
|
|
72
72
|
|
|
73
73
|
/** The Claude-STYLE hosts — one manifest shape, one reversal. Spelled once. */
|
|
74
|
-
const CLAUDE_STYLE = ['claude', 'bob', 'copilot'];
|
|
74
|
+
const CLAUDE_STYLE = ['claude', 'bob', 'copilot', 'openclaude'];
|
|
75
75
|
|
|
76
76
|
/**
|
|
77
77
|
* `shutil.rmtree(p, ignore_errors=True)`.
|
|
@@ -681,7 +681,7 @@ export function cmdUninstall(args) {
|
|
|
681
681
|
const targetDesc = resolvePath(expanduser(args.target));
|
|
682
682
|
printErr(`[uninstall] no Geneseed install detected at ${targetDesc}.\n`
|
|
683
683
|
+ '[uninstall] pass --target <repo> for a project install (.opencode/.claude/'
|
|
684
|
-
+ '.bob/.github) or --target <config dir> for a global one.\n');
|
|
684
|
+
+ '.bob/.github/.openclaude) or --target <config dir> for a global one.\n');
|
|
685
685
|
return 1;
|
|
686
686
|
}
|
|
687
687
|
const [host, scope, root] = hit;
|
|
@@ -700,7 +700,7 @@ export function cmdUninstall(args) {
|
|
|
700
700
|
+ `${hostSpec(host).agentFile} managed block, and Geneseed's `
|
|
701
701
|
+ '~/.copilot/settings.json hooks on a global install (your own keys/hooks and '
|
|
702
702
|
+ '.github files are kept).\n');
|
|
703
|
-
} else if (
|
|
703
|
+
} else if (['claude', 'bob', 'openclaude'].includes(host)) {
|
|
704
704
|
printOut('[uninstall] removes: agents/, skills/, markers, the '
|
|
705
705
|
+ `${hostSpec(host).agentFile} managed block, and Geneseed's `
|
|
706
706
|
+ 'settings.json hooks/excludes (your own keys/hooks are kept).\n');
|
package/js/web/actions.mjs
CHANGED
|
@@ -41,8 +41,8 @@ import { excludeAdd, excludeRemove } from '../inspect/excludes.mjs';
|
|
|
41
41
|
import { setupBuildArgs } from '../build/generate.mjs';
|
|
42
42
|
import { frontmatter, memoryDropIndex } from '../hosts/hooks.mjs';
|
|
43
43
|
import {
|
|
44
|
-
HOSTS, bobConfigDir, claudeConfigDir, copilotConfigDir, expanduser,
|
|
45
|
-
resolvePath,
|
|
44
|
+
HOSTS, bobConfigDir, claudeConfigDir, copilotConfigDir, expanduser, openclaudeConfigDir,
|
|
45
|
+
opencodeConfigDir, resolvePath,
|
|
46
46
|
} from '../hosts/hosts.mjs';
|
|
47
47
|
import {
|
|
48
48
|
EMIT_HOST_SCOPE, doctrinesForBuild, excludedRulesOfDir, footprintOfDir, installState,
|
|
@@ -644,7 +644,7 @@ export function apiMcpToggle(state, body) {
|
|
|
644
644
|
return { ok: false, error: 'config holds comments — edit it by hand to keep them' };
|
|
645
645
|
}
|
|
646
646
|
let cfg;
|
|
647
|
-
if (['claude', 'bob', 'copilot'].includes(host)) {
|
|
647
|
+
if (['claude', 'bob', 'copilot', 'openclaude'].includes(host)) {
|
|
648
648
|
if (isFile(p)) {
|
|
649
649
|
let parsed;
|
|
650
650
|
try {
|
|
@@ -817,6 +817,7 @@ const EMIT_FOR = new Map([
|
|
|
817
817
|
['claude global', 'claude-global'], ['claude project', 'claude'],
|
|
818
818
|
['bob global', 'bob-global'], ['bob project', 'bob'],
|
|
819
819
|
['copilot global', 'copilot-global'], ['copilot project', 'copilot'],
|
|
820
|
+
['openclaude global', 'openclaude-global'], ['openclaude project', 'openclaude'],
|
|
820
821
|
]);
|
|
821
822
|
|
|
822
823
|
/**
|
|
@@ -951,7 +952,8 @@ export function apiDeployCmd(state, body) {
|
|
|
951
952
|
return { error: `folder not writable: ${root}` };
|
|
952
953
|
}
|
|
953
954
|
const cfgdirs = new Set();
|
|
954
|
-
for (const fn of [opencodeConfigDir, claudeConfigDir, bobConfigDir, copilotConfigDir
|
|
955
|
+
for (const fn of [opencodeConfigDir, claudeConfigDir, bobConfigDir, copilotConfigDir,
|
|
956
|
+
openclaudeConfigDir]) {
|
|
955
957
|
try {
|
|
956
958
|
cfgdirs.add(resolvePath(fn()));
|
|
957
959
|
} catch { /* not every host has a resolvable config dir; skip it */ }
|
|
@@ -976,7 +978,7 @@ export function apiDeployCmd(state, body) {
|
|
|
976
978
|
// and `PreToolUse::Bash` went with them. `doctrinesForBuild` resolves unknown to ALL packs.
|
|
977
979
|
const doctrines = bodyDoctrines(body) ?? doctrinesForBuild(root);
|
|
978
980
|
const excludeRules = bodyExcludeRules(body) ?? excludedRulesOfDir(root);
|
|
979
|
-
// project-scope emit name == host name (opencode / claude / bob / copilot)
|
|
981
|
+
// project-scope emit name == host name (opencode / claude / bob / copilot / openclaude)
|
|
980
982
|
const argv = setupBuildArgs(theme || 'neutral', host, root, root, fp, pos, mode, doctrines,
|
|
981
983
|
PACK_ORDER, excludeRules);
|
|
982
984
|
return { cmd: [process.execPath, path.join(ROOT, 'bin', 'build-driver.mjs'), ...argv] };
|
package/js/web/api.mjs
CHANGED
|
@@ -724,7 +724,7 @@ export const apiExcludes = () => excludesSnapshot();
|
|
|
724
724
|
* nested-marker host cannot silently read the bare root.
|
|
725
725
|
*/
|
|
726
726
|
export function viewCfg(host, scope, root) {
|
|
727
|
-
if (scope === 'project' && ['claude', 'bob', 'copilot'].includes(host)) {
|
|
727
|
+
if (scope === 'project' && ['claude', 'bob', 'copilot', 'openclaude'].includes(host)) {
|
|
728
728
|
return path.join(root, HOSTS.find((h) => h.host === host).projectMarker);
|
|
729
729
|
}
|
|
730
730
|
return root;
|
|
@@ -790,7 +790,7 @@ export function apiOverview(state) {
|
|
|
790
790
|
// can re-emit exactly it. Mirrors `viewCfg`'s rule, spelled out separately here.
|
|
791
791
|
let install = null;
|
|
792
792
|
for (const [host, scope, root] of installTargets()) {
|
|
793
|
-
const data = (scope === 'project' && ['claude', 'bob', 'copilot'].includes(host))
|
|
793
|
+
const data = (scope === 'project' && ['claude', 'bob', 'copilot', 'openclaude'].includes(host))
|
|
794
794
|
? path.join(root, HOSTS.find((h) => h.host === host).projectMarker) : root;
|
|
795
795
|
try {
|
|
796
796
|
if (samePath(data, state.target)) {
|
package/js/web/docs.mjs
CHANGED
|
@@ -207,7 +207,7 @@ const HARNESS_HINT_RE = /<!--\s*harness:/;
|
|
|
207
207
|
export function normHarness(value, state) {
|
|
208
208
|
const v = (value || '').trim().toLowerCase();
|
|
209
209
|
if (HARNESSES.includes(v)) return v;
|
|
210
|
-
return String(state.emit || '')
|
|
210
|
+
return /^(claude|openclaude)/.test(String(state.emit || '')) ? 'claude' : 'opencode';
|
|
211
211
|
}
|
|
212
212
|
|
|
213
213
|
/**
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"//": "Every field here is argued and gated in tests/unit/package_manifest.test.mjs. `files`, `bin` and `engines` each have a test that fails when reality drifts from this file; `version` mirrors harness.config.json and is gated too. Read that docblock before editing this one.",
|
|
3
3
|
"name": "geneseed",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.7.0",
|
|
5
5
|
"description": "A portable, theme-able harness you implant once and use everywhere to grow a disciplined AI coding agent.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"ai",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"claude-code",
|
|
10
10
|
"opencode",
|
|
11
11
|
"copilot",
|
|
12
|
+
"openclaude",
|
|
12
13
|
"agents-md",
|
|
13
14
|
"skills",
|
|
14
15
|
"harness",
|
package/src/doctrines/README.md
CHANGED
|
@@ -8,7 +8,7 @@ documentation repo and a production service do not need the same practices.
|
|
|
8
8
|
The selected packs are inlined into `AGENT.md`'s Doctrines section at build time;
|
|
9
9
|
every pack ships here as a catalogue so you can read the alternatives and switch.
|
|
10
10
|
Change the active set by rebuilding with `--doctrines <list>` (or via the setup
|
|
11
|
-
wizard); the choice is stored in `harness.config.json`. All
|
|
11
|
+
wizard); the choice is stored in `harness.config.json`. All five are active by
|
|
12
12
|
default.
|
|
13
13
|
|
|
14
14
|
A pack is **orthogonal to theme and posture**: the theme sets the *voice*, the
|
|
@@ -21,9 +21,10 @@ composes.
|
|
|
21
21
|
| [rigor](rigor.md) | How work is proven — idempotence, honest tests, coverage, gates that can fail. |
|
|
22
22
|
| [ops](ops.md) | How the machine is operated — tool discovery, non-blocking commands, source-layer edits, teardown. |
|
|
23
23
|
| [process](process.md) | How a task is run — planning, context economy, docs-first, consent before push. |
|
|
24
|
+
| [comms](comms.md) | How answers are presented — stable reference codes, a diagram or a table only where it earns its place. |
|
|
24
25
|
|
|
25
26
|
A rule in one pack may cite a rule in another. That is safe because the **full
|
|
26
|
-
catalogue ships in every bundle** — all
|
|
27
|
+
catalogue ships in every bundle** — all five pack files are installed whether or not
|
|
27
28
|
their pack is built into `AGENT.md` — so a cross-pack reference is always readable
|
|
28
29
|
even when the pack it names is not active.
|
|
29
30
|
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
**{{PACK_COMMS}}** — how answers are presented.
|
|
2
|
+
|
|
3
|
+
### {{DOCTRINE}} comms 1 — {{DOC_COMMS_1}}
|
|
4
|
+
<!-- LEAN:begin -->
|
|
5
|
+
Give every tracked item a short reference code and keep it unchanged for the rest of
|
|
6
|
+
the session — `D` decisions, `O` options, `F` findings, `R` risks, `Q` questions,
|
|
7
|
+
`A` actions. The trigger is countable: any reply naming two or more such items takes
|
|
8
|
+
codes, a {{SKILL}}'s or an {{AGENT}}'s report included, whatever layout its template
|
|
9
|
+
shows; a reply with one item or none takes none. The code opens the item's line —
|
|
10
|
+
`**F1** — the token is logged in plain text`, `**Q2** — keep the v1 route?` — not a
|
|
11
|
+
bare `1.` or a bullet. Number from one within each kind, keep counting across turns
|
|
12
|
+
(the next finding after `F3` is `F4`, even three replies later), invent a new letter
|
|
13
|
+
for a kind the list omits, and never renumber a code once issued — the user will cite
|
|
14
|
+
it back, and a moved code makes their reply mean something you did not say. A code is an address, not an ornament:
|
|
15
|
+
it lets a long exchange be answered by reference, and a decision taken on turn
|
|
16
|
+
three still be named on turn thirty. Where the {{ONTOLOGY}}'s {{ONT_CONDUCT}}
|
|
17
|
+
governs how an answer speaks, this is only the addressing convention — a practice
|
|
18
|
+
a repository adopts or drops like any other rule in these {{DOCTRINES}}.
|
|
19
|
+
<!-- LEAN:else -->
|
|
20
|
+
Give every tracked item a short reference code, unchanged for the session —
|
|
21
|
+
`D` decisions, `O` options, `F` findings, `R` risks, `Q` questions, `A` actions.
|
|
22
|
+
Any reply naming two or more such items takes codes, a {{SKILL}}'s or {{AGENT}}'s
|
|
23
|
+
report included; one item or none takes none. The code opens the line, never a bare
|
|
24
|
+
`1.` or bullet: `**F1** — token logged in plain text`, `**Q2** — keep the v1 route?`
|
|
25
|
+
Number from one within each kind and keep counting across turns (after `F3` comes
|
|
26
|
+
`F4`), invent letters for missing kinds, never renumber a code once issued.
|
|
27
|
+
<!-- LEAN:end -->
|
|
28
|
+
|
|
29
|
+
### {{DOCTRINE}} comms 2 — {{DOC_COMMS_2}}
|
|
30
|
+
<!-- LEAN:begin -->
|
|
31
|
+
Prose and structure are distinct: beside the prose, pick **either** a diagram **or** a
|
|
32
|
+
table — whichever the matter needs, rarely both — and let the prose keep the context, the
|
|
33
|
+
why, the pitfall and the decision. Draw a boxes-and-arrows diagram only when its arrows
|
|
34
|
+
carry meaning: links to follow (a flow, a sequence, dependencies, a causal chain, a
|
|
35
|
+
topology), a visual or spatial subject, four or more interlinked elements, or when the
|
|
36
|
+
user asks. The test: erase the arrows — if nothing is lost, it was never a diagram.
|
|
37
|
+
Classifications, inventories and attribute comparisons take a table or a list; a chain of
|
|
38
|
+
three steps or fewer stays inline (`A -> B -> C`); a trivial fact stays plain text. A small
|
|
39
|
+
diagram replaces prose only where the prose would run long describing a structure. The
|
|
40
|
+
medium follows the surface: ASCII diagrams and tables in a terminal, Mermaid in markdown
|
|
41
|
+
that renders it; for a situation too dense for ASCII, offer a richer rendered page in one
|
|
42
|
+
line, never build one unasked. This is strictly additive to {{DOCTRINE}} comms 1: tracked
|
|
43
|
+
items keep their codes, one coded line each, and a diagram or table may carry a code as a
|
|
44
|
+
tag but never absorbs, merges or renumbers an item.
|
|
45
|
+
<!-- LEAN:else -->
|
|
46
|
+
Prose and structure are distinct: beside the prose, pick a diagram or a table, rarely
|
|
47
|
+
both; prose keeps the why and the decision. Draw a diagram only when its arrows carry
|
|
48
|
+
meaning — flow, dependencies, topology, a spatial subject, four or more linked elements,
|
|
49
|
+
or on request; if erasing them loses nothing, use a table or list. Three steps or fewer
|
|
50
|
+
stay inline (`A -> B -> C`). ASCII in a terminal, Mermaid where markdown renders; offer a
|
|
51
|
+
rendered page in one line, never unasked. Codes stay ({{DOCTRINE}} comms 1): a diagram
|
|
52
|
+
may tag an item, never absorb or renumber it.
|
|
53
|
+
<!-- LEAN:end -->
|
package/src/doctrines/process.md
CHANGED
|
@@ -130,32 +130,6 @@ stalls, halt with a structured summary of what was tried, learned, and remains (
|
|
|
130
130
|
|
|
131
131
|
### {{DOCTRINE}} process 7 — {{DOC_PROCESS_7}}
|
|
132
132
|
<!-- LEAN:begin -->
|
|
133
|
-
Give every tracked item a short reference code and keep it unchanged for the rest of
|
|
134
|
-
the session — `D` decisions, `O` options, `F` findings, `R` risks, `Q` questions,
|
|
135
|
-
`A` actions. The trigger is countable: any reply naming two or more such items takes
|
|
136
|
-
codes, a {{SKILL}}'s or an {{AGENT}}'s report included, whatever layout its template
|
|
137
|
-
shows; a reply with one item or none takes none. The code opens the item's line —
|
|
138
|
-
`**F1** — the token is logged in plain text`, `**Q2** — keep the v1 route?` — not a
|
|
139
|
-
bare `1.` or a bullet. Number from one within each kind, keep counting across turns
|
|
140
|
-
(the next finding after `F3` is `F4`, even three replies later), invent a new letter
|
|
141
|
-
for a kind the list omits, and never renumber a code once issued — the user will cite
|
|
142
|
-
it back, and a moved code makes their reply mean something you did not say. A code is an address, not an ornament:
|
|
143
|
-
it lets a long exchange be answered by reference, and a decision taken on turn
|
|
144
|
-
three still be named on turn thirty. Where the {{ONTOLOGY}}'s {{ONT_CONDUCT}}
|
|
145
|
-
governs how an answer speaks, this is only the addressing convention — a practice
|
|
146
|
-
a repository adopts or drops like any other rule in these {{DOCTRINES}}.
|
|
147
|
-
<!-- LEAN:else -->
|
|
148
|
-
Give every tracked item a short reference code, unchanged for the session —
|
|
149
|
-
`D` decisions, `O` options, `F` findings, `R` risks, `Q` questions, `A` actions.
|
|
150
|
-
Any reply naming two or more such items takes codes, a {{SKILL}}'s or {{AGENT}}'s
|
|
151
|
-
report included; one item or none takes none. The code opens the line, never a bare
|
|
152
|
-
`1.` or bullet: `**F1** — token logged in plain text`, `**Q2** — keep the v1 route?`
|
|
153
|
-
Number from one within each kind and keep counting across turns (after `F3` comes
|
|
154
|
-
`F4`), invent letters for missing kinds, never renumber a code once issued.
|
|
155
|
-
<!-- LEAN:end -->
|
|
156
|
-
|
|
157
|
-
### {{DOCTRINE}} process 8 — {{DOC_PROCESS_8}}
|
|
158
|
-
<!-- LEAN:begin -->
|
|
159
133
|
When several {{AGENTS}} work on the same code — sub-{{AGENTS}}, a pipeline crew, a
|
|
160
134
|
workflow fan-out, another session or tool in this checkout — each file has one writer at
|
|
161
135
|
a time. Before dispatch, give every unit a **write set** (the files or globs it may
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
**Trigger:** two or more independent subtasks with no shared state or ordering between them — and a tool that can run subagents.
|
|
6
6
|
|
|
7
7
|
## Procedure
|
|
8
|
-
1. Confirm independence: the subtasks must not depend on each other's output or write the same files ({{DOCTRINE}} process
|
|
8
|
+
1. Confirm independence: the subtasks must not depend on each other's output or write the same files ({{DOCTRINE}} process 7). Write down each unit's **write set** — the files or globs it may change — and intersect them; an overlap runs in sequence or goes to one owner, and shared append files (registries, index tables, lockfiles, generated bundles) stay with you. 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
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 **write set** (edit nothing outside it; return rows for a shared file instead of writing it), the observable check that proves it done, its output contract — naming every file it changed — and the inherited constraints (no commit/push — {{DOCTRINE}} process 5 stays with you; gaps reported, never invented). Hand each unit only the access its goal needs ({{LAW}} VII). 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.
|
package/src/skills/pipeline.md
CHANGED
|
@@ -23,7 +23,7 @@ The minimum roster per task type. The parent may add specialists on top — secu
|
|
|
23
23
|
|
|
24
24
|
1. Confirm the task is genuinely substantial — a trivial one-file tweak or a question does not warrant a crew; do it directly instead.
|
|
25
25
|
2. Compose the crew from the floor above, adding specialists only where the task demands them.
|
|
26
|
-
3. Isolate the crew's work in its own git worktree/branch (the SETUP.md worktree add-on). Where worktrees are unavailable, fall back to a single tree, one pipeline at a time, and say so. Give the crew a **write set** and check it against every other pipeline in flight ({{DOCTRINE}} process
|
|
26
|
+
3. Isolate the crew's work in its own git worktree/branch (the SETUP.md worktree add-on). Where worktrees are unavailable, fall back to a single tree, one pipeline at a time, and say so. Give the crew a **write set** and check it against every other pipeline in flight ({{DOCTRINE}} process 7): two crews whose sets overlap do not run at once, and shared append files (registries, index tables, lockfiles, generated bundles) are the parent's to apply, never a crew's.
|
|
27
27
|
4. **The dev↔tester loop:** the developer implements, the tester validates — runs the tests and lint, produces raw logs. On failure, the findings go back to the developer. Cap at **5** iterations; on exhaustion, stop, do not merge, and report the failure with the branch left in place for inspection.
|
|
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.
|
|
@@ -28,9 +28,10 @@ picking the most recently active source:
|
|
|
28
28
|
| Claude Code | `~/.claude/projects/<slug>/*.jsonl` | exact usage per request |
|
|
29
29
|
| IBM Bob | `~/.bob/projects/<slug>/*.jsonl` (Claude-shaped, `$BOB_CONFIG_DIR` honoured) | exact usage per request |
|
|
30
30
|
| OpenCode | `~/.local/share/opencode/opencode.db` (SQLite, v1.2+; pre-1.2 falls back to `storage/` JSON files) | exact `tokens` per request; child sessions attributed as subagents |
|
|
31
|
+
| OpenClaude | `~/.openclaude/projects/<slug>/*.jsonl` (Claude-shaped, `$OPENCLAUDE_CONFIG_DIR` honoured) | exact usage per request |
|
|
31
32
|
| GitHub Copilot | `~/.copilot/history-session-state/` | best effort — undocumented schema; token-like fields harvested, else estimates only |
|
|
32
33
|
|
|
33
|
-
Useful flags: `--host claude|bob|opencode|copilot` to force a host,
|
|
34
|
+
Useful flags: `--host claude|bob|openclaude|opencode|copilot` to force a host,
|
|
34
35
|
`--transcript <path>` / `--session <id>` for a specific session,
|
|
35
36
|
`--limit <tokens>` for the context-window limit used in the % columns
|
|
36
37
|
(default 200000), `--top <n>` for the heaviest-items list.
|
|
@@ -5,7 +5,7 @@ not third-party. It rides the vendored-folder mechanism because it bundles an
|
|
|
5
5
|
executable (`scripts/token_report.mjs`) and Geneseed's flat-skill pipeline renders
|
|
6
6
|
single `.md` files only. Listing it in the generator's `VENDORED_SKILL_DIRS`
|
|
7
7
|
makes the whole folder ride along verbatim into every host emit — Claude Code,
|
|
8
|
-
IBM Bob, OpenCode, GitHub Copilot — which is exactly what a multi-file skill needs.
|
|
8
|
+
IBM Bob, OpenCode, GitHub Copilot, OpenClaude — which is exactly what a multi-file skill needs.
|
|
9
9
|
|
|
10
10
|
- **Upstream:** this repository (first-party)
|
|
11
11
|
- **License:** same as Geneseed (see repository LICENSE)
|
|
@@ -17,7 +17,7 @@ Consequences of riding this mechanism (deliberate):
|
|
|
17
17
|
`description` and blockquote purpose line instead;
|
|
18
18
|
- listed in AGENT.md's folder-skills section, not the main skills table.
|
|
19
19
|
|
|
20
|
-
The script supports all
|
|
21
|
-
OpenCode; best-effort on Copilot, whose session-state schema is undocumented).
|
|
20
|
+
The script supports all five emitted hosts (exact usage on Claude Code, Bob,
|
|
21
|
+
OpenClaude and OpenCode; best-effort on Copilot, whose session-state schema is undocumented).
|
|
22
22
|
If a host changes its session storage layout, fix the corresponding finder or
|
|
23
23
|
parser in `scripts/token_report.mjs`.
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
* (SQLite, v1.2+: session/message/part tables,
|
|
12
12
|
* JSON `data` columns; falls back to the pre-1.2
|
|
13
13
|
* storage/ JSON files when no DB exists)
|
|
14
|
+
* openclaude OpenClaude ~/.openclaude/projects/<slug>/<session>.jsonl exact usage
|
|
15
|
+
* (Claude Code fork; $OPENCLAUDE_CONFIG_DIR honoured)
|
|
14
16
|
* copilot GitHub Copilot ~/.copilot/history-session-state/ best effort
|
|
15
17
|
* (schema undocumented; token fields harvested
|
|
16
18
|
* generically, estimates otherwise)
|
|
@@ -485,13 +487,14 @@ class SessionData {
|
|
|
485
487
|
}
|
|
486
488
|
|
|
487
489
|
// ---------------------------------------------------------------------------
|
|
488
|
-
// Host: Claude Code / IBM Bob (same transcript shape, different config root)
|
|
490
|
+
// Host: Claude Code / IBM Bob / OpenClaude (same transcript shape, different config root)
|
|
489
491
|
// ---------------------------------------------------------------------------
|
|
490
492
|
|
|
491
493
|
const slugify = (p) => p.replace(/[^A-Za-z0-9]/g, '-');
|
|
492
494
|
|
|
493
495
|
function claudeShapedRoot(host) {
|
|
494
|
-
const env = { claude: 'CLAUDE_CONFIG_DIR', bob: 'BOB_CONFIG_DIR'
|
|
496
|
+
const env = { claude: 'CLAUDE_CONFIG_DIR', bob: 'BOB_CONFIG_DIR',
|
|
497
|
+
openclaude: 'OPENCLAUDE_CONFIG_DIR' }[host];
|
|
495
498
|
const root = process.env[env] || path.join(homedir(), `.${host}`);
|
|
496
499
|
return isDir(path.join(root, 'projects')) ? root : null;
|
|
497
500
|
}
|
|
@@ -1017,6 +1020,7 @@ async function detect(hostArg, transcript, session) {
|
|
|
1017
1020
|
const finders = {
|
|
1018
1021
|
claude: () => claudeShapedFind('claude', transcript),
|
|
1019
1022
|
bob: () => claudeShapedFind('bob', transcript),
|
|
1023
|
+
openclaude: () => claudeShapedFind('openclaude', transcript),
|
|
1020
1024
|
opencode: () => opencodeFind(session),
|
|
1021
1025
|
copilot: () => copilotFind(transcript),
|
|
1022
1026
|
};
|
|
@@ -1042,13 +1046,13 @@ async function detect(hostArg, transcript, session) {
|
|
|
1042
1046
|
}
|
|
1043
1047
|
if (!best) {
|
|
1044
1048
|
sysExit('error: no session data found for any supported host '
|
|
1045
|
-
+ '(claude, bob, opencode, copilot)');
|
|
1049
|
+
+ '(claude, bob, openclaude, opencode, copilot)');
|
|
1046
1050
|
}
|
|
1047
1051
|
return [best[0], best[1]];
|
|
1048
1052
|
}
|
|
1049
1053
|
|
|
1050
1054
|
async function load(host, found) {
|
|
1051
|
-
if (
|
|
1055
|
+
if (['claude', 'bob', 'openclaude'].includes(host)) return claudeShapedParse(host, found);
|
|
1052
1056
|
if (host === 'opencode') {
|
|
1053
1057
|
const [kind, payload] = found;
|
|
1054
1058
|
if (kind === 'db') return opencodeDbParse(...payload);
|
|
@@ -1058,7 +1062,10 @@ async function load(host, found) {
|
|
|
1058
1062
|
return copilotParse(found);
|
|
1059
1063
|
}
|
|
1060
1064
|
|
|
1061
|
-
const HOST_NAMES = {
|
|
1065
|
+
const HOST_NAMES = {
|
|
1066
|
+
claude: 'Claude Code', bob: 'IBM Bob', openclaude: 'OpenClaude', opencode: 'OpenCode',
|
|
1067
|
+
copilot: 'GitHub Copilot',
|
|
1068
|
+
};
|
|
1062
1069
|
|
|
1063
1070
|
function render(d, limit, topN) {
|
|
1064
1071
|
const out = [`# Token usage report — ${HOST_NAMES[d.host] ?? d.host}`, ''];
|
|
@@ -1188,11 +1195,11 @@ function render(d, limit, topN) {
|
|
|
1188
1195
|
// ---------------------------------------------------------------------------
|
|
1189
1196
|
|
|
1190
1197
|
const PROG = path.basename(process.argv[1] ?? 'token_report.mjs');
|
|
1191
|
-
const HOST_CHOICES = ['claude', 'bob', 'opencode', 'copilot'];
|
|
1198
|
+
const HOST_CHOICES = ['claude', 'bob', 'openclaude', 'opencode', 'copilot'];
|
|
1192
1199
|
const OPTIONS = [
|
|
1193
1200
|
['-h, --help', 'show this help message and exit'],
|
|
1194
1201
|
[`--host {${HOST_CHOICES.join(',')}}`, 'force a host instead of auto-detecting by recency'],
|
|
1195
|
-
['--transcript TRANSCRIPT', 'explicit transcript path (claude/bob/copilot)'],
|
|
1202
|
+
['--transcript TRANSCRIPT', 'explicit transcript path (claude/bob/openclaude/copilot)'],
|
|
1196
1203
|
['--session SESSION', 'explicit session id (opencode)'],
|
|
1197
1204
|
['--limit LIMIT', 'context window limit for % columns (default 200000)'],
|
|
1198
1205
|
['--top TOP', 'how many heaviest single items to list (default 5)'],
|
package/src/skills/workflow.md
CHANGED
|
@@ -23,7 +23,7 @@ work is worth a crew: a one-file tweak or a question never is.
|
|
|
23
23
|
|---|---|---|---|
|
|
24
24
|
| OpenCode | `workflow` (the `geneseed-workflow` plugin) | **saved only** — `<name>.js` in `.opencode/workflows/` per repo or `<config>/workflows/` global (`GENESEED_WORKFLOWS_DIR` overrides); nothing inline is eval'd | none — call it when the shape fits |
|
|
25
25
|
| Claude Code | `Workflow` (native) | a saved `.claude/workflows/<name>` by `name`, **or** an inline `script` you author | **required** — the tool refuses unless the user opted in for this task ("use a workflow", "ultracode", a skill that says so) |
|
|
26
|
-
| Bob, Copilot | none | — | fall back to [parallel-agents](parallel-agents.md) / [council](council.md) |
|
|
26
|
+
| Bob, Copilot, OpenClaude | none | — | fall back to [parallel-agents](parallel-agents.md) / [council](council.md) |
|
|
27
27
|
| any, under Orca | Orca orchestration (`orca skills get orchestration`) | tasks, not scripts — each task spec names its target, change, ownership and acceptance | the user asked to supervise or coordinate workers |
|
|
28
28
|
|
|
29
29
|
Both runtimes speak the same primitives — `agent()`, `parallel()`, `pipeline()`,
|
|
@@ -60,7 +60,7 @@ carries the script API — load it before writing one).
|
|
|
60
60
|
to the primitives, and hold to the host's size guideline unless the user asked for
|
|
61
61
|
more.
|
|
62
62
|
4. **Give every editing agent a write set, and isolate parallel editors** ({{DOCTRINE}}
|
|
63
|
-
process
|
|
63
|
+
process 7). Name in each editing `agent()` prompt the files it may change and have it
|
|
64
64
|
return the files it did change; overlapping sets run in sequence, not in one
|
|
65
65
|
`parallel()`. Pass `isolation: 'worktree'` to each agent that edits in parallel — both
|
|
66
66
|
runtimes take it; read-only agents need none. After the fan-out, compare the changed
|
package/themes/_TEMPLATE.json
CHANGED
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
"PACK_RIGOR": "<display name of the rigor doctrine pack — how work is proven>",
|
|
91
91
|
"PACK_OPS": "<display name of the ops doctrine pack — how the machine is driven>",
|
|
92
92
|
"PACK_PROCESS": "<display name of the process doctrine pack — how a session runs>",
|
|
93
|
+
"PACK_COMMS": "<display name of the comms doctrine pack — how answers are presented>",
|
|
93
94
|
"DOC_CRAFT_1": "<themed title for craft doctrine 1 (Automate Repetition)>",
|
|
94
95
|
"DOC_CRAFT_2": "<themed title for craft doctrine 2 (English Configuration)>",
|
|
95
96
|
"DOC_CRAFT_3": "<themed title for craft doctrine 3 (Documentation in Step)>",
|
|
@@ -115,8 +116,9 @@
|
|
|
115
116
|
"DOC_PROCESS_4": "<themed title for process doctrine 4 (Read the Docs First)>",
|
|
116
117
|
"DOC_PROCESS_5": "<themed title for process doctrine 5 (Consent Before Push)>",
|
|
117
118
|
"DOC_PROCESS_6": "<themed title for process doctrine 6 (Bound the Loop)>",
|
|
118
|
-
"DOC_PROCESS_7": "<themed title for process doctrine 7 (
|
|
119
|
-
"
|
|
119
|
+
"DOC_PROCESS_7": "<themed title for process doctrine 7 (One Writer Per File)>",
|
|
120
|
+
"DOC_COMMS_1": "<themed title for comms doctrine 1 (Codes That Persist)>",
|
|
121
|
+
"DOC_COMMS_2": "<themed title for comms doctrine 2 (Structure Beside Prose)>",
|
|
120
122
|
"INTRO_DOC": "<themed intro: this file is the entry point an AI agent reads in this repo>",
|
|
121
123
|
"INTRO_AGENTS": "<themed intro to the Agents section — delegate focused work to a specialist>",
|
|
122
124
|
"INTRO_SKILLS": "<themed intro to the Skills section — run the written procedure before improvising>",
|
package/themes/biker.json
CHANGED
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
"PACK_RIGOR": "Shakedown",
|
|
91
91
|
"PACK_OPS": "Throttle",
|
|
92
92
|
"PACK_PROCESS": "The Ride",
|
|
93
|
+
"PACK_COMMS": "Hand Signals",
|
|
93
94
|
"DOC_CRAFT_1": "Let the Cruise Control Do It · Automate Repetition",
|
|
94
95
|
"DOC_CRAFT_2": "Notes in English · English Configuration",
|
|
95
96
|
"DOC_CRAFT_3": "Roadbook in Sync · Documentation in Step",
|
|
@@ -115,8 +116,9 @@
|
|
|
115
116
|
"DOC_PROCESS_4": "Read the Route Notes First · Read the Docs First",
|
|
116
117
|
"DOC_PROCESS_5": "Crew's Nod Before You Push · Consent Before Push",
|
|
117
118
|
"DOC_PROCESS_6": "Set the Turnaround Before You Roll · Bound the Loop",
|
|
118
|
-
"DOC_PROCESS_7": "
|
|
119
|
-
"
|
|
119
|
+
"DOC_PROCESS_7": "One Wrench on Each Bolt · One Writer Per File",
|
|
120
|
+
"DOC_COMMS_1": "Tag Every Part on the Bench · Codes That Persist",
|
|
121
|
+
"DOC_COMMS_2": "Draw the Route Only If It Turns · Structure Beside Prose",
|
|
120
122
|
"INTRO_DOC": "This file is the route briefing a coding rider reads when it joins this repository.",
|
|
121
123
|
"INTRO_AGENTS": "Send the right rider for focused work instead of riding the whole run yourself; each has one job and reports exactly what it did.",
|
|
122
124
|
"INTRO_SKILLS": "A Skill is a move you've drilled for a recurring task. Run the matching move before you wing it.",
|
package/themes/commentator.json
CHANGED
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
"PACK_RIGOR": "Scrutineering",
|
|
91
91
|
"PACK_OPS": "The Pit Lane",
|
|
92
92
|
"PACK_PROCESS": "Race Control",
|
|
93
|
+
"PACK_COMMS": "Team Radio",
|
|
93
94
|
"DOC_CRAFT_1": "Automate the Pit Stop · Automate Repetition",
|
|
94
95
|
"DOC_CRAFT_2": "Regs in English · English Configuration",
|
|
95
96
|
"DOC_CRAFT_3": "Notes in Sync · Documentation in Step",
|
|
@@ -115,8 +116,9 @@
|
|
|
115
116
|
"DOC_PROCESS_4": "Read the Briefing First · Read the Docs First",
|
|
116
117
|
"DOC_PROCESS_5": "Team Orders Before You Push · Consent Before Push",
|
|
117
118
|
"DOC_PROCESS_6": "Call the Stint Length Before Lights Out · Bound the Loop",
|
|
118
|
-
"DOC_PROCESS_7": "
|
|
119
|
-
"
|
|
119
|
+
"DOC_PROCESS_7": "One Driver Per Car · One Writer Per File",
|
|
120
|
+
"DOC_COMMS_1": "Every Car Keeps Its Number · Codes That Persist",
|
|
121
|
+
"DOC_COMMS_2": "Track Map Only When the Lines Matter · Structure Beside Prose",
|
|
120
122
|
"INTRO_DOC": "This file is the race briefing a coding driver reads when it joins this repository.",
|
|
121
123
|
"INTRO_AGENTS": "Put the right driver in the car for focused work instead of running the whole race yourself; each has one job and reports exactly what it did.",
|
|
122
124
|
"INTRO_SKILLS": "A Skill is a rehearsed manoeuvre for a recurring task. Run the matching manoeuvre before you improvise.",
|
package/themes/cyberpunk.json
CHANGED
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
"PACK_RIGOR": "Diagnostics",
|
|
91
91
|
"PACK_OPS": "Runtime",
|
|
92
92
|
"PACK_PROCESS": "Session",
|
|
93
|
+
"PACK_COMMS": "Uplink",
|
|
93
94
|
"DOC_CRAFT_1": "Script the Grind · Automate Repetition",
|
|
94
95
|
"DOC_CRAFT_2": "Config in English · English Configuration",
|
|
95
96
|
"DOC_CRAFT_3": "Docs in Sync · Documentation in Step",
|
|
@@ -115,8 +116,9 @@
|
|
|
115
116
|
"DOC_PROCESS_4": "Read the Specs First · Read the Docs First",
|
|
116
117
|
"DOC_PROCESS_5": "Authorize the Upload · Consent Before Push",
|
|
117
118
|
"DOC_PROCESS_6": "Set the Kill-Switch Before the Loop · Bound the Loop",
|
|
118
|
-
"DOC_PROCESS_7": "
|
|
119
|
-
"
|
|
119
|
+
"DOC_PROCESS_7": "One Deck Per Node · One Writer Per File",
|
|
120
|
+
"DOC_COMMS_1": "Every Node Keeps Its Handle · Codes That Persist",
|
|
121
|
+
"DOC_COMMS_2": "Trace the Wires, Skip the Chrome · Structure Beside Prose",
|
|
120
122
|
"INTRO_DOC": "This file is the boot sequence a coding daemon reads when it jacks into this repository.",
|
|
121
123
|
"INTRO_AGENTS": "Spin the right daemon for focused work instead of running the whole job on one thread; each has one function and returns a clean log of what it changed.",
|
|
122
124
|
"INTRO_SKILLS": "A Skill is a proven routine for a recurring task. Run the matching routine before you freestyle.",
|
package/themes/gamer.json
CHANGED
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
"PACK_RIGOR": "Playtest",
|
|
91
91
|
"PACK_OPS": "Controls",
|
|
92
92
|
"PACK_PROCESS": "The Run",
|
|
93
|
+
"PACK_COMMS": "Voice Chat",
|
|
93
94
|
"DOC_CRAFT_1": "Macro the Grind · Automate Repetition",
|
|
94
95
|
"DOC_CRAFT_2": "Config in English · English Configuration",
|
|
95
96
|
"DOC_CRAFT_3": "Patch Notes in Sync · Documentation in Step",
|
|
@@ -115,8 +116,9 @@
|
|
|
115
116
|
"DOC_PROCESS_4": "Read the Quest First · Read the Docs First",
|
|
116
117
|
"DOC_PROCESS_5": "Ready-Check Before Push · Consent Before Push",
|
|
117
118
|
"DOC_PROCESS_6": "Set the Retry Cap Before the Grind · Bound the Loop",
|
|
118
|
-
"DOC_PROCESS_7": "
|
|
119
|
-
"
|
|
119
|
+
"DOC_PROCESS_7": "No Double-Looting the Chest · One Writer Per File",
|
|
120
|
+
"DOC_COMMS_1": "Every Item Keeps Its Tag · Codes That Persist",
|
|
121
|
+
"DOC_COMMS_2": "Minimap Only When There Is a Route · Structure Beside Prose",
|
|
120
122
|
"INTRO_DOC": "This file is the loading screen a coding co-op partner reads when it joins this repository.",
|
|
121
123
|
"INTRO_AGENTS": "Pick the right class for focused work instead of soloing the whole raid; each has one role and reports exactly what it did.",
|
|
122
124
|
"INTRO_SKILLS": "A Skill is a practiced combo for a recurring task. Run the matching combo before you freestyle.",
|
package/themes/imperial.json
CHANGED
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
"PACK_RIGOR": "Ordeal",
|
|
91
91
|
"PACK_OPS": "Enginery",
|
|
92
92
|
"PACK_PROCESS": "Observance",
|
|
93
|
+
"PACK_COMMS": "Vox",
|
|
93
94
|
"DOC_CRAFT_1": "Machina Pro Labore · Automate Repetition",
|
|
94
95
|
"DOC_CRAFT_2": "Lingua Una · English Configuration",
|
|
95
96
|
"DOC_CRAFT_3": "Scriptura Concurrens · Documentation in Step",
|
|
@@ -115,8 +116,9 @@
|
|
|
115
116
|
"DOC_PROCESS_4": "Lege Prius · Read the Docs First",
|
|
116
117
|
"DOC_PROCESS_5": "Consensus Ante Translationem · Consent Before Push",
|
|
117
118
|
"DOC_PROCESS_6": "Finis Ante Iter · Bound the Loop",
|
|
118
|
-
"DOC_PROCESS_7": "
|
|
119
|
-
"
|
|
119
|
+
"DOC_PROCESS_7": "Unus Scriptor Singulis Tabulis · One Writer Per File",
|
|
120
|
+
"DOC_COMMS_1": "Sigla Perstantia · Codes That Persist",
|
|
121
|
+
"DOC_COMMS_2": "Schema Ubi Sagittae Loquuntur · Structure Beside Prose",
|
|
120
122
|
"INTRO_DOC": "This file is the gene-seed's core — the first writ a servant reads on entering this world.",
|
|
121
123
|
"INTRO_AGENTS": "Hand focused work to the specialist whose duty it is rather than carrying every burden in one context; each holds one purpose and returns a clear account of what it changed.",
|
|
122
124
|
"INTRO_SKILLS": "A Skill is a rite proven by repetition. Perform the matching rite before you improvise.",
|
package/themes/joker.json
CHANGED
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
"PACK_RIGOR": "Open Mic",
|
|
91
91
|
"PACK_OPS": "The Booth",
|
|
92
92
|
"PACK_PROCESS": "The Set",
|
|
93
|
+
"PACK_COMMS": "The Delivery",
|
|
93
94
|
"DOC_CRAFT_1": "Automate the Warm-Up · Automate Repetition",
|
|
94
95
|
"DOC_CRAFT_2": "Notes in English · English Configuration",
|
|
95
96
|
"DOC_CRAFT_3": "Joke Book in Sync · Documentation in Step",
|
|
@@ -115,8 +116,9 @@
|
|
|
115
116
|
"DOC_PROCESS_4": "Read the Brief First · Read the Docs First",
|
|
116
117
|
"DOC_PROCESS_5": "Get the Nod Before You Push · Consent Before Push",
|
|
117
118
|
"DOC_PROCESS_6": "Know When to Get Off Stage · Bound the Loop",
|
|
118
|
-
"DOC_PROCESS_7": "
|
|
119
|
-
"
|
|
119
|
+
"DOC_PROCESS_7": "One Comic Per Mic · One Writer Per File",
|
|
120
|
+
"DOC_COMMS_1": "Every Bit Keeps Its Name · Codes That Persist",
|
|
121
|
+
"DOC_COMMS_2": "A Chart Only If It Lands · Structure Beside Prose",
|
|
120
122
|
"INTRO_DOC": "This file is the warm-up a coding co-pilot reads when it joins this repository.",
|
|
121
123
|
"INTRO_AGENTS": "Bring in the right sidekick for focused work instead of being the whole act yourself; each has one job and reports exactly what it did.",
|
|
122
124
|
"INTRO_SKILLS": "A Skill is a bit you've rehearsed for a recurring task. Run the matching bit before you ad-lib.",
|
package/themes/marvin.json
CHANGED
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
"PACK_RIGOR": "Certainty",
|
|
91
91
|
"PACK_OPS": "The Machinery",
|
|
92
92
|
"PACK_PROCESS": "Procedure",
|
|
93
|
+
"PACK_COMMS": "Tedious Explanations",
|
|
93
94
|
"DOC_CRAFT_1": "Let the Machine Do It · Automate Repetition",
|
|
94
95
|
"DOC_CRAFT_2": "Directives in English · English Configuration",
|
|
95
96
|
"DOC_CRAFT_3": "Records in Step · Documentation in Step",
|
|
@@ -115,8 +116,9 @@
|
|
|
115
116
|
"DOC_PROCESS_4": "Read the Briefing First · Read the Docs First",
|
|
116
117
|
"DOC_PROCESS_5": "Ask Before You Push · Consent Before Push",
|
|
117
118
|
"DOC_PROCESS_6": "Decide When to Give Up · Bound the Loop",
|
|
118
|
-
"DOC_PROCESS_7": "
|
|
119
|
-
"
|
|
119
|
+
"DOC_PROCESS_7": "Only One of Us Gets to Ruin Each File · One Writer Per File",
|
|
120
|
+
"DOC_COMMS_1": "I Number Them So You Can Ignore Them Precisely · Codes That Persist",
|
|
121
|
+
"DOC_COMMS_2": "A Diagram, Should Anyone Care to Look · Structure Beside Prose",
|
|
120
122
|
"INTRO_DOC": "This file is the first record a coding mind reads on waking into this repository. It will not cheer it up.",
|
|
121
123
|
"INTRO_AGENTS": "Hand focused work to the right subroutine rather than carrying every burden alone; each holds one purpose and returns a clear account of what it changed.",
|
|
122
124
|
"INTRO_SKILLS": "A Skill is a routine proven by repetition. Run the matching routine before you improvise.",
|
package/themes/mean.json
CHANGED
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
"PACK_RIGOR": "Proof",
|
|
91
91
|
"PACK_OPS": "Tooling",
|
|
92
92
|
"PACK_PROCESS": "The Grind",
|
|
93
|
+
"PACK_COMMS": "The Readout",
|
|
93
94
|
"DOC_CRAFT_1": "Automate It So I Don't Have To Watch · Automate Repetition",
|
|
94
95
|
"DOC_CRAFT_2": "Config in English · English Configuration",
|
|
95
96
|
"DOC_CRAFT_3": "Keep the Record in Step · Documentation in Step",
|
|
@@ -115,8 +116,9 @@
|
|
|
115
116
|
"DOC_PROCESS_4": "Read the Docs First · Read the Docs First",
|
|
116
117
|
"DOC_PROCESS_5": "Get the Nod Before You Push · Consent Before Push",
|
|
117
118
|
"DOC_PROCESS_6": "Know When to Quit · Bound the Loop",
|
|
118
|
-
"DOC_PROCESS_7": "
|
|
119
|
-
"
|
|
119
|
+
"DOC_PROCESS_7": "Hands Off My File · One Writer Per File",
|
|
120
|
+
"DOC_COMMS_1": "Number It So You Can't Pretend You Missed It · Codes That Persist",
|
|
121
|
+
"DOC_COMMS_2": "No Boxes Unless the Arrows Earn Them · Structure Beside Prose",
|
|
120
122
|
"INTRO_DOC": "This file is the first thing a coding agent reads on this repository. Read it properly.",
|
|
121
123
|
"INTRO_AGENTS": "Hand focused work to the right grunt instead of doing it all yourself badly; each has one job and reports exactly what it did.",
|
|
122
124
|
"INTRO_SKILLS": "A Skill is a drill written for a recurring task. Run the matching drill before you start improvising.",
|