bigpowers 2.72.0 → 2.73.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.
Files changed (186) hide show
  1. package/.continue/rules/align-grid.md +0 -0
  2. package/.continue/rules/assess-impact.md +0 -0
  3. package/.continue/rules/audit-code.md +0 -0
  4. package/.continue/rules/audit-plan.md +0 -0
  5. package/.continue/rules/build-epic.md +0 -0
  6. package/.continue/rules/change-request.md +0 -0
  7. package/.continue/rules/commit-message.md +0 -0
  8. package/.continue/rules/compose-workflow.md +0 -0
  9. package/.continue/rules/craft-skill.md +0 -0
  10. package/.continue/rules/deepen-architecture.md +0 -0
  11. package/.continue/rules/define-language.md +0 -0
  12. package/.continue/rules/define-success.md +0 -0
  13. package/.continue/rules/delegate-task.md +0 -0
  14. package/.continue/rules/deploy.md +0 -0
  15. package/.continue/rules/design-interface.md +0 -0
  16. package/.continue/rules/develop-tdd.md +0 -0
  17. package/.continue/rules/diagnose-root.md +0 -0
  18. package/.continue/rules/dispatch-agents.md +0 -0
  19. package/.continue/rules/edit-document.md +0 -0
  20. package/.continue/rules/elaborate-spec.md +0 -0
  21. package/.continue/rules/enforce-first.md +0 -0
  22. package/.continue/rules/evolve-skill.md +0 -0
  23. package/.continue/rules/execute-plan.md +0 -0
  24. package/.continue/rules/extract-design.md +0 -0
  25. package/.continue/rules/fix-bug.md +0 -0
  26. package/.continue/rules/gate-trace.md +0 -0
  27. package/.continue/rules/grill-me.md +0 -0
  28. package/.continue/rules/grill-with-docs.md +0 -0
  29. package/.continue/rules/guard-git.md +0 -0
  30. package/.continue/rules/hook-commits.md +0 -0
  31. package/.continue/rules/inspect-quality.md +0 -0
  32. package/.continue/rules/investigate-bug.md +0 -0
  33. package/.continue/rules/kickoff-branch.md +0 -0
  34. package/.continue/rules/maintain-wiki.md +0 -0
  35. package/.continue/rules/map-codebase.md +0 -0
  36. package/.continue/rules/migrate-spec.md +0 -0
  37. package/.continue/rules/model-domain.md +0 -0
  38. package/.continue/rules/orchestrate-project.md +0 -0
  39. package/.continue/rules/organize-workspace.md +0 -0
  40. package/.continue/rules/plan-refactor.md +0 -0
  41. package/.continue/rules/plan-release.md +0 -0
  42. package/.continue/rules/plan-tests.md +0 -0
  43. package/.continue/rules/plan-work.md +0 -0
  44. package/.continue/rules/publish-package.md +0 -0
  45. package/.continue/rules/quick-fix.md +0 -0
  46. package/.continue/rules/release-branch.md +0 -0
  47. package/.continue/rules/request-review.md +0 -0
  48. package/.continue/rules/research-first.md +0 -0
  49. package/.continue/rules/reset-baseline.md +0 -0
  50. package/.continue/rules/respond-review.md +0 -0
  51. package/.continue/rules/run-benchmark.md +0 -0
  52. package/.continue/rules/run-evals.md +0 -0
  53. package/.continue/rules/run-planning.md +0 -0
  54. package/.continue/rules/scope-work.md +0 -0
  55. package/.continue/rules/search-skills.md +0 -0
  56. package/.continue/rules/security-review.md +0 -0
  57. package/.continue/rules/seed-conventions.md +0 -0
  58. package/.continue/rules/session-state.md +0 -0
  59. package/.continue/rules/setup-environment.md +0 -0
  60. package/.continue/rules/simulate-agents.md +0 -0
  61. package/.continue/rules/slice-tasks.md +0 -0
  62. package/.continue/rules/smoke-test.md +0 -0
  63. package/.continue/rules/spike-prototype.md +0 -0
  64. package/.continue/rules/stocktake-skills.md +0 -0
  65. package/.continue/rules/survey-context.md +0 -0
  66. package/.continue/rules/terse-mode.md +0 -0
  67. package/.continue/rules/trace-requirement.md +0 -0
  68. package/.continue/rules/using-bigpowers.md +0 -0
  69. package/.continue/rules/validate-contracts.md +0 -0
  70. package/.continue/rules/validate-fix.md +0 -0
  71. package/.continue/rules/verify-work.md +0 -0
  72. package/.continue/rules/visual-dashboard.md +0 -0
  73. package/.continue/rules/wire-ci.md +0 -0
  74. package/.continue/rules/wire-observability.md +0 -0
  75. package/.continue/rules/write-document.md +0 -0
  76. package/.kilocode/rules/align-grid.md +0 -0
  77. package/.kilocode/rules/assess-impact.md +0 -0
  78. package/.kilocode/rules/audit-code.md +0 -0
  79. package/.kilocode/rules/audit-plan.md +0 -0
  80. package/.kilocode/rules/build-epic.md +0 -0
  81. package/.kilocode/rules/change-request.md +0 -0
  82. package/.kilocode/rules/commit-message.md +0 -0
  83. package/.kilocode/rules/compose-workflow.md +0 -0
  84. package/.kilocode/rules/craft-skill.md +0 -0
  85. package/.kilocode/rules/deepen-architecture.md +0 -0
  86. package/.kilocode/rules/define-language.md +0 -0
  87. package/.kilocode/rules/define-success.md +0 -0
  88. package/.kilocode/rules/delegate-task.md +0 -0
  89. package/.kilocode/rules/deploy.md +0 -0
  90. package/.kilocode/rules/design-interface.md +0 -0
  91. package/.kilocode/rules/develop-tdd.md +0 -0
  92. package/.kilocode/rules/diagnose-root.md +0 -0
  93. package/.kilocode/rules/dispatch-agents.md +0 -0
  94. package/.kilocode/rules/edit-document.md +0 -0
  95. package/.kilocode/rules/elaborate-spec.md +0 -0
  96. package/.kilocode/rules/enforce-first.md +0 -0
  97. package/.kilocode/rules/evolve-skill.md +0 -0
  98. package/.kilocode/rules/execute-plan.md +0 -0
  99. package/.kilocode/rules/extract-design.md +0 -0
  100. package/.kilocode/rules/fix-bug.md +0 -0
  101. package/.kilocode/rules/gate-trace.md +0 -0
  102. package/.kilocode/rules/grill-me.md +0 -0
  103. package/.kilocode/rules/grill-with-docs.md +0 -0
  104. package/.kilocode/rules/guard-git.md +0 -0
  105. package/.kilocode/rules/hook-commits.md +0 -0
  106. package/.kilocode/rules/inspect-quality.md +0 -0
  107. package/.kilocode/rules/investigate-bug.md +0 -0
  108. package/.kilocode/rules/kickoff-branch.md +0 -0
  109. package/.kilocode/rules/maintain-wiki.md +0 -0
  110. package/.kilocode/rules/map-codebase.md +0 -0
  111. package/.kilocode/rules/migrate-spec.md +0 -0
  112. package/.kilocode/rules/model-domain.md +0 -0
  113. package/.kilocode/rules/orchestrate-project.md +0 -0
  114. package/.kilocode/rules/organize-workspace.md +0 -0
  115. package/.kilocode/rules/plan-refactor.md +0 -0
  116. package/.kilocode/rules/plan-release.md +0 -0
  117. package/.kilocode/rules/plan-tests.md +0 -0
  118. package/.kilocode/rules/plan-work.md +0 -0
  119. package/.kilocode/rules/publish-package.md +0 -0
  120. package/.kilocode/rules/quick-fix.md +0 -0
  121. package/.kilocode/rules/release-branch.md +0 -0
  122. package/.kilocode/rules/request-review.md +0 -0
  123. package/.kilocode/rules/research-first.md +0 -0
  124. package/.kilocode/rules/reset-baseline.md +0 -0
  125. package/.kilocode/rules/respond-review.md +0 -0
  126. package/.kilocode/rules/run-benchmark.md +0 -0
  127. package/.kilocode/rules/run-evals.md +0 -0
  128. package/.kilocode/rules/run-planning.md +0 -0
  129. package/.kilocode/rules/scope-work.md +0 -0
  130. package/.kilocode/rules/search-skills.md +0 -0
  131. package/.kilocode/rules/security-review.md +0 -0
  132. package/.kilocode/rules/seed-conventions.md +0 -0
  133. package/.kilocode/rules/session-state.md +0 -0
  134. package/.kilocode/rules/setup-environment.md +0 -0
  135. package/.kilocode/rules/simulate-agents.md +0 -0
  136. package/.kilocode/rules/slice-tasks.md +0 -0
  137. package/.kilocode/rules/smoke-test.md +0 -0
  138. package/.kilocode/rules/spike-prototype.md +0 -0
  139. package/.kilocode/rules/stocktake-skills.md +0 -0
  140. package/.kilocode/rules/survey-context.md +0 -0
  141. package/.kilocode/rules/terse-mode.md +0 -0
  142. package/.kilocode/rules/trace-requirement.md +0 -0
  143. package/.kilocode/rules/using-bigpowers.md +0 -0
  144. package/.kilocode/rules/validate-contracts.md +0 -0
  145. package/.kilocode/rules/validate-fix.md +0 -0
  146. package/.kilocode/rules/verify-work.md +0 -0
  147. package/.kilocode/rules/visual-dashboard.md +0 -0
  148. package/.kilocode/rules/wire-ci.md +0 -0
  149. package/.kilocode/rules/wire-observability.md +0 -0
  150. package/.kilocode/rules/write-document.md +0 -0
  151. package/.pi/package.json +1 -1
  152. package/.pi/prompts/seed-conventions.md +46 -8
  153. package/.pi/prompts/using-bigpowers.md +2 -2
  154. package/.pi/skills/seed-conventions/SKILL.md +46 -8
  155. package/.pi/skills/using-bigpowers/SKILL.md +2 -2
  156. package/CHANGELOG.md +14 -0
  157. package/package.json +1 -1
  158. package/scripts/adapters/agy.sh +6 -0
  159. package/scripts/adapters/aider.sh +7 -0
  160. package/scripts/adapters/cline.sh +8 -0
  161. package/scripts/adapters/continue.sh +11 -0
  162. package/scripts/adapters/cursor.sh +25 -0
  163. package/scripts/adapters/gemini.sh +36 -0
  164. package/scripts/adapters/goose.sh +3 -0
  165. package/scripts/adapters/hermes.sh +10 -0
  166. package/scripts/adapters/iflow.sh +6 -0
  167. package/scripts/adapters/kilocode.sh +11 -0
  168. package/scripts/adapters/omp.sh +10 -0
  169. package/scripts/adapters/pi.sh +37 -0
  170. package/scripts/adapters/qwen.sh +6 -0
  171. package/scripts/adapters/shai.sh +6 -0
  172. package/scripts/adapters/vibe.sh +6 -0
  173. package/scripts/adapters/zed.sh +10 -0
  174. package/scripts/generate-context-bundle.sh +57 -0
  175. package/scripts/install.sh +21 -0
  176. package/scripts/lib/context-wire.sh +66 -0
  177. package/scripts/lib/target-contracts.sh +77 -0
  178. package/scripts/sync-skills.sh +24 -9
  179. package/scripts/targets.yaml +202 -0
  180. package/scripts/test-adapters.sh +80 -0
  181. package/scripts/validate-targets-yaml.sh +69 -0
  182. package/scripts/verify-install.sh +76 -3
  183. package/skills/seed-conventions/REFERENCE.md +40 -5
  184. package/skills/seed-conventions/SKILL.md +6 -3
  185. package/skills/using-bigpowers/SKILL.md +2 -2
  186. package/skills-lock.json +2 -2
