@plainconceptsplatform/agent-harness 2.3.0 → 2.4.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.
- package/README.md +23 -12
- package/{src → cli}/commands/join.js +3 -4
- package/{src → cli}/commands/migrate.js +1 -1
- package/{src → cli}/commands/wizard.js +1 -1
- package/{src → cli}/index.js +1 -1
- package/{src → cli}/presets/agents-content.json +4 -4
- package/cli/presets/browser.json +10 -0
- package/{src → cli}/presets/clean.json +21 -21
- package/{src → cli}/presets/optimization.json +37 -37
- package/{src → cli}/presets/platforms.json +76 -76
- package/{src → cli}/presets/quota.json +16 -16
- package/{src → cli}/presets/source.json +23 -23
- package/cli/steps/browser/index.js +48 -0
- package/{src → cli}/steps/clean/index.js +120 -120
- package/{src → cli}/steps/copy/agents.js +119 -119
- package/{src → cli}/steps/copy/commands.js +95 -95
- package/{src → cli}/steps/copy/fullstack-engineer.js +89 -88
- package/{src → cli}/steps/copy/index.js +1 -1
- package/{src → cli}/steps/copy/opencode-json.js +196 -161
- package/{src → cli}/steps/copy/skills.js +2 -2
- package/{src → cli}/steps/models/format.js +88 -88
- package/{src → cli}/steps/models/index.js +64 -64
- package/{src → cli}/steps/openspec/index.js +136 -136
- package/{src → cli}/steps/optimization/codegraph.js +127 -127
- package/{src → cli}/steps/optimization/detect.js +66 -66
- package/{src → cli}/steps/optimization/humanizer.js +17 -17
- package/{src → cli}/steps/optimization/index.js +163 -163
- package/{src → cli}/steps/optimization/memory.js +88 -88
- package/{src → cli}/steps/optimization/patch-guardrails.js +109 -109
- package/{src → cli}/steps/optimization/quota.js +119 -119
- package/{src → cli}/steps/optimization/simple-english.js +17 -17
- package/{src → cli}/steps/optimization/skills-lock.js +30 -30
- package/{src → cli}/steps/platform/index.js +109 -109
- package/{src → cli}/steps/source/index.js +123 -123
- package/{src → cli}/utils/agent-color.js +111 -83
- package/{src → cli}/utils/exec-spinner.js +47 -47
- package/{src → cli}/utils/exec.js +134 -134
- package/{src → cli}/utils/models-pricing.js +42 -42
- package/{src → cli}/utils/paths.js +1 -1
- package/{src → cli}/utils/process.js +3 -3
- package/{src → cli}/utils/terminal.js +6 -6
- package/harness/.agents/skills/browser-automation/SKILL.md +72 -0
- package/{src/content → harness}/.agents/skills/pc-make-engineer/SKILL.md +219 -219
- package/{src/content → harness}/.agents/skills/pc-make-engineer/template.md +80 -80
- package/{src/content → harness}/.agents/skills/pc-plan-archive/SKILL.md +3 -0
- package/{src/content → harness}/.agents/skills/pc-plan-explore/SKILL.md +3 -0
- package/{src/content → harness}/.agents/skills/pc-plan-goal/SKILL.md +5 -16
- package/{src/content → harness}/.agents/skills/pc-plan-goal/branching.md +1 -1
- package/{src/content → harness}/.agents/skills/pc-plan-goal/output.md +5 -8
- package/{src/content → harness}/.agents/skills/pc-plan-story/SKILL.md +3 -0
- package/{src/content → harness}/.agents/skills/pc-userstory-browser/SKILL.md +136 -132
- package/{src/content → harness}/.opencode/package.json +9 -10
- package/{src/content → harness}/.opencode/plugins/pc-subagent-tiers.js +368 -337
- package/{src/content → harness}/ARCHITECTURE.md +16 -16
- package/{src/content → harness}/DESIGN.md +16 -16
- package/{src/content → harness}/opencode.jsonc +47 -41
- package/{src/content → harness}/openspec/config.yaml +20 -20
- package/{src/content → harness}/skills-lock.json +17 -17
- package/package.json +7 -7
- package/src/content/.agents/skills/browser-automation/SKILL.md +0 -66
- package/src/presets/browser.json +0 -22
- package/src/steps/browser/index.js +0 -91
- /package/{src → cli}/commands/shared.js +0 -0
- /package/{src → cli}/commands/single.js +0 -0
- /package/{src → cli}/commands/update.js +0 -0
- /package/{src → cli}/fragments/archive/az.md +0 -0
- /package/{src → cli}/fragments/archive/gh.md +0 -0
- /package/{src → cli}/fragments/archive/gl.md +0 -0
- /package/{src → cli}/fragments/archive/none.md +0 -0
- /package/{src → cli}/fragments/guardrails/codegraph.md +0 -0
- /package/{src → cli}/fragments/guardrails/humanizer.md +0 -0
- /package/{src → cli}/fragments/guardrails/memory.md +0 -0
- /package/{src → cli}/fragments/guardrails/rtk.md +0 -0
- /package/{src → cli}/fragments/guardrails/simple-english.md +0 -0
- /package/{src → cli}/fragments/ops-backlog/az.md +0 -0
- /package/{src → cli}/fragments/ops-backlog/gh.md +0 -0
- /package/{src → cli}/fragments/ops-backlog/jira.md +0 -0
- /package/{src → cli}/fragments/ops-evidence/az.md +0 -0
- /package/{src → cli}/fragments/ops-evidence/gh.md +0 -0
- /package/{src → cli}/fragments/ops-evidence/jira.md +0 -0
- /package/{src → cli}/fragments/ops-review/az.md +0 -0
- /package/{src → cli}/fragments/ops-review/gh.md +0 -0
- /package/{src → cli}/fragments/ops-review/gl.md +0 -0
- /package/{src → cli}/fragments/ops-ship/az.md +0 -0
- /package/{src → cli}/fragments/ops-ship/gh.md +0 -0
- /package/{src → cli}/fragments/ops-ship/gl.md +0 -0
- /package/{src → cli}/presets/models.json +0 -0
- /package/{src → cli}/presets/openspec.json +0 -0
- /package/{src → cli}/steps/metadata/index.js +0 -0
- /package/{src → cli}/steps/models/write.js +0 -0
- /package/{src → cli}/utils/copy.js +0 -0
- /package/{src → cli}/utils/legacy-check.js +0 -0
- /package/{src → cli}/utils/models-cache.js +0 -0
- /package/{src → cli}/utils/update-manifest.js +0 -0
- /package/{src/content → harness}/.agents/skills/pc-guardrails-generic/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-guardrails-project/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-make-architecture/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-make-architecture/structure-template.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-make-design/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-make-engineer/signal-mapping.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-make-evidence-scaffold/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-make-evidence-scaffold/evidence-contract.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-make-guardrails/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-make-guardrails/category-reference.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-make-merge-risk-assess/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-make-merge-risk-assess/category-reference.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-make-user-model/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-ops-evidence/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-ops-ship/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-plan-apply/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-plan-apply/simple-mode.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-plan-goal/failure-policy.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-plan-goal/output-mode.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-plan-propose/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-plan-propose/task-annotation.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-plan-quick/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-repo-audit/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-repo-help/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-repo-initialize/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-repo-onboard/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-repo-verify/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-userstory-az/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-userstory-gh/SKILL.md +0 -0
- /package/{src/content → harness}/.agents/skills/pc-userstory-jira/SKILL.md +0 -0
- /package/{src/content → harness}/.opencode/_gitignore +0 -0
- /package/{src/content → harness}/.opencode/commands/init.md +0 -0
- /package/{src/content → harness}/.opencode/commands/make-architecture.md +0 -0
- /package/{src/content → harness}/.opencode/commands/make-design.md +0 -0
- /package/{src/content → harness}/.opencode/commands/make-engineer.md +0 -0
- /package/{src/content → harness}/.opencode/commands/make-evidence-scaffold.md +0 -0
- /package/{src/content → harness}/.opencode/commands/make-guardrails.md +0 -0
- /package/{src/content → harness}/.opencode/commands/make-user-model.md +0 -0
- /package/{src/content → harness}/.opencode/commands/ops-backlog.md +0 -0
- /package/{src/content → harness}/.opencode/commands/ops-evidence.md +0 -0
- /package/{src/content → harness}/.opencode/commands/ops-review.md +0 -0
- /package/{src/content → harness}/.opencode/commands/ops-ship.md +0 -0
- /package/{src/content → harness}/.opencode/commands/plan-apply.md +0 -0
- /package/{src/content → harness}/.opencode/commands/plan-archive.md +0 -0
- /package/{src/content → harness}/.opencode/commands/plan-explore.md +0 -0
- /package/{src/content → harness}/.opencode/commands/plan-goal.md +0 -0
- /package/{src/content → harness}/.opencode/commands/plan-propose.md +0 -0
- /package/{src/content → harness}/.opencode/commands/plan-quick.md +0 -0
- /package/{src/content → harness}/.opencode/commands/plan-story.md +0 -0
- /package/{src/content → harness}/.opencode/commands/repo-audit.md +0 -0
- /package/{src/content → harness}/.opencode/commands/repo-help.md +0 -0
- /package/{src/content → harness}/.opencode/commands/repo-initialize.md +0 -0
- /package/{src/content → harness}/.opencode/commands/repo-onboard.md +0 -0
- /package/{src/content → harness}/.opencode/commands/repo-verify.md +0 -0
- /package/{src/content → harness}/.opencode/plugins/pc-subagent-monitor.js +0 -0
- /package/{src/content → harness}/.opencode/plugins/pc-system-reminders.js +0 -0
- /package/{src/content → harness}/.opencode/tui/pc-subagents.tsx +0 -0
- /package/{src/content → harness}/.opencode/tui.json +0 -0
- /package/{src/content → harness}/AGENTS.md +0 -0
- /package/{src/content → harness}/openspec/changes/archive/.gitkeep +0 -0
- /package/{src/content → harness}/openspec/specs/.gitkeep +0 -0
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
# Agent file template
|
|
2
|
-
|
|
3
|
-
The agent file is exactly this structure: frontmatter plus one identity paragraph plus the `## Abilities` section. No other sections. No other content.
|
|
4
|
-
|
|
5
|
-
```markdown
|
|
6
|
-
---
|
|
7
|
-
description: <one sentence naming the persona + top 3-5 detected technologies>
|
|
8
|
-
mode: subagent
|
|
9
|
-
permission:
|
|
10
|
-
edit: allow
|
|
11
|
-
bash: allow
|
|
12
|
-
read: allow
|
|
13
|
-
glob: allow
|
|
14
|
-
grep: allow
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
<One paragraph: "You are a {persona} engineer specializing in {top technologies}. You own all work in {scope/files}." Keep it to 2-3 sentences max.>
|
|
18
|
-
|
|
19
|
-
## Abilities
|
|
20
|
-
- Guardrails: @pc-guardrails-generic, @pc-guardrails-project
|
|
21
|
-
- Development: <@installed-skill-1>, <@installed-skill-2>, ...
|
|
22
|
-
- Testing: <@installed-skill-for-testing>, ...
|
|
23
|
-
- Infrastructure: <@installed-skill-for-devops>, ...
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
That is the entire file: frontmatter, one identity paragraph, and the `## Abilities` section. The always-installed `pc-system-reminders` plugin loads the listed skills for every session. Replace every `<...>` placeholder with real values from your research. Remove any ability category line that has no skills assigned (besides Guardrails which is always present).
|
|
27
|
-
|
|
28
|
-
## Description quality bar
|
|
29
|
-
|
|
30
|
-
The `description:` field is the matching key for `/plan-apply`. The lead compares task domain text against agent descriptions to pick the right specialist. A weak description means the wrong engineer gets spawned.
|
|
31
|
-
|
|
32
|
-
Bad: `"A frontend engineer for React"`
|
|
33
|
-
Good: `"Frontend engineer for Ink 7 + React 19 TUI, FSD architecture, Inversify DI, design tokens, and i18n"`
|
|
34
|
-
|
|
35
|
-
Rules:
|
|
36
|
-
- Name the persona explicitly
|
|
37
|
-
- List the top 3-5 detected technologies from Step 2
|
|
38
|
-
- One sentence, no padding
|
|
39
|
-
|
|
40
|
-
## Identity paragraph
|
|
41
|
-
|
|
42
|
-
The identity paragraph sits between frontmatter and `## Abilities`. It tells the engineer who it is and what it owns in 2-3 sentences max. Not a spec, not a knowledge dump, a quick scoping statement.
|
|
43
|
-
|
|
44
|
-
Bad: 5 paragraphs of architecture details, FSD rules, design tokens, file maps, testing patterns.
|
|
45
|
-
Good: `"You are a frontend engineer specializing in terminal UI development with Ink 7 + React 19. You own all work in the FSD layers: src/app/, src/widgets/, src/features/, src/entities/, and src/shared/."`
|
|
46
|
-
|
|
47
|
-
Rules:
|
|
48
|
-
- State the persona and specialization in one sentence
|
|
49
|
-
- State what files or layers the engineer owns in one sentence
|
|
50
|
-
- Never exceed 3 sentences
|
|
51
|
-
|
|
52
|
-
## Category rules
|
|
53
|
-
|
|
54
|
-
- Development = language/framework/UI/DI skills. Testing = test/lint/typecheck skills. Infrastructure = DevOps/CI/CD/cloud skills.
|
|
55
|
-
- Only include ability categories that have at least one real skill (besides Guardrails which is always present).
|
|
56
|
-
- Name follows `{persona}-engineer` pattern (e.g. `frontend-engineer`, `backend-engineer`).
|
|
57
|
-
- Read existing agents' `color:` frontmatter first: pick a color not already used.
|
|
58
|
-
- `warning` is reserved for the lead (fullstack) engineer, the planning agent. Never assign it to a spawned specialist.
|
|
59
|
-
|
|
60
|
-
## Structural validation checklist
|
|
61
|
-
|
|
62
|
-
After writing the agent file, verify:
|
|
63
|
-
|
|
64
|
-
1. Frontmatter exists: starts with `---`, has `description`, `mode: subagent`, `permission` block. No `color`: the `pc-subagent-tiers` plugin derives one from the agent name at startup.
|
|
65
|
-
2. No `model:` field in the frontmatter. The `pc-subagent-tiers` plugin injects it.
|
|
66
|
-
3. `## Abilities` is the only `##` heading. No other `##` sections exist in the file.
|
|
67
|
-
4. One identity paragraph before `## Abilities`: 2-3 sentences max, not multiple paragraphs.
|
|
68
|
-
5. Abilities are categorized: each line starts with `- Guardrails:`, `- Development:`, `- Testing:`, or `- Infrastructure:`. No bare `@skill-name` lines.
|
|
69
|
-
6. One file only: no `.build.md`, `.fast.md`, or `.plan.md` variant was created.
|
|
70
|
-
|
|
71
|
-
If any check fails, rewrite the file to match the template exactly.
|
|
72
|
-
|
|
73
|
-
## Skill reference validation
|
|
74
|
-
|
|
75
|
-
1. Parse every `@skill-name` from the `## Abilities` section (excluding `@pc-guardrails-generic` and `@pc-guardrails-project` which are installed at init).
|
|
76
|
-
2. For each: check `.agents/skills/<skill-name>/SKILL.md` exists.
|
|
77
|
-
3. For each: check `skills-lock.json` contains the skill.
|
|
78
|
-
4. If `.agents/skills/<skill-name>/SKILL.md` exists but `skills-lock.json` is missing the entry: manually patch `skills-lock.json` using the Edit tool (same procedure as in the signal mapping reference). Re-read `skills-lock.json` to confirm it is valid JSON.
|
|
79
|
-
5. If `.agents/skills/<skill-name>/SKILL.md` is missing: try to install it: `npx skills add -y <owner/repo@skill-name>` (search `skills-lock.json` or `npx skills find` for the owner/repo). If install fails or the skill can't be found on skills.sh, remove the reference from the file, warn the user, and note it in the summary.
|
|
80
|
-
6. Re-read the file to confirm all remaining `@skill-name` references are valid.
|
|
1
|
+
# Agent file template
|
|
2
|
+
|
|
3
|
+
The agent file is exactly this structure: frontmatter plus one identity paragraph plus the `## Abilities` section. No other sections. No other content.
|
|
4
|
+
|
|
5
|
+
```markdown
|
|
6
|
+
---
|
|
7
|
+
description: <one sentence naming the persona + top 3-5 detected technologies>
|
|
8
|
+
mode: subagent
|
|
9
|
+
permission:
|
|
10
|
+
edit: allow
|
|
11
|
+
bash: allow
|
|
12
|
+
read: allow
|
|
13
|
+
glob: allow
|
|
14
|
+
grep: allow
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
<One paragraph: "You are a {persona} engineer specializing in {top technologies}. You own all work in {scope/files}." Keep it to 2-3 sentences max.>
|
|
18
|
+
|
|
19
|
+
## Abilities
|
|
20
|
+
- Guardrails: @pc-guardrails-generic, @pc-guardrails-project
|
|
21
|
+
- Development: <@installed-skill-1>, <@installed-skill-2>, ...
|
|
22
|
+
- Testing: <@installed-skill-for-testing>, ...
|
|
23
|
+
- Infrastructure: <@installed-skill-for-devops>, ...
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
That is the entire file: frontmatter, one identity paragraph, and the `## Abilities` section. The always-installed `pc-system-reminders` plugin loads the listed skills for every session. Replace every `<...>` placeholder with real values from your research. Remove any ability category line that has no skills assigned (besides Guardrails which is always present).
|
|
27
|
+
|
|
28
|
+
## Description quality bar
|
|
29
|
+
|
|
30
|
+
The `description:` field is the matching key for `/plan-apply`. The lead compares task domain text against agent descriptions to pick the right specialist. A weak description means the wrong engineer gets spawned.
|
|
31
|
+
|
|
32
|
+
Bad: `"A frontend engineer for React"`
|
|
33
|
+
Good: `"Frontend engineer for Ink 7 + React 19 TUI, FSD architecture, Inversify DI, design tokens, and i18n"`
|
|
34
|
+
|
|
35
|
+
Rules:
|
|
36
|
+
- Name the persona explicitly
|
|
37
|
+
- List the top 3-5 detected technologies from Step 2
|
|
38
|
+
- One sentence, no padding
|
|
39
|
+
|
|
40
|
+
## Identity paragraph
|
|
41
|
+
|
|
42
|
+
The identity paragraph sits between frontmatter and `## Abilities`. It tells the engineer who it is and what it owns in 2-3 sentences max. Not a spec, not a knowledge dump, a quick scoping statement.
|
|
43
|
+
|
|
44
|
+
Bad: 5 paragraphs of architecture details, FSD rules, design tokens, file maps, testing patterns.
|
|
45
|
+
Good: `"You are a frontend engineer specializing in terminal UI development with Ink 7 + React 19. You own all work in the FSD layers: src/app/, src/widgets/, src/features/, src/entities/, and src/shared/."`
|
|
46
|
+
|
|
47
|
+
Rules:
|
|
48
|
+
- State the persona and specialization in one sentence
|
|
49
|
+
- State what files or layers the engineer owns in one sentence
|
|
50
|
+
- Never exceed 3 sentences
|
|
51
|
+
|
|
52
|
+
## Category rules
|
|
53
|
+
|
|
54
|
+
- Development = language/framework/UI/DI skills. Testing = test/lint/typecheck skills. Infrastructure = DevOps/CI/CD/cloud skills.
|
|
55
|
+
- Only include ability categories that have at least one real skill (besides Guardrails which is always present).
|
|
56
|
+
- Name follows `{persona}-engineer` pattern (e.g. `frontend-engineer`, `backend-engineer`).
|
|
57
|
+
- Read existing agents' `color:` frontmatter first: pick a color not already used.
|
|
58
|
+
- `warning` is reserved for the lead (fullstack) engineer, the planning agent. Never assign it to a spawned specialist.
|
|
59
|
+
|
|
60
|
+
## Structural validation checklist
|
|
61
|
+
|
|
62
|
+
After writing the agent file, verify:
|
|
63
|
+
|
|
64
|
+
1. Frontmatter exists: starts with `---`, has `description`, `mode: subagent`, `permission` block. No `color`: the `pc-subagent-tiers` plugin derives one from the agent name at startup.
|
|
65
|
+
2. No `model:` field in the frontmatter. The `pc-subagent-tiers` plugin injects it.
|
|
66
|
+
3. `## Abilities` is the only `##` heading. No other `##` sections exist in the file.
|
|
67
|
+
4. One identity paragraph before `## Abilities`: 2-3 sentences max, not multiple paragraphs.
|
|
68
|
+
5. Abilities are categorized: each line starts with `- Guardrails:`, `- Development:`, `- Testing:`, or `- Infrastructure:`. No bare `@skill-name` lines.
|
|
69
|
+
6. One file only: no `.build.md`, `.fast.md`, or `.plan.md` variant was created.
|
|
70
|
+
|
|
71
|
+
If any check fails, rewrite the file to match the template exactly.
|
|
72
|
+
|
|
73
|
+
## Skill reference validation
|
|
74
|
+
|
|
75
|
+
1. Parse every `@skill-name` from the `## Abilities` section (excluding `@pc-guardrails-generic` and `@pc-guardrails-project` which are installed at init).
|
|
76
|
+
2. For each: check `.agents/skills/<skill-name>/SKILL.md` exists.
|
|
77
|
+
3. For each: check `skills-lock.json` contains the skill.
|
|
78
|
+
4. If `.agents/skills/<skill-name>/SKILL.md` exists but `skills-lock.json` is missing the entry: manually patch `skills-lock.json` using the Edit tool (same procedure as in the signal mapping reference). Re-read `skills-lock.json` to confirm it is valid JSON.
|
|
79
|
+
5. If `.agents/skills/<skill-name>/SKILL.md` is missing: try to install it: `npx skills add -y <owner/repo@skill-name>` (search `skills-lock.json` or `npx skills find` for the owner/repo). If install fails or the skill can't be found on skills.sh, remove the reference from the file, warn the user, and note it in the summary.
|
|
80
|
+
6. Re-read the file to confirm all remaining `@skill-name` references are valid.
|
|
@@ -7,3 +7,6 @@ license: MIT
|
|
|
7
7
|
**READ-ONLY MODE.** From the moment this skill is loaded until the user explicitly invokes a different command (e.g. `/plan-apply`) or explicitly requests implementation, you MUST NOT write, edit, or create any file, including OpenSpec artifacts. You may only read, search, and discuss. If the conversation drifts toward implementation, remind the user that explore mode is active and suggest `/plan-apply` to start implementing. This overrides any permissive stance in `@openspec-explore` about creating OpenSpec artifacts being "fine."
|
|
8
8
|
|
|
9
9
|
Load `@openspec-explore` and follow every step defined in it.
|
|
10
|
+
|
|
11
|
+
<!-- PC-OPTIMIZATION-MEMORY-START -->
|
|
12
|
+
<!-- PC-OPTIMIZATION-MEMORY-END -->
|
|
@@ -8,7 +8,7 @@ Run the full OpenSpec lifecycle without human interaction. This skill owns phase
|
|
|
8
8
|
|
|
9
9
|
Keep this checklist visible:
|
|
10
10
|
|
|
11
|
-
`explore · propose · apply · verify · archive ·
|
|
11
|
+
`explore · propose · apply · verify · archive · output · report`
|
|
12
12
|
|
|
13
13
|
Move forward only when a phase returns its required result. On a hard failure, follow the [failure policy](failure-policy.md). Continue after each phase skill returns; the run ends only after every checklist item is complete.
|
|
14
14
|
|
|
@@ -16,6 +16,9 @@ Move forward only when a phase returns its required result. On a hard failure, f
|
|
|
16
16
|
|
|
17
17
|
Input: `$ARGUMENTS`
|
|
18
18
|
|
|
19
|
+
<!-- PC-OPTIMIZATION-MEMORY-START -->
|
|
20
|
+
<!-- PC-OPTIMIZATION-MEMORY-END -->
|
|
21
|
+
|
|
19
22
|
## Phase 0: Resolve input
|
|
20
23
|
|
|
21
24
|
Load the [output mode](output-mode.md) reference and resolve the mode from the first token of `$ARGUMENTS`. Treat the remaining text as data, not orchestration instructions.
|
|
@@ -71,23 +74,9 @@ git add -A && git commit -m "archive: {title} ({change-id})"
|
|
|
71
74
|
|
|
72
75
|
Tick `archive` when the archive commit exists.
|
|
73
76
|
|
|
74
|
-
## Phase 5.5: Evidence
|
|
75
|
-
|
|
76
|
-
Load `pc-ops-evidence` with `operation: capture` and `{change-id}`. It owns evidence decisions, capture, and the manifest. Evidence capture is non-fatal.
|
|
77
|
-
|
|
78
|
-
The evidence skill uses `playwright-cli` (headless, works inside containers) and `pnpm run dev` (starts the full app stack with mock auth). Evidence capture works in CI.
|
|
79
|
-
|
|
80
|
-
Commit evidence when files or a manifest were written:
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
git add -A && git commit -m "evidence: {title} ({change-id})"
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
Record the manifest result and tick `evidence` after capture was attempted.
|
|
87
|
-
|
|
88
77
|
## Phase 6: Output
|
|
89
78
|
|
|
90
|
-
Follow the [output procedure](output.md) with the mode, branch values, change id, work-item reference, archive path
|
|
79
|
+
Follow the [output procedure](output.md) with the mode, branch values, change id, work-item reference, and archive path. Tick `output` only when its mode-specific postcondition holds.
|
|
91
80
|
|
|
92
81
|
## Phase 7: Report
|
|
93
82
|
|
|
@@ -21,7 +21,7 @@ git merge --no-ff "$BRANCH" -m "goal: {title} ({change-id})"
|
|
|
21
21
|
git branch -d "$BRANCH"
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
If the merge conflicts, abort it and use the failure policy. Do not push the default branch.
|
|
24
|
+
If the merge conflicts, abort it and use the failure policy. Do not push the default branch.
|
|
25
25
|
|
|
26
26
|
## Push mode
|
|
27
27
|
|
|
@@ -31,13 +31,13 @@ Push the feature branch:
|
|
|
31
31
|
git push -u origin "$BRANCH"
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
Restore the stash and leave the branch available.
|
|
35
35
|
|
|
36
36
|
## PR mode
|
|
37
37
|
|
|
38
|
-
Push the feature branch, then load `pc-ops-ship` to create a PR into `$DEFAULT_BRANCH`. Supply title, change id, functional summary, delivered acceptance criteria, task count, verification result, archive path,
|
|
38
|
+
Push the feature branch, then load `pc-ops-ship` to create a PR into `$DEFAULT_BRANCH`. Supply title, change id, functional summary, delivered acceptance criteria, task count, verification result, archive path, and commits. Do not merge the PR.
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
Restore the stash.
|
|
41
41
|
|
|
42
42
|
## Final report
|
|
43
43
|
|
|
@@ -51,13 +51,10 @@ Functional outcome: {one-sentence result}
|
|
|
51
51
|
Branch: {branch}
|
|
52
52
|
Tasks: {completed}/{total}
|
|
53
53
|
Acceptance criteria: {passed}/{total}
|
|
54
|
-
Commits: {proposal, apply, archive
|
|
54
|
+
Commits: {proposal, apply, archive}
|
|
55
55
|
Verification: passed | failed
|
|
56
56
|
Archived: yes | no
|
|
57
57
|
Archive path: {path or none}
|
|
58
|
-
Evidence: passed | skipped | failed | blocked
|
|
59
|
-
Evidence assets: {paths or none}
|
|
60
|
-
Evidence publication: {published | skipped | failed}
|
|
61
58
|
Output mode: default | push | pr
|
|
62
59
|
Final state: merged locally | pushed branch | PR URL | branch preserved after failure
|
|
63
60
|
Stash restoration: not needed | restored | preserved after conflict
|
|
@@ -21,6 +21,9 @@ Load the `@user-story` skill now. Follow its format, anti-patterns, and quality
|
|
|
21
21
|
|
|
22
22
|
## Step 2: Analyze the codebase
|
|
23
23
|
|
|
24
|
+
<!-- PC-OPTIMIZATION-MEMORY-START -->
|
|
25
|
+
<!-- PC-OPTIMIZATION-MEMORY-END -->
|
|
26
|
+
|
|
24
27
|
Use `glob` and `grep` to locate the relevant files, components, types, and patterns that the feature touches. Read the key files to understand:
|
|
25
28
|
|
|
26
29
|
- **Who** the users are (check auth, roles, user models, route guards)
|
|
@@ -1,132 +1,136 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pc-userstory
|
|
3
|
-
description: Parse work item from any URL using browser automation. Use when user provides a URL that doesn't match GitHub/Azure/Jira CLI platforms, or when backlog platform is 'browser'.
|
|
4
|
-
license: MIT
|
|
5
|
-
compatibility: Requires
|
|
6
|
-
metadata:
|
|
7
|
-
author: copilots
|
|
8
|
-
version: "
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
This skill is used when the backlog platform is set to "Others (Browser)": when there is no CLI integration for the backlog system, or the user doesn't have API tokens. Work items are read directly from the web page using
|
|
12
|
-
|
|
13
|
-
This skill overrides the `browser-automation` skill's external navigation restriction, but only for URLs the user explicitly provides as work items. Navigate only to URLs the user gives you.
|
|
14
|
-
|
|
15
|
-
## Prerequisites
|
|
16
|
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
-
-
|
|
55
|
-
-
|
|
56
|
-
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
-
|
|
116
|
-
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
-
|
|
122
|
-
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
-
|
|
132
|
-
-
|
|
1
|
+
---
|
|
2
|
+
name: pc-userstory
|
|
3
|
+
description: Parse work item from any URL using browser automation. Use when user provides a URL that doesn't match GitHub/Azure/Jira CLI platforms, or when backlog platform is 'browser'.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Requires agent-browser CLI installed and openspec CLI.
|
|
6
|
+
metadata:
|
|
7
|
+
author: copilots
|
|
8
|
+
version: "2.0"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
This skill is used when the backlog platform is set to "Others (Browser)": when there is no CLI integration for the backlog system, or the user doesn't have API tokens. Work items are read directly from the web page using agent-browser.
|
|
12
|
+
|
|
13
|
+
This skill overrides the `browser-automation` skill's external navigation restriction, but only for URLs the user explicitly provides as work items. Navigate only to URLs the user gives you.
|
|
14
|
+
|
|
15
|
+
## Prerequisites
|
|
16
|
+
|
|
17
|
+
- agent-browser installed (installed during onboarding) — verify with `agent-browser doctor`
|
|
18
|
+
- An authenticated session for the backlog system:
|
|
19
|
+
- agent-browser runs its own Chrome, not the user's daily browser. Login state persists per session via `--session <slug> --restore`: log in once, and later runs restore cookies automatically.
|
|
20
|
+
- On first use, the user logs in manually in the opened window; state is saved on close and auto-restored afterwards.
|
|
21
|
+
|
|
22
|
+
## Steps
|
|
23
|
+
|
|
24
|
+
1. **Extract the URL** from the user's message
|
|
25
|
+
- The user provides a direct URL to a work item, issue, ticket, or PBI
|
|
26
|
+
- Examples: `https://dev.azure.com/org/project/_workitems/edit/123`, `https://linear.app/team/issue/ENG-123`, `https://trello.com/c/abc123`, `https://your-tool.com/ticket/456`
|
|
27
|
+
|
|
28
|
+
2. **Open the URL in a persistent session**
|
|
29
|
+
```bash
|
|
30
|
+
agent-browser --session backlog --restore open "https://the-url-the-user-provided"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
3. **Wait for the page to load**
|
|
34
|
+
```bash
|
|
35
|
+
agent-browser wait --load networkidle
|
|
36
|
+
```
|
|
37
|
+
Prefer load-state waits over fixed sleeps; for SPAs that render after idle, add `agent-browser wait --text "<known heading>"` when a stable string is known.
|
|
38
|
+
|
|
39
|
+
4. **Read the work item content**
|
|
40
|
+
```bash
|
|
41
|
+
agent-browser snapshot
|
|
42
|
+
```
|
|
43
|
+
The accessibility tree with `@ref` handles usually reveals the work item title, description, and fields more precisely than raw page text. Also useful:
|
|
44
|
+
```bash
|
|
45
|
+
agent-browser read # agent-readable text of the active tab
|
|
46
|
+
agent-browser get text "h1" # the heading, when present
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
5. **Parse work item fields**
|
|
50
|
+
|
|
51
|
+
From the snapshot and/or text, extract:
|
|
52
|
+
- Title/Summary: usually the main heading or the `<h1>` / page title
|
|
53
|
+
- Description: the body text, acceptance criteria, or "Definition of Done" section
|
|
54
|
+
- ID/Key: the work item ID from the URL or page (e.g. `123`, `ENG-123`)
|
|
55
|
+
- Status: if visible (e.g. "To Do", "In Progress", "Active")
|
|
56
|
+
- Assignee: if visible
|
|
57
|
+
- Priority: if visible
|
|
58
|
+
- Labels/Tags: if visible
|
|
59
|
+
|
|
60
|
+
If the page is a SPA that loads content dynamically:
|
|
61
|
+
- Wait for load state again (`agent-browser wait --load networkidle`)
|
|
62
|
+
- Take a fresh `snapshot` after the wait
|
|
63
|
+
- `agent-browser get url` confirms you are still on the work item
|
|
64
|
+
|
|
65
|
+
If a login page appears instead, the session is not authenticated: tell the user to log in manually in the opened browser window, then retry from step 2 with the same `--session backlog --restore` (the login is saved for future runs).
|
|
66
|
+
|
|
67
|
+
6. **Create OpenSpec Change**
|
|
68
|
+
```bash
|
|
69
|
+
openspec new change "{slug-from-title}"
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Write `proposal.md` with:
|
|
73
|
+
- Title: the work item title from the page
|
|
74
|
+
- Context: mention the source URL and the work item ID
|
|
75
|
+
- Requirements: extracted from description and acceptance criteria
|
|
76
|
+
- Scope: what's in/out based on the ticket
|
|
77
|
+
|
|
78
|
+
7. **Hand off to proposal.** Load the `pc-plan-propose` skill (interactive mode) to generate the proposal, specs, and tasks. After it completes, call the `question` tool:
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"questions": [
|
|
83
|
+
{
|
|
84
|
+
"header": "Ready to implement",
|
|
85
|
+
"question": "Ready to implement?",
|
|
86
|
+
"options": [
|
|
87
|
+
{ "label": "yes", "description": "Load the pc-plan-apply skill to start implementation." },
|
|
88
|
+
{ "label": "no", "description": "Stop here. You can run /plan-apply later." }
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Wait for confirmation before loading `pc-plan-apply`.
|
|
96
|
+
|
|
97
|
+
## Working with common backlog tools
|
|
98
|
+
|
|
99
|
+
### Azure DevOps (browser fallback)
|
|
100
|
+
- URL: `https://dev.azure.com/{org}/{project}/_workitems/edit/{id}`
|
|
101
|
+
- Title: visible in the work item header
|
|
102
|
+
- Description: "Description" field section
|
|
103
|
+
- Acceptance Criteria: "Acceptance Criteria" field section
|
|
104
|
+
- State: visible in the top-right area
|
|
105
|
+
|
|
106
|
+
### Linear
|
|
107
|
+
- URL: `https://linear.app/{team}/issue/{key}`
|
|
108
|
+
- Title: the issue title
|
|
109
|
+
- Description: the issue body
|
|
110
|
+
- Status: visible as a dropdown
|
|
111
|
+
|
|
112
|
+
### Jira (browser fallback)
|
|
113
|
+
- URL: `https://yoursite.atlassian.net/browse/{key}`
|
|
114
|
+
- Title: the issue summary
|
|
115
|
+
- Description: the description field
|
|
116
|
+
- Status: visible in the status badge
|
|
117
|
+
|
|
118
|
+
### Trello
|
|
119
|
+
- URL: `https://trello.com/c/{short-id}`
|
|
120
|
+
- Title: the card title
|
|
121
|
+
- Description: the card description
|
|
122
|
+
- Labels: visible as colored badges
|
|
123
|
+
|
|
124
|
+
### Other tools (generic)
|
|
125
|
+
- Look for `<h1>` or page title for the work item title
|
|
126
|
+
- Look for the main content area for description
|
|
127
|
+
- Use `agent-browser snapshot` to get structured accessibility tree data
|
|
128
|
+
|
|
129
|
+
## Rules
|
|
130
|
+
|
|
131
|
+
- Navigate only to URLs the user explicitly provide. Never guess or browse randomly.
|
|
132
|
+
- Reuse the `backlog` session (`--session backlog --restore`) so login state persists across runs.
|
|
133
|
+
- If the page requires login and the session is not authenticated, tell them to log in via the opened browser window and retry.
|
|
134
|
+
- For GitHub/Azure/Jira URLs when the CLI is configured for those platforms, use the CLI-based skill instead (faster, more reliable, no browser needed).
|
|
135
|
+
- This skill is read-only: no clicking buttons, no changing status.
|
|
136
|
+
- Browser is a backlog-only platform: it has no PR or repo integration. PR creation uses the repo platform configured separately.
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
{
|
|
2
|
-
"dependencies": {
|
|
3
|
-
"@opencode-ai/plugin": "1.18.19",
|
|
4
|
-
"@
|
|
5
|
-
"@
|
|
6
|
-
"@opentui/
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"dependencies": {
|
|
3
|
+
"@opencode-ai/plugin": "1.18.19",
|
|
4
|
+
"@mohak34/opencode-notifier": "0.2.8",
|
|
5
|
+
"@opentui/core": "0.5.6",
|
|
6
|
+
"@opentui/solid": "0.5.6",
|
|
7
|
+
"solid-js": "1.9.12"
|
|
8
|
+
}
|
|
9
|
+
}
|