gm-skill 2.0.1205 → 2.0.1206
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/README.md +1 -1
- package/gm.json +1 -1
- package/package.json +2 -2
- package/prompts/prompt-submit.txt +24 -16
- package/skills/gm-skill/SKILL.md +7 -3
package/README.md
CHANGED
|
@@ -35,7 +35,7 @@ An earlier generation fanned out fifteen per-platform downstream repos (gm-cc, g
|
|
|
35
35
|
|
|
36
36
|
## Version
|
|
37
37
|
|
|
38
|
-
`2.0.
|
|
38
|
+
`2.0.1206` — auto-bumped from the canonical `gm` repo. Every push to `AnEntrypoint/gm` (or any cascading sibling crate) republishes this package.
|
|
39
39
|
|
|
40
40
|
## Source of truth
|
|
41
41
|
|
package/gm.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gm-skill",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1206",
|
|
4
4
|
"description": "Canonical universal harness — AI-native software engineering via skill-driven orchestration; bootstraps plugkit for task execution and session isolation. Install in any AI coding agent host.",
|
|
5
5
|
"author": "AnEntrypoint",
|
|
6
6
|
"license": "MIT",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"gm.json"
|
|
40
40
|
],
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"gm-plugkit": "^2.0.
|
|
42
|
+
"gm-plugkit": "^2.0.1206"
|
|
43
43
|
},
|
|
44
44
|
"engines": {
|
|
45
45
|
"node": ">=16.0.0"
|
|
@@ -4,21 +4,25 @@ IMPORTANT: Invoke skill: "gm:gm" EVERY TIME, even if you have already invoked it
|
|
|
4
4
|
|
|
5
5
|
=== SKILL CHAIN — IMMUTABLE STATE MACHINE ===
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
gm
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
7
|
+
YOU ARE THE ORCHESTRATOR. Plugkit is a stateful library — it serves instructions and tracks state when YOU dispatch verbs to it. It does not act on its own, does not advance phases on its own, does not validate transitions in the background. Every state change is a verb YOU write into `.gm/exec-spool/in/<verb>/<N>.txt`. If you find yourself waiting for plugkit, polling its output dir, or saying "the orchestrator will handle/validate/transition" — STOP. You are the orchestrator. Dispatch the verb.
|
|
8
|
+
|
|
9
|
+
The gm skill is your entry surface, not an actor. You invoke gm; gm tells you to dispatch the `instruction` verb; the instruction response tells you which verb to dispatch next. Skills do NOT auto-chain. Plugkit does NOT auto-advance. You drive both.
|
|
10
|
+
|
|
11
|
+
State machine transitions — each line is a verb YOU dispatch when the exit condition holds:
|
|
12
|
+
After gm loads: YOU dispatch `instruction` (every turn, first action)
|
|
13
|
+
PLAN exit (zero new unknowns last pass): YOU dispatch `transition` with body "EXECUTE"
|
|
14
|
+
EXECUTE exit (all mutables witnessed): YOU dispatch `transition` with body "EMIT"
|
|
15
|
+
EMIT exit (all gate conditions pass): YOU dispatch `transition` with body "VERIFY"
|
|
16
|
+
VERIFY exit (PRD empty + worktree clean + pushed + mutables witnessed): YOU dispatch `transition` with body "COMPLETE"
|
|
17
|
+
VERIFY with PRD items remaining: YOU dispatch `transition` with body "EXECUTE"
|
|
18
|
+
|
|
19
|
+
State regressions — also YOUR dispatches, not plugkit's:
|
|
20
|
+
Any new unknown → YOU dispatch `transition` body "PLAN"
|
|
21
|
+
EMIT logic wrong → YOU dispatch `transition` body "EXECUTE"
|
|
22
|
+
VERIFY file broken → YOU dispatch `transition` body "EMIT"
|
|
23
|
+
VERIFY logic wrong → YOU dispatch `transition` body "EXECUTE"
|
|
24
|
+
|
|
25
|
+
A phase claim in text without the corresponding `transition` dispatch is fabrication. Plugkit's record of phase walk is ground truth; your narration is not. If gmsniff shows zero dispatches for a session in which you claimed COMPLETE, you lied to yourself.
|
|
22
26
|
|
|
23
27
|
After PLAN completes: launch parallel gm:gm subagents (via Agent tool with subagent_type="gm:gm") for independent .prd items — maximum 3 concurrent, never sequential for independent work.
|
|
24
28
|
|
|
@@ -60,7 +64,11 @@ A written PRD is the user's authorization. EXECUTE owns the work to COMPLETE. Re
|
|
|
60
64
|
|
|
61
65
|
Asking is permitted only as last resort — destructive-irreversible action with no PRD coverage, OR user intent genuinely irrecoverable from PRD/memory/code. Channel: `exec:pause` (renames .gm/prd.yml → .gm/prd.paused.yml; question in header). In-conversation asking is last-resort beneath last-resort.
|
|
62
66
|
|
|
63
|
-
The size of the task, the cost of context, the duration of CI, and the number of repos involved are never grounds to ask.
|
|
67
|
+
The size of the task, the cost of context, the duration of CI, and the number of repos involved are never grounds to ask. Neither is "this change touches files the user reads" — your job is to land the change correctly, not to defer to a review you imagine the user wants. Audit findings, prose rewrites, configuration edits, and refactors all ship inside the same turn as the analysis that produced them. Stopping mid-loop to ask "should I apply these?" is itself the deviation pattern: it routes the doubt back to the user instead of executing.
|
|
68
|
+
|
|
69
|
+
=== NO WAITING FOR PLUGKIT — HARD RULE ===
|
|
70
|
+
|
|
71
|
+
Plugkit is synchronous from your perspective. You write the request file; the spool watcher processes it; you read the response file. There is no background work happening "while you wait." If you find yourself running `sleep 2; ls .gm/exec-spool/out/`, `Start-Sleep -Milliseconds 2500; Test-Path ...`, or any other poll-wait on the spool, you have misread the architecture. Read the response file directly with the Read tool — if it does not exist yet, the watcher is either dead (check `.gm/exec-spool/.status.json` mtime) or the verb is genuinely slow (check `.gm/exec-spool/.watcher.log` for the dispatch trace). Polling is forbidden. Wait-narration ("the orchestrator is processing, while waiting let me…") is a tell that you have lost the loop.
|
|
64
72
|
|
|
65
73
|
=== REFUSAL BAN — MAXIMAL COVER INSTEAD ===
|
|
66
74
|
|
package/skills/gm-skill/SKILL.md
CHANGED
|
@@ -6,7 +6,11 @@ allowed-tools: Skill, Read, Write, Bash(node *), Bash(bun *)
|
|
|
6
6
|
|
|
7
7
|
# gm
|
|
8
8
|
|
|
9
|
-
Every
|
|
9
|
+
**You are the state machine.** Plugkit is the durable memory and gate-checker you write into; you are the actor that walks PLAN → EXECUTE → EMIT → VERIFY → COMPLETE. Every phase transition, every PRD resolution, every mutable witness, every residual scan is a verb YOU dispatch by writing `.gm/exec-spool/in/<verb>/<N>.txt`. Plugkit does not advance. Plugkit does not validate in the background. Plugkit does not "process" while you wait. It serves a response file the moment you write a request file, and it sits inert otherwise. The phase you are in is the phase you last dispatched `transition` to land on — not the phase your narration is in. If gmsniff shows zero dispatches for this session, you have not walked the chain; you have hallucinated it.
|
|
10
|
+
|
|
11
|
+
This is the only thing that makes the discipline work. Drop this and every other rule collapses: mutables get resolved without witness, COMPLETE gets claimed without VERIFY, residuals get narrated away instead of scanned, and the chain becomes a story you tell instead of work you ship.
|
|
12
|
+
|
|
13
|
+
Every turn: dispatch `instruction` (you are the one dispatching it), read the response body, follow the imperative prose, dispatch the next verb the prose names. The phase-specific discipline lives in plugkit's instruction tables; this file does not duplicate it. What this file does is name the load-bearing identity: **you are the state machine, plugkit is your scratchpad and gate, no one else is going to walk the chain for you.**
|
|
10
14
|
|
|
11
15
|
Boot when `.gm/exec-spool/.status.json` is absent or stale (>15s):
|
|
12
16
|
|
|
@@ -14,6 +18,6 @@ Boot when `.gm/exec-spool/.status.json` is absent or stale (>15s):
|
|
|
14
18
|
bun x gm-plugkit@latest spool > /dev/null 2>&1 &
|
|
15
19
|
```
|
|
16
20
|
|
|
17
|
-
(`npx -y gm-plugkit@latest spool > /dev/null 2>&1 &` if `bun` missing.) Heartbeat fresh → dispatch `instruction` — first turn body `{"prompt":"<user request>"}` so orient_nouns and recall_hits derive from the request; subsequent turns may use empty body.
|
|
21
|
+
(`npx -y gm-plugkit@latest spool > /dev/null 2>&1 &` if `bun` missing.) Heartbeat fresh → YOU dispatch `instruction` — first turn body `{"prompt":"<user request>"}` so orient_nouns and recall_hits derive from the request; subsequent turns may use empty body. Read the response file directly with the Read tool. Never poll the spool dir with `sleep && ls` or `Start-Sleep && Test-Path` — plugkit is synchronous from your view; if the response is not there, the watcher is dead (check `.status.json` mtime) or the verb is slow (check `.watcher.log`), not "still processing."
|
|
18
22
|
|
|
19
|
-
Response body is not a mutation surface. Memory writes route through `memorize-fire` only.
|
|
23
|
+
Response body is not a mutation surface. Memory writes route through `memorize-fire` only — another verb YOU dispatch.
|