session-orchestrator 3.22.0 → 3.23.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 (268) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.cursor/commands/autopilot-multi.md +14 -0
  5. package/.cursor/commands/autopilot.md +14 -0
  6. package/.cursor/commands/bootstrap.md +14 -0
  7. package/.cursor/commands/brainstorm.md +14 -0
  8. package/.cursor/commands/close.md +13 -0
  9. package/.cursor/commands/contract-version-bump.md +14 -0
  10. package/.cursor/commands/debug.md +14 -0
  11. package/.cursor/commands/discovery.md +14 -0
  12. package/.cursor/commands/dispatcher.md +14 -0
  13. package/.cursor/commands/eli5.md +14 -0
  14. package/.cursor/commands/eval.md +14 -0
  15. package/.cursor/commands/evolve.md +14 -0
  16. package/.cursor/commands/go.md +14 -0
  17. package/.cursor/commands/grill.md +14 -0
  18. package/.cursor/commands/harness-audit.md +13 -0
  19. package/.cursor/commands/journey-audit.md +14 -0
  20. package/.cursor/commands/memory-cleanup.md +14 -0
  21. package/.cursor/commands/persona-panel.md +14 -0
  22. package/.cursor/commands/plan.md +14 -0
  23. package/.cursor/commands/portfolio.md +14 -0
  24. package/.cursor/commands/reconcile.md +14 -0
  25. package/.cursor/commands/release.md +14 -0
  26. package/.cursor/commands/repo-audit.md +13 -0
  27. package/.cursor/commands/session.md +14 -0
  28. package/.cursor/commands/spinout.md +14 -0
  29. package/.cursor/commands/sunset-review.md +14 -0
  30. package/.cursor/commands/templates-ack.md +14 -0
  31. package/.cursor/commands/test.md +14 -0
  32. package/.cursor/hooks.json +60 -0
  33. package/.cursor/rules/000-session-orchestrator.mdc +8 -0
  34. package/.cursor/rules/010-session-workflow.mdc +9 -1
  35. package/.cursor/rules/020-quality-gates.mdc +1 -1
  36. package/.cursor/rules/030-wave-execution.mdc +1 -1
  37. package/.cursor/rules/050-plan.mdc +2 -2
  38. package/.cursor/rules/070-gitlab-ops.mdc +73 -57
  39. package/.cursor/rules/080-ecosystem-health.mdc +7 -7
  40. package/.cursor/skills/architecture/SKILL.md +13 -0
  41. package/.cursor/skills/autopilot/SKILL.md +12 -0
  42. package/.cursor/skills/bootstrap/SKILL.md +12 -0
  43. package/.cursor/skills/brainstorm/SKILL.md +13 -0
  44. package/.cursor/skills/claude-md-drift-check/SKILL.md +13 -0
  45. package/.cursor/skills/contract-version-bump/SKILL.md +12 -0
  46. package/.cursor/skills/convergence-monitoring/SKILL.md +12 -0
  47. package/.cursor/skills/daily/SKILL.md +12 -0
  48. package/.cursor/skills/debug/SKILL.md +13 -0
  49. package/.cursor/skills/discovery/SKILL.md +13 -0
  50. package/.cursor/skills/dispatcher/SKILL.md +13 -0
  51. package/.cursor/skills/docs-orchestrator/SKILL.md +13 -0
  52. package/.cursor/skills/domain-model/SKILL.md +13 -0
  53. package/.cursor/skills/ecosystem-health/SKILL.md +13 -0
  54. package/.cursor/skills/eli5/SKILL.md +13 -0
  55. package/.cursor/skills/eval/SKILL.md +12 -0
  56. package/.cursor/skills/evolve/SKILL.md +13 -0
  57. package/.cursor/skills/frontmatter-guard/SKILL.md +13 -0
  58. package/.cursor/skills/gitlab-ops/SKILL.md +13 -0
  59. package/.cursor/skills/gitlab-portfolio/SKILL.md +13 -0
  60. package/.cursor/skills/grill/SKILL.md +13 -0
  61. package/.cursor/skills/hook-development/SKILL.md +13 -0
  62. package/.cursor/skills/journey-audit/SKILL.md +13 -0
  63. package/.cursor/skills/mcp-builder/SKILL.md +13 -0
  64. package/.cursor/skills/memory-cleanup/SKILL.md +12 -0
  65. package/.cursor/skills/mode-selector/SKILL.md +13 -0
  66. package/.cursor/skills/npm-publish/SKILL.md +12 -0
  67. package/.cursor/skills/peekaboo-driver/SKILL.md +13 -0
  68. package/.cursor/skills/persona-panel/SKILL.md +12 -0
  69. package/.cursor/skills/plan/SKILL.md +13 -0
  70. package/.cursor/skills/playwright-driver/SKILL.md +13 -0
  71. package/.cursor/skills/quality-gates/SKILL.md +13 -0
  72. package/.cursor/skills/reconcile/SKILL.md +12 -0
  73. package/.cursor/skills/repo-audit/SKILL.md +13 -0
  74. package/.cursor/skills/session-end/SKILL.md +13 -0
  75. package/.cursor/skills/session-plan/SKILL.md +13 -0
  76. package/.cursor/skills/session-start/SKILL.md +13 -0
  77. package/.cursor/skills/skill-creator/SKILL.md +13 -0
  78. package/.cursor/skills/spinout/SKILL.md +12 -0
  79. package/.cursor/skills/sunset-review/SKILL.md +13 -0
  80. package/.cursor/skills/test-runner/SKILL.md +13 -0
  81. package/.cursor/skills/tmux-layout/SKILL.md +13 -0
  82. package/.cursor/skills/ubiquitous-language/SKILL.md +13 -0
  83. package/.cursor/skills/using-orchestrator/SKILL.md +13 -0
  84. package/.cursor/skills/vault-mirror/SKILL.md +13 -0
  85. package/.cursor/skills/vault-sync/SKILL.md +13 -0
  86. package/.cursor/skills/wave-executor/SKILL.md +13 -0
  87. package/.cursor/skills/write-executable-plan/SKILL.md +13 -0
  88. package/.mcp.json +4 -1
  89. package/CHANGELOG.md +168 -0
  90. package/README.md +18 -15
  91. package/agents/AGENTS.md +23 -4
  92. package/agents/code-implementer.md +2 -1
  93. package/agents/db-specialist.md +2 -1
  94. package/agents/docs-writer.md +3 -1
  95. package/agents/eval-judge.md +1 -1
  96. package/agents/session-reviewer.md +7 -1
  97. package/agents/test-writer.md +2 -1
  98. package/agents/ui-developer.md +2 -1
  99. package/commands/bootstrap.md +2 -2
  100. package/commands/close.md +3 -1
  101. package/commands/go.md +1 -1
  102. package/commands/journey-audit.md +43 -0
  103. package/docs/USER-GUIDE.md +2 -2
  104. package/docs/ci-setup.md +14 -0
  105. package/docs/codex-setup.md +64 -0
  106. package/docs/components.md +6 -6
  107. package/docs/cursor-setup.md +26 -47
  108. package/docs/events-schema.md +76 -4
  109. package/docs/github-mirror-protection.md +197 -0
  110. package/docs/pi-setup.md +2 -0
  111. package/docs/rule-authoring.md +3 -1
  112. package/docs/scope-collision-guard.md +49 -2
  113. package/docs/session-config-reference.md +26 -4
  114. package/docs/session-config-template.md +4 -3
  115. package/docs/telemetry.md +22 -0
  116. package/hooks/_lib/lock-bootstrap.mjs +8 -4
  117. package/hooks/_lib/vcs-create-matcher.mjs +397 -38
  118. package/hooks/enforce-scope.mjs +64 -0
  119. package/hooks/hooks-codex.json +1 -1
  120. package/hooks/hooks-cursor.json +201 -20
  121. package/hooks/hooks-pi.json +1 -1
  122. package/hooks/hooks.json +2 -2
  123. package/hooks/on-session-end.mjs +211 -10
  124. package/hooks/on-session-start.mjs +214 -11
  125. package/hooks/on-stop.mjs +48 -9
  126. package/hooks/post-subagent-discovery-validator.mjs +34 -3
  127. package/hooks/post-tool-batch-wave-signal.mjs +11 -2
  128. package/hooks/pre-bash-issue-budget.mjs +117 -4
  129. package/hooks/pre-bash-sessions-ledger-guard.mjs +159 -0
  130. package/hooks/pre-bash-staging-fence.mjs +4 -0
  131. package/hooks/pre-task-scope-disjoint.mjs +368 -35
  132. package/hooks/skill-invocation-telemetry.mjs +21 -10
  133. package/monitors/monitors.json +6 -0
  134. package/package.json +1 -1
  135. package/pi/prompts/journey-audit.md +12 -0
  136. package/rules/_index.md +9 -1
  137. package/rules/always-on/ask-via-tool.md +62 -0
  138. package/rules/always-on/bash-harness-pitfalls.md +168 -0
  139. package/rules/always-on/build-value.md +47 -0
  140. package/rules/always-on/cross-session-messaging.md +59 -0
  141. package/rules/always-on/loop-and-monitor.md +221 -0
  142. package/rules/always-on/parallel-sessions.md +142 -12
  143. package/rules/always-on/receiving-review.md +108 -0
  144. package/rules/always-on/test-value.md +40 -0
  145. package/rules/always-on/verification-before-completion.md +77 -0
  146. package/scripts/archive-closed-prds.mjs +258 -18
  147. package/scripts/autopilot.mjs +5 -0
  148. package/scripts/backfill-evidence-digest.mjs +376 -0
  149. package/scripts/cursor-install.mjs +89 -48
  150. package/scripts/export-hw-learnings.mjs +143 -2
  151. package/scripts/express-path.mjs +299 -0
  152. package/scripts/generate-cursor-adapter.mjs +253 -0
  153. package/scripts/github-protection-audit.mjs +358 -0
  154. package/scripts/lib/autopilot/worktree-pipeline.mjs +240 -16
  155. package/scripts/lib/build-live-signals.mjs +24 -5
  156. package/scripts/lib/ci-status-banner.mjs +158 -11
  157. package/scripts/lib/command-blocker.mjs +70 -0
  158. package/scripts/lib/config/reconcile.mjs +79 -4
  159. package/scripts/lib/config/section-extractor.mjs +235 -36
  160. package/scripts/lib/config-schema.mjs +9 -1
  161. package/scripts/lib/config.mjs +57 -6
  162. package/scripts/lib/convergence-monitor.mjs +13 -2
  163. package/scripts/lib/cursor-hook-bridge.mjs +443 -0
  164. package/scripts/lib/dispatcher/cli.mjs +2 -2
  165. package/scripts/lib/express-path.mjs +327 -0
  166. package/scripts/lib/file-lock.mjs +22 -4
  167. package/scripts/lib/gates/gate-full.mjs +81 -8
  168. package/scripts/lib/gates/gate-helpers.mjs +76 -15
  169. package/scripts/lib/git-config-drift.mjs +134 -5
  170. package/scripts/lib/host-identity.mjs +247 -2
  171. package/scripts/lib/instruction-budget-guard.mjs +31 -1
  172. package/scripts/lib/issue-budget.mjs +229 -30
  173. package/scripts/lib/learnings/io.mjs +55 -10
  174. package/scripts/lib/learnings/schema.mjs +95 -28
  175. package/scripts/lib/lock-reaper.mjs +7 -1
  176. package/scripts/lib/locks/staging-fence-lock.mjs +5 -1
  177. package/scripts/lib/locks/state-md-lock.mjs +8 -1
  178. package/scripts/lib/memory-banner.mjs +5 -2
  179. package/scripts/lib/memory-paths.mjs +15 -6
  180. package/scripts/lib/mode-selector/scoring.mjs +53 -6
  181. package/scripts/lib/platform.mjs +72 -9
  182. package/scripts/lib/plugin-root.mjs +143 -19
  183. package/scripts/lib/project-hygiene.mjs +43 -3
  184. package/scripts/lib/quality-gate.mjs +271 -13
  185. package/scripts/lib/reconcile/emitter.mjs +87 -19
  186. package/scripts/lib/reconcile/engine.mjs +281 -13
  187. package/scripts/lib/reconcile/idempotency.mjs +102 -1
  188. package/scripts/lib/reconcile/renderer.mjs +148 -3
  189. package/scripts/lib/reconcile/sanitize.mjs +40 -17
  190. package/scripts/lib/reconcile/writer.mjs +415 -84
  191. package/scripts/lib/rule-loader.mjs +37 -2
  192. package/scripts/lib/rules-sync.mjs +51 -8
  193. package/scripts/lib/scope-gate.mjs +90 -0
  194. package/scripts/lib/session-close-backfill.mjs +369 -28
  195. package/scripts/lib/session-discovery.mjs +13 -3
  196. package/scripts/lib/session-end/phase-skip.mjs +37 -4
  197. package/scripts/lib/session-end/worktree-cleanup.mjs +154 -7
  198. package/scripts/lib/session-id.mjs +30 -14
  199. package/scripts/lib/session-identity/own-session.mjs +159 -0
  200. package/scripts/lib/session-lock.mjs +85 -30
  201. package/scripts/lib/session-schema/normalizer.mjs +70 -3
  202. package/scripts/lib/session-schema/validator.mjs +40 -0
  203. package/scripts/lib/session-start-probes.mjs +608 -0
  204. package/scripts/lib/session-transition.mjs +277 -0
  205. package/scripts/lib/sessions-staleness-banner.mjs +124 -57
  206. package/scripts/lib/spiral-carryover.mjs +90 -9
  207. package/scripts/lib/state-md/frontmatter-mutators.mjs +41 -8
  208. package/scripts/lib/state-md/mission-status.mjs +350 -52
  209. package/scripts/lib/state-md/yaml-parser.mjs +145 -16
  210. package/scripts/lib/state-md.mjs +12 -2
  211. package/scripts/lib/telemetry/sync.mjs +46 -8
  212. package/scripts/lib/validate/check-agents.mjs +66 -0
  213. package/scripts/lib/validate/check-cursor-adapter.mjs +102 -0
  214. package/scripts/lib/validate/check-dead-bridge.mjs +24 -2
  215. package/scripts/lib/validate/check-doc-cli-commands.mjs +16 -32
  216. package/scripts/lib/validate/check-hooks-symmetry.mjs +29 -63
  217. package/scripts/lib/validate/check-playwright-mcp-canary.mjs +13 -22
  218. package/scripts/lib/validate/check-plugin-monitors.mjs +10 -4
  219. package/scripts/lib/validate/check-test-value-bans.mjs +165 -17
  220. package/scripts/lib/validate/check-unwired-features.mjs +340 -32
  221. package/scripts/lib/validate/repo-files.mjs +275 -0
  222. package/scripts/lib/validate-vendored-rules.mjs +229 -7
  223. package/scripts/lib/vault-mirror/process.mjs +99 -43
  224. package/scripts/lib/vault-mirror/telemetry.mjs +210 -0
  225. package/scripts/lib/vault-staleness-banner.mjs +76 -6
  226. package/scripts/lib/vault-status/board-writer.mjs +211 -10
  227. package/scripts/lib/vault-status/narrative-mirror.mjs +188 -8
  228. package/scripts/lib/wave-executor/foreign-dispatch.mjs +832 -0
  229. package/scripts/lib/wave-transcript-tail.mjs +869 -0
  230. package/scripts/materialize-wave-scope.mjs +209 -12
  231. package/scripts/mcp-server.sh +11 -2
  232. package/scripts/parse-config.mjs +65 -0
  233. package/scripts/token-audit.sh +9 -2
  234. package/scripts/validate-plugin.mjs +3 -0
  235. package/scripts/validate-wave-scope.mjs +67 -0
  236. package/scripts/vault-mirror.mjs +203 -34
  237. package/skills/_shared/monitor-patterns.md +31 -5
  238. package/skills/_shared/parallel-aware-auq.md +1 -1
  239. package/skills/_shared/parallel-aware-preamble.md +4 -2
  240. package/skills/_shared/platform-tools.md +11 -5
  241. package/skills/_shared/state-ownership.md +29 -2
  242. package/skills/autopilot/SKILL.md +5 -1
  243. package/skills/bootstrap/SKILL.md +3 -3
  244. package/skills/bootstrap/_shared-template.md +18 -10
  245. package/skills/bootstrap/deep-template.md +10 -6
  246. package/skills/bootstrap/fast-template.md +15 -8
  247. package/skills/bootstrap/standard-template.md +10 -6
  248. package/skills/claude-md-drift-check/checker.mjs +39 -11
  249. package/skills/dispatcher/SKILL.md +1 -1
  250. package/skills/journey-audit/SKILL.md +269 -0
  251. package/skills/peekaboo-driver/SKILL.md +15 -3
  252. package/skills/persona-panel/SKILL.md +1 -1
  253. package/skills/reconcile/SKILL.md +41 -1
  254. package/skills/session-end/SKILL.md +17 -4
  255. package/skills/session-end/metrics-collection.md +7 -4
  256. package/skills/session-end/phase-3-6-tail.md +11 -3
  257. package/skills/session-end/phase-3-7a-recommendations.md +16 -2
  258. package/skills/session-plan/SKILL.md +6 -1
  259. package/skills/session-plan/wave-template.md +1 -0
  260. package/skills/session-start/SKILL.md +30 -16
  261. package/skills/session-start/phase-7-5-mode-selector.md +15 -3
  262. package/skills/session-start/phase-8-5-express-path.md +77 -12
  263. package/skills/vault-sync/validator.mjs +31 -0
  264. package/skills/wave-executor/SKILL.md +4 -2
  265. package/skills/wave-executor/circuit-breaker.md +34 -9
  266. package/skills/wave-executor/wave-loop.md +102 -19
  267. package/templates/_shared/journey-manifest.md +110 -0
  268. package/templates/_shared/rules/parallel-sessions.md +0 -77
