bigpowers 2.72.1 → 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 +7 -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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.72.1",
3
+ "version": "2.73.0",
4
4
  "description": "73 agent skills synthesizing 17 years of software engineering discipline into a prescriptive methodology for solo developers",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s09
3
+ wire_context() {
4
+ source "$(dirname "${BASH_SOURCE[0]}")/../lib/context-wire.sh"
5
+ wire_context_mode symlink "${1:-CLAUDE.md}"
6
+ }
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s05 e37s03
3
+
4
+ wire_context() {
5
+ source "$(dirname "${BASH_SOURCE[0]}")/../lib/context-wire.sh"
6
+ wire_context_mode config-bridge ".aider.conf.yml" read "AGENTS.md"
7
+ }
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s05
3
+ # Cline reads AGENTS.md natively — no skill artifacts.
4
+
5
+ wire_context() {
6
+ # native mode — no derivative
7
+ return 0
8
+ }
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s12
3
+ render_skill() {
4
+ local rules_dir="${CONTINUE_RULES:-.continue/rules}"
5
+ mkdir -p "$rules_dir" 2>/dev/null || true
6
+ [[ -n "${IR_NAME:-}" ]] && touch "$rules_dir/$IR_NAME.md" 2>/dev/null || true
7
+ }
8
+ wire_context() {
9
+ source "$(dirname "${BASH_SOURCE[0]}")/../lib/context-wire.sh"
10
+ wire_context_mode copy "${1:-AGENTS.md}"
11
+ }
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s05 e37s07
3
+ # scenario: SC-e37s07-P0-02
4
+ # Cursor skill adapter — renders .cursor/rules/*.mdc from IR globals.
5
+
6
+ render_skill() {
7
+ if declare -f render_cursor >/dev/null 2>&1; then
8
+ render_cursor
9
+ return
10
+ fi
11
+ local cursor_file="${CURSOR_RULES:-.cursor/rules}/$IR_NAME.mdc"
12
+ {
13
+ echo "---"
14
+ echo "description: \"$IR_DESC_ESCAPED\""
15
+ echo "alwaysApply: false"
16
+ echo "---"
17
+ echo ""
18
+ echo "$IR_BODY"
19
+ } > "$cursor_file"
20
+ }
21
+
22
+ wire_context() {
23
+ source "$(dirname "${BASH_SOURCE[0]}")/../lib/context-wire.sh"
24
+ wire_context_mode symlink "${1:-CLAUDE.md}"
25
+ }
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s05 e37s07
3
+
4
+ render_skill() {
5
+ if declare -f render_gemini_skill >/dev/null 2>&1; then
6
+ render_gemini_skill
7
+ render_gemini_command
8
+ return
9
+ fi
10
+ mkdir -p "${GEMINI_SKILLS:-.gemini/extensions/bigpowers/skills}/$IR_NAME"
11
+ {
12
+ echo "---"
13
+ echo "name: $IR_NAME"
14
+ [[ -n "$IR_MODEL" ]] && echo "model: $IR_MODEL"
15
+ echo "description: \"$IR_DESC_ESCAPED\""
16
+ echo "disable-model-invocation: true"
17
+ echo "---"
18
+ echo ""
19
+ echo "$IR_BODY"
20
+ } > "${GEMINI_SKILLS}/$IR_NAME/SKILL.md"
21
+
22
+ mkdir -p "${GEMINI_COMMANDS:-.gemini/extensions/bigpowers/commands/prompts}"
23
+ {
24
+ echo "---"
25
+ echo "name: $IR_NAME"
26
+ echo "description: \"$IR_DESC_ESCAPED\""
27
+ echo "---"
28
+ echo ""
29
+ echo "$IR_BODY"
30
+ } > "${GEMINI_COMMANDS}/prompts/$IR_NAME.md"
31
+ }
32
+
33
+ wire_context() {
34
+ source "$(dirname "${BASH_SOURCE[0]}")/../lib/context-wire.sh"
35
+ wire_context_mode symlink "${1:-GEMINI.md}"
36
+ }
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s09
3
+ wire_context() { return 0; }
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s10
3
+ render_skill() {
4
+ local out="${HERMES_SKILLS:-.hermes/skills}"
5
+ mkdir -p "$out/${IR_NAME:-_stub}" 2>/dev/null || true
6
+ }
7
+ wire_context() {
8
+ source "$(dirname "${BASH_SOURCE[0]}")/../lib/context-wire.sh"
9
+ wire_context_mode config-bridge ".hermes/config.yaml" "instructions" "AGENTS.md"
10
+ }
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s13
3
+ wire_context() {
4
+ source "$(dirname "${BASH_SOURCE[0]}")/../lib/context-wire.sh"
5
+ wire_context_mode symlink "${1:-AGENTS.md}"
6
+ }
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s11
3
+ render_skill() {
4
+ local out="${KILOCODE_RULES:-.kilocode/rules}"
5
+ mkdir -p "$out" 2>/dev/null || true
6
+ [[ -n "${IR_NAME:-}" ]] && touch "$out/$IR_NAME.md" 2>/dev/null || true
7
+ }
8
+ wire_context() {
9
+ source "$(dirname "${BASH_SOURCE[0]}")/../lib/context-wire.sh"
10
+ wire_context_mode copy "${1:-AGENTS.md}"
11
+ }
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s10
3
+ render_skill() {
4
+ local out="${OMP_SKILLS:-.omp/skills}"
5
+ mkdir -p "$out/${IR_NAME:-_stub}" 2>/dev/null || true
6
+ }
7
+ wire_context() {
8
+ source "$(dirname "${BASH_SOURCE[0]}")/../lib/context-wire.sh"
9
+ wire_context_mode symlink "${1:-CLAUDE.md}"
10
+ }
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s05 e37s07
3
+
4
+ render_skill() {
5
+ if declare -f render_pi_skill >/dev/null 2>&1; then
6
+ render_pi_skill
7
+ render_pi_prompt
8
+ return
9
+ fi
10
+ mkdir -p "${PI_SKILLS:-.pi/skills}/$IR_NAME"
11
+ cp "${SKILL_MD_PATH:-}" "${PI_SKILLS}/$IR_NAME/SKILL.md" 2>/dev/null || {
12
+ {
13
+ echo "---"
14
+ echo "name: $IR_NAME"
15
+ [[ -n "$IR_MODEL" ]] && echo "model: $IR_MODEL"
16
+ echo "description: \"$IR_DESC_ESCAPED\""
17
+ echo "---"
18
+ echo ""
19
+ echo "$IR_BODY"
20
+ } > "${PI_SKILLS}/$IR_NAME/SKILL.md"
21
+ }
22
+
23
+ mkdir -p "${PI_PROMPTS:-.pi/prompts}"
24
+ {
25
+ echo "---"
26
+ echo "name: $IR_NAME"
27
+ echo "description: \"$IR_DESC_ESCAPED\""
28
+ echo "---"
29
+ echo ""
30
+ echo "$IR_BODY"
31
+ } > "${PI_PROMPTS}/$IR_NAME.md"
32
+ }
33
+
34
+ wire_context() {
35
+ source "$(dirname "${BASH_SOURCE[0]}")/../lib/context-wire.sh"
36
+ wire_context_mode symlink "${1:-CLAUDE.md}"
37
+ }
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s11
3
+ wire_context() {
4
+ source "$(dirname "${BASH_SOURCE[0]}")/../lib/context-wire.sh"
5
+ wire_context_mode symlink "${1:-QWEN.md}"
6
+ }
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s13
3
+ wire_context() {
4
+ source "$(dirname "${BASH_SOURCE[0]}")/../lib/context-wire.sh"
5
+ wire_context_mode symlink "${1:-AGENTS.md}"
6
+ }
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s13
3
+ wire_context() {
4
+ source "$(dirname "${BASH_SOURCE[0]}")/../lib/context-wire.sh"
5
+ wire_context_mode symlink "${1:-AGENTS.md}"
6
+ }
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s10
3
+ render_skill() {
4
+ local out="${ZED_OUT:-.zed/skills}"
5
+ mkdir -p "$out/${IR_NAME:-_stub}" 2>/dev/null || true
6
+ }
7
+ wire_context() {
8
+ source "$(dirname "${BASH_SOURCE[0]}")/../lib/context-wire.sh"
9
+ wire_context_mode copy "${1:-AGENTS.md}"
10
+ }
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s06
3
+ # scenario: SC-e37s06-P1-01
4
+ set -euo pipefail
5
+
6
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
+ source "$SCRIPT_DIR/lib/skill-common.sh"
8
+ resolve_repo_root
9
+
10
+ DRY_RUN=0
11
+ for arg in "$@"; do
12
+ case "$arg" in
13
+ --dry-run) DRY_RUN=1 ;;
14
+ --help|-h)
15
+ echo "Usage: generate-context-bundle.sh [--dry-run]"
16
+ exit 0
17
+ ;;
18
+ esac
19
+ done
20
+
21
+ bash "$SCRIPT_DIR/validate-targets-yaml.sh" >/dev/null
22
+
23
+ TARGETS_FILE="$SCRIPT_DIR/targets.yaml"
24
+ command -v yq >/dev/null || { echo "generate-context-bundle: yq required" >&2; exit 1; }
25
+
26
+ cd "$REPO_ROOT"
27
+ agents_src="AGENTS.md"
28
+ [[ -f "$agents_src" ]] || agents_src="docs/templates/AGENTS.md"
29
+
30
+ while IFS= read -r row; do
31
+ id=$(echo "$row" | yq -r '.id')
32
+ mode=$(echo "$row" | yq -r '.context.mode // ""')
33
+ [[ "$mode" == "null" || -z "$mode" || "$mode" == "native" ]] && continue
34
+
35
+ file=$(echo "$row" | yq -r '.context.file // ""')
36
+ bridge_file=$(echo "$row" | yq -r '.context.bridge_file // ""')
37
+ bridge_key=$(echo "$row" | yq -r '.context.bridge_key // "read"')
38
+ adapter=$(echo "$row" | yq -r '.context.adapter')
39
+
40
+ dest="${file:-$bridge_file}"
41
+ if [[ "$DRY_RUN" -eq 1 ]]; then
42
+ echo "would wire $id → $dest (mode=$mode, source=$agents_src)"
43
+ continue
44
+ fi
45
+
46
+ adapter_script="$SCRIPT_DIR/adapters/${adapter}.sh"
47
+ # shellcheck source=/dev/null
48
+ source "$adapter_script"
49
+ case "$mode" in
50
+ symlink) wire_context_mode symlink "$file" ;;
51
+ copy) wire_context_mode copy "$file" ;;
52
+ config-bridge) wire_context_mode config-bridge "$bridge_file" "$bridge_key" "$agents_src" ;;
53
+ esac
54
+ echo "wired $id → $dest"
55
+ done < <(yq -o=json '.targets[] | select(.context != null)' "$TARGETS_FILE" | jq -c '.')
56
+
57
+ echo "generate-context-bundle: done (source=$agents_src)"
@@ -225,6 +225,25 @@ uninstall_pi() {
225
225
  fi
226
226
  }