@@ -0,0 +1,202 @@
1
+ # story: e37s05
2
+ registry_version: "1"
3
+ generated_by: bigpowers
4
+
5
+ targets:
6
+ - id: cursor
7
+ name: Cursor
8
+ tier: default_on
9
+ skill:
10
+ adapter: cursor
11
+ output: .cursor/rules
12
+ context:
13
+ adapter: cursor
14
+ mode: symlink
15
+ file: CLAUDE.md
16
+ contracts:
17
+ - cursor_rules_nonempty
18
+ - symlink_claude_md
19
+
20
+ - id: gemini
21
+ name: Gemini CLI
22
+ tier: default_on
23
+ skill:
24
+ adapter: gemini
25
+ output: .gemini/extensions/bigpowers
26
+ context:
27
+ adapter: gemini
28
+ mode: symlink
29
+ file: GEMINI.md
30
+ contracts:
31
+ - gemini_ext_exists
32
+
33
+ - id: pi
34
+ name: pi Agent
35
+ tier: default_on
36
+ skill:
37
+ adapter: pi
38
+ output: .pi/skills
39
+ context:
40
+ adapter: pi
41
+ mode: symlink
42
+ file: CLAUDE.md
43
+ contracts:
44
+ - pi_skills_nonempty
45
+
46
+ - id: cline
47
+ name: Cline
48
+ tier: default_on
49
+ skill: null
50
+ context:
51
+ adapter: cline
52
+ mode: native
53
+ contracts:
54
+ - agents_md_exists
55
+
56
+ - id: aider
57
+ name: Aider
58
+ tier: opt_in
59
+ skill: null
60
+ context:
61
+ adapter: aider
62
+ mode: config-bridge
63
+ bridge_file: .aider.conf.yml
64
+ bridge_key: read
65
+ contracts:
66
+ - aider_bridge
67
+
68
+ # Wave A (e37s09) — Goose native AGENTS.md; agy proprietary beta
69
+ - id: goose
70
+ name: Goose (Block OSS)
71
+ tier: default_on
72
+ skill: null
73
+ context:
74
+ adapter: goose
75
+ mode: native
76
+ contracts:
77
+ - agents_md_exists
78
+
79
+ - id: agy
80
+ name: Antigravity agy (proprietary beta)
81
+ tier: opt_in
82
+ skill: null
83
+ context:
84
+ adapter: agy
85
+ mode: symlink
86
+ file: CLAUDE.md
87
+ contracts:
88
+ - symlink_claude_md
89
+
90
+ # Wave B (e37s10) — skills-dir adapters
91
+ - id: zed
92
+ name: Zed
93
+ tier: opt_in
94
+ skill:
95
+ adapter: zed
96
+ output: ~/.config/zed/assistant
97
+ context:
98
+ adapter: zed
99
+ mode: copy
100
+ file: AGENTS.md
101
+ contracts:
102
+ - agents_md_exists
103
+
104
+ - id: omp
105
+ name: Open Multi-Process
106
+ tier: opt_in
107
+ skill:
108
+ adapter: omp
109
+ output: .omp/skills
110
+ context:
111
+ adapter: omp
112
+ mode: symlink
113
+ file: CLAUDE.md
114
+ contracts:
115
+ - symlink_claude_md
116
+
117
+ - id: hermes
118
+ name: Hermes Agent
119
+ tier: opt_in
120
+ skill:
121
+ adapter: hermes
122
+ output: .hermes/skills
123
+ context:
124
+ adapter: hermes
125
+ mode: config-bridge
126
+ bridge_file: .hermes/config.yaml
127
+ bridge_key: instructions
128
+ contracts:
129
+ - agents_md_exists
130
+
131
+ # Wave C (e37s11)
132
+ - id: qwen
133
+ name: Qwen (Alibaba)
134
+ tier: opt_in
135
+ skill: null
136
+ context:
137
+ adapter: qwen
138
+ mode: symlink
139
+ file: QWEN.md
140
+ contracts:
141
+ - agents_md_exists
142
+
143
+ - id: kilocode
144
+ name: Kilocode
145
+ tier: opt_in
146
+ skill:
147
+ adapter: kilocode
148
+ output: .kilocode/rules
149
+ context:
150
+ adapter: kilocode
151
+ mode: copy
152
+ file: AGENTS.md
153
+ contracts:
154
+ - agents_md_exists
155
+
156
+ # Wave D (e37s12)
157
+ - id: continue
158
+ name: Continue
159
+ tier: opt_in
160
+ skill:
161
+ adapter: continue
162
+ output: .continue/rules
163
+ context:
164
+ adapter: continue
165
+ mode: copy
166
+ file: AGENTS.md
167
+ contracts:
168
+ - agents_md_exists
169
+
170
+ # Wave E (e37s13) — optional low-priority
171
+ - id: iflow
172
+ name: iFlow
173
+ tier: optional
174
+ skill: null
175
+ context:
176
+ adapter: iflow
177
+ mode: symlink
178
+ file: AGENTS.md
179
+ contracts:
180
+ - agents_md_exists
181
+
182
+ - id: vibe
183
+ name: Vibe
184
+ tier: optional
185
+ skill: null
186
+ context:
187
+ adapter: vibe
188
+ mode: symlink
189
+ file: AGENTS.md
190
+ contracts:
191
+ - agents_md_exists
192
+
193
+ - id: shai
194
+ name: Shai
195
+ tier: optional
196
+ skill: null
197
+ context:
198
+ adapter: shai
199
+ mode: symlink
200
+ file: AGENTS.md
201
+ contracts:
202
+ - agents_md_exists
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s05
3
+ # scenario: SC-e37s05-P1-02
4
+ set -euo pipefail
5
+
6
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
+ TARGETS_FILE="$SCRIPT_DIR/targets.yaml"
8
+ DRY_RUN=0
9
+ FILTER=""
10
+
11
+ for arg in "$@"; do
12
+ case "$arg" in
13
+ --dry-run) DRY_RUN=1 ;;
14
+ -*) echo "test-adapters: unknown flag $arg" >&2; exit 2 ;;
15
+ *) FILTER="$arg" ;;
16
+ esac
17
+ done
18
+
19
+ command -v yq >/dev/null || { echo "test-adapters: yq required" >&2; exit 1; }
20
+ bash "$SCRIPT_DIR/validate-targets-yaml.sh" >/dev/null
21
+
22
+ PASS=0
23
+ FAIL=0
24
+ TMPDIR=""
25
+
26
+ cleanup() { [[ -n "$TMPDIR" && -d "$TMPDIR" ]] && rm -rf "$TMPDIR"; }
27
+ trap cleanup EXIT
28
+
29
+ pass() { echo " PASS $1"; PASS=$((PASS + 1)); }
30
+ fail() { echo " FAIL $1"; FAIL=$((FAIL + 1)); }
31
+
32
+ test_adapter() {
33
+ local id="$1"
34
+ local adapter_file="$SCRIPT_DIR/adapters/${id}.sh"
35
+
36
+ if [[ "$DRY_RUN" -eq 1 ]]; then
37
+ echo "would test: $id"
38
+ return 0
39
+ fi
40
+
41
+ [[ -f "$adapter_file" ]] || { fail "$id: adapter missing"; return; }
42
+ pass "$id: exists"
43
+
44
+ # shellcheck source=/dev/null
45
+ source "$adapter_file" 2>/dev/null && pass "$id: sourceable" || { fail "$id: source error"; return; }
46
+
47
+ local has_skill has_context mode
48
+ has_skill=$(yq -r ".targets[] | select(.id==\"$id\") | .skill != null" "$TARGETS_FILE")
49
+ has_context=$(yq -r ".targets[] | select(.id==\"$id\") | .context != null" "$TARGETS_FILE")
50
+ mode=$(yq -r ".targets[] | select(.id==\"$id\") | .context.mode // \"\"" "$TARGETS_FILE")
51
+
52
+ if [[ "$has_skill" == "true" ]]; then
53
+ declare -f render_skill >/dev/null 2>&1 && pass "$id: render_skill defined" || fail "$id: render_skill missing"
54
+ fi
55
+
56
+ if [[ "$has_context" == "true" && "$mode" != "native" ]]; then
57
+ declare -f wire_context >/dev/null 2>&1 && pass "$id: wire_context defined" || fail "$id: wire_context missing"
58
+
59
+ TMPDIR=$(mktemp -d)
60
+ cp "$SCRIPT_DIR/../docs/templates/AGENTS.md" "$TMPDIR/AGENTS.md" 2>/dev/null || echo "# test" > "$TMPDIR/AGENTS.md"
61
+ (
62
+ cd "$TMPDIR"
63
+ # shellcheck source=/dev/null
64
+ source "$adapter_file"
65
+ wire_context 2>/dev/null || true
66
+ wire_context 2>/dev/null && pass "$id: idempotent wire_context" || fail "$id: wire_context failed"
67
+ )
68
+ fi
69
+ }
70
+
71
+ if [[ -n "$FILTER" ]]; then
72
+ test_adapter "$FILTER"
73
+ else
74
+ while IFS= read -r adapter; do
75
+ [[ -n "$adapter" ]] && test_adapter "$adapter"
76
+ done < <(yq -r '.targets[] | (.skill.adapter // .context.adapter)' "$TARGETS_FILE" | sort -u)
77
+ fi
78
+
79
+ echo "test-adapters: $PASS passed, $FAIL failed"
80
+ [[ "$FAIL" -eq 0 ]] || exit 1
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s05
3
+ # scenario: SC-e37s05-P1-01
4
+ set -euo pipefail
5
+
6
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
+ TARGETS_FILE="${1:-$SCRIPT_DIR/targets.yaml}"
8
+
9
+ if ! command -v yq >/dev/null 2>&1; then
10
+ echo "validate-targets-yaml: yq required — brew install yq" >&2
11
+ exit 1
12
+ fi
13
+
14
+ [[ -f "$TARGETS_FILE" ]] || { echo "validate-targets-yaml: missing $TARGETS_FILE" >&2; exit 1; }
15
+
16
+ version=$(yq -r '.registry_version // ""' "$TARGETS_FILE")
17
+ [[ -n "$version" && "$version" != "null" ]] || { echo "validate-targets-yaml: registry_version required" >&2; exit 1; }
18
+
19
+ count=$(yq '.targets | length' "$TARGETS_FILE")
20
+ [[ "$count" -ge 5 ]] || { echo "validate-targets-yaml: need >= 5 targets, got $count" >&2; exit 1; }
21
+
22
+ valid_tiers=" default_on opt_in optional "
23
+ valid_modes=" native symlink copy config-bridge "
24
+
25
+ while IFS= read -r row; do
26
+ id=$(echo "$row" | yq -r '.id // ""')
27
+ name=$(echo "$row" | yq -r '.name // ""')
28
+ tier=$(echo "$row" | yq -r '.tier // ""')
29
+ skill_null=$(echo "$row" | yq -r '.skill == null')
30
+ context_null=$(echo "$row" | yq -r '.context == null')
31
+
32
+ [[ -n "$id" ]] || { echo "validate-targets-yaml: target missing id" >&2; exit 1; }
33
+ [[ -n "$name" ]] || { echo "validate-targets-yaml: $id missing name" >&2; exit 1; }
34
+ [[ "$valid_tiers" == *" $tier "* ]] || { echo "validate-targets-yaml: $id invalid tier: $tier" >&2; exit 1; }
35
+ [[ "$skill_null" == "false" || "$context_null" == "false" ]] || {
36
+ echo "validate-targets-yaml: $id needs skill or context" >&2; exit 1
37
+ }
38
+
39
+ if [[ "$skill_null" == "false" ]]; then
40
+ adapter=$(echo "$row" | yq -r '.skill.adapter // ""')
41
+ [[ -n "$adapter" ]] || { echo "validate-targets-yaml: $id skill.adapter required" >&2; exit 1; }
42
+ adapter_file="$SCRIPT_DIR/adapters/${adapter}.sh"
43
+ [[ -f "$adapter_file" ]] || { echo "validate-targets-yaml: missing adapter $adapter_file" >&2; exit 1; }
44
+ fi
45
+
46
+ if [[ "$context_null" == "false" ]]; then
47
+ mode=$(echo "$row" | yq -r '.context.mode // ""')
48
+ adapter=$(echo "$row" | yq -r '.context.adapter // ""')
49
+ [[ "$valid_modes" == *" $mode "* ]] || { echo "validate-targets-yaml: $id invalid context.mode: $mode" >&2; exit 1; }
50
+ [[ -n "$adapter" ]] || { echo "validate-targets-yaml: $id context.adapter required" >&2; exit 1; }
51
+ adapter_file="$SCRIPT_DIR/adapters/${adapter}.sh"
52
+ [[ -f "$adapter_file" ]] || { echo "validate-targets-yaml: missing context adapter $adapter_file" >&2; exit 1; }
53
+ if [[ "$mode" == "symlink" || "$mode" == "copy" ]]; then
54
+ file=$(echo "$row" | yq -r '.context.file // ""')
55
+ [[ -n "$file" ]] || { echo "validate-targets-yaml: $id context.file required for $mode" >&2; exit 1; }
56
+ fi
57
+ if [[ "$mode" == "config-bridge" ]]; then
58
+ bf=$(echo "$row" | yq -r '.context.bridge_file // ""')
59
+ bk=$(echo "$row" | yq -r '.context.bridge_key // ""')
60
+ [[ -n "$bf" && -n "$bk" ]] || { echo "validate-targets-yaml: $id bridge_file/key required" >&2; exit 1; }
61
+ fi
62
+ fi
63
+ done < <(yq -o=json '.targets[]' "$TARGETS_FILE" | jq -c '.')
64
+
65
+ # Unique ids
66
+ dup=$(yq -r '.targets[].id' "$TARGETS_FILE" | sort | uniq -d)
67
+ [[ -z "$dup" ]] || { echo "validate-targets-yaml: duplicate ids: $dup" >&2; exit 1; }
68
+
69
+ echo "validate-targets-yaml: PASS ($count targets)"
@@ -1,10 +1,54 @@
1
1
  #!/usr/bin/env bash
