@webpresso/plugin-claude 0.0.13 → 0.0.15

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.
@@ -5,14 +5,14 @@
5
5
  "url": "https://github.com/webpresso"
6
6
  },
7
7
  "metadata": {
8
- "description": "Webpresso agent-kit Claude Code plugin: blueprints, skills, hooks, MCP server",
9
- "version": "0.0.13"
8
+ "description": "Webpresso app Claude Code plugin: blueprints, skills, hooks, MCP server",
9
+ "version": "0.0.15"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
- "name": "agent-kit",
13
+ "name": "wp",
14
14
  "source": "./",
15
- "description": "Webpresso agent-kit: blueprints, skills, lore commit protocol, tech-debt lifecycle",
15
+ "description": "Webpresso app: blueprints, skills, lore commit protocol, tech-debt lifecycle",
16
16
  "category": "development",
17
17
  "keywords": ["agent", "blueprint", "claude-code", "skills", "mcp"]
18
18
  },
@@ -24,5 +24,8 @@
24
24
  "keywords": ["typescript", "lsp", "claude-code", "language-server"]
25
25
  }
26
26
  ],
27
- "version": "0.0.13"
27
+ "renames": {
28
+ "agent-kit": "wp"
29
+ },
30
+ "version": "0.0.15"
28
31
  }