227
227
 
228
+ # ── Codex CLI (e37s15) ───────────────────────────────────────────────────────
229
+
230
+ CODEX_DIR="$HOME/.codex"
231
+ CODEX_AGENTS="$CODEX_DIR/AGENTS.md"
232
+ CODEX_TEMPLATE="$REPO_ROOT/docs/templates/codex/AGENTS.md"
233
+
234
+ install_codex() {
235
+ echo ""
236
+ echo "Codex CLI → $CODEX_AGENTS"
237
+ [[ -f "$CODEX_TEMPLATE" ]] || { echo " skip: template missing $CODEX_TEMPLATE" >&2; return 0; }
238
+ link "$CODEX_TEMPLATE" "$CODEX_AGENTS"
239
+ }
240
+
241
+ uninstall_codex() {
242
+ echo ""
243
+ echo "Codex CLI → removing $CODEX_AGENTS"
244
+ unlink_if_managed "$CODEX_AGENTS" "$REPO_ROOT/"
245
+ }
246
+
228
247
  # ── main ──────────────────────────────────────────────────────────────────────
229
248
 
230
249
  echo "bigpowers install.sh — REPO: $REPO_ROOT"
@@ -236,6 +255,7 @@ if $UNINSTALL; then
236
255
  uninstall_gemini
