@plainconceptsplatform/agent-harness 3.4.1 → 3.5.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/cli/commands/update.js +121 -121
- 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-ship/az.md +81 -81
- package/cli/presets/agents-content.json +34 -34
- package/cli/presets/browser.json +10 -10
- package/cli/steps/browser/index.js +48 -48
- package/cli/steps/copy/commands.js +79 -79
- package/cli/steps/copy/index.js +88 -88
- package/cli/steps/metadata/index.js +115 -115
- package/cli/steps/models/write.js +38 -38
- 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/plan-apply.md +9 -9
- package/harness/.opencode/commands/plan-goal.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/scripts/check-diff.mjs +9 -1
- package/harness/AGENTS.md +49 -49
- package/package.json +1 -1
- package/skills/README.md +18 -18
- package/skills/browser-automation/SKILL.md +72 -72
- package/skills/pc-make-architecture/SKILL.md +32 -32
- package/skills/pc-make-design/SKILL.md +45 -45
- package/skills/pc-make-engineer/signal-mapping.md +53 -53
- package/skills/pc-make-guardrails/SKILL.md +44 -44
- package/skills/pc-make-user-model/SKILL.md +56 -56
- package/skills/pc-plan-apply/SKILL.md +2 -0
- package/skills/pc-plan-archive/SKILL.md +66 -66
- package/skills/pc-plan-goal/branching.md +39 -39
- package/skills/pc-plan-goal/output.md +71 -71
- package/skills/pc-plan-story/SKILL.md +93 -93
- package/skills/pc-repo-initialize/SKILL.md +119 -119
- package/skills/pc-repo-onboard/SKILL.md +32 -32
- 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,96 +1,96 @@
|
|
|
1
|
-
2. **Find the oldest change with a completed MR**
|
|
2
|
-
|
|
3
|
-
List unarchived changes (top-level only, excludes `archive/`):
|
|
4
|
-
|
|
5
|
-
```bash
|
|
6
|
-
find "$REPO_ROOT/openspec/changes" -mindepth 1 -maxdepth 1 -type d -not -name 'archive' | sort
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
If empty, report a blocker and stop.
|
|
10
|
-
|
|
11
|
-
List completed merge requests:
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
glab mr list --repo {owner}/{repo} --merged --output json --jq 'sort_by(.merged_at) | .[] | {name: .title, sourceRefName: .source_branch, mergedAt: .merged_at, mergeRequestId: .iid}'
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
Match each change to a completed MR using its ID and slug as search hints:
|
|
18
|
-
- No match → skip (record as blocked: `no merged MR found`).
|
|
19
|
-
- One match → eligible.
|
|
20
|
-
- Multiple matches → ask the user which MR belongs to that change.
|
|
21
|
-
|
|
22
|
-
If nothing is eligible, report a blocker and stop. Otherwise select the eligible change with the **oldest** MR `merged_at` as the candidate.
|
|
23
|
-
|
|
24
|
-
3. **Confirm the candidate**
|
|
25
|
-
|
|
26
|
-
Show the candidate (ID, title, MR ID, merged date) and any blocked changes, then ask:
|
|
27
|
-
|
|
28
|
-
```text
|
|
29
|
-
Oldest unarchived merged change found:
|
|
30
|
-
ID: {change-id}
|
|
31
|
-
Title: {title from resolved MR}
|
|
32
|
-
MR ID: {iid}
|
|
33
|
-
Merged: {merged_at}
|
|
34
|
-
|
|
35
|
-
Proceed with archiving? [yes/no]
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
Stop if the user does not confirm.
|
|
39
|
-
|
|
40
|
-
4. **Archive the change**
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
git checkout -b archive/{change-id}
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Load `@openspec-archive-change` skill and follow it to archive the change.
|
|
47
|
-
|
|
48
|
-
5. **Update docs**
|
|
49
|
-
|
|
50
|
-
Compare the archived change's specs against `ARCHITECTURE.md` and `DESIGN.md`. If updates are needed, show them and get user approval before applying.
|
|
51
|
-
|
|
52
|
-
6. **Create the archive MR**
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
# Stage specific paths only: a shared tree may hold another agent's or a
|
|
56
|
-
# person's edits, and -A commits them under this message.
|
|
57
|
-
git add openspec/changes/ # plus ARCHITECTURE.md / DESIGN.md if step 5 updated them
|
|
58
|
-
git commit -m "archive: {title} ({change-id})"
|
|
59
|
-
git push origin archive/{change-id}
|
|
60
|
-
|
|
61
|
-
glab mr create \
|
|
62
|
-
--repo {owner}/{repo} \
|
|
63
|
-
--source-branch "archive/{change-id}" \
|
|
64
|
-
--target-branch "$DEFAULT_BRANCH" \
|
|
65
|
-
--title "archive: {title} ({change-id})" \
|
|
66
|
-
--description "Archive SDD artifacts for {change-id} after merge."
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
If work was stashed in step 1, restore it after the MR is created unless the user opts out.
|
|
70
|
-
|
|
71
|
-
7. **Report**
|
|
72
|
-
|
|
73
|
-
Display:
|
|
74
|
-
|
|
75
|
-
```text
|
|
76
|
-
Archive complete
|
|
77
|
-
|
|
78
|
-
Change ID: {change-id}
|
|
79
|
-
Title: {title}
|
|
80
|
-
Original MR: {original-mr-link}
|
|
81
|
-
Archive MR: {archive-mr-link}
|
|
82
|
-
|
|
83
|
-
Documentation updates:
|
|
84
|
-
- ARCHITECTURE.md: {count} changes applied
|
|
85
|
-
- DESIGN.md: {count} changes applied
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## Rules
|
|
89
|
-
|
|
90
|
-
- All OpenSpec paths resolve from `git rev-parse --show-toplevel`. Never use `/openspec/...`.
|
|
91
|
-
- Only process top-level directories in `$REPO_ROOT/openspec/changes/`; exclude `archive/`.
|
|
92
|
-
- Use change ID and slug only as search hints; do not assume the source branch name.
|
|
93
|
-
- The oldest eligible merged change is the only candidate: never ask the user which change to archive (but do ask which MR if multiple match one change).
|
|
94
|
-
- Never proceed if the selected MR is not completed.
|
|
95
|
-
- Never use browser tools or direct web requests for GitLab. Use `glab` CLI only.
|
|
96
|
-
- Never invent or guess MR, branch, or merge metadata.
|
|
1
|
+
2. **Find the oldest change with a completed MR**
|
|
2
|
+
|
|
3
|
+
List unarchived changes (top-level only, excludes `archive/`):
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
find "$REPO_ROOT/openspec/changes" -mindepth 1 -maxdepth 1 -type d -not -name 'archive' | sort
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
If empty, report a blocker and stop.
|
|
10
|
+
|
|
11
|
+
List completed merge requests:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
glab mr list --repo {owner}/{repo} --merged --output json --jq 'sort_by(.merged_at) | .[] | {name: .title, sourceRefName: .source_branch, mergedAt: .merged_at, mergeRequestId: .iid}'
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Match each change to a completed MR using its ID and slug as search hints:
|
|
18
|
+
- No match → skip (record as blocked: `no merged MR found`).
|
|
19
|
+
- One match → eligible.
|
|
20
|
+
- Multiple matches → ask the user which MR belongs to that change.
|
|
21
|
+
|
|
22
|
+
If nothing is eligible, report a blocker and stop. Otherwise select the eligible change with the **oldest** MR `merged_at` as the candidate.
|
|
23
|
+
|
|
24
|
+
3. **Confirm the candidate**
|
|
25
|
+
|
|
26
|
+
Show the candidate (ID, title, MR ID, merged date) and any blocked changes, then ask:
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
Oldest unarchived merged change found:
|
|
30
|
+
ID: {change-id}
|
|
31
|
+
Title: {title from resolved MR}
|
|
32
|
+
MR ID: {iid}
|
|
33
|
+
Merged: {merged_at}
|
|
34
|
+
|
|
35
|
+
Proceed with archiving? [yes/no]
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Stop if the user does not confirm.
|
|
39
|
+
|
|
40
|
+
4. **Archive the change**
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
git checkout -b archive/{change-id}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Load `@openspec-archive-change` skill and follow it to archive the change.
|
|
47
|
+
|
|
48
|
+
5. **Update docs**
|
|
49
|
+
|
|
50
|
+
Compare the archived change's specs against `ARCHITECTURE.md` and `DESIGN.md`. If updates are needed, show them and get user approval before applying.
|
|
51
|
+
|
|
52
|
+
6. **Create the archive MR**
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Stage specific paths only: a shared tree may hold another agent's or a
|
|
56
|
+
# person's edits, and -A commits them under this message.
|
|
57
|
+
git add openspec/changes/ # plus ARCHITECTURE.md / DESIGN.md if step 5 updated them
|
|
58
|
+
git commit -m "archive: {title} ({change-id})"
|
|
59
|
+
git push origin archive/{change-id}
|
|
60
|
+
|
|
61
|
+
glab mr create \
|
|
62
|
+
--repo {owner}/{repo} \
|
|
63
|
+
--source-branch "archive/{change-id}" \
|
|
64
|
+
--target-branch "$DEFAULT_BRANCH" \
|
|
65
|
+
--title "archive: {title} ({change-id})" \
|
|
66
|
+
--description "Archive SDD artifacts for {change-id} after merge."
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
If work was stashed in step 1, restore it after the MR is created unless the user opts out.
|
|
70
|
+
|
|
71
|
+
7. **Report**
|
|
72
|
+
|
|
73
|
+
Display:
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
Archive complete
|
|
77
|
+
|
|
78
|
+
Change ID: {change-id}
|
|
79
|
+
Title: {title}
|
|
80
|
+
Original MR: {original-mr-link}
|
|
81
|
+
Archive MR: {archive-mr-link}
|
|
82
|
+
|
|
83
|
+
Documentation updates:
|
|
84
|
+
- ARCHITECTURE.md: {count} changes applied
|
|
85
|
+
- DESIGN.md: {count} changes applied
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Rules
|
|
89
|
+
|
|
90
|
+
- All OpenSpec paths resolve from `git rev-parse --show-toplevel`. Never use `/openspec/...`.
|
|
91
|
+
- Only process top-level directories in `$REPO_ROOT/openspec/changes/`; exclude `archive/`.
|
|
92
|
+
- Use change ID and slug only as search hints; do not assume the source branch name.
|
|
93
|
+
- The oldest eligible merged change is the only candidate: never ask the user which change to archive (but do ask which MR if multiple match one change).
|
|
94
|
+
- Never proceed if the selected MR is not completed.
|
|
95
|
+
- Never use browser tools or direct web requests for GitLab. Use `glab` CLI only.
|
|
96
|
+
- Never invent or guess MR, branch, or merge metadata.
|
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
2. **Find the oldest unarchived change**
|
|
2
|
-
|
|
3
|
-
List unarchived changes (top-level only, excludes `archive/`):
|
|
4
|
-
|
|
5
|
-
```bash
|
|
6
|
-
find "$REPO_ROOT/openspec/changes" -mindepth 1 -maxdepth 1 -type d -not -name 'archive' | sort
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
If empty, report a blocker and stop. Otherwise select the **oldest** change (by directory creation/sort order) as the candidate.
|
|
10
|
-
|
|
11
|
-
This mode has no platform PR integration, so completion is judged from local state only. Do not look up remote PRs or work items.
|
|
12
|
-
|
|
13
|
-
3. **Confirm the candidate**
|
|
14
|
-
|
|
15
|
-
Show the candidate (ID, title) and any other unarchived changes, then ask:
|
|
16
|
-
|
|
17
|
-
```text
|
|
18
|
-
Oldest unarchived change found:
|
|
19
|
-
ID: {change-id}
|
|
20
|
-
Title: {title from proposal.md}
|
|
21
|
-
|
|
22
|
-
Proceed with archiving? [yes/no]
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
Stop if the user does not confirm.
|
|
26
|
-
|
|
27
|
-
4. **Archive the change**
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
git checkout -b archive/{change-id}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
Load `@openspec-archive-change` skill and follow it to archive the change.
|
|
34
|
-
|
|
35
|
-
5. **Update docs**
|
|
36
|
-
|
|
37
|
-
Compare the archived change's specs against `ARCHITECTURE.md` and `DESIGN.md`. If updates are needed, show them and get user approval before applying.
|
|
38
|
-
|
|
39
|
-
6. **Commit the archive**
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
# Stage specific paths only: a shared tree may hold another agent's or a
|
|
43
|
-
# person's edits, and -A commits them under this message.
|
|
44
|
-
git add openspec/changes/ # plus ARCHITECTURE.md / DESIGN.md if step 5 updated them
|
|
45
|
-
git commit -m "archive: {title} ({change-id})"
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
No PR is created in this mode. Leave the `archive/{change-id}` branch for the user to merge or push manually if they choose.
|
|
49
|
-
|
|
50
|
-
If work was stashed in step 1, restore it after the commit unless the user opts out.
|
|
51
|
-
|
|
52
|
-
7. **Report**
|
|
53
|
-
|
|
54
|
-
Display:
|
|
55
|
-
|
|
56
|
-
```text
|
|
57
|
-
Archive complete
|
|
58
|
-
|
|
59
|
-
Change ID: {change-id}
|
|
60
|
-
Title: {title}
|
|
61
|
-
Archive branch: archive/{change-id}
|
|
62
|
-
|
|
63
|
-
Documentation updates:
|
|
64
|
-
- ARCHITECTURE.md: {count} changes applied
|
|
65
|
-
- DESIGN.md: {count} changes applied
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## Rules
|
|
69
|
-
|
|
70
|
-
- All OpenSpec paths resolve from `git rev-parse --show-toplevel`. Never use `/openspec/...`.
|
|
71
|
-
- Only process top-level directories in `$REPO_ROOT/openspec/changes/`; exclude `archive/`.
|
|
72
|
-
- Use change ID and slug only as search hints; do not assume the source branch name.
|
|
73
|
-
- The oldest unarchived change is the only candidate: never ask the user which change to archive.
|
|
74
|
-
- This mode has no GitHub or Azure DevOps integration. Never call `gh` or `az`, and never use browser tools or direct web requests for PR/work-item lookups.
|
|
75
|
-
- Never invent or guess PR, branch, or merge metadata.
|
|
1
|
+
2. **Find the oldest unarchived change**
|
|
2
|
+
|
|
3
|
+
List unarchived changes (top-level only, excludes `archive/`):
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
find "$REPO_ROOT/openspec/changes" -mindepth 1 -maxdepth 1 -type d -not -name 'archive' | sort
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
If empty, report a blocker and stop. Otherwise select the **oldest** change (by directory creation/sort order) as the candidate.
|
|
10
|
+
|
|
11
|
+
This mode has no platform PR integration, so completion is judged from local state only. Do not look up remote PRs or work items.
|
|
12
|
+
|
|
13
|
+
3. **Confirm the candidate**
|
|
14
|
+
|
|
15
|
+
Show the candidate (ID, title) and any other unarchived changes, then ask:
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
Oldest unarchived change found:
|
|
19
|
+
ID: {change-id}
|
|
20
|
+
Title: {title from proposal.md}
|
|
21
|
+
|
|
22
|
+
Proceed with archiving? [yes/no]
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Stop if the user does not confirm.
|
|
26
|
+
|
|
27
|
+
4. **Archive the change**
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
git checkout -b archive/{change-id}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Load `@openspec-archive-change` skill and follow it to archive the change.
|
|
34
|
+
|
|
35
|
+
5. **Update docs**
|
|
36
|
+
|
|
37
|
+
Compare the archived change's specs against `ARCHITECTURE.md` and `DESIGN.md`. If updates are needed, show them and get user approval before applying.
|
|
38
|
+
|
|
39
|
+
6. **Commit the archive**
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Stage specific paths only: a shared tree may hold another agent's or a
|
|
43
|
+
# person's edits, and -A commits them under this message.
|
|
44
|
+
git add openspec/changes/ # plus ARCHITECTURE.md / DESIGN.md if step 5 updated them
|
|
45
|
+
git commit -m "archive: {title} ({change-id})"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
No PR is created in this mode. Leave the `archive/{change-id}` branch for the user to merge or push manually if they choose.
|
|
49
|
+
|
|
50
|
+
If work was stashed in step 1, restore it after the commit unless the user opts out.
|
|
51
|
+
|
|
52
|
+
7. **Report**
|
|
53
|
+
|
|
54
|
+
Display:
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
Archive complete
|
|
58
|
+
|
|
59
|
+
Change ID: {change-id}
|
|
60
|
+
Title: {title}
|
|
61
|
+
Archive branch: archive/{change-id}
|
|
62
|
+
|
|
63
|
+
Documentation updates:
|
|
64
|
+
- ARCHITECTURE.md: {count} changes applied
|
|
65
|
+
- DESIGN.md: {count} changes applied
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Rules
|
|
69
|
+
|
|
70
|
+
- All OpenSpec paths resolve from `git rev-parse --show-toplevel`. Never use `/openspec/...`.
|
|
71
|
+
- Only process top-level directories in `$REPO_ROOT/openspec/changes/`; exclude `archive/`.
|
|
72
|
+
- Use change ID and slug only as search hints; do not assume the source branch name.
|
|
73
|
+
- The oldest unarchived change is the only candidate: never ask the user which change to archive.
|
|
74
|
+
- This mode has no GitHub or Azure DevOps integration. Never call `gh` or `az`, and never use browser tools or direct web requests for PR/work-item lookups.
|
|
75
|
+
- Never invent or guess PR, branch, or merge metadata.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
## CodeGraph
|
|
2
|
-
|
|
3
|
-
- `codegraph_explore` replaces grep, glob and read for anything indexed: one call returns the relevant symbols' verbatim, line-numbered source plus the call paths between them, where finding the same thing by hand takes a dozen. Give it a symbol name, a file path, or a plain question.
|
|
4
|
-
- Fall back to grep, glob and read when it returns nothing, or for what it does not index: config files, plain-text docs, `.env` patterns, raw string searches. Say that it returned nothing when you do.
|
|
5
|
-
- It is an MCP server, not a CLI. Never run `codegraph` in bash.
|
|
1
|
+
## CodeGraph
|
|
2
|
+
|
|
3
|
+
- `codegraph_explore` replaces grep, glob and read for anything indexed: one call returns the relevant symbols' verbatim, line-numbered source plus the call paths between them, where finding the same thing by hand takes a dozen. Give it a symbol name, a file path, or a plain question.
|
|
4
|
+
- Fall back to grep, glob and read when it returns nothing, or for what it does not index: config files, plain-text docs, `.env` patterns, raw string searches. Say that it returned nothing when you do.
|
|
5
|
+
- It is an MCP server, not a CLI. Never run `codegraph` in bash.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
## Humanizer (optimization skill)
|
|
2
|
-
|
|
3
|
-
- Load `skill("humanizer")` before writing prose (commit messages, PR descriptions, docs, proposals); unhumanized prose reads as machine-written. Editing, shell and spawning stay blocked until it is loaded (pc-system-reminders).
|
|
4
|
-
- Never apply it to code, config files, or terminal output: prose only.
|
|
1
|
+
## Humanizer (optimization skill)
|
|
2
|
+
|
|
3
|
+
- Load `skill("humanizer")` before writing prose (commit messages, PR descriptions, docs, proposals); unhumanized prose reads as machine-written. Editing, shell and spawning stay blocked until it is loaded (pc-system-reminders).
|
|
4
|
+
- Never apply it to code, config files, or terminal output: prose only.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
## Agentmemory
|
|
2
|
-
|
|
3
|
-
- Cross-session context lives in the agentmemory MCP tools: `memory_smart_search` for prior decisions before working somewhere unfamiliar, `memory_save` for architecture decisions and anything the next agent will need, plus `memory_sessions` and `memory_governance_delete`.
|
|
4
|
-
- It is an MCP server, not a CLI. Never run `agentmemory` in bash; start it with `agentmemory` in a separate terminal and use the tools.
|
|
1
|
+
## Agentmemory
|
|
2
|
+
|
|
3
|
+
- Cross-session context lives in the agentmemory MCP tools: `memory_smart_search` for prior decisions before working somewhere unfamiliar, `memory_save` for architecture decisions and anything the next agent will need, plus `memory_sessions` and `memory_governance_delete`.
|
|
4
|
+
- It is an MCP server, not a CLI. Never run `agentmemory` in bash; start it with `agentmemory` in a separate terminal and use the tools.
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
## RTK
|
|
2
|
-
|
|
3
|
-
- Prefix CLI commands with `rtk` (`rtk git diff`, `rtk pnpm test`); it strips the output down to what matters. Read-only commands like `cat`, `ls` and `Get-Content` are exempt.
|
|
1
|
+
## RTK
|
|
2
|
+
|
|
3
|
+
- Prefix CLI commands with `rtk` (`rtk git diff`, `rtk pnpm test`); it strips the output down to what matters. Read-only commands like `cat`, `ls` and `Get-Content` are exempt.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
## Simple English (optimization skill)
|
|
2
|
-
|
|
3
|
-
- Apply Simplified Technical English to all prose: `skill("simple-english")`. Editing, shell and spawning stay blocked until it is loaded (pc-system-reminders).
|
|
4
|
-
- Keep code blocks, identifiers, CLI commands, file paths, quoted errors, and product names exact.
|
|
1
|
+
## Simple English (optimization skill)
|
|
2
|
+
|
|
3
|
+
- Apply Simplified Technical English to all prose: `skill("simple-english")`. Editing, shell and spawning stay blocked until it is loaded (pc-system-reminders).
|
|
4
|
+
- Keep code blocks, identifiers, CLI commands, file paths, quoted errors, and product names exact.
|
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
Azure DevOps data comes from the `az` CLI; a page fetch of dev.azure.com is denied (pc-system-reminders). If `az` is unavailable, report it as a blocker. Browser tools reach only the local app on `localhost`.
|
|
2
|
-
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
### Step 1: Verify feature branch
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
git branch --show-current
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
Branch must be `feature/{id}-{slug}`. NEVER push to `main`.
|
|
12
|
-
|
|
13
|
-
### Step 2: Capture screenshots (if UI changes exist)
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
browser_navigate url="http://localhost:{port}/{route}"
|
|
17
|
-
browser_wait ms=2000
|
|
18
|
-
browser_screenshot
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Save to: `openspec/changes/{change-name}/images/{feature}.png`
|
|
22
|
-
|
|
23
|
-
### Step 3: Commit and push
|
|
24
|
-
|
|
25
|
-
The `pc-plan-apply` skill already committed each task group: usually only screenshots or small residuals remain. Stage the paths you actually changed; unscoped staging is denied (`pc-system-reminders`):
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
git add openspec/changes/{change-name}/images/ # plus any other paths you actually changed
|
|
29
|
-
git commit -m "feat({scope}): {description} (#{id})"
|
|
30
|
-
git push origin feature/{id}-{slug}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
### Step 4: Create PR
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
az repos pr create \
|
|
37
|
-
--repository {repo} \
|
|
38
|
-
--source-branch feature/{id}-{slug} \
|
|
39
|
-
--target-branch main \
|
|
40
|
-
--title "feat({scope}): {title} (#{id})" \
|
|
41
|
-
--description "{description}"
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### Step 5: Link work item (MANDATORY, run sequentially, not in parallel)
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
az repos pr work-item add --id {pr-id} --work-items {workitem-id}
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### Step 6: Post screenshot comment
|
|
51
|
-
|
|
52
|
-
Build raw URL for each image:
|
|
53
|
-
|
|
54
|
-
```
|
|
55
|
-
https://dev.azure.com/{org}/{project}/_apis/git/repositories/{repo}/items?path=openspec/changes/{change}/images/{file}.png&versionType=branch&version={branch}&api-version=7.1
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
Post via:
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
az devops invoke \
|
|
62
|
-
--area git --resource pullRequestThreads \
|
|
63
|
-
--route-parameters project={project} repositoryId={repo} pullRequestId={pr-id} \
|
|
64
|
-
--http-method POST --api-version 7.1 --in-file body.json
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
`body.json`:
|
|
68
|
-
|
|
69
|
-
```json
|
|
70
|
-
{
|
|
71
|
-
"comments": [
|
|
72
|
-
{
|
|
73
|
-
"parentCommentId": 0,
|
|
74
|
-
"content": "## Screenshots\n\n",
|
|
75
|
-
"commentType": 1
|
|
76
|
-
}
|
|
77
|
-
],
|
|
78
|
-
"status": "active"
|
|
79
|
-
}
|
|
80
|
-
```
|
|
81
|
-
|
|
1
|
+
Azure DevOps data comes from the `az` CLI; a page fetch of dev.azure.com is denied (pc-system-reminders). If `az` is unavailable, report it as a blocker. Browser tools reach only the local app on `localhost`.
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
### Step 1: Verify feature branch
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
git branch --show-current
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Branch must be `feature/{id}-{slug}`. NEVER push to `main`.
|
|
12
|
+
|
|
13
|
+
### Step 2: Capture screenshots (if UI changes exist)
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
browser_navigate url="http://localhost:{port}/{route}"
|
|
17
|
+
browser_wait ms=2000
|
|
18
|
+
browser_screenshot
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Save to: `openspec/changes/{change-name}/images/{feature}.png`
|
|
22
|
+
|
|
23
|
+
### Step 3: Commit and push
|
|
24
|
+
|
|
25
|
+
The `pc-plan-apply` skill already committed each task group: usually only screenshots or small residuals remain. Stage the paths you actually changed; unscoped staging is denied (`pc-system-reminders`):
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
git add openspec/changes/{change-name}/images/ # plus any other paths you actually changed
|
|
29
|
+
git commit -m "feat({scope}): {description} (#{id})"
|
|
30
|
+
git push origin feature/{id}-{slug}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Step 4: Create PR
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
az repos pr create \
|
|
37
|
+
--repository {repo} \
|
|
38
|
+
--source-branch feature/{id}-{slug} \
|
|
39
|
+
--target-branch main \
|
|
40
|
+
--title "feat({scope}): {title} (#{id})" \
|
|
41
|
+
--description "{description}"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Step 5: Link work item (MANDATORY, run sequentially, not in parallel)
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
az repos pr work-item add --id {pr-id} --work-items {workitem-id}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Step 6: Post screenshot comment
|
|
51
|
+
|
|
52
|
+
Build raw URL for each image:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
https://dev.azure.com/{org}/{project}/_apis/git/repositories/{repo}/items?path=openspec/changes/{change}/images/{file}.png&versionType=branch&version={branch}&api-version=7.1
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Post via:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
az devops invoke \
|
|
62
|
+
--area git --resource pullRequestThreads \
|
|
63
|
+
--route-parameters project={project} repositoryId={repo} pullRequestId={pr-id} \
|
|
64
|
+
--http-method POST --api-version 7.1 --in-file body.json
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
`body.json`:
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"comments": [
|
|
72
|
+
{
|
|
73
|
+
"parentCommentId": 0,
|
|
74
|
+
"content": "## Screenshots\n\n",
|
|
75
|
+
"commentType": 1
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
"status": "active"
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
82
|
---
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
{
|
|
2
|
-
"platform": {
|
|
3
|
-
"none": {
|
|
4
|
-
"workflow": "There is no backlog and no PR integration here, so the work arrives in the conversation and the local repository is the only context.\n\n- A described feature, bug or refactor: clarify if needed, then `pc-plan-propose` when the change is worth planning, or straight to `pc-plan-apply`.\n- An existing OpenSpec change, plus any of `implement` / `start` / `go`: `pc-plan-apply`.\n- `just do it` or `quick fix`: work in this session, no proposal, no ceremony.\n\nA GitHub or Azure DevOps URL is not a trigger in this mode; re-run onboarding to configure a platform.",
|
|
5
|
-
"skillsGuide": "No platform skills installed (platform: none). Work from direct user instructions and local OpenSpec artifacts only."
|
|
6
|
-
},
|
|
7
|
-
"azure": {
|
|
8
|
-
"workflow": "An Azure DevOps work item or PR URL in the user's message means run the pipeline, in whatever words it arrives, unless they asked for analysis or context only.\n\n- Work item URL: `pc-userstory` to parse it, `pc-plan-propose` for the plan, confirm, `pc-plan-apply` to build, then ship.\n- An existing OpenSpec change, plus any of `implement` / `start` / `go`: `pc-plan-apply`, then ship.\n- A PR URL with a feedback or fix request: read the PR comments, fix, update the PR.",
|
|
9
|
-
"skillsGuide": "Platform skills (Azure DevOps):\n- `@pc-userstory`: load when an Azure DevOps work item URL is detected. Fetches the work item via `az` CLI and creates an OpenSpec change. NEVER use browser tools for Azure DevOps operations.\n- `pc-ops-ship`: load in ship mode to create a PR and link the work item, or in feedback mode to read and classify PR review comments."
|
|
10
|
-
},
|
|
11
|
-
"github": {
|
|
12
|
-
"workflow": "A GitHub Issue or PR URL in the user's message means run the pipeline, in whatever words it arrives, unless they asked for analysis or context only.\n\n- Issue URL: `pc-userstory` to parse it, `pc-plan-propose` for the plan, confirm, `pc-plan-apply` to build, then ship.\n- An existing OpenSpec change, plus any of `implement` / `start` / `go`: `pc-plan-apply`, then ship.\n- A PR URL with a feedback or fix request: read the PR comments, fix, update the PR.",
|
|
13
|
-
"skillsGuide": "Platform skills (GitHub):\n- `@pc-userstory`: load when a GitHub Issue URL is detected. Fetches the issue via `gh` CLI and creates an OpenSpec change. NEVER use webfetch to access GitHub URLs.\n- `pc-ops-ship`: load in ship mode to create a PR with screenshots, or in feedback mode to read and classify PR review comments."
|
|
14
|
-
},
|
|
15
|
-
"mixed": {
|
|
16
|
-
"default": {
|
|
17
|
-
"workflow": "The backlog and the repo are on different platforms here: `.opencode/harness.json` → `platform.backlog` and `platform.repo`. Never cross them. Work items always come from the backlog CLI and pull requests always from the repo CLI, or the command fails against the wrong host and the fallback is a page fetch that is denied.\n\nA work item URL, or a PR URL with a feedback request, means run the pipeline, in whatever words it arrives, unless the user asked for analysis or context only.\n\n- Work item URL or issue key: `pc-userstory` (backlog CLI) to parse it, `pc-plan-propose` for the plan, confirm, `pc-plan-apply` to build, `pc-ops-ship` (repo CLI) to ship.\n- An existing OpenSpec change, plus any of `implement` / `start` / `go`: `pc-plan-apply`, then ship.\n- A PR or MR URL with a feedback or fix request: read its comments through the repo CLI, fix, update it.",
|
|
18
|
-
"skillsGuide": "Mixed platform setup: the two platform skills target different hosts:\n- `@pc-userstory` → fetches work items from the backlog platform. Load when a work-item URL or issue key is provided.\n- `pc-ops-ship` → creates PRs/MRs and triages review feedback on the repo platform. Load in ship mode or PR-feedback mode."
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
"jira": {
|
|
22
|
-
"workflow": "A Jira URL or a bare issue key (`PROJ-123`) means run the pipeline, in whatever words it arrives, unless they asked for analysis or context only.\n\n- Either one: `pc-userstory` to fetch it through `acli jira`, `pc-plan-propose` for the plan, confirm, `pc-plan-apply` to build, then ship.\n- An existing OpenSpec change, plus any of `implement` / `start` / `go`: `pc-plan-apply`, then ship.\n\nJira has no pull requests: PR work runs on the repo platform in `platform.repo`.",
|
|
23
|
-
"skillsGuide": "### Backlog Platform: Jira\n- `pc-userstory` -> fetches Jira work items via `acli jira` CLI. Load when a Jira URL or issue key is provided.\n\n### Repo Platform\n- PR skills are loaded based on `platform.repo` (GitHub or Azure DevOps)."
|
|
24
|
-
},
|
|
25
|
-
"gitlab": {
|
|
26
|
-
"workflow": "A backlog work item URL, or a GitLab MR URL with a feedback request, means run the pipeline, in whatever words it arrives, unless they asked for analysis or context only.\n\n- Work item URL: `pc-userstory` to fetch it through the backlog CLI, `pc-plan-propose` for the plan, confirm, `pc-plan-apply` to build, then ship.\n- An existing OpenSpec change, plus any of `implement` / `start` / `go`: `pc-plan-apply`, then ship.\n- An MR URL with a feedback or fix request: `glab mr note list`, triage, fix, update the MR.\n\nGitLab has no backlog here: work items come from the platform in `platform.backlog`.",
|
|
27
|
-
"skillsGuide": "### Repo Platform: GitLab\n- `pc-ops-ship` -> creates GitLab merge requests via `glab` CLI. Load when shipping a branch or processing MR feedback.\n\n### Backlog Platform\n- Work item skills are loaded based on `platform.backlog` (GitHub / Azure / Jira)."
|
|
28
|
-
},
|
|
29
|
-
"browser": {
|
|
30
|
-
"workflow": "Any work item URL means run the pipeline, whichever tool it points at, unless the user asked for analysis or context only.\n\n- The URL: `pc-userstory` to open and read the page, `pc-plan-propose` for the plan, confirm, `pc-plan-apply` to build, then ship.\n- An existing OpenSpec change, plus any of `implement` / `start` / `go`: `pc-plan-apply`, then ship.\n\nBrowser is backlog-only: PR work runs on the repo platform in `platform.repo`.",
|
|
31
|
-
"skillsGuide": "### Backlog Platform: Others (Browser)\n- `pc-userstory` -> opens work item URLs via agent-browser, reads page content, creates OpenSpec changes. Load when a URL the user provides does not match GitHub/Azure/Jira CLI platforms.\n\n### Repo Platform\n- PR skills are loaded based on `platform.repo` (GitHub / Azure DevOps / GitLab)."
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"platform": {
|
|
3
|
+
"none": {
|
|
4
|
+
"workflow": "There is no backlog and no PR integration here, so the work arrives in the conversation and the local repository is the only context.\n\n- A described feature, bug or refactor: clarify if needed, then `pc-plan-propose` when the change is worth planning, or straight to `pc-plan-apply`.\n- An existing OpenSpec change, plus any of `implement` / `start` / `go`: `pc-plan-apply`.\n- `just do it` or `quick fix`: work in this session, no proposal, no ceremony.\n\nA GitHub or Azure DevOps URL is not a trigger in this mode; re-run onboarding to configure a platform.",
|
|
5
|
+
"skillsGuide": "No platform skills installed (platform: none). Work from direct user instructions and local OpenSpec artifacts only."
|
|
6
|
+
},
|
|
7
|
+
"azure": {
|
|
8
|
+
"workflow": "An Azure DevOps work item or PR URL in the user's message means run the pipeline, in whatever words it arrives, unless they asked for analysis or context only.\n\n- Work item URL: `pc-userstory` to parse it, `pc-plan-propose` for the plan, confirm, `pc-plan-apply` to build, then ship.\n- An existing OpenSpec change, plus any of `implement` / `start` / `go`: `pc-plan-apply`, then ship.\n- A PR URL with a feedback or fix request: read the PR comments, fix, update the PR.",
|
|
9
|
+
"skillsGuide": "Platform skills (Azure DevOps):\n- `@pc-userstory`: load when an Azure DevOps work item URL is detected. Fetches the work item via `az` CLI and creates an OpenSpec change. NEVER use browser tools for Azure DevOps operations.\n- `pc-ops-ship`: load in ship mode to create a PR and link the work item, or in feedback mode to read and classify PR review comments."
|
|
10
|
+
},
|
|
11
|
+
"github": {
|
|
12
|
+
"workflow": "A GitHub Issue or PR URL in the user's message means run the pipeline, in whatever words it arrives, unless they asked for analysis or context only.\n\n- Issue URL: `pc-userstory` to parse it, `pc-plan-propose` for the plan, confirm, `pc-plan-apply` to build, then ship.\n- An existing OpenSpec change, plus any of `implement` / `start` / `go`: `pc-plan-apply`, then ship.\n- A PR URL with a feedback or fix request: read the PR comments, fix, update the PR.",
|
|
13
|
+
"skillsGuide": "Platform skills (GitHub):\n- `@pc-userstory`: load when a GitHub Issue URL is detected. Fetches the issue via `gh` CLI and creates an OpenSpec change. NEVER use webfetch to access GitHub URLs.\n- `pc-ops-ship`: load in ship mode to create a PR with screenshots, or in feedback mode to read and classify PR review comments."
|
|
14
|
+
},
|
|
15
|
+
"mixed": {
|
|
16
|
+
"default": {
|
|
17
|
+
"workflow": "The backlog and the repo are on different platforms here: `.opencode/harness.json` → `platform.backlog` and `platform.repo`. Never cross them. Work items always come from the backlog CLI and pull requests always from the repo CLI, or the command fails against the wrong host and the fallback is a page fetch that is denied.\n\nA work item URL, or a PR URL with a feedback request, means run the pipeline, in whatever words it arrives, unless the user asked for analysis or context only.\n\n- Work item URL or issue key: `pc-userstory` (backlog CLI) to parse it, `pc-plan-propose` for the plan, confirm, `pc-plan-apply` to build, `pc-ops-ship` (repo CLI) to ship.\n- An existing OpenSpec change, plus any of `implement` / `start` / `go`: `pc-plan-apply`, then ship.\n- A PR or MR URL with a feedback or fix request: read its comments through the repo CLI, fix, update it.",
|
|
18
|
+
"skillsGuide": "Mixed platform setup: the two platform skills target different hosts:\n- `@pc-userstory` → fetches work items from the backlog platform. Load when a work-item URL or issue key is provided.\n- `pc-ops-ship` → creates PRs/MRs and triages review feedback on the repo platform. Load in ship mode or PR-feedback mode."
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"jira": {
|
|
22
|
+
"workflow": "A Jira URL or a bare issue key (`PROJ-123`) means run the pipeline, in whatever words it arrives, unless they asked for analysis or context only.\n\n- Either one: `pc-userstory` to fetch it through `acli jira`, `pc-plan-propose` for the plan, confirm, `pc-plan-apply` to build, then ship.\n- An existing OpenSpec change, plus any of `implement` / `start` / `go`: `pc-plan-apply`, then ship.\n\nJira has no pull requests: PR work runs on the repo platform in `platform.repo`.",
|
|
23
|
+
"skillsGuide": "### Backlog Platform: Jira\n- `pc-userstory` -> fetches Jira work items via `acli jira` CLI. Load when a Jira URL or issue key is provided.\n\n### Repo Platform\n- PR skills are loaded based on `platform.repo` (GitHub or Azure DevOps)."
|
|
24
|
+
},
|
|
25
|
+
"gitlab": {
|
|
26
|
+
"workflow": "A backlog work item URL, or a GitLab MR URL with a feedback request, means run the pipeline, in whatever words it arrives, unless they asked for analysis or context only.\n\n- Work item URL: `pc-userstory` to fetch it through the backlog CLI, `pc-plan-propose` for the plan, confirm, `pc-plan-apply` to build, then ship.\n- An existing OpenSpec change, plus any of `implement` / `start` / `go`: `pc-plan-apply`, then ship.\n- An MR URL with a feedback or fix request: `glab mr note list`, triage, fix, update the MR.\n\nGitLab has no backlog here: work items come from the platform in `platform.backlog`.",
|
|
27
|
+
"skillsGuide": "### Repo Platform: GitLab\n- `pc-ops-ship` -> creates GitLab merge requests via `glab` CLI. Load when shipping a branch or processing MR feedback.\n\n### Backlog Platform\n- Work item skills are loaded based on `platform.backlog` (GitHub / Azure / Jira)."
|
|
28
|
+
},
|
|
29
|
+
"browser": {
|
|
30
|
+
"workflow": "Any work item URL means run the pipeline, whichever tool it points at, unless the user asked for analysis or context only.\n\n- The URL: `pc-userstory` to open and read the page, `pc-plan-propose` for the plan, confirm, `pc-plan-apply` to build, then ship.\n- An existing OpenSpec change, plus any of `implement` / `start` / `go`: `pc-plan-apply`, then ship.\n\nBrowser is backlog-only: PR work runs on the repo platform in `platform.repo`.",
|
|
31
|
+
"skillsGuide": "### Backlog Platform: Others (Browser)\n- `pc-userstory` -> opens work item URLs via agent-browser, reads page content, creates OpenSpec changes. Load when a URL the user provides does not match GitHub/Azure/Jira CLI platforms.\n\n### Repo Platform\n- PR skills are loaded based on `platform.repo` (GitHub / Azure DevOps / GitLab)."
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|