@@ -25,87 +25,101 @@ Session Config overrides:
25
25
  - `vcs: github|gitlab` -- force a specific platform
26
26
  - `gitlab-host: <host>` -- override auto-detected GitLab host
27
27
 
28
- ## Dynamic Project Resolution
28
+ ## Canonical Project Identity
29
29
 
30
- Never hardcode project IDs. Resolve at runtime.
30
+ GitLab REST endpoints accept a URL-encoded `namespace/project` path. Select the GitLab host and project path explicitly; never derive a numeric project ID from `glab repo view`, a search query, or `:id` placeholders. Those forms can resolve through the ambient working directory or a stale search result and target another project after a rename, fork, or scaffold.
31
31
 
32
- ### Current Project
32
+ Set the identity once per operation sequence and reuse the encoded identifier without encoding it again:
33
33
 
34
34
  ```bash
35
- # GitLab — numeric project ID
36
- glab repo view --output json | python3 -c "import json,sys; print(json.load(sys.stdin)['id'])"
37
-
38
- # GitHub — owner/name
39
- gh repo view --json nameWithOwner -q '.nameWithOwner'
35
+ GITLAB_HOST="<selected GitLab hostname>"
36
+ GROUP_PATH="<selected group path>"
37
+ PROJECT_NAME="<selected project name>"
38
+ PROJECT_PATH="$GROUP_PATH/$PROJECT_NAME"
39
+ ENCODED_PROJECT_PATH="$(node -e 'process.stdout.write(encodeURIComponent(process.argv[1]))' "$PROJECT_PATH")"
40
40
  ```