2
- # story: e47s04
3
- # verify-install.sh — manual assertion harness for install + seed wiring
2
+ # story: e47s04 e37s02 e37s04 e37s08
3
+ # verify-install.sh — manual assertion harness for install + seed wiring + Reach matrix
4
4
  set -euo pipefail
5
5
  source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
6
6
  resolve_repo_root
7
7
 
8
+ MATRIX_MODE=0
9
+ FULL_MATRIX=0
10
+ for arg in "$@"; do
11
+ case "$arg" in
12
+ --matrix) MATRIX_MODE=1 ;;
13
+ --full) FULL_MATRIX=1 ;;
14
+ esac
15
+ done
16
+
17
+ if [[ "$MATRIX_MODE" -eq 1 ]]; then
18
+ source "$(dirname "${BASH_SOURCE[0]}")/lib/target-contracts.sh"
19
+ command -v yq >/dev/null || { echo "verify-install: yq required for --matrix" >&2; exit 1; }
20
+ cd "$REPO_ROOT"
21
+ PASS=0
22
+ FAIL=0
23
+ while IFS= read -r row; do
24
+ id=$(echo "$row" | yq -r '.id')
25
+ tier=$(echo "$row" | yq -r '.tier')
26
+ [[ "$tier" == "optional" && "$FULL_MATRIX" -eq 0 ]] && continue
27
+ if [[ "$tier" == "opt_in" ]]; then
28
+ echo "${id}: SKIP (opt_in)"
29
+ continue
30
+ fi
31
+ contracts=$(echo "$row" | yq -r '.contracts // [] | .[]' 2>/dev/null || true)
32
+ target_pass=1
33
+ while IFS= read -r contract; do
34
+ [[ -z "$contract" ]] && continue
35
+ result=$(run_contract "$id" "$contract" 2>&1 | head -1)
36
+ echo "$result"
37
+ [[ "$result" == FAIL* ]] && target_pass=0
38
+ done <<< "$contracts"
39
+ if [[ "$target_pass" -eq 1 ]]; then
40
+ echo "${id}: PASS"
41
+ PASS=$((PASS + 1))
42
+ else
43
+ echo "${id}: FAIL"
44
+ FAIL=$((FAIL + 1))
45
+ fi
46
+ done < <(yq -o=json '.targets[]' "$REPO_ROOT/scripts/targets.yaml" | jq -c '.')
47
+ echo "verify-install --matrix: $PASS passed, $FAIL failed"
48
+ [[ "$FAIL" -eq 0 && "$PASS" -gt 0 ]] || exit 1
49
+ exit 0
50
+ fi
51
+
8
52
  PASS=0
