@plainconceptsplatform/agent-harness 3.2.0 → 3.3.1
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/LICENSE +21 -21
- package/README.md +454 -452
- package/cli/commands/join.js +259 -259
- package/cli/commands/migrate.js +310 -310
- package/cli/commands/shared.js +27 -27
- package/cli/commands/single.js +79 -79
- package/cli/commands/update.js +121 -121
- package/cli/commands/wizard.js +134 -134
- package/cli/fragments/archive/az.md +97 -97
- package/cli/fragments/archive/gh.md +96 -96
- package/cli/fragments/archive/gl.md +96 -96
- package/cli/fragments/archive/none.md +75 -75
- package/cli/fragments/guardrails/codegraph.md +5 -5
- package/cli/fragments/guardrails/humanizer.md +4 -4
- package/cli/fragments/guardrails/memory.md +4 -4
- package/cli/fragments/guardrails/rtk.md +3 -3
- package/cli/fragments/guardrails/simple-english.md +4 -4
- package/cli/fragments/ops-backlog/az.md +28 -28
- package/cli/fragments/ops-backlog/gh.md +28 -28
- package/cli/fragments/ops-backlog/jira.md +28 -28
- package/cli/fragments/ops-review/az.md +62 -62
- package/cli/fragments/ops-review/gh.md +51 -51
- package/cli/fragments/ops-review/gl.md +55 -55
- package/cli/fragments/ops-ship/az.md +81 -81
- package/cli/fragments/ops-ship/gh.md +67 -67
- package/cli/fragments/ops-ship/gl.md +84 -84
- package/cli/index.js +116 -116
- package/cli/presets/agents-content.json +34 -34
- package/cli/presets/browser.json +10 -10
- package/cli/presets/clean.json +21 -21
- package/cli/presets/models.json +68 -68
- package/cli/presets/optimization.json +32 -32
- package/cli/presets/platforms.json +76 -76
- package/cli/presets/source.json +23 -23
- package/cli/steps/browser/index.js +48 -48
- package/cli/steps/clean/index.js +120 -120
- package/cli/steps/copy/agents.js +120 -120
- package/cli/steps/copy/commands.js +79 -79
- package/cli/steps/copy/fullstack-engineer.js +89 -89
- package/cli/steps/copy/index.js +88 -88
- package/cli/steps/copy/opencode-json.js +324 -324
- package/cli/steps/copy/skills.js +316 -307
- package/cli/steps/metadata/index.js +115 -115
- package/cli/steps/models/format.js +88 -88
- package/cli/steps/models/index.js +64 -64
- package/cli/steps/models/write.js +38 -38
- package/cli/steps/openspec/index.js +136 -136
- package/cli/steps/optimization/codegraph.js +141 -127
- package/cli/steps/optimization/detect.js +66 -66
- package/cli/steps/optimization/humanizer.js +17 -17
- package/cli/steps/optimization/index.js +158 -158
- package/cli/steps/optimization/memory.js +91 -88
- package/cli/steps/optimization/patch-guardrails.js +111 -111
- package/cli/steps/optimization/simple-english.js +17 -17
- package/cli/steps/optimization/skills-lock.js +30 -30
- package/cli/steps/platform/index.js +109 -109
- package/cli/steps/source/index.js +123 -123
- package/cli/utils/agent-color.js +111 -111
- package/cli/utils/copy.js +134 -134
- package/cli/utils/exec-spinner.js +47 -47
- package/cli/utils/exec.js +134 -134
- package/cli/utils/legacy-check.js +30 -30
- package/cli/utils/models-cache.js +58 -58
- package/cli/utils/models-pricing.js +42 -42
- package/cli/utils/paths.js +80 -80
- package/cli/utils/process.js +3 -3
- package/cli/utils/terminal.js +6 -6
- package/cli/utils/update-manifest.js +75 -75
- package/harness/.opencode/_gitignore +9 -9
- package/harness/.opencode/commands/init.md +5 -5
- package/harness/.opencode/commands/make-architecture.md +5 -5
- package/harness/.opencode/commands/make-design.md +5 -5
- package/harness/.opencode/commands/make-engineer.md +5 -5
- package/harness/.opencode/commands/make-guardrails.md +5 -5
- package/harness/.opencode/commands/make-user-model.md +5 -5
- package/harness/.opencode/commands/ops-backlog.md +10 -10
- package/harness/.opencode/commands/ops-review.md +8 -8
- package/harness/.opencode/commands/ops-ship.md +9 -9
- package/harness/.opencode/commands/plan-apply.md +9 -9
- package/harness/.opencode/commands/plan-archive.md +5 -5
- package/harness/.opencode/commands/plan-explore.md +9 -9
- package/harness/.opencode/commands/plan-goal.md +5 -5
- package/harness/.opencode/commands/plan-propose.md +9 -9
- package/harness/.opencode/commands/plan-quick.md +5 -5
- package/harness/.opencode/commands/plan-story.md +9 -9
- package/harness/.opencode/commands/repo-audit.md +5 -5
- package/harness/.opencode/commands/repo-help.md +5 -5
- package/harness/.opencode/commands/repo-initialize.md +5 -5
- package/harness/.opencode/commands/repo-onboard.md +5 -5
- package/harness/.opencode/commands/repo-verify.md +5 -5
- package/harness/.opencode/package.json +5 -5
- package/harness/.opencode/plugins/pc-subagent-monitor.js +184 -184
- package/harness/.opencode/plugins/pc-subagent-tiers.js +354 -354
- package/harness/.opencode/plugins/pc-system-reminders.js +386 -386
- package/harness/.opencode/scripts/check-diff.mjs +26 -7
- package/harness/.opencode/scripts/code-rules.mjs +288 -280
- package/harness/AGENTS.md +49 -49
- package/harness/ARCHITECTURE.md +13 -13
- package/harness/DESIGN.md +13 -13
- package/harness/opencode.jsonc +36 -36
- package/harness/openspec/config.yaml +20 -20
- package/harness/skills-lock.json +17 -17
- package/package.json +14 -12
- package/skills/README.md +18 -18
- package/skills/agent-harness-cli/SKILL.md +86 -86
- package/skills/browser-automation/SKILL.md +72 -72
- package/skills/pc-guardrails-project/SKILL.md +8 -8
- package/skills/pc-make-architecture/SKILL.md +32 -32
- package/skills/pc-make-architecture/structure-template.md +64 -64
- package/skills/pc-make-design/SKILL.md +45 -45
- package/skills/pc-make-engineer/SKILL.md +59 -59
- package/skills/pc-make-engineer/signal-mapping.md +53 -53
- package/skills/pc-make-engineer/template.md +36 -36
- package/skills/pc-make-guardrails/SKILL.md +44 -44
- package/skills/pc-make-guardrails/category-reference.md +112 -112
- package/skills/pc-make-merge-risk-assess/SKILL.md +70 -70
- package/skills/pc-make-merge-risk-assess/category-reference.md +114 -114
- package/skills/pc-make-user-model/SKILL.md +56 -56
- package/skills/pc-ops-ship/SKILL.md +22 -18
- package/skills/pc-plan-apply/SKILL.md +86 -86
- package/skills/pc-plan-apply/simple-mode.md +21 -21
- package/skills/pc-plan-archive/SKILL.md +66 -66
- package/skills/pc-plan-explore/SKILL.md +21 -21
- package/skills/pc-plan-goal/SKILL.md +91 -91
- package/skills/pc-plan-goal/branching.md +39 -39
- package/skills/pc-plan-goal/failure-policy.md +30 -30
- package/skills/pc-plan-goal/output-mode.md +10 -10
- package/skills/pc-plan-goal/output.md +71 -71
- package/skills/pc-plan-propose/SKILL.md +125 -125
- package/skills/pc-plan-propose/task-annotation.md +39 -39
- package/skills/pc-plan-quick/SKILL.md +46 -46
- package/skills/pc-plan-story/SKILL.md +93 -93
- package/skills/pc-repo-audit/SKILL.md +44 -44
- package/skills/pc-repo-help/SKILL.md +87 -87
- package/skills/pc-repo-initialize/SKILL.md +119 -119
- package/skills/pc-repo-onboard/SKILL.md +32 -32
- package/skills/pc-repo-verify/SKILL.md +150 -150
- package/skills/pc-userstory-az/SKILL.md +71 -71
- package/skills/pc-userstory-browser/SKILL.md +64 -64
- package/skills/pc-userstory-gh/SKILL.md +63 -63
- package/skills/pc-userstory-jira/SKILL.md +74 -74
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: browser-automation
|
|
3
|
-
description: Reliable, composable browser automation using agent-browser. Use when capturing screenshots of a locally running app, clicking UI elements, reading page content, or automating browser interactions on localhost.
|
|
4
|
-
license: MIT
|
|
5
|
-
compatibility: Requires agent-browser CLI installed (Rust binary) and running.
|
|
6
|
-
metadata:
|
|
7
|
-
author: copilots
|
|
8
|
-
version: "2.0"
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
This skill operates on `localhost` URLs only. Screenshots, clicks, typing, scrolling, and reads on locally running apps are in scope. External services (github.com, dev.azure.com, npmjs.com, etc.) are out of scope for browser tools.
|
|
12
|
-
|
|
13
|
-
The only exception: when the user selects "Others (Browser)" as their backlog platform during onboarding, the `pc-userstory` skill may navigate to work item URLs the user explicitly provides. That is the sole case where external navigation is permitted, and only to URLs the user explicitly gives you.
|
|
14
|
-
|
|
15
|
-
## Best-practice workflow
|
|
16
|
-
|
|
17
|
-
1. Open the page: `agent-browser open <url>` (launches its own Chrome; reuses the running daemon)
|
|
18
|
-
2. Take a snapshot: `agent-browser snapshot` to get the accessibility tree with `@ref` handles
|
|
19
|
-
3. Interact by ref: `agent-browser click @e2`, `agent-browser fill @e3 "text"`
|
|
20
|
-
4. Wait when needed: `agent-browser wait --load networkidle` or `agent-browser wait <selector>`
|
|
21
|
-
5. Confirm the result with a fresh `snapshot`, `get text`, or `screenshot`
|
|
22
|
-
|
|
23
|
-
Refs like `@e2` come from the last snapshot and go stale after page changes: retake the snapshot after navigation or dynamic updates before reusing them. When a click fails because another element covers the target (consent banner, modal), dismiss or interact with the covering element, then take a fresh snapshot before retrying.
|
|
24
|
-
|
|
25
|
-
## Tool access
|
|
26
|
-
|
|
27
|
-
- MCP tools (inside OpenCode): `agent_browser_open`, `agent_browser_snapshot`, `agent_browser_click`, `agent_browser_fill`, `agent_browser_type`, `agent_browser_wait_for_selector`, `agent_browser_screenshot`, `agent_browser_eval`, `agent_browser_close` — configured in `opencode.jsonc` with `--tools core`
|
|
28
|
-
- CLI (any agent, any host): every command below works identically via bash
|
|
29
|
-
- Diagnose the install: `agent-browser doctor`
|
|
30
|
-
|
|
31
|
-
## Selecting elements
|
|
32
|
-
|
|
33
|
-
- Prefer refs from `snapshot` (`@e1`, `@e2`, ...) over CSS selectors
|
|
34
|
-
- CSS selectors also work: `agent-browser click "#submit"`, `agent-browser fill "#email" "text"`
|
|
35
|
-
- Semantic locators: `agent-browser find role button click --name "Submit"`, `find text "Sign In" click`, `find label "Email" fill "value"`, `find testid <id> click`
|
|
36
|
-
- Native selects: `agent-browser select <sel> <value>`
|
|
37
|
-
|
|
38
|
-
## Reading state
|
|
39
|
-
|
|
40
|
-
- `agent-browser get text <sel>` — text content of an element
|
|
41
|
-
- `agent-browser get value <sel>` — input value
|
|
42
|
-
- `agent-browser snapshot` — structured accessibility tree (preferred for parsing)
|
|
43
|
-
- `agent-browser screenshot [path]` — `--full` for full page, `--annotate` for numbered labels
|
|
44
|
-
- `agent-browser read` — agent-readable markdown of the active tab (no Chrome launch for URL reads)
|
|
45
|
-
|
|
46
|
-
## Tabs and sessions
|
|
47
|
-
|
|
48
|
-
- `agent-browser tab` lists tabs with stable `t1`, `t2` ids; `tab new --label <name>` and `tab <label>` switch
|
|
49
|
-
- `agent-browser close` closes the browser; `close --all` closes every session
|
|
50
|
-
|
|
51
|
-
## CLI-first debugging
|
|
52
|
-
|
|
53
|
-
- `agent-browser doctor` — diagnose install, Chrome, and daemon state
|
|
54
|
-
- `agent-browser console` — view console messages; `agent-browser errors` — uncaught exceptions
|
|
55
|
-
- `agent-browser eval "<js>"` — run JavaScript in the page
|
|
56
|
-
- `agent-browser network requests --filter api` — inspect tracked requests
|
|
57
|
-
|
|
58
|
-
## Troubleshooting
|
|
59
|
-
|
|
60
|
-
- Stale ref: take a fresh `snapshot` after any navigation or DOM change
|
|
61
|
-
- Covered click: the error names the covering element; dismiss it, re-snapshot, retry
|
|
62
|
-
- Selector fails: confirm the content exists with `agent-browser get text` or a snapshot before retrying
|
|
63
|
-
- Daemon or Chrome issues: run `agent-browser doctor`
|
|
64
|
-
|
|
65
|
-
## Scope
|
|
66
|
-
|
|
67
|
-
- Screenshots of locally running app on `localhost` URLs: in scope
|
|
68
|
-
- Click, type, scroll, read on `localhost` pages: in scope
|
|
69
|
-
- Navigate to work item URLs the user explicitly provides (when backlog platform is "Others (Browser)"): in scope
|
|
70
|
-
- Navigate to external services for non-work-item purposes: out of scope
|
|
71
|
-
- DevOps or GitHub CLI operations via browser tools: out of scope
|
|
72
|
-
- Reading or modifying production systems via browser tools: out of scope
|
|
1
|
+
---
|
|
2
|
+
name: browser-automation
|
|
3
|
+
description: Reliable, composable browser automation using agent-browser. Use when capturing screenshots of a locally running app, clicking UI elements, reading page content, or automating browser interactions on localhost.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Requires agent-browser CLI installed (Rust binary) and running.
|
|
6
|
+
metadata:
|
|
7
|
+
author: copilots
|
|
8
|
+
version: "2.0"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
This skill operates on `localhost` URLs only. Screenshots, clicks, typing, scrolling, and reads on locally running apps are in scope. External services (github.com, dev.azure.com, npmjs.com, etc.) are out of scope for browser tools.
|
|
12
|
+
|
|
13
|
+
The only exception: when the user selects "Others (Browser)" as their backlog platform during onboarding, the `pc-userstory` skill may navigate to work item URLs the user explicitly provides. That is the sole case where external navigation is permitted, and only to URLs the user explicitly gives you.
|
|
14
|
+
|
|
15
|
+
## Best-practice workflow
|
|
16
|
+
|
|
17
|
+
1. Open the page: `agent-browser open <url>` (launches its own Chrome; reuses the running daemon)
|
|
18
|
+
2. Take a snapshot: `agent-browser snapshot` to get the accessibility tree with `@ref` handles
|
|
19
|
+
3. Interact by ref: `agent-browser click @e2`, `agent-browser fill @e3 "text"`
|
|
20
|
+
4. Wait when needed: `agent-browser wait --load networkidle` or `agent-browser wait <selector>`
|
|
21
|
+
5. Confirm the result with a fresh `snapshot`, `get text`, or `screenshot`
|
|
22
|
+
|
|
23
|
+
Refs like `@e2` come from the last snapshot and go stale after page changes: retake the snapshot after navigation or dynamic updates before reusing them. When a click fails because another element covers the target (consent banner, modal), dismiss or interact with the covering element, then take a fresh snapshot before retrying.
|
|
24
|
+
|
|
25
|
+
## Tool access
|
|
26
|
+
|
|
27
|
+
- MCP tools (inside OpenCode): `agent_browser_open`, `agent_browser_snapshot`, `agent_browser_click`, `agent_browser_fill`, `agent_browser_type`, `agent_browser_wait_for_selector`, `agent_browser_screenshot`, `agent_browser_eval`, `agent_browser_close` — configured in `opencode.jsonc` with `--tools core`
|
|
28
|
+
- CLI (any agent, any host): every command below works identically via bash
|
|
29
|
+
- Diagnose the install: `agent-browser doctor`
|
|
30
|
+
|
|
31
|
+
## Selecting elements
|
|
32
|
+
|
|
33
|
+
- Prefer refs from `snapshot` (`@e1`, `@e2`, ...) over CSS selectors
|
|
34
|
+
- CSS selectors also work: `agent-browser click "#submit"`, `agent-browser fill "#email" "text"`
|
|
35
|
+
- Semantic locators: `agent-browser find role button click --name "Submit"`, `find text "Sign In" click`, `find label "Email" fill "value"`, `find testid <id> click`
|
|
36
|
+
- Native selects: `agent-browser select <sel> <value>`
|
|
37
|
+
|
|
38
|
+
## Reading state
|
|
39
|
+
|
|
40
|
+
- `agent-browser get text <sel>` — text content of an element
|
|
41
|
+
- `agent-browser get value <sel>` — input value
|
|
42
|
+
- `agent-browser snapshot` — structured accessibility tree (preferred for parsing)
|
|
43
|
+
- `agent-browser screenshot [path]` — `--full` for full page, `--annotate` for numbered labels
|
|
44
|
+
- `agent-browser read` — agent-readable markdown of the active tab (no Chrome launch for URL reads)
|
|
45
|
+
|
|
46
|
+
## Tabs and sessions
|
|
47
|
+
|
|
48
|
+
- `agent-browser tab` lists tabs with stable `t1`, `t2` ids; `tab new --label <name>` and `tab <label>` switch
|
|
49
|
+
- `agent-browser close` closes the browser; `close --all` closes every session
|
|
50
|
+
|
|
51
|
+
## CLI-first debugging
|
|
52
|
+
|
|
53
|
+
- `agent-browser doctor` — diagnose install, Chrome, and daemon state
|
|
54
|
+
- `agent-browser console` — view console messages; `agent-browser errors` — uncaught exceptions
|
|
55
|
+
- `agent-browser eval "<js>"` — run JavaScript in the page
|
|
56
|
+
- `agent-browser network requests --filter api` — inspect tracked requests
|
|
57
|
+
|
|
58
|
+
## Troubleshooting
|
|
59
|
+
|
|
60
|
+
- Stale ref: take a fresh `snapshot` after any navigation or DOM change
|
|
61
|
+
- Covered click: the error names the covering element; dismiss it, re-snapshot, retry
|
|
62
|
+
- Selector fails: confirm the content exists with `agent-browser get text` or a snapshot before retrying
|
|
63
|
+
- Daemon or Chrome issues: run `agent-browser doctor`
|
|
64
|
+
|
|
65
|
+
## Scope
|
|
66
|
+
|
|
67
|
+
- Screenshots of locally running app on `localhost` URLs: in scope
|
|
68
|
+
- Click, type, scroll, read on `localhost` pages: in scope
|
|
69
|
+
- Navigate to work item URLs the user explicitly provides (when backlog platform is "Others (Browser)"): in scope
|
|
70
|
+
- Navigate to external services for non-work-item purposes: out of scope
|
|
71
|
+
- DevOps or GitHub CLI operations via browser tools: out of scope
|
|
72
|
+
- Reading or modifying production systems via browser tools: out of scope
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pc-guardrails-project
|
|
3
|
-
description: Project-specific guardrails extracted from ARCHITECTURE.md and project config files. Populated by /make-guardrails. Load this skill before implementing any change to understand boundaries, conventions, and constraints for this codebase.
|
|
4
|
-
license: MIT
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
<!-- This skill is a placeholder until /make-guardrails is run. -->
|
|
8
|
-
<!-- /make-guardrails will populate this file with project-specific rules. -->
|
|
1
|
+
---
|
|
2
|
+
name: pc-guardrails-project
|
|
3
|
+
description: Project-specific guardrails extracted from ARCHITECTURE.md and project config files. Populated by /make-guardrails. Load this skill before implementing any change to understand boundaries, conventions, and constraints for this codebase.
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- This skill is a placeholder until /make-guardrails is run. -->
|
|
8
|
+
<!-- /make-guardrails will populate this file with project-specific rules. -->
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pc-make-architecture
|
|
3
|
-
description: Generate or update ARCHITECTURE.md by analyzing the codebase structure. Safe to run at any time. Invoked by the /make-architecture command and the repo-initialize flow.
|
|
4
|
-
license: MIT
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Make Architecture
|
|
8
|
-
|
|
9
|
-
Write `ARCHITECTURE.md` in the project root from what the codebase actually contains, following the [structure template](structure-template.md).
|
|
10
|
-
|
|
11
|
-
## Rules
|
|
12
|
-
|
|
13
|
-
- Never regenerate over a file that carries a `<!-- Last updated:` footer. That footer is what makes the next run incremental, and a full rewrite silently drops whatever a human added by hand. Read the file first and pick the mode.
|
|
14
|
-
- Never analyze outside `.opencode/source-roots.json` when it exists, plus this repo's own docs and config.
|
|
15
|
-
- The footer is the file's last line, and it is the run's own ISO timestamp: `<!-- Last updated: <ISO date> -->`.
|
|
16
|
-
- Follow the writing rules and self-check defined in the [structure template](structure-template.md). After generating, re-read each section: if a section only describes what exists without stating what breaks when its constraints are violated, rewrite it as constraint-embedded prose or cut it. The file is not written until the self-check passes.
|
|
17
|
-
|
|
18
|
-
## Modes
|
|
19
|
-
|
|
20
|
-
| The existing file | Mode |
|
|
21
|
-
|---|---|
|
|
22
|
-
| Missing, or a placeholder with no real content | Generate |
|
|
23
|
-
| Has content and a `<!-- Last updated:` footer | Update |
|
|
24
|
-
| Has content but no footer | Warn the user, then Generate |
|
|
25
|
-
|
|
26
|
-
**Generate.** Discover the architecture with the file tools: `glob` for structure, `grep` for routes, models and schemas, `read` for config, CI workflows, Dockerfiles, README, changelogs and ADRs.
|
|
27
|
-
|
|
28
|
-
**Update.** `git log --oneline --since="<footer date>" -- <source roots>` says what moved. Nothing changed means nothing to write: say "Architecture unchanged since last update" and stop. Otherwise rewrite only the affected sections and leave the rest, including anything hand-written, as it stands. Past roughly 40% of sections affected, fall back to Generate.
|
|
29
|
-
|
|
30
|
-
## Report
|
|
31
|
-
|
|
32
|
-
Whether the file was generated or updated and which sections changed, the top-level components found, and that `/make-architecture` can be re-run whenever the architecture moves.
|
|
1
|
+
---
|
|
2
|
+
name: pc-make-architecture
|
|
3
|
+
description: Generate or update ARCHITECTURE.md by analyzing the codebase structure. Safe to run at any time. Invoked by the /make-architecture command and the repo-initialize flow.
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Make Architecture
|
|
8
|
+
|
|
9
|
+
Write `ARCHITECTURE.md` in the project root from what the codebase actually contains, following the [structure template](structure-template.md).
|
|
10
|
+
|
|
11
|
+
## Rules
|
|
12
|
+
|
|
13
|
+
- Never regenerate over a file that carries a `<!-- Last updated:` footer. That footer is what makes the next run incremental, and a full rewrite silently drops whatever a human added by hand. Read the file first and pick the mode.
|
|
14
|
+
- Never analyze outside `.opencode/source-roots.json` when it exists, plus this repo's own docs and config.
|
|
15
|
+
- The footer is the file's last line, and it is the run's own ISO timestamp: `<!-- Last updated: <ISO date> -->`.
|
|
16
|
+
- Follow the writing rules and self-check defined in the [structure template](structure-template.md). After generating, re-read each section: if a section only describes what exists without stating what breaks when its constraints are violated, rewrite it as constraint-embedded prose or cut it. The file is not written until the self-check passes.
|
|
17
|
+
|
|
18
|
+
## Modes
|
|
19
|
+
|
|
20
|
+
| The existing file | Mode |
|
|
21
|
+
|---|---|
|
|
22
|
+
| Missing, or a placeholder with no real content | Generate |
|
|
23
|
+
| Has content and a `<!-- Last updated:` footer | Update |
|
|
24
|
+
| Has content but no footer | Warn the user, then Generate |
|
|
25
|
+
|
|
26
|
+
**Generate.** Discover the architecture with the file tools: `glob` for structure, `grep` for routes, models and schemas, `read` for config, CI workflows, Dockerfiles, README, changelogs and ADRs.
|
|
27
|
+
|
|
28
|
+
**Update.** `git log --oneline --since="<footer date>" -- <source roots>` says what moved. Nothing changed means nothing to write: say "Architecture unchanged since last update" and stop. Otherwise rewrite only the affected sections and leave the rest, including anything hand-written, as it stands. Past roughly 40% of sections affected, fall back to Generate.
|
|
29
|
+
|
|
30
|
+
## Report
|
|
31
|
+
|
|
32
|
+
Whether the file was generated or updated and which sections changed, the top-level components found, and that `/make-architecture` can be re-run whenever the architecture moves.
|
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
# ARCHITECTURE.md structure template
|
|
2
|
-
|
|
3
|
-
Write (or update) `ARCHITECTURE.md` following this structure. Only include sections relevant to the project; omit sections with no evidence.
|
|
4
|
-
|
|
5
|
-
- Architecture Overview: what the system is, what problem it solves, major architectural style
|
|
6
|
-
- 1. Project Structure: annotated directory tree with purpose of each major directory
|
|
7
|
-
- 2. High-Level System Diagram: Mermaid diagram of actors, services, data stores, external systems
|
|
8
|
-
- 3. Core Components: each major component: name, responsibility, key files, technologies, inputs/outputs
|
|
9
|
-
- 3.1 Frontend / User Interface (if present)
|
|
10
|
-
- 3.2 Backend / Server / API (if present)
|
|
11
|
-
- 3.3 Shared Libraries / Common Code (if present)
|
|
12
|
-
- 3.4 CLI / Scripts / Automation (if present)
|
|
13
|
-
- 4. Data Flow: request lifecycle, key user journeys, sequence diagram for main runtime flow
|
|
14
|
-
- 5. Data Stores: all persistent storage: type, purpose, schemas, migration approach
|
|
15
|
-
- 6. External Integrations / APIs: each integration: method, config location, auth, failure behavior
|
|
16
|
-
- 7. Key Technologies: full stack summary with architectural relevance of each
|
|
17
|
-
- 8. Deployment & Infrastructure: build artifacts, env config, containerization, CI/CD, hosting
|
|
18
|
-
- 9. Security Architecture: auth, authz, secrets, input validation, trust boundaries
|
|
19
|
-
- 10. Monitoring & Observability: logging, metrics, tracing, error reporting
|
|
20
|
-
- 11. Performance & Scalability: caching, batching, concurrency, known bottlenecks
|
|
21
|
-
- 12. Development Workflow: local setup, install/dev/test/build/lint commands
|
|
22
|
-
- 13. Testing Strategy: test frameworks, locations, coverage gates, gaps
|
|
23
|
-
- 14. Architectural Decisions & Rationale: key choices with evidence and tradeoffs
|
|
24
|
-
- 15. Constraints, Risks, and Technical Debt: tight coupling, TODOs, operational risks
|
|
25
|
-
- 16. Future Considerations: documented roadmap + reasonable recommendations (labeled as such)
|
|
26
|
-
- 17. Project Identification: name, language, type, runtime, date of review, maintainer
|
|
27
|
-
- 18. Glossary / Acronyms: project-specific terms an agent or new developer needs to know
|
|
28
|
-
|
|
29
|
-
Append at the very end of the file:
|
|
30
|
-
```
|
|
31
|
-
<!-- Last updated: <current ISO timestamp> -->
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
Rules:
|
|
35
|
-
- Be specific and concrete: include actual directories, files, modules, commands.
|
|
36
|
-
- Mark anything undiscoverable as "Not evident from the repository".
|
|
37
|
-
- Use Mermaid diagrams where helpful.
|
|
38
|
-
- Write as if this document will be committed and maintained over time.
|
|
39
|
-
|
|
40
|
-
## Writing rules
|
|
41
|
-
|
|
42
|
-
These rules govern the voice and shape of every section. The ARCHITECTURE.md is the primary artifact an agent reads to understand the system's invariants — it must teach constraints, not just inventory structure. These are enforced by re-reading each section after generation (see the self-check in the skill).
|
|
43
|
-
|
|
44
|
-
1. **Every section must answer "what breaks if this is violated," not just "what exists."** A section that only describes structure without stating the constraint it protects and the consequence of crossing it is reference material, not architecture. "The system has four modules" is structure; "Modules must not cross-reference each other in Domain or Application, and flow goes through port interfaces or domain events" is a constraint.
|
|
45
|
-
|
|
46
|
-
2. **Architectural decisions must carry their rationale and what they superseded.** A decision table row that says "Adopt X" is a fact; "Adopt X because Y, supersedes decision Z which assumed W" is a constraint that teaches an agent why a change would be wrong. If a decision was reached after rejecting an alternative, name the alternative and why it was rejected.
|
|
47
|
-
|
|
48
|
-
3. **State boundaries as prohibitions with consequences.** "Layering is enforced: Api → Application → Domain" is a constraint. "Api → Application → Domain" alone is a dependency list. "Only the Composition namespace in Api reaches Infrastructure" is a constraint; "Api depends on Infrastructure" is a fact. Prefer the constraint form: name the boundary, state who must not cross it, and what breaks when it is crossed.
|
|
49
|
-
|
|
50
|
-
4. **Include what was tried and rejected, not just what was chosen.** The most valuable architecture decisions are the ones where an alternative was tested and found wanting. A section that says "dynamic sessions were rejected because they accept no volumes, cost more at scale, and are blocked by policy" teaches an agent more than "the engine runs as a container app."
|
|
51
|
-
|
|
52
|
-
5. **Narrative over inventory.** Describe how the system behaves, what holds it together, and where the seams are. A reader who understands the constraints can infer the structure; a reader who only sees the structure cannot infer the constraints.
|
|
53
|
-
|
|
54
|
-
## Self-check (before writing the file)
|
|
55
|
-
|
|
56
|
-
Re-read every section you are about to write. Then:
|
|
57
|
-
|
|
58
|
-
1. **Identify inventory-only sections.** If a section describes what exists without stating what breaks when its constraints are violated, rewrite it as constraint-embedded prose or cut it.
|
|
59
|
-
|
|
60
|
-
2. **Check decision rows.** Every row in the decisions table must carry its rationale. If a decision has no "why," it is a fact, not a decision — cut it or find the rationale.
|
|
61
|
-
|
|
62
|
-
3. **Scan for bare dependency lists.** "Api depends on Application depends on Domain" is a fact. Rewrite it as: name the boundary, state who must not cross it, and what breaks when it is crossed.
|
|
63
|
-
|
|
64
|
-
4. **Verify rejected alternatives are present where they matter.** If a significant architectural choice was made, the rejected alternative and the reason for rejection should be in the document. An agent that does not know what was rejected will propose it again.
|
|
1
|
+
# ARCHITECTURE.md structure template
|
|
2
|
+
|
|
3
|
+
Write (or update) `ARCHITECTURE.md` following this structure. Only include sections relevant to the project; omit sections with no evidence.
|
|
4
|
+
|
|
5
|
+
- Architecture Overview: what the system is, what problem it solves, major architectural style
|
|
6
|
+
- 1. Project Structure: annotated directory tree with purpose of each major directory
|
|
7
|
+
- 2. High-Level System Diagram: Mermaid diagram of actors, services, data stores, external systems
|
|
8
|
+
- 3. Core Components: each major component: name, responsibility, key files, technologies, inputs/outputs
|
|
9
|
+
- 3.1 Frontend / User Interface (if present)
|
|
10
|
+
- 3.2 Backend / Server / API (if present)
|
|
11
|
+
- 3.3 Shared Libraries / Common Code (if present)
|
|
12
|
+
- 3.4 CLI / Scripts / Automation (if present)
|
|
13
|
+
- 4. Data Flow: request lifecycle, key user journeys, sequence diagram for main runtime flow
|
|
14
|
+
- 5. Data Stores: all persistent storage: type, purpose, schemas, migration approach
|
|
15
|
+
- 6. External Integrations / APIs: each integration: method, config location, auth, failure behavior
|
|
16
|
+
- 7. Key Technologies: full stack summary with architectural relevance of each
|
|
17
|
+
- 8. Deployment & Infrastructure: build artifacts, env config, containerization, CI/CD, hosting
|
|
18
|
+
- 9. Security Architecture: auth, authz, secrets, input validation, trust boundaries
|
|
19
|
+
- 10. Monitoring & Observability: logging, metrics, tracing, error reporting
|
|
20
|
+
- 11. Performance & Scalability: caching, batching, concurrency, known bottlenecks
|
|
21
|
+
- 12. Development Workflow: local setup, install/dev/test/build/lint commands
|
|
22
|
+
- 13. Testing Strategy: test frameworks, locations, coverage gates, gaps
|
|
23
|
+
- 14. Architectural Decisions & Rationale: key choices with evidence and tradeoffs
|
|
24
|
+
- 15. Constraints, Risks, and Technical Debt: tight coupling, TODOs, operational risks
|
|
25
|
+
- 16. Future Considerations: documented roadmap + reasonable recommendations (labeled as such)
|
|
26
|
+
- 17. Project Identification: name, language, type, runtime, date of review, maintainer
|
|
27
|
+
- 18. Glossary / Acronyms: project-specific terms an agent or new developer needs to know
|
|
28
|
+
|
|
29
|
+
Append at the very end of the file:
|
|
30
|
+
```
|
|
31
|
+
<!-- Last updated: <current ISO timestamp> -->
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Rules:
|
|
35
|
+
- Be specific and concrete: include actual directories, files, modules, commands.
|
|
36
|
+
- Mark anything undiscoverable as "Not evident from the repository".
|
|
37
|
+
- Use Mermaid diagrams where helpful.
|
|
38
|
+
- Write as if this document will be committed and maintained over time.
|
|
39
|
+
|
|
40
|
+
## Writing rules
|
|
41
|
+
|
|
42
|
+
These rules govern the voice and shape of every section. The ARCHITECTURE.md is the primary artifact an agent reads to understand the system's invariants — it must teach constraints, not just inventory structure. These are enforced by re-reading each section after generation (see the self-check in the skill).
|
|
43
|
+
|
|
44
|
+
1. **Every section must answer "what breaks if this is violated," not just "what exists."** A section that only describes structure without stating the constraint it protects and the consequence of crossing it is reference material, not architecture. "The system has four modules" is structure; "Modules must not cross-reference each other in Domain or Application, and flow goes through port interfaces or domain events" is a constraint.
|
|
45
|
+
|
|
46
|
+
2. **Architectural decisions must carry their rationale and what they superseded.** A decision table row that says "Adopt X" is a fact; "Adopt X because Y, supersedes decision Z which assumed W" is a constraint that teaches an agent why a change would be wrong. If a decision was reached after rejecting an alternative, name the alternative and why it was rejected.
|
|
47
|
+
|
|
48
|
+
3. **State boundaries as prohibitions with consequences.** "Layering is enforced: Api → Application → Domain" is a constraint. "Api → Application → Domain" alone is a dependency list. "Only the Composition namespace in Api reaches Infrastructure" is a constraint; "Api depends on Infrastructure" is a fact. Prefer the constraint form: name the boundary, state who must not cross it, and what breaks when it is crossed.
|
|
49
|
+
|
|
50
|
+
4. **Include what was tried and rejected, not just what was chosen.** The most valuable architecture decisions are the ones where an alternative was tested and found wanting. A section that says "dynamic sessions were rejected because they accept no volumes, cost more at scale, and are blocked by policy" teaches an agent more than "the engine runs as a container app."
|
|
51
|
+
|
|
52
|
+
5. **Narrative over inventory.** Describe how the system behaves, what holds it together, and where the seams are. A reader who understands the constraints can infer the structure; a reader who only sees the structure cannot infer the constraints.
|
|
53
|
+
|
|
54
|
+
## Self-check (before writing the file)
|
|
55
|
+
|
|
56
|
+
Re-read every section you are about to write. Then:
|
|
57
|
+
|
|
58
|
+
1. **Identify inventory-only sections.** If a section describes what exists without stating what breaks when its constraints are violated, rewrite it as constraint-embedded prose or cut it.
|
|
59
|
+
|
|
60
|
+
2. **Check decision rows.** Every row in the decisions table must carry its rationale. If a decision has no "why," it is a fact, not a decision — cut it or find the rationale.
|
|
61
|
+
|
|
62
|
+
3. **Scan for bare dependency lists.** "Api depends on Application depends on Domain" is a fact. Rewrite it as: name the boundary, state who must not cross it, and what breaks when it is crossed.
|
|
63
|
+
|
|
64
|
+
4. **Verify rejected alternatives are present where they matter.** If a significant architectural choice was made, the rejected alternative and the reason for rejection should be in the document. An agent that does not know what was rejected will propose it again.
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pc-make-design
|
|
3
|
-
description: Generate or update DESIGN.md by analyzing the codebase design system (Tailwind, CSS vars, tokens, UI framework config). Safe to run at any time. Invoked by the /make-design command and the repo-initialize flow.
|
|
4
|
-
license: MIT
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Make Design
|
|
8
|
-
|
|
9
|
-
Write `DESIGN.md` in the project root from the design system the codebase actually uses.
|
|
10
|
-
|
|
11
|
-
The format is Google's design.md spec:
|
|
12
|
-
|
|
13
|
-
- Overview: https://stitch.withgoogle.com/docs/design-md/overview/
|
|
14
|
-
- Format: https://stitch.withgoogle.com/docs/design-md/format/
|
|
15
|
-
- Spec and examples: https://github.com/google-labs-code/design.md
|
|
16
|
-
|
|
17
|
-
## Rules
|
|
18
|
-
|
|
19
|
-
- Never regenerate over a file that carries a `<!-- Last updated:` footer. That footer is what makes the next run incremental, and a full rewrite silently drops whatever a human added by hand. Read the file first and pick the mode.
|
|
20
|
-
- Never reference a file, variable or path from the codebase. `DESIGN.md` is handed to tools that cannot see this repository, so it has to stand alone.
|
|
21
|
-
- Never analyze outside `.opencode/source-roots.json` when it exists.
|
|
22
|
-
|
|
23
|
-
## Contract
|
|
24
|
-
|
|
25
|
-
YAML frontmatter holding every structured token (colours, typography, spacing, elevation, motion, radii, shadows), valid as YAML design tokens. Then free-form Markdown for the look and feel, which is where intent that token values cannot carry belongs. The last line is the run's own ISO timestamp:
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
<!-- Last updated: <ISO date> -->
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Modes
|
|
32
|
-
|
|
33
|
-
| The existing file | Mode |
|
|
34
|
-
|---|---|
|
|
35
|
-
| Missing, or a placeholder with no real content | Generate |
|
|
36
|
-
| Has content and a `<!-- Last updated:` footer | Update |
|
|
37
|
-
| Has content but no footer | Warn the user, then Generate |
|
|
38
|
-
|
|
39
|
-
**Generate.** `glob` for CSS, Tailwind and PostCSS config, component files, token definitions (JS, TS, JSON, YAML), theme files, and UI framework config (shadcn, MUI, Chakra).
|
|
40
|
-
|
|
41
|
-
**Update.** `git log --oneline --since="<footer date>" -- <source roots>` says what moved. Nothing changed means nothing to write: say "Design system unchanged since last update" and stop. Otherwise update only the affected tokens and sections. A replaced token system is a Generate.
|
|
42
|
-
|
|
43
|
-
## Report
|
|
44
|
-
|
|
45
|
-
Whether the file was generated or updated and which tokens changed, the palette, fonts and spacing scale found, and that `/make-design` can be re-run whenever the design system moves.
|
|
1
|
+
---
|
|
2
|
+
name: pc-make-design
|
|
3
|
+
description: Generate or update DESIGN.md by analyzing the codebase design system (Tailwind, CSS vars, tokens, UI framework config). Safe to run at any time. Invoked by the /make-design command and the repo-initialize flow.
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Make Design
|
|
8
|
+
|
|
9
|
+
Write `DESIGN.md` in the project root from the design system the codebase actually uses.
|
|
10
|
+
|
|
11
|
+
The format is Google's design.md spec:
|
|
12
|
+
|
|
13
|
+
- Overview: https://stitch.withgoogle.com/docs/design-md/overview/
|
|
14
|
+
- Format: https://stitch.withgoogle.com/docs/design-md/format/
|
|
15
|
+
- Spec and examples: https://github.com/google-labs-code/design.md
|
|
16
|
+
|
|
17
|
+
## Rules
|
|
18
|
+
|
|
19
|
+
- Never regenerate over a file that carries a `<!-- Last updated:` footer. That footer is what makes the next run incremental, and a full rewrite silently drops whatever a human added by hand. Read the file first and pick the mode.
|
|
20
|
+
- Never reference a file, variable or path from the codebase. `DESIGN.md` is handed to tools that cannot see this repository, so it has to stand alone.
|
|
21
|
+
- Never analyze outside `.opencode/source-roots.json` when it exists.
|
|
22
|
+
|
|
23
|
+
## Contract
|
|
24
|
+
|
|
25
|
+
YAML frontmatter holding every structured token (colours, typography, spacing, elevation, motion, radii, shadows), valid as YAML design tokens. Then free-form Markdown for the look and feel, which is where intent that token values cannot carry belongs. The last line is the run's own ISO timestamp:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
<!-- Last updated: <ISO date> -->
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Modes
|
|
32
|
+
|
|
33
|
+
| The existing file | Mode |
|
|
34
|
+
|---|---|
|
|
35
|
+
| Missing, or a placeholder with no real content | Generate |
|
|
36
|
+
| Has content and a `<!-- Last updated:` footer | Update |
|
|
37
|
+
| Has content but no footer | Warn the user, then Generate |
|
|
38
|
+
|
|
39
|
+
**Generate.** `glob` for CSS, Tailwind and PostCSS config, component files, token definitions (JS, TS, JSON, YAML), theme files, and UI framework config (shadcn, MUI, Chakra).
|
|
40
|
+
|
|
41
|
+
**Update.** `git log --oneline --since="<footer date>" -- <source roots>` says what moved. Nothing changed means nothing to write: say "Design system unchanged since last update" and stop. Otherwise update only the affected tokens and sections. A replaced token system is a Generate.
|
|
42
|
+
|
|
43
|
+
## Report
|
|
44
|
+
|
|
45
|
+
Whether the file was generated or updated and which tokens changed, the palette, fonts and spacing scale found, and that `/make-design` can be re-run whenever the design system moves.
|
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pc-make-engineer
|
|
3
|
-
description: Create a custom engineer agent via persona-driven interactive design. Invoked by the /make-engineer command.
|
|
4
|
-
license: MIT
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
Create one file, `.opencode/agents/{persona}-engineer.md`, from the [template](template.md). The research behind it is for choosing the right skills, not for filling the file: expertise notes, architecture, conventions, file maps and workflow steps belong in skills.
|
|
8
|
-
|
|
9
|
-
## Rules
|
|
10
|
-
|
|
11
|
-
- Never write the agent file before the user has confirmed the skill set and it is installed. An engineer whose abilities do not exist cannot work.
|
|
12
|
-
- Never write `model:` or `color:`. `pc-subagent-tiers` injects both at startup, so a hand-picked colour is overwritten.
|
|
13
|
-
- Never create `*.build.md`, `*.fast.md`, `*.plan.md`, `build.md` or `plan.md`. The plugin regenerates all of them every startup and anything written there is lost.
|
|
14
|
-
- `mode: subagent`. Engineers are reached through the subagent tool, and a primary would clutter the two-entry list a human picks from.
|
|
15
|
-
- The only `##` heading is `## Abilities`, and the identity paragraph is two or three sentences carrying no project knowledge.
|
|
16
|
-
- Every `@skill` under `## Abilities` exists in `.agents/skills/` and in `skills-lock.json`. A name that is not installed is skipped rather than blocking the worker, so a typo costs the agent that ability in silence.
|
|
17
|
-
- Project-local installs only: `npx skills add -y ...`, never `-g`.
|
|
18
|
-
- At most five form questions, and only where more than one option was detected. A signal with one option is used without asking.
|
|
19
|
-
|
|
20
|
-
## Contracts
|
|
21
|
-
|
|
22
|
-
Personas: `frontend`, `layout`, `backend`, `data`, `devops`, `security`, `mobile`, `api`, `qa`. A persona passed as an argument (`/make-engineer frontend`) or typed by the user is taken as given.
|
|
23
|
-
|
|
24
|
-
Signals to detect: language, framework, data layer, testing, styling, architecture, i18n, CI/CD, cloud and IaC, monitoring, linting, dependency injection.
|
|
25
|
-
|
|
26
|
-
Discovery needs `find-skills`, and has no fallback without it:
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
npx skills add -y vercel-labs/skills@find-skills
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
When `.opencode/agents/{persona}-engineer.md` already exists, ask before touching it:
|
|
33
|
-
|
|
34
|
-
```json
|
|
35
|
-
{
|
|
36
|
-
"questions": [
|
|
37
|
-
{
|
|
38
|
-
"header": "Overwrite engineer",
|
|
39
|
-
"question": "An engineer named \"{persona}-engineer\" already exists. Overwrite or cancel?",
|
|
40
|
-
"options": [
|
|
41
|
-
{ "label": "Overwrite", "description": "Rewrite the file from the template." },
|
|
42
|
-
{ "label": "Cancel", "description": "Stop. Do not modify the existing file." }
|
|
43
|
-
]
|
|
44
|
-
}
|
|
45
|
-
]
|
|
46
|
-
}
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
`fullstack-engineer.md` is the body `pc-subagent-tiers` copies into `build.md` and `plan.md`, so every skill listed there reaches both primaries. Merge into it additively: add only skills it does not already list, put them in the category lines that already exist where they fit, and leave its frontmatter, identity paragraph and existing ability lines alone.
|
|
50
|
-
|
|
51
|
-
## Flow
|
|
52
|
-
|
|
53
|
-
1. **Persona.** Ask with the `question` tool unless it arrived as an argument. The answer decides what to detect, what to ask, and which skills to look for.
|
|
54
|
-
2. **Signals.** Read `.opencode/source-roots.json` (if it is missing or empty, ask which directories to scan), then `ARCHITECTURE.md`, `DESIGN.md`, and the manifests (`package.json`, `tsconfig.json`, `*.csproj`, `pyproject.toml`, `go.mod`, `Cargo.toml`). Detect what the persona needs and report the inventory.
|
|
55
|
-
3. **Form.** Present the detected options with the `question` tool, pre-selected and marked `(Recommended)`. For `frontend`, `backend`, `layout` and `api`, one question is architecture and patterns, whose options come from the [signal mapping](signal-mapping.md) tables.
|
|
56
|
-
4. **Skills.** A signal already covered by a skill in `.agents/skills/` or `skills-lock.json` needs no search. Map each remaining signal to a query through the [signal mapping](signal-mapping.md), present the candidates as one multi-select `question` grouped by category (name, one line, `owner/repo`, install count), install what the user confirms, and verify each one landed in both `.agents/skills/` and the lockfile.
|
|
57
|
-
5. **Write** the file from the [template](template.md).
|
|
58
|
-
6. **Merge** the new skills into `fullstack-engineer.md`.
|
|
59
|
-
7. **Report** the file created, the skills installed, the signals with no quality skill, whatever failed, and that opencode has to restart before `pc-subagent-tiers` picks the engineer up.
|
|
1
|
+
---
|
|
2
|
+
name: pc-make-engineer
|
|
3
|
+
description: Create a custom engineer agent via persona-driven interactive design. Invoked by the /make-engineer command.
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Create one file, `.opencode/agents/{persona}-engineer.md`, from the [template](template.md). The research behind it is for choosing the right skills, not for filling the file: expertise notes, architecture, conventions, file maps and workflow steps belong in skills.
|
|
8
|
+
|
|
9
|
+
## Rules
|
|
10
|
+
|
|
11
|
+
- Never write the agent file before the user has confirmed the skill set and it is installed. An engineer whose abilities do not exist cannot work.
|
|
12
|
+
- Never write `model:` or `color:`. `pc-subagent-tiers` injects both at startup, so a hand-picked colour is overwritten.
|
|
13
|
+
- Never create `*.build.md`, `*.fast.md`, `*.plan.md`, `build.md` or `plan.md`. The plugin regenerates all of them every startup and anything written there is lost.
|
|
14
|
+
- `mode: subagent`. Engineers are reached through the subagent tool, and a primary would clutter the two-entry list a human picks from.
|
|
15
|
+
- The only `##` heading is `## Abilities`, and the identity paragraph is two or three sentences carrying no project knowledge.
|
|
16
|
+
- Every `@skill` under `## Abilities` exists in `.agents/skills/` and in `skills-lock.json`. A name that is not installed is skipped rather than blocking the worker, so a typo costs the agent that ability in silence.
|
|
17
|
+
- Project-local installs only: `npx skills add -y ...`, never `-g`.
|
|
18
|
+
- At most five form questions, and only where more than one option was detected. A signal with one option is used without asking.
|
|
19
|
+
|
|
20
|
+
## Contracts
|
|
21
|
+
|
|
22
|
+
Personas: `frontend`, `layout`, `backend`, `data`, `devops`, `security`, `mobile`, `api`, `qa`. A persona passed as an argument (`/make-engineer frontend`) or typed by the user is taken as given.
|
|
23
|
+
|
|
24
|
+
Signals to detect: language, framework, data layer, testing, styling, architecture, i18n, CI/CD, cloud and IaC, monitoring, linting, dependency injection.
|
|
25
|
+
|
|
26
|
+
Discovery needs `find-skills`, and has no fallback without it:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npx skills add -y vercel-labs/skills@find-skills
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
When `.opencode/agents/{persona}-engineer.md` already exists, ask before touching it:
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"questions": [
|
|
37
|
+
{
|
|
38
|
+
"header": "Overwrite engineer",
|
|
39
|
+
"question": "An engineer named \"{persona}-engineer\" already exists. Overwrite or cancel?",
|
|
40
|
+
"options": [
|
|
41
|
+
{ "label": "Overwrite", "description": "Rewrite the file from the template." },
|
|
42
|
+
{ "label": "Cancel", "description": "Stop. Do not modify the existing file." }
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
`fullstack-engineer.md` is the body `pc-subagent-tiers` copies into `build.md` and `plan.md`, so every skill listed there reaches both primaries. Merge into it additively: add only skills it does not already list, put them in the category lines that already exist where they fit, and leave its frontmatter, identity paragraph and existing ability lines alone.
|
|
50
|
+
|
|
51
|
+
## Flow
|
|
52
|
+
|
|
53
|
+
1. **Persona.** Ask with the `question` tool unless it arrived as an argument. The answer decides what to detect, what to ask, and which skills to look for.
|
|
54
|
+
2. **Signals.** Read `.opencode/source-roots.json` (if it is missing or empty, ask which directories to scan), then `ARCHITECTURE.md`, `DESIGN.md`, and the manifests (`package.json`, `tsconfig.json`, `*.csproj`, `pyproject.toml`, `go.mod`, `Cargo.toml`). Detect what the persona needs and report the inventory.
|
|
55
|
+
3. **Form.** Present the detected options with the `question` tool, pre-selected and marked `(Recommended)`. For `frontend`, `backend`, `layout` and `api`, one question is architecture and patterns, whose options come from the [signal mapping](signal-mapping.md) tables.
|
|
56
|
+
4. **Skills.** A signal already covered by a skill in `.agents/skills/` or `skills-lock.json` needs no search. Map each remaining signal to a query through the [signal mapping](signal-mapping.md), present the candidates as one multi-select `question` grouped by category (name, one line, `owner/repo`, install count), install what the user confirms, and verify each one landed in both `.agents/skills/` and the lockfile.
|
|
57
|
+
5. **Write** the file from the [template](template.md).
|
|
58
|
+
6. **Merge** the new skills into `fullstack-engineer.md`.
|
|
59
|
+
7. **Report** the file created, the skills installed, the signals with no quality skill, whatever failed, and that opencode has to restart before `pc-subagent-tiers` picks the engineer up.
|