41
41
 
42
- ### Cross-Project Queries
42
+ For a link target in another project, use the same path-first shape instead of a numeric ID:
43
43
 
44
44
  ```bash
45
- # GitLab — resolve by name
46
- glab api "projects?search=<project-name>" | python3 -c "import json,sys; [print(p['id'], p['path_with_namespace']) for p in json.load(sys.stdin)]"
45
+ TARGET_PROJECT_PATH="<target namespace>/<target project>"
46
+ TARGET_ENCODED_PROJECT_PATH="$(node -e 'process.stdout.write(encodeURIComponent(process.argv[1]))' "$TARGET_PROJECT_PATH")"
47
+ ```
48
+
49
+ Pass `--hostname "$GITLAB_HOST"` to every `glab api` call. The endpoint itself then pins the project, including directly after creating a repository when the current directory does not yet identify the new project.
50
+
51
+ GitHub continues to use an `owner/repo` slug; `gh repo` takes it positionally and rejects `-R`:
47
52
 
48
- # GitHub — resolve repo details
49
- gh api "repos/<owner>/<name>" --jq '.full_name'
53
+ ```bash
54
+ gh repo view --json nameWithOwner -q '.nameWithOwner'
50
55
  ```
51
56
 
52
57
  ---
53
58
 
54
59
  ## Common CLI Commands