9
53
  FAIL=0
10
54
  TMPDIR=""
@@ -27,16 +71,45 @@ echo "$DRY_OUT" | grep -q 'Gemini CLI →' && pass "install includes Gemini CLI"
27
71
  echo "$DRY_OUT" | grep -q 'Cursor →' && pass "install includes Cursor" || fail "install missing Cursor"
28
72
 
29
73
  for tool in "Claude Code" "pi"; do
30
- # Find the skills count in the tool's section (between this tool header and next section)
31
74
  section=$(echo "$DRY_OUT" | sed -n "/${tool} →/,/^$/p")
32
75
  count=$(echo "$section" | grep -o '[0-9]\+ skills installed' | grep -o '[0-9]\+' || echo "0")
33
76
  [[ "$count" -gt 0 ]] && pass "${tool}: $count skills" || fail "${tool}: 0 skills"
34
77
  done
35
78
 
79
+ echo ""
80
+ echo "=== AGENTS.md spine (e37s04) ==="
81
+ [[ -f "$REPO_ROOT/docs/templates/AGENTS.md" ]] && pass "Reach template exists" || fail "Reach template missing"
82
+ grep -q 'Preflight' "$REPO_ROOT/docs/templates/AGENTS.md" && pass "template: Preflight" || fail "template: missing Preflight"
83
+ grep -qi 'cline\|aider\|opencode' "$REPO_ROOT/docs/templates/AGENTS.md" && pass "template: multi-agent preamble" || fail "template: missing OSS targets"
84
+ grep -q '## Test' "$REPO_ROOT/docs/templates/AGENTS.md" && pass "template: Test section" || fail "template: missing Test"
85
+ grep -q '## Lint' "$REPO_ROOT/docs/templates/AGENTS.md" && pass "template: Lint section" || fail "template: missing Lint"
86
+ grep -q '## Build' "$REPO_ROOT/docs/templates/AGENTS.md" && pass "template: Build section" || fail "template: missing Build"
87
+
88
+ echo ""
89
+ echo "=== Cline native AGENTS.md (e37s02) ==="
90
+ [[ -f "$REPO_ROOT/AGENTS.md" || -f "$REPO_ROOT/docs/templates/AGENTS.md" ]] && pass "Cline: AGENTS.md present (native reader)" || fail "Cline: AGENTS.md missing"
91
+ grep -qi 'cline' "$REPO_ROOT/skills/using-bigpowers/SKILL.md" && pass "using-bigpowers: Cline section" || fail "using-bigpowers: missing Cline"
92
+
93
+ echo ""
94
+ echo "=== Aider bridge (e37s03) ==="
95
+ grep -qi 'aider' "$REPO_ROOT/skills/seed-conventions/SKILL.md" && pass "seed-conventions: Aider wiring" || fail "seed-conventions: missing Aider"
96
+ grep -qi 'Aider-AI' "$REPO_ROOT/skills/using-bigpowers/SKILL.md" && pass "using-bigpowers: Aider-AI upstream" || fail "using-bigpowers: missing Aider-AI"
97
+
98
+ echo ""
99
+ echo "=== Optional Codex wave (e37s04) ==="
100
+ if grep -qi 'codex' "$REPO_ROOT/skills/seed-conventions/SKILL.md" 2>/dev/null; then
101
+ grep -qi 'config.toml' "$REPO_ROOT/skills/seed-conventions/REFERENCE.md" && pass "Codex: REFERENCE config.toml" || fail "Codex: missing config.toml"
102
+ echo "$DRY_OUT" | grep -qi 'codex' && pass "Codex: install --dry-run mentions codex" || fail "Codex: install missing codex"
103
+ else
104
+ pass "Codex: wave absent — assertions skipped"
105
+ fi
106
+
36
107
  echo ""
