@jenga-ai/agent 2.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/README.md +82 -243
  2. package/agents/developer.md +5 -5
  3. package/agents/scrum-master.md +23 -23
  4. package/agents/tester.md +5 -5
  5. package/bin/jenga.js +10 -0
  6. package/hooks/copilot_session_end.sh +7 -3
  7. package/hooks/prompt_router_helper.js +17 -5
  8. package/lib/commands/doctor.js +351 -0
  9. package/lib/commands/init.js +16 -0
  10. package/lib/generate-copilot-hooks.js +116 -0
  11. package/lib/generate-skill-allow-list.js +9 -3
  12. package/lib/legacy-shipped-paths.json +336 -0
  13. package/lib/postinstall-manifest.js +469 -0
  14. package/lib/skill-allow-list.json +2 -3
  15. package/package.json +16 -25
  16. package/scripts/apply-j-prefix.sh +25 -12
  17. package/scripts/generate-j-alias.sh +333 -0
  18. package/scripts/generate-legacy-shipped-paths.js +248 -0
  19. package/scripts/postinstall.js +205 -2
  20. package/scripts/verify-legacy-seed-reconcile.sh +254 -0
  21. package/scripts/verify-postinstall-reconcile.sh +392 -0
  22. package/skills/{brainstorm → j-brainstorm}/SKILL.md +9 -2
  23. package/skills/{btw → j-btw}/SKILL.md +9 -2
  24. package/skills/{clearify → j-clearify}/SKILL.md +9 -2
  25. package/skills/{close-story → j-close-story}/SKILL.md +17 -10
  26. package/skills/{close-story → j-close-story}/scripts/check-privatized.sh +2 -2
  27. package/skills/{close-story → j-close-story}/scripts/check-story-closeable.sh +1 -1
  28. package/skills/{close-story → j-close-story}/scripts/extract-task-diff-stats.sh +1 -1
  29. package/skills/{commit → j-commit}/SKILL.md +9 -2
  30. package/skills/j-continue/SKILL.md +36 -0
  31. package/skills/{deep-dive → j-deep-dive}/SKILL.md +9 -8
  32. package/skills/{dev-done → j-dev-done}/SKILL.md +11 -4
  33. package/skills/{dev-done → j-dev-done}/scripts/classify-commit-outcome.sh +4 -4
  34. package/skills/{distribute → j-distribute}/SKILL.md +17 -10
  35. package/skills/{distribute → j-distribute}/scripts/distribute-changes.sh +1 -1
  36. package/skills/{do → j-do}/SKILL.md +12 -5
  37. package/skills/{doc → j-doc}/README.md +5 -5
  38. package/skills/{doc → j-doc}/SKILL.md +15 -8
  39. package/skills/{doc → j-doc}/authoring-notes.md +1 -1
  40. package/skills/{doc-sync → j-doc-sync}/SKILL.md +9 -2
  41. package/skills/{dooo → j-dooo}/SKILL.md +9 -2
  42. package/skills/j-error/SKILL.md +36 -0
  43. package/skills/{evaluate → j-evaluate}/SKILL.md +9 -2
  44. package/skills/j-examplify/SKILL.md +49 -0
  45. package/skills/{help → j-help}/SKILL.md +9 -2
  46. package/skills/{idea → j-idea}/SKILL.md +10 -3
  47. package/skills/{idea → j-idea}/assets/idea_handoff_template.md +1 -1
  48. package/skills/{improve → j-improve}/SKILL.md +9 -2
  49. package/skills/j-init/SKILL.md +2 -2
  50. package/skills/j-jbp/SKILL.md +32 -0
  51. package/skills/j-lgtm/SKILL.md +28 -0
  52. package/skills/{pi-plan → j-pi-plan}/SKILL.md +10 -3
  53. package/skills/{proceed → j-proceed}/SKILL.md +9 -2
  54. package/skills/{publish → j-publish}/SKILL.md +47 -40
  55. package/skills/{publish → j-publish}/adapters/droplet.md +1 -1
  56. package/skills/{publish → j-publish}/adapters/mobile-ios.md +3 -3
  57. package/skills/{publish → j-publish}/adapters/npm-ci.md +3 -3
  58. package/skills/{publish → j-publish}/adapters/npm.md +8 -8
  59. package/skills/{publish → j-publish}/assets/ci-contract.md +2 -2
  60. package/skills/{publish → j-publish}/schemas/publish.schema.json +1 -1
  61. package/skills/{publish → j-publish}/scripts/npm_stage_inspect.sh +34 -1
  62. package/skills/{publish → j-publish}/scripts/npm_stage_pipeline.sh +9 -4
  63. package/skills/{publish → j-publish}/scripts/publish_deploy.sh +4 -4
  64. package/skills/{publish → j-publish}/scripts/validate_npm_stage_env.sh +1 -1
  65. package/skills/{publish → j-publish}/wizards/droplet.md +1 -1
  66. package/skills/{publish → j-publish}/wizards/mobile-ios.md +1 -1
  67. package/skills/{publish → j-publish}/wizards/npm-ci.md +1 -1
  68. package/skills/{publish → j-publish}/wizards/npm.md +1 -1
  69. package/skills/{reconcile → j-reconcile}/SKILL.md +12 -5
  70. package/skills/{reconcile → j-reconcile}/scripts/detect-unlinked-code.sh +2 -2
  71. package/skills/{reconcile → j-reconcile}/scripts/resolve-reconcile-scope.sh +3 -3
  72. package/skills/{reconcile-origin → j-reconcile-origin}/SKILL.md +13 -6
  73. package/skills/{redo → j-redo}/SKILL.md +9 -2
  74. package/skills/{skillify → j-skillify}/SKILL.md +10 -3
  75. package/skills/{spinoff → j-spinoff}/SKILL.md +9 -2
  76. package/skills/{status → j-status}/SKILL.md +9 -2
  77. package/skills/{todo → j-todo}/SKILL.md +10 -3
  78. package/skills/{todo → j-todo}/assets/todo_handoff_template.md +1 -1
  79. package/skills/{todo → j-todo}/scripts/add_trivial_task.sh +3 -3
  80. package/skills/{todo → j-todo}/scripts/update_story_tasks.py +2 -2
  81. package/skills/{uncharted → j-uncharted}/SKILL.md +35 -28
  82. package/skills/{uncharted → j-uncharted}/assets/UNDERSTANDING_DOC_TEMPLATE.md +2 -2
  83. package/skills/{uncharted → j-uncharted}/scripts/detect-dependencies.sh +1 -1
  84. package/skills/{uncharted → j-uncharted}/scripts/detect-tests.sh +1 -1
  85. package/skills/{uncharted → j-uncharted}/scripts/directory-triage.sh +3 -3
  86. package/skills/{uncharted → j-uncharted}/scripts/elicitation-state.sh +3 -3
  87. package/skills/{uncharted → j-uncharted}/scripts/enumerate-target.sh +1 -1
  88. package/skills/{uncharted → j-uncharted}/scripts/import-source.sh +1 -1
  89. package/skills/{uncharted → j-uncharted}/scripts/inspect-provenance.sh +1 -1
  90. package/skills/{uncharted → j-uncharted}/scripts/resolve-segment-target.sh +5 -5
  91. package/skills/{uncharted → j-uncharted}/scripts/run-engine.sh +1 -1
  92. package/skills/{uncharted → j-uncharted}/scripts/validate-proposed-items.sh +2 -2
  93. package/skills/{uncharted → j-uncharted}/scripts/write-backfilled-epics.sh +1 -1
  94. package/skills/j-wtf/SKILL.md +27 -0
  95. package/skills/jenga/SKILL.md +1 -1
  96. package/skills/jenga-permission-level/SKILL.md +1 -1
  97. package/templates/SCRUM_BOARD_SCHEMA.md +1 -1
  98. package/templates/agent-context.md.tpl +10 -10
  99. package/templates/copilot-instructions.md.tpl +89 -19
  100. package/skills/continue/SKILL.md +0 -29
  101. package/skills/error/SKILL.md +0 -29
  102. package/skills/examplify/SKILL.md +0 -42
  103. package/skills/init/SKILL.md +0 -155
  104. package/skills/init/assets/scope-thresholds_template.json +0 -7
  105. package/skills/init/assets/strategy_stub_template.md +0 -38
  106. package/skills/init/assets/workflow_template.json +0 -30
  107. package/skills/init/scripts/apply-project-visibility.sh +0 -176
  108. package/skills/init/scripts/detect-existing-codebase.sh +0 -166
  109. package/skills/init/scripts/init.sh +0 -116
  110. package/skills/jbp/SKILL.md +0 -25
  111. package/skills/lgtm/SKILL.md +0 -21
  112. package/skills/skillify/assets/init-new/assets/.gitignore_template +0 -15
  113. package/skills/skillify/assets/init-new/assets/PROJECT_SUMMARY_template.md +0 -13
  114. package/skills/skillify/assets/init-new/assets/directory_structure.txt +0 -14
  115. package/skills/skillify/assets/init-new/assets/test-config_template.json +0 -4
  116. package/skills/wtf/SKILL.md +0 -20
  117. /package/skills/{close-story → j-close-story}/scripts/compute-scope-divergence.sh +0 -0
  118. /package/skills/{close-story → j-close-story}/scripts/extract-diff-stats.sh +0 -0
  119. /package/skills/{close-story → j-close-story}/scripts/update-task-frontmatter.sh +0 -0
  120. /package/skills/{commit → j-commit}/assets/user_instructions_template.md +0 -0
  121. /package/skills/{distribute → j-distribute}/CONFIG_SCHEMA.md +0 -0
  122. /package/skills/{distribute → j-distribute}/scripts/check-version.sh +0 -0
  123. /package/skills/{distribute → j-distribute}/scripts/commit-version-bump.sh +0 -0
  124. /package/skills/{do → j-do}/assets/intent-vs-diff-prompt.md +0 -0
  125. /package/skills/{do → j-do}/assets/sender_template.json +0 -0
  126. /package/skills/{doc → j-doc}/assets/path-objectives.yaml +0 -0
  127. /package/skills/{doc → j-doc}/scripts/resolve_last_update.py +0 -0
  128. /package/skills/{doc-sync → j-doc-sync}/assets/default_excludes.txt +0 -0
  129. /package/skills/{doc-sync → j-doc-sync}/assets/doc_targets.md +0 -0
  130. /package/skills/{evaluate → j-evaluate}/assets/evaluation_invokation_template.yml +0 -0
  131. /package/skills/{evaluate → j-evaluate}/assets/evaluation_rapport_template.md +0 -0
  132. /package/skills/{idea → j-idea}/assets/idea_template.md +0 -0
  133. /package/skills/{pi-plan → j-pi-plan}/assets/epic.json +0 -0
  134. /package/skills/{pi-plan → j-pi-plan}/assets/story_template.md +0 -0
  135. /package/skills/{publish → j-publish}/assets/ExportOptions.plist.template +0 -0
  136. /package/skills/{publish → j-publish}/assets/ownership-matrix.md +0 -0
  137. /package/skills/{publish → j-publish}/assets/publish.example.json +0 -0
  138. /package/skills/{publish → j-publish}/assets/publish.example.npm-ci.json +0 -0
  139. /package/skills/{publish → j-publish}/assets/publish.example.npm.json +0 -0
  140. /package/skills/{publish → j-publish}/assets/secrets-guide.md +0 -0
  141. /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-minimal.json +0 -0
  142. /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-with-empty-secrets.json +0 -0
  143. /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-with-workflow-path.json +0 -0
  144. /package/skills/{publish → j-publish}/scripts/check_target_config.sh +0 -0
  145. /package/skills/{publish → j-publish}/scripts/droplet_pipeline.sh +0 -0
  146. /package/skills/{publish → j-publish}/scripts/finalize_changelog.sh +0 -0
  147. /package/skills/{publish → j-publish}/scripts/generate_release_notes.sh +0 -0
  148. /package/skills/{publish → j-publish}/scripts/ios_pipeline.sh +0 -0
  149. /package/skills/{publish → j-publish}/scripts/npm_ci_pipeline.sh +0 -0
  150. /package/skills/{publish → j-publish}/scripts/npm_pipeline.sh +0 -0
  151. /package/skills/{publish → j-publish}/scripts/publish_common.sh +0 -0
  152. /package/skills/{publish → j-publish}/scripts/reconcile_tags.sh +0 -0
  153. /package/skills/{publish → j-publish}/scripts/run_gates.sh +0 -0
  154. /package/skills/{publish → j-publish}/scripts/setup_wizard.sh +0 -0
  155. /package/skills/{publish → j-publish}/scripts/show_history.sh +0 -0
  156. /package/skills/{publish → j-publish}/scripts/suggest_semver_bump.sh +0 -0
  157. /package/skills/{publish → j-publish}/scripts/validate_config.sh +0 -0
  158. /package/skills/{publish → j-publish}/scripts/validate_droplet_env.sh +0 -0
  159. /package/skills/{publish → j-publish}/scripts/validate_ios_env.sh +0 -0
  160. /package/skills/{publish → j-publish}/scripts/validate_npm_ci_env.sh +0 -0
  161. /package/skills/{publish → j-publish}/scripts/validate_npm_env.sh +0 -0
  162. /package/skills/{publish → j-publish}/scripts/write_ledger_entry.sh +0 -0
  163. /package/skills/{reconcile → j-reconcile}/assets/report_format.md +0 -0
  164. /package/skills/{reconcile-origin → j-reconcile-origin}/scripts/reconcile-origin.sh +0 -0
  165. /package/skills/{skillify → j-skillify}/assets/init-new/SKILL.md +0 -0
  166. /package/skills/{init → j-skillify/assets/init-new}/assets/.gitignore_template +0 -0
  167. /package/skills/{init → j-skillify/assets/init-new}/assets/PROJECT_SUMMARY_template.md +0 -0
  168. /package/skills/{init → j-skillify/assets/init-new}/assets/directory_structure.txt +0 -0
  169. /package/skills/{init → j-skillify/assets/init-new}/assets/test-config_template.json +0 -0
  170. /package/skills/{skillify → j-skillify}/assets/init-new/assets/workflow_template.json +0 -0
  171. /package/skills/{skillify → j-skillify}/assets/init-new/scripts/init.sh +0 -0
  172. /package/skills/{skillify → j-skillify}/assets/init-old/SKILL.md +0 -0
  173. /package/skills/{status → j-status}/assets/output_format.md +0 -0
  174. /package/skills/{todo → j-todo}/assets/todo_template.md +0 -0
  175. /package/skills/{uncharted → j-uncharted}/assets/SEGMENT_PROPOSAL_TEMPLATE.md +0 -0
  176. /package/skills/{uncharted → j-uncharted}/scripts/apply-subsystem-cap.sh +0 -0
  177. /package/skills/{uncharted → j-uncharted}/scripts/discover-subsystems.sh +0 -0