55
60
 
61
+ **Directive:** every repo-scoped `glab` invocation names the project explicitly via `-R` (or, for `glab api`, pins the host with `--hostname` and encodes the project path into the endpoint). Without `-R` / the encoded endpoint the target is whatever the ambient cwd remote happens to be.
62
+
63
+ `glab -R` accepts `<OWNER>/<REPO>` or a nested `<GROUP>/<SUBGROUP>/.../<REPO>` — both resolve against the DEFAULT configured GitLab host (`glab config get host`), never a bare `<host>/<group>/<project>` slash-path: `glab issue list --help` documents only `OWNER/REPO`, `GROUP/NAMESPACE/REPO`, or "full URL or Git URL" for `-R`/`--repo`. To target a non-default host, pass the full remote URL (`https://<host>/<group>/<project>` or `git@<host>:<group>/<project>.git`) as `-R`'s value instead — `glab` has no bare host-prefixed short form. `gh -R`/`--repo` is NOT symmetric here: it genuinely documents `[HOST/]OWNER/REPO` (`gh issue list --help`), so a 3-segment host-prefixed spec is valid for `gh` but not for `glab`.
64
+
56
65
  ### GitLab (glab)
57
66
 
58
67
  ```bash
59
- # Issues
60
- glab issue list --per-page 50 # All open issues
61
- glab issue list --label "status:ready" --per-page 10 # Filtered by label
62
- glab issue list --label "priority:high" --per-page 10 # High priority
63
- glab issue list --closed --per-page 10 # Recently closed
64
- glab issue view <IID> # View issue details
65
- glab issue view <IID> --comments # With comments
66
- glab issue create --title "title" --label "priority:high,status:ready"
67
- glab issue update <IID> --label "status:in-progress"
68
- glab issue close <IID>
69
- glab issue note <IID> -m "Comment text" # Add comment
68
+ # Non-default GitLab host: pass a full URL to -R (glab has no bare HOST/GROUP/PROJECT form)
69
+ glab issue list -R https://<host>/<group>/<project> --per-page 50
70
+
71
+ # Issues (default configured host glab config get host)
72
+ glab issue list -R <OWNER>/<REPO> --per-page 50 # All open issues
73
+ glab issue list -R <OWNER>/<REPO> --label "status:ready" --per-page 10 # Ready to work on
74
+ glab issue list -R <OWNER>/<REPO> --label "priority::high" --per-page 10 # High priority
75
+ glab issue list -R <OWNER>/<REPO> --closed --per-page 10 # Recently closed
76
+ glab issue view -R <OWNER>/<REPO> <IID> # View issue details
77
+ glab issue view -R <OWNER>/<REPO> <IID> --comments # With comments
78
+ glab issue create -R <OWNER>/<REPO> --title "title" --label "priority::high,status:ready"
79
+ glab issue update -R <OWNER>/<REPO> <IID> --label "status:in-progress"
80
+ glab issue close -R <OWNER>/<REPO> <IID>
81
+ glab issue note -R <OWNER>/<REPO> <IID> -m "Comment text" # Add comment
70
82
 
71
83
  # MRs
72
- glab mr list # Open MRs
73
- glab mr create --fill --draft # Create draft MR
74
- glab mr merge <MR_IID> # Merge MR
84
+ glab mr list -R <OWNER>/<REPO> # Open MRs
85
+ glab mr create -R <OWNER>/<REPO> --fill --draft # Create draft MR
86
+ glab mr merge -R <OWNER>/<REPO> <MR_IID> # Merge MR
75
87
 
76
88
  # Pipelines
77
- glab pipeline list --per-page 5 # Recent pipelines
78
- glab pipeline status <ID> # Pipeline details
89
+ glab pipeline list -R <OWNER>/<REPO> --per-page 5 # Recent pipelines
90
+ glab pipeline status -R <OWNER>/<REPO> <ID> # Pipeline details
79
91
 
80
- # API (reads host from git remote automatically)
81
- PROJECT_ID=$(glab repo view --output json | python3 -c "import json,sys; print(json.load(sys.stdin)['id'])")
82
- glab api "projects/$PROJECT_ID/issues?state=opened&per_page=50"
83
- glab api "projects/$PROJECT_ID/milestones?state=active"
92
+ # API (no --repo exists here — the encoded endpoint and explicit host identify the target)
93
+ glab api --hostname "$GITLAB_HOST" "projects/${ENCODED_PROJECT_PATH}/issues?state=opened&per_page=50"
94
+ glab api --hostname "$GITLAB_HOST" "projects/${ENCODED_PROJECT_PATH}/milestones?state=active"
84
95
  ```
85
96
 
86
97
  ### GitHub (gh)
87
98
 
