vinta-ai-workflows 0.2.0-alpha2 → 0.2.0-alpha4
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/CHANGELOG.md +199 -0
- package/README.md +5 -2
- package/package.json +7 -1
- package/schemas/README.md +1 -0
- package/schemas/ai-models.v1.schema.json +87 -0
- package/schemas/vinta-ai-workflows-config.v1.schema.json +20 -1
- package/skills/vinta-analyze-codebase/SKILL.md +1 -1
- package/skills/vinta-bootstrap-ai-tools/SKILL.md +19 -9
- package/skills/vinta-derive-skills/SKILL.md +98 -47
- package/skills/vinta-derive-skills/resources/foundation-skills/deslop-comments/SKILL.md +148 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/plan-feature/SKILL.md +24 -27
- package/skills/vinta-derive-skills/resources/foundation-skills/plan-feature/resources/ai-models.yaml +98 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/prepare-worktree/SKILL.md +89 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/prepare-worktree/scripts/claude-worktree-write-guard.py +118 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/prepare-worktree/scripts/gen-claude-sandbox-settings.sh +167 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/prepare-worktree/scripts/sandbox-run.sh +106 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/thermo-nuclear-code-quality-review/SKILL.md +129 -0
- package/skills/vinta-derive-skills/resources/plan-execution/README.md +42 -0
- package/skills/vinta-derive-skills/resources/{implement-plan-template-modular-substitutions.md → plan-execution/partials/commit-strategy/modular.md} +38 -70
- package/skills/vinta-derive-skills/resources/plan-execution/partials/commit-strategy/stacked.md +46 -0
- package/skills/vinta-derive-skills/resources/plan-execution/partials/implementer-prompt.md +78 -0
- package/skills/vinta-derive-skills/resources/plan-execution/partials/model-pick.md +19 -0
- package/skills/vinta-derive-skills/resources/plan-execution/partials/pr-context.md +61 -0
- package/skills/vinta-derive-skills/resources/plan-execution/partials/review-layers.md +50 -0
- package/skills/vinta-derive-skills/resources/plan-execution/partials/worktree-seam.md +68 -0
- package/skills/vinta-derive-skills/resources/{amend-plan-template.md → plan-execution/shell/amend-plan-template.md} +48 -42
- package/skills/vinta-derive-skills/resources/plan-execution/shell/implement-phase-template.md +47 -0
- package/skills/vinta-derive-skills/resources/plan-execution/shell/implement-plan-template.md +186 -0
- package/skills/vinta-derive-skills/resources/plan-execution/shell/integrate-phase-template.md +30 -0
- package/skills/vinta-derive-skills/resources/plan-execution/shell/review-phase-template.md +25 -0
- package/skills/vinta-derive-skills/resources/systematic-debugging-template.md +7 -3
- package/skills/vinta-update-project-skills/SKILL.md +1 -1
- package/skills/vinta-derive-skills/resources/implement-plan-template.md +0 -416
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,205 @@ the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
7
7
|
|
|
8
8
|
## [0.2.0] — YYYY-MM-DD
|
|
9
9
|
|
|
10
|
+
<!-- pre-release: 0.2.0-alpha4 on 2026-07-08 -->
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **`implement-plan` outer-gate test scope is now configurable — and defaults
|
|
15
|
+
to the quick path.** Each phase's outer gate still always runs the repo-wide
|
|
16
|
+
type/build gate, but for tests it now runs **only the scoped suite** covering
|
|
17
|
+
the apps/files that phase touched by default, instead of the whole repo suite
|
|
18
|
+
every phase (new tests still pass individually in the inner loop). This
|
|
19
|
+
**flips the previous default** (full suite every phase → scoped) to make
|
|
20
|
+
multi-phase plans materially faster. Opt back into the full suite per run via
|
|
21
|
+
the new Step 0 question (d), or set the default in
|
|
22
|
+
`.vinta-ai-workflows.yaml` under
|
|
23
|
+
`run_options.implement-plan.full_test_suite: true`. New config field
|
|
24
|
+
(`run_options.implement-plan.full_test_suite`, boolean, default `false`);
|
|
25
|
+
threaded from the conductor into `implement-phase` (outer-gate marker in the
|
|
26
|
+
implementer prompt) and `review-phase` (Layer 1 verifies whichever gate the
|
|
27
|
+
flag selects); recorded in `TRACKING_{plan-id}.md` `run_options`.
|
|
28
|
+
|
|
29
|
+
- **`deslop-comments` foundation skill — Simple-English comment cleanup, now
|
|
30
|
+
part of the review flow.** Rewrites comments + doc blocks touched during a
|
|
31
|
+
task into Simple English (strips AI-slop vocabulary and negative framing;
|
|
32
|
+
comment-only — no renames, no behavior change). Ships at
|
|
33
|
+
[skills/vinta-derive-skills/resources/foundation-skills/deslop-comments/SKILL.md](skills/vinta-derive-skills/resources/foundation-skills/deslop-comments/SKILL.md).
|
|
34
|
+
Wired as an **always-ship** bucket-A skill (new
|
|
35
|
+
`foundation_skills.deslop-comments` enum, added to the derive-skills bucket-A
|
|
36
|
+
table + always-on note, the bootstrap always-copy-verbatim list + outputs
|
|
37
|
+
tree + Step 0.5 YAML, and both foundation-shape replace lists) because
|
|
38
|
+
`review-phase` now depends on it: **Layer 2 gains a comment-hygiene check**
|
|
39
|
+
and the **fix loop dispatches a `fixer` to run `deslop-comments`** on the
|
|
40
|
+
phase's touched files for any comment-slop finding. Also invokable
|
|
41
|
+
standalone ("deslop these comments"). **Consumers**: re-sync to pick up the
|
|
42
|
+
skill and the `review-phase` comment-hygiene step.
|
|
43
|
+
|
|
44
|
+
- **`thermo-nuclear-code-quality-review` foundation skill — opt-in deep
|
|
45
|
+
structural-maintainability audit.** A deliberately harsh, on-demand review
|
|
46
|
+
of a diff (abstraction quality, giant files, spaghetti-condition growth)
|
|
47
|
+
that hunts for "code-judo" reframes collapsing whole branches / helpers /
|
|
48
|
+
modes / layers rather than polishing them. Copy-verbatim foundation skill
|
|
49
|
+
(bucket A), read-only — it reports findings and hands each fix to the
|
|
50
|
+
`fixer` agent. Ships at
|
|
51
|
+
[skills/vinta-derive-skills/resources/foundation-skills/thermo-nuclear-code-quality-review/SKILL.md](skills/vinta-derive-skills/resources/foundation-skills/thermo-nuclear-code-quality-review/SKILL.md).
|
|
52
|
+
Wired as **opt-in / ask-first**: new `foundation_skills.thermo-nuclear-code-quality-review`
|
|
53
|
+
enum in `schemas/vinta-ai-workflows-config.v1.schema.json`, a new
|
|
54
|
+
question 6 in the bootstrap **Optional foundation skills** interview, and
|
|
55
|
+
the derive-skills bucket-A + foundation-shape lists. The `review-phase`
|
|
56
|
+
Layer 3 reviewer now applies a **condensed structural-simplification lens**
|
|
57
|
+
on every phase and escalates to this full audit only when a phase touches
|
|
58
|
+
core architecture, crosses ~1,000 lines, or surfaces a structural smell too
|
|
59
|
+
big to resolve inline — the deep pass never auto-runs on every diff.
|
|
60
|
+
**Consumers**: re-sync; the bootstrap now asks one more optional-skill
|
|
61
|
+
question, and `review-phase` gains the escalation hook.
|
|
62
|
+
|
|
63
|
+
- **`prepare-worktree` — write-guard for *in-process* subagent runtimes
|
|
64
|
+
(claude-code's Task tool).** `sandbox-run.sh` confines a *process*, so it
|
|
65
|
+
only works when the harness spawns subagents as subprocesses (`codex exec`,
|
|
66
|
+
a `claude -p` child). Claude Code runs subagents in-process — same OS
|
|
67
|
+
process, same tool pipeline, no child command to wrap — so a new
|
|
68
|
+
harness-config guard covers it instead. Two bundled scripts:
|
|
69
|
+
`prepare-worktree/scripts/claude-worktree-write-guard.py` (a `PreToolUse`
|
|
70
|
+
hook that fires for the orchestrator **and** every in-process Task subagent,
|
|
71
|
+
blocking the file-editing tools — `Edit`/`Write`/`MultiEdit`/`NotebookEdit`
|
|
72
|
+
— from writing outside the worktree; filesystem-only, no network impact) and
|
|
73
|
+
`prepare-worktree/scripts/gen-claude-sandbox-settings.sh` (generates the
|
|
74
|
+
worktree's `.claude/settings.json` wiring that hook, and optionally
|
|
75
|
+
Claude Code's **native** OS sandbox via `sandbox.filesystem.denyWrite`/
|
|
76
|
+
`allowWrite` under `--os-sandbox` to also block Bash-issued writes — noting
|
|
77
|
+
the native sandbox forces network isolation, so registry + git-remote hosts
|
|
78
|
+
must be allow-listed via `--allow-domain`). Same deny-main/allow-rest model
|
|
79
|
+
as `sandbox-run.sh`. Step 5.5 of `prepare-worktree` gains an *In-process
|
|
80
|
+
runtimes (claude-code)* subsection; `implement-plan` §1c makes the
|
|
81
|
+
previously hand-wavy "in-process runtime" branch concrete. **Consumers**:
|
|
82
|
+
re-sync `prepare-worktree` + `implement-plan` — the two new scripts ship
|
|
83
|
+
with the foundation-skill dir.
|
|
84
|
+
|
|
85
|
+
### Fixed
|
|
86
|
+
|
|
87
|
+
- **`prepare-worktree/scripts/sandbox-run.sh` — two correctness bugs.**
|
|
88
|
+
(1) The macOS profile temp file used `mktemp -t vinta-sandbox`, which fails
|
|
89
|
+
with "too few X's in template" under GNU `mktemp` (present on any machine
|
|
90
|
+
with coreutils on `PATH`, including many macOS setups) — the whole sandbox
|
|
91
|
+
path errored out; now uses an explicit `…/vinta-sandbox.XXXXXX` template
|
|
92
|
+
portable across BSD + GNU `mktemp`. (2) Callers must now pass
|
|
93
|
+
`--allow <main>/.git`: git worktrees write every commit into the main repo's
|
|
94
|
+
`.git` (`.git/worktrees/<name>/index.lock`, shared objects/refs), so a
|
|
95
|
+
deny-main that omits it made the subagent's own `git commit` fail with
|
|
96
|
+
`Operation not permitted`. `implement-plan` §1c's documented invocation +
|
|
97
|
+
checklist + rules are updated to include `<main>/.git` in the allow-set.
|
|
98
|
+
|
|
99
|
+
### Changed
|
|
100
|
+
|
|
101
|
+
- **`implement-plan` / `amend-plan` decomposed into a modular "plan-execution
|
|
102
|
+
unit" of deterministic sub-skills.** The single ~440-line
|
|
103
|
+
`implement-plan-template.md` (and its `implement-plan-template-modular-substitutions.md`
|
|
104
|
+
sister file) are replaced by a thin **conductor** plus three co-shipped
|
|
105
|
+
single-purpose sub-skills, all rendered from
|
|
106
|
+
[skills/vinta-derive-skills/resources/plan-execution/](skills/vinta-derive-skills/resources/plan-execution/)
|
|
107
|
+
(`shell/` templates that `<!-- include -->` shared `partials/`):
|
|
108
|
+
- `implement-plan` — conductor: parse → classify → resolve one `WORKROOT`
|
|
109
|
+
→ per-phase loop (dispatch) → track → report.
|
|
110
|
+
- `implement-phase` — compose prompt + pick model + spawn the implementer.
|
|
111
|
+
- `review-phase` — the three-layer review + fix loop, now shared by
|
|
112
|
+
`implement-plan`, `amend-plan`, **and** `systematic-debugging` (one review
|
|
113
|
+
implementation instead of three).
|
|
114
|
+
- `integrate-phase` — push + open PR via context file, rendered
|
|
115
|
+
commit-strategy-resolved.
|
|
116
|
+
The scattered runtime `if use_worktree` branches collapse into a single
|
|
117
|
+
`WORKROOT` / `BASE_BRANCH` / `SANDBOX_TIER` seam the conductor resolves once
|
|
118
|
+
and passes to every sub-skill as data; only two local, data-driven checks
|
|
119
|
+
remain (the sandbox spawn-wrap in `implement-phase`, the stray-write
|
|
120
|
+
backstop in `review-phase`). Under `commit_strategy = ask`, the former
|
|
121
|
+
dual-rendered branch/commit/PR bodies become **two** rendered
|
|
122
|
+
`integrate-phase-stacked` / `integrate-phase-modular` skills the conductor
|
|
123
|
+
dispatches by name — no more both-paths-in-one-file. `amend-plan` reuses
|
|
124
|
+
`review-phase` verbatim + the shared inner/outer verification loop, and
|
|
125
|
+
picks up the same `WORKROOT` uniformity, while keeping its own
|
|
126
|
+
history-rewriting topology. **Consumers**: re-sync — the target now gets
|
|
127
|
+
five plan-execution SKILL.md files (`implement-plan`, `implement-phase`,
|
|
128
|
+
`review-phase`, `integrate-phase` [or the two `ask` variants], `amend-plan`)
|
|
129
|
+
instead of two. The three new sub-skills are a co-shipped unit: always
|
|
130
|
+
generated with `implement-plan`, not individually opt-in (no new
|
|
131
|
+
`foundation_skills` enum entry, no new interview question). Runtime
|
|
132
|
+
behavior is unchanged; the decomposition is for reviewability + determinism.
|
|
133
|
+
|
|
134
|
+
<!-- pre-release: 0.2.0-alpha3 on 2026-06-23 -->
|
|
135
|
+
|
|
136
|
+
### Added
|
|
137
|
+
|
|
138
|
+
- **`plan-feature` AI model tier table extracted to a data resource +
|
|
139
|
+
nightly freshness job.** The per-tier model recommendations that used to
|
|
140
|
+
be hard-coded in `plan-feature/SKILL.md` now live in
|
|
141
|
+
`plan-feature/resources/ai-models.yaml` (ships verbatim with the skill;
|
|
142
|
+
schema: `schemas/ai-models.v1.schema.json`). The SKILL.md body keeps the
|
|
143
|
+
*tier-selection rubric* (stable judgement) and points at the resource for
|
|
144
|
+
concrete model IDs, so the prose no longer goes stale. A source-side
|
|
145
|
+
nightly GitHub Action (`.github/workflows/check-ai-models.yml`, runner
|
|
146
|
+
`scripts/check-ai-models.mjs`) checks the cited IDs against a **free,
|
|
147
|
+
no-key model aggregator** (models.dev, LiteLLM JSON as fallback) — no
|
|
148
|
+
vendor API keys required — flags IDs that disappear or that a newer
|
|
149
|
+
same-family model has superseded, and on drift has an LLM propose an
|
|
150
|
+
updated table that it opens as a reviewable PR (the optional LLM step is
|
|
151
|
+
the only one that uses a key). **Consumers**: re-sync the
|
|
152
|
+
`plan-feature` skill to pick up a refreshed table; the resource's
|
|
153
|
+
`last_verified` date signals how current it is.
|
|
154
|
+
|
|
155
|
+
- **`prepare-worktree` — OS-level filesystem sandbox that *prevents*
|
|
156
|
+
stray main-checkout writes (harness-agnostic).** The prompt instruction
|
|
157
|
+
"stay in the worktree" is cooperative only; a smaller phase subagent can
|
|
158
|
+
resolve a path back to the main checkout and silently write there. A new
|
|
159
|
+
bundled script `prepare-worktree/scripts/sandbox-run.sh` confines the
|
|
160
|
+
*process* (not the agent tool) at the kernel layer — `sandbox-exec` on
|
|
161
|
+
macOS, `bwrap` (bubblewrap) on Linux — using a **deny-main, allow-rest**
|
|
162
|
+
model: the whole filesystem stays writable except the main checkout, with
|
|
163
|
+
the worktree (nested under it) and `.vinta-ai-workflows` punched back to
|
|
164
|
+
writable, so package managers / caches / `$HOME` behave normally and no
|
|
165
|
+
per-stack allowlist tuning is needed. A stray main-checkout write fails
|
|
166
|
+
with `Operation not permitted` / `EROFS` regardless of which harness
|
|
167
|
+
(claude-code, Codex, …) issued it. `prepare-worktree` adds a capability
|
|
168
|
+
probe + a `sandbox` block in its summary YAML recording the achieved tier
|
|
169
|
+
(`enforced` / `none`); `implement-plan` wraps each subprocess subagent
|
|
170
|
+
spawn in the script when `sandbox_tier = enforced`, threads the tier
|
|
171
|
+
through tracking + the re-running-mid-plan resume path, and downgrades its
|
|
172
|
+
existing Layer 1 stray-write check from sole defense to a backstop. On
|
|
173
|
+
machines without a sandbox tool (`tier = none`) the script runs the
|
|
174
|
+
command unsandboxed with a loud warning and the Layer 1 check remains the
|
|
175
|
+
guard. Escape hatch: `VINTA_SANDBOX=off`. **Consumers**: re-sync
|
|
176
|
+
`prepare-worktree` + `implement-plan` to pick up the guard; the whole
|
|
177
|
+
`prepare-worktree/` dir now ships (SKILL.md + `scripts/sandbox-run.sh`),
|
|
178
|
+
so re-run the foundation-skill copy, not just the SKILL.md.
|
|
179
|
+
|
|
180
|
+
### Changed
|
|
181
|
+
|
|
182
|
+
- **`plan-feature` — per-phase PR-size target raised from ~100–300 LoC to
|
|
183
|
+
up to 1500 LoC** (tests included). The old "reviewer reads the diff in
|
|
184
|
+
30 minutes / ~100–300 LoC" guidance forced excessive phase splitting:
|
|
185
|
+
trivial use-cases became standalone PRs and the phase count ballooned
|
|
186
|
+
past what a reviewer wants to track. The new ceiling — "reviewer reads
|
|
187
|
+
≤1500 LoC and understands the phase in isolation" — keeps phases
|
|
188
|
+
MR-sized and single-concern while letting a coherent unit of work land
|
|
189
|
+
in one PR. Pairs with the new **Phase granularity** Step 0 choice
|
|
190
|
+
below: bundled phases also cap at 1500 LoC. Plan-shape checklist
|
|
191
|
+
updated to match.
|
|
192
|
+
|
|
193
|
+
- **`plan-feature` — "one use-case per phase" is now a Step 0 choice, not
|
|
194
|
+
a hard mandate.** Added a **Phase granularity** question to the Scope
|
|
195
|
+
group (default: one use-case per phase). The rule, its apply-even-when
|
|
196
|
+
list, and the checklist item now branch on the answer — opting into
|
|
197
|
+
bundling lets closely-related use-cases share a phase as long as each
|
|
198
|
+
phase stays MR-sized, single-concern, and independently mergeable.
|
|
199
|
+
|
|
200
|
+
- **E2E content is stripped from no-e2e projects.** `create-qa-use-cases`
|
|
201
|
+
now ships **only when `add-e2e-test` is enabled** (it seeds e2e specs),
|
|
202
|
+
and `plan-feature`'s Playwright / `QA_USE_CASES.md` / `pr-screenshots/`
|
|
203
|
+
sections are wrapped in `<!-- e2e:start/end -->` markers that
|
|
204
|
+
`vinta-derive-skills` strips when `add-e2e-test` is disabled. The
|
|
205
|
+
bootstrap `add-e2e-test` answer now also sets
|
|
206
|
+
`foundation_skills.create-qa-use-cases`. Result: projects marked as
|
|
207
|
+
having no e2e tests get foundation skills with zero e2e references.
|
|
208
|
+
|
|
10
209
|
<!-- pre-release: 0.2.0-alpha2 on 2026-06-13 -->
|
|
11
210
|
|
|
12
211
|
### Changed
|
package/README.md
CHANGED
|
@@ -222,8 +222,11 @@ Land at `ai-tools/skills/<name>/SKILL.md`. Always-on unless flagged optional.
|
|
|
222
222
|
| [`plan-feature`](skills/vinta-derive-skills/resources/foundation-skills/plan-feature/SKILL.md) | always | Phased delivery plan from the matching spec → `ai-plans/YYYY-MM-DD-FEATURE_NAME_PLAN.md`. |
|
|
223
223
|
| [`create-qa-use-cases`](skills/vinta-derive-skills/resources/foundation-skills/create-qa-use-cases/SKILL.md) | always | Bootstrap `QA_USE_CASES.md` from the active spec / plan. Called by `plan-feature` when missing. |
|
|
224
224
|
| [`open-pr-from-context`](skills/vinta-derive-skills/resources/foundation-skills/open-pr-from-context/SKILL.md) | always | Publish a `.vinta-ai-workflows/prs-context/<feature>/<phase>.md` file as a real PR + inline comments via `gh` / `glab`. Bundles [`open-pr.sh`](skills/vinta-derive-skills/resources/foundation-skills/open-pr-from-context/scripts/open-pr.sh). |
|
|
225
|
-
| `implement-plan` | always (generated) | Phase-by-phase plan execution. Generated from a template with project commands + branch / PR / co-author policy. |
|
|
226
|
-
| `
|
|
225
|
+
| `implement-plan` | always (generated) | Phase-by-phase plan execution. Thin **conductor**: parses the plan, resolves one `WORKROOT`, and runs a fixed pipeline per phase (`implement-phase` → `review-phase` → `integrate-phase`), tracking + reporting. Generated from a template with project commands + branch / PR / co-author policy. |
|
|
226
|
+
| `implement-phase` | always (unit) | Plan-execution sub-skill co-shipped with `implement-plan`: compose the implementer prompt, pick the model, spawn one implementer subagent for a single phase. |
|
|
227
|
+
| `review-phase` | always (unit) | Plan-execution sub-skill: the three-layer review (mechanical / plan-compliance / independent reviewer) + fix loop. Shared by `implement-plan`, `amend-plan`, and `systematic-debugging`. |
|
|
228
|
+
| `integrate-phase` | always (unit) | Plan-execution sub-skill: push the reviewed phase along the project's commit strategy + open the PR via context file. Under `commit_strategy = ask`, ships as `integrate-phase-stacked` + `integrate-phase-modular`. |
|
|
229
|
+
| `amend-plan` | always (generated) | History-rewriting companion to `implement-plan` — revises in-flight plans, amends prior-phase commits, force-pushes, rebases stacked downstream branches. Reuses `review-phase` + `implement-phase`'s shared prompt loop. |
|
|
227
230
|
| `systematic-debugging` | **opt-in** | Root-cause-first debugging with project-specific repro commands + MCP evidence-gathering (error tracking, traces, logs, metrics, alerts). Renders from a catalogue of observability MCP servers the user declares. |
|
|
228
231
|
| `add-e2e-test` | **opt-in** | Add an e2e test. Body covers e2e framework, page-object pattern, auth/storage-state, seed helpers, tenant scoping, screenshot conventions. |
|
|
229
232
|
| `add-env-var` | **opt-in** | Propagate a new env var through every layer (`.env.example`, build tool envPrefix, build cache hash, app config, AGENTS.md, CI, deploy injection). |
|
package/package.json
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vinta-ai-workflows",
|
|
3
|
-
"version": "0.2.0-
|
|
3
|
+
"version": "0.2.0-alpha4",
|
|
4
4
|
"description": "Bootstrap AI tooling (AGENTS.md, skills, sub-agents) across Claude Code, Codex, Cursor, and VS Code + GitHub Copilot.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"vinta-ai-workflows": "./vinta-ai-workflows.mjs"
|
|
8
8
|
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"check-ai-models": "node scripts/check-ai-models.mjs"
|
|
11
|
+
},
|
|
12
|
+
"devDependencies": {
|
|
13
|
+
"yaml": "^2.4.0"
|
|
14
|
+
},
|
|
9
15
|
"files": [
|
|
10
16
|
"vinta-ai-workflows.mjs",
|
|
11
17
|
"skills",
|
package/schemas/README.md
CHANGED
|
@@ -11,6 +11,7 @@ JSON Schema (Draft 2020-12) contracts for every YAML file the vinta-ai-workflows
|
|
|
11
11
|
| PR-context frontmatter | top-of-file YAML in `.vinta-ai-workflows/prs-context/{feature-kebab}/phase-{phase.id}.md` | [`prs-context-frontmatter.v1.schema.json`](prs-context-frontmatter.v1.schema.json) | `implement-plan` / `amend-plan` | `open-pr.sh` |
|
|
12
12
|
| PR-context inline comments | YAML inside the ` ```yaml ... ``` ` fence under `# Comments` of the same file | [`prs-context-comments.v1.schema.json`](prs-context-comments.v1.schema.json) | `implement-plan` / `amend-plan` | `open-pr.sh` |
|
|
13
13
|
| MCP preflight cache | `.vinta-ai-workflows/cache.yaml` (gitignored — per-developer-machine state) | [`mcp-preflight-cache.v1.schema.json`](mcp-preflight-cache.v1.schema.json) | rendered `systematic-debugging` SKILL.md (writes during Phase 0) | rendered `systematic-debugging` SKILL.md (reads at Phase 0 start) |
|
|
14
|
+
| AI model tier table | `ai-tools/skills/plan-feature/resources/ai-models.yaml` (shipped verbatim with the `plan-feature` foundation skill; source: `skills/vinta-derive-skills/resources/foundation-skills/plan-feature/resources/ai-models.yaml`) | [`ai-models.v1.schema.json`](ai-models.v1.schema.json) | nightly `check-ai-models` job ([`scripts/check-ai-models.mjs`](../scripts/check-ai-models.mjs)) → auto-PR | `plan-feature` (per-phase model suggestion) |
|
|
14
15
|
|
|
15
16
|
## Versioning rules
|
|
16
17
|
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/vintasoftware/vinta-ai-workflows/schemas/ai-models.v1.schema.json",
|
|
4
|
+
"title": "AI model tier table",
|
|
5
|
+
"description": "Per-tier AI model recommendations consumed by the plan-feature skill and maintained by the nightly check-ai-models job. Source of truth for concrete model IDs; the SKILL.md body carries only selection guidance.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["schema_version", "last_verified", "source", "tiers"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"schema_version": {
|
|
11
|
+
"const": 1,
|
|
12
|
+
"description": "Matches the v1 suffix on this schema filename."
|
|
13
|
+
},
|
|
14
|
+
"last_verified": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"format": "date",
|
|
17
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
|
|
18
|
+
"description": "Date every model id below was last confirmed to still exist against the aggregator."
|
|
19
|
+
},
|
|
20
|
+
"source": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"additionalProperties": false,
|
|
23
|
+
"required": ["primary"],
|
|
24
|
+
"description": "Free, no-key model-list aggregators the checker queries. Vendors tracked are derived from the `models` keys under `tiers`.",
|
|
25
|
+
"properties": {
|
|
26
|
+
"primary": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"format": "uri",
|
|
29
|
+
"description": "Primary aggregator JSON (e.g. models.dev/api.json), vendor-keyed with a `.models` map per provider."
|
|
30
|
+
},
|
|
31
|
+
"fallback": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"format": "uri",
|
|
34
|
+
"description": "Fallback aggregator JSON used when the primary is unreachable (e.g. LiteLLM price/context JSON)."
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"tiers": {
|
|
39
|
+
"type": "array",
|
|
40
|
+
"minItems": 1,
|
|
41
|
+
"items": {
|
|
42
|
+
"type": "object",
|
|
43
|
+
"additionalProperties": false,
|
|
44
|
+
"required": ["tier", "label", "use_for", "models"],
|
|
45
|
+
"properties": {
|
|
46
|
+
"tier": {
|
|
47
|
+
"type": "integer",
|
|
48
|
+
"minimum": 1,
|
|
49
|
+
"description": "Tier number, cheapest/fastest (1) → architectural/hard."
|
|
50
|
+
},
|
|
51
|
+
"label": {
|
|
52
|
+
"type": "string",
|
|
53
|
+
"description": "Short tier name."
|
|
54
|
+
},
|
|
55
|
+
"use_for": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"description": "When to reach for this tier."
|
|
58
|
+
},
|
|
59
|
+
"models": {
|
|
60
|
+
"type": "object",
|
|
61
|
+
"description": "Vendor key → ordered list of recommended models for this tier. Keys should match entries in the top-level `vendors` map.",
|
|
62
|
+
"minProperties": 1,
|
|
63
|
+
"additionalProperties": {
|
|
64
|
+
"type": "array",
|
|
65
|
+
"minItems": 1,
|
|
66
|
+
"items": {
|
|
67
|
+
"type": "object",
|
|
68
|
+
"additionalProperties": false,
|
|
69
|
+
"required": ["id"],
|
|
70
|
+
"properties": {
|
|
71
|
+
"id": {
|
|
72
|
+
"type": "string",
|
|
73
|
+
"description": "Vendor model id as it appears in the vendor's model-list API."
|
|
74
|
+
},
|
|
75
|
+
"note": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"description": "Optional caveat (fallback, variant, when-to-step-up)."
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -188,7 +188,11 @@
|
|
|
188
188
|
"properties": {
|
|
189
189
|
"plan-feature": { "type": "string", "enum": ["enabled", "disabled"] },
|
|
190
190
|
"create-spec": { "type": "string", "enum": ["enabled", "disabled"] },
|
|
191
|
-
"create-qa-use-cases": {
|
|
191
|
+
"create-qa-use-cases": {
|
|
192
|
+
"description": "Bootstrap `QA_USE_CASES.md` from the active spec/plan. Coupled to `add-e2e-test`: QA use-cases seed e2e specs, so ship (and set `enabled`) only when `add-e2e-test` is `enabled`. When `add-e2e-test` is `disabled`, set this `disabled` too — derive-skills won't ship the skill and strips the e2e regions from `plan-feature`.",
|
|
193
|
+
"type": "string",
|
|
194
|
+
"enum": ["enabled", "disabled"]
|
|
195
|
+
},
|
|
192
196
|
"implement-plan": { "type": "string", "enum": ["enabled", "disabled"] },
|
|
193
197
|
"amend-plan": { "type": "string", "enum": ["enabled", "disabled"] },
|
|
194
198
|
"open-pr-from-context": { "type": "string", "enum": ["enabled", "disabled"] },
|
|
@@ -208,6 +212,16 @@
|
|
|
208
212
|
"description": "Provision a fully-runnable git worktree for parallel feature work — symlinks dep dirs, copies env files, forks dev / test DBs, namespaces docker-compose project + network, drops a summary YAML for mechanical teardown. Copy-verbatim foundation skill (bucket A). When `enabled`, project-level defaults (worktree root, deps strategy, compose network strategy) live under `skills.prepare-worktree`. Consumed by `implement-plan` when its Step 0 question (c) opts in — the orchestrator runs `prepare-worktree` once at the start of a plan run and threads the worktree path through every subagent's prompt so phases all stack inside the same isolated checkout.",
|
|
209
213
|
"type": "string",
|
|
210
214
|
"enum": ["enabled", "disabled"]
|
|
215
|
+
},
|
|
216
|
+
"thermo-nuclear-code-quality-review": {
|
|
217
|
+
"description": "Opt-in deep structural-maintainability audit of a diff — abstraction quality, giant files, spaghetti-condition growth — harsher than the standard per-phase review. Copy-verbatim foundation skill (bucket A). Read-only; hands each fix to the `fixer` agent. Invoked deliberately by the user, or escalated from the `review-phase` Layer 3 structural-simplification lens; never auto-run on every diff.",
|
|
218
|
+
"type": "string",
|
|
219
|
+
"enum": ["enabled", "disabled"]
|
|
220
|
+
},
|
|
221
|
+
"deslop-comments": {
|
|
222
|
+
"description": "Rewrite comments and doc blocks touched during the current task into Simple English — strip AI-slop vocabulary and negative framing, comment-only (no renames, no behavior change). Copy-verbatim foundation skill (bucket A), always shipped: the `review-phase` Layer 2 comment-hygiene check and fix loop depend on it. Set `disabled` only if a project deliberately opts out of the review flow's comment-hygiene step.",
|
|
223
|
+
"type": "string",
|
|
224
|
+
"enum": ["enabled", "disabled"]
|
|
211
225
|
}
|
|
212
226
|
}
|
|
213
227
|
},
|
|
@@ -246,6 +260,11 @@
|
|
|
246
260
|
"properties": {
|
|
247
261
|
"pause_between_phases": { "type": "boolean", "default": false },
|
|
248
262
|
"generate_inline_comments": { "type": "boolean", "default": false },
|
|
263
|
+
"full_test_suite": {
|
|
264
|
+
"description": "Default answer to Step 0 question (d) — what each phase's outer gate runs for tests. False (default) = quick path: the outer gate runs only the scoped test suite covering the apps/files the phase touched (new tests still pass individually in the inner loop). True = run the full repo test suite in every phase's outer gate, guarding against regressions in untouched code at the cost of slower phases. The repo-wide type/build gate runs every phase either way. Per-run prompt still asks; this is the suggested default shown.",
|
|
265
|
+
"type": "boolean",
|
|
266
|
+
"default": false
|
|
267
|
+
},
|
|
249
268
|
"use_worktree": {
|
|
250
269
|
"description": "Default answer to Step 0 question (c) — whether `implement-plan` should provision an isolated git worktree (via `prepare-worktree`) and run every phase's subagent inside it. False = run in the current checkout. True = create one shared worktree at the start of the plan run; all phase branches stack inside it. Per-run prompt still asks; this is the suggested default shown.",
|
|
251
270
|
"type": "boolean",
|
|
@@ -155,7 +155,7 @@ This is a load-bearing input for the rest of the bootstrap flow — surface ever
|
|
|
155
155
|
For each skill, also classify:
|
|
156
156
|
|
|
157
157
|
- `vinta-managed` — directory name starts with `vinta-` (installed by `vinta-ai-workflows`; can be left alone or refreshed via that CLI).
|
|
158
|
-
- `foundation-shape` — name matches the Vinta foundation set (`plan-feature`, `create-spec`, `create-qa-use-cases`, `implement-plan`, `add-e2e-test`, `add-env-var`).
|
|
158
|
+
- `foundation-shape` — name matches the Vinta foundation set (`plan-feature`, `create-spec`, `create-qa-use-cases`, `implement-plan`, `implement-phase`, `review-phase`, `integrate-phase`, `amend-plan`, `add-e2e-test`, `add-env-var`). `implement-phase` / `review-phase` / `integrate-phase` are the plan-execution sub-skills co-shipped with `implement-plan`.
|
|
159
159
|
- `project-custom` — anything else; written by the team.
|
|
160
160
|
|
|
161
161
|
**Sub-agents** — list every agent file with its name + description:
|
|
@@ -83,9 +83,9 @@ These bleed across sub-skills, so capture once now:
|
|
|
83
83
|
|
|
84
84
|
### D. Optional foundation skills
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
Six skills are part of the foundation set but aren't always needed. Ask explicitly:
|
|
87
87
|
|
|
88
|
-
1. **`add-e2e-test`** — does the project have e2e tests (Playwright / Cypress / similar) or plan to add them? `AskUserQuestion` options: `Yes — already has them`, `Yes — planning to add`, `No — skip`. If yes, [vinta-derive-skills](../vinta-derive-skills/SKILL.md)'s **Optional — ask the user** bucket follows up to ask whether the user has a template or wants to draft from scratch.
|
|
88
|
+
1. **`add-e2e-test`** — does the project have e2e tests (Playwright / Cypress / similar) or plan to add them? `AskUserQuestion` options: `Yes — already has them`, `Yes — planning to add`, `No — skip`. If yes, [vinta-derive-skills](../vinta-derive-skills/SKILL.md)'s **Optional — ask the user** bucket follows up to ask whether the user has a template or wants to draft from scratch. **This answer also governs `create-qa-use-cases` and the e2e content inside `plan-feature`**: on `No — skip`, set `foundation_skills.create-qa-use-cases: disabled` too — derive-skills won't ship `create-qa-use-cases` and strips `plan-feature`'s `<!-- e2e:start/end -->` regions so no-e2e projects carry zero Playwright / `QA_USE_CASES.md` / `pr-screenshots/` references. On either `Yes`, set both `add-e2e-test` and `create-qa-use-cases` to `enabled`.
|
|
89
89
|
2. **`add-env-var`** — does the project have a non-trivial env-var propagation flow (multiple files / build configs / CI updates per new var) or a single `.env` file is enough? `AskUserQuestion` options: `Yes — non-trivial flow`, `No — single .env is enough`. Skip if `No`.
|
|
90
90
|
3. **`systematic-debugging`** — should agents follow a root-cause-first debugging flow that mandates pulling evidence from the project's observability MCP servers before proposing any fix? `AskUserQuestion` options: `Yes — enable`, `No — skip`. Recommend enabling whenever any observability MCP server is wired up — the skill bakes the project's real test / lint / build commands into the rendered checklist and instructs the agent to discover available calls on those servers at runtime (so it stays correct even as MCP servers add or rename tools).
|
|
91
91
|
4. **`add-one-off-script`** — does the project ever need one-off operational scripts (backfills, cleanups, ad-hoc data fixes) that mutate production data outside the regular migration / ETL / cron path? `AskUserQuestion` options: `Yes — enable`, `No — skip`. Recommend `Yes` for any project with a relational DB or large user dataset; the bundled `BaseOneOffScript` template enforces the safety contract (dry-run by default, idempotent re-runs, batched DB ops, streamed reads, segmented CSV backups capped at 1M cells per file with one set of files per affected table, interruption-safe signal handlers, console + filesystem + S3 logs that survive an interruption). Skip for read-only projects or projects whose only writes go through a migration tool.
|
|
@@ -112,7 +112,9 @@ Five skills are part of the foundation set but aren't always needed. Ask explici
|
|
|
112
112
|
- Do **not** seed the cache file at bootstrap. The first debug run preflights all configured servers and writes the file then. An empty / missing `.vinta-ai-workflows/cache.yaml` is a valid initial state.
|
|
113
113
|
- Mention to the user how to refresh: delete the file to re-preflight everything, or edit one entry's `status` to `dirty` to refresh that one server. Token rotated → cache will catch the auth error on the next call and flip the entry to `dirty` automatically.
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
6. **`thermo-nuclear-code-quality-review`** — does the team want an opt-in, deliberately harsh structural-maintainability audit available on demand (abstraction quality, giant files, spaghetti-condition growth), separate from the standard per-phase review? `AskUserQuestion` options: `Yes — enable`, `No — skip`. Recommend `Yes` for long-lived codebases where structural drift is a real cost, or teams that already run deep quality passes before merging large work. It ships as a user-invoked skill and is also the escalation target for the `review-phase` Layer 3 structural-simplification lens; it is never auto-run on every diff. No follow-up config — the body is project-agnostic.
|
|
116
|
+
|
|
117
|
+
If the user answers "No" to any of the six, that skill won't ship. If the user answers "Yes" to `add-e2e-test` / `add-env-var` but doesn't have a template, derive-skills drafts one via interview. `systematic-debugging` is always template-rendered — no per-project drafting interview, just the MCP-server inventory above. `add-one-off-script` is copied verbatim from [vinta-derive-skills/resources/foundation-skills/add-one-off-script/](../vinta-derive-skills/resources/foundation-skills/add-one-off-script/) — its body is project-agnostic; the per-project variability lives in the `skills.add-one-off-script.*` config block above and in env vars consumed at runtime. `prepare-worktree` is also copied verbatim from [vinta-derive-skills/resources/foundation-skills/prepare-worktree/](../vinta-derive-skills/resources/foundation-skills/prepare-worktree/) — same pattern: project-agnostic body, per-project defaults under `skills.prepare-worktree.*`. `thermo-nuclear-code-quality-review` is copied verbatim from [vinta-derive-skills/resources/foundation-skills/thermo-nuclear-code-quality-review/](../vinta-derive-skills/resources/foundation-skills/thermo-nuclear-code-quality-review/) with no follow-up config — its body is fully project-agnostic.
|
|
116
118
|
|
|
117
119
|
### E. Existing AI artifacts (per-artifact disposition)
|
|
118
120
|
|
|
@@ -132,7 +134,7 @@ For each artifact, read it (frontmatter + body), then ask the user via `AskUserQ
|
|
|
132
134
|
- `Keep in current vendor path, don't touch` — leaves it where it is. AGENTS.md may reference it; downstream skill setup won't manage it.
|
|
133
135
|
- `Drop` — delete (rare; usually the user wants to migrate).
|
|
134
136
|
|
|
135
|
-
Foundation-shape skills (name matches `plan-feature`, `create-spec`, `create-qa-use-cases`, `implement-plan`, `add-e2e-test`, `add-env-var`, `add-one-off-script`, `prepare-worktree`) get an extra option: `Replace with Vinta foundation version` — overwrites with the canonical foundation content, preserving the user's name. Useful when the existing version is stale.
|
|
137
|
+
Foundation-shape skills (name matches `plan-feature`, `create-spec`, `create-qa-use-cases`, `implement-plan`, `implement-phase`, `review-phase`, `integrate-phase`, `amend-plan`, `add-e2e-test`, `add-env-var`, `add-one-off-script`, `prepare-worktree`, `thermo-nuclear-code-quality-review`, `deslop-comments`) get an extra option: `Replace with Vinta foundation version` — overwrites with the canonical foundation content, preserving the user's name. Useful when the existing version is stale. (`implement-phase` / `review-phase` / `integrate-phase` are the plan-execution sub-skills co-shipped with `implement-plan`; replace them as a unit.)
|
|
136
138
|
|
|
137
139
|
- **Sub-agents** (each under any vendor `agents/` dir):
|
|
138
140
|
- `Migrate to ai-tools/agents/<name>.yaml` — converts vendor-specific format → canonical YAML; `setup-ai-tools.mjs` re-emits per-vendor copies.
|
|
@@ -250,6 +252,8 @@ foundation_skills:
|
|
|
250
252
|
systematic-debugging: <Optional foundation skills → systematic-debugging answer → enabled | disabled>
|
|
251
253
|
add-one-off-script: <Optional foundation skills → add-one-off-script answer → enabled | disabled>
|
|
252
254
|
prepare-worktree: <Optional foundation skills → prepare-worktree answer → enabled | disabled>
|
|
255
|
+
thermo-nuclear-code-quality-review: <Optional foundation skills → thermo-nuclear-code-quality-review answer → enabled | disabled>
|
|
256
|
+
deslop-comments: enabled # always ships — review-phase Layer 2 comment-hygiene + fix loop depend on it
|
|
253
257
|
|
|
254
258
|
foundation_agents:
|
|
255
259
|
implementer: enabled
|
|
@@ -263,6 +267,7 @@ run_options:
|
|
|
263
267
|
implement-plan:
|
|
264
268
|
pause_between_phases: false
|
|
265
269
|
generate_inline_comments: false
|
|
270
|
+
full_test_suite: false # default: each phase's outer gate runs scoped tests only; set true to run the full suite every phase
|
|
266
271
|
use_worktree: <Optional foundation skills → prepare-worktree follow-up → default for Step 0 question (c); false unless team opted in>
|
|
267
272
|
amend-plan:
|
|
268
273
|
blast_radius_signal_threshold: 2
|
|
@@ -340,8 +345,12 @@ ai-tools/
|
|
|
340
345
|
│ ├── plan-feature/SKILL.md ← always (copied verbatim from derive-skills resources)
|
|
341
346
|
│ ├── create-spec/SKILL.md ← always (copied verbatim)
|
|
342
347
|
│ ├── create-qa-use-cases/SKILL.md ← always (copied verbatim)
|
|
343
|
-
│ ├──
|
|
344
|
-
│ ├──
|
|
348
|
+
│ ├── deslop-comments/SKILL.md ← always (copied verbatim; review-phase Layer 2 comment-hygiene + fix loop depend on it)
|
|
349
|
+
│ ├── implement-plan/SKILL.md ← always (conductor; generated from template, project-specific)
|
|
350
|
+
│ ├── implement-phase/SKILL.md ← always (plan-execution unit; co-shipped with implement-plan)
|
|
351
|
+
│ ├── review-phase/SKILL.md ← always (plan-execution unit; shared by implement-plan / amend-plan / systematic-debugging)
|
|
352
|
+
│ ├── integrate-phase/SKILL.md ← always (plan-execution unit; push + PR. Under commit_strategy=ask: integrate-phase-stacked/ + integrate-phase-modular/ instead)
|
|
353
|
+
│ ├── amend-plan/SKILL.md ← always (conductor; generated from template, project-specific)
|
|
345
354
|
│ ├── add-e2e-test/SKILL.md ← optional — only if user opts in
|
|
346
355
|
│ ├── add-env-var/SKILL.md ← optional — only if user opts in
|
|
347
356
|
│ ├── systematic-debugging/SKILL.md ← optional — only if user opts in (template-rendered)
|
|
@@ -351,6 +360,7 @@ ai-tools/
|
|
|
351
360
|
│ │ ├── one_off_script_base.py
|
|
352
361
|
│ │ └── one_off_script_base.ts
|
|
353
362
|
│ ├── prepare-worktree/SKILL.md ← optional — only if user opts in (verbatim copy; project-agnostic body, defaults under skills.prepare-worktree.*)
|
|
363
|
+
│ ├── thermo-nuclear-code-quality-review/SKILL.md ← optional — only if user opts in (verbatim copy; deep structural-maintainability audit, escalation target for review-phase Layer 3)
|
|
354
364
|
│ ├── run-one-off-script-django/ ← optional sister skill — only when stack matches + user supplies template (authors Jupyter notebook / mgmt command runner + JupyterRuntime / DjangoMgmtRuntime adapter in the per-script folder)
|
|
355
365
|
│ ├── run-one-off-script-medplum/ ← optional sister skill — only when stack matches + user supplies template (authors Medplum bot + MedplumBotRuntime adapter in the per-script folder)
|
|
356
366
|
│ └── <stack-specific skills>/SKILL.md ← only if user supplied templates
|
|
@@ -379,9 +389,9 @@ Plus the symlinks + per-vendor generated files, set up by the install step.
|
|
|
379
389
|
|
|
380
390
|
Foundation skills break into three buckets — see [vinta-derive-skills](../vinta-derive-skills/SKILL.md) for the full mechanics:
|
|
381
391
|
|
|
382
|
-
- **Always copy verbatim**: `plan-feature`, `create-spec`, `create-qa-use-cases`. Bundled with the bootstrap skill set; project-agnostic enough to ship as-is (with light path scrubs).
|
|
383
|
-
- **Always generate**: `implement-plan`, `amend-plan
|
|
384
|
-
- **Optional, ask first**: `add-e2e-test`, `add-env-var`, `systematic-debugging`, `add-one-off-script`, `prepare-worktree`. Skipped by default; orchestrator asks via `AskUserQuestion` whether the project has the relevant flow at all. `add-e2e-test` / `add-env-var`: if yes + user has a template → copy + adapt; if yes + no template → draft from scratch via interview; if no → don't ship. `systematic-debugging`: if yes → render the bundled template plus the per-tool MCP catalogue blocks for the observability tools selected in its follow-up; if no → don't ship. `add-one-off-script`: if yes → copy the bundled SKILL.md verbatim plus the language-specific `BaseOneOffScript` template (`one_off_script_base.py` / `one_off_script_base.ts`) chosen via its follow-up; if no → don't ship. `prepare-worktree`: if yes → copy the bundled SKILL.md verbatim, populate `skills.prepare-worktree.*` defaults from its follow-ups, and (when the user opted in via the worktree-default follow-up) flip `run_options.implement-plan.use_worktree` to `true` so `implement-plan`'s Step 0 question (c) defaults to yes; if no → don't ship.
|
|
392
|
+
- **Always copy verbatim**: `plan-feature`, `create-spec`, `create-qa-use-cases`, `deslop-comments`. Bundled with the bootstrap skill set; project-agnostic enough to ship as-is (with light path scrubs). `deslop-comments` always ships because `review-phase`'s Layer 2 comment-hygiene check + fix loop dispatch it.
|
|
393
|
+
- **Always generate**: the plan-execution unit — `implement-plan` (conductor) + its co-shipped sub-skills `implement-phase` / `review-phase` / `integrate-phase`, plus `amend-plan` (conductor). Bodies have too much project-specific content (test commands, branch convention, PR + co-author policy, agent dispatch) — generated from parameterized templates + shared partials using interview answers + inventory. The sub-skills are not independently opt-in; they always ship with the conductors.
|
|
394
|
+
- **Optional, ask first**: `add-e2e-test`, `add-env-var`, `systematic-debugging`, `add-one-off-script`, `prepare-worktree`, `thermo-nuclear-code-quality-review`. Skipped by default; orchestrator asks via `AskUserQuestion` whether the project has the relevant flow at all. `add-e2e-test` / `add-env-var`: if yes + user has a template → copy + adapt; if yes + no template → draft from scratch via interview; if no → don't ship. `systematic-debugging`: if yes → render the bundled template plus the per-tool MCP catalogue blocks for the observability tools selected in its follow-up; if no → don't ship. `add-one-off-script`: if yes → copy the bundled SKILL.md verbatim plus the language-specific `BaseOneOffScript` template (`one_off_script_base.py` / `one_off_script_base.ts`) chosen via its follow-up; if no → don't ship. `prepare-worktree`: if yes → copy the bundled SKILL.md verbatim, populate `skills.prepare-worktree.*` defaults from its follow-ups, and (when the user opted in via the worktree-default follow-up) flip `run_options.implement-plan.use_worktree` to `true` so `implement-plan`'s Step 0 question (c) defaults to yes; if no → don't ship. `thermo-nuclear-code-quality-review`: if yes → copy the bundled SKILL.md verbatim (no follow-up config); if no → don't ship.
|
|
385
395
|
|
|
386
396
|
Stack-specific skills + agents land in the target only when the user provides templates for them. If they don't have templates yet, the orchestrator records the detected stacks + skill categories as a TODO list the user can address later via [vinta-derive-skills](../vinta-derive-skills/SKILL.md) / [vinta-derive-subagents](../vinta-derive-subagents/SKILL.md) standalone runs.
|
|
387
397
|
|