@@ -379,13 +379,18 @@ if [[ -z "${STAGE_ID}" ]] && printf '%s' "${STAGE_OUTPUT}" | jq -e . >/dev/null
379
379
  STAGE_ID="$(printf '%s' "${STAGE_OUTPUT}" | jq -r '.id // .stageId // .stage_id // empty' 2>/dev/null || true)"
380
380
  fi
381
381
 
382
- # Attempt 3: fall back to `npm stage list <package>@<version> --json` and
383
- # extract the most recent matching entry's id.
382
+ # Attempt 3: fall back to `npm stage list <package> --json` and extract the
383
+ # most recent matching entry's id. `npm stage list` rejects a version-
384
+ # qualified spec ("Version specifiers are not supported for listing staged
385
+ # packages") — it only accepts a bare package name — so this must pass
386
+ # PACKAGE_NAME, never PACKAGE_SPEC; the version match happens client-side via
387
+ # jq below instead (confirmed live on jenga-npm during v1.3.0 staging on
388
+ # 2026-09-01, project/todo.md).
384
389
  if [[ -z "${STAGE_ID}" ]]; then
385
390
  log_warn "could not parse a stage id directly from stage output; falling back to 'npm stage list --json'..."
386
391
 
387
392
  LIST_STATUS=0
388
- LIST_OUTPUT="$(npm stage list "${PACKAGE_SPEC}" --json 2>&1)" || LIST_STATUS=$?
393
+ LIST_OUTPUT="$(npm stage list "${PACKAGE_NAME}" --json 2>&1)" || LIST_STATUS=$?
389
394
 
