@webpresso/plugin-codex 0.0.14 → 0.0.16
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/.codex-plugin/plugin.json +6 -6
- package/.mcp.json +1 -1
- package/package.json +2 -2
- package/plugin-skill-ownership.json +18 -18
- package/skills/autopilot/SKILL.md +16 -16
- package/skills/claude/SKILL.md +11 -6
- package/skills/codex/SKILL.md +11 -6
- package/skills/deep-interview/SKILL.md +13 -13
- package/skills/delivery-program/SKILL.md +4 -4
- package/skills/fix/SKILL.md +18 -18
- package/skills/handoff/SKILL.md +42 -11
- package/skills/hooks-doctor/SKILL.md +1 -1
- package/skills/investigate/SKILL.md +9 -9
- package/skills/opencode-go/SKILL.md +11 -10
- package/skills/plan-refine/SKILL.md +1 -1
- package/skills/ralplan/SKILL.md +1 -1
- package/skills/team/SKILL.md +62 -18
- package/skills/tech-debt/SKILL.md +1 -1
- package/skills/tooling-friction/SKILL.md +11 -11
- package/skills/ultragoal/SKILL.md +52 -57
- package/skills/verify/SKILL.md +46 -43
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "Webpresso
|
|
2
|
+
"name": "wp",
|
|
3
|
+
"version": "0.0.16",
|
|
4
|
+
"description": "Webpresso app: blueprints, skills, hooks, and MCP server",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Webpresso",
|
|
7
7
|
"url": "https://github.com/webpresso"
|
|
8
8
|
},
|
|
9
|
-
"homepage": "https://github.com/webpresso/
|
|
10
|
-
"repository": "https://github.com/webpresso/
|
|
9
|
+
"homepage": "https://github.com/webpresso/app#readme",
|
|
10
|
+
"repository": "https://github.com/webpresso/app",
|
|
11
11
|
"license": "Elastic-2.0",
|
|
12
12
|
"keywords": ["agent", "blueprint", "mcp", "skills", "developer-tools"],
|
|
13
13
|
"skills": "./skills/",
|
|
14
14
|
"mcpServers": "./.mcp.json",
|
|
15
15
|
"hooks": "./hooks/hooks.json",
|
|
16
16
|
"interface": {
|
|
17
|
-
"displayName": "Webpresso
|
|
17
|
+
"displayName": "Webpresso",
|
|
18
18
|
"shortDescription": "Blueprints, skills, hooks, and MCP tools.",
|
|
19
19
|
"developerName": "Webpresso",
|
|
20
20
|
"category": "Development",
|
package/.mcp.json
CHANGED
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webpresso/plugin-codex",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.16",
|
|
4
4
|
"private": false,
|
|
5
|
-
"description": "Codex plugin adapter for Webpresso
|
|
5
|
+
"description": "Codex plugin adapter for the Webpresso app (wp CLI) skills, hooks, and MCP runtime.",
|
|
6
6
|
"homepage": "https://github.com/webpresso/app#readme",
|
|
7
7
|
"bugs": {
|
|
8
8
|
"url": "https://github.com/webpresso/app/issues"
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"host": "codex",
|
|
4
4
|
"packageName": "@webpresso/plugin-codex",
|
|
5
|
-
"packageVersion": "0.0.
|
|
5
|
+
"packageVersion": "0.0.16",
|
|
6
6
|
"runtimeDirs": [".codex/skills", ".agents/skills"],
|
|
7
7
|
"skills": {
|
|
8
8
|
"ai-deslop": {
|
|
9
9
|
"digest": "sha256:cf07df5835037f10401400e220c1c923f5325a6149d59c231ce316e10595fdfc"
|
|
10
10
|
},
|
|
11
11
|
"autopilot": {
|
|
12
|
-
"digest": "sha256:
|
|
12
|
+
"digest": "sha256:8355f6ddc6e53e68ada49248bdd8d8beb0069ed09d3f2d346debc2401270445c"
|
|
13
13
|
},
|
|
14
14
|
"autoresearch": {
|
|
15
15
|
"digest": "sha256:b4d51cd53beb4a3271827172dfbd0b1d27bd58761ca07a35d49a5d6324b87fdf"
|
|
@@ -21,19 +21,19 @@
|
|
|
21
21
|
"digest": "sha256:21fd24862e7f7c8a1feadea6bc376492b136b99fc381cf1b8927c9db80615431"
|
|
22
22
|
},
|
|
23
23
|
"claude": {
|
|
24
|
-
"digest": "sha256:
|
|
24
|
+
"digest": "sha256:63b7afb2b65f65fb142e5ef142f80516be00c54d449c5fa7d7897bcaa6cae657"
|
|
25
25
|
},
|
|
26
26
|
"codex": {
|
|
27
|
-
"digest": "sha256:
|
|
27
|
+
"digest": "sha256:574669e040141e9986e362e9f46e3176aa47eccfda0f4589205d9d6d65e57b8d"
|
|
28
28
|
},
|
|
29
29
|
"deep-interview": {
|
|
30
|
-
"digest": "sha256:
|
|
30
|
+
"digest": "sha256:1d5bbb564dde9037722d2029f771afb52c2fe000a2b38822db430224cbe3407d"
|
|
31
31
|
},
|
|
32
32
|
"deep-research": {
|
|
33
33
|
"digest": "sha256:ece766cb18869317d7c8992fc562920b03250ff8c44bdcb9eccdc3b21922a83f"
|
|
34
34
|
},
|
|
35
35
|
"delivery-program": {
|
|
36
|
-
"digest": "sha256:
|
|
36
|
+
"digest": "sha256:a2222cc04fb5366026b951273e4e5d5d8c296d426d51706da8a6b56761a4567f"
|
|
37
37
|
},
|
|
38
38
|
"design-review": {
|
|
39
39
|
"digest": "sha256:5b213735e2842568774572f36b198bccf03c03a54b2732484aadd023f04acb23"
|
|
@@ -42,22 +42,22 @@
|
|
|
42
42
|
"digest": "sha256:306355888da0827e3523022077f731845726bbaaf595ca12515cc91d8605b5e6"
|
|
43
43
|
},
|
|
44
44
|
"fix": {
|
|
45
|
-
"digest": "sha256:
|
|
45
|
+
"digest": "sha256:cf5d74995a690307ebbc3f6b017b03a0c2b395acecccb16dcfedbb9674d0f155"
|
|
46
46
|
},
|
|
47
47
|
"handoff": {
|
|
48
|
-
"digest": "sha256:
|
|
48
|
+
"digest": "sha256:5d40899f54fabe3f6ec8f99b417345a433850585086570872a137a1d0d837002"
|
|
49
49
|
},
|
|
50
50
|
"hooks-doctor": {
|
|
51
|
-
"digest": "sha256:
|
|
51
|
+
"digest": "sha256:0a32515ba42755847552991fe5dafe5bd9572a9540e7b376f56d8549320a4cf2"
|
|
52
52
|
},
|
|
53
53
|
"investigate": {
|
|
54
|
-
"digest": "sha256:
|
|
54
|
+
"digest": "sha256:44578904d967161b9128830c7c66f9684bb8c8257e8da7884dd6dbda88743b39"
|
|
55
55
|
},
|
|
56
56
|
"lore-protocol": {
|
|
57
57
|
"digest": "sha256:a80fbacc765e8b886437b9fdf7dd71e1ceb1b98b939078ec90fc88d06a8b4c69"
|
|
58
58
|
},
|
|
59
59
|
"opencode-go": {
|
|
60
|
-
"digest": "sha256:
|
|
60
|
+
"digest": "sha256:9498e4f9d9c1b8ee2355d9ca57c65eaf2a3a9dbc2ba11ef0c4b0428769949f05"
|
|
61
61
|
},
|
|
62
62
|
"plan-ceo-review": {
|
|
63
63
|
"digest": "sha256:4d426158518dd71f8998770e8d4037bcbfa3c65d7265a93a4a78a9b015ba881e"
|
|
@@ -72,31 +72,31 @@
|
|
|
72
72
|
"digest": "sha256:b728dad90254d4c9f81b3818321d34ab53519b79ce20ff3bfe08bfacb2aa3e86"
|
|
73
73
|
},
|
|
74
74
|
"plan-refine": {
|
|
75
|
-
"digest": "sha256:
|
|
75
|
+
"digest": "sha256:3dccc4e85ff7f355b1d7297b636d7acf3c31658b749fc1778ffdd1a255b27300"
|
|
76
76
|
},
|
|
77
77
|
"ralplan": {
|
|
78
|
-
"digest": "sha256:
|
|
78
|
+
"digest": "sha256:aa8879addccc19c0cdb69fce945fe54cf356380203f774080f8655211a5841c3"
|
|
79
79
|
},
|
|
80
80
|
"team": {
|
|
81
|
-
"digest": "sha256:
|
|
81
|
+
"digest": "sha256:e403a5a92d145e777d7a344fe8fc6fe5df44640691aa2319b6dfd50b909166f5"
|
|
82
82
|
},
|
|
83
83
|
"tech-debt": {
|
|
84
|
-
"digest": "sha256:
|
|
84
|
+
"digest": "sha256:fd2f8e26e006c9c5ed5ef6f1678c3f7472a35dfd2f743e58f7ec348606399353"
|
|
85
85
|
},
|
|
86
86
|
"testing-philosophy": {
|
|
87
87
|
"digest": "sha256:23fdad944b089de3cfcd13957a5ac10c37bd3d136b192029af69368bca1470db"
|
|
88
88
|
},
|
|
89
89
|
"tooling-friction": {
|
|
90
|
-
"digest": "sha256:
|
|
90
|
+
"digest": "sha256:7f6e60a2c886e0c735135ab66926fbbd1b54d9291036fb0ddea020c7754f1534"
|
|
91
91
|
},
|
|
92
92
|
"tph": {
|
|
93
93
|
"digest": "sha256:bed3684a850651534f315d355cdeae50d951c429817df0f105cccdb7f4e1561b"
|
|
94
94
|
},
|
|
95
95
|
"ultragoal": {
|
|
96
|
-
"digest": "sha256:
|
|
96
|
+
"digest": "sha256:8826e955c3a68f962d73a4b476d952574fa32e802c0d2616d569e58e7cfc29c3"
|
|
97
97
|
},
|
|
98
98
|
"verify": {
|
|
99
|
-
"digest": "sha256:
|
|
99
|
+
"digest": "sha256:e1aa3baed96ef005b144e17fac8a2153b90a075b142acee2fdfba7c89e613765"
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
}
|
|
@@ -21,11 +21,11 @@ argument-hint: "<brief|force: brief>"
|
|
|
21
21
|
- parallel ready-set execution under ultragoal controller
|
|
22
22
|
|
|
23
23
|
Drive an approved brief through `plan -> execute -> qa -> validate -> land -> complete`
|
|
24
|
-
using `
|
|
24
|
+
using `ultragoal_run` / `wp ultragoal run` and the current handoff.
|
|
25
25
|
|
|
26
26
|
## Outside-voice (required)
|
|
27
27
|
|
|
28
|
-
After each ultragoal **phase or plan-gate milestone**, run an
|
|
28
|
+
After each ultragoal **phase or plan-gate milestone**, run an outside-voice review. Pass `caller_model` with your own model id and omit `provider`/`model`/`effort`: the gate selects the cross-family reviewer route itself (capability, limits, measured daily cost) and reports it in `policy_selection`. Never resolve model ids from a live catalog at invocation time. `review_gate` has one mode: purpose plan for exact-version draft plan approval/auto-promotion, purpose delivery for implementation/phase review; each new provider verdict is a formal round and an approval is authority immediately. Never self-approve. Full protocol: the `ultragoal` skill. Respect `review_budget` (default owned by `workflow-skills-routing.md`): one sequential path, no multi-host stampede.
|
|
29
29
|
|
|
30
30
|
## Vague gate
|
|
31
31
|
|
|
@@ -45,23 +45,23 @@ skill.
|
|
|
45
45
|
|
|
46
46
|
## Tooling map
|
|
47
47
|
|
|
48
|
-
| Pipeline step | Tools
|
|
49
|
-
| -------------------- |
|
|
50
|
-
| Plan | `plan-refine`, `
|
|
51
|
-
| Create controller | `
|
|
52
|
-
| Execute | ready-set via blueprint tools; `/goal` or parallel subagents; `
|
|
53
|
-
| Opportunistic repair | `/fix` up to `fix_budget`; else handoff backlog
|
|
54
|
-
| QA | `
|
|
55
|
-
| Validate | one outside voice if merge-bound (
|
|
56
|
-
| Land | `
|
|
57
|
-
| Blocked / stop | `
|
|
48
|
+
| Pipeline step | Tools |
|
|
49
|
+
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
50
|
+
| Plan | `plan-refine`, `blueprint_*`, `session_capture` for decisions |
|
|
51
|
+
| Create controller | `ultragoal_new`, `worktree` |
|
|
52
|
+
| Execute | ready-set via blueprint tools; `/goal` or parallel subagents; `session_context` for delegates; `blueprint_task_verify` only to complete tasks |
|
|
53
|
+
| Opportunistic repair | `/fix` up to `fix_budget`; else handoff backlog |
|
|
54
|
+
| QA | `qa` / `lint` / `typecheck` / `test`; PR checks via `pr_status` / `pr_wait` |
|
|
55
|
+
| Validate | one outside voice if merge-bound (the gate picks the cross-family reviewer from `caller_model`); `wp review gate` for authority |
|
|
56
|
+
| Land | `pr_upsert`, green required checks, merge + owner cleanup |
|
|
57
|
+
| Blocked / stop | `ultragoal_handoff` ≤40 lines; if the send channel is capped, the handoff records send-budget state (attempt count, last canary result); judgment requests ride the typed envelope or are named in the manifest; preserve the outbox, never route around a pause; `ultragoal_cancel` if abandoned |
|
|
58
58
|
|
|
59
59
|
## Pipeline
|
|
60
60
|
|
|
61
61
|
1. **Plan:** refine blueprints and satisfy provenance-backed promotion approvals.
|
|
62
62
|
2. **Execute:** implement current **ready** tasks in parallel up to `concurrency`; use only
|
|
63
|
-
`
|
|
64
|
-
3. **QA:** run affected checks and `
|
|
63
|
+
`blueprint_task_verify` to mark them done.
|
|
64
|
+
3. **QA:** run affected checks and `qa`; preserve normalized failure evidence. Prefer
|
|
65
65
|
PR-bound CI when a PR exists.
|
|
66
66
|
4. **Validate:** obtain verification + code-review evidence within `review_budget`. Each
|
|
67
67
|
lane appends a tracked `reviews.md` record in one of these exact forms:
|
|
@@ -73,10 +73,10 @@ skill.
|
|
|
73
73
|
|
|
74
74
|
5. **Land:** require green PR checks, complete the blueprint in the same PR, merge, and
|
|
75
75
|
run owner cleanup.
|
|
76
|
-
6. **Complete:** stop only when `
|
|
76
|
+
6. **Complete:** stop only when `ultragoal_run` records terminal evidence.
|
|
77
77
|
|
|
78
78
|
Resume from durable state after interruption. Obey `WP_ULTRAGOAL_DISABLE=1`,
|
|
79
79
|
iteration/error/validation caps, and repository ownership. Never self-approve, directly
|
|
80
80
|
mark tasks done, bypass evidence, push to main, or increase timeouts (keep every loop bounded and never increase timeouts). After every phase
|
|
81
|
-
transition recorded by `wp ultragoal run`, obtain a fresh
|
|
81
|
+
transition recorded by `wp ultragoal run`, obtain a fresh outside-voice review
|
|
82
82
|
before treating the milestone as closed (see Outside-voice above and the `ultragoal` skill).
|
package/skills/claude/SKILL.md
CHANGED
|
@@ -11,8 +11,8 @@ until independently verified.
|
|
|
11
11
|
|
|
12
12
|
## MCP-only contract
|
|
13
13
|
|
|
14
|
-
- Call `
|
|
15
|
-
- Observe the same durable operation with `
|
|
14
|
+
- Call `review_gate` exactly once for the real plan version or delivery diff.
|
|
15
|
+
- Observe the same durable operation with `review_gate_wait` when needed.
|
|
16
16
|
- Never invoke a provider command, the legacy review CLI, or a removed review-run surface.
|
|
17
17
|
- If the review MCP is unavailable, stop and report it unavailable. There is no CLI fallback.
|
|
18
18
|
|
|
@@ -25,7 +25,7 @@ until independently verified.
|
|
|
25
25
|
"purpose": "delivery",
|
|
26
26
|
"base_ref": "<full-base-sha>",
|
|
27
27
|
"authority_ref": "<full-head-sha>",
|
|
28
|
-
"
|
|
28
|
+
"caller_model": "<your own model id, exactly as your host reports it>",
|
|
29
29
|
"repository_access": "none",
|
|
30
30
|
}
|
|
31
31
|
```
|
|
@@ -36,10 +36,15 @@ verdict with no new review and no new round. A partial approval, withheld becaus
|
|
|
36
36
|
is incomplete (not every prior finding was briefed, or a briefed prior claim was marked
|
|
37
37
|
still-open without a matching finding), grants no authority and spends no round.
|
|
38
38
|
|
|
39
|
-
##
|
|
39
|
+
## Reviewer selection
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
Pass `caller_model` with your OWN model id, exactly as your host reports it, and omit
|
|
42
|
+
`provider`, `model`, and `effort`: the gate selects the reviewer route itself — a cross-family
|
|
43
|
+
reviewer chosen for capability, current provider limits, and measured daily cost — and reports
|
|
44
|
+
the choice in `policy_selection`. Never name a reviewer model, probe a provider CLI for its
|
|
45
|
+
catalog, or read a credential store to discover models at invocation time; provider catalog
|
|
46
|
+
discovery belongs to the snapshot drift workflow. An operator may still pass an explicit
|
|
47
|
+
`provider`/`model` as a human override; agents must not.
|
|
43
48
|
|
|
44
49
|
## Review quality
|
|
45
50
|
|
package/skills/codex/SKILL.md
CHANGED
|
@@ -11,8 +11,8 @@ until independently verified.
|
|
|
11
11
|
|
|
12
12
|
## MCP-only contract
|
|
13
13
|
|
|
14
|
-
- Call `
|
|
15
|
-
- Observe the same durable operation with `
|
|
14
|
+
- Call `review_gate` exactly once for the real plan version or delivery diff.
|
|
15
|
+
- Observe the same durable operation with `review_gate_wait` when needed.
|
|
16
16
|
- Never invoke a provider command, the legacy review CLI, or a removed review-run surface.
|
|
17
17
|
- If the review MCP is unavailable, stop and report it unavailable. There is no CLI fallback.
|
|
18
18
|
|
|
@@ -25,7 +25,7 @@ until independently verified.
|
|
|
25
25
|
"purpose": "delivery",
|
|
26
26
|
"base_ref": "<full-base-sha>",
|
|
27
27
|
"authority_ref": "<full-head-sha>",
|
|
28
|
-
"
|
|
28
|
+
"caller_model": "<your own model id, exactly as your host reports it>",
|
|
29
29
|
"repository_access": "none",
|
|
30
30
|
}
|
|
31
31
|
```
|
|
@@ -36,10 +36,15 @@ verdict with no new review and no new round. A partial approval, withheld becaus
|
|
|
36
36
|
is incomplete (not every prior finding was briefed, or a briefed prior claim was marked
|
|
37
37
|
still-open without a matching finding), grants no authority and spends no round.
|
|
38
38
|
|
|
39
|
-
##
|
|
39
|
+
## Reviewer selection
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
Pass `caller_model` with your OWN model id, exactly as your host reports it, and omit
|
|
42
|
+
`provider`, `model`, and `effort`: the gate selects the reviewer route itself — a cross-family
|
|
43
|
+
reviewer chosen for capability, current provider limits, and measured daily cost — and reports
|
|
44
|
+
the choice in `policy_selection`. Never name a reviewer model, probe a provider CLI for its
|
|
45
|
+
catalog, or read a credential store to discover models at invocation time; provider catalog
|
|
46
|
+
discovery belongs to the snapshot drift workflow. An operator may still pass an explicit
|
|
47
|
+
`provider`/`model` as a human override; agents must not.
|
|
43
48
|
|
|
44
49
|
## Review quality
|
|
45
50
|
|
|
@@ -59,7 +59,7 @@ Max rounds is a hard cap, not a target. Do not continue only to reach a round co
|
|
|
59
59
|
- Treat every answer as a claim to pressure-test: the next question should usually demand evidence or an example, expose a hidden assumption, force a tradeoff or boundary, or reframe root cause vs symptom.
|
|
60
60
|
- Do not rotate to a new dimension just for coverage when the current answer is still vague. Stay on the thread until it is one layer deeper, one assumption clearer, or one boundary tighter.
|
|
61
61
|
- Before crystallizing, complete at least one explicit pressure pass that revisits an earlier answer with a deeper, assumption- or tradeoff-focused follow-up.
|
|
62
|
-
- Gather codebase facts via local search tools, `
|
|
62
|
+
- Gather codebase facts via local search tools, `session_*` retrieval, and read-only repo inspection before asking the user about internals.
|
|
63
63
|
- Always run a preflight context intake before the first question.
|
|
64
64
|
- For brownfield work, preflight must ground in docs before user-facing questions: inspect applicable `AGENTS.md`/`CLAUDE.md`, README/getting-started docs, relevant `docs/` contracts/plans/ADRs, existing blueprints under `blueprints/`, and any project glossary such as `UBIQUITOUS_LANGUAGE.md` when present.
|
|
65
65
|
- Treat repo language as evidence, not authority: if the user uses a fuzzy, overloaded, or conflicting term, surface the specific doc/code wording and ask which meaning should govern.
|
|
@@ -82,17 +82,17 @@ Max rounds is a hard cap, not a target. Do not continue only to reach a round co
|
|
|
82
82
|
## Phase 0: Preflight Context Intake
|
|
83
83
|
|
|
84
84
|
1. Parse `{{ARGUMENTS}}` and derive a short kebab-case task slug.
|
|
85
|
-
2. Attempt to load the latest relevant context for the slug from session memory via the `
|
|
85
|
+
2. Attempt to load the latest relevant context for the slug from session memory via the `session_search`/`session_retrieve` MCP tools.
|
|
86
86
|
3. If the provided initial context (or loaded snapshot) is too large for safe prompt use, the first round must ask for a concise prompt-safe summary before scoring ambiguity or any downstream handoff. This gate is blocking: preserve goals, constraints, success criteria, non-goals, decision boundaries, and references to the full source documents.
|
|
87
87
|
4. If no snapshot exists, create a minimum snapshot with: task statement, desired outcome, stated solution, probable intent hypothesis, known facts/evidence, constraints, unknowns/open questions, decision-boundary unknowns, likely codebase touchpoints, repo docs/rules inspected, terminology/doc-code conflicts found.
|
|
88
88
|
5. For brownfield tasks, inspect the applicable documentation/rule surface before the first user-facing round. Prefer exact, nearby sources: governing `AGENTS.md`/`CLAUDE.md`, README/getting-started docs, relevant `docs/` contracts/plans/ADRs, existing blueprints, and project glossary/context files when present.
|
|
89
|
-
6. Capture the snapshot into session memory via `
|
|
89
|
+
6. Capture the snapshot into session memory via `session_capture` (tagged with the slug) and reference it in the interview state.
|
|
90
90
|
|
|
91
91
|
## Phase 1: Initialize
|
|
92
92
|
|
|
93
93
|
1. Parse `{{ARGUMENTS}}` and the depth profile (`--quick|--standard|--deep`).
|
|
94
94
|
2. Detect project context: use local search tools and read-only repo inspection to classify **brownfield** (existing codebase target) vs **greenfield**; for brownfield, collect relevant context before questioning.
|
|
95
|
-
3. Persist a lightweight resumable interview state to session memory via `
|
|
95
|
+
3. Persist a lightweight resumable interview state to session memory via `session_capture` (interview id, profile, type, initial idea, rounds, current ambiguity, threshold, max rounds, challenge modes used, current stage/focus, context snapshot reference), so a later session can resume via `session_search`/`session_restore`.
|
|
96
96
|
4. Announce kickoff with the profile, threshold, and current ambiguity.
|
|
97
97
|
|
|
98
98
|
## Phase 2: Socratic Interview Loop
|
|
@@ -178,7 +178,7 @@ Show the weighted breakdown table, readiness-gate status (`Non-goals`, `Decision
|
|
|
178
178
|
|
|
179
179
|
### 2e) Persist state
|
|
180
180
|
|
|
181
|
-
Append the round result and updated scores to the slug-tagged interview state in session memory (`
|
|
181
|
+
Append the round result and updated scores to the slug-tagged interview state in session memory (`session_capture`).
|
|
182
182
|
|
|
183
183
|
### 2f) Round controls
|
|
184
184
|
|
|
@@ -203,9 +203,9 @@ Track used modes in state to prevent repetition.
|
|
|
203
203
|
|
|
204
204
|
When the threshold is met (or the user exits with warning / hard cap):
|
|
205
205
|
|
|
206
|
-
1. Create or update the versioned draft that owns this task with `
|
|
206
|
+
1. Create or update the versioned draft that owns this task with `blueprint_put`, yielding `blueprints/draft/{slug}/`. In this repo, deep interviews exist to produce better blueprints before implementation; carry the returned `bpv1:` version through every replacement.
|
|
207
207
|
2. Write the interview transcript summary to `blueprints/draft/{slug}/interview.md`.
|
|
208
|
-
3. Fold the execution-ready spec into `blueprints/draft/{slug}/_overview.md` (intent, scope, non-goals, decision boundaries, constraints, acceptance criteria), and capture a copy of the final spec + scores into session memory via `
|
|
208
|
+
3. Fold the execution-ready spec into `blueprints/draft/{slug}/_overview.md` (intent, scope, non-goals, decision boundaries, constraints, acceptance criteria), and capture a copy of the final spec + scores into session memory via `session_capture`.
|
|
209
209
|
|
|
210
210
|
The spec should include: metadata (profile, rounds, final ambiguity, threshold, context type); context snapshot reference; prompt-safe initial-context summary when oversized context was provided, plus references to the full sources; the clarity breakdown table; Intent (why); Desired Outcome; In-Scope; Out-of-Scope / Non-goals; Decision Boundaries (what the agent may decide without confirmation); Constraints; testable acceptance criteria (prefer repo verification surfaces — `wp test`, `wp typecheck`, `wp audit` — over manual checks); assumptions exposed and their resolutions; pressure-pass findings (which answer was revisited and what changed); brownfield evidence-vs-inference notes; the Docs/Terminology Ledger; scenario/edge-case findings that shaped scope or acceptance; and the full or condensed transcript.
|
|
211
211
|
|
|
@@ -219,7 +219,7 @@ Present execution options after artifact generation using explicit handoff contr
|
|
|
219
219
|
- **`autopilot`** — when the spec is already strong enough for direct planning plus execution. Consumer uses the spec as the clarified execution brief with the non-goals and acceptance criteria as binding context.
|
|
220
220
|
- **`ultragoal`** — when the clarified work should become durable, sequentially tracked goal-mode work.
|
|
221
221
|
- **`team`** — when the task is large, multi-lane, or blocker-sensitive enough to justify coordinated parallel execution.
|
|
222
|
-
- **Blueprint lifecycle** — refine with `
|
|
222
|
+
- **Blueprint lifecycle** — refine with `blueprint_put`, review the exact version with `review_gate`, and inspect the auto-promoted result with `blueprint_get` when work should enter planned execution directly.
|
|
223
223
|
- **Refine further** — re-enter the loop to resolve the highest-leverage remaining uncertainty when residual ambiguity is still too high or an early-exit/above-threshold warning indicates too much risk to proceed cleanly.
|
|
224
224
|
|
|
225
225
|
For research-shaped requests (a research question, evaluator-backed analysis, or reference gathering), hand off to `autoresearch` after the interview converges on a validator-ready mission; keep the explicit `refine further` vs `launch` boundary and do not launch until the user confirms.
|
|
@@ -232,11 +232,11 @@ For research-shaped requests (a research question, evaluator-backed analysis, or
|
|
|
232
232
|
|
|
233
233
|
<Tool_Usage>
|
|
234
234
|
|
|
235
|
-
- Use local search tools, `
|
|
235
|
+
- Use local search tools, `session_*` retrieval, and read-only repo inspection for codebase fact gathering.
|
|
236
236
|
- Use the host's native structured-question tool (e.g. `AskUserQuestion`) for each round when available; otherwise ask one concise plain-text question and wait.
|
|
237
|
-
- Keep context snapshots and resumable interview state in session memory via the `
|
|
237
|
+
- Keep context snapshots and resumable interview state in session memory via the `session_*` MCP tools, tagged with the task slug.
|
|
238
238
|
- Read applicable repo docs/rules/context during preflight; write durable docs/glossary/ADR updates only when the user explicitly opts in and the content is public-safe.
|
|
239
|
-
- Land transcript artifacts in the active task's blueprint folder; create/update `_overview.md` only through `
|
|
239
|
+
- Land transcript artifacts in the active task's blueprint folder; create/update `_overview.md` only through `blueprint_put`.
|
|
240
240
|
- Use `best-practice-research` when unresolved ambiguity depends on current external/upstream guidance.
|
|
241
241
|
</Tool_Usage>
|
|
242
242
|
|
|
@@ -250,7 +250,7 @@ For research-shaped requests (a research question, evaluator-backed analysis, or
|
|
|
250
250
|
|
|
251
251
|
<Final_Checklist>
|
|
252
252
|
|
|
253
|
-
- [ ] Preflight context snapshot captured to session memory (`
|
|
253
|
+
- [ ] Preflight context snapshot captured to session memory (`session_capture`, slug-tagged)
|
|
254
254
|
- [ ] Oversized initial context, if present, has a prompt-safe summary before scoring or handoff
|
|
255
255
|
- [ ] Ambiguity score shown each round
|
|
256
256
|
- [ ] Intent-first stage priority used before implementation detail
|
|
@@ -260,7 +260,7 @@ For research-shaped requests (a research question, evaluator-backed analysis, or
|
|
|
260
260
|
- [ ] Challenge modes triggered at thresholds (when applicable)
|
|
261
261
|
- [ ] `Non-goals` and `Decision Boundaries` explicit before handoff
|
|
262
262
|
- [ ] Transcript written to `blueprints/draft/{slug}/interview.md`
|
|
263
|
-
- [ ] Spec folded into `blueprints/draft/{slug}/_overview.md` through `
|
|
263
|
+
- [ ] Spec folded into `blueprints/draft/{slug}/_overview.md` through `blueprint_put`
|
|
264
264
|
- [ ] Brownfield questions use evidence-backed confirmation and doc grounding when applicable
|
|
265
265
|
- [ ] Fuzzy/conflicting terminology challenged against repo language when applicable
|
|
266
266
|
- [ ] Handoff options provided (`ralplan`, `autopilot`, `ultragoal`, `team`, blueprint lifecycle)
|
|
@@ -28,14 +28,14 @@ Child membership comes only from `parent_roadmap`; do not maintain a second list
|
|
|
28
28
|
|
|
29
29
|
## Loop
|
|
30
30
|
|
|
31
|
-
1. Call `
|
|
31
|
+
1. Call `delivery_status({ slug })`.
|
|
32
32
|
2. Treat its `version`, blockers, and exact returned action as the current derived
|
|
33
33
|
truth. Do not reconstruct state from transcripts.
|
|
34
|
-
3. Dispatch only returned `
|
|
34
|
+
3. Dispatch only returned `worktree` actions. Child work starts from the
|
|
35
35
|
delivery branch and child PRs target that branch.
|
|
36
36
|
4. Integrate at most one child at a time. Recheck status immediately before
|
|
37
|
-
calling `
|
|
38
|
-
5. An `enqueued` merge is not integrated. Call `
|
|
37
|
+
calling `pr_merge` with the exact returned head SHA.
|
|
38
|
+
5. An `enqueued` merge is not integrated. Call `delivery_status` again and
|
|
39
39
|
wait for the merged postcondition.
|
|
40
40
|
6. After every child PR is merged, verify the delivery branch and land its final
|
|
41
41
|
PR to `delivery_base` through the same exact-SHA merge tool.
|
package/skills/fix/SKILL.md
CHANGED
|
@@ -31,26 +31,26 @@ the blast radius is broader than a local fix.
|
|
|
31
31
|
|
|
32
32
|
## Tooling map
|
|
33
33
|
|
|
34
|
-
| Need | Prefer
|
|
35
|
-
| ---------------------- |
|
|
36
|
-
| Reproduce / large logs | `
|
|
37
|
-
| Recall prior evidence | `
|
|
38
|
-
| Capture decisions | `
|
|
39
|
-
| Scoped proof | `
|
|
40
|
-
| Audits | `
|
|
41
|
-
| Worktree isolation | `
|
|
42
|
-
| PR follow-up | `
|
|
34
|
+
| Need | Prefer |
|
|
35
|
+
| ---------------------- | ------------------------------------------------------------------ |
|
|
36
|
+
| Reproduce / large logs | `session_execute`, `session_batch_execute`, `session_execute_file` |
|
|
37
|
+
| Recall prior evidence | `session_search`, `session_restore`, `session_retrieve` |
|
|
38
|
+
| Capture decisions | `session_capture` (do not paste full reports back as user text) |
|
|
39
|
+
| Scoped proof | `test`, `lint`, `typecheck`, or `qa` |
|
|
40
|
+
| Audits | `audit` / `audits` |
|
|
41
|
+
| Worktree isolation | `blueprint_put` / `worktree` — never thrash primary checkout |
|
|
42
|
+
| PR follow-up | `pr_status`, `pr_upsert` when landing the fix |
|
|
43
43
|
|
|
44
44
|
## Non-negotiable invariants
|
|
45
45
|
|
|
46
46
|
1. **Root cause, not symptom.** Trace the failure to the invariant that actually broke. Do not patch callers when the owner is fixable.
|
|
47
47
|
2. **Loud failures, no silent fallbacks.** No default shims, sentinel returns, or catch-and-continue behavior that hides missing config, bad state, or broken boundaries.
|
|
48
|
-
3. **Use the repo's real execution surface.** Prefer MCP
|
|
48
|
+
3. **Use the repo's real execution surface.** Prefer wp MCP tools and repo wrappers over host Bash for search/test/lint. Use bounded session-memory paths for large output.
|
|
49
49
|
4. **Regression proof is mandatory.** Add or strengthen a test or other reliable proof that would fail against the old behavior.
|
|
50
50
|
5. **Raising timeouts is not a fix.** If a timeout fires, investigate the bottleneck. Only raise a bound when the repo already documents that workload and you can cite measurement.
|
|
51
51
|
6. **Zero suppressions, zero papering over.** No lint disables, ts-ignore, compat aliases, or "temporary" branches to sneak the fix through.
|
|
52
52
|
7. **Minimal correct diff.** Update every consumer of a changed contract in the same change, but do not bundle unrelated cleanup.
|
|
53
|
-
8. **Primary checkout is sacred.** If HEAD is detached, primary is dirty with unrelated work, or you are not on a managed worktree for non-trivial edits → **stop** and move to `
|
|
53
|
+
8. **Primary checkout is sacred.** If HEAD is detached, primary is dirty with unrelated work, or you are not on a managed worktree for non-trivial edits → **stop** and move to `worktree` / blueprint owner. Never leave the primary checkout broken.
|
|
54
54
|
|
|
55
55
|
## Opportunistic fix budget (when called from ultragoal / autopilot)
|
|
56
56
|
|
|
@@ -61,7 +61,7 @@ the blast radius is broader than a local fix.
|
|
|
61
61
|
- **Tooling / harness findings** ("fix inefficiency you come across", MCP vs shell,
|
|
62
62
|
hook thrash) honor the same budget. Excess → record via the `tech-debt` skill
|
|
63
63
|
(or backlog handoff); do not expand the current epic unbounded.
|
|
64
|
-
- Prefer MCP
|
|
64
|
+
- Prefer wp MCP tools and session-memory tools over the `wp` CLI / raw shell for
|
|
65
65
|
quality and discovery paths (see tooling map).
|
|
66
66
|
|
|
67
67
|
## Protocol
|
|
@@ -130,10 +130,10 @@ Do not keep production code written before the test as "reference". If you wrote
|
|
|
130
130
|
|
|
131
131
|
Run the narrowest checks that prove the repaired behavior on the real repo surface:
|
|
132
132
|
|
|
133
|
-
- `
|
|
134
|
-
- `
|
|
135
|
-
- `
|
|
136
|
-
- Before push: start `
|
|
133
|
+
- `test` / targeted tests for the repaired path
|
|
134
|
+
- `lint` / `typecheck` for changed surfaces
|
|
135
|
+
- `qa` only when the blast radius needs the bookend
|
|
136
|
+
- Before push: start `ci_preflight`, then poll `ci_preflight_wait` with
|
|
137
137
|
its run ID until terminal success (use global `wp ci-preflight` only when MCP
|
|
138
138
|
is unavailable). Run it after the final commit and do not edit or commit again
|
|
139
139
|
before pushing: terminal success records the exact-state receipt checked by pre-push.
|
|
@@ -141,7 +141,7 @@ Run the narrowest checks that prove the repaired behavior on the real repo surfa
|
|
|
141
141
|
|
|
142
142
|
Rules:
|
|
143
143
|
|
|
144
|
-
- Prefer MCP
|
|
144
|
+
- Prefer wp MCP tools over raw host Bash.
|
|
145
145
|
- Reuse fresh logs / session-memory indexed output; do not re-run long commands just to re-read.
|
|
146
146
|
- Read the exit code and summary before making a claim.
|
|
147
147
|
- Never `git push --no-verify` to land an unproven fix.
|
|
@@ -158,7 +158,7 @@ cleanup pass, use `ai-deslop` before the final verify handoff.
|
|
|
158
158
|
|
|
159
159
|
### Tool recovery and delivery intent
|
|
160
160
|
|
|
161
|
-
- Discover the managed owner's current identity with `
|
|
161
|
+
- Discover the managed owner's current identity with `blueprint_projects`
|
|
162
162
|
using its absolute `cwd`; pass the returned project ID and matching checkout
|
|
163
163
|
to session tools. A blueprint ID is not a project ID.
|
|
164
164
|
- If quality tooling refuses stale or cross-checkout execution, follow its
|
package/skills/handoff/SKILL.md
CHANGED
|
@@ -26,24 +26,24 @@ session. Do **not** paste full transcripts.
|
|
|
26
26
|
|
|
27
27
|
## Tooling map
|
|
28
28
|
|
|
29
|
-
| Need | Prefer
|
|
30
|
-
| ---------------------- |
|
|
31
|
-
| Capture decisions | `
|
|
32
|
-
| Context-light manifest | `
|
|
33
|
-
| Prior evidence | `
|
|
34
|
-
| Other-host chat | `
|
|
35
|
-
| Ultragoal block | `
|
|
29
|
+
| Need | Prefer |
|
|
30
|
+
| ---------------------- | -------------------------------------------------------------------------- |
|
|
31
|
+
| Capture decisions | `session_capture` |
|
|
32
|
+
| Context-light manifest | `session_context` (required for subagents) |
|
|
33
|
+
| Prior evidence | `session_search` / `session_retrieve` / `session_restore` |
|
|
34
|
+
| Other-host chat | `conversation_search` / `conversation_get` / `conversation_read` (bounded) |
|
|
35
|
+
| Ultragoal block | `ultragoal_handoff` (≤40 lines) when a controller is active |
|
|
36
36
|
|
|
37
37
|
## Protocol
|
|
38
38
|
|
|
39
39
|
1. **State the objective** in one sentence (what the next agent must finish).
|
|
40
|
-
2. **Capture** short pointers via `
|
|
40
|
+
2. **Capture** short pointers via `session_capture`: done, blockers, decisions,
|
|
41
41
|
evidence refs (log paths, test commands, PR numbers) — not full reports.
|
|
42
|
-
3. **Build** a bounded manifest with `
|
|
42
|
+
3. **Build** a bounded manifest with `session_context` (objective, constraints,
|
|
43
43
|
evidenceRefs, remainingSteps, validation, exclusions). Never copy parent history.
|
|
44
44
|
4. **Optional cross-host:** resolve the conversation with conversation MCP tools;
|
|
45
45
|
read only a **bounded tail** (`maxMessages` / `maxBytes`). Prefer resume
|
|
46
|
-
commands from `
|
|
46
|
+
commands from `conversation_get` over paste.
|
|
47
47
|
5. **Emit ≤40 lines** covering:
|
|
48
48
|
- goal / non-goals
|
|
49
49
|
- done + evidence refs
|
|
@@ -63,6 +63,37 @@ session. Do **not** paste full transcripts.
|
|
|
63
63
|
## Done looks like
|
|
64
64
|
|
|
65
65
|
- [ ] ≤40-line handoff with evidence refs
|
|
66
|
-
- [ ] `
|
|
66
|
+
- [ ] `session_context` (or capture ids) for the next agent
|
|
67
67
|
- [ ] Next skill named
|
|
68
68
|
- [ ] No transcript wall
|
|
69
|
+
|
|
70
|
+
## Capped or paused host messaging
|
|
71
|
+
|
|
72
|
+
When the host messaging channel is capped or paused, the ≤40-line manifest IS
|
|
73
|
+
the delivery: the handoff built above carries objective, done, blockers, and
|
|
74
|
+
next steps even if no send lands — emit it once and treat it as sent. Include
|
|
75
|
+
the send-budget state (attempt count, last canary result) in the manifest
|
|
76
|
+
whenever the cap has been in play this session — the count's durable homes
|
|
77
|
+
are the outbox header and the `session_capture` record; re-read both on
|
|
78
|
+
resume. The leader's outbox anchor is durable in two homes: the
|
|
79
|
+
outbox file's own header and a `session_capture` record (`session_capture`
|
|
80
|
+
is registered in `src/mcp/tools/_names.ts`, implemented in
|
|
81
|
+
`src/mcp/tools/session-capture.ts`). When the coordinator incarnation changes,
|
|
82
|
+
re-anchor: write both homes plus the next handoff manifest — a recorded anchor
|
|
83
|
+
goes stale when the identity passes to a new session (observed 2026-10-31: a
|
|
84
|
+
memory-recorded live outbox path no longer existed). On the reader side, a
|
|
85
|
+
stale or dead anchor is not a wall: fall back to the next durable arbitration
|
|
86
|
+
source (`fleet_status` / blueprint task lists) and queues the staleness as
|
|
87
|
+
a blocker in the outbox or manifest; a control send is spent only when the
|
|
88
|
+
channel is open and a reserve slot remains, to surface the staleness. Before executing a resumed
|
|
89
|
+
or queued order, check durable state (the outbox, `fleet_status`,
|
|
90
|
+
blueprint task lists) for a newer arbitration — queued sends deliver late
|
|
91
|
+
and out of order. The manifest carries this check as a required line.
|
|
92
|
+
Queued orders in the manifest are one line each; if the queue would break
|
|
93
|
+
the ≤40-line cap, the manifest carries the count and the outbox path and
|
|
94
|
+
the orders stay in the outbox. Never route around a cap or
|
|
95
|
+
pause: no relays, no peer delegation, no new sessions, no schedulers, no
|
|
96
|
+
filesystem push-delivery to peers, no configuration changes, and no alternate
|
|
97
|
+
transport, tool, or uncapped/legacy send interface. The durable outbox is pull-read
|
|
98
|
+
state, not a route-around. Keep manifests context-light — do not paste full
|
|
99
|
+
transcripts.
|
|
@@ -98,7 +98,7 @@ started. Check the installed host version before using version-scoped controls.
|
|
|
98
98
|
|
|
99
99
|
After reconnecting, prove the loaded source rather than the connection:
|
|
100
100
|
|
|
101
|
-
1. Call `
|
|
101
|
+
1. Call `tool_surface` with `detail: "diagnostic"`.
|
|
102
102
|
2. Compare `details.diagnostic.live.sourceCommit` against the commit you expect
|
|
103
103
|
the checkout to be serving.
|
|
104
104
|
3. Read `details.diagnostic.identity.status`, which is exactly one of `current`,
|