237
256
  uninstall_pi
238
257
  uninstall_cursor
258
+ uninstall_codex
239
259
  echo ""
240
260
  echo "bigpowers uninstalled."
241
261
  else
@@ -243,6 +263,7 @@ else
243
263
  install_gemini
244
264
  install_pi
245
265
  install_cursor
266
+ install_codex
246
267
  echo ""
247
268
  echo "bigpowers installed. Future updates:"
248
269
  if [[ -d "$REPO_ROOT/.git" ]]; then
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s05 e37s06
3
+ # scenario: SC-e37s06-P1-02
4
+ # Shared Context Derivative wiring — symlink with copy fallback (Windows-safe).
5
+
6
+ wire_symlink_or_copy() {
7
+ local src="$1"
8
+ local dest="$2"
9
+
10
+ [[ -f "$src" ]] || { echo "context-wire: source missing: $src" >&2; return 1; }
11
+
12
+ if [[ -L "$dest" ]] && [[ "$(readlink "$dest" 2>/dev/null)" == "$src" || "$(readlink "$dest" 2>/dev/null)" == "./$src" ]]; then
13
+ return 0
14
+ fi
15
+ if [[ -f "$dest" ]] && cmp -s "$src" "$dest" 2>/dev/null; then
16
+ return 0
17
+ fi
18
+
19
+ rm -f "$dest" 2>/dev/null || true
20
+ if ln -sf "$src" "$dest" 2>/dev/null; then
21
+ return 0
22
+ fi
23
+
24
+ echo "context-wire: symlink failed for $dest — using copy fallback" >&2
25
+ cp "$src" "$dest"
26
+ }
27
+
28
+ wire_config_bridge() {
29
+ local bridge_file="$1"
30
+ local bridge_key="$2"
31
+ local agents_path="${3:-AGENTS.md}"
32
+
33
+ mkdir -p "$(dirname "$bridge_file")"
34
+ if [[ -f "$bridge_file" ]] && grep -q "^${bridge_key}:" "$bridge_file" 2>/dev/null; then
35
+ return 0
36
+ fi
37
+ printf '%s: %s\n' "$bridge_key" "$agents_path" > "$bridge_file"
38
+ }
39
+
40
+ wire_context_mode() {
41
+ local mode="$1"
42
+ local file="${2:-}"
43
+ local bridge_file="${3:-}"
44
+ local bridge_key="${4:-read}"
45
+ local src="${5:-AGENTS.md}"
46
+
47
+ case "$mode" in
48
+ native) return 0 ;;
49
+ symlink|copy)
50
+ [[ -n "$file" ]] || { echo "context-wire: file required for mode=$mode" >&2; return 1; }
51
+ if [[ "$mode" == "copy" ]]; then
52
+ cp "$src" "$file"
53
+ else
54
+ wire_symlink_or_copy "$src" "$file"
55
+ fi
56
+ ;;
57
+ config-bridge)
58
+ [[ -n "$bridge_file" ]] || { echo "context-wire: bridge_file required" >&2; return 1; }
59
+ wire_config_bridge "$bridge_file" "$bridge_key" "$src"
60
+ ;;
61
+ *)
62
+ echo "context-wire: unknown mode: $mode" >&2
63
+ return 1
64
+ ;;
65
+ esac
66
+ }
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s08
3
+ # scenario: SC-e37s08-P1-01
4
+
5
+ assert_agents_md() {
6
+ local id="$1"
7
+ if [[ -f AGENTS.md ]] || [[ -f docs/templates/AGENTS.md ]]; then
8
+ echo "PASS $id:agents_md_exists"
9
+ return 0
10
+ fi
11
+ echo "FAIL $id:agents_md_exists — AGENTS.md missing"
12
+ return 1
13
+ }
14
+
15
+ assert_symlink_claude_md() {
16
+ local id="$1"
17
+ if [[ -L CLAUDE.md ]] || [[ -f CLAUDE.md ]]; then
18
+ echo "PASS $id:symlink_claude_md"
19
+ return 0
20
+ fi
21
+ echo "FAIL $id:symlink_claude_md — CLAUDE.md missing"
22
+ return 1
23
+ }
24
+
25
+ assert_cursor_rules_nonempty() {
26
+ local id="$1"
27
+ if [[ -d .cursor/rules ]] && [[ -n "$(ls -A .cursor/rules 2>/dev/null)" ]]; then
28
+ echo "PASS $id:cursor_rules_nonempty"
29
+ return 0
30
+ fi
31
+ echo "FAIL $id:cursor_rules_nonempty — .cursor/rules empty"
32
+ return 1
33
+ }
34
+
35
+ assert_gemini_ext_exists() {
36
+ local id="$1"
37
+ if [[ -d .gemini/extensions/bigpowers ]]; then
38
+ echo "PASS $id:gemini_ext_exists"
39
+ return 0
40
+ fi
41
+ echo "FAIL $id:gemini_ext_exists — gemini extension missing"
42
+ return 1
43
+ }
44
+
45
+ assert_pi_skills_nonempty() {
46
+ local id="$1"
47
+ if [[ -d .pi/skills ]] && [[ -n "$(ls -A .pi/skills 2>/dev/null)" ]]; then
48
+ echo "PASS $id:pi_skills_nonempty"
49
+ return 0
50
+ fi
51
+ echo "FAIL $id:pi_skills_nonempty — .pi/skills empty"
52
+ return 1
53
+ }
54
+
55
+ assert_aider_bridge() {
56
+ local id="$1"
57
+ if [[ -f .aider.conf.yml ]] && grep -q 'AGENTS.md' .aider.conf.yml 2>/dev/null; then
58
+ echo "PASS $id:aider_bridge"
59
+ return 0
60
+ fi
61
+ echo "SKIP $id:aider_bridge — opt_in not wired"
62
+ return 0
63
+ }
64
+
65
+ run_contract() {
66
+ local id="$1"
67
+ local contract="$2"
68
+ case "$contract" in
69
+ agents_md_exists) assert_agents_md "$id" ;;
70
+ symlink_claude_md) assert_symlink_claude_md "$id" ;;
71
+ cursor_rules_nonempty) assert_cursor_rules_nonempty "$id" ;;
72
+ gemini_ext_exists) assert_gemini_ext_exists "$id" ;;
73
+ pi_skills_nonempty) assert_pi_skills_nonempty "$id" ;;
74
+ aider_bridge) assert_aider_bridge "$id" ;;
75
+ *) echo "SKIP $id:$contract — unknown contract"; return 0 ;;
76
+ esac
77
+ }
@@ -254,11 +254,18 @@ parse_frontmatter_okf() {
254
254
  return 0
255
255
  }