390
395
  if [[ ${LIST_STATUS} -ne 0 ]]; then
391
396
  printf '%s\n' "${LIST_OUTPUT}" >&2
@@ -405,7 +410,7 @@ if [[ -z "${STAGE_ID}" ]]; then
405
410
  fi
406
411
 
407
412
  if [[ -z "${STAGE_ID}" ]]; then
408
- printf 'npm stage pipeline: staged successfully but the stage id could not be captured from either the direct output or "npm stage list --json". Run "npm stage list %s --json" manually to recover it.\n' "${PACKAGE_SPEC}" >&2
413
+ printf 'npm stage pipeline: staged successfully but the stage id could not be captured from either the direct output or "npm stage list --json". Run "npm stage list %s --json" manually to recover it (bare package name — a version-qualified spec is rejected by npm).\n' "${PACKAGE_NAME}" >&2
409
414
  exit "${EXIT_STAGE_FAILURE}"
410
415
  fi
411
416
 
@@ -463,16 +463,16 @@ print_manual_steps() {
463
463
  local adapter_doc
464
464
  case "$TARGET_TYPE" in
465
465
  droplet)
466
- adapter_doc="$PUBLISH_REPO_ROOT/skills/publish/adapters/droplet.md"
466
+ adapter_doc="$PUBLISH_REPO_ROOT/skills/j-publish/adapters/droplet.md"
467
467
  ;;