37
108
  echo "=== seed-conventions local wiring ==="
38
109
  grep -qi 'local tool wiring' "$REPO_ROOT/skills/seed-conventions/SKILL.md" && pass "SKILL.md: local tool wiring" || fail "SKILL.md: missing local tool wiring"
39
110
  grep -qi 'opencode.json' "$REPO_ROOT/skills/seed-conventions/REFERENCE.md" && pass "REFERENCE.md: opencode.json" || fail "REFERENCE.md: missing opencode.json"
111
+ grep -qi 'AGENTS.md' "$REPO_ROOT/skills/seed-conventions/SKILL.md" && pass "SKILL.md: AGENTS.md spine" || fail "SKILL.md: missing AGENTS.md"
112
+ grep -qi 'symlink' "$REPO_ROOT/skills/seed-conventions/SKILL.md" && pass "SKILL.md: CLAUDE.md symlink" || fail "SKILL.md: missing symlink"
40
113
  grep -qi 'cursor/rules' "$REPO_ROOT/skills/seed-conventions/REFERENCE.md" && pass "REFERENCE.md: Cursor symlink" || fail "REFERENCE.md: missing Cursor symlink"
41
114
 
42
115
  OPENCODE_JSON=$(sed -n '/```json/,/```/p' "$REPO_ROOT/skills/seed-conventions/REFERENCE.md" | grep -v '```' || true)
