@vegastack/skills 0.6.0 → 0.8.0

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.
Files changed (35) hide show
  1. package/README.md +4 -0
  2. package/package.json +1 -1
  3. package/skill/dev-implement/SKILL.md +63 -0
  4. package/skill/dev-implement/agents/openai.yaml +4 -0
  5. package/skill/dev-implement/refresh/REFRESH.md +3 -0
  6. package/skill/dev-implement/refresh/sources.json +6 -0
  7. package/skill/dev-intake/SKILL.md +62 -0
  8. package/skill/dev-intake/agents/openai.yaml +4 -0
  9. package/skill/dev-intake/references/brief-template.md +56 -0
  10. package/skill/dev-intake/refresh/REFRESH.md +3 -0
  11. package/skill/dev-intake/refresh/sources.json +6 -0
  12. package/skill/dev-setup/SKILL.md +69 -0
  13. package/skill/dev-setup/agents/openai.yaml +4 -0
  14. package/skill/dev-setup/assets/agents-section.md.template +11 -0
  15. package/skill/dev-setup/assets/dev-profile.md.template +49 -0
  16. package/skill/dev-setup/references/harness-facts.md +22 -0
  17. package/skill/dev-setup/refresh/REFRESH.md +13 -0
  18. package/skill/dev-setup/refresh/sources.json +152 -0
  19. package/skill/dev-ship/SKILL.md +37 -0
  20. package/skill/dev-ship/agents/openai.yaml +4 -0
  21. package/skill/dev-ship/refresh/REFRESH.md +3 -0
  22. package/skill/dev-ship/refresh/sources.json +6 -0
  23. package/skill/skill-maintainer/SKILL.md +9 -10
  24. package/skill/skill-maintainer/references/release-ops.md +1 -1
  25. package/skill/skill-maintainer/refresh/REFRESH.md +1 -1
  26. package/skill/skillify/SKILL.md +38 -48
  27. package/skill/skillify/assets/templates/REFRESH.md.template +5 -10
  28. package/skill/skillify/assets/templates/SKILL.md.template +1 -0
  29. package/skill/skillify/assets/templates/skill.test.ts.template +11 -24
  30. package/skill/skillify/assets/templates/sources.json.template +1 -1
  31. package/skill/skillify/assets/templates/trigger-queries.json.template +1 -0
  32. package/skill/skillify/references/authoring.md +20 -14
  33. package/skill/skillify/refresh/REFRESH.md +1 -1
  34. package/skill/skillify/scripts/scaffold-skill.mjs +75 -17
  35. package/skill-integrity.json +48 -11
package/README.md CHANGED
@@ -14,6 +14,10 @@ npx @vegastack/skills add architect
14
14
  | `architect` | Architecture advisor: the locked stack and lean-first principles as evidence-distilled decision tables, dated source-verified platform facts, a per-project `.vegastack/arch.md` profile with repo-wins drift detection, and an advisory-only review discipline |
15
15
  | `skill-maintainer` | Encodes the Agent Skills standards (Claude Code, Codex, Hermes, agentskills.io) for creating, updating, and releasing skills in a skills repo |
16
16
  | `skillify` | Turns a feature or workflow into a complete skill conforming to the VegaStack skills contract, or audits an existing one |
17
+ | `dev-setup` | Bootstraps a project for the issue-driven dev workflow: profile, AGENTS.md section, labels, decision register |
18
+ | `dev-intake` | Turns ideas, brainstorms, and SOWs into agent-ready GitHub issues with recorded user approval |
19
+ | `dev-implement` | Implements an approved issue end to end, dark: preflight, claim, build, test, review, evidence in the issue |
20
+ | `dev-ship` | Opens the PR and merges, each only on the user's explicit word |
17
21
 
18
22
  ## Commands