468
468
  npm)
469
- adapter_doc="$PUBLISH_REPO_ROOT/skills/publish/adapters/npm.md"
469
+ adapter_doc="$PUBLISH_REPO_ROOT/skills/j-publish/adapters/npm.md"
470
470
  ;;
471
471
  npm-ci)
472
- adapter_doc="$PUBLISH_REPO_ROOT/skills/publish/adapters/npm-ci.md"
472
+ adapter_doc="$PUBLISH_REPO_ROOT/skills/j-publish/adapters/npm-ci.md"
473
473
  ;;
474
474
  mobile-ios)
475
- adapter_doc="$PUBLISH_REPO_ROOT/skills/publish/adapters/mobile-ios.md"
475
+ adapter_doc="$PUBLISH_REPO_ROOT/skills/j-publish/adapters/mobile-ios.md"
476
476
  ;;
477
477
  *)
478
478
  return 0
@@ -13,7 +13,7 @@
13
13
  # Exit codes:
14
14
  # 0 all four preflight checks passed
15
15
  # 4 one of the checks failed (config/environment invalid), matching
16
- # skills/publish/assets/ci-contract.md
16
+ # skills/j-publish/assets/ci-contract.md
17
17
  #
18
18
  # Security note: the registry probe (check 4) never prints npm's raw stdout/stderr. Only
19
19
  # messages composed by this script are emitted, so nothing npm writes — which could in
@@ -261,7 +261,7 @@ Once all answers have been collected, perform the following steps in order:
261
261
  ```
262
262
 
263
263
  4. **Validate against the schema.** Run
264
- `bash skills/publish/scripts/validate_config.sh <path-to-publish.json>`
264
+ `bash skills/j-publish/scripts/validate_config.sh <path-to-publish.json>`
265
265
  before saving. If validation fails, report the error and abort — do not
266
266
  write a broken `publish.json`.
267
267
 
@@ -110,7 +110,7 @@ Optional short string such as `exampleco`.
110
110
  Maps to: `targets[].secrets.app_store_connect_api_key_id`
111
111
 
112
112
  Enter the environment-variable name that will supply the App Store Connect API key identifier.
113
- See `skills/publish/assets/secrets-guide.md` before answering.
113
+ See `skills/j-publish/assets/secrets-guide.md` before answering.
114
114
 
115
115
  ## Expected format:
116
116
 
@@ -213,7 +213,7 @@ Once all six answers have been collected, perform the following steps in order:
213
213
  - Do not include a `secrets` block — this adapter uses OIDC and no token
214
214
  is required.
215
215
  4. **Validate against the schema.** Run
216
- `skills/publish/scripts/validate_config.sh` before saving. If validation
216
+ `skills/j-publish/scripts/validate_config.sh` before saving. If validation
217
217
  fails, report the error and abort — do not write a broken `publish.json`.
218
218
  5. **Report to the user.** Print a short summary confirming (a) the target
219
219
  block written, (b) the `github_repo` value, and (c) the `workflow_path`
@@ -97,7 +97,7 @@ deploy).
97
97
  ## Prerequisite: NPM_TOKEN
98
98
 
99
99
  The npm pipeline reads the auth token from the `NPM_TOKEN` environment
100
- variable at publish time (`skills/publish/adapters/npm.md` defines this
100
+ variable at publish time (`skills/j-publish/adapters/npm.md` defines this
101
101
  contract). The wizard does not collect the token value — that would be
102
102
  unsafe. Instead, at the end of the wizard, write the following instructions
103
103
  file so the user knows exactly what to configure:
@@ -1,12 +1,19 @@
1
1
  ---
2
- name: j:reconcile
3
- description: Reconcile the scrum board with actual implementation state. Cross-checks every task's board status against git history and worktrees, merges orphaned worktree branches, demotes unimplemented "Done" items, promotes secretly-implemented items, flags code with no board provenance and offers /uncharted segment for it, and cleans stale entries from todo.md. Use when the board feels out of sync, after a big merge session, when tasks were completed outside the normal workflow, or when todo.md has grown stale. Trigger on phrases like "sync the board", "clean up the board", "reconcile", "board is out of date", "todo is stale", or "check what's really done".
2
+ name: j.reconcile
3
+ description: Polyfill alias of the reconcile skill under a collision-safe directory name. Identical behavior to /reconcile — Reconcile the scrum board with actual implementation state. Cross-checks every task's board status against git history and worktrees, merges orphaned worktree branches, demotes unimplemented "Done" items, promotes secretly-implemented items, flags code with no board provenance and offers /uncharted segment for it, and cleans stale entries from todo.md. Use when the board feels out of sync, after a big merge session, when tasks were completed outside the normal workflow, or when todo.md has grown stale. Trigger on phrases like "sync the board", "clean up the board", "reconcile", "board is out of date", "todo is stale", or "check what's really done". Use when the bare /reconcile form is shadowed by another tool's own built-in command of the same name.
4
4
  metadata:
5
5
  prefered_agent: scrum-master
6
+ keywords:
7
+ - j-reconcile
8
+ - polyfill
6
9
  ---
7
10
 
8
11
  # Reconcile — Board ↔ Code Synchronisation
9
12
 
13
+ This skill is a literal-directory-name duplicate of `skills/reconcile/`. It exists so that `/j-reconcile` (and `j.j-reconcile`) give a guaranteed-unshadowed way to reach the same flow as `/reconcile`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/reconcile` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
14
+
15
+ This file is generated/synced by `scripts/generate-j-alias.sh reconcile` from `skills/reconcile/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
16
+
10
17
  Walks the full board (epics → stories → tasks), verifies each item's status against what actually exists in git, and fixes any drift. Also cleans `project/todo.md` of entries that are already done. Then runs the same check in reverse — code that exists with no board item and no EST-tagged commit behind it — and offers `/uncharted segment` for what it finds.
11
18
 
12
19
  ## Scope argument
@@ -35,7 +42,7 @@ Omitting the argument entirely keeps today's full-board behavior completely unch
35
42
  phase below.
36
43
 
37
44
  Scope resolution itself is deterministic and handled entirely by
38
- `skills/reconcile/scripts/resolve-reconcile-scope.sh` (see Phase 0 immediately below) — this skill
45
+ `skills/j-reconcile/scripts/resolve-reconcile-scope.sh` (see Phase 0 immediately below) — this skill
39
46
  only interprets that script's output; it does not re-parse scope arguments or re-derive range
40
47
  expansion.
41
48
 
@@ -50,7 +57,7 @@ Before touching anything else, resolve the scope argument (if any — see "Scope
50
57
  into a concrete set of epic/story/task ids:
51
58
 
52
59
  ```bash
