@plainconceptsplatform/agent-harness 3.0.2 → 3.1.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.
@@ -4,7 +4,6 @@ import fse from 'fs-extra'
4
4
  import path from 'path'
5
5
  import { fileURLToPath } from 'url'
6
6
  import { code, commandExists, header, info, loading, success, warn } from '../../utils/exec.js'
7
- import { installQuota } from './quota.js'
8
7
  import { installSimpleEnglish } from './simple-english.js'
9
8
  import { installCodegraph } from './codegraph.js'
10
9
  import { installMemory } from './memory.js'
@@ -92,10 +91,6 @@ export async function tokenOptimizationStep(options = {}) {
92
91
  ? await checkRtk({ skipHeader: true, skipPrompt: true })
93
92
  : { optedIn: false, checked: false, available: false }
94
93
 
95
- const quota = has('quota')
96
- ? await installQuota({ skipHeader: true, skipPrompt: true })
97
- : { optedIn: false, installed: false }
98
-
99
94
  const simpleEnglish = has('simpleEnglish')
100
95
  ? await installSimpleEnglish({
101
96
  skipHeader: true,
@@ -132,7 +127,7 @@ export async function tokenOptimizationStep(options = {}) {
132
127
  if (selected.length === 0) warn('No token optimization tools selected')
133
128
  else success('Token optimization step completed')
134
129
 
135
- return { rtk, quota, simpleEnglish, codegraph, memory, humanizer }
130
+ return { rtk, simpleEnglish, codegraph, memory, humanizer }
136
131
  }
137
132
 
138
133
  async function syncSkillsLock() {
@@ -1,67 +1,80 @@
1
- import os from 'node:os'
2
- import path from 'node:path'
3
-
4
- /**
5
- * Every harness path that lands in a consumer repo, in one place.
6
- *
7
- * These filenames are a contract with every repo the harness has been
8
- * installed into: the CLI writes them, and the opencode plugins shipped in
9
- * harness/.opencode/plugins/ read them back at runtime. Changing a name
10
- * here means changing it in that payload too, or the plugins go blind.
11
- *
12
- * They are deliberately named for the harness rather than for the CLI, so a
13
- * future rename of the package does not become a rename of the on-disk state.
14
- */
15
- export const OPENCODE_DIR = '.opencode'
16
-
17
- /** Project config written by the metadata step. */
18
- export const CONFIG_FILE = 'harness.json'
19
-
20
- /** Per-developer model override, gitignored, never committed. */
21
- export const USER_CONFIG_FILE = 'harness.user.json'
22
-
23
- /** Hashes of every managed file, so `update` can detect local edits. */
24
- export const MANIFEST_FILE = 'harness-managed.json'
25
-
26
- /** Live subagent wave state, owned by the pc-subagent-monitor plugin. */
27
- export const RUN_STATE_FILE = 'harness-run.json'
28
-
29
- /** Names `.opencode/.gitignore` must cover. Mirrored in content/.opencode/_gitignore. */
30
- export const IGNORED_ENTRIES = [
31
- 'node_modules',
32
- RUN_STATE_FILE,
33
- USER_CONFIG_FILE,
34
- MANIFEST_FILE,
35
- 'source-roots.json',
36
- '*-engineer.*.md',
37
- // Regenerated from fullstack-engineer.md by pc-subagent-tiers every startup.
38
- 'agents/build.md',
39
- 'agents/plan.md',
40
- ]
41
-
42
- export function configPath(cwd = process.cwd()) {
43
- return path.join(cwd, OPENCODE_DIR, CONFIG_FILE)
44
- }
45
-
46
- export function userConfigPath(cwd = process.cwd()) {
47
- return path.join(cwd, OPENCODE_DIR, USER_CONFIG_FILE)
48
- }
49
-
50
- export function manifestPath(cwd = process.cwd()) {
51
- return path.join(cwd, OPENCODE_DIR, MANIFEST_FILE)
52
- }
53
-
54
- /** Cross-run models cache, keyed to the CLI rather than to any one repo. */
55
- export function modelsCacheDir() {
56
- return path.join(os.homedir(), '.config', 'agent-harness')
57
- }
58
-
59
- /**
60
- * Filenames written by opencode-onboard v1.x. Only used to detect a v1 repo
61
- * and refuse to half-patch it: nothing reads their contents.
62
- */
63
- export const LEGACY_CONFIG_FILES = [
64
- 'opencode-onboard.json',
65
- 'opencode-onboard.user.json',
66
- 'opencode-onboard-managed.json',
67
- ]
1
+ import os from 'node:os'
2
+ import path from 'node:path'
3
+
4
+ /**
5
+ * Every harness path that lands in a consumer repo, in one place.
6
+ *
7
+ * These filenames are a contract with every repo the harness has been
8
+ * installed into: the CLI writes them, and the opencode plugins shipped in
9
+ * harness/.opencode/plugins/ read them back at runtime. Changing a name
10
+ * here means changing it in that payload too, or the plugins go blind.
11
+ *
12
+ * They are deliberately named for the harness rather than for the CLI, so a
13
+ * future rename of the package does not become a rename of the on-disk state.
14
+ */
15
+ export const OPENCODE_DIR = '.opencode'
16
+
17
+ /** Project config written by the metadata step. */
18
+ export const CONFIG_FILE = 'harness.json'
19
+
20
+ /** Per-developer model override, gitignored, never committed. */
21
+ export const USER_CONFIG_FILE = 'harness.user.json'
22
+
23
+ /** Hashes of every managed file, so `update` can detect local edits. */
24
+ export const MANIFEST_FILE = 'harness-managed.json'
25
+
26
+ /** Live subagent wave state, owned by the pc-subagent-monitor plugin. */
27
+ export const RUN_STATE_FILE = 'harness-run.json'
28
+
29
+ /** Names `.opencode/.gitignore` must cover. Mirrored in content/.opencode/_gitignore. */
30
+ export const IGNORED_ENTRIES = [
31
+ 'node_modules',
32
+ RUN_STATE_FILE,
33
+ USER_CONFIG_FILE,
34
+ MANIFEST_FILE,
35
+ 'source-roots.json',
36
+ '*-engineer.*.md',
37
+ // Regenerated from fullstack-engineer.md by pc-subagent-tiers every startup.
38
+ 'agents/build.md',
39
+ 'agents/plan.md',
40
+ ]
41
+
42
+ /**
43
+ * Files the harness shipped and has since retired. `update` deletes them, because a skill or
44
+ * command left behind keeps being offered to agents long after the procedure it describes is
45
+ * gone. pc-ops-evidence wrote a capturePlan for a CI workflow that no longer exists; the
46
+ * verification plan from pc-repo-verify is what the evidence workflow replays now.
47
+ */
48
+ export const RETIRED_PATHS = [
49
+ '.agents/skills/pc-ops-evidence',
50
+ '.agents/skills/pc-make-evidence-scaffold',
51
+ '.opencode/commands/ops-evidence.md',
52
+ '.opencode/commands/make-evidence-scaffold.md',
53
+ ]
54
+
55
+ export function configPath(cwd = process.cwd()) {
56
+ return path.join(cwd, OPENCODE_DIR, CONFIG_FILE)
57
+ }
58
+
59
+ export function userConfigPath(cwd = process.cwd()) {
60
+ return path.join(cwd, OPENCODE_DIR, USER_CONFIG_FILE)
61
+ }
62
+
63
+ export function manifestPath(cwd = process.cwd()) {
64
+ return path.join(cwd, OPENCODE_DIR, MANIFEST_FILE)
65
+ }
66
+
67
+ /** Cross-run models cache, keyed to the CLI rather than to any one repo. */
68
+ export function modelsCacheDir() {
69
+ return path.join(os.homedir(), '.config', 'agent-harness')
70
+ }
71
+
72
+ /**
73
+ * Filenames written by opencode-onboard v1.x. Only used to detect a v1 repo
74
+ * and refuse to half-patch it: nothing reads their contents.
75
+ */
76
+ export const LEGACY_CONFIG_FILES = [
77
+ 'opencode-onboard.json',
78
+ 'opencode-onboard.user.json',
79
+ 'opencode-onboard-managed.json',
80
+ ]
@@ -19,7 +19,7 @@
19
19
  // generation is the mechanism: writing the files in setup, before agents resolve,
20
20
  // is what makes them visible.
21
21
 
22
- import { Plugin } from "@opencode/plugin"
22
+ import { Plugin, Model } from "@opencode/plugin"
23
23
  import fs from "node:fs/promises"
24
24
  import path from "node:path"
25
25
 
@@ -333,7 +333,13 @@ export default Plugin.define({
333
333
  const existing = editor.get(id)
334
334
  if (!existing) continue
335
335
  const model = models[spec.tier]
336
- if (model) existing.model = model
336
+ if (model) {
337
+ try {
338
+ existing.model = Model.Ref.parse(model)
339
+ } catch {
340
+ // invalid model ref; leave undefined so session model applies
341
+ }
342
+ }
337
343
  existing.mode = "primary"
338
344
  existing.description = spec.description
339
345
  if (spec.permissions) existing.permissions = spec.permissions
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plainconceptsplatform/agent-harness",
3
- "version": "3.0.2",
3
+ "version": "3.1.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",
@@ -42,6 +42,7 @@
42
42
  "engines": {
43
43
  "node": ">=18"
44
44
  },
45
+ "packageManager": "pnpm@11.10.0",
45
46
  "dependencies": {
46
47
  "@inquirer/prompts": "^7.0.0",
47
48
  "chalk": "^5.0.0",
@@ -50,16 +51,6 @@
50
51
  "jsonc-parser": "^3.3.1",
51
52
  "ora": "^8.0.0"
52
53
  },
53
- "devDependencies": {
54
- "@eslint/js": "^9.0.0",
55
- "eslint": "^9.0.0",
56
- "globals": "^15.0.0",
57
- "markdownlint-cli2": "0.23.2",
58
- "vitest": "^4.1.5"
59
- },
60
- "vitest": {
61
- "environment": "node"
62
- },
63
54
  "scripts": {
64
55
  "lint": "eslint .",
65
56
  "lint:fix": "eslint . --fix",
@@ -67,7 +58,18 @@
67
58
  "lint:md:fix": "markdownlint-cli2 --fix \"**/*.md\"",
68
59
  "test": "vitest run",
69
60
  "test:watch": "vitest",
61
+ "prepublishOnly": "npm run lint && npm run lint:md && npm run test",
70
62
  "release:dry": "pnpm publish --dry-run --no-git-checks --access public",
71
63
  "release": "pnpm publish --no-git-checks --access public"
64
+ },
65
+ "devDependencies": {
66
+ "@eslint/js": "^9.0.0",
67
+ "eslint": "^9.0.0",
68
+ "globals": "^15.0.0",
69
+ "markdownlint-cli2": "0.23.2",
70
+ "vitest": "^4.1.5"
71
+ },
72
+ "vitest": {
73
+ "environment": "node"
72
74
  }
73
- }
75
+ }
@@ -64,7 +64,11 @@ Tick `propose` when the proposal commit exists.
64
64
 
65
65
  Load `pc-plan-apply` in autonomous mode with `start_from: load-plan`. It owns worker resolution, subagent waves, commits, verification, and re-waves.
66
66
 
67
- Require it to return every task complete and `VERIFIED`, then load `pc-repo-verify`. Tick `apply` when apply returns `VERIFIED`; tick `verify` when `pc-repo-verify` returns `PLAN_WRITTEN` or `STUB_WRITTEN`.
67
+ Require it to return every task complete and `VERIFIED`, then load `pc-repo-verify`. Tick `apply` when apply returns `VERIFIED`. When `pc-repo-verify` returns `PLAN_WRITTEN` or `STUB_WRITTEN`, commit the plan, which the evidence workflow replays once the pull request merges, then tick `verify`:
68
+
69
+ ```bash
70
+ git add openspec/changes/{change-id}/verification-plan.md && git commit -m "verify: {title} ({change-id})"
71
+ ```
68
72
 
69
73
  ## Phase 5: Archive
70
74
 
@@ -1,89 +1,87 @@
1
- ---
2
- name: pc-repo-help
3
- description: The full command reference for this project - every /command with when to use it and the typical workflows. Load when the user asks for help, the command list, or at the end of repo initialization. Invoked by the /repo-help command and the repo-initialize flow.
4
- license: MIT
5
- ---
6
-
7
- # Repo Help
8
-
9
- Display the following reference to the user exactly as written. Do not summarize.
10
-
11
- ## Commands
12
-
13
- ### Not sure where to start?
14
-
15
- **`/init`** (alias: `/repo-initialize`): Initialize the project. Presents a single form with all setup questions (project type, history, architecture, design, evidence), then executes the selected steps.
16
-
17
- **`/repo-onboard`**: Guided tour of the project and its agentic infrastructure. Explains agents, commands, skills, OpenSpec workflow, and configuration. Read-only: no files modified.
18
-
19
- **`/repo-audit`**: Read-only health audit of every configured source root. Loads the fullstack engineer's abilities, checks guardrails, architecture, tooling, dependencies, lockfiles, tests, and CI, then reports prioritized findings.
20
-
21
- **`/plan-explore`**: Your backlog is unclear, you have a half-formed idea, or you need to think through a problem before committing to a plan. This is a thinking partner, not an executor.
22
-
23
- **`/plan-story <feature or need>`**: Write a detailed, repo-aware user story from a feature idea. Loads the `@user-story` skill (Mike Cohn format + Gherkin acceptance criteria), analyzes your codebase for concrete context, and produces a development-ready story with specific personas, real outcomes, and testable criteria grounded in your actual file paths, component names, and data models. No files written — just the story.
24
-
25
- **`/plan-propose <url or idea>`**: You have a work item URL, or a clear idea and you want to turn it into a structured plan (proposal, specs, tasks). Enriches each task with the best matching agent and model before showing you the plan. Nothing is implemented until you confirm.
26
-
27
- ---
28
-
29
- ### Ready to implement?
30
-
31
- **`/plan-quick <task>`**: Quick plan for focused changes. Reads the codebase, creates a task checklist in the Todo pane. No files, no OpenSpec. Then you decide: `/plan-apply` to implement, or `/plan-propose` for a full OpenSpec plan.
32
-
33
- **`/plan-apply`**: Implement a plan. Detects the source automatically: OpenSpec-annotated tasks (from `/plan-propose`) run as parallel subagent waves; Todo pane tasks (from `/plan-quick`) run sequentially in-session.
34
-
35
- **`/plan-goal <feature or URL>`**: Fully autonomous, no confirmations. Branches off `main`, then runs propose → apply → archive on that branch (each phase its own commit). Default: merges to `main` and deletes the branch. Add `push` keyword to push the branch only. Add `pr` keyword to push + create a PR. Built for loop-engineering / unattended runs. Stops only on a hard failure, leaving the branch unmerged.
36
-
37
- ---
38
-
39
- ### Done implementing?
40
-
41
- **`/ops-ship`**: Create a PR for the current feature branch with screenshots if UI changed.
42
-
43
- **`/ops-review`**: Read and triage PR review feedback. If you share a PR URL or say "I've added comments to the PR", it reads and classifies the review comments so you know what to fix. Fixing is done via `/plan-apply`.
44
-
45
- **`/ops-backlog`**: Create an issue in the backlog platform (GitHub, Azure DevOps, Jira) from a description.
46
-
47
- **`/ops-evidence`**: Produce evidence a completed change works and publish it to the originating issue/PR. Uses `playwright-cli` (headless) and `pnpm run dev` to capture screenshots at desktop and mobile viewports, writes `evidence/evidence.json` (passed/skipped/failed/blocked), and upserts an idempotent verified comment. Best-effort. Run it yourself after a change lands; `/plan-goal` does not run it. Works inside CI containers.
48
-
49
- **`/plan-archive`**: Mark a completed change as archived in OpenSpec. Run this after the PR is merged.
50
-
51
- ---
52
-
53
- ### Maintaining the project?
54
-
55
- **`/make-engineer`**: Add a custom specialist engineer to the team. Interactive persona-driven form: pick a persona, then confirm an inspected-and-recommended set of skills (architecture/patterns like FSD or design patterns, framework, testing, infra) before anything installs. Future `/plan-apply` runs will prefer it when its domain matches.
56
-
57
- **`/make-architecture`**: Regenerate `ARCHITECTURE.md` from the current codebase. Safe to rerun any time the architecture evolves.
58
-
59
- **`/make-design`**: Regenerate `DESIGN.md` from the design system (Tailwind, CSS vars, tokens, etc.).
60
-
61
- **`/make-guardrails`**: Generate a `pc-guardrails-project` skill from `ARCHITECTURE.md` and project config files. Extracts concrete rules (architecture boundaries, naming, code style, testing, git workflow) that all agents must follow. Updates every `*-engineer.md` to load the skill.
62
-
63
- **`/repo-verify`**: Write a reproduction plan for the current branch's change as a journey of agent-browser waypoints stored with the change in `verification-plan.md`. Traces backend-only changes through to the frontend when the changed contract is consumed there; writes a `not-applicable` stub when no UI surface is reachable. Does not run checks, launch a browser, or take screenshots — the checks gate lives in `pc-plan-apply` step 10, and the plan is executed later by a separate agent-browser skill. It runs automatically in `/plan-goal`.
64
-
65
- **`/make-user-model <tier> <model>`**: Set the model for a tier (`plan`, `build`, or `fast`). Writes to `.opencode/harness.json` (`models`). Use `user` prefix for a personal override: `/make-user-model user fast opencode/big-pickle`. Use a model id or `current` for the active session model. Restart opencode for the `pc-subagent-tiers` plugin to rebuild tier agents.
66
-
67
- ---
68
-
69
- ### Typical workflows
70
-
71
- **Complex change:**
72
- ```
73
- /plan-explore ← optional: think it through first
74
- /plan-propose ← create the plan
75
- /plan-apply ← implement with the team
76
- /ops-ship ← ship
77
- /plan-archive ← close out
78
- ```
79
-
80
- **Quick change:**
81
- ```
82
- /plan-quick ← create a focused task list
83
- /plan-apply ← implement
84
- ```
85
-
86
- **Unattended / loop-engineering:**
87
- ```
88
- /plan-goal <description> ← full pipeline, no interaction
89
- ```
1
+ ---
2
+ name: pc-repo-help
3
+ description: The full command reference for this project - every /command with when to use it and the typical workflows. Load when the user asks for help, the command list, or at the end of repo initialization. Invoked by the /repo-help command and the repo-initialize flow.
4
+ license: MIT
5
+ ---
6
+
7
+ # Repo Help
8
+
9
+ Display the following reference to the user exactly as written. Do not summarize.
10
+
11
+ ## Commands
12
+
13
+ ### Not sure where to start?
14
+
15
+ **`/init`** (alias: `/repo-initialize`): Initialize the project. Presents a single form with all setup questions (project type, history, architecture, design, evidence), then executes the selected steps.
16
+
17
+ **`/repo-onboard`**: Guided tour of the project and its agentic infrastructure. Explains agents, commands, skills, OpenSpec workflow, and configuration. Read-only: no files modified.
18
+
19
+ **`/repo-audit`**: Read-only health audit of every configured source root. Loads the fullstack engineer's abilities, checks guardrails, architecture, tooling, dependencies, lockfiles, tests, and CI, then reports prioritized findings.
20
+
21
+ **`/plan-explore`**: Your backlog is unclear, you have a half-formed idea, or you need to think through a problem before committing to a plan. This is a thinking partner, not an executor.
22
+
23
+ **`/plan-story <feature or need>`**: Write a detailed, repo-aware user story from a feature idea. Loads the `@user-story` skill (Mike Cohn format + Gherkin acceptance criteria), analyzes your codebase for concrete context, and produces a development-ready story with specific personas, real outcomes, and testable criteria grounded in your actual file paths, component names, and data models. No files written — just the story.
24
+
25
+ **`/plan-propose <url or idea>`**: You have a work item URL, or a clear idea and you want to turn it into a structured plan (proposal, specs, tasks). Enriches each task with the best matching agent and model before showing you the plan. Nothing is implemented until you confirm.
26
+
27
+ ---
28
+
29
+ ### Ready to implement?
30
+
31
+ **`/plan-quick <task>`**: Quick plan for focused changes. Reads the codebase, creates a task checklist in the Todo pane. No files, no OpenSpec. Then you decide: `/plan-apply` to implement, or `/plan-propose` for a full OpenSpec plan.
32
+
33
+ **`/plan-apply`**: Implement a plan. Detects the source automatically: OpenSpec-annotated tasks (from `/plan-propose`) run as parallel subagent waves; Todo pane tasks (from `/plan-quick`) run sequentially in-session.
34
+
35
+ **`/plan-goal <feature or URL>`**: Fully autonomous, no confirmations. Branches off `main`, then runs propose → apply → archive on that branch (each phase its own commit). Default: merges to `main` and deletes the branch. Add `push` keyword to push the branch only. Add `pr` keyword to push + create a PR. Built for loop-engineering / unattended runs. Stops only on a hard failure, leaving the branch unmerged.
36
+
37
+ ---
38
+
39
+ ### Done implementing?
40
+
41
+ **`/ops-ship`**: Create a PR for the current feature branch with screenshots if UI changed.
42
+
43
+ **`/ops-review`**: Read and triage PR review feedback. If you share a PR URL or say "I've added comments to the PR", it reads and classifies the review comments so you know what to fix. Fixing is done via `/plan-apply`.
44
+
45
+ **`/ops-backlog`**: Create an issue in the backlog platform (GitHub, Azure DevOps, Jira) from a description.
46
+
47
+ **`/plan-archive`**: Mark a completed change as archived in OpenSpec. Run this after the PR is merged.
48
+
49
+ ---
50
+
51
+ ### Maintaining the project?
52
+
53
+ **`/make-engineer`**: Add a custom specialist engineer to the team. Interactive persona-driven form: pick a persona, then confirm an inspected-and-recommended set of skills (architecture/patterns like FSD or design patterns, framework, testing, infra) before anything installs. Future `/plan-apply` runs will prefer it when its domain matches.
54
+
55
+ **`/make-architecture`**: Regenerate `ARCHITECTURE.md` from the current codebase. Safe to rerun any time the architecture evolves.
56
+
57
+ **`/make-design`**: Regenerate `DESIGN.md` from the design system (Tailwind, CSS vars, tokens, etc.).
58
+
59
+ **`/make-guardrails`**: Generate a `pc-guardrails-project` skill from `ARCHITECTURE.md` and project config files. Extracts concrete rules (architecture boundaries, naming, code style, testing, git workflow) that all agents must follow. Updates every `*-engineer.md` to load the skill.
60
+
61
+ **`/repo-verify`**: Write the verification plan for the current branch's change: a journey through the new functionality as a fenced YAML block in `verification-plan.md`, stored with the change. The evidence workflow from `@plainconceptsplatform/workflows` replays it in headless Chromium when the pull request merges and archives one screenshot per waypoint on it. Backend-only changes are traced through to the frontend when their contract is consumed there; a `not-applicable` stub is written when no UI surface is reachable. Does not run checks or take screenshots. Runs automatically in `/plan-goal`.
62
+
63
+ **`/make-user-model <tier> <model>`**: Set the model for a tier (`plan`, `build`, or `fast`). Writes to `.opencode/harness.json` (`models`). Use `user` prefix for a personal override: `/make-user-model user fast opencode/big-pickle`. Use a model id or `current` for the active session model. Restart opencode for the `pc-subagent-tiers` plugin to rebuild tier agents.
64
+
65
+ ---
66
+
67
+ ### Typical workflows
68
+
69
+ **Complex change:**
70
+ ```
71
+ /plan-explore ← optional: think it through first
72
+ /plan-propose ← create the plan
73
+ /plan-apply ← implement with the team
74
+ /ops-ship ← ship
75
+ /plan-archive ← close out
76
+ ```
77
+
78
+ **Quick change:**
79
+ ```
80
+ /plan-quick ← create a focused task list
81
+ /plan-apply ← implement
82
+ ```
83
+
84
+ **Unattended / loop-engineering:**
85
+ ```
86
+ /plan-goal <description> ← full pipeline, no interaction
87
+ ```
@@ -51,10 +51,10 @@ First read `AGENTS.md`. Without the `<!-- PC-NOT-INITIALIZED -->` marker the pro
51
51
  },
52
52
  {
53
53
  "header": "Evidence",
54
- "question": "Enable visual evidence capture for this project? (playwright-cli + pnpm run dev; no per-project scaffold needed)",
54
+ "question": "Record how the app starts and how a person signs in locally, so merged changes get screenshots?",
55
55
  "options": [
56
- { "label": "Yes", "description": "Evidence will be captured automatically by /plan-goal using playwright-cli + pnpm run dev." },
57
- { "label": "No", "description": "Skip evidence capture." }
56
+ { "label": "Yes", "description": "Fill the project environment in pc-repo-verify: start command, URL, local sign-in, seeded data." },
57
+ { "label": "No", "description": "Skip; the verification plans will look for the sign-in themselves." }
58
58
  ]
59
59
  }
60
60
  ]
@@ -93,7 +93,14 @@ Always. Load `pc-make-guardrails`.
93
93
 
94
94
  ## Step 7, Visual evidence
95
95
 
96
- If Yes, there is nothing to scaffold: `pc-ops-evidence` drives `playwright-cli` against the project's root `pnpm run dev`, which has to start the full stack with mock auth. CI installs `playwright-cli` itself.
96
+ If Yes. Every change's verification plan (`pc-repo-verify`) is replayed in headless Chromium by the evidence workflow when its pull request merges, from a freshly started app with nothing in the browser. Find in the source, and confirm by reading the root `package.json`, `.env.example` and the local auth setup:
97
+
98
+ - the command that starts the whole stack with mock authentication (normally `pnpm run dev` at the root),
99
+ - the URL the web app answers on,
100
+ - the local sign-in: the exact steps and visible labels of the mock account picker or dev login,
101
+ - the data a fresh start seeds (accounts, records) that a journey can rely on.
102
+
103
+ Write them as the bullet list between `<!-- PC-PROJECT-ENVIRONMENT-START -->` and `<!-- PC-PROJECT-ENVIRONMENT-END -->` in `.agents/skills/pc-repo-verify/SKILL.md`, replacing the placeholder bullets. Only that slot: the rest of the file is the harness's, and an update keeps only the slot.
97
104
 
98
105
  ## Step 8, Show help
99
106
 
@@ -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` (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
+ ---
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` |
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.