19
23
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vegastack/skills",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "Installer and verifier for VegaStack Agent Skills (Claude Code, Codex, and Hermes)",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: dev-implement
3
+ description: Implement an approved GitHub issue end to end without further user input. Use when given an issue to build - "do issue 12", "implement" plus an issue URL or number, "pick up the next ready issue", "go dark on" an issue - when returning to apply corrections the user left on a for-operator issue, or when the user directly asks in chat for a quick fix or small change. Runs preflight, claims the issue, builds on a task branch, tests, gets independent review, and posts one evidence comment in the issue. Not for writing or approving issues (dev-intake), not for creating PRs or merging (dev-ship).
4
+ ---
5
+
6
+ # dev-implement
7
+
8
+ One issue, one session, end to end: preflight → claim → build dark → verify → review → evidence in the issue → stop. The user reads the result in the issue on their own time; nothing here creates a PR or merges — those are `dev-ship`, on the user's word.
9
+
10
+ Nearest neighbor: `dev-intake` writes the brief this skill executes; if the issue turns out to need decisions, that's intake work — hand it back via `needs-operator`, don't guess. `.vegastack/dev.md` missing → run `dev-setup` first. Read dev.md before anything; its knobs (review, ui-evidence, tests, branch, stop-list) govern this whole skill.
11
+
12
+ ## Direct requests
13
+
14
+ The gates exist to stop agent-invented authority, never to slow the user down. When the user directly asks in chat for a change ("fix this typo", "bump that timeout"), their words are the approval — do it, verify it, and report; no issue required. Offer to record an issue when the change is material enough that its brief or evidence will matter later. Everything below is the path for issue-driven work.
15
+
16
+ ## Preflight — all must hold, or stop and say which failed
17
+
18
+ - `gh auth status` works and the issue's repo matches dev.md.
19
+ - The issue is open, labeled `ready`, and carries the recorded approval comment (`Approved by … : "…"`). A label without the comment is not approval.
20
+ - No open blockers (issue dependencies) and no other assignee — an assigned or `working` issue belongs to someone else. A claim from a dead session is released only by the user: take over a `working` issue only when they explicitly hand it to you.
21
+ - Read the complete brief, plus parent issue and milestone for context. If the brief leaves a material decision open — including an unresolved Assumptions entry — do not start: label `needs-operator`, comment the smallest question that unblocks it, stop.
22
+ - Re-verify the brief against reality before coding: its cited touch points against the current code (things drift between approval and execution), and volatile dependency claims when stale or version-sensitive. Reality contradicting the brief is a stop — label `needs-operator` with the discrepancy; an approved brief is never a license to improvise past what's actually there.
23
+
24
+ ## Claim and branch
25
+
26
+ Assign yourself, swap `ready` → `working`. Branch from the default branch: `<type>/<issue-number>-<short-slug>` (type from dev.md: feat, fix, docs, chore, refactor).
27
+
28
+ ## Build — dark
29
+
30
+ No progress updates, no questions. A spike the brief flagged runs first — its result opens the evidence comment and shapes the rest of the build. Decide routine things yourself: file layout, helpers, fixtures, and root-cause fixes inside the issue's change areas. The brief's out-of-scope section and the dev.md stop-list bound you; hitting a stop condition (scope change, new dependency, spending, destructive/production action, unresolvable blocker) ends dark mode — post one `needs-operator` comment stating the smallest decision needed with your recommendation, and stop.
31
+
32
+ Honesty over green: a failing test gets fixed at the root or reported as failing. Weakening a test, an assertion, or acceptance to pass is a cover-up, and cover-ups surface at review with interest.
33
+
34
+ ## Verify
35
+
36
+ - Run the tests dev.md requires (`tests: required` → every changed behavior has a test that runs and passes; `logic-only` → content/config tweaks may skip). Record commands and results for the evidence comment.
37
+ - A `risky` issue gets focused security, failure, and recovery checks on top of the required tests.
38
+ - When dev.md has a `## Verify` runbook, follow it — run the app and smoke-check the flows it names; that live result belongs in the evidence comment alongside the test output.
39
+ - UI changed and `ui-evidence: playwright` → capture screenshots of the key states and flows, push them to the evidence repo (dev.md `evidence-repo`) under `<repo>/<issue-number>/`, and link them. Links, not embeds — private-repo images don't render inline in issues. Evidence repo missing or unreachable → name the local file paths in the evidence comment and say so; the hand-back never blocks on it.
40
+
41
+ ## Independent review — per the dev.md knob
42
+
43
+ - `subagent` (default): spawn a fresh reviewer subagent that gets the diff, the brief, and dev.md — and no memory of writing the code. It checks: does the change do what the brief says, does anything break, are the tests real? In a harness without subagents, do a separate fresh-eyes review pass against the brief and label it a self-review in the evidence comment; prefer cross-agent there for `risky` work.
44
+ - `cross-agent` (or `cross-agent-risky` on a `risky` issue): push the branch, add to the evidence comment "awaiting cross-agent review", keep `working`, and tell the user which agent to point at the issue. The reviewing session posts findings on the issue; you apply them.
45
+ - Fix real findings and rerun affected checks. Disagree with a finding → say why in the evidence comment rather than silently skipping it.
46
+
47
+ ## The evidence comment — exactly one, edited in place
48
+
49
+ ```
50
+ ## Result
51
+ **Done:** what changed, in behavior terms
52
+ **Tests:** <command> → <result summary>
53
+ **Review:** <mode> — <findings fixed / none / disputed with reason>
54
+ **UI evidence:** <links> (when applicable)
55
+ **Not done / limits:** the honest list
56
+ Branch: <name> @ <short-sha>
57
+ ```
58
+
59
+ Post it, swap `working` → `for-operator`, unassign nothing, stop. Later corrections update this same comment — a stack of stale result comments hides the current truth.
60
+
61
+ ## Corrections loop
62
+
63
+ The user's comments on a `for-operator` issue are the new frontier: apply them, re-verify what they touch, update the evidence comment, back to `for-operator`. Their corrections never need re-approval ceremony unless they change scope — then it's `needs-operator` and dev-intake's recording rule.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "dev-implement"
3
+ short_description: "Implement an approved issue end to end, dark"
4
+ default_prompt: "Use $dev-implement to build this issue end to end."
@@ -0,0 +1,3 @@
1
+ # Refresh contract — dev-implement
2
+
3
+ Evergreen: this skill asserts no version pins, vendor mechanism names beyond long-stable `gh` subcommands, numeric vendor limits, or dated facts — its content is workflow discipline (preflight, claiming, dark-mode bounds, review modes, the evidence-comment contract), all versionless. Harness mechanics are tracked by `dev-setup`'s registry. Revisit if a future edit introduces a volatile fact.
@@ -0,0 +1,6 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "retrievalBaseline": "2026-08-27",
4
+ "note": "Evergreen waiver recorded in REFRESH.md; sources deliberately empty.",
5
+ "sources": []
6
+ }
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: dev-intake
3
+ description: Turn ideas, brainstorms, feature requests, or SOW documents into GitHub issues an agent can implement without further questions. Use when asked to "turn this into issues", "create tasks from this SOW", "write up an issue for" a feature or bug, "plan this as issues", "slice this epic", or when the user gives approval on a drafted issue and it needs recording. Produces complete inline build briefs with labels, milestones, and blocker links. Not for implementing issues (dev-implement), creating PRs or merging (dev-ship), or project bootstrap (dev-setup).
4
+ ---
5
+
6
+ # dev-intake
7
+
8
+ Requirements come in as the user's brainstorm, feature thought, or SOW; issues go out complete enough that a fresh agent needs nothing but the URL. Every question gets asked **here** — once implementation starts, dark mode means no questions, so an under-specified issue becomes either an interruption or a guess. This skill exists to make both impossible.
9
+
10
+ Nearest neighbor: `dev-implement` consumes what this produces — intake writes and gets approval, implement builds. If `.vegastack/dev.md` is missing, run `dev-setup` first, then continue here.
11
+
12
+ ## Ground before you ask
13
+
14
+ Finding facts is your job, never the user's — and a brief built on unverified facts is a confident mistake waiting for dark mode. The source can be one sentence in chat; thinner material just means the grounding and interview carry more weight. Before the first question:
15
+
16
+ - **Read the touched code.** Open the actual paths the feature would change: current behavior, existing patterns to reuse, where the new work plugs in. The brief cites these real paths later — a brief naming no files is a sign this step was skipped.
17
+ - **Verify dependencies.** Any library, service, or API capability the approach leans on gets checked against current official docs (docs tools or web search), noted with the date. Consult `architect`'s pinned facts for stack questions before re-researching; re-verify a pinned fact older than 60 days; skip lookups for long-stable basics — judgment, not ritual.
18
+ - **Cross-check the request** against product docs and current behavior. A contradiction is pushback, never a silent resolution: "you asked for X; the code/docs currently do Y — which wins?" Push back on cost the same way: when a simpler version covers most of the need, name it.
19
+ - **Triage every unknown** into exactly three bins: *findable* → find it now, yourself; *only-the-user-knows* → ask, with a recommendation; *only-running-code-can-tell* → flag it as a spike that becomes the issue's first step. Guessing is not a bin.
20
+
21
+ ## The interview
22
+
23
+ Ask in rounds using your harness's question tool (AskUserQuestion in Claude Code, `request_user_input` in Codex where the mode allows; no tool available → draft with recommended answers marked `TODO confirm` and say so). Each round covers the current frontier: every open decision that does not depend on another answer.
24
+
25
+ - Number the questions. Give each a **recommended answer with a one-line reason**, so the user can reply "all recommended" or override by number.
26
+ - Stop asking when the bar is met: *a fresh agent could implement each issue without asking anything.* Test every brief against that sentence before calling it done.
27
+ - Do not re-ask what the material or an earlier round already settled.
28
+
29
+ ## The angles, in order
30
+
31
+ Work the design the way a joint product-and-tech review would; each round's answers feed the next:
32
+
33
+ 1. **Product** — who this is for, the observable outcome, what's in and out of scope now, how it splits into slices or phases, priority.
34
+ 2. **Behavior** — primary and alternate flows, rules, permissions, validations, edge and failure cases; for UI, the states, components, and copy.
35
+ 3. **Technical** — only the choices that are genuinely the user's: approach trade-offs, data and interface implications, integrations, migration; recommend one and say why. Routine implementation stays the implementer's.
36
+ 4. **Quality and risk** — what proves it works (test cases, acceptance), what earns the `risky` label, what should stop a dark run beyond the standing stop-list.
37
+
38
+ These are the brief template's sections in interview form — a question exists only where reading the material, the codebase, and sensible defaults cannot fill a section.
39
+
40
+ ## Slicing
41
+
42
+ - One issue = one outcome that fits one agent session, sliced vertically (a thin working path through the stack beats a layer at a time).
43
+ - Blockers use native issue dependencies (blocked-by); phases use milestones; hierarchy uses parent/sub-issues. Labels never duplicate these.
44
+ - A large feature gets a parent issue holding the map and child issues holding the work. **Only child issues ever get `ready`** — a parent brief is context, not an executable task, and an agent must never pick it up whole.
45
+ - Deliberately deferred work ("someday, not now") lives in the parent's out-of-scope section, not as its own issue — icebox issues clutter the tracker. Create a tracking issue for it only when the user asks.
46
+
47
+ ## The brief
48
+
49
+ Every issue body follows [brief-template](references/brief-template.md): Outcome · Out of scope · Rules and edge cases · UI states (when there is UI) · Approach and touch points · Tests and acceptance · Risks and stop conditions · Assumptions. Write the sections that apply and delete the ones that don't — an empty "N/A" section is noise, not diligence. Details live inline in the issue; links to docs are supporting material, never a substitute for the brief. Evidence over confidence: touch points name real paths, dependency claims carry their check date, and anything material the grounding could not verify goes in **Assumptions — confirm or correct**, never asserted as fact.
50
+
51
+ ## Labels and approval
52
+
53
+ - A new issue starts at `needs-operator`. Add `risky` when it touches security, money, user data, or production.
54
+ - Approval is only the user's explicit words — "approved", "go ahead", clearly tied to this issue, in chat or on the issue. Labels, silence, or the passage of time never create approval.
55
+ - Record it once: comment `Approved by <user> on <date>: "<their words>"`, then swap `needs-operator` → `ready`. That comment is what dev-implement's preflight looks for.
56
+ - An issue with an unconfirmed entry in its Assumptions section cannot go `ready` — the recorded approval covers the ledger the user saw, so resolve every entry (confirmed, corrected, or moved to a spike) first.
57
+ - An issue that settles a material cross-cutting decision records it as one comment starting `Decision:` — dev-ship appends that line to the project's decision register at merge.
58
+ - The user edits or corrects a draft → apply, and summarize what changed since they last read it.
59
+
60
+ ## After approval
61
+
62
+ An approved issue that later needs a material change flips back to `needs-operator` with one comment naming what changed; the new approval is recorded the same way. Small wording fixes that change no behavior don't reopen anything.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "dev-intake"
3
+ short_description: "Turn ideas or SOWs into agent-ready GitHub issues"
4
+ default_prompt: "Use $dev-intake to turn this into GitHub issues."
@@ -0,0 +1,56 @@
1
+ # Issue brief template
2
+
3
+ The issue body a `ready` issue must have. Write the sections that apply, delete the rest. The test for every section: would a fresh agent have to guess or ask without it?
4
+
5
+ ```markdown
6
+ ## Outcome
7
+
8
+ What exists when this is done, in observable terms — what the user can do, what the
9
+ system produces. One paragraph.
10
+
11
+ ## Out of scope
12
+
13
+ The nearby things this issue deliberately does NOT do. This is what stops scope creep
14
+ in dark mode — name the tempting adjacent work.
15
+
16
+ ## Rules and edge cases
17
+
18
+ The behavior that isn't obvious: validations, permissions, limits, empty/error/concurrent
19
+ cases, what happens on failure. Bullet list, one behavior per line.
20
+
21
+ ## UI states <!-- only when there is UI -->
22
+
23
+ Loading, empty, error, success, disabled. Which design-system components. Copy for
24
+ user-facing text. Responsive and keyboard behavior when it matters.
25
+
26
+ ## Approach and touch points
27
+
28
+ The chosen technical approach in a few lines: which parts of the codebase change,
29
+ new/changed interfaces or schemas, data migrations. Routine choices (file names,
30
+ helpers, fixtures) stay the implementer's — don't specify them.
31
+
32
+ ## Tests and acceptance
33
+
34
+ What proves it works: the cases tests must cover (success, boundary, failure,
35
+ authorization where relevant) and the commands to run. Acceptance = the Outcome plus
36
+ these passing.
37
+
38
+ ## Risks and stop conditions
39
+
40
+ What could go wrong and what should make the agent stop and ask instead of pushing
41
+ through — beyond the standing stop-list in .vegastack/dev.md.
42
+
43
+ ## Assumptions — confirm or correct
44
+
45
+ Anything material the grounding investigation could not verify, one per line, each
46
+ awaiting the user's confirm/correct. The issue cannot go `ready` while one is
47
+ unconfirmed. Verified facts never appear here — they live in their section with
48
+ their evidence. Delete the section once every entry is resolved.
49
+ ```
50
+
51
+ ## Writing rules
52
+
53
+ - Inline over linked: the material details live in the issue itself. A link supports; it never substitutes.
54
+ - Concrete over abstract: "rejects amounts over 10,000 with error E402" beats "validates input".
55
+ - Evidence over confidence: touch points name real file paths; a dependency capability claim carries the doc check and its date; what couldn't be verified goes to Assumptions, never stated as fact.
56
+ - The brief binds the agent, so ambiguity is a bug in the brief — if two readings exist, the interview wasn't done.
@@ -0,0 +1,3 @@
1
+ # Refresh contract — dev-intake
2
+
3
+ Evergreen: this skill asserts no version pins, vendor mechanism names, numeric vendor limits, or dated facts — its content is interview discipline, slicing rules, the brief template, and the approval-recording rule, all versionless. The harness question-tool mechanics it leans on are tracked by `dev-setup`'s registry (see `skills/dev-setup/refresh/`). Revisit if a future edit introduces a volatile fact.
@@ -0,0 +1,6 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "retrievalBaseline": "2026-08-27",
4
+ "note": "Evergreen waiver recorded in REFRESH.md; sources deliberately empty.",
5
+ "sources": []
6
+ }
@@ -0,0 +1,69 @@
1
+ ---
2
+ name: dev-setup
3
+ description: Bootstrap a project for issue-driven agent development. Use when asked to "set up the dev workflow", "bootstrap this project for agents", "install the dev workflow here", or invoked as dev-setup; also run automatically when dev-intake, dev-implement, or dev-ship find no .vegastack/dev.md in the project. Creates the project profile, the AGENTS.md dev section plus CLAUDE.md import, the five workflow labels on the GitHub repo, and the decision register. Not for architecture profiles or advice (that is architect and .vegastack/arch.md), not for authoring skills, not for repos without git.
4
+ ---
5
+
6
+ # dev-setup
7
+
8
+ Re-runnable bootstrap that gives a project everything the dev workflow needs: a profile file holding the knobs, a thin AGENTS.md section that both Claude Code and Codex read, the GitHub labels, and the decision register. The other dev skills call this automatically when `.vegastack/dev.md` is missing, then continue with their original request.
9
+
10
+ Nearest neighbor: `architect` owns `.vegastack/arch.md` (architecture facts and advice); dev-setup owns `.vegastack/dev.md` (workflow facts and knobs). When arch.md exists, point dev.md at it for stack facts instead of duplicating them.
11
+
12
+ ## Step 1 — Detect before asking
13
+
14
+ Facts are your job; decisions are the user's. Gather these silently and present findings as "here's what I found — correct me if wrong", never as open questions:
15
+
16
+ | What | How |
17
+ |---|---|
18
+ | repo, default branch | `git remote get-url origin` · `gh repo view --json nameWithOwner,defaultBranchRef` |
19
+ | gh authenticated | `gh auth status` |
20
+ | stack and commands | package.json scripts, lockfiles, framework configs |
21
+ | web app (UI evidence relevant) | framework dependencies (next, react, vue, …) |
22
+ | release/deploy machinery | changesets config, publish or deploy workflows, wrangler/Docker/compose files, registry configs — these draft the `## Ship` runbook |
23
+ | environments and run commands | CI/deploy configs, env examples (names only), dev/start scripts — these draft `## Environments` and `## Verify` |
24
+ | existing files | AGENTS.md, CLAUDE.md, `.vegastack/dev.md`, `.vegastack/arch.md`, docs/decisions.md |
25
+ | existing labels | `gh label list` |
26
+
27
+ Not a git repo, or no origin remote: stop and say exactly what is missing. A half-installed workflow is worse than none.
28
+
29
+ ## Step 2 — The interview
30
+
31
+ Ask with your harness's question tool — AskUserQuestion in Claude Code, `request_user_input` in Codex where the mode allows it (availability details: [harness-facts](references/harness-facts.md)). When no question tool is available (headless run, gated mode), write the defaults, mark every unconfirmed knob `# TODO confirm`, and say so in your reply — a wrong invented preference costs more than a TODO.
32
+
33
+ **Round A — confirm the detected facts** in one compact summary (repo, stack, commands, web app or not). Ask only about what detection could not fill.
34
+
35
+ **Round B — the four workflow knobs**, recommended default first:
36
+
37
+ 1. Review of finished work: **subagent** · cross-agent (Codex↔Claude) · cross-agent only on `risky` issues
38
+ 2. Proof for UI work: **playwright screenshots** · none
39
+ 3. Gates: **3** (approve → PR → merge as separate user words) · 2 (approve → one "ship it" covers PR and merge)
40
+ 4. Tests: **required for every change** · required for logic changes only
41
+
42
+ **Round C — only when the situation exists:**
43
+
44
+ - Release/deploy machinery detected → show the drafted `## Ship` runbook (each step `auto:` or `ask:`) and the `release:` knob (per-merge or on-request) for confirmation; no machinery → "Ship: merge only" and move on
45
+ - Environments or run commands detected → confirm the drafted `## Environments` and `## Verify` bullets
46
+ - AGENTS.md already has content → append the marked section (default) or show a merge proposal first
47
+ - CLAUDE.md already has content → add the `@AGENTS.md` import as its first line (default) or move its content into AGENTS.md and leave only the import
48
+ - Evidence repo for UI screenshots → default `<owner>/dev-review-assets`; offer to create it (`gh repo create --private`) if missing
49
+ - Different label names or a different decision-register path, if the user brings it up
50
+
51
+ Everything else — merge style, branch naming, the stop-and-ask list — takes its documented default straight into dev.md. The profile is plain text the user can edit anytime; the interview is a convenience, not the source of truth.
52
+
53
+ ## Step 3 — Write
54
+
55
+ | Target | Action |
56
+ |---|---|
57
+ | `.vegastack/dev.md` | render [dev-profile template](assets/dev-profile.md.template) with the answers — it is the project's self-maintained handbook (short directional bullets; Ship/Verify/Environments/Design sections drafted from detection, placeholders deleted) |
58
+ | `AGENTS.md` | create it, or insert/replace only the block between `<!-- vsk-dev:start -->` and `<!-- vsk-dev:end -->` using the [agents-section template](assets/agents-section.md.template); content outside the markers is the user's and stays untouched |
59
+ | `CLAUDE.md` | ensure its first line is `@AGENTS.md` — Claude Code does not read AGENTS.md natively and needs this import ([harness-facts](references/harness-facts.md)); create the file when absent |
60
+ | labels | `gh label create <name> --color <hex> --description "<text>"`, skipping ones that exist: `needs-operator` FBCA04 (waiting on the user) · `ready` 0E8A16 (approved, agent may start) · `working` 1D76DB (claimed by an agent) · `for-operator` 5319E7 (result awaiting user review) · `risky` B60205 (security, money, data, or production) |
61
+ | decision register | create the file the `decisions:` knob names (default `docs/decisions.md`) with a two-line header and one example entry, when missing; a project with an existing register keeps it and the knob points there |
62
+
63
+ ## Step 4 — Report
64
+
65
+ One summary: what was created, what was skipped and why, what remains TODO. When `gh` was unauthenticated, print the exact `gh auth login` and `gh label create` commands the user can run later, and name the gap plainly.
66
+
67
+ ## Re-runs
68
+
69
+ Re-running is safe and is how knobs get revisited: show what differs per target and change only what the user confirms. The marked block is the only part of AGENTS.md this skill owns. Hand edits inside dev.md win — read them and keep them; the templates are for creation, not for resetting.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "dev-setup"
3
+ short_description: "Bootstrap a repo for the issue-driven dev workflow"
4
+ default_prompt: "Use $dev-setup to bootstrap this project's dev workflow."
@@ -0,0 +1,11 @@
1
+ <!-- vsk-dev:start -->
2
+ ## Dev workflow
3
+
4
+ Read `.vegastack/dev.md` for this project's stack, commands, and workflow knobs.
5
+
6
+ Work flows through GitHub issues. An issue labeled `ready` carries the user's recorded approval and a complete brief — implement it end to end per the `dev-implement` skill, post the evidence in the issue, and hand it back with `for-operator`. Start only on `ready` issues. These five labels are the whole workflow vocabulary — use them and no others: `needs-operator` (waiting on the user) → `ready` (approved) → `working` (claimed by an agent) → `for-operator` (result awaiting user review); `risky` flags security, money, data, or production work.
7
+
8
+ The user holds the gates: they approve the issue, say the word for a PR, and say a separate word to merge (see `gates` in dev.md); after merge, the `## Ship` runbook in dev.md says what happens next and which steps need their word. Material decisions get one dated line in the decision register dev.md names (`decisions:` knob).
9
+
10
+ dev.md is the project's self-maintained handbook: when a gotcha, surprise, or repeated instruction surfaces in any run, propose one line for the right dev.md section that would have prevented it — fold into existing lines, never append a log — and add it on the user's yes.
11
+ <!-- vsk-dev:end -->
@@ -0,0 +1,49 @@
1
+ # Dev profile — {{owner/repo}}
2
+
3
+ This file is the project's handbook: short directional bullets, not prose. Skills read the section they need. When reality disagrees with a line, fix the line; when a gotcha or repeated instruction surfaces, fold ONE line into the right section — never append a log.
4
+
5
+ repo: {{owner/repo}} · default branch {{branch}}
6
+ stack: {{one line, or "see .vegastack/arch.md"}}
7
+ commands: test `{{test}}` · build `{{build}}` · dev `{{dev}}`
8
+
9
+ ## Knobs
10
+
11
+ review: subagent # subagent | cross-agent | cross-agent-risky
12
+ ui-evidence: playwright # playwright | none
13
+ evidence-repo: {{owner}}/dev-review-assets
14
+ gates: 3 # 3 = approve/PR/merge · 2 = approve/ship
15
+ tests: required # required | logic-only
16
+ merge: squash
17
+ branch: <type>/<issue>-<slug> # type: feat | fix | docs | chore | refactor
18
+ decisions: docs/decisions.md
19
+ release: on-request # per-merge = Ship runbook runs as part of shipping · on-request = only when the operator says "release"
20
+
21
+ ## Ship — what happens after merge, in order
22
+
23
+ Each line starts `auto:` (agent just does it) or `ask:` (needs the operator's word first).
24
+
25
+ - {{e.g. "auto: bunx changeset version && bun install, commit as chore: release"}}
26
+ - {{e.g. "ask: git tag v<version> && git push origin main v<version> — tag triggers the publish pipeline"}}
27
+ - {{delete this section's placeholders; "Ship: merge only" is a valid runbook}}
28
+
29
+ ## Verify — how to see it working
30
+
31
+ - {{start: command · URL}}
32
+ - {{the flows worth smoke-checking after a change}}
33
+
34
+ ## Environments
35
+
36
+ - {{environments and their targets; which the agent may touch}}
37
+ - {{where secret NAMES are defined — values never appear in this file}}
38
+
39
+ ## Design
40
+
41
+ - {{pointers: design system / component rules / .vegastack/arch.md / UI conventions}}
42
+
43
+ ## Stop and ask
44
+
45
+ Dark execution ends and the operator decides when work would involve: a change of scope or product behavior, a significant new dependency or runtime, spending money, anything destructive or touching production, or a blocker the brief cannot resolve.
46
+
47
+ ## Project rules
48
+
49
+ - {{project-specific rules, one per line; delete this section if none}}
@@ -0,0 +1,22 @@
1
+ # Harness facts
2
+
3
+ Verified mechanics of the two harnesses this workflow targets. Everything here is volatile — vendors change these — so each claim carries its source; the refresh contract tracks them. Verified 2026-08-27.
4
+
5
+ ## Claude Code
6
+
7
+ - Claude Code does **not** read AGENTS.md natively. The documented pattern is a CLAUDE.md that imports it: a line containing `@AGENTS.md` (import syntax is `@path/to/file`, resolved relative to the containing file, maximum 4 hops of recursion; `@` inside backticks stays literal). <!-- source: CC-MEMORY -->
8
+ - `CLAUDE.local.md` in the project root loads after CLAUDE.md and is meant to be gitignored — leave it alone; it is the user's personal file. <!-- source: CC-MEMORY -->
9
+ - Project skills load from `.claude/skills/<name>/SKILL.md`; personal skills from `~/.claude/skills/`. <!-- source: CC-SKILLS -->
10
+ - The structured question tool is **AskUserQuestion**. It is unavailable in non-interactive runs (`claude -p`); a configurable timeout can auto-submit pre-selected options. <!-- source: CC-TOOLS -->
11
+
12
+ ## Codex
13
+
14
+ - Codex reads AGENTS.md natively: from `~/.codex/` (global; `AGENTS.override.md` wins over `AGENTS.md`), then from the repo root down to the working directory, one file per directory, concatenated root-first so closer files override. Combined size is capped by `project_doc_max_bytes`, default 32 KiB. There is **no** `@file` import mechanism — layering is directory-based only. <!-- source: CODEX-AGENTS -->
15
+ - Skills load from `.agents/skills/` in each directory from the working directory up to the repo root, plus `~/.agents/skills/` for the user. Frontmatter requires only `name` and `description`; an optional `agents/openai.yaml` adds display metadata and invocation policy. <!-- source: CODEX-SKILLS -->
16
+ - The structured question tool is **`request_user_input`** — collaboration-mode-gated (available in Plan mode; elsewhere it fails fast with a clear error, and it is not available to subagents). Community posts mention an "ask_user_question"/"clarify" tool; that is a proposal, not a shipped tool — do not design against it. <!-- source: CODEX-SKILLS -->
17
+ - Non-interactive mode is `codex exec`: fully unattended, human-input tools unavailable, AGENTS.md discovery unchanged. <!-- source: CODEX-EXEC -->
18
+
19
+ ## What this means for the dev skills
20
+
21
+ - AGENTS.md is the shared instruction file; the one-line CLAUDE.md import makes it reach Claude Code. Keep the marked section small — it counts against Codex's 32 KiB budget along with everything else in AGENTS.md.
22
+ - Any skill that wants to ask the user must degrade cleanly: no question tool available → use documented defaults, mark them `# TODO confirm`, and say so.
@@ -0,0 +1,13 @@
1
+ # Refresh contract — dev-setup
2
+
3
+ Instructions for the scheduled refresh agent (and any human running a manual refresh). This file plus `sources.json` is the complete freshness contract for this skill.
4
+
5
+ ## What this skill claims
6
+
7
+ - **Durable rules** (SKILL.md, assets): the detect-then-ask discipline, the interview rounds and knobs, the marked-section AGENTS.md contract, the label set, the defaults-plus-TODO fallback. Versionless; the refresh agent NEVER edits these — if evidence invalidates one, open an issue quoting it.
8
+ - **Volatile facts**: everything in `references/harness-facts.md` — Claude Code memory/import/skill/question-tool mechanics and Codex AGENTS.md/skills/question-tool/exec mechanics. That file is the only refresh-tracked file; its sentences carry `<!-- source: SOURCE-ID -->` markers matching the registry.
9
+
10
+ ## How to refresh
11
+
12
+ 1. Run the shared runner against this registry; on drift, read the changed page and propose edits to the marked sentences in `references/harness-facts.md` — and to the three harness-mechanism mentions in SKILL.md that mirror it (the two question tools in Step 2, the `@AGENTS.md` import in Step 3) — in the same PR as the registry update.
13
+ 2. Never auto-apply harness behavior changes; a human reviews — these facts change what dev-setup writes into user projects.
@@ -0,0 +1,152 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "retrievalBaseline": "2026-08-27",
4
+ "policy": {
5
+ "criticalTopics": [
6
+ "claude-code-memory",
7
+ "codex-agents-md"
8
+ ],
9
+ "defaultChecksumScope": "html-text-v1",
10
+ "offline": "Use cached metadata only; fail closed when a critical entry is missing or older than thresholdDays.",
11
+ "drift": "Any drift requires reading the changed page and a human-reviewed PR updating references/harness-facts.md; never auto-apply.",
12
+ "copyright": "Store claim metadata, URLs, hashes, and concise excerpts only; never archive third-party documentation corpora.",
13
+ "cadence": "weekly scheduled-agent refresh; thresholdDays must be >= 14 (2x cadence) so a single missed run never breaches a threshold"
14
+ },
15
+ "sources": [
16
+ {
17
+ "id": "CC-MEMORY",
18
+ "service": "Claude Code memory files and imports (CLAUDE.md, AGENTS.md, @imports)",
19
+ "kind": "official-docs",
20
+ "stability": "vendor-docs",
21
+ "thresholdDays": 14,
22
+ "critical": true,
23
+ "urls": {
24
+ "primary": "https://code.claude.com/docs/en/memory.md"
25
+ },
26
+ "versionDetection": {
27
+ "type": "manual-review"
28
+ },
29
+ "topics": [
30
+ "claude-code-memory"
31
+ ],
32
+ "affected": [
33
+ "references/harness-facts.md",
34
+ "SKILL.md"
35
+ ],
36
+ "checksum": "e989818335ae45abb756df759d4859aa9daa6764393a3e39c46e505f181a33b6",
37
+ "retrievedAt": "2026-08-27T08:19:24.132Z"
38
+ },
39
+ {
40
+ "id": "CC-SKILLS",
41
+ "service": "Claude Code skill discovery locations and frontmatter",
42
+ "kind": "official-docs",
43
+ "stability": "vendor-docs",
44
+ "thresholdDays": 14,
45
+ "critical": false,
46
+ "urls": {
47
+ "primary": "https://code.claude.com/docs/en/skills.md"
48
+ },
49
+ "versionDetection": {
50
+ "type": "manual-review"
51
+ },
52
+ "topics": [
53
+ "claude-code-skills"
54
+ ],
55
+ "affected": [
56
+ "references/harness-facts.md"
57
+ ],
58
+ "checksum": "8d03177dcc10ffbff5313c43023da15ff1059197c1fff05eb9dba3fe6361c767",
59
+ "retrievedAt": "2026-08-27T08:19:24.132Z"
60
+ },
61
+ {
62
+ "id": "CC-TOOLS",
63
+ "service": "Claude Code AskUserQuestion tool behavior",
64
+ "kind": "official-docs",
65
+ "stability": "vendor-docs",
66
+ "thresholdDays": 14,
67
+ "critical": false,
68
+ "urls": {
69
+ "primary": "https://code.claude.com/docs/en/tools-reference.md"
70
+ },
71
+ "versionDetection": {
72
+ "type": "manual-review"
73
+ },
74
+ "topics": [
75
+ "claude-code-tools"
76
+ ],
77
+ "affected": [
78
+ "references/harness-facts.md",
79
+ "SKILL.md"
80
+ ],
81
+ "checksum": "3bdd8429e76be8213e9263103134ac7b6892f4574820e40bf84032a98c5d0aeb",
82
+ "retrievedAt": "2026-08-27T08:19:24.132Z"
83
+ },
84
+ {
85
+ "id": "CODEX-AGENTS",
86
+ "service": "Codex AGENTS.md discovery, merging, and size cap",
87
+ "kind": "official-docs",
88
+ "stability": "vendor-docs",
89
+ "thresholdDays": 14,
90
+ "critical": true,
91
+ "urls": {
92
+ "primary": "https://learn.chatgpt.com/docs/agent-configuration/agents-md.md"
93
+ },
94
+ "versionDetection": {
95
+ "type": "manual-review"
96
+ },
97
+ "topics": [
98
+ "codex-agents-md"
99
+ ],
100
+ "affected": [
101
+ "references/harness-facts.md"
102
+ ],
103
+ "checksum": "9eacb3d812b87be4acc1213af58ded35e8f387bcf1589c203bbb452ead0c4774",
104
+ "retrievedAt": "2026-08-27T08:19:24.132Z"
105
+ },
106
+ {
107
+ "id": "CODEX-SKILLS",
108
+ "service": "Codex skills discovery, frontmatter, and request_user_input gating",
109
+ "kind": "official-docs",
110
+ "stability": "vendor-docs",
111
+ "thresholdDays": 14,
112
+ "critical": false,
113
+ "urls": {
114
+ "primary": "https://learn.chatgpt.com/docs/build-skills.md"
115
+ },
116
+ "versionDetection": {
117
+ "type": "manual-review"
118
+ },
119
+ "topics": [
120
+ "codex-skills"
121
+ ],
122
+ "affected": [
123
+ "references/harness-facts.md",
124
+ "SKILL.md"
125
+ ],
126
+ "checksum": "44aa6d490f4567c0b1fb064deab642bfac590f0e721228e0c53fe738db191026",
127
+ "retrievedAt": "2026-08-27T08:19:24.132Z"
128
+ },
129
+ {
130
+ "id": "CODEX-EXEC",
131
+ "service": "Codex non-interactive mode (codex exec)",
132
+ "kind": "official-docs",
133
+ "stability": "vendor-docs",
134
+ "thresholdDays": 14,
135
+ "critical": false,
136
+ "urls": {
137
+ "primary": "https://learn.chatgpt.com/docs/non-interactive-mode.md"
138
+ },
139
+ "versionDetection": {
140
+ "type": "manual-review"
141
+ },
142
+ "topics": [
143
+ "codex-exec"
144
+ ],
145
+ "affected": [
146
+ "references/harness-facts.md"
147
+ ],
148
+ "checksum": "df82c4bbf3b5bffca926a244549222c1235154cfba973b9a0bb1d7a0abd28d66",
149
+ "retrievedAt": "2026-08-27T08:19:24.132Z"
150
+ }
151
+ ]
152
+ }
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: dev-ship
3
+ description: Create the pull request and merge for a finished issue, each only on the user's explicit word. Use when the user says "make the PR", "open a pull request" for an issue, "ship it", "merge it", "merge issue 12", or asks to close out a reviewed issue. Verifies the issue is at for-operator with evidence, links the PR to the issue, and squash-merges on the separate merge instruction. Not for implementing issues (dev-implement) or writing and approving them (dev-intake).
4
+ ---
5
+
6
+ # dev-ship
7
+
8
+ Two gates, each one sentence from the user, each spent when used: their words asking for a PR authorize the PR and nothing more; their words asking to merge authorize the merge. With `gates: 2` in `.vegastack/dev.md`, one "ship it" covers both — that's the only case where they combine. Passing checks, PR permissions, and the calendar authorize nothing by themselves.
9
+
10
+ Nearest neighbor: `dev-implement` produces the `for-operator` issue with its evidence comment; ship packages and lands it. Corrections found here go back through implement's corrections loop.
11
+
12
+ ## Gate 1 — the PR
13
+
14
+ On the user's PR instruction:
15
+
16
+ - Verify the issue is at `for-operator` with the evidence comment present, and the branch is pushed. Not there yet → say what's missing instead of creating a premature PR.
17
+ - `gh pr create` from the task branch: title from the issue, body is `Closes #<n>` plus a link to the evidence comment — the issue holds the report; the PR links it rather than duplicating it.
18
+ - No draft PRs unless the user asks for one.
19
+ - If required checks fail on the PR, that's implement work: hand the failures to the corrections loop, update the evidence comment, and tell the user.
20
+ - User corrections left on the PR itself flow through the same corrections loop on the same branch — the PR updates with the push; nothing gets recreated.
21
+
22
+ ## Gate 2 — the merge
23
+
24
+ On the user's separate merge instruction:
25
+
26
+ - Re-check that the PR head is still the revision the evidence comment names and checks are green — a branch that moved since review gets re-verified before it lands.
27
+ - A merge conflict with the default branch is corrections work: update the branch, re-verify what the update touched, and the standing merge instruction holds once checks are green again — unless the update changed behavior, which goes back to the user.
28
+ - Merge per the dev.md `merge` knob (default `gh pr merge --squash`). `Closes #<n>` closes the issue; confirm both happened.
29
+ - If the issue carries a `Decision:` comment (the dev-intake convention), append its one dated line to the register dev.md names (`decisions:` knob) now — the register is append-only and this is its moment.
30
+
31
+ ## After the merge — the Ship runbook
32
+
33
+ Merge is not the end when dev.md has a `## Ship` section: follow its steps in order — `auto:` lines you just do, `ask:` lines wait for the operator's word. With `release: per-merge`, the runbook is part of shipping the issue; with `release: on-request`, it runs only when the operator says "release" (covering everything merged since the last one). Report each step's outcome; a failing runbook step stops the sequence and goes to the operator — never skip ahead past a failure. A gotcha here (a step that surprised you, an instruction the operator had to repeat) is one proposed line folded into the runbook.
34
+
35
+ ## Report
36
+
37
+ One short confirmation each gate: what was created or merged, the link, and anything that still needs the user (failing check, moved head, missing evidence). When a gate's condition isn't met, the answer is what's missing — the gate itself never gets skipped to be helpful.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "dev-ship"
3
+ short_description: "Open the PR and merge, each on the user's word"
4
+ default_prompt: "Use $dev-ship to create the PR or merge this issue's work."
@@ -0,0 +1,3 @@
1
+ # Refresh contract — dev-ship
2
+
3
+ Evergreen: this skill asserts no version pins, vendor mechanism names beyond long-stable `gh` subcommands, numeric vendor limits, or dated facts — its content is the two-gate discipline, all versionless. Revisit if a future edit introduces a volatile fact.