53
- skills/reconcile/scripts/resolve-reconcile-scope.sh <scope-argument>
60
+ skills/j-reconcile/scripts/resolve-reconcile-scope.sh <scope-argument>
54
61
  ```
55
62
 
56
63
  Omit `<scope-argument>` entirely for an unscoped, full-board run (the script's own no-argument
@@ -176,7 +183,7 @@ Phases 2 and 3 ask "does this board item exist in the code?". This phase asks th
176
183
  Run:
177
184
 
178
185
  ```bash
179
- skills/reconcile/scripts/detect-unlinked-code.sh
186
+ skills/j-reconcile/scripts/detect-unlinked-code.sh
180
187
  ```
181
188
 
182
189
  It emits a single JSON object and exits `0` whether or not it finds anything; read
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
  # ---------------------------------------------------------------------------
3
- # skills/reconcile/scripts/detect-unlinked-code.sh
3
+ # skills/j-reconcile/scripts/detect-unlinked-code.sh
4
4
  #
5
5
  # The inverse half of `/reconcile`. The normal pass asks "does this board item
6
6
  # exist in the code?"; this asks "does this code exist on the board?" and finds
@@ -31,7 +31,7 @@
31
31
  # It scans, it classifies, it reports. It NEVER writes anything, never touches
32
32
  # the board, and never invokes `/uncharted`. Deciding which groups are worth
33
33
  # investigating and presenting the offer is agent judgement and lives in
34
- # `skills/reconcile/SKILL.md`.
34
+ # `skills/j-reconcile/SKILL.md`.
35
35
  #
36
36
  # ---------------------------------------------------------------------------
37
37
  # SIGNAL A IS BORROWED, NOT REBUILT
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env bash
2
2
  # ---------------------------------------------------------------------------
3
- # skills/reconcile/scripts/resolve-reconcile-scope.sh
3
+ # skills/j-reconcile/scripts/resolve-reconcile-scope.sh
4
4
  #
5
5
  # Deterministic scope-argument resolver backing `/reconcile`'s new scope
6
6
  # argument (story E17_S07). This script owns ALL scope-argument parsing and
7
- # id-range expansion for `/reconcile` — `skills/reconcile/SKILL.md` (wired in
7
+ # id-range expansion for `/reconcile` — `skills/j-reconcile/SKILL.md` (wired in
8
8
  # the sibling task E17_S07_T02) only interprets this script's structured
9
9
  # stdout output; it must not re-derive any parsing or resolution logic
10
10
  # inline.
@@ -124,7 +124,7 @@
124
124
  # "epic_ids": ["E12"],
125
125
  # "story_ids": ["E12_S03", "E12_S04", "E12_S05"],
126
126
  # "task_ids": ["E12_S03_T01", "..."],
127
- # "owned_path_hints": ["skills/reconcile/", "..."]
127
+ # "owned_path_hints": ["skills/j-reconcile/", "..."]
128
128
  # }
129
129
  #
130
130
  # scope_type "full" epic_ids/story_ids/task_ids are all EMPTY arrays.
@@ -1,19 +1,26 @@
1
1
  ---
2
- name: j:reconcile-origin
3
- description: Sync the current (or specified) branch with origin by rebasing local commits on top of the latest upstream state.
2
+ name: j.reconcile-origin
3
+ description: Polyfill alias of the reconcile-origin skill under a collision-safe directory name. Identical behavior to /reconcile-origin — Sync the current (or specified) branch with origin by rebasing local commits on top of the latest upstream state. Use when the bare /reconcile-origin form is shadowed by another tool's own built-in command of the same name.
4
4
  keywords:
5
5
  - "sync branch"
6
6
  - "rebase origin"
7
7
  - "reconcile origin"
8
8
  - "pull rebase"
9
+ - j-reconcile-origin
10
+ - polyfill
9
11
  examples:
10
12
  - "sync my branch with origin"
11
13
  - "rebase local commits on top of origin"
12
14
  - "reconcile-origin feature/my-branch"
15
+ - "j-reconcile-origin"
13
16
  ---
14
17
 
15
18
  # Reconcile Origin
16
19
 
20
+ This skill is a literal-directory-name duplicate of `skills/reconcile-origin/`. It exists so that `/j-reconcile-origin` (and `j.j-reconcile-origin`) give a guaranteed-unshadowed way to reach the same flow as `/reconcile-origin`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/reconcile-origin` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
21
+
22
+ This file is generated/synced by `scripts/generate-j-alias.sh reconcile-origin` from `skills/reconcile-origin/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
23
+
17
24
  Use this skill to rebase local work on top of the latest `origin/<branch>` state without re-implementing git logic inline.
18
25
 
19
26
  ## Instructions
@@ -22,7 +29,7 @@ Use this skill to rebase local work on top of the latest `origin/<branch>` state
22
29
  - If the user passed an argument, use that branch name.
23
30
  - Otherwise, use the current branch name.
24
31
 
25
- 2. Invoke `.agents/skills/reconcile-origin/scripts/reconcile-origin.sh [<branch>]` and capture stdout.
32
+ 2. Invoke `.agents/skills/j-reconcile-origin/scripts/reconcile-origin.sh [<branch>]` and capture stdout.
26
33
  - Do not run any inline git commands in this skill — all git work is handled by the script.
27
34
  - The script handles dirty-worktree detection internally and returns `{"status":"error","code":"uncommitted_changes",...}` if the working tree is not clean.
28
35
 
@@ -38,7 +45,7 @@ Use this skill to rebase local work on top of the latest `origin/<branch>` state
38
45
  2. Cancel and inspect the branch setup manually
39
46
  3. Other (describe below)
40
47
 
41
- - If the user chooses option 1, invoke `.agents/skills/reconcile-origin/scripts/reconcile-origin.sh <branch> --create-tracking`.
48
+ - If the user chooses option 1, invoke `.agents/skills/j-reconcile-origin/scripts/reconcile-origin.sh <branch> --create-tracking`.
42
49
  - If `remote_exists` is `false`, explain that neither a local branch nor `origin/<branch>` was found and stop.
43
50
  - `conflict`
44
51
  - Present one structured conflict rapport per item in `conflicts`.
@@ -55,7 +62,7 @@ Use this skill to rebase local work on top of the latest `origin/<branch>` state
55
62
  3. Handle it later — leave annotated conflict markers in the file and continue the scripted flow
56
63
  4. Other (describe below)
57
64
 
58
- - If the user chooses “Handle it later”, invoke `.agents/skills/reconcile-origin/scripts/reconcile-origin.sh <branch> --handle-later <file>` for the selected conflict file.
65
+ - If the user chooses “Handle it later”, invoke `.agents/skills/j-reconcile-origin/scripts/reconcile-origin.sh <branch> --handle-later <file>` for the selected conflict file.
59
66
  - `handled_later`
60
67
  - Confirm that the selected file was annotated for later resolution.
61
68
  - Tell the user the conflict markers were intentionally preserved with a `# RECONCILE-ORIGIN CONFLICT:` note.