@@ -1,7 +1,7 @@
1
1
  {
2
- "name": "agent-kit",
3
- "version": "0.0.13",
4
- "description": "Webpresso agent-kit: blueprints, skills, lore commit protocol, tech-debt lifecycle",
2
+ "name": "wp",
3
+ "version": "0.0.15",
4
+ "description": "Webpresso app: blueprints, skills, lore commit protocol, tech-debt lifecycle",
5
5
  "author": {
6
6
  "name": "Webpresso",
7
7
  "url": "https://github.com/webpresso"
package/hooks/hooks.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "hooks": [
18
18
  {
19
19
  "type": "command",
20
- "command": "if [ -n \"${CLAUDE_PLUGIN_ROOT}\" ] && [ -x \"${CLAUDE_PLUGIN_ROOT}/bin/wp\" ]; then hook_pid=''; exec 3<&0; trap 'trap - INT TERM; if [ -n \"$hook_pid\" ]; then kill -INT \"$hook_pid\" 2>/dev/null || true; wait \"$hook_pid\" 2>/dev/null || true; fi; kill -INT \"$$\"' INT; trap 'trap - INT TERM; if [ -n \"$hook_pid\" ]; then kill -TERM \"$hook_pid\" 2>/dev/null || true; wait \"$hook_pid\" 2>/dev/null || true; fi; kill -TERM \"$$\"' TERM; env WP_HOOK_HOST='claude' \"${CLAUDE_PLUGIN_ROOT}/bin/wp\" hook pretool-guard <&3 & hook_pid=$!; wait \"$hook_pid\"; hook_status=$?; trap - INT TERM; exec 3<&-; if [ \"$hook_status\" -eq 2 ]; then exit 2; elif [ \"$hook_status\" -ne 0 ]; then printf '%s\\n' \"{\\\"decision\\\":\\\"deny\\\",\\\"reason\\\":\\\"GUARD_PRETOOL_FAILURE: pretool-guard exit $hook_status; run wp hooks doctor\\\",\\\"hookSpecificOutput\\\":{\\\"hookEventName\\\":\\\"PreToolUse\\\",\\\"permissionDecision\\\":\\\"deny\\\",\\\"permissionDecisionReason\\\":\\\"GUARD_PRETOOL_FAILURE: pretool-guard exit $hook_status; run wp hooks doctor\\\"}}\"; printf '%s\\n' \"GUARD_PRETOOL_FAILURE: pretool-guard exit $hook_status; run wp hooks doctor\" >&2; exit 2; fi; else printf '%s\\n' '{\"decision\":\"deny\",\"reason\":\"GUARD_PRETOOL_FAILURE: wp missing; set WEBPRESSO_WP_BIN or install the app\",\"hookSpecificOutput\":{\"hookEventName\":\"PreToolUse\",\"permissionDecision\":\"deny\",\"permissionDecisionReason\":\"GUARD_PRETOOL_FAILURE: wp missing; set WEBPRESSO_WP_BIN or install the app\"}}'; printf '%s\\n' 'GUARD_PRETOOL_FAILURE: wp missing; set WEBPRESSO_WP_BIN or install the app' >&2; exit 2; fi # wp-pretool-guard",
20
+ "command": "if [ -n \"${CLAUDE_PLUGIN_ROOT}\" ] && [ -x \"${CLAUDE_PLUGIN_ROOT}/bin/wp\" ]; then hook_pid=''; exec 3<&0; trap 'trap - INT TERM; if [ -n \"$hook_pid\" ]; then kill -INT \"$hook_pid\" 2>/dev/null || true; wait \"$hook_pid\" 2>/dev/null || true; fi; kill -INT \"$$\"' INT; trap 'trap - INT TERM; if [ -n \"$hook_pid\" ]; then kill -TERM \"$hook_pid\" 2>/dev/null || true; wait \"$hook_pid\" 2>/dev/null || true; fi; kill -TERM \"$$\"' TERM; env WP_HOOK_HOST='claude' \"${CLAUDE_PLUGIN_ROOT}/bin/wp\" hook pretool-guard <&3 & hook_pid=$!; wait \"$hook_pid\"; hook_status=$?; trap - INT TERM; exec 3<&-; if [ \"$hook_status\" -eq 2 ]; then exit 2; elif [ \"$hook_status\" -ne 0 ]; then printf '%s\\n' \"{\\\"hookSpecificOutput\\\":{\\\"hookEventName\\\":\\\"PreToolUse\\\",\\\"permissionDecision\\\":\\\"deny\\\",\\\"permissionDecisionReason\\\":\\\"GUARD_PRETOOL_FAILURE: pretool-guard exit $hook_status; run wp hooks doctor\\\"}}\"; printf '%s\\n' \"GUARD_PRETOOL_FAILURE: pretool-guard exit $hook_status; run wp hooks doctor\" >&2; exit 2; fi; else printf '%s\\n' '{\"hookSpecificOutput\":{\"hookEventName\":\"PreToolUse\",\"permissionDecision\":\"deny\",\"permissionDecisionReason\":\"GUARD_PRETOOL_FAILURE: wp missing; set WEBPRESSO_WP_BIN or install the app\"}}'; printf '%s\\n' 'GUARD_PRETOOL_FAILURE: wp missing; set WEBPRESSO_WP_BIN or install the app' >&2; exit 2; fi # wp-pretool-guard",
21
21
  "timeout": 5
22
22
  }
23
23
  ]
@@ -27,7 +27,7 @@
27
27
  "hooks": [
28
28
  {
29
29
  "type": "command",
30
- "command": "if [ -n \"${CLAUDE_PLUGIN_ROOT}\" ] && [ -x \"${CLAUDE_PLUGIN_ROOT}/bin/wp\" ]; then hook_pid=''; exec 3<&0; trap 'trap - INT TERM; if [ -n \"$hook_pid\" ]; then kill -INT \"$hook_pid\" 2>/dev/null || true; wait \"$hook_pid\" 2>/dev/null || true; fi; kill -INT \"$$\"' INT; trap 'trap - INT TERM; if [ -n \"$hook_pid\" ]; then kill -TERM \"$hook_pid\" 2>/dev/null || true; wait \"$hook_pid\" 2>/dev/null || true; fi; kill -TERM \"$$\"' TERM; env WP_HOOK_HOST='claude' \"${CLAUDE_PLUGIN_ROOT}/bin/wp\" hook pretool-guard <&3 & hook_pid=$!; wait \"$hook_pid\"; hook_status=$?; trap - INT TERM; exec 3<&-; if [ \"$hook_status\" -eq 2 ]; then exit 2; elif [ \"$hook_status\" -ne 0 ]; then printf '%s\\n' \"{\\\"decision\\\":\\\"deny\\\",\\\"reason\\\":\\\"GUARD_PRETOOL_FAILURE: pretool-guard exit $hook_status; run wp hooks doctor\\\",\\\"hookSpecificOutput\\\":{\\\"hookEventName\\\":\\\"PreToolUse\\\",\\\"permissionDecision\\\":\\\"deny\\\",\\\"permissionDecisionReason\\\":\\\"GUARD_PRETOOL_FAILURE: pretool-guard exit $hook_status; run wp hooks doctor\\\"}}\"; printf '%s\\n' \"GUARD_PRETOOL_FAILURE: pretool-guard exit $hook_status; run wp hooks doctor\" >&2; exit 2; fi; else printf '%s\\n' '{\"decision\":\"deny\",\"reason\":\"GUARD_PRETOOL_FAILURE: wp missing; set WEBPRESSO_WP_BIN or install the app\",\"hookSpecificOutput\":{\"hookEventName\":\"PreToolUse\",\"permissionDecision\":\"deny\",\"permissionDecisionReason\":\"GUARD_PRETOOL_FAILURE: wp missing; set WEBPRESSO_WP_BIN or install the app\"}}'; printf '%s\\n' 'GUARD_PRETOOL_FAILURE: wp missing; set WEBPRESSO_WP_BIN or install the app' >&2; exit 2; fi # wp-pretool-guard",
30
+ "command": "if [ -n \"${CLAUDE_PLUGIN_ROOT}\" ] && [ -x \"${CLAUDE_PLUGIN_ROOT}/bin/wp\" ]; then hook_pid=''; exec 3<&0; trap 'trap - INT TERM; if [ -n \"$hook_pid\" ]; then kill -INT \"$hook_pid\" 2>/dev/null || true; wait \"$hook_pid\" 2>/dev/null || true; fi; kill -INT \"$$\"' INT; trap 'trap - INT TERM; if [ -n \"$hook_pid\" ]; then kill -TERM \"$hook_pid\" 2>/dev/null || true; wait \"$hook_pid\" 2>/dev/null || true; fi; kill -TERM \"$$\"' TERM; env WP_HOOK_HOST='claude' \"${CLAUDE_PLUGIN_ROOT}/bin/wp\" hook pretool-guard <&3 & hook_pid=$!; wait \"$hook_pid\"; hook_status=$?; trap - INT TERM; exec 3<&-; if [ \"$hook_status\" -eq 2 ]; then exit 2; elif [ \"$hook_status\" -ne 0 ]; then printf '%s\\n' \"{\\\"hookSpecificOutput\\\":{\\\"hookEventName\\\":\\\"PreToolUse\\\",\\\"permissionDecision\\\":\\\"deny\\\",\\\"permissionDecisionReason\\\":\\\"GUARD_PRETOOL_FAILURE: pretool-guard exit $hook_status; run wp hooks doctor\\\"}}\"; printf '%s\\n' \"GUARD_PRETOOL_FAILURE: pretool-guard exit $hook_status; run wp hooks doctor\" >&2; exit 2; fi; else printf '%s\\n' '{\"hookSpecificOutput\":{\"hookEventName\":\"PreToolUse\",\"permissionDecision\":\"deny\",\"permissionDecisionReason\":\"GUARD_PRETOOL_FAILURE: wp missing; set WEBPRESSO_WP_BIN or install the app\"}}'; printf '%s\\n' 'GUARD_PRETOOL_FAILURE: wp missing; set WEBPRESSO_WP_BIN or install the app' >&2; exit 2; fi # wp-pretool-guard",
31
31
  "timeout": 5
32
32
  }
33
33
  ]
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@webpresso/plugin-claude",
3
- "version": "0.0.13",
3
+ "version": "0.0.15",
4
4
  "private": false,
5
- "description": "Claude Code plugin adapter for Webpresso agent-kit skills, commands, and MCP runtime.",
5
+ "description": "Claude Code plugin adapter for the Webpresso app (wp CLI) skills, commands, 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,20 +2,20 @@
2
2
  "schemaVersion": 1,
3
3
  "host": "claude",
4
4
  "packageName": "@webpresso/plugin-claude",
5
- "packageVersion": "0.0.13",
5
+ "packageVersion": "0.0.15",
6
6
  "runtimeDirs": [".claude/skills"],
7
7
  "skills": {
8
8
  "ai-deslop": {
9
9
  "digest": "sha256:cf07df5835037f10401400e220c1c923f5325a6149d59c231ce316e10595fdfc"
10
10
  },
11
11
  "autopilot": {
12
- "digest": "sha256:86610df486eba87af41a5478efd6970312f24ac198a9351de9675649d5ccd75d"
12
+ "digest": "sha256:6a72b2db563a48742c501f20d509050f193a5d31f2d413f6bef838f277d470c1"
13
13
  },
14
14
  "autoresearch": {
15
15
  "digest": "sha256:b4d51cd53beb4a3271827172dfbd0b1d27bd58761ca07a35d49a5d6324b87fdf"
16
16
  },
17
17
  "best-practice-research": {
18
- "digest": "sha256:a46010d48ca2c9b4e04815ea84a45d100e032c5a4f08b919eeefb5be37d87749"
18
+ "digest": "sha256:b863ef3969b85e83934911d4ba65f0547c0f586b147597d6a37c41d4b7a762f3"
19
19
  },
20
20
  "browse": {
21
21
  "digest": "sha256:21fd24862e7f7c8a1feadea6bc376492b136b99fc381cf1b8927c9db80615431"
@@ -30,7 +30,7 @@
30
30
  "digest": "sha256:79fbf86a86024a311583a1500bb6960c82ad1383cc9f8ed3f04bbace41848ff7"
31
31
  },
32
32
  "deep-research": {
33
- "digest": "sha256:01dafd194066a2936db0b437fd5c3beef6d7ff82478d0d995393093d89496f18"
33
+ "digest": "sha256:ece766cb18869317d7c8992fc562920b03250ff8c44bdcb9eccdc3b21922a83f"
34
34
  },
35
35
  "delivery-program": {
36
36
  "digest": "sha256:ebd6b35036c12fa26ff98649ac57ede607b7b3526c401784670a5ce68369a691"
@@ -44,14 +44,11 @@
44
44
  "fix": {
45
45
  "digest": "sha256:4804c546291316439aad3ea05fb7d3f043bc191abd8b9c180eb1d349f19f64cf"
46
46
  },
47
- "grok": {
48
- "digest": "sha256:e0093092dd84b7f8dc4aad09f7d1cd5cb104728194a20ef5ed37520e1f53403e"
49
- },
50
47
  "handoff": {
51
- "digest": "sha256:eb34b39fc6d416fe8203eea979b4b99ab3150c44da6dad3ca4afb8fe8fb75b85"
48
+ "digest": "sha256:eda4410dc75019b40b1ffae5f301bfc1e57d9313241d170e4743d379a1b6d846"
52
49
  },
53
50
  "hooks-doctor": {
54
- "digest": "sha256:30286e9ef1c64f2c01d05b0e13a39c54741c7a3e02e5d18636795a7517c0b566"
51
+ "digest": "sha256:9d9147e842246955f284854c35cf57237d4d056dca23f4c66019e1b44bb09eb6"
55
52
  },
56
53
  "investigate": {
57
54
  "digest": "sha256:778b3a1f38323e8dd6101c6ace26ff8aada1246b20952b3641d5d1049bc50055"
@@ -60,7 +57,7 @@
60
57
  "digest": "sha256:a80fbacc765e8b886437b9fdf7dd71e1ceb1b98b939078ec90fc88d06a8b4c69"
61
58
  },
62
59
  "opencode-go": {
63
- "digest": "sha256:3100cf1116402a63bd8bc34b1b544e68a90fe5fb899ebbbdfab73d28200ce379"
60
+ "digest": "sha256:a304b282fa078f97c2aa6a7d040d30eaae4c735de0aa5edf3af7368f62491804"
64
61
  },
65
62
  "plan-ceo-review": {
66
63
  "digest": "sha256:4d426158518dd71f8998770e8d4037bcbfa3c65d7265a93a4a78a9b015ba881e"
@@ -84,22 +81,22 @@
84
81
  "digest": "sha256:c27107b46e0cd7b9c264a6f51f74f505920d63e7ee2a2d26d2f288592fd10bd2"
85
82
  },
86
83
  "tech-debt": {
87
- "digest": "sha256:bec6c83a18e55d148af973dd84d34a8750d8a8fe4345e5fca7b9e8c3e876fd9a"
84
+ "digest": "sha256:2018bf8dc5f338baee3d982a5bf28c48773befea08e44f33b70561c18d897c56"
88
85
  },
89
86
  "testing-philosophy": {
90
87
  "digest": "sha256:23fdad944b089de3cfcd13957a5ac10c37bd3d136b192029af69368bca1470db"
91
88
  },
92
89
  "tooling-friction": {
93
- "digest": "sha256:7e1ff82147559624c39b1e4e1837d6bde0f102ecd65ec01358987d92ff42f7ad"
90
+ "digest": "sha256:64992c6a789d0283b7379a914d7686af5db97fe48cb5929f800a11d8f8e8f126"
94
91
  },
95
92
  "tph": {
96
93
  "digest": "sha256:bed3684a850651534f315d355cdeae50d951c429817df0f105cccdb7f4e1561b"
97
94
  },
98
95
  "ultragoal": {
99
- "digest": "sha256:31de0808e7e3458ebc3c59227353dfaf49ec8bd48429ae5e0b58b9e0597aa39f"
96
+ "digest": "sha256:344177e32690fe6355577abe50659cea1af682933a78eb13a11765d1a1ad66d7"
100
97
  },
101
98
  "verify": {
102
- "digest": "sha256:20ae2b56b4041cbb2e7e0cfe535bf2d1f7d26579371ce2b5e0cd1c31b09e23fd"
99
+ "digest": "sha256:c77aeb48d1d605496ed3b573b598323aff439e2bc9950a4369da8b3b43886b6a"
103
100
  }
104
101
  }
105
102
  }
@@ -52,7 +52,7 @@ skill.
52
52
  | Execute | ready-set via blueprint tools; `/goal` or parallel subagents; `wp_session_context` for delegates; `wp_blueprint_task_verify` only to complete tasks |
53
53
  | Opportunistic repair | `/fix` up to `fix_budget`; else handoff backlog |
54
54
  | QA | `wp_qa` / `wp_lint` / `wp_typecheck` / `wp_test`; PR checks via `wp_pr_status` / `wp_pr_wait` |
55
- | Validate | one outside voice if merge-bound (OpenCode Go by purpose, or claude/codex/grok); `wp review gate` for authority |
55
+ | Validate | one outside voice if merge-bound (OpenCode Go by purpose, or claude/codex); `wp review gate` for authority |
56
56
  | Land | `wp_pr_upsert`, green required checks, merge + owner cleanup |
57
57
  | Blocked / stop | `wp_ultragoal_handoff` ≤40 lines; `wp_ultragoal_cancel` if abandoned |
58
58
 
@@ -17,6 +17,14 @@ Use this skill when a task depends on current external best practices, version-a
17
17
 
18
18
  Produce a cited, reusable best-practice answer or handoff that separates current external evidence from repo-local facts and dependency-selection decisions.
19
19
 
20
+ ## Destination
21
+
22
+ Repo-scoped research is committed as `docs/research/{YYYY-MM-DD}-{slug}.md` on the
23
+ owning blueprint branch (the same convention as the `deep-research` skill). Scratch
24
+ notes go to a sanctioned sink (`$TMPDIR/webpresso/scratch/` or
25
+ `.webpresso/agent-scratch/`); a new root subdirectory is policy-allowed but is
26
+ unwhitelisted dirt for `wp ci-preflight` and `wp worktree merge-cleanup`.
27
+
20
28
  ## Activate When
21
29
 
22
30
  - The user asks for best practices, recommended approach, current guidance, official recommendations, standards, or version-aware external behavior.
@@ -127,6 +127,7 @@ type: research
127
127
  title: "{Title}"
128
128
  subject: "{subject}"
129
129
  date: { YYYY-MM-DD }
130
+ last_updated: { YYYY-MM-DD }
130
131
  confidence: { high|medium|low }
131
132
  verdict: { adopt|trial|assess|hold|reject }
132
133
  ---
@@ -10,7 +10,7 @@ created: "2026-08-03"
10
10
  last_reviewed: "2026-08-03"
11
11
  name: handoff
12
12
  description: "Cross-session handoff via session_context. Use for continue, take over, resume other host."
13
- argument-hint: "[--host <claude|codex|grok|opencode>] [session-id|brief]"
13
+ argument-hint: "[--host <claude|codex|opencode>] [session-id|brief]"
14
14
  ---
15
15
 
16
16
  # Handoff
@@ -21,7 +21,7 @@ session. Do **not** paste full transcripts.
21
21
  ## Use when (freeform)
22
22
 
23
23
  - "give me a continuation prompt", "take over where you left off"
24
- - "resume", "continue from other host", "hand off to Codex/Claude/Grok"
24
+ - "resume", "continue from other host", "hand off to Codex/Claude"
25
25
  - cross-session or cross-worktree continuity without history walls
26
26
 
27
27
  ## Tooling map
@@ -65,17 +65,54 @@ Each check prints `[x]` (pass) or `[ ]` (fail) with a detail line:
65
65
 
66
66
  ### Updating the webpresso MCP server (monorepo authors)
67
67
 
68
- `mcp` is **source-first**: in a checkout with TypeScript source the server runs
69
- from source, so it always serves HEAD. After changing `src/mcp/**`, conversation
70
- catalog, or pretool routing that MCP hosts must run:
68
+ `mcp` is **source-first**: in a checkout with TypeScript source the server loads
69
+ that source when it starts. After changing `src/mcp/**`, conversation catalog,
70
+ or pretool routing that MCP hosts must run:
71
71
 
72
- 1. Reconnect webpresso MCP in the agent host.
73
- 2. Smoke a tool only available in the new code.
72
+ 1. Reconnect webpresso MCP server in the agent host.
73
+ 2. Prove the refreshed server is serving the intended source.
74
74
 
75
75
  No runtime rebuild is involved, and no `pkill` is needed — every launcher layer
76
76
  owns its child's stdin, so a disconnect unwinds the whole chain. Chat-only
77
77
  restart is still **not** enough: reconnect the server itself.
78
78
 
79
+ Use the host's named-server controls so only the webpresso server is closed and
80
+ started. Check the installed host version before using version-scoped controls.
81
+
82
+ - **Codex desktop:** Settings → MCP servers → select webpresso → **Restart**. The
83
+ in-composer `/mcp` view lists connected servers
84
+ ([host documentation](https://learn.chatgpt.com/docs/extend/mcp?surface=app);
85
+ host documentation verified 2026-10-17).
86
+ - **Claude Code:** `/mcp` → select webpresso → **Reconnect**. Use
87
+ `claude mcp list` to check the configured server; do not remove and re-add it.
88
+ Claude Code does not automatically reconnect local stdio servers
89
+ ([host documentation](https://code.claude.com/docs/en/mcp); host documentation
90
+ verified 2026-10-17).
91
+ - **OpenCode v2:** `/mcps` → select webpresso → **Disconnect**, then
92
+ **Connect**. If the OpenCode configuration changed, run `opencode reload`;
93
+ verify with `opencode mcp list` ([MCP
94
+ servers](https://dev.opencode.ai/v2/docs/mcp-servers/), [CLI
95
+ commands](https://dev.opencode.ai/v2/docs/cli/commands/); host documentation
96
+ verified 2026-10-17). These `dev.opencode.ai` paths sit on a preview domain
97
+ and can move; confirm the v2 path still resolves before following it.
98
+
99
+ After reconnecting, prove the loaded source rather than the connection:
100
+
101
+ 1. Call `wp_tool_surface` with `detail: "diagnostic"`.
102
+ 2. Compare `details.diagnostic.live.sourceCommit` against the commit you expect
103
+ the checkout to be serving.
104
+ 3. Read `details.diagnostic.identity.status`, which is exactly one of `current`,
105
+ `restart_required`, `setup_required`, or `unknown`. The wrapper's
106
+ `passed: true` only means a response was built — it is **not** proof of
107
+ current identity.
108
+
109
+ If the source commit differs, or the status is `restart_required` or
110
+ `setup_required`, reconnect again or follow `details.diagnostic.identity.reason`.
111
+ If the status is `unknown`, keep that uncertainty: a source-distinguishing smoke
112
+ call can corroborate behavior but does not make the identity current. A fresh
113
+ chat is not a refresh. Reserve quitting and reopening the host for the one-time
114
+ legacy-chain upgrade below, and never kill unrelated processes.
115
+
79
116
  Managed `wp hook` and `wp hooks doctor|status|dispatch` commands are
80
117
  source-authoritative and require no post-merge runtime rebuild. Existing
81
118
  managed installations run exact `wp sync`, then rerun `wp hooks doctor` or
@@ -40,7 +40,7 @@ still-open without a matching finding), grants no authority and spends no round.
40
40
  ## Model policy
41
41
 
42
42
  Default exact model: `opencode-go/deepseek-v4.1-flash`.
43
- Committed exact options: `opencode-go/deepseek-v4.1-flash`, `opencode-go/glm-5.3-flash`, `opencode-go/deepseek-v4-pro`, `opencode-go/kimi-k2.7-code`, `opencode-go/qwen3.8-max`, `opencode-go/minimax-m3`, `opencode-go/muse-spark-1.3-contributor`, `opencode-go/mimo-v2.5-pro`, `opencode-go/muse-spark-1.2-contributor`, `opencode-go/union-alpha`, `opencode-go/qwen3.8-flash`, `opencode-go/mimo-v2.5`, `opencode-go/qwen3.7-plus`, `opencode-go/qwen3.7-max`, `opencode-go/qwen3.6-plus`, `opencode-go/minimax-m2.7`, `opencode-go/gpt-5.6-luna`, `opencode-go/longcat-2.0`, `opencode-go/kimi-k3`, `opencode-go/deepseek-v4-flash`, `opencode-go/deepseek-v4-flash-vision-exp`, `opencode-go/kimi-k2.6`, `opencode-go/hy4-preview`, `opencode-go/hy3`, `opencode-go/grok-4.6`, `opencode-go/glm-5.3`, `opencode-go/glm-5.2`, `opencode-go/glm-5.1`.
43
+ Committed exact options: `opencode-go/deepseek-v4.1-flash`, `opencode-go/glm-5.3-flash`, `opencode-go/deepseek-v4-pro`, `opencode-go/kimi-k2.7-code`, `opencode-go/muse-spark-1.3-contributor`, `opencode-go/mimo-v2.6-pro`, `opencode-go/step-5-preview`, `opencode-go/qwen3.8-max`, `opencode-go/mimo-v2.6-flash`, `opencode-go/qwen3.8-flash`, `opencode-go/minimax-m3.1-flash-free`, `opencode-go/qwen3.7-plus`, `opencode-go/muse-spark-1.2-contributor`, `opencode-go/mimo-v2.5`, `opencode-go/minimax-m3`, `opencode-go/mimo-v2.5-pro`, `opencode-go/longcat-2.5-preview-free`, `opencode-go/longcat-2.0`, `opencode-go/gpt-6-luna`, `opencode-go/kimi-k3`, `opencode-go/hy4-preview`, `opencode-go/hy3`, `opencode-go/grok-4.7`, `opencode-go/gpt-5.6-luna`, `opencode-go/claude-haiku-5-5`, `opencode-go/glm-5.3`, `opencode-go/glm-5.2`, `opencode-go/gemini-4-argon-contributor`, `opencode-go/beam-free`.
44
44
  Use a named exact option when requested; otherwise use the default. Provider catalog discovery
45
45
  belongs to the snapshot drift workflow, never to a skill invocation; reading the box-local
46
46
  credential store at gate time is a local file read, not catalog discovery.
@@ -23,6 +23,12 @@ Manage the tech-debt lifecycle using `wp tech-debt` commands.
23
23
 
24
24
  ## Usage
25
25
 
26
+ `new` (dry runs included) refuses a root that `wp audit committed-state-paths`
27
+ forbids adding to, such as this repository's `tech-debt/`. There, record a new
28
+ follow-up as a blueprint task (MCP `wp_blueprint_put`) or a draft blueprint
29
+ (`wp blueprint new`) instead. The examples below apply only where that audit
30
+ permits the resolved root.
31
+
26
32
  ```bash
27
33
  # Create a new tech-debt item (written to tech-debt/<status>/h-NNN-<kebab-title>.md by default)
28
34
  wp tech-debt new "Legacy CLI complexity" \
@@ -36,9 +42,8 @@ wp tech-debt new "Performance bottleneck" --severity high --category mutation --
36
42
 
37
43
  # `new` refuses on a primary-like checkout: a file written there cannot be
38
44
  # edited afterwards under worktree discipline, so the capture is left half-done.
39
- # Retry from a managed worktree, point --cwd at one, or override deliberately.
45
+ # Retry from a managed worktree or point --cwd at one. There is no override.
40
46
  wp tech-debt new "Legacy CLI complexity" --cwd /path/to/managed/worktree
41
- wp tech-debt new "Legacy CLI complexity" --allow-primary
42
47
 
43
48
  # List all tech-debt items (optional filters)
44
49
  wp tech-debt list
@@ -19,12 +19,12 @@ Optional post-land **product signal** for MCP/CLI/hooks/CI pain so Webpresso too
19
19
 
20
20
  ## Boundary
21
21
 
22
- | Owns | Does not own |
23
- | ---------------------------------------------------- | -------------------------------------------------- |
24
- | Structured friction tips after land-ish success | Code bugs (`/investigate` → `/fix`) |
25
- | Optional promote to tech-debt (`--category tooling`) | Blueprint claim corrections (`blueprints/errata/`) |
26
- | Repo-scoped desktop-state JSON (outside worktrees) | Human DX audits (`/devex-review`) |
27
- | Soft bookend from `/verify` Phase 7 | Required PR section, finalize/merge blockers |
22
+ | Owns | Does not own |
23
+ | --------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- |
24
+ | Structured friction tips after land-ish success | Code bugs (`/investigate` → `/fix`) |
25
+ | Optional promote to a blueprint task or draft blueprint (tech-debt only where `committed-state-paths` permits `tech-debt/`) | Blueprint claim corrections (`blueprints/errata/`) |
26
+ | Repo-scoped desktop-state JSON (outside worktrees) | Human DX audits (`/devex-review`) |
27
+ | Soft bookend from `/verify` Phase 7 | Required PR section, finalize/merge blockers |
28
28
 
29
29
  ## When
30
30
 
@@ -83,11 +83,11 @@ Optional post-land **product signal** for MCP/CLI/hooks/CI pain so Webpresso too
83
83
  `tooling-friction: skipped: no state surface` and stop; never fall back to a
84
84
  worktree or `.agent/` path.
85
85
 
86
- 5. Optional `--promote` or severity `high`/`critical`:
87
- `wp tech-debt new "<short title>" --severity <s> --category tooling --status accepted`
88
- Set `promoted_to` to the resulting path. `new` refuses on a primary-like
89
- checkout; from one, pass `--cwd <managed-worktree-path>` (or `--allow-primary`
90
- to override deliberately).
86
+ 5. Optional `--promote` or severity `high`/`critical`: record the follow-up as
87
+ a blueprint task (MCP `wp_blueprint_put`) or a draft blueprint
88
+ (`wp blueprint new`), and set `promoted_to` to that blueprint path. Do not
89
+ use `wp tech-debt new` here: it refuses this repository's `tech-debt/` root,
90
+ which `wp audit committed-state-paths` forbids adding to.
91
91
  6. Optional one-line `wp_session_capture` pointer to the JSON path — no paste-back walls.
92
92
 
93
93
  **Rate limit:** at most **one** capture per verify bookend.
@@ -151,7 +151,7 @@ also include `path`, `repoKey` (16-hex), `stateRoot`, `scope: "repo"`, and
151
151
  | kind | `friction` `missing` `docs` `workaround` `incident` |
152
152
  | signal | `retry_loop` `schema_confuse` `timeout` `wrong_facade` `missing_capability` `docs_mismatch` `status_ci_skew` `other` |
153
153
  | token_waste | `none` `low` `medium` `high` |
154
- | host | `claude` `codex` `opencode` `grok` `other` |
154
+ | host | `claude` `codex` `opencode` `other` |
155
155
  | recurrence | `once` `session` `chronic` |
156
156
 
157
157
  ### Limits
@@ -170,7 +170,7 @@ also include `path`, `repoKey` (16-hex), `stateRoot`, `scope: "repo"`, and
170
170
 
171
171
  - `wp_pr_merge: land readiness disagrees with GitHub CLEAN / PR Policy (status_ci_skew, high)`
172
172
  - `wp_review_gate: re-approve after ledger-only commits; subject binding unclear (retry_loop, medium)`
173
- - `wp_pr_upsert: bare Review model "Grok" fails provider regex; needs "grok reviewer" (schema_confuse, low)`
173
+ - `wp_pr_upsert: bare Review model "Kimi" fails provider regex; needs "kimi reviewer" (schema_confuse, low)`
174
174
 
175
175
  **Bad**
176
176
 
@@ -205,7 +205,10 @@ also include `path`, `repoKey` (16-hex), `stateRoot`, `scope: "repo"`, and
205
205
  ```text
206
206
  tooling-friction: wrote desktop state <absolute-path-from-wp_tooling_friction_path>
207
207
  findings: 2 (high=1, medium=1)
208
- promoted: none | tech-debt/...
208
+ promoted: none | blueprints/<lifecycle>/<slug> | tech-debt/...
209
209
  ```
210
210
 
211
+ `tech-debt/...` applies only where `wp audit committed-state-paths` permits
212
+ that root.
213
+
211
214
  Or: `tooling-friction: skipped: no tooling friction`
@@ -69,7 +69,6 @@ target as secondary context only when the invocation path is a symlink.
69
69
  | -------- | ------------------------------- |
70
70
  | Claude | `WP_ULTRAGOAL_CLAUDE_COMMAND` |
71
71
  | Codex | `WP_ULTRAGOAL_CODEX_COMMAND` |
72
- | Grok | `WP_ULTRAGOAL_GROK_COMMAND` |
73
72
  | OpenCode | `WP_ULTRAGOAL_OPENCODE_COMMAND` |
74
73
  | Process | `WP_ULTRAGOAL_PROCESS_COMMAND` |
75
74
 
@@ -77,8 +76,7 @@ Upgrade the installed CLI or point the named variable at a compatible executable
77
76
  restart the process that owns the adapter: probe successes and failures are cached by
78
77
  canonical executable for that adapter's lifetime. Missing paths are rechecked and symlink
79
78
  retargeting is re-probed, but an in-place executable repair still requires an adapter-owner
80
- restart. Grok execution requires a separately installed and authenticated Grok Build CLI.
81
- `wp install` does not install or authenticate Grok Build.
79
+ restart.
82
80
 
83
81
  Existing `WP_ULTRAGOAL_<HOST>_COMMAND` configurations remain supported; no environment
84
82
  variable migration is required. Their executables must satisfy the current semantic probe
@@ -90,9 +88,7 @@ Start probes each unique requested host concurrently, then reports the first fai
90
88
  requested-host order. A failed preflight occurs before durable run creation, ledger writes,
91
89
  supervisor launch, or attempt/worktree allocation. Built-in probes validate the grammar they
92
90
  invoke: Codex `exec --json --sandbox workspace-write`, Claude prompt/streaming output/bypass
93
- permission flags, OpenCode `run --format json --auto`, and Grok headless prompt/streaming
94
- output/approval/workspace-sandbox flags. Grok also runs an auth-free `inspect --json` check
95
- against a temporary working directory so invalid sandbox profiles fail before execution.
91
+ permission flags, and OpenCode `run --format json --auto`.
96
92
 
97
93
  Preflight does **not** validate authentication, provider quota or billing, network
98
94
  reachability, or secrets isolation. Those failures remain runtime/provider concerns.
@@ -148,9 +144,7 @@ the configured JSON arguments may add process-specific flags but cannot replace
148
144
  ### Execution authority and isolation
149
145
 
150
146
  Ultragoal worktrees protect git integration boundaries; they are **not** operating-system
151
- sandboxes. Codex uses its `workspace-write` sandbox. Grok's `workspace` sandbox may read
152
- anywhere, write in its current directory, `~/.grok`, and temporary directories, and permits
153
- child-process network access. Claude `bypassPermissions`, OpenCode `--auto` mode, and custom
147
+ sandboxes. Codex uses its `workspace-write` sandbox; Claude `bypassPermissions`, OpenCode `--auto` mode, and custom
154
148
  `process` executables retain substantial user authority. OpenCode disables automatic updates
155
149
  and sharing and denies external-directory access, but those policy settings do not make it an
156
150
  OS sandbox. Run Ultragoal only with providers, configuration, and task content you trust.
@@ -233,7 +227,7 @@ milestones. Each new provider verdict is one formal round of the slug's budget.
233
227
  | Phase advance | After ultragoal advances `plan` → `execute`, `execute` → `qa`, `qa` → `validate`, `validate` → `land`, or lands `complete` |
234
228
  | Task batch handoff | After a meaningful execute batch when the phase remains `execute` (at least once per blueprint before claiming execute-complete) |
235
229
 
236
- Do **not** invent ledger approvals. If OpenCode Go is unavailable or hits a provider-wide usage limit, capture the failure evidence and use Grok on the next invocation (`--provider grok` / `/grok`); do not hop OpenCode families or substitute a forged approval.
230
+ Do **not** invent ledger approvals. If OpenCode Go is unavailable or hits a provider-wide usage limit, capture the failure evidence and end OpenCode Go review for the window; do not hop OpenCode families, substitute another host, or substitute a forged approval.
237
231
 
238
232
  ### Purpose → model routing (no hardcoding IDs)
239
233
 
@@ -249,7 +243,7 @@ rendered into the `opencode-go` skill and drift-gated against it.** Follow that
249
243
  skill; do not restate the ordering here. A second copy of a preference list is a
250
244
  second thing to update, and the copy that goes stale is the one an agent reads.
251
245
 
252
- Treat a provider-wide usage limit as terminal for every OpenCode Go model in the current review window; do not hop OpenCode families to evade a usage block. Use Grok as the next outside-voice substitute instead.
246
+ Treat a provider-wide usage limit as terminal for every OpenCode Go model in the current review window; do not hop OpenCode families to evade a usage block. There is no substitute host: the window ends with the captured failure evidence.
253
247
 
254
248
  ### Plan gate invocation shape
255
249
 
@@ -37,7 +37,7 @@ integrated, and free of stale garbage?**
37
37
 
38
38
  Default `/verify` must **not** spawn outside reviewers. That stampede is a known
39
39
  token/time failure mode. Merge-ready runs **one** sequential outside voice via
40
- the preferred skill (`claude` / `codex` / `grok` / one OpenCode Go), then stops.
40
+ the preferred skill (`claude` / `codex` / one OpenCode Go), then stops.
41
41
 
42
42
  ## Tooling map
43
43
 
@@ -160,7 +160,7 @@ wp ci-preflight
160
160
 
161
161
  That runs the repository-owned, branch-scoped required-check plan fail-fast.
162
162
  Run it after the final commit and make no further worktree or base-ref
163
- changes before pushing. Agent-kit's `.husky/pre-push` checks the resulting
163
+ changes before pushing. The app repo's `.husky/pre-push` checks the resulting
164
164
  exact-state receipt without rerunning the suite after Git opens the remote
165
165
  transport; consumer repos may keep pre-push checks user-owned. Do **not** claim
166
166
  push-ready if preflight failed. Do **not** bypass hooks to ship red work.
@@ -280,7 +280,7 @@ When classification is **sensitive**:
280
280
  - On formal **reject**: record the gate `next_action` (`report_delivery_reject`)
281
281
  / reject projection, triage against blueprint non-goals, address the findings,
282
282
  then re-review only a changed exact subject. The gate counts formal verdicts
283
- per slug and purpose, starting with five rounds.
283
+ per slug and purpose, starting with eight rounds.
284
284
  After all allowance is spent, a corrected subject may open one
285
285
  extra lane on an explicitly selected provider and model, including one that
286
286
  already reviewed the lineage. The gate records that grant, adds five formal
@@ -324,10 +324,9 @@ When classification is **standard**:
324
324
 
325
325
  Reviewer preference (pick **one** path):
326
326
 
327
- - From Codex → Claude or Grok (else one OpenCode Go).
328
- - From Claude → Codex or Grok (else one OpenCode Go).
329
- - From Grok → Claude or Codex (else one OpenCode Go).
330
- - Prefer skills: `claude`, `codex`, `grok`, or one of `opencode-go` / `qwen` /
327
+ - From Codex → Claude (else one OpenCode Go).
328
+ - From Claude → Codex (else one OpenCode Go).
329
+ - Prefer skills: `claude`, `codex`, or one of `opencode-go` / `qwen` /
331
330
  `deepseek` / `glm` / `kimi` / `minimax` / `mimo`.
332
331
 
333
332
  ### 4. Dual product/process labels on every land claim
@@ -1,47 +0,0 @@
1
- ---
2
- name: grok
3
- description: "Grok outside-voice reviewer through Webpresso MCP."
4
- license: MIT
5
- ---
6
-
7
- # Grok outside-voice review
8
-
9
- Use only for a requested content-bound plan or delivery review. Treat output as external advice
10
- until independently verified.
11
-
12
- ## MCP-only contract
13
-
14
- - Call `wp_review_gate` exactly once for the real plan version or delivery diff.
15
- - Observe the same durable operation with `wp_review_gate_wait` when needed.
16
- - Never invoke a provider command, the legacy review CLI, or a removed review-run surface.
17
- - If the review MCP is unavailable, stop and report it unavailable. There is no CLI fallback.
18
-
19
- ## Gate call
20
-
21
- ```jsonc
22
- {
23
- "project_id": "<project>",
24
- "slug": "<blueprint-slug>",
25
- "purpose": "delivery",
26
- "base_ref": "<full-base-sha>",
27
- "authority_ref": "<full-head-sha>",
28
- "provider": "grok",
29
- "repository_access": "none",
30
- }
31
- ```
32
-
33
- Each newly executed provider review that reaches a verdict is one formal round of the
34
- slug's budget, and its approval is authority. An identical-subject call replays the recorded
35
- verdict with no new review and no new round. A partial approval, withheld because adjudication
36
- is incomplete (not every prior finding was briefed, or a briefed prior claim was marked
37
- still-open without a matching finding), grants no authority and spends no round.
38
-
39
- ## Model policy
40
-
41
- When the user names an exact model, pass it in the MCP `model` field. Otherwise omit
42
- that field and let the MCP owner select the configured provider default.
43
-
44
- ## Review quality
45
-
46
- Follow `catalog/agent/rules/review-methodology-sota.md`; report typed verdict, model,
47
- artifact, grounded findings, and independently verified conclusions.