88
99
  ```bash
89
- # Issues
90
- gh issue list --limit 50 # All open issues
91
- gh issue list --label "status:ready" --limit 10 # Filtered by label
92
- gh issue list --label "priority:high" --limit 10 # High priority
93
- gh issue list --state closed --limit 10 # Recently closed
94
- gh issue view <NUMBER> # View issue details
95
- gh issue view <NUMBER> --comments # With comments
96
- gh issue create --title "title" --label "priority:high,status:ready"
97
- gh issue edit <NUMBER> --add-label "status:in-progress"
98
- gh issue close <NUMBER>
99
- gh issue comment <NUMBER> --body "Comment text" # Add comment
100
+ # Non-default host (GHE): gh -R genuinely accepts [HOST/]OWNER/REPO
101
+ gh issue list -R <HOST>/<OWNER>/<REPO> --limit 50
102
+
103
+ # Issues (default configured host)
104
+ gh issue list -R <OWNER>/<REPO> --limit 50 # All open issues
105
+ gh issue list -R <OWNER>/<REPO> --label "status:ready" --limit 10 # Ready to work on
106
+ gh issue list -R <OWNER>/<REPO> --label "priority::high" --limit 10 # High priority
107
+ gh issue list -R <OWNER>/<REPO> --state closed --limit 10 # Recently closed
108
+ gh issue view -R <OWNER>/<REPO> <NUMBER> # View issue details
109
+ gh issue view -R <OWNER>/<REPO> <NUMBER> --comments # With comments
110
+ gh issue create -R <OWNER>/<REPO> --title "title" --label "priority::high,status:ready"
111
+ gh issue edit -R <OWNER>/<REPO> <NUMBER> --add-label "status:in-progress"
112
+ gh issue close -R <OWNER>/<REPO> <NUMBER>
113
+ gh issue comment -R <OWNER>/<REPO> <NUMBER> --body "Comment text" # Add comment
100
114
 
101
115
  # PRs
102
- gh pr list --state open # Open PRs
103
- gh pr create --fill --draft # Create draft PR
104
- gh pr merge <NUMBER> # Merge PR
116
+ gh pr list -R <OWNER>/<REPO> --state open # Open PRs
117
+ gh pr create -R <OWNER>/<REPO> --fill --draft # Create draft PR
118
+ gh pr merge -R <OWNER>/<REPO> <NUMBER> # Merge PR
105
119
 
106
120
  # Workflows (CI)
107
- gh run list --limit 5 # Recent workflow runs
108
- gh run view <RUN_ID> # Run details
121
+ gh run list -R <OWNER>/<REPO> --limit 5 # Recent workflow runs
122
+ gh run view -R <OWNER>/<REPO> <RUN_ID> # Run details
109
123
 
110
124
  # API
111
125
  gh api "repos/{owner}/{repo}/issues?state=open&per_page=50"
@@ -120,20 +134,22 @@ These are known differences from `gh` that cause frequent mistakes:
120
134
 
121
135
  | Quirk | Correct | Wrong |
122
136
  |-------|---------|-------|
123
- | Listing closed issues | `glab issue list --closed` | `glab issue list --state closed` |
137
+ | Listing closed issues | `glab issue list -R <OWNER>/<REPO> --closed` | `glab issue list -R <OWNER>/<REPO> --state closed` |
124
138
  | Confirmations | glab has NO `--yes` flag | Do not pass `--yes` |
125
- | Comprehensive listing | `glab issue list --per-page 100` | Default per-page is small |
139
+ | Comprehensive listing | `glab issue list -R <OWNER>/<REPO> --per-page 100` | Default per-page is small |
126
140
  | Pagination flag | `--per-page N` (glab) | `--limit N` (that is gh syntax) |
127
141
 
128
142
  ---
129
143
 
130
144
  ## Label Taxonomy
131
145
 
146
+ **`priority::<level>` is canonical** (scoped double colon). `area:` / `type:` / `status:` / `from:` stay single-colon.
147
+
132
148
  ### Priority Labels
133
- - `priority:critical` -- blocking production or users
134
- - `priority:high` -- important, schedule this sprint
135
- - `priority:medium` -- plan for next sprint
136
- - `priority:low` -- backlog, nice-to-have
149
+ - `priority::critical` -- blocking production or users
150
+ - `priority::high` -- important, schedule this sprint
151
+ - `priority::medium` -- plan for next sprint
152
+ - `priority::low` -- backlog, nice-to-have
137
153
 
138
154
  ### Status Labels
139
155
  - `status:ready` -- defined, ready to pick up
@@ -212,7 +228,7 @@ Relates to #ORIGINAL_IID
212
228
  ## [Discovery] <finding title>
213
229
 
214
230
  **Probe:** <probe_name>
215
- **Severity:** <priority:critical|high|medium|low>
231
+ **Severity:** <priority::critical|high|medium|low>
216
232
  **Category:** <code|infra|ui|arch|session|audit|vault|feature>
217
233
 
218
234
  ### Finding
@@ -237,7 +253,7 @@ Relates to #ORIGINAL_IID
237
253
  - [ ] Quality gates pass after fix
238
254
  ```
239
255
 
240
- Labels for discovery findings: `type:discovery`, `priority:<level>`, `area:<inferred>`, `status:ready`
256
+ Labels for discovery findings: `type:discovery`, `priority::<level>`, `area:<inferred>`, `status:ready`
241
257
 
242
258
 
243
259
 
@@ -72,10 +72,10 @@ Detect the VCS platform per the VCS Auto-Detection section of the gitlab-ops rul
72
72
 
73
73
  ```bash
74
74
  # GitLab
75
- glab pipeline list --per-page 3
75
+ glab pipeline list -R <OWNER>/<REPO> --per-page 3
76
76
 
77
77
  # GitHub
78
- gh run list --limit 3
78
+ gh run list -R <OWNER>/<REPO> --limit 3
79
79
  ```
80
80
 
81
81
  Report each run with: status (success/failed/pending), branch, and timestamp.
@@ -94,17 +94,17 @@ Skip this section.
94
94
 
95
95
  For each repo in `cross-repos`:
96
96
 
97
- 1. Resolve project ID or owner/repo slug (see gitlab-ops Dynamic Project Resolution)
98
- 2. Query open issues with `priority:critical` or `priority:high` labels (limit 5 per repo)
97
+ 1. Select host + encoded project path, or the GitHub `owner/repo` slug (see gitlab-ops Canonical Project Identity)
98
+ 2. Query open issues with `priority::critical` or `priority::high` labels (limit 5 per repo)
99
99
  3. Collect and report results across all configured repos