@@ -71,5 +78,5 @@ Use this skill to rebase local work on top of the latest `origin/<branch>` state
71
78
 
72
79
  ## Guard Rails
73
80
 
74
- - All git work must go through `.agents/skills/reconcile-origin/scripts/reconcile-origin.sh`.
81
+ - All git work must go through `.agents/skills/j-reconcile-origin/scripts/reconcile-origin.sh`.
75
82
  - Do not inline fetch, checkout, pull, merge, rebase, or status commands in this skill body.
@@ -1,21 +1,28 @@
1
1
  ---
2
- name: j:redo
3
- description: Redo parts or entire previous implementations identified by a commit SHA or an Epic/Story number (e.g. E01, E02_S03). Expects an identifier and a description of what to redo and why. Use when the user wants to revisit, rework, or rewrite previously completed work, including updating all affected documentation.
2
+ name: j.redo
3
+ description: Polyfill alias of the redo skill under a collision-safe directory name. Identical behavior to /redo — Redo parts or entire previous implementations identified by a commit SHA or an Epic/Story number (e.g. E01, E02_S03). Expects an identifier and a description of what to redo and why. Use when the user wants to revisit, rework, or rewrite previously completed work, including updating all affected documentation. Use when the bare /redo form is shadowed by another tool's own built-in command of the same name.
4
4
  keywords:
5
5
  - redo
6
6
  - rework
7
7
  - rewrite
8
8
  - revisit
9
9
  - redo task
10
+ - j-redo
11
+ - polyfill
10
12
  examples:
11
13
  - "redo the login implementation"
12
14
  - "rewrite story E02_S01"
15
+ - "j-redo"
13
16
  metadata:
14
17
  prefered_agent: scrum-master
15
18
  ---
16
19
 
17
20
  # Redo — Rework a Previous Implementation
18
21
 
