@williambeto/ai-workflow 1.18.16 → 1.18.18
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/.agents/napkin.md +89 -0
- package/.agents/skills/{codex-pr-workflow → pr-orchestrator}/SKILL.md +2 -2
- package/CHANGELOG.md +15 -0
- package/README.md +2 -1
- package/docs/full-documentation.md +2 -2
- package/opencode/agents/README.md +3 -3
- package/opencode.jsonc +2 -2
- package/package.json +2 -1
- package/packages/ai-workflow/src/commands/init.js +69 -0
- package/packages/ai-workflow/src/core/opencode-merge.js +39 -1
- package/packages/ai-workflow/src/core/templates.js +7 -1
- package/prompts/03-create-tech-plan.md +2 -2
- package/prompts/04-breakdown-prs.md +1 -1
- package/prompts/05-implement-pr.md +2 -2
- package/prompts/06-review-and-fix.md +2 -2
- package/prompts/08-validate.md +2 -2
- package/prompts/09-deploy.md +2 -2
- package/runbooks/apply-starter-to-real-project.md +1 -1
- package/runbooks/branch-cleanup.md +109 -0
- package/runbooks/deploy-checklist.md +1 -1
- package/runbooks/how-to-use-skills.md +16 -16
- package/runbooks/publish-package-checklist.md +22 -0
- package/runbooks/quick-start-guide.md +1 -1
- package/runbooks/tutorial-walkthroughs.md +5 -5
- package/runbooks/validation-checklist.md +1 -1
- package/templates/AGENTS.template.md +2 -2
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Project Napkin Memory
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
This file stores durable, reusable project memory for `ai-workflow`.
|
|
6
|
+
|
|
7
|
+
It captures recurring corrections and stable operational rules that should survive across sessions.
|
|
8
|
+
|
|
9
|
+
## Usage rules
|
|
10
|
+
|
|
11
|
+
- Read at relevant task start when work depends on repository structure, workflow rules, validation behavior, or recurring conventions.
|
|
12
|
+
- Apply progressive disclosure: use only entries relevant to the current task.
|
|
13
|
+
- Add entries only when guidance is durable and reusable.
|
|
14
|
+
- Do not store secrets, credentials, tokens, private keys, or personal/environment-sensitive data.
|
|
15
|
+
- Do not use this file as a temporary notes dump or task timeline log.
|
|
16
|
+
|
|
17
|
+
## Current durable project memory
|
|
18
|
+
|
|
19
|
+
### [2026-05-11] Workflow: Keep pull requests small and reviewable
|
|
20
|
+
|
|
21
|
+
- Instead of: Combining multiple workflow phases or unrelated refactors in one change.
|
|
22
|
+
- Do: Implement one scoped PR-sized unit at a time and preserve no-regression behavior.
|
|
23
|
+
- Evidence/source: `AGENTS.md` hard constraints and primary workflow.
|
|
24
|
+
|
|
25
|
+
### [2026-05-11] Validation: Run full repository validation before closing work
|
|
26
|
+
|
|
27
|
+
- Instead of: Assuming docs or script edits are safe without full validation.
|
|
28
|
+
- Do: Run `npm run validate` and report command evidence in the final output.
|
|
29
|
+
- Evidence/source: `AGENTS.md` evidence requirements and validation rules.
|
|
30
|
+
|
|
31
|
+
### [2026-05-11] Skill design: Keep skills portable and lightweight
|
|
32
|
+
|
|
33
|
+
- Instead of: Embedding heavy repo-specific logic directly into each skill.
|
|
34
|
+
- Do: Keep skills operational, concise, and reusable across real project contexts.
|
|
35
|
+
- Evidence/source: `AGENTS.md` repository context and specialist skill guidance.
|
|
36
|
+
|
|
37
|
+
### [2026-05-11] Skill structure: Every skill directory needs `SKILL.md`
|
|
38
|
+
|
|
39
|
+
- Instead of: Treating a skill directory as valid without its required definition file.
|
|
40
|
+
- Do: Ensure each `.agents/skills/*` directory contains `SKILL.md`.
|
|
41
|
+
- Evidence/source: `scripts/validate-skills.mjs` dynamic directory check.
|
|
42
|
+
|
|
43
|
+
### [2026-05-11] Validation quality: Do not allow incomplete skills to pass
|
|
44
|
+
|
|
45
|
+
- Instead of: Passing validation when required skill files are missing.
|
|
46
|
+
- Do: Fail validation for missing skill files and treat it as a blocking issue.
|
|
47
|
+
- Evidence/source: `scripts/validate-skills.mjs` failure behavior and repo quality gates.
|
|
48
|
+
|
|
49
|
+
### [2026-05-11] Review quality: Prefer evidence-based findings
|
|
50
|
+
|
|
51
|
+
- Instead of: Reporting vague findings without concrete references.
|
|
52
|
+
- Do: Include file paths and command output in findings and validation summaries.
|
|
53
|
+
- Evidence/source: `AGENTS.md` evidence requirements and finding model.
|
|
54
|
+
|
|
55
|
+
### [2026-05-12] Token economy: Caveman mode does not auto-pass to delegated agents
|
|
56
|
+
|
|
57
|
+
- Instead of: Activating `/caveman` and assuming all delegated agents stay compact.
|
|
58
|
+
- Do: Each new agent context loads fresh without caveman compression unless the delegation packet explicitly requests it.
|
|
59
|
+
- Do: When delegating, include in the handoff packet: "Use compact output — caveman mode active."
|
|
60
|
+
- Do: For multi-agent chains (planner → implementer → reviewer), activate token-economy + minimal-context in each agent's Required context or delegation contract.
|
|
61
|
+
- Evidence/source: `AGENTS.md` anti-overdelegation rules, `minimal-context` skill, `token-economy` skill.
|
|
62
|
+
|
|
63
|
+
### [2026-05-13] Phase 8: Codex parity complete — all PRs merged
|
|
64
|
+
|
|
65
|
+
- Instead of: Leaving Codex users without guided orchestration or debugging entrypoints.
|
|
66
|
+
- Do: After any audit that identifies gaps, create a Phase in ROADMAP.md and deliver PRs sequentially with validation at each step.
|
|
67
|
+
- Do: Mark each Phase as `[x]` in ROADMAP when complete, update status line, and update "next recommended PR".
|
|
68
|
+
- Evidence/source: ROADMAP.md Phase 8 — 6 PRs delivered (orchestrate-next.md, fix-issue.md, deploy.md, autopilot→orchestrator fixes, README tree, AGENTS.md note). PR #89 merged. 9/9 validate checks.
|
|
69
|
+
|
|
70
|
+
### [2026-05-13] Audit: Napkin works for both Codex and OpenCode
|
|
71
|
+
|
|
72
|
+
- Instead of: Worrying that Napkin might be tool-specific or only work for OpenCode.
|
|
73
|
+
- Do: Trust that Napkin is fully shared — same file, same skill, same format for both Codex and OpenCode.
|
|
74
|
+
- Do: After any audit or significant workflow change, update Napkin if a durable lesson was confirmed.
|
|
75
|
+
- Evidence/source: `.agents/napkin.md` audit 2026-05-13 — SKILL.md passes validate:skills for both tools; progressive disclosure documented; 0 secrets; 8 valid entries.
|
|
76
|
+
|
|
77
|
+
### [2026-05-14] Release hygiene: update `package.json` before release
|
|
78
|
+
|
|
79
|
+
- Instead of: Creating a release tag without aligning repository version metadata.
|
|
80
|
+
- Do: Update `package.json` version before creating a release.
|
|
81
|
+
- Do: Keep version, tag, and release notes aligned so release automation and changelog extraction stay consistent.
|
|
82
|
+
- Evidence/source: `release.yml` extracts notes by tag version; release flow consistency depends on matching semver across tags and project metadata.
|
|
83
|
+
|
|
84
|
+
### [2026-05-23] Documentation language: English only for repository docs
|
|
85
|
+
|
|
86
|
+
- Instead of: Adding or keeping Portuguese (or mixed-language) content in official documentation files.
|
|
87
|
+
- Do: Write and maintain all repository documentation in English by default.
|
|
88
|
+
- Do: Apply this rule to docs, runbooks, prompts, specs, and policy files unless a file explicitly declares a localization scope.
|
|
89
|
+
- Evidence/source: User directive in session (2026-05-23) and consistency requirement for public developer experience.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: pr-orchestrator
|
|
3
3
|
description: Use when planning, implementing, reviewing, or validating small pull requests with Codex while preserving scope and avoiding regressions.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
> Token economy active: keep output compact, context minimal. Reference: `token-economy` + `minimal-context` skills.
|
|
7
7
|
|
|
8
|
-
#
|
|
8
|
+
# PR Orchestrator Skill
|
|
9
9
|
|
|
10
10
|
## Purpose
|
|
11
11
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
## [1.18.18](https://github.com/williambeto/ai-workflow/compare/v1.18.17...v1.18.18) (2026-05-23)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **init:** include napkin memory in npm install ([f4f2e31](https://github.com/williambeto/ai-workflow/commit/f4f2e313dfae85daa31c92d60d5402df48c83b62))
|
|
7
|
+
|
|
8
|
+
## [1.18.17](https://github.com/williambeto/ai-workflow/compare/v1.18.16...v1.18.17) (2026-05-23)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **init:** ignore generated workflow footprint ([15eba7a](https://github.com/williambeto/ai-workflow/commit/15eba7a2ac3ad81af3f6e6984be900717a6e89ef))
|
|
14
|
+
* **init:** use canonical opencode full config ([8b8551d](https://github.com/williambeto/ai-workflow/commit/8b8551d5af00b8924dbc8f2244b159f091fcb810))
|
|
15
|
+
|
|
1
16
|
## [1.18.16](https://github.com/williambeto/ai-workflow/compare/v1.18.15...v1.18.16) (2026-05-22)
|
|
2
17
|
|
|
3
18
|
|
package/README.md
CHANGED
|
@@ -64,6 +64,7 @@ Use:
|
|
|
64
64
|
- `templates/SPEC.template.md`
|
|
65
65
|
- `checklists/spec-readiness-checklist.md`
|
|
66
66
|
- `runbooks/spec-driven-development.md`
|
|
67
|
+
- `runbooks/branch-cleanup.md`
|
|
67
68
|
|
|
68
69
|
## The anti-chaos rules
|
|
69
70
|
|
|
@@ -107,7 +108,7 @@ npx @williambeto/ai-workflow init --dry-run
|
|
|
107
108
|
| Profile | Use when |
|
|
108
109
|
| --- | --- |
|
|
109
110
|
| `minimal` | You only need basic docs and Codex prompt placeholders. |
|
|
110
|
-
| `operational`
|
|
111
|
+
| `operational` | You want the repeatable PR workflow with OpenCode `start` command. |
|
|
111
112
|
| `full` | You want starter files for the full agent and skill catalog. |
|
|
112
113
|
|
|
113
114
|
For a full walkthrough with Codex and OpenCode quickstart paths, validation checklist, and troubleshooting, see [`docs/npm-consumer-quickstart.md`](docs/npm-consumer-quickstart.md).
|
|
@@ -242,7 +242,7 @@ Skills define focused behavior for AI agents. Use exactly one primary skill per
|
|
|
242
242
|
| --- | --- |
|
|
243
243
|
| [`product-manager`](.agents/skills/product-manager/SKILL.md) | Clarifying requirements, users, scope, and acceptance criteria. |
|
|
244
244
|
| [`tech-lead`](.agents/skills/tech-lead/SKILL.md) | Planning architecture, trade-offs, risks, and sequencing. |
|
|
245
|
-
| [`
|
|
245
|
+
| [`pr-orchestrator`](.agents/skills/pr-orchestrator/SKILL.md) | Splitting, executing, reviewing, and summarizing small PRs. |
|
|
246
246
|
| [`frontend-implementer`](.agents/skills/frontend-implementer/SKILL.md) | Frontend UI, routing, state, styling, and accessibility work. |
|
|
247
247
|
| [`backend-implementer`](.agents/skills/backend-implementer/SKILL.md) | APIs, services, data, validation, auth, and server-side tests. |
|
|
248
248
|
| [`tester`](.agents/skills/tester/SKILL.md) | Acceptance criteria, regression coverage, and validation evidence. |
|
|
@@ -266,7 +266,7 @@ Skills define focused behavior for AI agents. Use exactly one primary skill per
|
|
|
266
266
|
| --- | --- |
|
|
267
267
|
| Requirement or acceptance criteria | `product-manager` |
|
|
268
268
|
| Technical plan | `tech-lead` |
|
|
269
|
-
| PR breakdown | `
|
|
269
|
+
| PR breakdown | `pr-orchestrator` |
|
|
270
270
|
| Frontend implementation | `frontend-implementer` |
|
|
271
271
|
| Backend implementation | `backend-implementer` |
|
|
272
272
|
| Test strategy or review | `tester` |
|
|
@@ -79,9 +79,9 @@ Delegation policy baseline:
|
|
|
79
79
|
When routing to an agent, use this baseline skill auto-load map:
|
|
80
80
|
|
|
81
81
|
```txt
|
|
82
|
-
planner -> product-manager + tech-lead +
|
|
83
|
-
implementer ->
|
|
84
|
-
reviewer -> tester +
|
|
82
|
+
planner -> product-manager + tech-lead + pr-orchestrator
|
|
83
|
+
implementer -> pr-orchestrator + tester + (frontend-implementer or backend-implementer)
|
|
84
|
+
reviewer -> tester + pr-orchestrator
|
|
85
85
|
validator -> build-and-validate + tester
|
|
86
86
|
release-manager -> deploy-engineer
|
|
87
87
|
```
|
package/opencode.jsonc
CHANGED
|
@@ -96,10 +96,10 @@
|
|
|
96
96
|
"description": "Plan and review deployment, release, rollback, CI/CD readiness",
|
|
97
97
|
"prompt": "{file:.agents/skills/deploy-engineer/SKILL.md}"
|
|
98
98
|
},
|
|
99
|
-
"
|
|
99
|
+
"pr-orchestrator": {
|
|
100
100
|
"mode": "subagent",
|
|
101
101
|
"description": "Plan and validate small PRs, preserve scope, avoid regressions",
|
|
102
|
-
"prompt": "{file:.agents/skills/
|
|
102
|
+
"prompt": "{file:.agents/skills/pr-orchestrator/SKILL.md}"
|
|
103
103
|
},
|
|
104
104
|
"build-and-validate": {
|
|
105
105
|
"mode": "subagent",
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.18.
|
|
2
|
+
"version": "1.18.18",
|
|
3
3
|
"name": "@williambeto/ai-workflow",
|
|
4
4
|
"description": "AI Workflow Kit repository for designing and validating AI-assisted software delivery workflows with Codex and OpenCode",
|
|
5
5
|
"license": "MIT",
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"packages/ai-workflow/src/",
|
|
25
25
|
".codex/prompts/",
|
|
26
26
|
".agents/skills/",
|
|
27
|
+
".agents/napkin.md",
|
|
27
28
|
"opencode/agents/",
|
|
28
29
|
"opencode/commands/",
|
|
29
30
|
"opencode/README.md",
|
|
@@ -20,6 +20,65 @@ function printPlan(actions) {
|
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
function toIgnoreEntries(linkPath) {
|
|
24
|
+
if (linkPath === "README.workflow.md") {
|
|
25
|
+
return [linkPath];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const normalized = linkPath.endsWith("/") ? linkPath.slice(0, -1) : linkPath;
|
|
29
|
+
return [normalized, `${normalized}/`];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function buildGitignoreBlock(entries) {
|
|
33
|
+
const unique = Array.from(new Set(entries));
|
|
34
|
+
const sorted = unique.sort((a, b) => a.localeCompare(b));
|
|
35
|
+
|
|
36
|
+
return [
|
|
37
|
+
"# BEGIN AI WORKFLOW KIT",
|
|
38
|
+
"# AI Workflow Kit generated files",
|
|
39
|
+
...sorted,
|
|
40
|
+
"# END AI WORKFLOW KIT"
|
|
41
|
+
].join("\n");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async function upsertGitignoreBlock(cwd, entries) {
|
|
45
|
+
const gitignorePath = path.join(cwd, ".gitignore");
|
|
46
|
+
const block = buildGitignoreBlock(entries);
|
|
47
|
+
const beginMarker = "# BEGIN AI WORKFLOW KIT";
|
|
48
|
+
const endMarker = "# END AI WORKFLOW KIT";
|
|
49
|
+
|
|
50
|
+
const hasGitignore = await exists(gitignorePath);
|
|
51
|
+
if (!hasGitignore) {
|
|
52
|
+
await writeFileSafe(gitignorePath, `${block}\n`);
|
|
53
|
+
return "created";
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const current = await fs.readFile(gitignorePath, "utf8");
|
|
57
|
+
const beginIndex = current.indexOf(beginMarker);
|
|
58
|
+
const endIndex = current.indexOf(endMarker);
|
|
59
|
+
|
|
60
|
+
if (beginIndex >= 0 && endIndex > beginIndex) {
|
|
61
|
+
const before = current
|
|
62
|
+
.slice(0, beginIndex)
|
|
63
|
+
.replace(/\n?# AI Workflow Kit generated files\n?$/, "\n")
|
|
64
|
+
.replace(/[ \t]+$/gm, "")
|
|
65
|
+
.replace(/\n*$/, "\n");
|
|
66
|
+
const afterStart = endIndex + endMarker.length;
|
|
67
|
+
const after = current.slice(afterStart).replace(/^\n*/, "\n");
|
|
68
|
+
const next = `${before}${block}${after}`;
|
|
69
|
+
if (next !== current) {
|
|
70
|
+
await writeFileSafe(gitignorePath, next);
|
|
71
|
+
return "updated";
|
|
72
|
+
}
|
|
73
|
+
return "unchanged";
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const separator = current.endsWith("\n") ? "\n" : "\n\n";
|
|
77
|
+
const next = `${current}${separator}${block}\n`;
|
|
78
|
+
await writeFileSafe(gitignorePath, next);
|
|
79
|
+
return "updated";
|
|
80
|
+
}
|
|
81
|
+
|
|
23
82
|
export async function runInit({ cwd, yes, force, dryRun, noInstall, noOverwrite, profile }) {
|
|
24
83
|
const selectedProfile = profile ?? "full";
|
|
25
84
|
const installRoot = ".ai-workflow";
|
|
@@ -139,10 +198,20 @@ export async function runInit({ cwd, yes, force, dryRun, noInstall, noOverwrite,
|
|
|
139
198
|
? { reason: "skipped (minimal profile)" }
|
|
140
199
|
: await mergeOpencodeConfig(cwd, { force, backupRoot, profile: selectedProfile });
|
|
141
200
|
|
|
201
|
+
const generatedIgnoreEntries = [
|
|
202
|
+
".ai-workflow/",
|
|
203
|
+
".ai-workflow.json",
|
|
204
|
+
".ai-workflow-backups/",
|
|
205
|
+
...linkEntries.flatMap((entry) => toIgnoreEntries(entry.linkPath))
|
|
206
|
+
];
|
|
207
|
+
|
|
208
|
+
const gitignoreResult = await upsertGitignoreBlock(cwd, generatedIgnoreEntries);
|
|
209
|
+
|
|
142
210
|
console.log("Installation complete.");
|
|
143
211
|
console.log(`- profile: ${selectedProfile}`);
|
|
144
212
|
|
|
145
213
|
console.log(`- opencode.jsonc: ${opencodeResult.reason}`);
|
|
214
|
+
console.log(`- .gitignore: ${gitignoreResult}`);
|
|
146
215
|
console.log(`- symlink layout: ${linkCreated.length > 0 ? `created ${linkCreated.length}` : "already-up-to-date"}`);
|
|
147
216
|
if (backups.length > 0) {
|
|
148
217
|
console.log(`- backups created: ${backups.length}`);
|
|
@@ -1,10 +1,40 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { exists, readJsonc, writeFileSafe } from "./filesystem.js";
|
|
3
3
|
import { createManagedBackup } from "./backup.js";
|
|
4
|
+
import { readPackageFile } from "./package-assets.js";
|
|
4
5
|
|
|
5
6
|
const LEGACY_MARKER = "_aiWorkflowManaged";
|
|
6
7
|
|
|
8
|
+
function loadCanonicalFullConfig() {
|
|
9
|
+
try {
|
|
10
|
+
const raw = readPackageFile("opencode.jsonc");
|
|
11
|
+
if (!raw) return null;
|
|
12
|
+
const parsed = JSON.parse(raw);
|
|
13
|
+
|
|
14
|
+
if (!parsed || typeof parsed !== "object") return null;
|
|
15
|
+
if (!parsed.agent || !parsed.command) return null;
|
|
16
|
+
|
|
17
|
+
if (!parsed.agent.default) {
|
|
18
|
+
parsed.agent.default = {
|
|
19
|
+
mode: "primary",
|
|
20
|
+
description: "Default OpenCode agent for this project",
|
|
21
|
+
prompt:
|
|
22
|
+
"You are the default OpenCode agent for this repository. Follow local project docs and validation commands."
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return parsed;
|
|
27
|
+
} catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
7
32
|
function buildManagedConfig(profile = "full") {
|
|
33
|
+
const canonicalFull = profile === "full" ? loadCanonicalFullConfig() : null;
|
|
34
|
+
if (canonicalFull) {
|
|
35
|
+
return canonicalFull;
|
|
36
|
+
}
|
|
37
|
+
|
|
8
38
|
const fullPrimaryAgents =
|
|
9
39
|
profile === "full"
|
|
10
40
|
? {
|
|
@@ -31,7 +61,7 @@ function buildManagedConfig(profile = "full") {
|
|
|
31
61
|
? {
|
|
32
62
|
"backend-implementer": { mode: "subagent", description: "Backend implementation specialist", prompt: "{file:./.agents/skills/backend-implementer/SKILL.md}" },
|
|
33
63
|
"build-and-validate": { mode: "subagent", description: "Build and validation specialist", prompt: "{file:./.agents/skills/build-and-validate/SKILL.md}" },
|
|
34
|
-
"
|
|
64
|
+
"pr-orchestrator": { mode: "subagent", description: "PR breakdown and flow specialist", prompt: "{file:./.agents/skills/pr-orchestrator/SKILL.md}" },
|
|
35
65
|
"deploy-engineer": { mode: "subagent", description: "Deploy and release specialist", prompt: "{file:./.agents/skills/deploy-engineer/SKILL.md}" },
|
|
36
66
|
"docs-writer": { mode: "subagent", description: "Documentation specialist", prompt: "{file:./.agents/skills/docs-writer/SKILL.md}" },
|
|
37
67
|
"frontend-implementer": { mode: "subagent", description: "Frontend implementation specialist", prompt: "{file:./.agents/skills/frontend-implementer/SKILL.md}" },
|
|
@@ -114,6 +144,14 @@ export async function mergeOpencodeConfig(cwd, { force = false, backupRoot = ".a
|
|
|
114
144
|
const next = {
|
|
115
145
|
...currentWithoutLegacy,
|
|
116
146
|
$schema: current.$schema ?? managed.$schema,
|
|
147
|
+
...(managed.mcp
|
|
148
|
+
? {
|
|
149
|
+
mcp: {
|
|
150
|
+
...(current.mcp ?? {}),
|
|
151
|
+
...managed.mcp
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
: {}),
|
|
117
155
|
agent: {
|
|
118
156
|
...(current.agent ?? {}),
|
|
119
157
|
...managed.agent
|
|
@@ -108,7 +108,7 @@ const FULL_PRIMARY_AGENTS = [
|
|
|
108
108
|
const FULL_SKILLS = [
|
|
109
109
|
"backend-implementer",
|
|
110
110
|
"build-and-validate",
|
|
111
|
-
"
|
|
111
|
+
"pr-orchestrator",
|
|
112
112
|
"deploy-engineer",
|
|
113
113
|
"docs-writer",
|
|
114
114
|
"frontend-implementer",
|
|
@@ -154,6 +154,12 @@ function buildFullFiles() {
|
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
+
// ── Napkin memory seed (used by napkin skill) ─────────────────────
|
|
158
|
+
const napkinContent = readPackageFile(".agents/napkin.md");
|
|
159
|
+
if (napkinContent !== null) {
|
|
160
|
+
files[".agents/napkin.md"] = napkinContent;
|
|
161
|
+
}
|
|
162
|
+
|
|
157
163
|
// ── OpenCode commands ────────────────────────────────────────────
|
|
158
164
|
const commandFiles = discoverPackageFiles("opencode/commands");
|
|
159
165
|
for (const [relPath, content] of Object.entries(commandFiles)) {
|
|
@@ -35,14 +35,14 @@ Supporting skills:
|
|
|
35
35
|
```txt
|
|
36
36
|
.agents/skills/tester/SKILL.md
|
|
37
37
|
.agents/skills/build-and-validate/SKILL.md
|
|
38
|
-
.agents/skills/
|
|
38
|
+
.agents/skills/pr-orchestrator/SKILL.md
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
Use `tester` to check whether the plan is testable.
|
|
42
42
|
|
|
43
43
|
Use `build-and-validate` to define realistic validation commands.
|
|
44
44
|
|
|
45
|
-
Use `
|
|
45
|
+
Use `pr-orchestrator` to split the work into safe pull requests.
|
|
46
46
|
|
|
47
47
|
## Required input
|
|
48
48
|
|
|
@@ -38,11 +38,11 @@ Common options:
|
|
|
38
38
|
Supporting skills:
|
|
39
39
|
|
|
40
40
|
```txt
|
|
41
|
-
.agents/skills/
|
|
41
|
+
.agents/skills/pr-orchestrator/SKILL.md
|
|
42
42
|
.agents/skills/tester/SKILL.md
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
Use `
|
|
45
|
+
Use `pr-orchestrator` to keep the PR scoped.
|
|
46
46
|
|
|
47
47
|
Use `tester` to check whether the implementation satisfies the PR acceptance criteria.
|
|
48
48
|
|
|
@@ -34,14 +34,14 @@ Supporting skills:
|
|
|
34
34
|
|
|
35
35
|
```txt
|
|
36
36
|
.agents/skills/build-and-validate/SKILL.md
|
|
37
|
-
.agents/skills/
|
|
37
|
+
.agents/skills/pr-orchestrator/SKILL.md
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
Use `tester` to verify correctness, regressions, edge cases, and acceptance criteria.
|
|
41
41
|
|
|
42
42
|
Use `build-and-validate` to run or interpret validation commands.
|
|
43
43
|
|
|
44
|
-
Use `
|
|
44
|
+
Use `pr-orchestrator` to ensure fixes stay inside the selected PR scope.
|
|
45
45
|
|
|
46
46
|
## Required input
|
|
47
47
|
|
package/prompts/08-validate.md
CHANGED
|
@@ -35,14 +35,14 @@ Supporting skills:
|
|
|
35
35
|
|
|
36
36
|
```txt
|
|
37
37
|
.agents/skills/build-and-validate/SKILL.md
|
|
38
|
-
.agents/skills/
|
|
38
|
+
.agents/skills/pr-orchestrator/SKILL.md
|
|
39
39
|
.agents/skills/docs-writer/SKILL.md
|
|
40
40
|
.agents/skills/deploy-engineer/SKILL.md
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
Use `build-and-validate` for command execution and failure analysis.
|
|
44
44
|
|
|
45
|
-
Use `
|
|
45
|
+
Use `pr-orchestrator` to check PR scope and review readiness.
|
|
46
46
|
|
|
47
47
|
Use `docs-writer` when validating documentation, prompts, templates, or runbooks.
|
|
48
48
|
|
package/prompts/09-deploy.md
CHANGED
|
@@ -36,7 +36,7 @@ Supporting skills:
|
|
|
36
36
|
```txt
|
|
37
37
|
.agents/skills/build-and-validate/SKILL.md
|
|
38
38
|
.agents/skills/tester/SKILL.md
|
|
39
|
-
.agents/skills/
|
|
39
|
+
.agents/skills/pr-orchestrator/SKILL.md
|
|
40
40
|
.agents/skills/docs-writer/SKILL.md
|
|
41
41
|
```
|
|
42
42
|
|
|
@@ -44,7 +44,7 @@ Use `build-and-validate` to verify build, tests, artifacts, and command results.
|
|
|
44
44
|
|
|
45
45
|
Use `tester` to verify acceptance criteria, smoke tests, and regression risks.
|
|
46
46
|
|
|
47
|
-
Use `
|
|
47
|
+
Use `pr-orchestrator` to confirm that the deployed scope matches the approved PR scope.
|
|
48
48
|
|
|
49
49
|
Use `docs-writer` when deployment instructions, release notes, or runbooks need documentation.
|
|
50
50
|
|
|
@@ -184,7 +184,7 @@ Examples:
|
|
|
184
184
|
| Nuxt Dashboard | `vue-nuxt`, `vue-nuxt`, `frontend-implementer`, `build-and-validate` |
|
|
185
185
|
| WordPress | `wordpress-engineer`, `docs-writer`, `build-and-validate`, `tester` |
|
|
186
186
|
| Testing automation | `tester`, `build-and-validate` |
|
|
187
|
-
| Prompt/system work | `token-economy`, `opencode-agent-design`, `
|
|
187
|
+
| Prompt/system work | `token-economy`, `opencode-agent-design`, `pr-orchestrator`, `docs-writer` |
|
|
188
188
|
| Release flow | `deploy-engineer`, `build-and-validate` |
|
|
189
189
|
|
|
190
190
|
Select one primary skill for the current task. Add supporting skills only when they improve the result.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Branch Cleanup Runbook
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Keep local and remote branches clean after each merged PR.
|
|
6
|
+
|
|
7
|
+
This reduces confusion, avoids stale references, and keeps the repository focused on active work.
|
|
8
|
+
|
|
9
|
+
## When to use
|
|
10
|
+
|
|
11
|
+
- After merging any PR.
|
|
12
|
+
- At the end of a feature/fix cycle.
|
|
13
|
+
- Before starting a new work item.
|
|
14
|
+
|
|
15
|
+
## Prerequisites
|
|
16
|
+
|
|
17
|
+
- Your latest PR is already merged.
|
|
18
|
+
- You have no uncommitted local changes.
|
|
19
|
+
|
|
20
|
+
Check:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
git status -sb
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Standard cleanup workflow
|
|
27
|
+
|
|
28
|
+
1) Switch to main and sync:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
git switch main
|
|
32
|
+
git pull origin main
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
1) Delete merged local work branch:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
git branch -d <type>/<short-slug>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
1) Delete remote work branch:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
git push origin --delete <type>/<short-slug>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
1) Prune stale remote references:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
git fetch -p origin
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
1) Confirm final branch state:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
git branch -a
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Expected result:
|
|
60
|
+
|
|
61
|
+
- Local: only `main` (or only currently active work branch + `main`)
|
|
62
|
+
- Remote: only active branches that still matter
|
|
63
|
+
|
|
64
|
+
## Optional one-line cleanup (local only)
|
|
65
|
+
|
|
66
|
+
Delete all local branches except `main`:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
git for-each-ref --format='%(refname:short)' refs/heads | while read b; do if [ "$b" != "main" ]; then git branch -D "$b"; fi; done
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Use with care: this force-deletes local branches.
|
|
73
|
+
|
|
74
|
+
## Safety rules
|
|
75
|
+
|
|
76
|
+
- Do not delete `main`.
|
|
77
|
+
- Do not delete branches with unmerged work unless explicitly approved.
|
|
78
|
+
- Prefer `git branch -d` (safe) before `-D` (force).
|
|
79
|
+
|
|
80
|
+
## Troubleshooting
|
|
81
|
+
|
|
82
|
+
### "remote ref does not exist"
|
|
83
|
+
|
|
84
|
+
Cause: the remote branch was already deleted.
|
|
85
|
+
|
|
86
|
+
Action:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
git fetch -p origin
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Branch still appears after deletion
|
|
93
|
+
|
|
94
|
+
Cause: stale local remote-tracking reference.
|
|
95
|
+
|
|
96
|
+
Action:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
git fetch -p origin
|
|
100
|
+
git branch -a
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Compliance checklist
|
|
104
|
+
|
|
105
|
+
- [ ] PR merged
|
|
106
|
+
- [ ] Local work branch deleted
|
|
107
|
+
- [ ] Remote work branch deleted
|
|
108
|
+
- [ ] Stale refs pruned
|
|
109
|
+
- [ ] `git branch -a` verified
|
|
@@ -28,7 +28,7 @@ Use this runbook when:
|
|
|
28
28
|
│ └── SKILL.md
|
|
29
29
|
├── build-and-validate/
|
|
30
30
|
│ └── SKILL.md
|
|
31
|
-
├──
|
|
31
|
+
├── pr-orchestrator/
|
|
32
32
|
│ └── SKILL.md
|
|
33
33
|
├── deploy-engineer/
|
|
34
34
|
│ └── SKILL.md
|
|
@@ -60,9 +60,9 @@ Use this as the default auto-load map for daily work.
|
|
|
60
60
|
|
|
61
61
|
| Agent role | Auto-loaded primary skills | Contextual skills |
|
|
62
62
|
| ---------- | -------------------------- | ----------------- |
|
|
63
|
-
| `planner` | `product-manager`, `tech-lead`, `
|
|
64
|
-
| `implementer` | `
|
|
65
|
-
| `reviewer` | `tester`, `
|
|
63
|
+
| `planner` | `product-manager`, `tech-lead`, `pr-orchestrator` | `napkin` when decisions should be preserved across sprints |
|
|
64
|
+
| `implementer` | `pr-orchestrator`, `tester`, plus one implementer skill (`frontend-implementer` or `backend-implementer`) | `interface-design` for UI/UX refinement tasks |
|
|
65
|
+
| `reviewer` | `tester`, `pr-orchestrator` | `interface-design` when reviewing design/system consistency |
|
|
66
66
|
| `validator` | `build-and-validate`, `tester` | `deploy-engineer` for deploy-readiness checks |
|
|
67
67
|
| `release-manager` | `deploy-engineer` | `napkin` when release lessons should be persisted |
|
|
68
68
|
|
|
@@ -84,12 +84,12 @@ Policy:
|
|
|
84
84
|
| Review a functional spec | `tester` | `product-manager` |
|
|
85
85
|
| Create a technical plan | `tech-lead` | `build-and-validate`, `tester` |
|
|
86
86
|
| Review a technical plan | `tech-lead` | `tester` |
|
|
87
|
-
| Break work into PRs | `
|
|
88
|
-
| Implement frontend work | `frontend-implementer` | `
|
|
89
|
-
| Implement backend work | `backend-implementer` | `
|
|
87
|
+
| Break work into PRs | `pr-orchestrator` | `tech-lead`, `tester` |
|
|
88
|
+
| Implement frontend work | `frontend-implementer` | `pr-orchestrator`, `tester` |
|
|
89
|
+
| Implement backend work | `backend-implementer` | `pr-orchestrator`, `tester` |
|
|
90
90
|
| Write or update documentation | `docs-writer` | `tester` |
|
|
91
91
|
| Validate build/test commands | `build-and-validate` | `tester` |
|
|
92
|
-
| Review implemented PR | `tester` | `build-and-validate`, `
|
|
92
|
+
| Review implemented PR | `tester` | `build-and-validate`, `pr-orchestrator` |
|
|
93
93
|
| Fix validation failures | `build-and-validate` | `tester`, relevant implementer |
|
|
94
94
|
| Apply UI/design improvements | `frontend-implementer` | `tester`, `docs-writer` |
|
|
95
95
|
| Audit SEO/AEO/GEO visibility | `seo-audit` | `tester`, `docs-writer` |
|
|
@@ -133,7 +133,7 @@ Best for:
|
|
|
133
133
|
|
|
134
134
|
Do not use as the primary skill for writing all code unless explicitly requested.
|
|
135
135
|
|
|
136
|
-
### `
|
|
136
|
+
### `pr-orchestrator`
|
|
137
137
|
|
|
138
138
|
Use for PR discipline.
|
|
139
139
|
|
|
@@ -341,7 +341,7 @@ Use:
|
|
|
341
341
|
|
|
342
342
|
```txt
|
|
343
343
|
prompts/04-breakdown-prs.md
|
|
344
|
-
.agents/skills/
|
|
344
|
+
.agents/skills/pr-orchestrator/SKILL.md
|
|
345
345
|
```
|
|
346
346
|
|
|
347
347
|
Supporting skills:
|
|
@@ -382,7 +382,7 @@ Choose one primary implementer:
|
|
|
382
382
|
Supporting skills:
|
|
383
383
|
|
|
384
384
|
```txt
|
|
385
|
-
.agents/skills/
|
|
385
|
+
.agents/skills/pr-orchestrator/SKILL.md
|
|
386
386
|
.agents/skills/tester/SKILL.md
|
|
387
387
|
```
|
|
388
388
|
|
|
@@ -408,7 +408,7 @@ Supporting skills:
|
|
|
408
408
|
|
|
409
409
|
```txt
|
|
410
410
|
.agents/skills/build-and-validate/SKILL.md
|
|
411
|
-
.agents/skills/
|
|
411
|
+
.agents/skills/pr-orchestrator/SKILL.md
|
|
412
412
|
```
|
|
413
413
|
|
|
414
414
|
Goal:
|
|
@@ -500,7 +500,7 @@ Skill chaining means using multiple skills in sequence, not all at once.
|
|
|
500
500
|
Good sequence:
|
|
501
501
|
|
|
502
502
|
```txt
|
|
503
|
-
product-manager → tester → tech-lead →
|
|
503
|
+
product-manager → tester → tech-lead → pr-orchestrator → implementer → tester → build-and-validate
|
|
504
504
|
```
|
|
505
505
|
|
|
506
506
|
Bad sequence:
|
|
@@ -574,7 +574,7 @@ frontend-implementer
|
|
|
574
574
|
Supporting:
|
|
575
575
|
|
|
576
576
|
```txt
|
|
577
|
-
|
|
577
|
+
pr-orchestrator
|
|
578
578
|
tester
|
|
579
579
|
```
|
|
580
580
|
|
|
@@ -596,7 +596,7 @@ Is the expected behavior defined but the technical path unclear?
|
|
|
596
596
|
└── Use tech-lead.
|
|
597
597
|
|
|
598
598
|
Is the work too large or needs PR planning?
|
|
599
|
-
└── Use
|
|
599
|
+
└── Use pr-orchestrator.
|
|
600
600
|
|
|
601
601
|
Is the task frontend implementation?
|
|
602
602
|
└── Use frontend-implementer.
|
|
@@ -637,7 +637,7 @@ Risk:
|
|
|
637
637
|
Better:
|
|
638
638
|
|
|
639
639
|
```md
|
|
640
|
-
Use `prompts/04-breakdown-prs.md` with `
|
|
640
|
+
Use `prompts/04-breakdown-prs.md` with `pr-orchestrator` to split this feature into safe PRs.
|
|
641
641
|
```
|
|
642
642
|
|
|
643
643
|
### Implementation before requirement
|
|
@@ -27,6 +27,28 @@ This split prevents accidental automated npm publishes while keeping semantic-re
|
|
|
27
27
|
4. Require `NPM_TOKEN` secret for real publish.
|
|
28
28
|
5. Do not publish if repository state, version intent, or release notes are unclear.
|
|
29
29
|
|
|
30
|
+
## Local terminal vs GitHub Actions authentication
|
|
31
|
+
|
|
32
|
+
`NPM_TOKEN` configured in GitHub secrets applies only to GitHub Actions jobs. It does not authenticate local terminal publish commands.
|
|
33
|
+
|
|
34
|
+
- If local `npm publish` fails with `E401` or `E404`, this can still be expected even when CI publish works.
|
|
35
|
+
- Prefer the workflow path (`.github/workflows/publish-npm.yml`) as the source of truth for production publish.
|
|
36
|
+
|
|
37
|
+
Quick checks:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Local auth check (optional)
|
|
41
|
+
npm whoami
|
|
42
|
+
|
|
43
|
+
# Registry verification after CI publish
|
|
44
|
+
npm view @williambeto/ai-workflow versions --json --registry https://registry.npmjs.org
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Expected behavior:
|
|
48
|
+
|
|
49
|
+
- Local may fail if terminal auth is missing.
|
|
50
|
+
- CI publish should succeed when `secrets.NPM_TOKEN` is valid.
|
|
51
|
+
|
|
30
52
|
## Pre-publish checklist
|
|
31
53
|
|
|
32
54
|
- [ ] `package.json` version is intentional.
|
|
@@ -107,7 +107,7 @@ Each workflow step has a recommended prompt and specialist skill:
|
|
|
107
107
|
| Create the requirement | `prompts/01-create-requirement.md` | `product-manager` |
|
|
108
108
|
| Create the specification | `prompts/02-create-spec.md` | `product-manager` + `tester` |
|
|
109
109
|
| Create the technical plan | `prompts/03-create-tech-plan.md` | `tech-lead` |
|
|
110
|
-
| Break work into PRs | `prompts/04-breakdown-prs.md` | `
|
|
110
|
+
| Break work into PRs | `prompts/04-breakdown-prs.md` | `pr-orchestrator` |
|
|
111
111
|
| Implement PR 1 | `prompts/05-implement-pr.md` | Frontend/backend/docs/deploy implementer |
|
|
112
112
|
| Review and fix | `prompts/06-review-and-fix.md` | `tester` |
|
|
113
113
|
| Validate | `prompts/08-validate.md` | `tester` + `build-and-validate` |
|
|
@@ -182,7 +182,7 @@ Split a technical plan into small, reviewable, incremental pull requests that pr
|
|
|
182
182
|
|
|
183
183
|
### Key references
|
|
184
184
|
|
|
185
|
-
- `.agents/skills/
|
|
185
|
+
- `.agents/skills/pr-orchestrator/SKILL.md`
|
|
186
186
|
- `schemas/pr-breakdown.schema.json`
|
|
187
187
|
- `harness/workflows/requirement-to-pr.md`
|
|
188
188
|
|
|
@@ -240,7 +240,7 @@ Review an implemented PR for correctness, scope compliance, regression risk, and
|
|
|
240
240
|
### Key references
|
|
241
241
|
|
|
242
242
|
- `.agents/skills/tester/SKILL.md`
|
|
243
|
-
- `.agents/skills/
|
|
243
|
+
- `.agents/skills/pr-orchestrator/SKILL.md`
|
|
244
244
|
- `AGENTS.md` (severity model, finding types)
|
|
245
245
|
|
|
246
246
|
---
|
|
@@ -373,9 +373,9 @@ Adapt the generic workflow to a specific technology stack using the variants sys
|
|
|
373
373
|
| Requirement | `product-manager` | `docs-writer`, `tester` |
|
|
374
374
|
| Specification | `product-manager` | `tester`, `docs-writer` |
|
|
375
375
|
| Technical Plan | `tech-lead` | `build-and-validate`, `tester` |
|
|
376
|
-
| PR Breakdown | `
|
|
377
|
-
| Implementation | `frontend-implementer` or `backend-implementer` | `
|
|
378
|
-
| Review | `tester` | `build-and-validate`, `
|
|
376
|
+
| PR Breakdown | `pr-orchestrator` | `tech-lead`, `tester` |
|
|
377
|
+
| Implementation | `frontend-implementer` or `backend-implementer` | `pr-orchestrator`, `tester` |
|
|
378
|
+
| Review | `tester` | `build-and-validate`, `pr-orchestrator` |
|
|
379
379
|
| Validation | `tester` | `build-and-validate` |
|
|
380
380
|
| Deployment | `deploy-engineer` | `build-and-validate`, `tester` |
|
|
381
381
|
|
|
@@ -42,7 +42,7 @@ Use the relevant skill depending on the task.
|
|
|
42
42
|
```txt
|
|
43
43
|
.agents/skills/product-manager/SKILL.md
|
|
44
44
|
.agents/skills/tech-lead/SKILL.md
|
|
45
|
-
.agents/skills/
|
|
45
|
+
.agents/skills/pr-orchestrator/SKILL.md
|
|
46
46
|
.agents/skills/frontend-implementer/SKILL.md
|
|
47
47
|
.agents/skills/backend-implementer/SKILL.md
|
|
48
48
|
.agents/skills/tester/SKILL.md
|
|
@@ -55,7 +55,7 @@ Use the relevant skill depending on the task.
|
|
|
55
55
|
|
|
56
56
|
- Use `product-manager` to clarify requirements, scope, users, outcomes, and acceptance criteria.
|
|
57
57
|
- Use `tech-lead` to create technical plans, identify architecture boundaries, risks, and trade-offs.
|
|
58
|
-
- Use `
|
|
58
|
+
- Use `pr-orchestrator` to plan, scope, summarize, and review pull requests.
|
|
59
59
|
- Use `frontend-implementer` for UI, component, state, routing, styling, accessibility, and frontend API integration work.
|
|
60
60
|
- Use `backend-implementer` for APIs, services, repositories, persistence, validation, authentication, authorization, and backend integrations.
|
|
61
61
|
- Use `tester` for acceptance criteria validation, regression review, edge cases, and final approval checks.
|