256
256
 
257
- # ── Target registry ─────────────────────────────────────────────────
258
- # Order matters: render functions are called in this order per skill.
259
- TARGETS=(render_cursor render_gemini_skill render_gemini_command render_pi_skill render_pi_prompt)
260
- if [[ "$OKF_MODE" -eq 1 ]]; then
261
- TARGETS+=(render_okf_concept)
257
+ # ── Target registry (e37s07) ────────────────────────────────────────
258
+ # Load skill adapters from scripts/targets.yaml — no hardcoded target list.
259
+ TARGETS_FILE="$REPO_ROOT/scripts/targets.yaml"
260
+ SKILL_ADAPTERS=()
261
+ if [[ -f "$TARGETS_FILE" ]] && command -v yq >/dev/null 2>&1; then
262
+ bash "$REPO_ROOT/scripts/validate-targets-yaml.sh" >/dev/null
263
+ while IFS= read -r adapter; do
264
+ [[ -n "$adapter" && "$adapter" != "null" ]] && SKILL_ADAPTERS+=("$adapter")
265
+ done < <(yq -r '.targets[] | select(.skill != null) | .skill.adapter' "$TARGETS_FILE" | sort -u)
266
+ else
267
+ echo "sync-skills: WARN — targets.yaml missing; using legacy render list" >&2
268
+ SKILL_ADAPTERS=(cursor gemini pi)
262
269
  fi
263
270
 
264
271
  skill_count=0
@@ -283,12 +290,20 @@ while IFS= read -r skill_dir; do
283
290
  [[ -z "$IR_NAME" ]] && continue
284
291
 
285
292
  IR_BODY=$(build_body "$skill_md" "$skill_dir")
286
-
287
- # Dispatch to each render target
288
- for target_fn in "${TARGETS[@]}"; do
289
- "$target_fn"
293
+ SKILL_MD_PATH="$skill_md"
294
+
295
+ # Dispatch to each skill adapter from registry (e37s07)
296
+ for adapter_name in "${SKILL_ADAPTERS[@]}"; do
297
+ adapter_script="$REPO_ROOT/scripts/adapters/${adapter_name}.sh"
298
+ # shellcheck source=/dev/null
299
+ source "$adapter_script"
300
+ render_skill
290
301
  done
291
302
 
303
+ if [[ "$OKF_MODE" -eq 1 ]]; then
304
+ render_okf_concept
305
+ fi
306
+
292
307
  skill_count=$((skill_count + 1))
293
308
  done < <(iterate_skills)
294
309