22
+ This skill is a literal-directory-name duplicate of `skills/redo/`. It exists so that `/j-redo` (and `j.j-redo`) give a guaranteed-unshadowed way to reach the same flow as `/redo`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/redo` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
23
+
24
+ This file is generated/synced by `scripts/generate-j-alias.sh redo` from `skills/redo/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
25
+
19
26
  ## Input Format
20
27
 
21
28
  ```
@@ -1,10 +1,17 @@
1
1
  ---
2
- name: j:skillify
3
- description: Refactor one or more existing skills into a cleaner, more maintainable structure — extracting hardcoded content into asset files, offloading deterministic steps into scripts, and reorganizing the skill body to reflect the leaner result. Use this whenever the user wants to clean up, improve, or restructure an existing skill, mentions that a skill has hardcoded content that could be templated, or asks to "skillify", "refactor", or "tidy up" a skill. Trigger even if the user just pastes a skill and says something like "can we make this better?".
2
+ name: j.skillify
3
+ description: Polyfill alias of the skillify skill under a collision-safe directory name. Identical behavior to /skillify — Refactor one or more existing skills into a cleaner, more maintainable structure — extracting hardcoded content into asset files, offloading deterministic steps into scripts, and reorganizing the skill body to reflect the leaner result. Use this whenever the user wants to clean up, improve, or restructure an existing skill, mentions that a skill has hardcoded content that could be templated, or asks to "skillify", "refactor", or "tidy up" a skill. Trigger even if the user just pastes a skill and says something like "can we make this better?". Use when the bare /skillify form is shadowed by another tool's own built-in command of the same name.
4
+ keywords:
5
+ - j-skillify
6
+ - polyfill
4
7
  ---
5
8
 
6
9
  # Skillify — Refactor a Skill into a Cleaner Structure
7
10
 
11
+ This skill is a literal-directory-name duplicate of `skills/skillify/`. It exists so that `/j-skillify` (and `j.j-skillify`) give a guaranteed-unshadowed way to reach the same flow as `/skillify`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/skillify` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
12
+
13
+ This file is generated/synced by `scripts/generate-j-alias.sh skillify` from `skills/skillify/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
14
+
8
15
  ## What this skill does
9
16
 
10
17
  Takes one or more existing skills and refactors them by:
@@ -65,4 +72,4 @@ The rewritten SKILL.md should:
65
72
  - `assets/init-old/SKILL.md` — The init skill before refactoring (hardcoded heredocs, inline JSON, hardcoded directory list)
66
73
  - `assets/init-new/SKILL.md` — The init skill after refactoring (all content in assets, steps delegated to `init.sh`)
67
74
 
68
- Read these when you need a concrete example of the before/after pattern.
75
+ Read these when you need a concrete example of the before/after pattern.
@@ -1,21 +1,28 @@
1
1
  ---
2
- name: j:spinoff
3
- description: Capture a diverging topic mid-conversation. Collects context and a mandatory origin, optionally runs /brainstorm for prerequisites, saves an /idea entry, and returns focus to the primary thread.
2
+ name: j.spinoff
3
+ description: Polyfill alias of the spinoff skill under a collision-safe directory name. Identical behavior to /spinoff — Capture a diverging topic mid-conversation. Collects context and a mandatory origin, optionally runs /brainstorm for prerequisites, saves an /idea entry, and returns focus to the primary thread. Use when the bare /spinoff form is shadowed by another tool's own built-in command of the same name.
4
4
  keywords:
5
5
  - spinoff
6
6
  - diverge
7
7
  - side topic
8
8
  - capture topic
9
9
  - new thread
10
+ - j-spinoff
11
+ - polyfill
10
12
  examples:
11
13
  - "let's spinoff this idea"
12
14
  - "capture this as a separate thread"
15
+ - "j-spinoff"
13
16
  metadata:
14
17
  prefered_agent: scrum-master
15
18
  ---
16
19
 
17
20
  # Spinoff — Capture a Diverging Topic
18
21
 
22
+ This skill is a literal-directory-name duplicate of `skills/spinoff/`. It exists so that `/j-spinoff` (and `j.j-spinoff`) give a guaranteed-unshadowed way to reach the same flow as `/spinoff`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/spinoff` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
23
+
24
+ This file is generated/synced by `scripts/generate-j-alias.sh spinoff` from `skills/spinoff/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
25
+
19
26
  ## Instructions
20
27
 
21
28
  1. **Identify the diverging topic** — Ask the user to confirm or briefly describe the diverging topic.
@@ -1,19 +1,26 @@
1
1
  ---
2
- name: j:status
3
- description: Print a human-readable summary of the entire scrum board — all epics, stories, and tasks with their statuses — plus any open rapports and unprocessed queue triggers. Use when you want a quick overview of project state without reading raw files.
2
+ name: j.status
3
+ description: Polyfill alias of the status skill under a collision-safe directory name. Identical behavior to /status — Print a human-readable summary of the entire scrum board — all epics, stories, and tasks with their statuses — plus any open rapports and unprocessed queue triggers. Use when you want a quick overview of project state without reading raw files. Use when the bare /status form is shadowed by another tool's own built-in command of the same name.
4
4
  keywords:
5
5
  - status
6
6
  - board summary
7
7
  - overview
8
8
  - project state
9
9
  - what's done
10
+ - j-status
11
+ - polyfill
10
12
  examples:
11
13
  - "show me the project status"
12
14
  - "what's the state of the board?"
15
+ - "j-status"
13
16
  ---
14
17
 
15
18
  # Status — Board Overview
16
19
 
20
+ This skill is a literal-directory-name duplicate of `skills/status/`. It exists so that `/j-status` (and `j.j-status`) give a guaranteed-unshadowed way to reach the same flow as `/status`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/status` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
21
+
22
+ This file is generated/synced by `scripts/generate-j-alias.sh status` from `skills/status/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
23
+
17
24
  ## Instructions
18
25
 
19
26
  1. **Read `project/configs/workflow.json`** to confirm board paths. Fall back to `project/board/` if the file does not exist.
@@ -1,21 +1,28 @@
1
1
  ---
2
- name: j:todo
3
- description: Add missions to the project todo list (project/todo.md), optionally linking them to epics and stories. Loops until the user is done, then optionally executes the list.
2
+ name: j.todo
3
+ description: Polyfill alias of the todo skill under a collision-safe directory name. Identical behavior to /todo — Add missions to the project todo list (project/todo.md), optionally linking them to epics and stories. Loops until the user is done, then optionally executes the list. Use when the bare /todo form is shadowed by another tool's own built-in command of the same name.
4
4
  keywords:
5
5
  - todo
6
6
  - add task
7
7
  - queue work
8
8
  - backlog
9
9
  - add to list
10
+ - j-todo
11
+ - polyfill
10
12
  examples:
11
13
  - "add this to the todo list"
12
14
  - "queue this as a task"
15
+ - "j-todo"
13
16
  metadata:
14
17
  prefered_agent: scrum-master
15
18
  ---
16
19
 
17
20
  # Todo — Add Missions to the Todo List
18
21
 
22
+ This skill is a literal-directory-name duplicate of `skills/todo/`. It exists so that `/j-todo` (and `j.j-todo`) give a guaranteed-unshadowed way to reach the same flow as `/todo`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/todo` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
23
+
24
+ This file is generated/synced by `scripts/generate-j-alias.sh todo` from `skills/todo/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
25
+
19
26
  ## `--trivial` Flag
20
27
 
21
28
  **Syntax:** `/todo --trivial <description>` — optionally combined with the same `: <Epic no.>_<Story no.>` linkage syntax normal `/todo` entries use, e.g. `/todo --trivial Fix typo in error message: E12_S03`.
@@ -58,7 +65,7 @@ When `--trivial` is present, the mission is written as a **fully-formed task boa
58
65
 
59
66
  c. **Run the helper script**, which handles everything mechanical — next task-ID assignment, writing the task board file with `execution_scope: inline` forced, registering the new task ID into the parent story's `tasks:` frontmatter list, and adding the `project/todo.md` entry using the full task ID (so `/do` routes straight into its Inline Execution Path with no redundant breakdown pass):
60
67
  ```