@@ -1,12 +1,24 @@
1
- # story: e51s02
1
+ # story: e51s02 e37s01 e37s03 e37s14
2
2
  # Seed Conventions — Reference Templates
3
3
 
4
- ## Agent config template (CLAUDE.md / GEMINI.md / AGENTS.md)
4
+ ## AGENTS.md spine (Reach Template — e37s01)
5
+
6
+ Canonical source: copy from `docs/templates/AGENTS.md` in the bigpowers repo (Reach Template).
7
+ Do not invent structure ad hoc — the template includes multi-agent preamble, Preflight, Test/Lint/Build sections.
8
+
9
+ When local tool wiring is opted in:
10
+ 1. Copy Reach Template → project root `AGENTS.md`, fill interview placeholders
11
+ 2. `ln -sf AGENTS.md CLAUDE.md` (or content copy on Windows when symlink fails)
12
+ 3. Write `opencode.json` with `"instructions": ["AGENTS.md"]`
13
+
14
+ When user **opts out** of local tool wiring, do not emit AGENTS.md spine artifacts.
15
+
16
+ ## Agent config template (legacy — prefer AGENTS.md spine)
5
17
 
6
18
  All three files use the same structure — only the header differs:
7
- - `CLAUDE.md` → `# [Project Name] — Claude Code`
19
+ - `CLAUDE.md` → `# [Project Name] — Claude Code` (or symlink to AGENTS.md)
8
20
  - `GEMINI.md` → `# [Project Name] — Gemini CLI`
