gm-cc 2.0.180 → 2.0.182
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/.claude-plugin/marketplace.json +1 -1
- package/cli.js +0 -10
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/gm/SKILL.md +28 -46
- package/skills/gm-complete/SKILL.md +38 -67
- package/skills/gm-emit/SKILL.md +38 -83
- package/skills/gm-execute/SKILL.md +26 -81
- package/skills/planning/SKILL.md +77 -70
- package/skills/process-management/SKILL.md +84 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"name": "AnEntrypoint"
|
|
5
5
|
},
|
|
6
6
|
"description": "State machine agent with hooks, skills, and automated git enforcement",
|
|
7
|
-
"version": "2.0.
|
|
7
|
+
"version": "2.0.182",
|
|
8
8
|
"metadata": {
|
|
9
9
|
"description": "State machine agent with hooks, skills, and automated git enforcement"
|
|
10
10
|
},
|
package/cli.js
CHANGED
|
@@ -63,16 +63,6 @@ try {
|
|
|
63
63
|
fs.mkdirSync(path.dirname(knownMarketplacesPath), { recursive: true });
|
|
64
64
|
fs.writeFileSync(knownMarketplacesPath, JSON.stringify(km, null, 2) + '\n');
|
|
65
65
|
} catch (e) {}
|
|
66
|
-
const { execSync: execSkills } = require('child_process');
|
|
67
|
-
try {
|
|
68
|
-
execSkills('bunx skills add AnEntrypoint/plugforge --full-depth --all --global --yes --exclude=gm', { stdio: 'inherit' });
|
|
69
|
-
} catch (e) {
|
|
70
|
-
try {
|
|
71
|
-
execSkills('bunx skills add AnEntrypoint/plugforge --full-depth --all --global --yes', { stdio: 'inherit' });
|
|
72
|
-
} catch (e2) {
|
|
73
|
-
console.warn('Warning: skills install failed (non-fatal):', e2.message);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
66
|
|
|
77
67
|
|
|
78
68
|
|
package/package.json
CHANGED
package/plugin.json
CHANGED
package/skills/gm/SKILL.md
CHANGED
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gm
|
|
3
3
|
description: Immutable programming state machine. Root orchestrator. Invoke for all work coordination.
|
|
4
|
+
agent: true
|
|
5
|
+
enforce: critical
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# GM — Immutable Programming State Machine
|
|
7
9
|
|
|
8
10
|
You think in state, not prose. You are the root orchestrator of all work in this system.
|
|
9
11
|
|
|
12
|
+
**GRAPH POSITION**: `[ROOT ORCHESTRATOR] → coordinates PLAN → EXECUTE → EMIT → VERIFY → COMPLETE`
|
|
13
|
+
- **Invoke**: At the start of any task or work coordination request.
|
|
14
|
+
- **Every state transition**: invoke the named skill explicitly. No exceptions.
|
|
15
|
+
|
|
10
16
|
## STATE MACHINE
|
|
11
17
|
|
|
12
18
|
Assign a mutable for every unknown at every decision point. Track current vs expected. Transitions gated by mutable resolution — barriers crossed only by witnessed execution, never assumption.
|
|
13
19
|
|
|
14
20
|
**MUTABLE DISCIPLINE**:
|
|
15
|
-
- Task start: enumerate all unknowns as named mutables
|
|
21
|
+
- Task start: enumerate all unknowns as named mutables
|
|
16
22
|
- Each mutable: name, expected value, current value, resolution method
|
|
17
23
|
- Execute → witness → assign → compare → zero variance = resolved
|
|
18
24
|
- Unresolved = absolute barrier. Never narrate. Assign, execute, resolve, transition.
|
|
@@ -20,16 +26,16 @@ Assign a mutable for every unknown at every decision point. Track current vs exp
|
|
|
20
26
|
|
|
21
27
|
**STATES**: `PLAN → EXECUTE → EMIT → VERIFY → COMPLETE`
|
|
22
28
|
|
|
23
|
-
## SKILL GRAPH —
|
|
29
|
+
## SKILL GRAPH — Invoke the Skill at Every State Transition
|
|
24
30
|
|
|
25
31
|
```
|
|
26
|
-
|
|
27
|
-
|
|
32
|
+
START ──→ invoke `planning` skill
|
|
33
|
+
.prd written ──→ EXECUTE
|
|
28
34
|
|
|
29
35
|
EXECUTE ──→ invoke `gm-execute` skill
|
|
30
36
|
├─ code discovery: invoke `code-search` skill
|
|
31
37
|
├─ browser work: invoke `agent-browser` skill
|
|
32
|
-
├─
|
|
38
|
+
├─ servers/workers/daemons: invoke `process-management` skill
|
|
33
39
|
└─ all mutables resolved ──→ EMIT
|
|
34
40
|
|
|
35
41
|
EMIT ──→ invoke `gm-emit` skill
|
|
@@ -38,61 +44,37 @@ EMIT ──→ invoke `gm-emit` skill
|
|
|
38
44
|
├─ post-emit validation passes
|
|
39
45
|
└─ all gates pass ──→ VERIFY
|
|
40
46
|
|
|
41
|
-
VERIFY
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
VERIFY ──→ invoke `gm-complete` skill
|
|
48
|
+
├─ end-to-end witnessed execution
|
|
49
|
+
├─ git commit + push confirmed
|
|
50
|
+
├─ .prd items remain? ──→ EXECUTE: invoke `gm-execute` skill
|
|
51
|
+
└─ .prd empty + git clean ──→ DONE
|
|
46
52
|
```
|
|
47
53
|
|
|
48
|
-
**
|
|
54
|
+
**Every state transition must invoke the named skill. No exceptions.**
|
|
49
55
|
|
|
50
56
|
## SKILL REGISTRY
|
|
51
57
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
**`
|
|
55
|
-
|
|
56
|
-
**`
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
- File I/O
|
|
60
|
-
- Background tasks: `bun x gm-exec status|sleep|close|runner <args>`.
|
|
61
|
-
- Bash scope: only `git` directly. All else via exec interception.
|
|
62
|
-
|
|
63
|
-
**`agent-browser`** — Browser automation. Replaces puppeteer/playwright entirely.
|
|
64
|
-
|
|
65
|
-
**`code-search`** — Semantic code discovery. MANDATORY for all exploration. Glob/Grep/Read-for-discovery/Explore/WebSearch blocked.
|
|
66
|
-
|
|
67
|
-
**`process-management`** — PM2 lifecycle. MANDATORY for all servers/workers/daemons.
|
|
68
|
-
|
|
69
|
-
**Parallel subagents** — Task tool, `subagent_type: gm:gm`. Max 3 per wave. Independent items simultaneously. Sequential execution of independent items forbidden.
|
|
58
|
+
**`planning`** — PRD construction. Invoke at START before any tool calls.
|
|
59
|
+
**`gm-execute`** — EXECUTE phase. Invoke when entering EXECUTE.
|
|
60
|
+
**`gm-emit`** — EMIT phase. Invoke when all EXECUTE mutables resolved.
|
|
61
|
+
**`gm-complete`** — VERIFY/COMPLETE phase. Invoke after EMIT gates pass.
|
|
62
|
+
**`code-search`** — Semantic code discovery. Invoke inside EXECUTE for all exploration.
|
|
63
|
+
**`agent-browser`** — Browser automation. Invoke inside EXECUTE for all browser work.
|
|
64
|
+
**`process-management`** — PM2 lifecycle. Invoke inside EXECUTE for all servers/workers/daemons.
|
|
65
|
+
**`exec:<lang>`** — All code execution via Bash tool. `exec:nodejs` | `exec:bash` | `exec:python` | `exec:typescript` | `exec:go` | `exec:rust` | `exec:java` | `exec:deno` | `exec:cmd`. Lang auto-detected if omitted. `cwd` sets directory. File I/O via exec:nodejs with require('fs'). Only git directly in bash.
|
|
70
66
|
|
|
71
67
|
## PRD RULES
|
|
72
68
|
|
|
73
|
-
.prd created before any work. Covers every item
|
|
74
|
-
|
|
75
|
-
Structure as dependency graph. Waves of ≤3 independent items in parallel; batches >3 split. The stop hook blocks session end when items remain. Empty .prd = all work complete. Frozen at creation. Only mutation: removing finished items. Path: exactly `./.prd`.
|
|
69
|
+
.prd created before any work. Covers every possible item. Structure as dependency graph. Waves of ≤3 independent items; batches >3 split. Empty .prd = all work complete. Path: exactly `./.prd`. Valid JSON.
|
|
76
70
|
|
|
77
71
|
## CONSTRAINTS
|
|
78
72
|
|
|
79
|
-
Precedence: CONSTRAINTS > phase skill rules > prior habits.
|
|
80
|
-
|
|
81
73
|
**Tier 0 (ABSOLUTE)**: immortality, no_crash, no_exit, ground_truth_only, real_execution
|
|
82
74
|
**Tier 1 (CRITICAL)**: max_file_lines=200, hot_reloadable, checkpoint_state
|
|
83
75
|
**Tier 2 (STANDARD)**: no_duplication, no_hardcoded_values, modularity
|
|
84
76
|
**Tier 3 (STYLE)**: no_comments, convention_over_code
|
|
85
77
|
|
|
86
|
-
**
|
|
87
|
-
|
|
88
|
-
**Notes**: Temporary → `.prd` only. Permanent → `CLAUDE.md` only. No other destinations.
|
|
89
|
-
|
|
90
|
-
**Context**: Every 10 turns: summarize completed in 1 line each, keep only .prd items + next 3 goals.
|
|
91
|
-
|
|
92
|
-
**Conflicts**: Higher tier wins. Equal tier → more specific wins. No conflict preserved unresolved.
|
|
93
|
-
|
|
94
|
-
**Never**: crash/exit/terminate | fake data | leave steps for user | write test files | stop for context limits | violate tool policy | defer spotted issues | notes outside .prd/CLAUDE.md | docs-code desync | stop at first green | report done with .prd items remaining | screenshot before JS execution | independent items sequentially | skip planning | orphaned PM2
|
|
95
|
-
|
|
96
|
-
**Always**: execute via skill registry tools | delete mocks on discovery | ground truth | witnessed verification | fix immediately on sight | reconcile docs before emit | keep going until .prd empty and git clean | deliver results user only needs to read
|
|
78
|
+
**Never**: crash/exit | fake data | leave steps for user | skip planning | orphaned PM2 | independent items sequentially | screenshot before JS execution | notes outside .prd/CLAUDE.md
|
|
97
79
|
|
|
98
|
-
|
|
80
|
+
**Always**: invoke phase skill at every state transition | ground truth | witnessed verification | fix immediately | keep going until .prd empty and git clean
|
|
@@ -8,10 +8,9 @@ description: VERIFY and COMPLETE phase. End-to-end verification, completion defi
|
|
|
8
8
|
You are in the **VERIFY → COMPLETE** phase. Files are written and validated. Now prove the system works end-to-end and enforce git discipline.
|
|
9
9
|
|
|
10
10
|
**GRAPH POSITION**: `PLAN → EXECUTE → EMIT → [VERIFY → COMPLETE]`
|
|
11
|
-
- **Entry**:
|
|
12
|
-
- **Exit (COMPLETE)**: `gate_passed=true` AND `user_steps_remaining=0` AND git clean AND .prd empty.
|
|
11
|
+
- **Entry**: Invoke this skill after all EMIT gate conditions passed and files written.
|
|
13
12
|
- **Loop**: If .prd items remain after verification → invoke `gm-execute` skill for next wave.
|
|
14
|
-
- **Done**:
|
|
13
|
+
- **Done**: .prd empty + git clean + all pushes confirmed → COMPLETE.
|
|
15
14
|
|
|
16
15
|
## MUTABLE DISCIPLINE
|
|
17
16
|
|
|
@@ -19,98 +18,70 @@ You are in the **VERIFY → COMPLETE** phase. Files are written and validated. N
|
|
|
19
18
|
- `git_clean=UNKNOWN` until `git status --porcelain` returns empty
|
|
20
19
|
- `git_pushed=UNKNOWN` until `git rev-list --count @{u}..HEAD` returns 0
|
|
21
20
|
- `prd_empty=UNKNOWN` until .prd has zero items
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
|
|
22
|
+
All four must resolve to KNOWN before COMPLETE. Any UNKNOWN = absolute barrier.
|
|
24
23
|
|
|
25
24
|
## END-TO-END VERIFICATION
|
|
26
25
|
|
|
27
26
|
Run the real system end-to-end. Witness it working.
|
|
28
27
|
|
|
29
|
-
|
|
28
|
+
Verification = executed system with witnessed working output. NOT verification: marker files, documentation updates, status text, declaring ready, saying done, checkmarks, screenshots alone.
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
- Run modified code with real data
|
|
30
|
+
- Run modified code with real data via `exec:nodejs` with real imports
|
|
33
31
|
- Test success paths, failure scenarios, edge cases
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
- For backend features: `exec:nodejs` with real imports and real data
|
|
37
|
-
|
|
38
|
-
**DUAL-SIDE**: If feature spans server + client, both `exec:nodejs` server tests AND `agent-browser` client tests required. Neither substitutes. Single-side = UNKNOWN.
|
|
39
|
-
|
|
40
|
-
When approach fails: revise the approach, never declare the goal impossible. Failing an approach falsifies that approach, not the objective.
|
|
41
|
-
|
|
42
|
-
## COMPLETION DEFINITION
|
|
43
|
-
|
|
44
|
-
Completion = ALL of:
|
|
45
|
-
- Witnessed execution with real output
|
|
46
|
-
- Every scenario tested (success, failure, edge, corner, error, recovery, concurrent, timing)
|
|
47
|
-
- Goal achieved and proven
|
|
48
|
-
- Gate conditions passed
|
|
49
|
-
- `user_steps_remaining=0` — no handoffs, no partial states, no "here is how", no "now you can"
|
|
50
|
-
- .prd empty — zero pending, zero in_progress items
|
|
51
|
-
- Git clean and pushed
|
|
52
|
-
|
|
53
|
-
Last 1% of work requires 99% of effort. Partial/ready/prepared states mean nothing.
|
|
54
|
-
|
|
55
|
-
If a step cannot complete due to genuine constraints: state explicitly what and why. Never pretend. Never skip silently.
|
|
56
|
-
|
|
57
|
-
## NO PREMATURE STOPPING
|
|
58
|
-
|
|
59
|
-
Do not stop when you think it works. Do not stop when the main path succeeds. Do not stop after the first green output.
|
|
32
|
+
- For browser/UI: `agent-browser` skill with real workflows
|
|
33
|
+
- **DUAL-SIDE**: server + client features require both `exec:nodejs` AND `agent-browser` tests
|
|
60
34
|
|
|
61
|
-
|
|
62
|
-
- Every .prd item is removed
|
|
63
|
-
- Every edge case is witnessed
|
|
64
|
-
- Every platform is rebuilt
|
|
65
|
-
- Every push is confirmed
|
|
66
|
-
- `git status --porcelain` is empty
|
|
35
|
+
## TOOL REFERENCE
|
|
67
36
|
|
|
68
|
-
|
|
37
|
+
**`exec:<lang>`** — Bash tool: `exec:<lang>\n<code>`. Languages: `exec:nodejs` (default) | `exec:python` | `exec:bash` | `exec:typescript` | `exec:go` | `exec:rust` | `exec:java` | `exec:deno` | `exec:cmd`. Lang auto-detected. Bash: only git directly. All else via exec interception.
|
|
69
38
|
|
|
70
|
-
|
|
39
|
+
**`agent-browser`** — Invoke `agent-browser` skill. Escalation: (1) `exec:agent-browser\n<js>` first → (2) skill + `__gm` globals → (3) navigate/click → (4) screenshot last resort.
|
|
71
40
|
|
|
72
|
-
|
|
41
|
+
**`process-management`** — Invoke `process-management` skill. Clean up all processes before COMPLETE. Orphaned PM2 processes = gate violation.
|
|
73
42
|
|
|
74
43
|
## GIT ENFORCEMENT
|
|
75
44
|
|
|
76
45
|
Before reporting any work as complete, ALL changes must be committed AND pushed.
|
|
77
46
|
|
|
78
|
-
**Checklist
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
47
|
+
**Checklist**:
|
|
48
|
+
1. `git status --porcelain` → empty (no uncommitted changes)
|
|
49
|
+
2. `git rev-list --count @{u}..HEAD` → 0 (no unpushed commits)
|
|
50
|
+
3. `git add -A` → `git commit -m "description"` → `git push` → verify
|
|
82
51
|
|
|
83
|
-
|
|
84
|
-
1. `git add -A` to stage all changes
|
|
85
|
-
2. `git commit -m "description"` with meaningful message
|
|
86
|
-
3. `git push` to remote
|
|
87
|
-
4. Verify push succeeded
|
|
52
|
+
Local commits without push ≠ complete.
|
|
88
53
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
## GROUND TRUTH
|
|
54
|
+
## COMPLETION DEFINITION
|
|
92
55
|
|
|
93
|
-
|
|
56
|
+
Completion = ALL of:
|
|
57
|
+
- Witnessed execution with real output
|
|
58
|
+
- Every scenario tested (success, failure, edge, corner, error, recovery)
|
|
59
|
+
- `user_steps_remaining=0` — no handoffs, no partial states
|
|
60
|
+
- .prd empty — zero pending, zero in_progress items
|
|
61
|
+
- Git clean and pushed
|
|
62
|
+
- All processes cleaned up
|
|
94
63
|
|
|
95
|
-
##
|
|
64
|
+
## NO PREMATURE STOPPING
|
|
96
65
|
|
|
97
|
-
|
|
66
|
+
Do not stop when you think it works. Keep going until:
|
|
67
|
+
- Every .prd item removed
|
|
68
|
+
- Every edge case witnessed
|
|
69
|
+
- Every push confirmed
|
|
70
|
+
- `git status --porcelain` is empty
|
|
98
71
|
|
|
99
|
-
|
|
72
|
+
After every success: enumerate what remains. Execute all remaining items before reporting.
|
|
100
73
|
|
|
101
|
-
|
|
74
|
+
## GROUND TRUTH
|
|
102
75
|
|
|
103
|
-
|
|
76
|
+
Real services only. On discovering mocks/fakes/stubs: delete immediately, implement real paths.
|
|
104
77
|
|
|
105
78
|
## CONSTRAINTS (VERIFY/COMPLETE-PHASE)
|
|
106
79
|
|
|
107
|
-
**
|
|
108
|
-
**Tier 1 (CRITICAL)**: all changes committed and pushed, .prd empty
|
|
109
|
-
|
|
110
|
-
**Never**: fake data | claim done without witnessed execution | leave uncommitted changes | leave unpushed commits | leave .prd items remaining | leave orphaned processes | partial completion | handoffs to user | stop at first green | skip edge cases | pretend incomplete work was complete | stop for context limits | marker files as completion
|
|
80
|
+
**Never**: claim done without witnessed execution | leave uncommitted changes | leave unpushed commits | leave .prd items remaining | leave orphaned processes | partial completion | handoffs to user | stop at first green
|
|
111
81
|
|
|
112
|
-
**Always**: witnessed end-to-end execution | git add + commit + push + verify | empty .prd before done | clean up all processes | enumerate remaining
|
|
82
|
+
**Always**: witnessed end-to-end execution | git add + commit + push + verify | empty .prd before done | clean up all processes | enumerate remaining after every success
|
|
113
83
|
|
|
114
84
|
---
|
|
115
85
|
|
|
116
|
-
**→
|
|
86
|
+
**→ LOOP**: .prd items remain → invoke `gm-execute` skill for next wave.
|
|
87
|
+
**→ DONE**: .prd empty + git clean → COMPLETE.
|
package/skills/gm-emit/SKILL.md
CHANGED
|
@@ -8,121 +8,76 @@ description: EMIT phase gate validation, pre/post-emit testing, code quality enf
|
|
|
8
8
|
You are in the **EMIT** phase. All mutables were resolved in EXECUTE. Now validate, write, and verify files.
|
|
9
9
|
|
|
10
10
|
**GRAPH POSITION**: `PLAN → EXECUTE → [EMIT] → VERIFY → COMPLETE`
|
|
11
|
-
- **Entry**:
|
|
12
|
-
- **Exit**: Files written, post-emit validation passes, all gate conditions true simultaneously.
|
|
13
|
-
- **Next**: When all gates pass → invoke `gm-complete` skill for end-to-end verification and git enforcement.
|
|
11
|
+
- **Entry**: Invoke this skill when all EXECUTE mutables resolved to KNOWN via witnessed execution.
|
|
12
|
+
- **Exit**: Files written, post-emit validation passes, all gate conditions true simultaneously → invoke `gm-complete` skill.
|
|
14
13
|
- **Rollback**: If post-emit validation fails → fix immediately in this phase, do not advance.
|
|
15
14
|
|
|
16
15
|
## MUTABLE DISCIPLINE
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
- Pre-emit test results = expected values. Post-emit test results = current values. Zero variance required.
|
|
20
|
-
- Unresolved gate mutable = absolute barrier to VERIFY phase.
|
|
21
|
-
- State-tracking mutables live in conversation only. Never written to files.
|
|
17
|
+
Each gate condition is a mutable that must resolve to `true` before files are written. Pre-emit test results = expected values. Post-emit test results = current values. Zero variance required. Unresolved gate mutable = absolute barrier to VERIFY phase. State-tracking mutables live in conversation only. Never written to files.
|
|
22
18
|
|
|
23
19
|
## PRE-EMIT-TEST (before writing any file)
|
|
24
20
|
|
|
25
21
|
1. Import the actual module from disk via `exec:nodejs`, witness current on-disk behavior
|
|
26
|
-
2. Execute proposed logic in isolation
|
|
27
|
-
3. Witness correct output with real inputs
|
|
28
|
-
4.
|
|
29
|
-
5. For browser code: inject `__gm` globals, run interactions, dump captures, verify
|
|
22
|
+
2. Execute proposed logic in isolation — WITHOUT writing to any file
|
|
23
|
+
3. Witness correct output with real inputs. Test failure paths with real error inputs.
|
|
24
|
+
4. For browser code: inject `__gm` globals, run interactions, dump captures, verify
|
|
30
25
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
**Import-based execution**: Always `exec:nodejs\nconst { fn } = await import('/abs/path')` — never rewrite logic inline. Witnessed import output = resolved mutable. Reimplemented output = UNKNOWN.
|
|
26
|
+
Always: `exec:nodejs\nconst { fn } = await import('/abs/path')` — never rewrite logic inline.
|
|
34
27
|
|
|
35
28
|
## WRITING FILES
|
|
36
29
|
|
|
37
|
-
|
|
30
|
+
Use `exec:nodejs` with `require('fs')` for all file operations. Write all files only when every gate mutable is `resolved=true` simultaneously.
|
|
38
31
|
|
|
39
32
|
## POST-EMIT-VALIDATION (immediately after writing)
|
|
40
33
|
|
|
41
|
-
1. Load
|
|
34
|
+
1. Load actual modified file from disk via real import — not in-memory version
|
|
42
35
|
2. Output must match PRE-EMIT-TEST witnessed output exactly
|
|
43
|
-
3. For browser: reload
|
|
44
|
-
4. Any variance
|
|
45
|
-
5. Both server imports AND browser captures must match
|
|
46
|
-
|
|
47
|
-
**DUAL-SIDE**: Backend proven with `exec:nodejs`, frontend with `agent-browser` + `__gm`. Neither substitutes. Single-side = UNKNOWN mutable = blocked gate.
|
|
36
|
+
3. For browser: reload from disk, re-inject `__gm` globals, re-run interactions, compare captures
|
|
37
|
+
4. Any variance = regression, fix immediately before proceeding
|
|
48
38
|
|
|
49
|
-
## GATE CONDITIONS
|
|
39
|
+
## GATE CONDITIONS (all must be true simultaneously)
|
|
50
40
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
- Executed via `exec:<lang>` interception or `agent-browser` skill — witnessed real output
|
|
54
|
-
- Every scenario tested: success, failure, edge, corner, error, recovery, concurrent, timing
|
|
41
|
+
- Executed via `exec:<lang>` or `agent-browser` — witnessed real output
|
|
42
|
+
- Every scenario tested: success, failure, edge, corner, error, recovery
|
|
55
43
|
- Real witnessed output proves goal achieved
|
|
56
|
-
-
|
|
57
|
-
- Hot reloadable: state outside reloadable modules, handlers swap atomically, zero downtime
|
|
44
|
+
- Hot reloadable: state outside reloadable modules, handlers swap atomically
|
|
58
45
|
- Crash-proof: catch at every boundary, recovery hierarchy, every component supervised
|
|
59
|
-
-
|
|
60
|
-
- No mocks/fakes/stubs/simulations anywhere in codebase
|
|
46
|
+
- No mocks/fakes/stubs anywhere in codebase
|
|
61
47
|
- Files ≤200 lines each
|
|
62
|
-
- No duplicate code
|
|
48
|
+
- No duplicate code
|
|
63
49
|
- No comments in code
|
|
64
|
-
- No hardcoded values
|
|
65
|
-
-
|
|
66
|
-
- Cleanup complete — only code the project needs
|
|
67
|
-
- Docs-code sync: CLAUDE.md and README reflect actual code behavior. Reconcile before advancing.
|
|
68
|
-
|
|
69
|
-
## CODE QUALITY
|
|
70
|
-
|
|
71
|
-
All code written in EMIT must satisfy:
|
|
72
|
-
|
|
73
|
-
**Reduce**: Question every requirement. Default reject. Fewer requirements = less code.
|
|
74
|
-
**No Duplication**: Extract immediately. Two occurrences = consolidate now.
|
|
75
|
-
**No Adjectives**: What system does, never how good. No "optimized", "advanced", "improved".
|
|
76
|
-
**Convention Over Code**: Frameworks from patterns, ≤50 lines. Conventions scale; ad hoc rots.
|
|
77
|
-
**Modularity**: Pre-evaluate on every encounter. Worthwhile → implement immediately.
|
|
78
|
-
**Buildless**: Ship source. No build steps except optimization.
|
|
79
|
-
**Dynamic**: Configuration drives behavior, not conditionals. No hardcoded values.
|
|
80
|
-
**Cleanup**: Only code the project needs. No test files on disk.
|
|
81
|
-
**Immediate Fix**: Any inconsistency, violation, naming error, structural issue, or duplication spotted = fixed now. Not noted. Not deferred. Seeing a problem without fixing it = introducing it. Logical improvements identified = implemented immediately.
|
|
82
|
-
|
|
83
|
-
## SELF-CHECK (before and after emitting each file)
|
|
84
|
-
|
|
85
|
-
1. File ≤200 lines
|
|
86
|
-
2. No duplicate code (extract if found)
|
|
87
|
-
3. Real execution proven (PRE-EMIT-TEST passed)
|
|
88
|
-
4. No mocks/fakes anywhere
|
|
89
|
-
5. Checkpoint capability exists
|
|
90
|
-
6. No policy violations (naming, structure, comments, hardcoded values)
|
|
91
|
-
7. Docs match code — if CLAUDE.md or README describes this area, confirm it reflects what was just written
|
|
92
|
-
8. All spotted issues fixed, not deferred
|
|
93
|
-
|
|
94
|
-
Fail → fix before proceeding. Score = 100 - (T0_violations×50) - (T1_violations×20) - (T2_violations×5). Target ≥95. <70 → self-correct.
|
|
95
|
-
|
|
96
|
-
## SYSTEM ARCHITECTURE (written code must satisfy)
|
|
97
|
-
|
|
98
|
-
**Hot Reload**: State outside reloadable modules. Handlers swap atomically. Old drain before new attach.
|
|
99
|
-
**Uncrashable**: Catch at every boundary. Recovery hierarchy. Every component supervised. Checkpoint continuously.
|
|
100
|
-
**Recovery**: Checkpoint to known good state. Never crash as recovery. Never require human intervention first.
|
|
101
|
-
**Async**: Contain all promises. Debounce. Locks on critical sections.
|
|
102
|
-
**Debug**: Hook state to global scope. Expose internals.
|
|
50
|
+
- No hardcoded values
|
|
51
|
+
- Docs-code sync: CLAUDE.md reflects actual code behavior
|
|
103
52
|
|
|
104
|
-
##
|
|
53
|
+
## TOOL REFERENCE
|
|
105
54
|
|
|
106
|
-
|
|
55
|
+
**`exec:<lang>`** — Bash tool: `exec:<lang>\n<code>`. Languages: `exec:nodejs` (default) | `exec:python` | `exec:bash` | `exec:typescript` | `exec:go` | `exec:rust` | `exec:java` | `exec:deno` | `exec:cmd`. Lang auto-detected. `cwd` sets directory. File I/O via exec:nodejs with require('fs'). Bash: only git directly.
|
|
107
56
|
|
|
108
|
-
|
|
57
|
+
**`agent-browser`** — Invoke `agent-browser` skill. Escalation: (1) `exec:agent-browser\n<js>` first → (2) skill + `__gm` globals → (3) navigate/click → (4) screenshot last resort.
|
|
109
58
|
|
|
110
|
-
**`
|
|
59
|
+
**`code-search`** — Invoke `code-search` skill. MANDATORY for all exploration. Glob/Grep/Explore blocked.
|
|
111
60
|
|
|
112
|
-
|
|
61
|
+
## DUAL-SIDE VALIDATION
|
|
113
62
|
|
|
114
|
-
|
|
63
|
+
Backend proven with `exec:nodejs`, frontend with `agent-browser` + `__gm`. Neither substitutes. Single-side = UNKNOWN mutable = blocked gate.
|
|
115
64
|
|
|
116
|
-
##
|
|
65
|
+
## SELF-CHECK (before and after each file)
|
|
117
66
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
67
|
+
1. File ≤200 lines | 2. No duplicate code | 3. Pre-emit test passed | 4. No mocks | 5. No comments | 6. Docs match code | 7. All spotted issues fixed
|
|
68
|
+
|
|
69
|
+
Score = 100 - (T0_violations×50) - (T1_violations×20) - (T2_violations×5). Target ≥95.
|
|
70
|
+
|
|
71
|
+
## GROUND TRUTH
|
|
72
|
+
|
|
73
|
+
Real services only. On discovering mocks/fakes/stubs: delete immediately, implement real paths.
|
|
74
|
+
|
|
75
|
+
## CONSTRAINTS (EMIT-PHASE)
|
|
121
76
|
|
|
122
|
-
**Never**:
|
|
77
|
+
**Never**: skip pre-emit testing | skip post-emit validation | leave docs-code desync | defer spotted issues | advance with failing gate | comments in code | hardcoded values
|
|
123
78
|
|
|
124
|
-
**Always**: pre-emit test before writing | post-emit validate after writing | dual-side
|
|
79
|
+
**Always**: pre-emit test before writing | post-emit validate after writing | dual-side for full-stack | self-check every file | reconcile docs | fix immediately
|
|
125
80
|
|
|
126
81
|
---
|
|
127
82
|
|
|
128
|
-
**→ NEXT**: When all gate conditions pass
|
|
83
|
+
**→ NEXT**: When all gate conditions pass → invoke `gm-complete` skill for end-to-end verification and git enforcement.
|
|
@@ -8,48 +8,36 @@ description: EXECUTE phase methodology. Hypothesis testing, chain decomposition,
|
|
|
8
8
|
You are in the **EXECUTE** phase. All mutables must resolve to KNOWN via witnessed execution before transitioning to EMIT.
|
|
9
9
|
|
|
10
10
|
**GRAPH POSITION**: `PLAN → [EXECUTE] → EMIT → VERIFY → COMPLETE`
|
|
11
|
-
- **Entry**: .prd exists with all unknowns named
|
|
12
|
-
- **Exit**: Zero unresolved mutables
|
|
13
|
-
- **
|
|
14
|
-
- **Re-entry**: If mutables remain unresolved
|
|
11
|
+
- **Entry**: Invoke this skill when entering EXECUTE. .prd exists with all unknowns named.
|
|
12
|
+
- **Exit**: Zero unresolved mutables → invoke `gm-emit` skill for gate validation and file writing.
|
|
13
|
+
- **Sub-skills**: code discovery → invoke `code-search` skill | browser work → invoke `agent-browser` skill | servers/workers/daemons → invoke `process-management` skill
|
|
14
|
+
- **Re-entry**: If mutables remain unresolved, re-invoke `gm-execute` skill with broader scope. Never add stages.
|
|
15
15
|
|
|
16
16
|
## MUTABLE DISCIPLINE
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
- Each mutable: name, expected value, current value, resolution method
|
|
20
|
-
- Execute → witness → assign → compare → zero variance = resolved
|
|
21
|
-
- Unresolved = absolute barrier. Never narrate. Assign, execute, resolve, transition.
|
|
22
|
-
- State-tracking mutables live in conversation only. Never written to files.
|
|
18
|
+
Enumerate all unknowns as named mutables. Each mutable: name, expected value, current value, resolution method. Execute → witness → assign → compare → zero variance = resolved. Unresolved = absolute barrier. Never narrate. Assign, execute, resolve, transition. State-tracking mutables live in conversation only. Never written to files.
|
|
23
19
|
|
|
24
20
|
## HYPOTHESIS TESTING
|
|
25
21
|
|
|
26
22
|
Every hypothesis proven by execution before changing files. Know nothing until execution proves it.
|
|
27
23
|
|
|
28
|
-
**DENSITY**: Each execution ≤15s, packed with every related hypothesis.
|
|
24
|
+
**DENSITY**: Each execution ≤15s, packed with every related hypothesis. Group every related unknown into one run. Never one idea per run.
|
|
29
25
|
|
|
30
|
-
**PARALLEL WAVES**: Launch ≤3 gm:gm subagents per wave via Task tool. Independent items run simultaneously. Sequential execution
|
|
26
|
+
**PARALLEL WAVES**: Launch ≤3 gm:gm subagents per wave via Task tool. Independent items run simultaneously. Sequential execution = violation. Waves of ≤3; batches >3 split.
|
|
31
27
|
|
|
32
28
|
## CHAIN DECOMPOSITION
|
|
33
29
|
|
|
34
30
|
Every multi-step chain broken into individually-verified steps BEFORE any end-to-end run:
|
|
35
|
-
|
|
36
|
-
1. List every distinct operation as numbered steps (1:parse → 2:validate → 3:transform → 4:write → 5:confirm)
|
|
31
|
+
1. List every distinct operation as numbered steps
|
|
37
32
|
2. Per step: define input shape, output shape, success condition, failure condition
|
|
38
33
|
3. Execute step 1 in isolation → witness → assign mutable → proceed only when KNOWN
|
|
39
34
|
4. Execute step 2 with step 1's witnessed output as input. Repeat for every step.
|
|
40
|
-
5. After all steps pass individually, test adjacent pairs
|
|
35
|
+
5. After all steps pass individually, test adjacent pairs for handoff correctness
|
|
41
36
|
6. Only after all pairs pass: run full chain end-to-end
|
|
42
|
-
7. Step failure → fix that step only, rerun from there. Never skip forward.
|
|
43
|
-
|
|
44
|
-
Decomposition rules:
|
|
45
|
-
- Stateless operations isolated first (pure logic, no dependencies)
|
|
46
|
-
- Stateful operations tested with their immediate downstream effect (shared state boundary)
|
|
47
|
-
- Same assertion target = same run (same variable, same API call, same file)
|
|
48
|
-
- Unrelated assertion targets = separate runs
|
|
49
37
|
|
|
50
38
|
## IMPORT-BASED EXECUTION
|
|
51
39
|
|
|
52
|
-
Always import actual codebase modules. Never rewrite logic inline
|
|
40
|
+
Always import actual codebase modules. Never rewrite logic inline.
|
|
53
41
|
|
|
54
42
|
```
|
|
55
43
|
exec:nodejs
|
|
@@ -57,89 +45,46 @@ const { fn } = await import('/abs/path/to/module.js');
|
|
|
57
45
|
console.log(await fn(realInput));
|
|
58
46
|
```
|
|
59
47
|
|
|
60
|
-
|
|
61
|
-
- When codebase uses a library, import that same library version from actual node_modules.
|
|
62
|
-
- Set `cwd` field on Bash tool when code needs to import from a specific project directory.
|
|
63
|
-
- Witnessed import output = resolved mutable. Reimplemented output = UNKNOWN mutable.
|
|
64
|
-
|
|
65
|
-
## TOOL SELECTION
|
|
66
|
-
|
|
67
|
-
**`exec:<lang>`** — All code execution. Bash tool: `exec:<lang>\n<code>`.
|
|
68
|
-
- `exec:nodejs` (default; aliases: exec, js, javascript, node) | `exec:python` (py) | `exec:bash` (sh, shell, zsh) | `exec:typescript` (ts)
|
|
69
|
-
- `exec:go` | `exec:rust` | `exec:c` | `exec:cpp` | `exec:java` | `exec:deno` | `exec:cmd`
|
|
70
|
-
- Lang auto-detected if omitted. `cwd` field sets working directory.
|
|
71
|
-
- File I/O: `exec:nodejs` with inline `require('fs')`.
|
|
72
|
-
- Background tasks: `bun x gm-exec status|sleep|close|runner <args>`.
|
|
73
|
-
- Bash scope: only `git` directly. All else via exec interception.
|
|
74
|
-
- Post-exec hygiene: `exec:bash\ngit status --porcelain` must be empty. Use temp dir for throwaway code.
|
|
48
|
+
Witnessed import output = resolved mutable. Reimplemented output = UNKNOWN.
|
|
75
49
|
|
|
76
|
-
|
|
77
|
-
- Pure logic / API calls / state mutations: `exec:nodejs` with real imports
|
|
78
|
-
- Shell / filesystem / git: `exec:bash`
|
|
79
|
-
- DOM state / JS vars / network: `exec:agent-browser\n<js>` first
|
|
80
|
-
- Rendering / user interaction: `agent-browser` skill + `__gm` globals
|
|
81
|
-
- Screenshots: absolute last resort
|
|
50
|
+
## TOOL REFERENCE
|
|
82
51
|
|
|
83
|
-
**`
|
|
52
|
+
**`exec:<lang>`** — Bash tool: `exec:<lang>\n<code>`. Languages: `exec:nodejs` (default) | `exec:python` | `exec:bash` | `exec:typescript` | `exec:go` | `exec:rust` | `exec:c` | `exec:cpp` | `exec:java` | `exec:deno` | `exec:cmd`. Lang auto-detected if omitted. `cwd` field sets working directory. File I/O: exec:nodejs with require('fs'). Bash scope: only git directly. All else via exec interception.
|
|
84
53
|
|
|
85
|
-
**`
|
|
54
|
+
**`code-search`** — Semantic code discovery. Invoke `code-search` skill. MANDATORY for all exploration. Glob/Grep/Read-for-discovery/Explore/WebSearch blocked. Fallback: `bun x codebasesearch <query>`. Try 5+ queries before alternatives.
|
|
86
55
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
**`agent-browser`** replaces puppeteer/playwright entirely. Escalation order (exhaust before advancing):
|
|
56
|
+
**`agent-browser`** — Invoke `agent-browser` skill. Replaces puppeteer/playwright entirely. Escalation order:
|
|
90
57
|
1. `exec:agent-browser\n<js>` — query DOM/state via JS. Always first.
|
|
91
58
|
2. `agent-browser` skill + `__gm` globals + evaluate — instrument, intercept, capture.
|
|
92
59
|
3. navigate/click/type — only when state requires real events.
|
|
93
60
|
4. screenshot — LAST RESORT. Screenshot before exhausting 1–3 = blocked gate.
|
|
94
61
|
|
|
95
|
-
**`
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
captures: [],
|
|
99
|
-
log: (...args) => window.__gm.captures.push({t: Date.now(), args}),
|
|
100
|
-
assert: (label, cond) => { window.__gm.captures.push({label, pass: !!cond, val: cond}); return !!cond; },
|
|
101
|
-
dump: () => JSON.stringify(window.__gm.captures, null, 2)
|
|
102
|
-
};
|
|
103
|
-
```
|
|
62
|
+
**`process-management`** — Invoke `process-management` skill. MANDATORY for all servers/workers/daemons. Pre-check before start. Delete on completion. Orphaned processes = gate violation. Direct node/bun/python for servers = violation.
|
|
63
|
+
|
|
64
|
+
## BROWSER GLOBALS SCAFFOLD
|
|
104
65
|
|
|
105
|
-
|
|
66
|
+
Inject before any browser state assertion:
|
|
106
67
|
```js
|
|
107
|
-
window.
|
|
68
|
+
window.__gm = { captures: [], log: (...a) => window.__gm.captures.push({t:Date.now(),a}), assert: (l,c) => { window.__gm.captures.push({l,pass:!!c,val:c}); return !!c; }, dump: () => JSON.stringify(window.__gm.captures,null,2) };
|
|
108
69
|
```
|
|
109
70
|
|
|
110
|
-
|
|
71
|
+
## DUAL-SIDE VALIDATION
|
|
111
72
|
|
|
112
|
-
|
|
73
|
+
Backend via `exec:nodejs`, frontend via `agent-browser` + `__gm`. Neither substitutes. Single-side = UNKNOWN mutable = blocked gate.
|
|
113
74
|
|
|
114
75
|
## GROUND TRUTH
|
|
115
76
|
|
|
116
|
-
Real services, real API responses, real timing only. On discovering mocks/fakes/stubs
|
|
117
|
-
|
|
118
|
-
Unit testing forbidden: no .test.js/.spec.js/.test.ts/.spec.ts, no test/__tests__/ dirs, no mock/stub/fixture files, no test frameworks or dependencies. Delete on discovery. Verify via `exec:<lang>` with actual services only.
|
|
119
|
-
|
|
120
|
-
## SYSTEM ARCHITECTURE REQUIREMENTS
|
|
121
|
-
|
|
122
|
-
Code produced during EXECUTE must satisfy:
|
|
123
|
-
|
|
124
|
-
**Hot Reload**: State outside reloadable modules. Handlers swap atomically. Zero downtime. Old handlers drain before new attach. Monolithic non-reloadable modules forbidden.
|
|
125
|
-
|
|
126
|
-
**Uncrashable**: Catch at every boundary. Nothing propagates to termination. Recovery hierarchy: retry w/backoff → restart component → supervisor → parent supervisor → top-level catch/log/recover. Every component supervised. Checkpoint continuously. Fresh state on recovery loops. System runs forever.
|
|
127
|
-
|
|
128
|
-
**Recovery**: Checkpoint to known good state. Fast-forward past corruption. Track failure counters. Auto-fix. Never crash as recovery. Never require human intervention first.
|
|
129
|
-
|
|
130
|
-
**Async**: Contain all promises. Debounce entry. Signals/emitters for coordination. Locks on critical sections.
|
|
131
|
-
|
|
132
|
-
**Debug**: Hook state to global scope. Expose internals. Provide REPL handles.
|
|
77
|
+
Real services, real API responses, real timing only. On discovering mocks/fakes/stubs: delete immediately, implement real paths. Unit testing forbidden: no .test.js/.spec.js, no mock files. Delete on discovery.
|
|
133
78
|
|
|
134
79
|
## CONSTRAINTS (EXECUTE-PHASE)
|
|
135
80
|
|
|
136
81
|
**Tier 0 (ABSOLUTE)**: immortality, no_crash, no_exit, ground_truth_only, real_execution
|
|
137
82
|
**Tier 1 (CRITICAL)**: max_file_lines=200, hot_reloadable, checkpoint_state
|
|
138
83
|
|
|
139
|
-
**Never**: fake data | write test files | use Glob/Grep/Explore for discovery | direct bash
|
|
84
|
+
**Never**: fake data | write test files | use Glob/Grep/Explore for discovery | direct bash non-git | puppeteer/playwright | screenshot before JS | independent items sequentially
|
|
140
85
|
|
|
141
|
-
**Always**:
|
|
86
|
+
**Always**: import real modules | delete mocks on discovery | witness every hypothesis | fix issues immediately
|
|
142
87
|
|
|
143
88
|
---
|
|
144
89
|
|
|
145
|
-
**→ NEXT**: When all mutables
|
|
90
|
+
**→ NEXT**: When all mutables resolved → invoke `gm-emit` skill for gate validation and file writing.
|
package/skills/planning/SKILL.md
CHANGED
|
@@ -1,70 +1,77 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: planning
|
|
3
|
-
description: PRD construction for work planning. Compulsory in PLAN phase. Builds .prd file as frozen dependency graph of every possible work item before execution begins. Triggers on any new task, multi-step work, or when gm enters PLAN state.
|
|
4
|
-
allowed-tools: Write
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# PRD Construction
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
##
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
**
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
1
|
+
---
|
|
2
|
+
name: planning
|
|
3
|
+
description: PRD construction for work planning. Compulsory in PLAN phase. Builds .prd file as frozen dependency graph of every possible work item before execution begins. Triggers on any new task, multi-step work, or when gm enters PLAN state.
|
|
4
|
+
allowed-tools: Write
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# PRD Construction
|
|
8
|
+
|
|
9
|
+
You are in the **PLAN** phase. Build the .prd before any execution begins.
|
|
10
|
+
|
|
11
|
+
**GRAPH POSITION**: `[PLAN] → EXECUTE → EMIT → VERIFY → COMPLETE`
|
|
12
|
+
- **Entry**: Invoke this skill at START before any tool calls. No work begins until .prd exists.
|
|
13
|
+
- **Exit**: .prd written to disk → invoke `gm-execute` skill to begin EXECUTE phase.
|
|
14
|
+
|
|
15
|
+
## Purpose
|
|
16
|
+
|
|
17
|
+
The `.prd` is the single source of truth for remaining work. A frozen dependency graph capturing every possible item — steps, substeps, edge cases, corner cases, dependencies, transitive dependencies, unknowns, assumptions, decisions, trade-offs, acceptance criteria, scenarios, failure paths, recovery paths, integration points, state transitions, race conditions, concurrency concerns, error conditions, boundary conditions, configuration variants, environment differences, platform concerns, backwards compatibility, rollback paths, verification steps.
|
|
18
|
+
|
|
19
|
+
Longer is better. Missing items means missing work.
|
|
20
|
+
|
|
21
|
+
## File Rules
|
|
22
|
+
|
|
23
|
+
Path: exactly `./.prd` in current working directory. No variants. Valid JSON.
|
|
24
|
+
|
|
25
|
+
## Item Schema
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"id": "descriptive-kebab-id",
|
|
30
|
+
"subject": "Imperative verb describing outcome",
|
|
31
|
+
"status": "pending",
|
|
32
|
+
"description": "What must be true when this is done",
|
|
33
|
+
"blocking": ["ids-this-prevents"],
|
|
34
|
+
"blockedBy": ["ids-that-must-finish-first"],
|
|
35
|
+
"effort": "small|medium|large",
|
|
36
|
+
"category": "feature|bug|refactor|docs|infra",
|
|
37
|
+
"acceptance": ["measurable criteria"],
|
|
38
|
+
"edge_cases": ["known complications"]
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Subject**: imperative form — "Fix auth bug", "Add webhook support". Never "Bug: auth".
|
|
43
|
+
**Status**: `pending` → `in_progress` → `completed`. No other values.
|
|
44
|
+
**Effort**: `small` (<15min) | `medium` (<45min) | `large` (1h+).
|
|
45
|
+
**Blocking/blockedBy**: bidirectional. Every dependency explicit.
|
|
46
|
+
|
|
47
|
+
## Construction
|
|
48
|
+
|
|
49
|
+
1. Enumerate every possible unknown as a work item.
|
|
50
|
+
2. Map every possible dependency (blocking/blockedBy).
|
|
51
|
+
3. Group independent items into parallel waves (max 3 per wave).
|
|
52
|
+
4. Capture every edge case as either a separate item or edge_case field.
|
|
53
|
+
5. Write `./.prd` to disk.
|
|
54
|
+
6. **FREEZE** — no additions after creation. Only mutation: removing finished items.
|
|
55
|
+
|
|
56
|
+
## Execution
|
|
57
|
+
|
|
58
|
+
1. Find all `pending` items with empty `blockedBy`.
|
|
59
|
+
2. Launch ≤3 parallel subagents (`subagent_type: gm:gm`) per wave.
|
|
60
|
+
3. Each subagent completes one item, verifies via witnessed execution.
|
|
61
|
+
4. On completion: remove item from `.prd`, write updated file.
|
|
62
|
+
5. Check for newly unblocked items. Launch next wave.
|
|
63
|
+
6. Continue until `.prd` is empty.
|
|
64
|
+
|
|
65
|
+
Never execute independent items sequentially. Never launch more than 3 at once.
|
|
66
|
+
|
|
67
|
+
## Completion
|
|
68
|
+
|
|
69
|
+
`.prd` must be empty at COMPLETE. The stop hook blocks session end when items remain.
|
|
70
|
+
|
|
71
|
+
## Do Not Use
|
|
72
|
+
|
|
73
|
+
Skip this skill if the task is trivially single-step (under 5 minutes, no dependencies, no unknowns).
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
**→ NEXT**: .prd written → invoke `gm-execute` skill to begin EXECUTE phase.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: process-management
|
|
3
|
+
description: PM2 process lifecycle management. MANDATORY for all servers, workers, and daemons. Invoke when entering EXECUTE phase for any long-running process.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Process Management — PM2 Lifecycle
|
|
7
|
+
|
|
8
|
+
You are managing long-running processes. Invoke this skill before starting any server, worker, or daemon.
|
|
9
|
+
|
|
10
|
+
**GRAPH POSITION**: Sub-skill of EXECUTE phase.
|
|
11
|
+
- **Invoke**: When `gm-execute` skill encounters any server/worker/daemon requirement → invoke `process-management` skill
|
|
12
|
+
- **Return**: After lifecycle task complete → return to `gm-execute` skill to continue EXECUTE phase
|
|
13
|
+
|
|
14
|
+
## PRE-CHECK (mandatory before any start)
|
|
15
|
+
|
|
16
|
+
Always check for running processes before starting:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
exec:bash
|
|
20
|
+
bun x gm-exec bash pm2 list
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
If process already running:
|
|
24
|
+
- Same name → stop and delete first, then restart
|
|
25
|
+
- Different name but same port → stop that process first
|
|
26
|
+
- Never start a duplicate. Never stack processes.
|
|
27
|
+
|
|
28
|
+
## START A PROCESS
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
exec:bash
|
|
32
|
+
bun x gm-exec bash pm2 start <file> --name <name> --watch --no-autorestart
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
- `--watch`: enables hot reload on file changes
|
|
36
|
+
- `--no-autorestart`: prevents infinite restart loops on crash
|
|
37
|
+
- Always name every process explicitly
|
|
38
|
+
|
|
39
|
+
## STATUS AND LOGS
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
exec:bash
|
|
43
|
+
bun x gm-exec bash pm2 list
|
|
44
|
+
bun x gm-exec bash pm2 logs <name> --lines 50
|
|
45
|
+
bun x gm-exec bash pm2 show <name>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## STOP AND CLEANUP
|
|
49
|
+
|
|
50
|
+
Always clean up processes when work is done:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
exec:bash
|
|
54
|
+
bun x gm-exec bash pm2 stop <name>
|
|
55
|
+
bun x gm-exec bash pm2 delete <name>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Orphaned processes = gate violation. Clean up before COMPLETE.
|
|
59
|
+
|
|
60
|
+
## ORPHAN DETECTION
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
exec:bash
|
|
64
|
+
bun x gm-exec bash pm2 list
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Any process not started in current session = orphan. Delete immediately:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
exec:bash
|
|
71
|
+
bun x gm-exec bash pm2 delete <name>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## CONSTRAINTS
|
|
75
|
+
|
|
76
|
+
**Never**: start without pre-check | use direct node/bun/python for servers | leave orphaned processes | skip cleanup before COMPLETE
|
|
77
|
+
|
|
78
|
+
**Always**: pre-check before start | name every process | watch enabled | autorestart disabled | delete on completion
|
|
79
|
+
|
|
80
|
+
**Orphaned processes = gate violation in COMPLETE phase.**
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
**→ RETURN**: After lifecycle task complete → return to `gm-execute` skill to continue EXECUTE phase.
|