61
- bash skills/todo/scripts/add_trivial_task.sh \
68
+ bash skills/j-todo/scripts/add_trivial_task.sh \
62
69
  --story <E##_S##> \
63
70
  --title "<mission title>" \
64
71
  --description "<mission description>" \
@@ -13,7 +13,7 @@
13
13
  <!-- PLACEHOLDER: what this todo is trying to achieve -->
14
14
 
15
15
  ## Affected Files or Scope
16
- <!-- PLACEHOLDER: which files, modules, or areas are involved, e.g. src/auth/, skills/todo/ -->
16
+ <!-- PLACEHOLDER: which files, modules, or areas are involved, e.g. src/auth/, skills/j-todo/ -->
17
17
 
18
18
  ## Intended Approach
19
19
  <!-- PLACEHOLDER: step-by-step or high-level approach to the work -->
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # skills/todo/scripts/add_trivial_task.sh
2
+ # skills/j-todo/scripts/add_trivial_task.sh
3
3
  #
4
4
  # Creates a fully-formed task board file for a `/todo --trivial` mission,
5
5
  # forced to execution_scope: inline unconditionally, and registers it both
@@ -10,7 +10,7 @@
10
10
  # The JUDGMENT half — estimating file/line counts and deciding what
11
11
  # execution_scope the normal heuristic in agents/scrum-master.md would have
12
12
  # assigned (computed_tier) — happens in the calling agent's instructions
13
- # (skills/todo/SKILL.md), per the Skill Implementation Principle: a step that
13
+ # (skills/j-todo/SKILL.md), per the Skill Implementation Principle: a step that
14
14
  # requires reasoning about branching logic, new dependencies, etc. does not
15
15
  # belong in a script. This script never reads project/configs/scope-thresholds.json
16
16
  # or recomputes computed_tier itself — it only records what it was told.
@@ -33,7 +33,7 @@ cd "$REPO_ROOT"
33
33
 
34
34
  TASKS_DIR="project/board/tasks"
35
35
  STORIES_DIR="project/board/stories"
36
- UPDATE_STORY_SCRIPT="skills/todo/scripts/update_story_tasks.py"
36
+ UPDATE_STORY_SCRIPT="skills/j-todo/scripts/update_story_tasks.py"
37
37
 
38
38
  story_id=""
39
39
  title=""
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
  """
3
- skills/todo/scripts/update_story_tasks.py
3
+ skills/j-todo/scripts/update_story_tasks.py
4
4
 
5
5
  Mechanically inserts a task ID into a story board file's `tasks:` frontmatter
6
6
  list, if it is not already present. Idempotent (a re-run with the same
@@ -12,7 +12,7 @@ scripts/with-lock.sh, keyed to the story file, per templates/SCRUM_BOARD_SCHEMA.
12
12
  File Locking section (board frontmatter writes must go through the lock wrapper).
13
13
 
14
14
  Usage:
15
- python3 skills/todo/scripts/update_story_tasks.py <story-file> <task-id>
15
+ python3 skills/j-todo/scripts/update_story_tasks.py <story-file> <task-id>
16
16
 
17
17
  Exit codes:
18
18
  0 success (task_id inserted, or already present)