vinta-ai-workflows 0.1.7
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 +830 -0
- package/LICENSE +21 -0
- package/README.md +547 -0
- package/package.json +27 -0
- package/schemas/README.md +84 -0
- package/schemas/mcp-preflight-cache.v1.schema.json +50 -0
- package/schemas/prs-context-comments.v1.schema.json +51 -0
- package/schemas/prs-context-frontmatter.v1.schema.json +77 -0
- package/schemas/sub-agent.v1.schema.json +105 -0
- package/schemas/vinta-ai-workflows-config.v1.schema.json +283 -0
- package/skills/vinta-analyze-codebase/SKILL.md +325 -0
- package/skills/vinta-bootstrap-ai-tools/SKILL.md +375 -0
- package/skills/vinta-bootstrap-ai-tools/resources/stacks/README.md +50 -0
- package/skills/vinta-bootstrap-ai-tools/resources/stacks/django/notes.md +52 -0
- package/skills/vinta-bootstrap-ai-tools/resources/stacks/medplum/notes.md +45 -0
- package/skills/vinta-bootstrap-ai-tools/resources/stacks/nextjs-app-router/notes.md +35 -0
- package/skills/vinta-bootstrap-ai-tools/resources/stacks/python-package/notes.md +31 -0
- package/skills/vinta-bootstrap-ai-tools/resources/stacks/typescript-monorepo/notes.md +32 -0
- package/skills/vinta-derive-skills/SKILL.md +200 -0
- package/skills/vinta-derive-skills/resources/amend-plan-template.md +355 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/add-one-off-script/SKILL.md +292 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/add-one-off-script/resources/one_off_script_base.py +602 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/add-one-off-script/resources/one_off_script_base.ts +624 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/create-qa-use-cases/SKILL.md +232 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/create-spec/SKILL.md +235 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/open-pr-from-context/SKILL.md +78 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/open-pr-from-context/scripts/open-pr.sh +357 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/plan-feature/SKILL.md +418 -0
- package/skills/vinta-derive-skills/resources/implement-plan-template.md +375 -0
- package/skills/vinta-derive-skills/resources/prs-context-template.md +91 -0
- package/skills/vinta-derive-skills/resources/systematic-debugging-mcp-tools.md +125 -0
- package/skills/vinta-derive-skills/resources/systematic-debugging-template.md +167 -0
- package/skills/vinta-derive-subagents/SKILL.md +192 -0
- package/skills/vinta-install-ai-tools-setup/SKILL.md +138 -0
- package/skills/vinta-install-ai-tools-setup/resources/setup-ai-tools.mjs +392 -0
- package/skills/vinta-migrate-plans-specs/SKILL.md +229 -0
- package/skills/vinta-sync-ai-tools/SKILL.md +184 -0
- package/skills/vinta-update-project-skills/SKILL.md +178 -0
- package/skills/vinta-write-agents-md/SKILL.md +192 -0
- package/vinta-ai-workflows.mjs +316 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Vinta Software 2026
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,547 @@
|
|
|
1
|
+
# vinta-ai-workflows
|
|
2
|
+
|
|
3
|
+
Bootstrap AI tooling — AGENTS.md, sub-agents, project skills, multi-vendor wiring — into any project, then get out of the way.
|
|
4
|
+
|
|
5
|
+
Distributed as a private npm package (`vinta-ai-workflows`) with a CLI that installs / updates / uninstalls a set of one-shot bootstrap skills into the project's vendor-specific skill directories (Claude Code, Codex, Cursor, VS Code + GitHub Copilot).
|
|
6
|
+
|
|
7
|
+
## Quick start
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# 1. Add the package to the target project.
|
|
11
|
+
cd ~/code/my-project
|
|
12
|
+
npm install -D git+ssh://git@github.com:vintasoftware/vinta-ai-workflows.git#0.1.0
|
|
13
|
+
|
|
14
|
+
# 2. Install the bootstrap skills for your AI tool.
|
|
15
|
+
npx vinta-ai-workflows install --tool claude-code
|
|
16
|
+
# or --tool agents (covers Codex + Cursor + Copilot in one go)
|
|
17
|
+
# or --tool all
|
|
18
|
+
|
|
19
|
+
# 3. Open the project in the AI tool, run the orchestrator.
|
|
20
|
+
# Claude Code → /vinta-bootstrap-ai-tools
|
|
21
|
+
|
|
22
|
+
# 4. Review and commit the generated layout.
|
|
23
|
+
git add ai-tools/ AGENTS.md .claude/ .codex/ .cursor/ .github/ .agents/
|
|
24
|
+
git commit -m "Bootstrap ai-tools layout"
|
|
25
|
+
|
|
26
|
+
# 5. Remove the builder skills — one-shot done.
|
|
27
|
+
npx vinta-ai-workflows uninstall --tool claude-code
|
|
28
|
+
npm uninstall vinta-ai-workflows
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Prerequisites: Node ≥ 18, SSH access to the private repo (or a registry token if your team mirrors it).
|
|
32
|
+
|
|
33
|
+
## Why this is useful
|
|
34
|
+
|
|
35
|
+
After bootstrap, the project ships with **three foundation skills** that take a feature from raw prompt to merged code:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
raw prompt / ticket
|
|
39
|
+
│
|
|
40
|
+
▼
|
|
41
|
+
┌─────────────────┐ ai-plans/YYYY-MM-DD-FEATURE_NAME_SPEC.md
|
|
42
|
+
│ create-spec │───► what + why (Business Context, Hypothesis,
|
|
43
|
+
└─────────────────┘ Use-cases, Acceptance, Negative scope,
|
|
44
|
+
│ Open questions, Risks)
|
|
45
|
+
▼
|
|
46
|
+
┌─────────────────┐ ai-plans/YYYY-MM-DD-FEATURE_NAME_PLAN.md
|
|
47
|
+
│ plan-feature │───► how + when (Goals, Decisions, Data Model,
|
|
48
|
+
└─────────────────┘ Phased Rollout, Touch List, Risks)
|
|
49
|
+
│
|
|
50
|
+
▼
|
|
51
|
+
┌─────────────────┐ one stacked branch per phase + tracking file
|
|
52
|
+
│ implement-plan │───► plan/<feature>/phase-1, phase-2, ...
|
|
53
|
+
└─────────────────┘ pushed to GitHub / GitLab / etc.
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
You also get: an `AGENTS.md` tuned to the codebase, project-specific sub-agents and skills derived from the actual stack, and per-vendor wiring so Claude Code / Codex / Cursor / Copilot all see the same artifacts.
|
|
57
|
+
|
|
58
|
+
**The project keeps getting better without re-bootstrapping.** `vinta-ai-workflows` ships new foundation skills, sharper templates, schema additions, and best-practice updates lifted from real projects. A bootstrapped repo pulls those in via [`vinta-sync-ai-tools`](#staying-in-sync-with-upstream) — one command from the AI tool, per-change `Apply` / `Skip` / `Show diff` gating, opt-outs sticky across runs, schema migrations automatic. No manual re-scaffolding, no clobbered hand-tuning, no drift between projects on the same package version. This is treated as a first-class capability of the package, not an afterthought.
|
|
59
|
+
|
|
60
|
+
The bootstrap skills are **one-shot**. They scaffold the project once and are removed — they don't pollute the slash menu, and they can't accidentally overwrite hand-tuned output on a future run. Sync handles every later upgrade.
|
|
61
|
+
|
|
62
|
+
## The AI workflow after bootstrap
|
|
63
|
+
|
|
64
|
+
### 1. Spec generation — `create-spec`
|
|
65
|
+
|
|
66
|
+
**Trigger:** `/create-spec`, "write a spec for X", "draft a spec for the new <feature>". Runs as soon as you have a prompt or ticket and need structure before planning.
|
|
67
|
+
|
|
68
|
+
**What it does:** interviews the requester before drafting — never turns a vague prompt into a plausible-sounding spec by guessing. The interview covers Business Context, Hypothesis, Objectives, Use-cases, State transitions, Acceptance scenarios, Negative scope, Alternatives considered, Open questions, and Risks assumed.
|
|
69
|
+
|
|
70
|
+
**Output:** `ai-plans/YYYY-MM-DD-FEATURE_NAME_SPEC.md` with the fixed section structure above. `YYYY-MM-DD` = today; `FEATURE_NAME` = `UPPERCASE_WITH_UNDERSCORES`.
|
|
71
|
+
|
|
72
|
+
**Hand-off:** confirm scope with the requester, then move to `plan-feature`. The spec is the contract; the plan is the build pipeline. Plans without specs produce plausible-sounding but unverified work.
|
|
73
|
+
|
|
74
|
+
### 2. Implementation plan generation — `plan-feature`
|
|
75
|
+
|
|
76
|
+
**Trigger:** `/plan-feature`, "plan the <feature>", "break this spec into phases". Reads the matching `*_SPEC.md` (paired by date + feature name) before drafting.
|
|
77
|
+
|
|
78
|
+
**What it does:** translates the spec into a phased delivery plan. Output sections:
|
|
79
|
+
|
|
80
|
+
- **Goals + Non-goals** — what's in / out of scope.
|
|
81
|
+
- **Guiding Decisions** — feature flag (key, scope, default, flip-on criterion if any), storage shape, tenant scoping, API contract, schema rules. Load-bearing — every phase reaches back here.
|
|
82
|
+
- **Data Model Changes** — migrations + rollout order.
|
|
83
|
+
- **Phased Rollout** — each phase declares: `id`, `title`, `goal`, `Suggested AI model` (per vendor — implement-plan picks the cheapest available), `reusable_skills` (other project skills the implementer should invoke), `Changes`, `Tests`, `Acceptance`, plus flags for `is_cross_repo` and `is_flag_removal` (both deferred).
|
|
84
|
+
- **Risk & Rollout Notes**, **Open Questions**, **Touch List**.
|
|
85
|
+
|
|
86
|
+
Phases are sized so the slowest path (e.g. cross-repo producer wiring, external integration approval) starts in Phase 1 and fast in-repo work fills in behind. Large mutation phases get split (`4a / 4b / 4c`) rather than monolithic.
|
|
87
|
+
|
|
88
|
+
**Output:** `ai-plans/YYYY-MM-DD-FEATURE_NAME_PLAN.md`. Same `FEATURE_NAME` prefix as the spec so `ls ai-plans/` groups pairs.
|
|
89
|
+
|
|
90
|
+
**Hand-off:** review the plan with the team — feature-flag decision, phase boundaries, cross-repo dependencies, rollback story. Once approved, move to `implement-plan`.
|
|
91
|
+
|
|
92
|
+
### 3. Phase-by-phase execution — `implement-plan`
|
|
93
|
+
|
|
94
|
+
**Trigger:** `/implement-plan`, "implement the <feature> plan", "execute phase N of plan X". Asks which plan if ambiguous, then drives every in-scope phase to completion without further prompts (unless a phase fails after retries).
|
|
95
|
+
|
|
96
|
+
**Per-phase loop** (Step 1 of the skill):
|
|
97
|
+
|
|
98
|
+
1. **Compose a token-efficient prompt.** AGENTS.md + the plan's **Goals + Non-goals**, **Guiding Decisions**, relevant **Data Model Changes** subsection, this phase's body under **Phased Rollout**, plus the running tracking summary (replaces full prior-phase content as context handoff). Don't dump the full plan into every prompt.
|
|
99
|
+
2. **Pick the model from the plan's per-phase suggestion.** Filter to what the runtime can actually run, choose the cheapest survivor. Capability gap on retry → escalate one tier; after Tier 4, stop and surface to the user.
|
|
100
|
+
3. **Spawn the right agent type.** `implementer` by default; switch to a stack-specialist (`migration-author`, `deploy-author`, etc.) when that role's risk dominates the phase.
|
|
101
|
+
4. **Implementer runs inner + outer loop.** Inner: lint → scoped tests → typecheck on touched files; iterate until green. Outer (only after inner is green): full build + full test suite + e2e where applicable. Never commits, pushes, or proceeds with a red gate.
|
|
102
|
+
5. **Three-layer review** before merging the phase branch:
|
|
103
|
+
- **Layer 1 — mechanical**: read every diff, confirm outer gate ran green, scope-creep + secrets scan.
|
|
104
|
+
- **Layer 2 — plan compliance**: walk every "Changes" item, every "Tests" entry, the Acceptance line, AGENTS.md conventions, any reusable-skill compliance, feature-flag wiring, cross-phase consistency.
|
|
105
|
+
- **Layer 3 — independent reviewer**: spawn a fresh `reviewer` agent with no implementation context. Findings triaged BLOCKER / SHOULD-FIX / NIT.
|
|
106
|
+
6. **Fix loop**: each finding → spawn a `fixer` agent (separate session) that re-runs inner + outer loops; orchestrator never edits directly. Repeat until all three layers are clean.
|
|
107
|
+
|
|
108
|
+
**Branch model — one branch per phase, stacked:**
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# First executed phase — branches from the default branch.
|
|
112
|
+
git checkout main && git pull --ff-only
|
|
113
|
+
git checkout -b plan/<feature-kebab>/phase-1
|
|
114
|
+
# implementer's commits land here
|
|
115
|
+
git push -u origin plan/<feature-kebab>/phase-1
|
|
116
|
+
|
|
117
|
+
# Phase 2 stacks on phase 1 — never branches back to main.
|
|
118
|
+
git checkout plan/<feature-kebab>/phase-1
|
|
119
|
+
git checkout -b plan/<feature-kebab>/phase-2
|
|
120
|
+
git push -u origin plan/<feature-kebab>/phase-2
|
|
121
|
+
|
|
122
|
+
# Phase 3 stacks on phase 2, etc.
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Each phase's PR (or branch, depending on the project's PR policy captured at bootstrap) targets the previous phase's branch, not `main`. This keeps the diff per PR scoped to a single phase, makes review manageable, and lets the team merge phases sequentially as approvals land — earlier phases ship to production while later ones are still in review.
|
|
126
|
+
|
|
127
|
+
**Tracking file** — `ai-plans/TRACKING_<feature-kebab>.md`. The orchestrator writes it from `git diff` + the agent's report (not the agent's narration). Records: completed phases (status, model used, branch, base, e2e+screenshots when applicable, 5–15 line summary), current phase, remaining phases, deferred phases. Acts as the durable context handoff between phase prompts. Deleted on plan completion.
|
|
128
|
+
|
|
129
|
+
**Phases the orchestrator never auto-executes:**
|
|
130
|
+
|
|
131
|
+
- **Cross-repo phases** (`is_cross_repo: true`) — work in another repository. Marked deferred in tracking; orchestrator continues to the next in-repo phase. Don't block on cross-repo work.
|
|
132
|
+
- **Flag-removal phase** (always the last phase when a feature flag exists). Gated on real-world soak signal — handled by a dedicated flag-removal skill, not `implement-plan`. Marked deferred; orchestrator ends the run with a hand-off note.
|
|
133
|
+
|
|
134
|
+
**Failure handling:** if a phase fails Layer 1 / 2 / 3 + fixer escalation, orchestrator stops, posts the agent's report, and asks how to proceed. It does not silently rerun, skip, or escalate models without the user.
|
|
135
|
+
|
|
136
|
+
#### PR creation: single flow via `prs-context` + `open-pr.sh`
|
|
137
|
+
|
|
138
|
+
`implement-plan` has **one** path for opening PRs: write a `.vinta-ai-workflows/prs-context/{feature-name}/{phase-name}.md` file, then run the bundled [open-pr.sh](skills/vinta-derive-skills/resources/foundation-skills/open-pr-from-context/scripts/open-pr.sh) script. No raw `gh pr create` / `glab mr create` calls live elsewhere in the flow. The file is the durable record; the script is the publisher. The `.vinta-ai-workflows/prs-context/` directory is auto-added to `.gitignore` by `setup-ai-tools.mjs`.
|
|
139
|
+
|
|
140
|
+
What actually happens depends on two signals:
|
|
141
|
+
|
|
142
|
+
1. **Project PR creation policy** — captured at bootstrap. Either "agents create PRs" or "branches only, humans open PRs".
|
|
143
|
+
2. **`generate_inline_comments` opt-in** — Step 0 per-run question, off by default. Yes → agent picks 3–10 non-obvious diff spots and writes them to the file's `# Comments` block. No → file's `# Comments` block is empty; only `# Title` + `# Description` populate.
|
|
144
|
+
|
|
145
|
+
| PR policy | inline comments | What the **Open PR via context file** step does |
|
|
146
|
+
|---|---|---|
|
|
147
|
+
| agents create | off | Write file (empty `# Comments`); run `open-pr.sh` → PR opened, no inline comments. |
|
|
148
|
+
| agents create | on | Write file (full); run `open-pr.sh` → PR opened, all comments posted. |
|
|
149
|
+
| branches only | off | Skip the step. Human opens PR manually. |
|
|
150
|
+
| branches only | on | Write file (durable record); **don't** run script. Publish later via `open-pr-from-context` from a CLI-equipped session. |
|
|
151
|
+
|
|
152
|
+
`open-pr.sh` exit codes propagate: `0` = PR up + comments OK, `1` = PR up but ≥1 comment failed (failures listed by `(file:line)`), `2` = hard failure (file stays `status: pending` so re-running after fixing the gap is safe).
|
|
153
|
+
|
|
154
|
+
**Required tools** for `open-pr.sh` (install before any policy = "agents create" run, and on any session that will publish a `pending` file later):
|
|
155
|
+
|
|
156
|
+
- **`bash` 4+** — already present on macOS (3.2 ships by default; install 4+ via `brew install bash`) and Linux.
|
|
157
|
+
- **`git`**.
|
|
158
|
+
- **[`yq`](https://github.com/mikefarah/yq)** (Mike Farah's Go binary — not the Python `yq` wrapper). Used to read/write the file's YAML frontmatter and parse the comments list.
|
|
159
|
+
- **[`jq`](https://stedolan.github.io/jq/)** — used to iterate the comment list and parse `gh` / `glab` JSON output.
|
|
160
|
+
- **One of [`gh`](https://cli.github.com)** (for GitHub) **or [`glab`](https://gitlab.com/gitlab-org/cli)** (for GitLab), authenticated.
|
|
161
|
+
|
|
162
|
+
Install commands:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
# macOS
|
|
166
|
+
brew install yq jq gh # GitHub
|
|
167
|
+
brew install yq jq glab # GitLab
|
|
168
|
+
|
|
169
|
+
# Debian / Ubuntu
|
|
170
|
+
sudo apt install yq jq # check yq version — some distros ship the Python wrapper;
|
|
171
|
+
# if so, install Mike Farah's binary from the GitHub releases.
|
|
172
|
+
# gh: see cli.github.com#installation
|
|
173
|
+
# glab: see gitlab.com/gitlab-org/cli#installation
|
|
174
|
+
|
|
175
|
+
# Auth (once per machine)
|
|
176
|
+
gh auth login # GitHub
|
|
177
|
+
glab auth login # GitLab
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
The script bails early with `missing dependency: <name>` if any are absent. If a runner can't install them (e.g. minimal CI image), the project's PR policy must be set to "branches only" at bootstrap so the **Open PR via context file** step skips the script — humans open PRs from the pushed branch.
|
|
181
|
+
|
|
182
|
+
### Putting it together
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
# Day 1 — discovery + scoping
|
|
186
|
+
/create-spec # interview → ai-plans/2026-05-12-CHECKOUT_FLOW_SPEC.md
|
|
187
|
+
# review with team, iterate
|
|
188
|
+
|
|
189
|
+
# Day 2 — planning
|
|
190
|
+
/plan-feature # reads spec → ai-plans/2026-05-12-CHECKOUT_FLOW_PLAN.md
|
|
191
|
+
# review feature flag, phase boundaries, rollback story
|
|
192
|
+
|
|
193
|
+
# Day 3+ — execution
|
|
194
|
+
/implement-plan # orchestrator runs phase 1 → phase 2 → ... → phase N-1
|
|
195
|
+
# each phase: implementer + reviewer + fixer agents,
|
|
196
|
+
# one stacked branch + PR per phase
|
|
197
|
+
# merge phase branches sequentially as approvals land
|
|
198
|
+
# soak phase 1 in prod → soak phase 2 → ...
|
|
199
|
+
# once feature flag's flip-on criterion is met:
|
|
200
|
+
# invoke the flag-removal skill on the deferred phase N
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Standalone re-invocation works at every step — kick `create-spec` again when the requirements shift mid-plan, re-run `plan-feature` after contract changes, restart `implement-plan` mid-feature (it picks up from the tracking file, never re-runs completed phases).
|
|
204
|
+
|
|
205
|
+
## Cheat sheet — what lands in your project
|
|
206
|
+
|
|
207
|
+
Quick inventory of what `vinta-bootstrap-ai-tools` writes into your repo's `ai-tools/` layout (and exposes via per-vendor wiring at `.claude/skills/`, `.agents/skills/`, etc.). Two disclaimers up front:
|
|
208
|
+
|
|
209
|
+
> **Optional foundation skills are gated by the bootstrap interview.** `systematic-debugging`, `add-e2e-test`, `add-env-var`, and `add-one-off-script` ship **only** if the user says yes during `vinta-bootstrap-ai-tools` Step 0 (or later opts in via `vinta-sync-ai-tools`). They are not in every bootstrapped project. The opt-in is recorded in `.vinta-ai-workflows.yaml` under `foundation_skills.*.enabled` and is sticky across syncs.
|
|
210
|
+
>
|
|
211
|
+
> **Stack-specific skills and sub-agents are user-supplied.** This package ships **detection signals + category lists** per stack ([resources/stacks/](skills/vinta-bootstrap-ai-tools/resources/stacks/) — Django, Medplum, Next.js App Router, Python package, TypeScript monorepo), not the bodies. When a stack is detected, the orchestrator asks the user for a path / URL to their team's existing template. If no template exists, the category is recorded as a gap in the final summary, not auto-drafted. Bodies are project- and team-specific; one shared template doesn't fit every team's conventions.
|
|
212
|
+
|
|
213
|
+
### Foundation skills (project-agnostic)
|
|
214
|
+
|
|
215
|
+
Land at `ai-tools/skills/<name>/SKILL.md`. Always-on unless flagged optional.
|
|
216
|
+
|
|
217
|
+
| Skill | Status | What it does |
|
|
218
|
+
|---|---|---|
|
|
219
|
+
| [`create-spec`](skills/vinta-derive-skills/resources/foundation-skills/create-spec/SKILL.md) | always | Interview-driven spec doc from a raw prompt / ticket → `ai-plans/YYYY-MM-DD-FEATURE_NAME_SPEC.md`. |
|
|
220
|
+
| [`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`. |
|
|
221
|
+
| [`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. |
|
|
222
|
+
| [`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). |
|
|
223
|
+
| `implement-plan` | always (generated) | Phase-by-phase plan execution. Generated from a template with project commands + branch / PR / co-author policy. |
|
|
224
|
+
| `amend-plan` | always (generated) | History-rewriting companion to `implement-plan` — revises in-flight plans, amends prior-phase commits, force-pushes, rebases stacked downstream branches. |
|
|
225
|
+
| `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. |
|
|
226
|
+
| `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. |
|
|
227
|
+
| `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). |
|
|
228
|
+
| [`add-one-off-script`](skills/vinta-derive-skills/resources/foundation-skills/add-one-off-script/SKILL.md) | **opt-in** | Author one-off operational scripts (backfills, cleanups, ad-hoc fixes). Ships a `BaseOneOffScript` class (Python + TS) enforcing dry-run default, idempotency, batched DB ops, segmented CSV backups, signal-safe interruption, multi-sink logging. |
|
|
229
|
+
|
|
230
|
+
### Foundation sub-agents (project-agnostic)
|
|
231
|
+
|
|
232
|
+
Land at `ai-tools/agents/<name>.yaml` (canonical YAML; `setup-ai-tools.mjs` emits per-vendor copies into `.claude/agents/`, `.cursor/`, `.codex/`, `.github/`). Always-on trio.
|
|
233
|
+
|
|
234
|
+
| Agent | Access | Role |
|
|
235
|
+
|---|---|---|
|
|
236
|
+
| `implementer` | read-write | Default coder for one plan phase. Reads AGENTS.md + plan + phase body, runs inner + outer test gates, reports back. Never branches, pushes, opens PRs, or adds AI co-author trailers. |
|
|
237
|
+
| `reviewer` | read-only | Adversarial reviewer. Reads phase + diff + AGENTS.md, outputs `BLOCKER` / `SHOULD-FIX` / `NIT` findings with `file:line`. Does not edit. |
|
|
238
|
+
| `fixer` | read-write | Applies one reviewer finding (or one named test failure). Smallest correct change, re-runs gates, reports. |
|
|
239
|
+
|
|
240
|
+
Stack templates may add specialists like `migration-author` (Django) or `deploy-author` (Medplum) — see disclaimer above.
|
|
241
|
+
|
|
242
|
+
## Staying in sync with upstream
|
|
243
|
+
|
|
244
|
+
Bootstrap is a snapshot. `vinta-ai-workflows` keeps shipping — new foundation skills, refined templates, sharper agent prompts, schema additions, stack support, best-practice updates lifted from real projects. Pulling those into a previously-bootstrapped repo is a first-class flow, not an afterthought. **This is one of the most important capabilities of the package.**
|
|
245
|
+
|
|
246
|
+
### The flow at a glance
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
# 1. Pull the new package version (or update the git+ssh ref).
|
|
250
|
+
npm update vinta-ai-workflows
|
|
251
|
+
|
|
252
|
+
# 2. Run the sync skill from your AI tool.
|
|
253
|
+
# Claude Code → /vinta-sync-ai-tools
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
That's it. The sync skill walks every release between the project's recorded version and the new one, proposes per-change updates, and bumps the project's version stamp at the end.
|
|
257
|
+
|
|
258
|
+
### How it stays safe
|
|
259
|
+
|
|
260
|
+
The single source of truth is `.vinta-ai-workflows.yaml` at the repo root (written at bootstrap, schema: [`schemas/vinta-ai-workflows-config.v1.schema.json`](schemas/vinta-ai-workflows-config.v1.schema.json)). It records every opt-in the project made — which foundation skills are `enabled`, which stacks are applied, which vendors are wired, which policies (PR creation, AI co-author, commit style) hold. `vinta-sync-ai-tools` reads this file and uses it to classify every upstream change into one of:
|
|
261
|
+
|
|
262
|
+
| Bucket | Meaning | Default |
|
|
263
|
+
|---|---|---|
|
|
264
|
+
| `affects-project` | Touches enabled surface area (e.g. an enabled foundation skill's body changed). | One prompt per change: `Apply` / `Skip` / `Show diff`. |
|
|
265
|
+
| `opt-in-offer` | New optional surface area the project doesn't have. | Description shown; offer to enable. `Skip` is sticky — recorded in the config so future syncs don't re-propose it. |
|
|
266
|
+
| `config-schema-change` | New field, schema migration, or major-bump. | Migrated automatically; required new fields prompt for a value. |
|
|
267
|
+
| `tooling` | Setup-script / gitignore / packaging tweaks. | Batched under one prompt. |
|
|
268
|
+
| `not-applicable` | Project opted out, or change targets an unused stack. | Listed for transparency, not applied. |
|
|
269
|
+
|
|
270
|
+
Every per-change decision is explicit — nothing is silently overwritten. Each `affects-project` change is a separate prompt, so hand-tuned wording in one skill body can stay while another is refreshed. Hand-edits to a rendered skill body that would be clobbered surface a warning before re-render.
|
|
271
|
+
|
|
272
|
+
At the end of a run:
|
|
273
|
+
|
|
274
|
+
- Approved changes apply (templates re-rendered from the config, new foundation skills copied, config schema migrated, setup script re-run idempotently).
|
|
275
|
+
- Every YAML file in the project re-validates against its schema.
|
|
276
|
+
- `vinta_ai_workflows_version` + `last_synced_at` get bumped in `.vinta-ai-workflows.yaml`.
|
|
277
|
+
- A final report lists Applied / Skipped / Newly disabled / Orphan diffs (changes without changelog entries — flagged, never auto-applied).
|
|
278
|
+
|
|
279
|
+
### Two related but narrower flows
|
|
280
|
+
|
|
281
|
+
- [`vinta-update-project-skills`](skills/vinta-update-project-skills/SKILL.md) — refresh **only** the foundation-skill bodies under `ai-tools/skills/` against the latest source. Per-skill diff with explicit accept gate. `vinta-sync-ai-tools` calls this internally for foundation-skill body diffs; invoke it standalone when that's the only thing you want refreshed.
|
|
282
|
+
- `vinta-ai-workflows update` (CLI, see [Update](#update) below) — refreshes the **builder skills themselves** (the `vinta-*` set in `.<vendor>/skills/`) when running with `--copy`. Symlink installs already track package updates automatically.
|
|
283
|
+
|
|
284
|
+
### When to sync
|
|
285
|
+
|
|
286
|
+
After any of these, schedule a sync run:
|
|
287
|
+
|
|
288
|
+
- `npm update vinta-ai-workflows` or pulling a newer git+ssh ref.
|
|
289
|
+
- A teammate bumped the version pin in `package.json`.
|
|
290
|
+
- The package shipped a new foundation skill, stack, or schema field you want to opt into.
|
|
291
|
+
- The project's `.vinta-ai-workflows.yaml` is missing — the sync skill's first step is a "Bootstrap the config file" path that reverse-extracts state from existing artifacts and interview-fills gaps before continuing.
|
|
292
|
+
|
|
293
|
+
If `OLD_VERSION === NEW_VERSION`, the skill prints "already up to date" and exits without touching anything.
|
|
294
|
+
|
|
295
|
+
## Running the bootstrap skills
|
|
296
|
+
|
|
297
|
+
Skills are discovered automatically by name + description. Trigger one in plain language ("bootstrap ai-tools for this repo") or invoke explicitly via slash command. The `vinta-` prefix is part of the slash name:
|
|
298
|
+
|
|
299
|
+
| Tool | Invocation |
|
|
300
|
+
|---|---|
|
|
301
|
+
| Claude Code | `/vinta-bootstrap-ai-tools` (in chat) |
|
|
302
|
+
| OpenAI Codex | `/skills` then pick, or `$vinta-bootstrap-ai-tools` mention |
|
|
303
|
+
| Cursor | `/vinta-bootstrap-ai-tools` in Agent chat |
|
|
304
|
+
| VS Code + Copilot | `/vinta-bootstrap-ai-tools` in Copilot Chat |
|
|
305
|
+
|
|
306
|
+
Start with `vinta-bootstrap-ai-tools` — it orchestrates the others.
|
|
307
|
+
|
|
308
|
+
To bring a previously-bootstrapped project up to date with a newer package version, invoke `vinta-sync-ai-tools` — see [Staying in sync with upstream](#staying-in-sync-with-upstream) above. To refresh **only** the foundation-skill bodies under `ai-tools/skills/` (a narrower flow), invoke [`vinta-update-project-skills`](skills/vinta-update-project-skills/SKILL.md).
|
|
309
|
+
|
|
310
|
+
## Install variants
|
|
311
|
+
|
|
312
|
+
The package is private. Two install paths.
|
|
313
|
+
|
|
314
|
+
### A. From git+ssh (no registry needed)
|
|
315
|
+
|
|
316
|
+
Each developer's GitHub SSH key needs read access to the repo. Then:
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
# inside the target project
|
|
320
|
+
npm install -D git+ssh://git@github.com:vintasoftware/vinta-ai-workflows.git
|
|
321
|
+
pnpm add -D git+ssh://git@github.com:vintasoftware/vinta-ai-workflows.git
|
|
322
|
+
yarn add -D git+ssh://git@github.com:vintasoftware/vinta-ai-workflows.git
|
|
323
|
+
bun add -d git+ssh://git@github.com:vintasoftware/vinta-ai-workflows.git
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
Pin a tag/commit when you want determinism:
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
npm install -D git+ssh://git@github.com:vintasoftware/vinta-ai-workflows.git#0.1.0
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### B. From GitHub Packages (if/when published)
|
|
333
|
+
|
|
334
|
+
In the project root, add `.npmrc`:
|
|
335
|
+
|
|
336
|
+
```ini
|
|
337
|
+
@vinta:registry=https://npm.pkg.github.com
|
|
338
|
+
//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
Export `GITHUB_TOKEN` (a Personal Access Token with `read:packages` and the `repo` scope for private repos), then:
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
npm install -D vinta-ai-workflows
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### One-shot via npx (no install)
|
|
348
|
+
|
|
349
|
+
If you don't want the dep tracked in `package.json`:
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
npx -y -p git+ssh://git@github.com:vintasoftware/vinta-ai-workflows.git \
|
|
353
|
+
vinta-ai-workflows install --tool all
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Picking a tool
|
|
357
|
+
|
|
358
|
+
After install, the bin is available at `node_modules/.bin/vinta-ai-workflows`:
|
|
359
|
+
|
|
360
|
+
```bash
|
|
361
|
+
npx vinta-ai-workflows install --tool claude-code
|
|
362
|
+
# or:
|
|
363
|
+
pnpm vinta-ai-workflows install --tool claude-code
|
|
364
|
+
./node_modules/.bin/vinta-ai-workflows install --tool claude-code
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
`--tool` accepts: `claude-code`, `codex`, `cursor`, `copilot`, `agents`, `all`.
|
|
368
|
+
|
|
369
|
+
**Universal install (Codex + Cursor + Copilot)** — `.agents/skills/` is recognized by all three. A single `--tool agents` install covers them:
|
|
370
|
+
|
|
371
|
+
```bash
|
|
372
|
+
# One install, three tools.
|
|
373
|
+
npx vinta-ai-workflows install --tool agents
|
|
374
|
+
|
|
375
|
+
# Pair with Claude Code (which only reads .claude/skills/).
|
|
376
|
+
npx vinta-ai-workflows install --tool claude-code
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
### Copy instead of symlink
|
|
380
|
+
|
|
381
|
+
By default the CLI symlinks each skill into the vendor path back to the package's installed location under `node_modules/`. Use `--copy` if your build pipeline doesn't preserve symlinks, or if other contributors check out the project without this dep installed (e.g. you commit `.claude/`):
|
|
382
|
+
|
|
383
|
+
```bash
|
|
384
|
+
npx vinta-ai-workflows install --tool all --copy
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
Each copied skill gets a `.installed-by-vinta-ai-workflows` marker file used by `uninstall` and `update` to recognize what the script owns.
|
|
388
|
+
|
|
389
|
+
### Subset of skills
|
|
390
|
+
|
|
391
|
+
```bash
|
|
392
|
+
npx vinta-ai-workflows install --tool claude-code \
|
|
393
|
+
--skills vinta-bootstrap-ai-tools,vinta-write-agents-md
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
`npx vinta-ai-workflows list` prints all available skills.
|
|
397
|
+
|
|
398
|
+
### Dry run
|
|
399
|
+
|
|
400
|
+
```bash
|
|
401
|
+
npx vinta-ai-workflows install --tool all --dry-run
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
Prints planned actions, touches nothing.
|
|
405
|
+
|
|
406
|
+
## Update
|
|
407
|
+
|
|
408
|
+
> **Looking to bring a bootstrapped project up to date with the latest skills, templates, and best practices?** That's [Staying in sync with upstream](#staying-in-sync-with-upstream) — `vinta-sync-ai-tools`, invoked from the AI tool. The CLI `update` command described here is narrower: it only refreshes the builder skills (the `vinta-*` set under `.<vendor>/skills/`) and is mostly only relevant for `--copy` installs.
|
|
409
|
+
|
|
410
|
+
Refresh installed builder skills against the latest package version:
|
|
411
|
+
|
|
412
|
+
```bash
|
|
413
|
+
# 1. Pull the new package version.
|
|
414
|
+
npm update vinta-ai-workflows
|
|
415
|
+
pnpm update vinta-ai-workflows
|
|
416
|
+
# Or for git+ssh, just re-install with the new ref:
|
|
417
|
+
npm install -D git+ssh://git@github.com:vintasoftware/vinta-ai-workflows.git#v0.2.0
|
|
418
|
+
|
|
419
|
+
# 2. Re-link / re-copy builder skills (only needed for --copy installs).
|
|
420
|
+
npx vinta-ai-workflows update --tool all
|
|
421
|
+
|
|
422
|
+
# 3. From your AI tool, sync the project against the new package version.
|
|
423
|
+
# Claude Code → /vinta-sync-ai-tools
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
Step 2's `update` command is sugar for `uninstall` followed by `install` with the same flags. Symlink installs (the default) pick up package updates automatically without step 2.
|
|
427
|
+
|
|
428
|
+
Step 3 is the important one: it re-renders foundation skill templates from the project's `.vinta-ai-workflows.yaml`, offers any new opt-in surface area, migrates the config schema if needed, and bumps the project's recorded version. See [Staying in sync with upstream](#staying-in-sync-with-upstream) for the full flow.
|
|
429
|
+
|
|
430
|
+
## Uninstall
|
|
431
|
+
|
|
432
|
+
After the bootstrap is committed, remove the skills:
|
|
433
|
+
|
|
434
|
+
```bash
|
|
435
|
+
npx vinta-ai-workflows uninstall --tool all
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
Then drop the package itself:
|
|
439
|
+
|
|
440
|
+
```bash
|
|
441
|
+
npm uninstall vinta-ai-workflows
|
|
442
|
+
pnpm remove vinta-ai-workflows
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### What `uninstall` removes
|
|
446
|
+
|
|
447
|
+
The uninstaller is conservative on purpose:
|
|
448
|
+
|
|
449
|
+
- **Symlinks** are removed only if their target points back into the package's `skills/` directory (or the link is dangling).
|
|
450
|
+
- **Copied directories** are removed only if they contain the `.installed-by-vinta-ai-workflows` marker file.
|
|
451
|
+
- **Anything else** (hand-authored skills, third-party skills, files lacking the marker) is left in place with a warning.
|
|
452
|
+
|
|
453
|
+
Empty `.<vendor>/skills/` directories are removed after the last managed entry leaves; the parent `.claude/`, `.agents/`, etc. are left alone since they likely hold other content.
|
|
454
|
+
|
|
455
|
+
### Manual uninstall (no Node available)
|
|
456
|
+
|
|
457
|
+
```bash
|
|
458
|
+
SKILLS="vinta-analyze-codebase vinta-bootstrap-ai-tools vinta-derive-skills \
|
|
459
|
+
vinta-derive-subagents vinta-install-ai-tools-setup \
|
|
460
|
+
vinta-update-project-skills vinta-write-agents-md"
|
|
461
|
+
|
|
462
|
+
for vendor in .claude/skills .agents/skills .cursor/skills .github/skills; do
|
|
463
|
+
for skill in $SKILLS; do
|
|
464
|
+
rm -rf "$vendor/$skill"
|
|
465
|
+
done
|
|
466
|
+
rmdir "$vendor" 2>/dev/null
|
|
467
|
+
done
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
## Per-tool paths
|
|
471
|
+
|
|
472
|
+
Verified against official docs as of 2026-05.
|
|
473
|
+
|
|
474
|
+
| Tool | Project path | Source |
|
|
475
|
+
|---|---|---|
|
|
476
|
+
| Claude Code | `.claude/skills/` | native |
|
|
477
|
+
| OpenAI Codex | `.agents/skills/` | [docs](https://developers.openai.com/codex/skills) |
|
|
478
|
+
| Cursor | `.cursor/skills/` (also `.agents/skills/`) | [docs](https://cursor.com/docs/skills) |
|
|
479
|
+
| VS Code + Copilot | `.github/skills/` (also `.claude/skills/`, `.agents/skills/`) | [docs](https://code.visualstudio.com/docs/copilot/customization/agent-skills) |
|
|
480
|
+
|
|
481
|
+
Codex walks `.agents/skills/` from cwd up to the repo root, so an install at the project root covers nested working directories too.
|
|
482
|
+
|
|
483
|
+
## CLI reference
|
|
484
|
+
|
|
485
|
+
```
|
|
486
|
+
vinta-ai-workflows <command> [options]
|
|
487
|
+
|
|
488
|
+
Commands:
|
|
489
|
+
install Place skills under <target>/.<vendor>/skills/
|
|
490
|
+
update Re-install (uninstall + install) so latest source content lands
|
|
491
|
+
uninstall Remove skills (only artifacts created by this CLI)
|
|
492
|
+
list List available skills
|
|
493
|
+
|
|
494
|
+
Options:
|
|
495
|
+
--tool <name> claude-code | codex | cursor | copilot | agents | all
|
|
496
|
+
Aliases: claude, openai-codex, vscode, vscode-copilot,
|
|
497
|
+
github-copilot, universal
|
|
498
|
+
--target <dir> Project root (default: cwd)
|
|
499
|
+
--skills <a,b,c> Subset of skills (default: all)
|
|
500
|
+
--copy Copy instead of symlink
|
|
501
|
+
--dry-run, -n Plan only
|
|
502
|
+
--help, -h Help
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
Project scope only — there is no user-scope mode. The `vinta-` skills are intended to bootstrap a single project at a time and then come back out.
|
|
506
|
+
|
|
507
|
+
## Repo internals
|
|
508
|
+
|
|
509
|
+
> "Skills" here = the [Agent Skills](https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills) format: a folder containing a `SKILL.md` (with YAML frontmatter) plus referenced resources/scripts. Recognized natively by Claude Code, Codex, Cursor, and VS Code Copilot.
|
|
510
|
+
|
|
511
|
+
```
|
|
512
|
+
vinta-ai-workflows/
|
|
513
|
+
├── package.json # vinta-ai-workflows — exposes vinta-ai-workflows bin
|
|
514
|
+
├── vinta-ai-workflows.mjs # CLI: install / update / uninstall / list
|
|
515
|
+
├── README.md
|
|
516
|
+
└── skills/
|
|
517
|
+
├── vinta-analyze-codebase/
|
|
518
|
+
├── vinta-bootstrap-ai-tools/ # orchestrator — calls the others
|
|
519
|
+
├── vinta-derive-skills/
|
|
520
|
+
├── vinta-derive-subagents/
|
|
521
|
+
├── vinta-install-ai-tools-setup/
|
|
522
|
+
├── vinta-update-project-skills/
|
|
523
|
+
└── vinta-write-agents-md/
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
`vinta-bootstrap-ai-tools` is the entry point — walks a fresh repo, runs the others in order. The rest can also be invoked individually to refresh a single artifact.
|
|
527
|
+
|
|
528
|
+
### Why the `vinta-` prefix?
|
|
529
|
+
|
|
530
|
+
Once installed, these skills sit alongside the user's own project skills in the same `.<vendor>/skills/` directory. The prefix makes ownership obvious in slash menus and on disk: anything under `vinta-*` is managed by this package and gets removed by `uninstall`; anything else belongs to the project.
|
|
531
|
+
|
|
532
|
+
### Why one-shot
|
|
533
|
+
|
|
534
|
+
The `vinta-` skills **bootstrap** a project's AI tooling. Once the project has its own `ai-tools/` layout, AGENTS.md, sub-agents, and per-vendor wiring, they have nothing left to do. Leaving them installed pollutes the slash-command menu and risks a future re-run overwriting hand-tuned output.
|
|
535
|
+
|
|
536
|
+
→ Install, run once via `/vinta-bootstrap-ai-tools` (or whatever invocation your tool uses), commit the generated `ai-tools/` layout, then `uninstall`.
|
|
537
|
+
|
|
538
|
+
When this package gains new versions later, [`vinta-sync-ai-tools`](#staying-in-sync-with-upstream) walks the changelog, proposes per-change updates against the project's opt-in surface (recorded in `.vinta-ai-workflows.yaml`), and only applies what the user explicitly accepts.
|
|
539
|
+
|
|
540
|
+
### Updating skills in this repo
|
|
541
|
+
|
|
542
|
+
If you modify a `vinta-*` skill source under `skills/`:
|
|
543
|
+
|
|
544
|
+
- **Symlink installs** (default): consumers get updates as soon as their `node_modules/vinta-ai-workflows/` refreshes (next `npm install` / `git+ssh` re-pull).
|
|
545
|
+
- **Copy installs** (`--copy`): consumers must re-run `vinta-ai-workflows update` with the same flags. The CLI removes the previous copy and writes fresh content + marker.
|
|
546
|
+
|
|
547
|
+
To bring a bootstrapped project up to date with newer builder-skill source, run [`vinta-sync-ai-tools`](#staying-in-sync-with-upstream) from the AI tool — it re-renders templates, offers new opt-ins, migrates the config schema, and delegates foundation-skill body diffs to `vinta-update-project-skills`.
|
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vinta-ai-workflows",
|
|
3
|
+
"version": "0.1.7",
|
|
4
|
+
"description": "Bootstrap AI tooling (AGENTS.md, skills, sub-agents) across Claude Code, Codex, Cursor, and VS Code + GitHub Copilot.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"vinta-ai-workflows": "./vinta-ai-workflows.mjs"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"vinta-ai-workflows.mjs",
|
|
11
|
+
"skills",
|
|
12
|
+
"schemas",
|
|
13
|
+
"README.md",
|
|
14
|
+
"CHANGELOG.md"
|
|
15
|
+
],
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": ">=18"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+ssh://git@github.com:vintasoftware/vinta-ai-workflows.git"
|
|
22
|
+
},
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public"
|
|
25
|
+
},
|
|
26
|
+
"license": "MIT"
|
|
27
|
+
}
|