@webpresso/plugin-claude 0.0.13 → 0.0.14
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 +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/hooks/hooks.json +2 -2
- package/package.json +1 -1
- package/plugin-skill-ownership.json +11 -14
- package/skills/autopilot/SKILL.md +1 -1
- package/skills/best-practice-research/SKILL.md +8 -0
- package/skills/deep-research/SKILL.md +1 -0
- package/skills/handoff/SKILL.md +2 -2
- package/skills/hooks-doctor/SKILL.md +42 -5
- package/skills/opencode-go/SKILL.md +1 -1
- package/skills/tech-debt/SKILL.md +7 -2
- package/skills/tooling-friction/SKILL.md +17 -14
- package/skills/ultragoal/SKILL.md +5 -11
- package/skills/verify/SKILL.md +5 -6
- package/skills/grok/SKILL.md +0 -47
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Webpresso agent-kit Claude Code plugin: blueprints, skills, hooks, MCP server",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.14"
|
|
10
10
|
},
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
@@ -24,5 +24,5 @@
|
|
|
24
24
|
"keywords": ["typescript", "lsp", "claude-code", "language-server"]
|
|
25
25
|
}
|
|
26
26
|
],
|
|
27
|
-
"version": "0.0.
|
|
27
|
+
"version": "0.0.14"
|
|
28
28
|
}
|
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' \"{\\\"
|
|
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' \"{\\\"
|
|
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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webpresso/plugin-claude",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.14",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Claude Code plugin adapter for Webpresso agent-kit skills, commands, and MCP runtime.",
|
|
6
6
|
"homepage": "https://github.com/webpresso/app#readme",
|
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"host": "claude",
|
|
4
4
|
"packageName": "@webpresso/plugin-claude",
|
|
5
|
-
"packageVersion": "0.0.
|
|
5
|
+
"packageVersion": "0.0.14",
|
|
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:
|
|
12
|
+
"digest": "sha256:6a72b2db563a48742c501f20d509050f193a5d31f2d413f6bef838f277d470c1"
|
|
13
13
|
},
|
|
14
14
|
"autoresearch": {
|
|
15
15
|
"digest": "sha256:b4d51cd53beb4a3271827172dfbd0b1d27bd58761ca07a35d49a5d6324b87fdf"
|
|
16
16
|
},
|
|
17
17
|
"best-practice-research": {
|
|
18
|
-
"digest": "sha256:
|
|
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:
|
|
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:
|
|
48
|
+
"digest": "sha256:eda4410dc75019b40b1ffae5f301bfc1e57d9313241d170e4743d379a1b6d846"
|
|
52
49
|
},
|
|
53
50
|
"hooks-doctor": {
|
|
54
|
-
"digest": "sha256:
|
|
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:
|
|
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:
|
|
84
|
+
"digest": "sha256:2018bf8dc5f338baee3d982a5bf28c48773befea08e44f33b70561c18d897c56"
|
|
88
85
|
},
|
|
89
86
|
"testing-philosophy": {
|
|
90
87
|
"digest": "sha256:23fdad944b089de3cfcd13957a5ac10c37bd3d136b192029af69368bca1470db"
|
|
91
88
|
},
|
|
92
89
|
"tooling-friction": {
|
|
93
|
-
"digest": "sha256:
|
|
90
|
+
"digest": "sha256:64992c6a789d0283b7379a914d7686af5db97fe48cb5929f800a11d8f8e8f126"
|
|
94
91
|
},
|
|
95
92
|
"tph": {
|
|
96
93
|
"digest": "sha256:bed3684a850651534f315d355cdeae50d951c429817df0f105cccdb7f4e1561b"
|
|
97
94
|
},
|
|
98
95
|
"ultragoal": {
|
|
99
|
-
"digest": "sha256:
|
|
96
|
+
"digest": "sha256:344177e32690fe6355577abe50659cea1af682933a78eb13a11765d1a1ad66d7"
|
|
100
97
|
},
|
|
101
98
|
"verify": {
|
|
102
|
-
"digest": "sha256:
|
|
99
|
+
"digest": "sha256:bb9144c18983cea1b2be6f193dadadbf9f0f638021385a4aad7de390e520e281"
|
|
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
|
|
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.
|
package/skills/handoff/SKILL.md
CHANGED
|
@@ -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|
|
|
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
|
|
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
|
|
69
|
-
|
|
70
|
-
|
|
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.
|
|
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/
|
|
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
|
|
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
|
|
23
|
-
|
|
|
24
|
-
| Structured friction tips after land-ish success
|
|
25
|
-
| Optional promote to tech-debt
|
|
26
|
-
| Repo-scoped desktop-state JSON (outside worktrees)
|
|
27
|
-
| Soft bookend from `/verify` Phase 7
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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` `
|
|
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 "
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
package/skills/verify/SKILL.md
CHANGED
|
@@ -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` /
|
|
40
|
+
the preferred skill (`claude` / `codex` / one OpenCode Go), then stops.
|
|
41
41
|
|
|
42
42
|
## Tooling map
|
|
43
43
|
|
|
@@ -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
|
|
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
|
|
328
|
-
- From Claude → Codex
|
|
329
|
-
-
|
|
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
|
package/skills/grok/SKILL.md
DELETED
|
@@ -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.
|