@plainconceptsplatform/agent-harness 2.5.2 → 2.7.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 +432 -435
- package/cli/fragments/ops-backlog/gh.md +1 -2
- package/cli/fragments/ops-evidence/gh.md +53 -54
- package/cli/fragments/ops-review/gh.md +1 -2
- package/cli/fragments/ops-review/gl.md +1 -2
- package/cli/fragments/ops-ship/gh.md +67 -68
- package/cli/fragments/ops-ship/gl.md +84 -85
- package/harness/.agents/skills/pc-make-merge-risk-assess/category-reference.md +1 -4
- package/harness/.agents/skills/pc-ops-evidence/SKILL.md +131 -133
- package/harness/.agents/skills/pc-plan-apply/SKILL.md +3 -9
- package/harness/.agents/skills/pc-plan-explore/SKILL.md +4 -12
- package/harness/.agents/skills/pc-plan-goal/SKILL.md +1 -1
- package/harness/.agents/skills/pc-plan-propose/SKILL.md +2 -2
- package/harness/.agents/skills/pc-plan-story/SKILL.md +52 -7
- package/harness/.agents/skills/pc-repo-help/SKILL.md +89 -89
- package/harness/.agents/skills/pc-repo-onboard/SKILL.md +32 -32
- package/harness/.agents/skills/pc-repo-verify/SKILL.md +104 -17
- package/harness/ARCHITECTURE.md +2 -5
- package/harness/DESIGN.md +2 -5
- package/package.json +4 -1
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pc-repo-onboard
|
|
3
|
-
description: Walk the user through the project and its agentic infrastructure. Explains what exists, how agents work, and how to use the system. Invoked by the /repo-onboard command.
|
|
4
|
-
license: MIT
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
A guided tour of this repository and the harness installed in it, for somebody who has just arrived. Read and explain; change nothing.
|
|
8
|
-
|
|
9
|
-
## Rules
|
|
10
|
-
|
|
11
|
-
- Never write, edit, or create a file, and never run a command from the tour to demonstrate it. The output is the explanation.
|
|
12
|
-
- Never describe an agent, command, skill or setting that is not in this repository. The tour is worth having because it is specific: read `.opencode/agents/`, `.opencode/commands/`, `.agents/skills/`, `.opencode/harness.json`, `AGENTS.md`, `ARCHITECTURE.md` and `DESIGN.md` and report what is actually there.
|
|
13
|
-
|
|
14
|
-
## Cover, in this order
|
|
15
|
-
|
|
16
|
-
1. **The project.** Three to five bullets: what it is, the stack, the directories that matter.
|
|
17
|
-
2. **The agents.** One table row per file in `.opencode/agents/`, with its tier and purpose. Then the selection model: `build` and `plan` are the only two a human picks and both run the `fullstack-engineer` body, `plan` can neither edit nor spawn, everything else is `mode: subagent` and reached through `task()`, and a missing specialist is made with `/make-engineer`.
|
|
18
|
-
3. **The commands**, grouped by what they are for:
|
|
19
|
-
|
|
20
|
-
| Group | Commands |
|
|
21
|
-
|---|---|
|
|
22
|
-
| Planning | `/plan-explore`, `/plan-story`, `/plan-propose`, `/plan-quick`, `/plan-goal` |
|
|
23
|
-
| Implementation | `/plan-apply`, `/plan-archive` |
|
|
24
|
-
| Maintenance | `/make-architecture`, `/make-design`, `/make-engineer`, `/make-guardrails` |
|
|
25
|
-
| Shipping | `/ops-ship`, `/ops-review`, `/ops-backlog`, `/ops-evidence` |
|
|
26
|
-
| Quality | `/repo-audit` (read-only), `/repo-verify` (the
|
|
27
|
-
| Setup | `/init`, `/make-user-model`, `/repo-help` |
|
|
28
|
-
|
|
29
|
-
4. **The skills** installed in `.agents/skills/`, one line each, marking which are platform-specific.
|
|
30
|
-
5. **The OpenSpec lifecycle**: explore, propose, apply, archive, and what `openspec/config.yaml` controls.
|
|
31
|
-
6. **The configuration** in `.opencode/harness.json`: what each section governs, that `/make-user-model` changes a tier's model, and what `agents.maxConcurrent` caps.
|
|
32
|
-
7. **Where to start.** `/plan-goal` with a description of the work, `/repo-help` for everything else, and `npx @plainconceptsplatform/agent-harness` to refresh the harness after changing config.
|
|
1
|
+
---
|
|
2
|
+
name: pc-repo-onboard
|
|
3
|
+
description: Walk the user through the project and its agentic infrastructure. Explains what exists, how agents work, and how to use the system. Invoked by the /repo-onboard command.
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
A guided tour of this repository and the harness installed in it, for somebody who has just arrived. Read and explain; change nothing.
|
|
8
|
+
|
|
9
|
+
## Rules
|
|
10
|
+
|
|
11
|
+
- Never write, edit, or create a file, and never run a command from the tour to demonstrate it. The output is the explanation.
|
|
12
|
+
- Never describe an agent, command, skill or setting that is not in this repository. The tour is worth having because it is specific: read `.opencode/agents/`, `.opencode/commands/`, `.agents/skills/`, `.opencode/harness.json`, `AGENTS.md`, `ARCHITECTURE.md` and `DESIGN.md` and report what is actually there.
|
|
13
|
+
|
|
14
|
+
## Cover, in this order
|
|
15
|
+
|
|
16
|
+
1. **The project.** Three to five bullets: what it is, the stack, the directories that matter.
|
|
17
|
+
2. **The agents.** One table row per file in `.opencode/agents/`, with its tier and purpose. Then the selection model: `build` and `plan` are the only two a human picks and both run the `fullstack-engineer` body, `plan` can neither edit nor spawn, everything else is `mode: subagent` and reached through `task()`, and a missing specialist is made with `/make-engineer`.
|
|
18
|
+
3. **The commands**, grouped by what they are for:
|
|
19
|
+
|
|
20
|
+
| Group | Commands |
|
|
21
|
+
|---|---|
|
|
22
|
+
| Planning | `/plan-explore`, `/plan-story`, `/plan-propose`, `/plan-quick`, `/plan-goal` |
|
|
23
|
+
| Implementation | `/plan-apply`, `/plan-archive` |
|
|
24
|
+
| Maintenance | `/make-architecture`, `/make-design`, `/make-engineer`, `/make-guardrails` |
|
|
25
|
+
| Shipping | `/ops-ship`, `/ops-review`, `/ops-backlog`, `/ops-evidence` |
|
|
26
|
+
| Quality | `/repo-audit` (read-only), `/repo-verify` (writes the verification plan) |
|
|
27
|
+
| Setup | `/init`, `/make-user-model`, `/repo-help` |
|
|
28
|
+
|
|
29
|
+
4. **The skills** installed in `.agents/skills/`, one line each, marking which are platform-specific.
|
|
30
|
+
5. **The OpenSpec lifecycle**: explore, propose, apply, archive, and what `openspec/config.yaml` controls.
|
|
31
|
+
6. **The configuration** in `.opencode/harness.json`: what each section governs, that `/make-user-model` changes a tier's model, and what `agents.maxConcurrent` caps.
|
|
32
|
+
7. **Where to start.** `/plan-goal` with a description of the work, `/repo-help` for everything else, and `npx @plainconceptsplatform/agent-harness` to refresh the harness after changing config.
|
|
@@ -1,36 +1,123 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pc-repo-verify
|
|
3
|
-
description:
|
|
3
|
+
description: Write a reproduction plan for the completed change as a journey of agent-browser waypoints stored with the change. Does not run checks, launch a browser, or take screenshots. Invoked by /repo-verify and the plan-goal pipeline.
|
|
4
4
|
license: MIT
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Repo Verify
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Write the verification plan for the current branch's change. The checks gate lives in `pc-plan-apply` step 10 (lint, typecheck, test, build). This skill produces the reproduction plan instead: a journey through the new functionality with observation waypoints, written so a later agent-browser executor skill can follow it verbatim.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
This skill never launches a browser, never takes a screenshot, never starts a server. It only reads the change and writes a plan file. It is the agent-executed counterpart to `pc-ops-evidence`, whose `capturePlan` stays the CI-side screenshot workflow.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
2. Parse every `@skill-name` in its `## Abilities` section.
|
|
15
|
-
3. Load every listed skill, guardrails first. A missing referenced skill is a verification failure; report it and do not claim `VERIFIED`.
|
|
13
|
+
Work only on the current branch: do not switch branches, push, create pull requests, or contact external platforms. Write the plan into the change directory; it is carried into the archive by `pc-plan-archive`.
|
|
16
14
|
|
|
17
|
-
## Step
|
|
15
|
+
## Step 1: Read the change
|
|
18
16
|
|
|
19
|
-
1.
|
|
20
|
-
2.
|
|
21
|
-
3.
|
|
22
|
-
4. Build a check matrix. Include every discovered project's repository-defined immutable dependency install or restore command, build command, and test command, even when that project is untouched. Add changed-scope lint, typecheck, migration, generated-artifact, documentation, evidence, and required repository-wide checks from loaded guardrails.
|
|
17
|
+
1. Resolve the change id from the caller (autonomous mode) or from the current branch's unarchived change under `openspec/changes/<change-id>/`. Read `proposal.md`, `tasks.md`, and `design.md` when present.
|
|
18
|
+
2. Read `.opencode/source-roots.json` when it exists; use its non-empty `roots` array to scope frontend source, otherwise use the repository root.
|
|
19
|
+
3. Inspect `git diff` against the branch base and the working tree for context on what changed.
|
|
23
20
|
|
|
24
|
-
## Step
|
|
21
|
+
## Step 2: Determine UI impact
|
|
25
22
|
|
|
26
|
-
|
|
23
|
+
Decide whether the change is reachable from something a user sees or does in the browser.
|
|
27
24
|
|
|
28
|
-
|
|
25
|
+
1. **Direct** — changed files include user-visible UI: `*.tsx`/`jsx`/`vue`/`svelte`, `*.css`/`scss`/`less`, pages, layouts, components, navigation, routes. The affected surfaces are the routes/components the diff touches.
|
|
26
|
+
2. **Indirect (backend-only diff, frontend-affected)** — the diff touches only API/backend code, but the changed contract is consumed by the frontend. Trace it: for every changed endpoint, route, handler, query, or exported function, search the frontend source roots for references to that name or path. If any reference exists, the frontend **is** affected. Map the surfaces (the routes/components that import or call the changed contract) and build the journey through them, treating the API change as an indirect UI change.
|
|
27
|
+
3. **None** — no path reaches the frontend. Write the stub plan (Step 3, `status: not-applicable`) and stop. Do not fabricate a journey.
|
|
29
28
|
|
|
30
|
-
|
|
29
|
+
Mixed or unknown counts as affected: be safe.
|
|
31
30
|
|
|
32
|
-
|
|
31
|
+
## Step 3: Write the plan
|
|
32
|
+
|
|
33
|
+
Write `verification-plan.md` into the change directory:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
openspec/changes/<change-id>/verification-plan.md
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The plan is written in agent-browser idiom so a future executor skill can follow it verbatim. Format:
|
|
40
|
+
|
|
41
|
+
```markdown
|
|
42
|
+
# verification-plan.md — <change-id>
|
|
43
|
+
|
|
44
|
+
environment:
|
|
45
|
+
start: pnpm run dev
|
|
46
|
+
url: http://localhost:3000
|
|
47
|
+
login: mock-sso
|
|
48
|
+
data: |
|
|
49
|
+
<seed/data preconditions, or "none">
|
|
50
|
+
|
|
51
|
+
journey:
|
|
52
|
+
- id: 1
|
|
53
|
+
arrive:
|
|
54
|
+
- agent-browser open http://localhost:3000/
|
|
55
|
+
- agent-browser wait --load networkidle
|
|
56
|
+
waypoint: wp-1-home
|
|
57
|
+
capture: home
|
|
58
|
+
expect: homepage renders; nav is visible
|
|
59
|
+
|
|
60
|
+
- id: 2
|
|
61
|
+
arrive:
|
|
62
|
+
- agent-browser find text "Items" click
|
|
63
|
+
waypoint: wp-2-items-list
|
|
64
|
+
capture: items-list
|
|
65
|
+
expect: the items list shows the seeded rows
|
|
66
|
+
|
|
67
|
+
- id: 3
|
|
68
|
+
arrive:
|
|
69
|
+
- agent-browser find first ".item-row" click
|
|
70
|
+
- agent-browser wait --load networkidle
|
|
71
|
+
waypoint: wp-3-detail-before
|
|
72
|
+
capture: detail-before
|
|
73
|
+
expect: the item detail panel is open and shows the record
|
|
74
|
+
|
|
75
|
+
- id: 4
|
|
76
|
+
arrive:
|
|
77
|
+
- agent-browser find role button click --name "Status"
|
|
78
|
+
waypoint: wp-4-detail-active
|
|
79
|
+
capture: detail-active
|
|
80
|
+
expect: the status badge now reads "Active"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Replace the example routes, captions, locators, and expectations with the actual change. Locators must be agent-browser-native and stable: prefer `find role`, `find text`, `find label`, `find testid`; use CSS selectors only when no semantic locator exists. Use `wait --load networkidle` (or `wait <selector>` / `wait --text "<known>"`) so the executor reaches the state before observing.
|
|
84
|
+
|
|
85
|
+
### Waypoint rules
|
|
86
|
+
|
|
87
|
+
1. The first waypoint is always the baseline at `/`: `wp-1-home`, `capture: home`.
|
|
88
|
+
2. Place waypoints as a pre/post pair around the changed behavior — the state immediately before and immediately after the core change is exercised.
|
|
89
|
+
3. Every waypoint has a `waypoint:` id (`wp-<n>-<slug>`), a `capture:` id (kebab-case, unique), and an `expect:` line stating what must be observable there.
|
|
90
|
+
4. Dynamic data uses `sampleId: first` or `sampleId: any` in the `data:` block; locators that target a record resolve through it.
|
|
91
|
+
5. The number of waypoints is the minimum that reproduces and proves the behavior — not every screenshottable moment, just the meaningful observation points.
|
|
92
|
+
|
|
93
|
+
### When the change is not UI-reachable
|
|
94
|
+
|
|
95
|
+
Write the stub and stop:
|
|
96
|
+
|
|
97
|
+
```markdown
|
|
98
|
+
# verification-plan.md — <change-id>
|
|
99
|
+
|
|
100
|
+
status: not-applicable
|
|
101
|
+
reason: |
|
|
102
|
+
Change is backend-only and no frontend code references the changed contract
|
|
103
|
+
(<names>). No user-visible journey exists; the executor skill should skip.
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Adapt the reason to the actual change. Do not invent a journey when Step 2 concluded `None`.
|
|
107
|
+
|
|
108
|
+
### Rules for writing
|
|
109
|
+
|
|
110
|
+
- This skill MUST NOT launch a browser, start the app, take screenshots, or run build/test/lint. Those belong elsewhere.
|
|
111
|
+
- Never commit, stage, or push verifications. The caller owns git.
|
|
112
|
+
- The plan file is the only artifact written. Do not modify the change's specs, tasks, or proposal.
|
|
113
|
+
- Keep locators stable and observable: prefer semantic locators over brittle CSS paths.
|
|
33
114
|
|
|
34
115
|
## Step 4: Result
|
|
35
116
|
|
|
36
|
-
Report
|
|
117
|
+
Report one of:
|
|
118
|
+
|
|
119
|
+
- `PLAN_WRITTEN <change-id>` — a journey with waypoints was written to `verification-plan.md`.
|
|
120
|
+
- `STUB_WRITTEN <change-id>` — `status: not-applicable` stub written with a reason.
|
|
121
|
+
- `NOT WRITTEN` — hard blocker (unreadable change, missing change directory). Report the blocker and the exact next step.
|
|
122
|
+
|
|
123
|
+
A correct plan file written to the change directory is the success condition. Write a stub for non-UI changes; never skip writing the file.
|
package/harness/ARCHITECTURE.md
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
>
|
|
3
3
|
> This file has not been populated yet. It is intentionally empty.
|
|
4
4
|
>
|
|
5
|
-
> **If this is a greenfield project** (no codebase exists yet): skip this for now.
|
|
6
|
-
> Come back and run `/make-architecture` once you have meaningful code, structure, or infrastructure in place.
|
|
5
|
+
> **If this is a greenfield project** (no codebase exists yet): skip this for now. Come back and run `/make-architecture` once you have meaningful code, structure, or infrastructure in place.
|
|
7
6
|
>
|
|
8
7
|
> **If this is a brownfield project** (existing codebase): run this command now to generate the architecture documentation:
|
|
9
8
|
>
|
|
@@ -11,6 +10,4 @@
|
|
|
11
10
|
> /make-architecture
|
|
12
11
|
> ```
|
|
13
12
|
>
|
|
14
|
-
> This command analyzes your folder structure, config files, routes, data models, integrations, and build setup,
|
|
15
|
-
> then writes a complete ARCHITECTURE.md covering components, data flow, tech stack, deployment, and more.
|
|
16
|
-
> It is safe to rerun any time the architecture changes significantly.
|
|
13
|
+
> This command analyzes your folder structure, config files, routes, data models, integrations, and build setup, then writes a complete ARCHITECTURE.md covering components, data flow, tech stack, deployment, and more. It is safe to rerun any time the architecture changes significantly.
|
package/harness/DESIGN.md
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
>
|
|
3
3
|
> This file has not been populated yet. It is intentionally empty.
|
|
4
4
|
>
|
|
5
|
-
> **If this is a greenfield project** (no UI exists yet): skip this for now.
|
|
6
|
-
> Come back and run `/make-design` once you have a design system, UI components, or styles in place.
|
|
5
|
+
> **If this is a greenfield project** (no UI exists yet): skip this for now. Come back and run `/make-design` once you have a design system, UI components, or styles in place.
|
|
7
6
|
>
|
|
8
7
|
> **If this is a brownfield project** (existing UI/styles): run this command now to generate the design documentation:
|
|
9
8
|
>
|
|
@@ -11,6 +10,4 @@
|
|
|
11
10
|
> /make-design
|
|
12
11
|
> ```
|
|
13
12
|
>
|
|
14
|
-
> This command analyzes your CSS, Tailwind config, component files, and design tokens,
|
|
15
|
-
> then writes a complete DESIGN.md with structured YAML tokens and written design intent.
|
|
16
|
-
> It is safe to rerun any time your design system changes.
|
|
13
|
+
> This command analyzes your CSS, Tailwind config, component files, and design tokens, then writes a complete DESIGN.md with structured YAML tokens and written design intent. It is safe to rerun any time your design system changes.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plainconceptsplatform/agent-harness",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.0",
|
|
4
4
|
"description": "Installs the Plain Concepts Platform Harness into any codebase, and keeps it up to date. Wires OpenCode, OpenSpec, codegraph, and agentmemory into a multi-agent workflow that runs on native parallel subagents.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"opencode",
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
"@eslint/js": "^9.0.0",
|
|
53
53
|
"eslint": "^9.0.0",
|
|
54
54
|
"globals": "^15.0.0",
|
|
55
|
+
"markdownlint-cli2": "0.23.2",
|
|
55
56
|
"vitest": "^4.1.5"
|
|
56
57
|
},
|
|
57
58
|
"vitest": {
|
|
@@ -60,6 +61,8 @@
|
|
|
60
61
|
"scripts": {
|
|
61
62
|
"lint": "eslint .",
|
|
62
63
|
"lint:fix": "eslint . --fix",
|
|
64
|
+
"lint:md": "markdownlint-cli2 \"**/*.md\"",
|
|
65
|
+
"lint:md:fix": "markdownlint-cli2 --fix \"**/*.md\"",
|
|
63
66
|
"test": "vitest run",
|
|
64
67
|
"test:watch": "vitest",
|
|
65
68
|
"release:dry": "pnpm publish --dry-run --no-git-checks --access public",
|