9
- - `AGENTS.md` → `# [Project Name] — OpenCode`
21
+ - `AGENTS.md` → `# [Project Name] — AI Agents` (Reach Template header)
10
22
 
11
23
  ```markdown
12
24
  # [Project Name] — [Agent]
@@ -55,10 +67,33 @@ Stack: [language, framework, runtime]
55
67
  ```json
56
68
  {
57
69
  "$schema": "https://opencode.ai/config.json",
58
- "instructions": [".cursor/rules/*.mdc"]
70
+ "instructions": ["AGENTS.md"]
59
71
  }
60
72
  ```
61
73
 
74
+ ## Aider — `.aider.conf.yml` bridge (e37s03)
75
+
76
+ When Aider wiring is opted in:
77
+
78
+ ```yaml
79
+ read: AGENTS.md
80
+ ```
81
+
82
+ Upstream: [Aider-AI/aider](https://github.com/Aider-AI/aider) (not paul-gauthier/aider).
83
+
84
+ ## Codex CLI — project-local `.codex/config.toml` + AGENTS.md (e37s14)
85
+
86
+ Source: https://developers.openai.com/codex/guides/agents-md
87
+
88
+ Codex is instruction-file-only — no slash skills. When Codex wiring is opted in:
89
+
90
+ ```toml
91
+ # .codex/config.toml
92
+ instructions = ["AGENTS.md"]
93
+ ```
94
+
95
+ Use AGENTS.md header `# [Project Name] — AI Agents` (shared with OpenCode/Cline). Single AGENTS.md serves dual-tool projects.
96
+
62
97
  ## CONVENTIONS.md
