Skip to content

Commit 1525cd6

Browse files
committed
merge: v2.5.3 — npx autoskills recommender for /v:onboard
2 parents ddd3462 + 5aa2236 commit 1525cd6

8 files changed

Lines changed: 297 additions & 4 deletions

File tree

.claude-plugin/marketplace.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
{
1010
"name": "superpowers-v",
1111
"description": "Compound V for Superpowers: triple parallel pre-flight (code archaeology + domain-expert + Context7 library validator), disjoint partitioning, manifest-driven multi-backend dispatch (Claude + Codex + Antigravity + Cursor), git-diff scope enforcement, crash-resumable runs, adaptive tier-based routing, epic mode, V-memory local-first semantic+lexical recall over docs/superpowers (opt-in pure-python embeddings + a deterministic recall→action bridge), and batched parallel dispatch (Opus default, narrow Sonnet exception)",
12-
"version": "2.5.2",
12+
"version": "2.5.3",
1313
"source": "./",
1414
"author": {
1515
"name": "Oleg",

.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "superpowers-v",
33
"description": "Compound V for Superpowers: triple parallel pre-flight (code archaeology + domain-expert advisor + library/doc validator via Context7), disjoint file partitioning, manifest-driven multi-backend dispatch (Claude + headless Codex + Antigravity + Cursor workers), git-diff scope enforcement, crash-resumable runs, adaptive tier-based routing, epic mode for multi-feature builds, V-memory local-first semantic+lexical recall over docs/superpowers (opt-in pure-python embeddings + a deterministic recall\u2192action bridge), and batched parallel dispatch (Opus default, Sonnet for narrow junior-task carve-out), plus /v:onboard — a project-onboarding command that builds a citation-verified knowledge base + AGENTS.md/CLAUDE.md bridge behind a human gate. Auto-intercepts brainstorming \u2192 writing-plans \u2192 execution transitions.",
4-
"version": "2.5.2",
4+
"version": "2.5.3",
55
"author": {
66
"name": "Oleg",
77
"email": "copeus@gmail.com"

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@ All notable changes to **superpowers-v (Compound V)** are documented here.
44

55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project uses semantic versioning.
66

7+
## [2.5.3] — 2026-07-05
8+
9+
### Added — `npx autoskills` recommender for `/v:onboard`
10+
11+
- **Third-party skill discovery.** `/v:onboard` now recommends [`npx autoskills`](https://www.autoskills.sh/) when a project manifest is detected — a new `recommend-autoskills` subcommand in `scripts/compound-v-onboard.py` flags applicability (`package.json`, `pyproject.toml`, `requirements.txt`, `Gemfile`, `go.mod`, `Cargo.toml`, `composer.json`, `pom.xml`, `build.gradle`, or a top-level `*.tf`), with the marker file as **evidence**; an unknown repo yields `applicable: false` (no false recommendation).
12+
- **Present-only, gated `--dry-run`, never auto-installs.** In DIAGNOSE, onboarding surfaces the recommendation and — **behind a human confirm** — runs the **preview** `npx autoskills --dry-run` through the process-group timeout supervisor with `stdin </dev/null` (the v2.5.0 external-launch invariant), to show *which* skills it would install. The real install stays the user's own action (autoskills has its own confirm + SHA-256 verification).
13+
- **Auto-trigger-degradation caution.** Because mass-installing overlapping skills degrades auto-triggering across the whole skill set (the onboarding **Skills stance**), the recommendation always carries a loud caution to review the dry-run and prefer a focused subset.
14+
- **Built with TDD, dogfooded, cross-model Codex-verified.** 5 selftest checks (manifest → applicable + evidence + `--dry-run` command; empty → not applicable; `pyproject.toml` → applicable; a top-level `main.tf` → applicable with the filename as evidence; a *directory* named `*.tf` → not applicable). Dogfood on superpowers-v itself (no standard manifest) → `applicable: false` — the negative path. **Codex cross-model verification** (the model that writes ≠ the model that checks) caught **two** real bugs in the Terraform branch — the evidence was the literal `"*.tf"` instead of the actual filename, and a *directory* named `foo.tf` was a false positive — **both accepted and fixed**, each with added selftest coverage.
15+
716
## [2.5.2] — 2026-07-03
817

918
### Added

commands/v-onboard.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,7 @@ indexing is [`/v:memory-refresh`](v-memory-refresh.md).
3333
When the pipeline (or refresh) finishes, report what was written, what the doctor recommended
3434
(advisory — including **MCP / external-tool recommendations** via `recommend-mcp`: CLI-over-MCP so a
3535
`github.com` remote yields the `gh` CLI not a GitHub MCP, least-privilege flags pre-filled, plus any
36-
lethal-trifecta warning with its remedy), whether an `.mcp.json` diff was written (**only** on
37-
confirmation, merged additively), and that `/v:memory-refresh` re-indexed the committed docs.
36+
lethal-trifecta warning with its remedy; **plus third-party skills via `npx autoskills`**
37+
present-only, a gated `--dry-run` preview, never auto-installed), whether an `.mcp.json` diff was
38+
written (**only** on confirmation, merged additively), and that `/v:memory-refresh` re-indexed the
39+
committed docs.
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# `npx autoskills` recommender (v2.5.3) Implementation Plan
2+
3+
> **For agentic workers:** REQUIRED SUB-SKILL: superpowers:test-driven-development for the toolkit task.
4+
5+
**Goal:** `/v:onboard` recommends `npx autoskills` (present-only) for a recognizable stack, previews it behind a gated `--dry-run`, and cautions about auto-trigger degradation — never auto-installs.
6+
7+
**Architecture:** A small `recommend-autoskills` subcommand + `recommend_autoskills()` detector in `scripts/compound-v-onboard.py`; prose wiring in `onboarding.md` (DIAGNOSE + §11) and `v-onboard.md`.
8+
9+
**Tech Stack:** Python 3.9 stdlib, Markdown docs, JSON version files.
10+
11+
## Global Constraints
12+
- **Never auto-install** — onboarding runs at most `npx autoskills --dry-run`, only behind a human confirm; the real install is the user's action.
13+
- **External `npx` is untrusted** — any invocation goes through `compound-v-run-with-timeout.py` with `stdin </dev/null` (the v2.5.0 launch invariant).
14+
- **Auto-trigger caution always surfaced** (overlapping skills degrade triggering — onboarding §11).
15+
- **Deterministic + evidence-cited** — cite the marker file; unknown repo ⇒ `applicable: false`.
16+
- **Version lockstep:** `plugin.json` + `marketplace.json``2.5.3`.
17+
18+
## File Partition
19+
| Task | Files |
20+
|---|---|
21+
| T1 | `scripts/compound-v-onboard.py` (detector + subcommand + selftest) |
22+
| T2 | `skills/compound-v/onboarding.md`, `commands/v-onboard.md` |
23+
| T3 | `.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json`, `CHANGELOG.md` |
24+
25+
---
26+
27+
### Task 1: `recommend_autoskills()` detector + subcommand
28+
**Files:** Modify `scripts/compound-v-onboard.py`
29+
30+
**Interfaces (Produces):** `recommend_autoskills(repo) -> {applicable: bool, evidence: str|None, command: str|None, caution: str|None}`; CLI `recommend-autoskills --repo .`.
31+
32+
- [ ] Step 1: Add constants + function (near the MCP recommender helpers):
33+
34+
```python
35+
AUTOSKILLS_MARKERS = ("package.json", "pyproject.toml", "requirements.txt", "Gemfile",
36+
"go.mod", "Cargo.toml", "composer.json", "pom.xml", "build.gradle")
37+
AUTOSKILLS_CAUTION = ("autoskills installs multiple stack skills; overlapping skill descriptions "
38+
"can degrade auto-triggering across your WHOLE skill set (onboarding Skills "
39+
"stance). Review the --dry-run and prefer a focused subset before installing.")
40+
41+
42+
def recommend_autoskills(repo):
43+
"""`npx autoskills` applicability: any recognizable project manifest means it can match stack
44+
skills. Present-only — the gated --dry-run + the user-run install are the onboarding walk's job.
45+
Returns {applicable, evidence, command, caution}."""
46+
ev = None
47+
for marker in AUTOSKILLS_MARKERS:
48+
if os.path.isfile(os.path.join(repo, marker)):
49+
ev = marker
50+
break
51+
if ev is None:
52+
try:
53+
if any(f.endswith(".tf") for f in os.listdir(repo)):
54+
ev = "*.tf"
55+
except OSError:
56+
pass
57+
if ev is None:
58+
return {"applicable": False, "evidence": None, "command": None, "caution": None}
59+
return {"applicable": True, "evidence": ev,
60+
"command": "npx autoskills --dry-run", "caution": AUTOSKILLS_CAUTION}
61+
```
62+
63+
- [ ] Step 2: Add the subcommand in `build_parser` (after `recommend-mcp`):
64+
65+
```python
66+
sp = sub.add_parser("recommend-autoskills"); sp.add_argument("--repo", default=".")
67+
sp.add_argument("--json", action="store_true")
68+
```
69+
70+
and in `main` (before the help fallback):
71+
72+
```python
73+
if args.cmd == "recommend-autoskills":
74+
print(json.dumps(recommend_autoskills(os.path.abspath(args.repo)), indent=2))
75+
return 0
76+
```
77+
78+
- [ ] Step 3: Selftest (append inside the recommend-mcp `try:` block or a fresh tempdir):
79+
80+
```python
81+
# --- recommend-autoskills (v2.5.3) ---
82+
d8 = tempfile.mkdtemp()
83+
try:
84+
with open(os.path.join(d8, "package.json"), "w") as fh:
85+
fh.write("{}")
86+
r8 = recommend_autoskills(d8)
87+
check("autoskills: package.json -> applicable, evidence, --dry-run command",
88+
r8["applicable"] and r8["evidence"] == "package.json"
89+
and r8["command"] == "npx autoskills --dry-run" and r8["caution"])
90+
finally:
91+
shutil.rmtree(d8, ignore_errors=True)
92+
d8b = tempfile.mkdtemp()
93+
try:
94+
with open(os.path.join(d8b, "pyproject.toml"), "w") as fh:
95+
fh.write("[project]\n")
96+
check("autoskills: pyproject.toml -> applicable",
97+
recommend_autoskills(d8b)["applicable"] is True)
98+
os.remove(os.path.join(d8b, "pyproject.toml"))
99+
check("autoskills: empty repo -> not applicable",
100+
recommend_autoskills(d8b)["applicable"] is False)
101+
finally:
102+
shutil.rmtree(d8b, ignore_errors=True)
103+
```
104+
105+
- [ ] Step 4: `python3 scripts/compound-v-onboard.py --selftest` → OK. CLI smoke on this repo → `applicable: false`. Commit.
106+
107+
---
108+
109+
### Task 2: Onboarding wiring
110+
**Files:** Modify `skills/compound-v/onboarding.md`, `commands/v-onboard.md`
111+
112+
- [ ] In `onboarding.md` DIAGNOSE (next to the MCP recommender): add the autoskills recommendation — run `recommend-autoskills`; if applicable, surface it + the caution, and **behind a human confirm** run `npx autoskills --dry-run` **through `compound-v-run-with-timeout.py` with `</dev/null`** to preview the skills; **never** the install form; decline ⇒ just recommend the user run it themselves. Add the §11 note that autoskills is the recommended third-party-skill path (present-only + cautioned).
113+
- [ ] In `v-onboard.md`: extend the finish-report line to mention the autoskills recommendation (present-only, gated `--dry-run`, never auto-installed).
114+
- [ ] `lint-frontmatter.py` clean. Commit.
115+
116+
---
117+
118+
### Task 3: Version + CHANGELOG + release
119+
**Files:** `.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json`, `CHANGELOG.md`
120+
121+
- [ ] Full regression (all script selftests + lint + CI lockstep) green.
122+
- [ ] Dogfood `recommend-autoskills` on superpowers-v (→ `applicable: false`, the negative path).
123+
- [ ] Codex cross-model verify (detector + gated-runner invariants; supervised + `</dev/null`).
124+
- [ ] Both versions → `2.5.3`; `CHANGELOG.md` `[2.5.3]`. Commit, merge `--no-ff` to main, verify, push, CI green.
125+
126+
## Self-Review
127+
Spec §4.1 → T1; §4.2/§4.3 → T2; §5 invariants → T1 (evidence, applicable-false) + T2 (supervisor/`</dev/null`, never-install, caution); §6 → T1 selftest + T3 dogfood/Codex; §7 out-of-scope respected. No placeholders. `recommend_autoskills` return shape consistent across T1/T2.
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# `npx autoskills` recommender for `/v:onboard` (design, v2.5.3)
2+
3+
**Status:** approved for build (2026-07-05). A sibling of the v2.5.1 MCP recommender — same
4+
present-only / human-gate ethos, applied to third-party skills.
5+
6+
## 1. What it is
7+
A DIAGNOSE-step component of `/v:onboard`: when the repo has a recognizable project manifest,
8+
onboarding **recommends** the third-party skill installer [`npx autoskills`](https://www.autoskills.sh/)
9+
and — **behind a human confirm** — runs `npx autoskills --dry-run` (a preview, no install) to show
10+
*which* skills it would install, surfacing a **caution** about auto-trigger degradation. Onboarding
11+
**never installs** skills itself; the real `npx autoskills` is the user's own gated action.
12+
13+
## 2. Why
14+
Onboarding already recommends MCP tools (v2.5.1) and which *existing* superpowers-v skills fit
15+
(§11). `autoskills` extends the "right tools for this stack" story to **third-party skills**
16+
detects the stack, matches an audited (SHA-256-verified) registry, installs on confirm. Surfacing
17+
it (present-only) completes the onboarding tooling picture without us running untrusted code
18+
unprompted.
19+
20+
## 3. The tension this must respect (responsible doctor)
21+
The onboarding **Skills stance** (`onboarding.md` §11) deliberately avoids bulk skill generation:
22+
*"overlapping descriptions degrade auto-triggering across the user's entire skill set."* `autoskills`
23+
mass-installs skills — the exact risk. So this component **recommends + cautions**, it does not
24+
auto-install: it must loudly warn that installing many overlapping skills can hurt auto-triggering
25+
and advise reviewing the `--dry-run` and preferring a focused subset. The user decides.
26+
27+
## 4. Components
28+
29+
### 4.1 Applicability detector — `compound-v-onboard.py recommend-autoskills`
30+
Deterministic, stdlib. `recommend_autoskills(repo) -> {applicable, evidence, command, caution}`.
31+
`applicable: true` when a recognizable project manifest exists (evidence = the marker file):
32+
`package.json`, `pyproject.toml`, `requirements.txt`, `Gemfile`, `go.mod`, `Cargo.toml`,
33+
`composer.json`, `pom.xml`, `build.gradle`, or any top-level `*.tf`. No manifest ⇒
34+
`applicable: false` (honest — an empty/unknown repo yields nothing). `command` is the **preview**
35+
form `npx autoskills --dry-run`; `caution` is the auto-trigger-degradation warning from §3.
36+
37+
### 4.2 Gated `--dry-run` runner (onboarding prose)
38+
In DIAGNOSE, when applicable: surface the recommendation + caution. **Behind a human confirm**
39+
(external code!), run `npx autoskills --dry-run` **through the process-group timeout supervisor
40+
with `stdin </dev/null`** (`compound-v-run-with-timeout.py` — the v2.5.0 launch invariant applies
41+
to `npx` too), and surface the previewed skill list. If the user declines the confirm, just print
42+
the recommendation ("run `npx autoskills` yourself when ready"). **Never** run the install form.
43+
44+
### 4.3 Onboarding wiring
45+
`skills/compound-v/onboarding.md` (DIAGNOSE, next to the MCP recommender) + `commands/v-onboard.md`
46+
(the finish report). The Skills-stance §11 gains a note that autoskills is the recommended path for
47+
third-party stack skills, present-only + cautioned.
48+
49+
## 5. Invariants (non-negotiable)
50+
1. **Never auto-install.** Onboarding runs at most `--dry-run` (a preview), only behind a human
51+
confirm; the real install is the user's own action (autoskills has its own confirm + SHA-256).
52+
2. **External `npx` is untrusted** — any invocation runs under the timeout supervisor with
53+
`stdin </dev/null` (the v2.5.0 launch invariant), never bare.
54+
3. **Auto-trigger caution always surfaced** (§3) — recommending mass skill-install without the
55+
degradation warning would contradict §11.
56+
4. **Deterministic + evidence-cited** — the detector cites the marker file; an unknown repo yields
57+
`applicable: false` (no invented recommendation).
58+
5. **Present-only in DIAGNOSE** (advisory / non-writing) — consistent with the doctor step.
59+
60+
## 6. Verification
61+
- **`compound-v-onboard.py --selftest`** (the `recommend_autoskills` cases): a repo with
62+
`package.json` → applicable + evidence `package.json`; a repo with `pyproject.toml` → applicable;
63+
an empty repo → `applicable: false`, no command.
64+
- **Dogfood on superpowers-v itself:** it has **no** standard manifest → `applicable: false` (the
65+
negative path — no false recommendation, just like the MCP recommender emitted no false MCPs).
66+
- **Codex cross-model verification** of the detector + the gated-runner invariants (supervisor +
67+
`</dev/null`, never auto-install).
68+
- Full regression (existing selftests + lint + CI version-lockstep) stays green.
69+
70+
## 7. Out of scope (2.5.3)
71+
- Auto-installing skills or running `npx autoskills` without `--dry-run` / without a confirm.
72+
- Parsing/curating autoskills' registry ourselves (we defer to its audited registry + SHA-256).
73+
- Path-scoped `.claude/rules/*.md` writer (still a future item).
74+
75+
## 8. Version
76+
**v2.5.3** (patch — an onboarding fast-follow; `plugin.json` + `marketplace.json` in lockstep).

0 commit comments

Comments
 (0)