100
100
 
101
101
  ```bash
102
102
  # GitLab
103
- glab api "projects/<PROJECT_ID>/issues?labels=priority:critical,priority:high&state=opened&per_page=5"
103
+ glab api --hostname "$GITLAB_HOST" "projects/${ENCODED_PROJECT_PATH}/issues?labels=priority::critical,priority::high&state=opened&per_page=5"
104
104
 
105
105
  # GitHub
106
- gh issue list --repo <owner/repo> --label "priority:critical" --limit 5
107
- gh issue list --repo <owner/repo> --label "priority:high" --limit 5
106
+ gh issue list -R <OWNER>/<REPO> --label "priority::critical" --limit 5
107
+ gh issue list -R <OWNER>/<REPO> --label "priority::high" --limit 5
108
108
  ```
109
109
 
110
110
  ---
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: architecture
3
+ description: Use when the user asks to improve architecture, find refactoring opportunities, surface deepening opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable. Surfaces shallow modules and hypothetical seams using a precise vocabulary (Module / Interface / Implementation / Depth / Seam / Adapter / Leverage / Locality from LANGUAGE.md).
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # architecture
8
+
9
+ Canonical skill: `skills/architecture/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/architecture/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the architecture skill" as: Read `skills/architecture/SKILL.md`.
@@ -0,0 +1,12 @@
1
+ ---
2
+ name: autopilot
3
+ description: "Use this skill when running an autonomous session-orchestration loop. Chains session-start → session-plan → wave-executor → session-end for N iterations with all 10 kill-switches (SPIRAL, FAILED wave, carryover > 50%, max-hours, max-sessions, resource-overload, token-budget, stall-timeout, sub-threshold confidence, user-abort). Reads Mode-Selector output (Phase B) to decide auto-execute vs. fallback. Writes one autopilot.jsonl record per loop run. Phase C scaffold (issue #277); implementation lives in scripts/lib/autopilot.mjs (Phase C-1 follow-up)."
4
+ ---
5
+
6
+ # autopilot
7
+
8
+ Canonical skill: `skills/autopilot/SKILL.md`
9
+
10
+ Read that file and follow it exactly. Resolve relative links against `skills/autopilot/`, not this wrapper.
11
+
12
+ Cursor has no Skill tool. Treat "invoke the autopilot skill" as: Read `skills/autopilot/SKILL.md`.
@@ -0,0 +1,12 @@
1
+ ---
2
+ name: bootstrap
3
+ description: "Use this skill when scaffolding the minimum repository structure required by session-orchestrator. Invoked automatically by the Bootstrap Gate when CLAUDE.md, Session Config, or bootstrap.lock is missing. Also available as /bootstrap for manual invocation. Three intensity tiers: fast (demos/spikes), standard (MVPs), deep (production/team)."
4
+ ---
5
+
6
+ # bootstrap
7
+
8
+ Canonical skill: `skills/bootstrap/SKILL.md`
9
+
10
+ Read that file and follow it exactly. Resolve relative links against `skills/bootstrap/`, not this wrapper.
11
+
12
+ Cursor has no Skill tool. Treat "invoke the bootstrap skill" as: Read `skills/bootstrap/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: brainstorm
3
+ description: Use when you have a feature idea but the scope or UX is still ambiguous — runs a lightweight Socratic design dialogue (3-5 AUQ rounds) and writes a spec markdown file. Use BEFORE /plan feature when product intent needs validation; skip to /plan feature when scope is already clear. HARD-GATE prevents any code work until the design is user-approved.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # brainstorm
8
+
9
+ Canonical skill: `skills/brainstorm/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/brainstorm/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the brainstorm skill" as: Read `skills/brainstorm/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: claude-md-drift-check
3
+ description: "Use when detecting drift between CLAUDE.md (or AGENTS.md, the Codex CLI alias) / _meta narrative and live repository state. Ten checks: absolute-path resolution, 01-projects/ count claims, issue-reference freshness, session-file existence, command-count sync, session-config-parity (mandatory template keys = error, opt-in gaps = warning), vault-dir-parity (CLAUDE.md vs AGENTS.md), generated-rule-staleness (WARN-only), rule-scoping (paths:/globs: frontmatter defects, dangling rule citations, zero-match globs), and docs-parity (docs/components.md count-claims vs on-disk counts, template-vs-reference config-key parity, stale .claude/metrics/ paths). Full per-check spec in the body table. Invoked as an opt-in session-end phase; mirrors vault-sync's lean JSON+exit-code contract."
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # claude-md-drift-check
8
+
9
+ Canonical skill: `skills/claude-md-drift-check/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/claude-md-drift-check/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the claude-md-drift-check skill" as: Read `skills/claude-md-drift-check/SKILL.md`.
@@ -0,0 +1,12 @@
1
+ ---
2
+ name: contract-version-bump
3
+ description: "Use this skill when changing a machine-readable contract — a JSON Schema, an API spec, or a config schema — and bumping its version: tightening a constraint, adding/removing/renaming a field, introducing a breaking change, raising an API version, or writing the changelog entry for a schema change. Trigger on \"change the schema\", \"tighten this constraint\", \"bump the schema version\", \"breaking change to the API\", \"new API version\", \"changelog entry for a schema change\". Runs six phases — classify against the contract's OWN versioning rule (not generic semver instinct), find every version literal and vendored copy, check consumer compatibility for new keywords, apply consistently, write the changelog entry, and report downstream drift — codifying three non-obvious traps hit in a real case (GitLab issue #17, `aiat-enablement` repo, 2026-07-25)."
4
+ ---
5
+
6
+ # contract-version-bump
7
+
8
+ Canonical skill: `skills/contract-version-bump/SKILL.md`
9
+
10
+ Read that file and follow it exactly. Resolve relative links against `skills/contract-version-bump/`, not this wrapper.
11
+
12
+ Cursor has no Skill tool. Treat "invoke the contract-version-bump skill" as: Read `skills/contract-version-bump/SKILL.md`.
@@ -0,0 +1,12 @@
1
+ ---
2
+ name: convergence-monitoring
3
+ description: "Monitor iterative improvement loops for convergence. Three signals — shrinking diff, pass-rate plateau, velocity — drive a Stop/Continue/Investigate decision at each inter-wave checkpoint. Distinct from /evolve (retrospective) and session-reviewer (wave output review): convergence-monitoring answers \"are we making progress?\" not \"was the last wave correct?\". Primary consumer: /autoresearch loops and wave-executor inter-wave checkpoints."
4
+ ---
5
+
6
+ # convergence-monitoring
7
+
8
+ Canonical skill: `skills/convergence-monitoring/SKILL.md`
9
+
10
+ Read that file and follow it exactly. Resolve relative links against `skills/convergence-monitoring/`, not this wrapper.
11
+
12
+ Cursor has no Skill tool. Treat "invoke the convergence-monitoring skill" as: Read `skills/convergence-monitoring/SKILL.md`.
@@ -0,0 +1,12 @@
1
+ ---
2
+ name: daily
3
+ description: "Use this skill when creating today's daily note in the Meta-Vault (03-daily/YYYY-MM-DD.md) with valid vaultFrontmatterSchema-compliant YAML frontmatter. Idempotent: re-running on the same day opens the existing note instead of overwriting. Use when starting a work day, capturing scratch notes, or bootstrapping the inbox flow."
4
+ ---
5
+
6
+ # daily
7
+
8
+ Canonical skill: `skills/daily/SKILL.md`
9
+
10
+ Read that file and follow it exactly. Resolve relative links against `skills/daily/`, not this wrapper.
11
+
12
+ Cursor has no Skill tool. Treat "invoke the daily skill" as: Read `skills/daily/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: debug
3
+ description: "Use when encountering any bug, test failure, build break, or unexpected behavior — runs a 4-phase systematic debugging process before proposing any fix. Iron Law: NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST. Produces a `.orchestrator/debug/` artifact the fixer agent must reference."
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # debug
8
+
9
+ Canonical skill: `skills/debug/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/debug/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the debug skill" as: Read `skills/debug/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: discovery
3
+ description: "Use this skill when running systematic quality discovery and issue detection. Runs modular probes adapted to the project's tech stack, presents findings interactively for user triage, and creates VCS issues for confirmed problems. Invoked standalone via /discovery or embedded in session-end."
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # discovery
8
+
9
+ Canonical skill: `skills/discovery/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/discovery/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the discovery skill" as: Read `skills/discovery/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: dispatcher
3
+ description: "Use when you want the orchestrator to pick the next repo to work on across your whole portfolio — it enumerates candidate repos below the confinement root, resolves free/busy from each repo's session.lock lease, ranks the FREE ones by backlog priority × staleness × readiness, recommends the single most worthwhile one via AskUserQuestion, atomically claims it, and routes you to the chosen entry command. Triggers: \"what should I work on next\", \"dispatch me to a repo\", \"pick the next project\", \"run /dispatcher\". <example>Context: operator finished a session and wants the next-best repo across the portfolio. user: \"/dispatcher\" assistant: \"Ranked 18 free repos — top recommendation: Pencil-Designs (score 4.50, 90d stale). Confirm via the picker, I'll claim its lease atomically, then route you to /session deep.\"</example>"
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # dispatcher
8
+
9
+ Canonical skill: `skills/dispatcher/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/dispatcher/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the dispatcher skill" as: Read `skills/dispatcher/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: docs-orchestrator
3
+ description: "Use this skill when orchestrating documentation generation and updates within a session. Maps session scope to audience-specific docs tasks (User / Dev / Vault), dispatches the docs-writer agent with source-grounded prompts, and reports coverage gaps to session-end. Gated on `docs-orchestrator.enabled: true` in Session Config. Zero overhead when disabled."
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # docs-orchestrator
8
+
9
+ Canonical skill: `skills/docs-orchestrator/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/docs-orchestrator/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the docs-orchestrator skill" as: Read `skills/docs-orchestrator/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: domain-model
3
+ description: Use when the user wants to stress-test a plan against the existing domain model and documented decisions. Grilling session that interviews the user one question at a time, sharpens fuzzy terminology inline, updates CONTEXT.md lazily, and offers ADRs sparingly under a 3-criteria gate. Reads docs/adr/ and CONTEXT.md if present.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # domain-model
8
+
9
+ Canonical skill: `skills/domain-model/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/domain-model/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the domain-model skill" as: Read `skills/domain-model/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: ecosystem-health
3
+ description: Monitor health across configured service endpoints, CI pipelines, and critical issues. Automatically invoked during session-start when ecosystem-health is enabled in Session Config.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # ecosystem-health
8
+
9
+ Canonical skill: `skills/ecosystem-health/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/ecosystem-health/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the ecosystem-health skill" as: Read `skills/ecosystem-health/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: eli5
3
+ description: "Explain a topic like I'm a 5 year old — restate my last output, or a named topic, in plain words without dropping a single fact. Use when the user types /eli5 [topic], or says an answer was too technical, too long, or unclear about what he now has to do."
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # eli5
8
+
9
+ Canonical skill: `skills/eli5/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/eli5/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the eli5 skill" as: Read `skills/eli5/SKILL.md`.
@@ -0,0 +1,12 @@
1
+ ---
2
+ name: eval
3
+ description: Use this skill to run an honest session-process evaluation (Standard v1, aiat-llm-eval/1.0) — score the last completed orchestrator session against the pre-registered rubric-v1 dimensions, run /eval, evaluate this session, produce an eval report, or re-verify a stored eval run for reproducibility. Deterministic-first with an optional advisory LLM judge; never produces a global score.
4
+ ---
5
+
6
+ # eval
7
+
8
+ Canonical skill: `skills/eval/SKILL.md`
9
+
10
+ Read that file and follow it exactly. Resolve relative links against `skills/eval/`, not this wrapper.
11
+
12
+ Cursor has no Skill tool. Treat "invoke the eval skill" as: Read `skills/eval/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: evolve
3
+ description: "Use this skill when extracting session patterns into reusable learnings. Three modes: analyze (extract from session history), review (edit/manage existing learnings), list (display active learnings). Manages .orchestrator/metrics/learnings.jsonl."
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # evolve
8
+
9
+ Canonical skill: `skills/evolve/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/evolve/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the evolve skill" as: Read `skills/evolve/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: frontmatter-guard
3
+ description: "Injects the canonical vault frontmatter schema snippet into agent prompts before any vault-write task, preventing malformed YAML frontmatter in Obsidian notes. <example>Context: wave-executor is about to dispatch a vault-mirror agent that writes learning notes under ~/Projects/vault/40-learnings/. user: \"dispatch vault-write agent\" assistant: \"Injecting frontmatter-guard snippet into agent prompt (vault scope detected). Required fields: id, type, created, updated. Enum type: note|daily|project|person|reference|idea|learning|session.\" <commentary>The wave-executor pre-dispatch hook calls detectVaultTaskScope() — the fileScope contains /Projects/vault/40-learnings/ so the guard triggers and the snippet is prepended to the agent system prompt.</commentary></example>"
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # frontmatter-guard
8
+
9
+ Canonical skill: `skills/frontmatter-guard/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/frontmatter-guard/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the frontmatter-guard skill" as: Read `skills/frontmatter-guard/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: gitlab-ops
3
+ description: "Use this skill when performing VCS operations on GitLab or GitHub repositories — creating, updating, or closing issues and MRs, applying label taxonomy, running `glab`/`gh` CLI commands, or resolving project paths dynamically. Acts as the single source of truth for CLI command syntax and label conventions; consuming skills reference this rather than duplicating logic. Triggers: \"create a GitLab issue\", \"list open MRs\", \"apply priority label\", \"how do I resolve the project ID\", \"what's the carryover issue template\". <example>Context: session-end needs to file a carryover issue for an incomplete task. user: \"/close\" assistant: \"Creating carryover issue via glab with the Carryover Template from gitlab-ops — labels: carryover, priority::high.\"</example>"
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # gitlab-ops
8
+
9
+ Canonical skill: `skills/gitlab-ops/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/gitlab-ops/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the gitlab-ops skill" as: Read `skills/gitlab-ops/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: gitlab-portfolio
3
+ description: "Use when you need a single-pane cross-repo health view across all vault-registered GitLab and GitHub projects. Discovers repos from `_overview.md` frontmatter in `<vault>/01-projects/*/`, aggregates open issues, MRs, critical labels, and stale signals via parallel `glab`/`gh` calls, then writes an idempotent `_PORTFOLIO.md` dashboard. Runs automatically at session-start Phase 2 when `gitlab-portfolio.enabled=true`. Triggers: \"show portfolio status\", \"refresh the portfolio dashboard\", \"which repos have critical issues\", \"run /portfolio\". <example>Context: session-start, gitlab-portfolio.enabled=true, vault has 5 registered repos. user: \"/session deep\" assistant: \"Portfolio: 3 critical issues across 2 repos — run /portfolio for details. Dashboard written to vault/01-projects/_PORTFOLIO.md.\"</example>"
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # gitlab-portfolio
8
+
9
+ Canonical skill: `skills/gitlab-portfolio/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/gitlab-portfolio/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the gitlab-portfolio skill" as: Read `skills/gitlab-portfolio/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: grill
3
+ description: "Use when the user wants a plan, design, or PRD stress-tested before any build — relentlessly interrogates one decision at a time, grounds every question in the codebase, hunts contradictions against the domain language and the code, and challenges the load-bearing assumptions. Triggered by \"grill me\", \"stress-test this plan\", \"poke holes in my design\". Composable — run standalone or as an adversarial pass before /plan feature."
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # grill
8
+
9
+ Canonical skill: `skills/grill/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/grill/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the grill skill" as: Read `skills/grill/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: hook-development
3
+ description: "Use when creating, modifying, or debugging Claude Code hooks — PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification. Covers the plugin `hooks/hooks.json` wrapper format vs. the user `settings.json` direct format, matchers, security patterns, `$CLAUDE_PLUGIN_ROOT` portability, lifecycle limitations, and debugging. Trigger on \"add a hook\", \"validate tool use\", \"block dangerous commands\", \"enforce completion\", \"hook-based automation\"."
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # hook-development
8
+
9
+ Canonical skill: `skills/hook-development/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/hook-development/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the hook-development skill" as: Read `skills/hook-development/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: journey-audit
3
+ description: "Use this skill when the user wants the PRODUCT audited from the outside in — what the website promises vs what the code does vs what a real user experiences vs what actually arrives by mail vs what the data says is used. Runs a 7-role read-only wave (R5 writes only under an explicit SAFETY block) against a per-repo `.orchestrator/journey-manifest.md` and writes a dossier to docs/audits/. Distinct from /discovery, which checks code quality inside-out — this checks product truth outside-in; they complement, neither replaces the other. Triggers \"journey audit\", \"Nutzersicht-Audit\", \"audit the product from the user's side\", \"/journey-audit\"."
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # journey-audit
8
+
9
+ Canonical skill: `skills/journey-audit/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/journey-audit/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the journey-audit skill" as: Read `skills/journey-audit/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: mcp-builder
3
+ description: "Use when creating a new MCP (Model Context Protocol) server, extending an existing one, or debugging tool discoverability/performance. Guides through research → implementation → test → eval phases with TypeScript-first guidance matching our stack. Trigger on phrases like \"build an MCP server\", \"expose X as an MCP tool\", \"write MCP tools for Y\", \"integrate Z via MCP\"."
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # mcp-builder
8
+
9
+ Canonical skill: `skills/mcp-builder/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/mcp-builder/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the mcp-builder skill" as: Read `skills/mcp-builder/SKILL.md`.
@@ -0,0 +1,12 @@
1
+ ---
2
+ name: memory-cleanup
3
+ description: "Use this skill when performing manual memory consolidation (Dream-equivalent). Reviews, consolidates, and prunes memory files under ~/.claude/projects/*/memory/. Run after major refactors, every 5+ sessions, or when memory quality degrades (broken links, stale references, contradictions, MEMORY.md > 200 lines). Invoke with /memory-cleanup."
4
+ ---
5
+
6
+ # memory-cleanup
7
+
8
+ Canonical skill: `skills/memory-cleanup/SKILL.md`
9
+
10
+ Read that file and follow it exactly. Resolve relative links against `skills/memory-cleanup/`, not this wrapper.
11
+
12
+ Cursor has no Skill tool. Treat "invoke the memory-cleanup skill" as: Read `skills/memory-cleanup/SKILL.md`.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: mode-selector
3
+ description: "Use this skill when performing deterministic mode selection for session-start. Reads Phase A STATE.md recommendations + (future) learnings, sessions, backlog, bootstrap signals and returns {mode, rationale, confidence, alternatives}. Pure-function contract — no side effects, no STATE.md writes. Phase B scaffold (issue #276); full heuristic is follow-up sub-issues."
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # mode-selector
8
+
9
+ Canonical skill: `skills/mode-selector/SKILL.md`
10
+
11
+ Read that file and follow it exactly. Resolve relative links against `skills/mode-selector/`, not this wrapper.
12
+
13
+ Cursor has no Skill tool. Treat "invoke the mode-selector skill" as: Read `skills/mode-selector/SKILL.md`.