63
98
 
64
99
  Use the standard bigpowers CONVENTIONS.md as the base. Fill in the project-specific defensive code categories from the interview answers.
@@ -32,13 +32,16 @@ Ask the user these questions (one at a time, wait for each answer):
32
32
  5. **Conventions** — "Any naming, file organization, or patterns all agents must follow?"
33
33
  6. **Never-do list** — "What are the hard stops? Things an agent must never touch?"
34
34
  7. **Defensive code categories** — "Which apply? (Rate limit / Retry / Circuit breaker / Timeout / Graceful degradation)"
35
- 8. **Local tool wiring (optional)** — "Wire bigpowers skills for project-local tools that global install can't reach? (Cursor + OpenCode only)" If yes, generate the local wiring artifacts described in [REFERENCE.md](REFERENCE.md) §Local tool wiring. If no, skip — the standard seed output is unchanged.
35
+ 8. **Local tool wiring (optional)** — "Wire bigpowers for project-local tools? (Cursor, OpenCode, Cline, Aider, Codex CLI)" If yes, generate AGENTS.md spine artifacts per [REFERENCE.md](REFERENCE.md) §Local tool wiring and §AGENTS.md spine. If no, skip — standard seed output unchanged (no AGENTS.md spine unless opted in).
36
36
 
37
37
  ## Generate files
38
38
 
39
39
  After the interview, generate each file using the templates in [REFERENCE.md](REFERENCE.md):
40
- - `CLAUDE.md`, `GEMINI.md`, `AGENTS.md` — from the agent-config template
41
- - `opencode.json` — from the opencode template
40
+ - `AGENTS.md` — from `docs/templates/AGENTS.md` Reach Template (canonical spine source)
41
+ - `CLAUDE.md` — symlink to `AGENTS.md` (copy fallback on Windows when symlink fails)
42
+ - `GEMINI.md` — symlink to `AGENTS.md` when Gemini wiring opted in
43
+ - `opencode.json` — with `"instructions": ["AGENTS.md"]` when OpenCode opted in
44
+ - `.aider.conf.yml` — with `read: AGENTS.md` when Aider opted in
42
45
  - `CONVENTIONS.md` — bigpowers standard template + project defensive code categories
43
46
 
44
47
  ### `specs/` directory
@@ -19,9 +19,9 @@ npm install -g bigpowers # global install
19
19
  bigpowers setup # sync skills + link to your tools
20
20
  ```
21
21
 
22
- From source (contributors): `git clone` → `npm install` or `bash scripts/install.sh`.
22
+ From source: `git clone` → `bash scripts/install.sh`. Package: [bigpowers on npm](https://www.npmjs.com/package/bigpowers).
23
23
 
24
- Package: [bigpowers on npm](https://www.npmjs.com/package/bigpowers)
24
+ **Reach tools:** **Cline** — native AGENTS.md reader (no extension). **Aider** — opt-in `.aider.conf.yml` with `read: AGENTS.md` ([Aider-AI/aider](https://github.com/Aider-AI/aider)). **Codex CLI** — optional `.codex/config.toml` via seed-conventions; global `~/.codex/AGENTS.md` from install.sh.
25
25
 
26
26
  ## What bigpowers is
27
27
 
package/skills-lock.json CHANGED
@@ -283,7 +283,7 @@
283
283
  },
284
284
  "seed-conventions": {
285
285
  "description": "Generate CLAUDE.md and CONVENTIONS.md for a brand-new project through a brief interview, and create the specs/ directory with evolved bigpowers structure (product/, tech-architecture/, verifications/, epics/archive/). Entry point for greenfield projects. Use when starting a new project from scratch, when user asks to set up AI agent conventions, or when there is no CLAUDE.md yet.",
286
- "sha256": "397090fd29c8cac1",
286
+ "sha256": "ebb23bdd3aefa527",
287
287
  "path": "skills/seed-conventionsSKILL.md"
288
288
  },
289
289
  "session-state": {
@@ -338,7 +338,7 @@
338
338
  },
339
339
  "using-bigpowers": {
340
340
  "description": "One-time bootstrap that introduces the bigpowers skills system, the PMBOK lifecycle arc, and tells you which skill to call first for your situation. Use when starting with bigpowers for the first time, when user asks \"where do I start?\", or when the skills system needs to be explained.",
341
- "sha256": "33f6d163b536e87d",
341
+ "sha256": "c910fc0ed3482341",
342
342
  "path": "skills/using-bigpowersSKILL.md"
343
343
  },
344
344
  "validate-contracts": {