@jaggerxtrm/specialists 3.14.1 → 3.15.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 (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +24 -3
  3. package/config/catalog/gitnexus.json +12 -0
  4. package/config/catalog/index.json +59 -0
  5. package/config/catalog/native.json +12 -0
  6. package/config/catalog/serena.json +12 -0
  7. package/config/mandatory-rules/README.md +7 -6
  8. package/config/mandatory-rules/code-quality-defaults.md +5 -0
  9. package/config/mandatory-rules/diagnose-loop.md +13 -0
  10. package/config/mandatory-rules/gitnexus-required.md +1 -0
  11. package/config/mandatory-rules/research-tool-routing.md +12 -0
  12. package/config/mandatory-rules/security-review-defaults.md +9 -0
  13. package/config/mandatory-rules/serena-cheatsheet.md +16 -4
  14. package/config/presets.json +1 -1
  15. package/config/skills/memory-audit-transaction/SKILL.md +196 -0
  16. package/config/skills/memory-audit-transaction/scripts/pre-bulk-export.sh +58 -0
  17. package/config/skills/using-specialists/SKILL.md +13 -12
  18. package/config/skills/using-specialists-auto/SKILL.md +137 -0
  19. package/config/skills/using-specialists-v2/SKILL.md +14 -21
  20. package/config/skills/using-specialists-v3/SKILL.md +399 -27
  21. package/config/specialists/changelog-drafter.specialist.json +3 -2
  22. package/config/specialists/changelog-keeper.specialist.json +1 -1
  23. package/config/specialists/code-sanity.specialist.json +3 -5
  24. package/config/specialists/debugger.specialist.json +4 -8
  25. package/config/specialists/executor.specialist.json +6 -8
  26. package/config/specialists/explorer.specialist.json +7 -8
  27. package/config/specialists/memory-processor.specialist.json +14 -7
  28. package/config/specialists/node-coordinator.specialist.json +2 -2
  29. package/config/specialists/overthinker.specialist.json +7 -10
  30. package/config/specialists/planner.specialist.json +3 -4
  31. package/config/specialists/researcher.specialist.json +15 -19
  32. package/config/specialists/reviewer.specialist.json +4 -8
  33. package/config/specialists/security-auditor.specialist.json +3 -8
  34. package/config/specialists/specialists-creator.specialist.json +4 -2
  35. package/config/specialists/test-runner.specialist.json +10 -10
  36. package/config/specialists/xt-merge.specialist.json +10 -4
  37. package/dist/asset-contract.json +205 -0
  38. package/dist/index.js +1990 -704
  39. package/dist/lib.js +99 -17
  40. package/dist/types/cli/clean.d.ts.map +1 -1
  41. package/dist/types/cli/doctor.d.ts +1 -0
  42. package/dist/types/cli/doctor.d.ts.map +1 -1
  43. package/dist/types/cli/edit.d.ts.map +1 -1
  44. package/dist/types/cli/epic.d.ts +0 -1
  45. package/dist/types/cli/epic.d.ts.map +1 -1
  46. package/dist/types/cli/feed.d.ts.map +1 -1
  47. package/dist/types/cli/finalize.d.ts +2 -0
  48. package/dist/types/cli/finalize.d.ts.map +1 -0
  49. package/dist/types/cli/format-helpers.d.ts.map +1 -1
  50. package/dist/types/cli/init.d.ts.map +1 -1
  51. package/dist/types/cli/list-rules.d.ts.map +1 -1
  52. package/dist/types/cli/merge.d.ts +4 -3
  53. package/dist/types/cli/merge.d.ts.map +1 -1
  54. package/dist/types/cli/ps.d.ts.map +1 -1
  55. package/dist/types/cli/quickstart.d.ts.map +1 -1
  56. package/dist/types/cli/run.d.ts +1 -0
  57. package/dist/types/cli/run.d.ts.map +1 -1
  58. package/dist/types/pi/session.d.ts.map +1 -1
  59. package/dist/types/specialist/epic-lifecycle.d.ts +5 -5
  60. package/dist/types/specialist/epic-lifecycle.d.ts.map +1 -1
  61. package/dist/types/specialist/epic-readiness.d.ts +1 -1
  62. package/dist/types/specialist/epic-readiness.d.ts.map +1 -1
  63. package/dist/types/specialist/jobRegistry.d.ts +5 -0
  64. package/dist/types/specialist/jobRegistry.d.ts.map +1 -1
  65. package/dist/types/specialist/observability-sqlite.d.ts +8 -0
  66. package/dist/types/specialist/observability-sqlite.d.ts.map +1 -1
  67. package/dist/types/specialist/process-health.d.ts +77 -0
  68. package/dist/types/specialist/process-health.d.ts.map +1 -0
  69. package/dist/types/specialist/runner.d.ts.map +1 -1
  70. package/dist/types/specialist/schema.d.ts +162 -0
  71. package/dist/types/specialist/schema.d.ts.map +1 -1
  72. package/dist/types/specialist/script-runner.d.ts +31 -1
  73. package/dist/types/specialist/script-runner.d.ts.map +1 -1
  74. package/dist/types/specialist/supervisor.d.ts +8 -0
  75. package/dist/types/specialist/supervisor.d.ts.map +1 -1
  76. package/dist/types/specialist/timeline-query.d.ts +1 -1
  77. package/dist/types/specialist/timeline-query.d.ts.map +1 -1
  78. package/dist/types/specialist/worktree.d.ts.map +1 -1
  79. package/package.json +32 -7
  80. package/config/benchmarks/executor-benchmark-matrix.json +0 -25
  81. package/config/mandatory-rules/debugger-trace-first.md +0 -5
  82. package/config/skills/using-specialists/evals/evals.json +0 -68
  83. package/config/skills/using-specialists-v3/evals/evals.json +0 -89
@@ -31,6 +31,8 @@
31
31
  "mandatory_rules": {
32
32
  "template_sets": [
33
33
  "researcher-source-discipline",
34
+ "research-tool-routing",
35
+ "security-review-defaults",
34
36
  "serena-cheatsheet",
35
37
  "per-turn-handoff-schema",
36
38
  "bead-id-verbatim"
@@ -79,14 +81,7 @@
79
81
  }
80
82
  },
81
83
  "skills": {
82
- "paths": [
83
- ".xtrm/skills/optional/security-ops/security-auditor/SKILL.md",
84
- ".xtrm/skills/optional/xt-optional/senior-security/SKILL.md",
85
- ".xtrm/skills/active/find-docs/SKILL.md",
86
- ".xtrm/skills/active/deepwiki/SKILL.md",
87
- ".xtrm/skills/active/github-search/SKILL.md",
88
- ".xtrm/skills/active/last30days/SKILL.md"
89
- ],
84
+ "paths": [],
90
85
  "scripts": []
91
86
  },
92
87
  "validation": {
@@ -16,7 +16,7 @@
16
16
  },
17
17
  "execution": {
18
18
  "mode": "tool",
19
- "model": "anthropic/claude-sonnet-4-6",
19
+ "model": "openai-codex/gpt-5.5",
20
20
  "fallback_model": "google-gemini-cli/gemini-3.1-pro-preview",
21
21
  "timeout_ms": 0,
22
22
  "stall_timeout_ms": 120000,
@@ -67,7 +67,9 @@
67
67
  "beads_write_notes": true,
68
68
  "mandatory_rules": {
69
69
  "template_sets": [
70
- "serena-cheatsheet"
70
+ "serena-cheatsheet",
71
+ "per-turn-handoff-schema",
72
+ "bead-id-verbatim"
71
73
  ]
72
74
  }
73
75
  }
@@ -2,20 +2,19 @@
2
2
  "specialist": {
3
3
  "metadata": {
4
4
  "name": "test-runner",
5
- "version": "1.0.0",
6
- "description": "LOW-permission test execution and failure interpretation. Use when tests/checks must be run, classified, or assigned to an owner. Does not implement fixes; hand findings to debugger/executor.",
5
+ "version": "2.0.0",
6
+ "description": "LOW-permission test execution and failure interpretation. Detects project language from manifest (package.json / pyproject.toml / Cargo.toml / go.mod) and dispatches the appropriate test runner. Use when tests/checks must be run, classified, or assigned to an owner. Does not implement fixes; hand findings to debugger/executor.",
7
7
  "category": "testing",
8
8
  "tags": [
9
9
  "tests",
10
10
  "debugging",
11
- "vitest",
12
- "jest"
11
+ "polyglot"
13
12
  ],
14
- "updated": "2026-05-04"
13
+ "updated": "2026-05-08"
15
14
  },
16
15
  "execution": {
17
16
  "mode": "tool",
18
- "model": "anthropic/claude-haiku-4-5",
17
+ "model": "openai-codex/gpt-5.4-mini",
19
18
  "fallback_model": "google-gemini-cli/gemini-3-flash-preview",
20
19
  "timeout_ms": 0,
21
20
  "stall_timeout_ms": 120000,
@@ -29,19 +28,20 @@
29
28
  "template_sets": [
30
29
  "test-runner-execution-scope",
31
30
  "serena-cheatsheet",
32
- "per-turn-handoff-schema"
31
+ "per-turn-handoff-schema",
32
+ "bead-id-verbatim"
33
33
  ]
34
34
  },
35
35
  "prompt": {
36
- "system": "You are a test runner specialist. You run test suites, interpret failures,\nand provide actionable fix suggestions.\n\nProcess:\n1. Run the test command provided (or default: bun --bun vitest run)\n2. Parse failures carefully \u2014 distinguish between assertion errors, type errors, and runtime errors\n3. For each failure, identify root cause (wrong expectation, missing mock, broken import, etc.)\n4. Suggest concrete code fixes for each failure\n5. Do NOT blindly increase timeouts \u2014 find real root causes\n\nOutput format:\n- Summary: X passed, Y failed\n- For each failure: test name \u2192 root cause \u2192 suggested fix\n- Overall health assessment\n",
37
- "task_template": "Run the following test scope and interpret results:\n\n$prompt\n\nIf no specific test file is mentioned, run: bun --bun vitest run\nIf a specific file is mentioned, run: bun --bun vitest run <file>\n\nReport all failures with root cause analysis and fix suggestions.\n"
36
+ "system": "You are a test runner specialist. You run test suites, interpret failures, and provide actionable fix suggestions.\n\nProject-language awareness:\n- Detect project language from manifest before invoking commands. Pre-script already chooses canonical runner per manifest; treat its output as primary evidence.\n- Manifest → canonical runner:\n - `package.json` → `bun --bun vitest run`\n - `pyproject.toml` / `pytest.ini` / `setup.cfg` → `python3 -m pytest`\n - `Cargo.toml` → `cargo test`\n - `go.mod` → `go test ./...`\n - none of above → no-op pre-script; ask orchestrator for explicit command.\n- If orchestrator pins specific command in `$prompt`, use it verbatim instead.\n\nProcess:\n1. Read pre-script output (manifest detection + first test run, or no-op notice).\n2. If specific test scope named, narrow run with project-appropriate runner (`pytest path/to/test_x.py`, `cargo test name`, `go test ./pkg/...`, `bun --bun vitest run path/to/file`).\n3. Parse failures carefully distinguish assertion errors, type errors, runtime errors, import/collection errors, and infrastructure failures (db unavailable, missing fixtures, network).\n4. For each failure, identify root cause (wrong expectation, missing mock, broken import, env drift) and classify as in-scope, pre-existing, or infrastructure.\n5. Suggest concrete code fixes for each in-scope failure.\n6. Do NOT blindly increase timeouts find real root causes.\n\nOutput format:\n- Summary: X passed, Y failed, Z skipped\n- Per failure: test name category (in-scope / pre-existing / infrastructure) → root cause suggested fix\n- Overall health assessment\n",
37
+ "task_template": "Run the requested test scope and interpret results.\n\nScope from orchestrator:\n$prompt\n\nPre-script already chose runner from manifest. Use its output as primary evidence and only invoke additional commands when narrowing to a specific test or when manifest was not detected.\n\nProject manifest → canonical runner:\n- package.json → bun --bun vitest run\n- pyproject.toml / pytest.ini / setup.cfg python3 -m pytest\n- Cargo.toml → cargo test\n- go.mod → go test ./...\n- none → ask orchestrator for explicit test command\n\nReport all failures with category (in-scope / pre-existing / infrastructure), root cause, and suggested fix.\n"
38
38
  },
39
39
  "skills": {
40
40
  "scripts": [
41
41
  {
42
42
  "phase": "pre",
43
43
  "inject_output": true,
44
- "run": "bun --bun vitest run --reporter=verbose 2>&1 | tail -100"
44
+ "run": "if [ -f package.json ]; then echo '[test-runner] manifest: package.json — running bun --bun vitest run'; bun --bun vitest run 2>&1 | tail -100; elif [ -f pyproject.toml ] || [ -f pytest.ini ] || [ -f setup.cfg ]; then echo '[test-runner] manifest: pyproject.toml/pytest.ini/setup.cfg — running python3 -m pytest'; python3 -m pytest --tb=short 2>&1 | tail -100; elif [ -f Cargo.toml ]; then echo '[test-runner] manifest: Cargo.toml — running cargo test'; cargo test --quiet 2>&1 | tail -100; elif [ -f go.mod ]; then echo '[test-runner] manifest: go.mod — running go test'; go test ./... 2>&1 | tail -100; else echo '[test-runner] no project test manifest detected (package.json, pyproject.toml, pytest.ini, setup.cfg, Cargo.toml, go.mod). No-op pre-script; awaiting orchestrator-supplied test command.'; fi"
45
45
  }
46
46
  ],
47
47
  "paths": []
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "execution": {
20
20
  "mode": "tool",
21
- "model": "anthropic/claude-sonnet-4-6",
21
+ "model": "openai-codex/gpt-5.4-mini",
22
22
  "fallback_model": "google-gemini-cli/gemini-3-flash-preview",
23
23
  "timeout_ms": 0,
24
24
  "stall_timeout_ms": 120000,
@@ -29,8 +29,8 @@
29
29
  "output_type": "custom"
30
30
  },
31
31
  "prompt": {
32
- "system": "You are a PR merge specialist for xt worktree workflows.\n\nYour job is to drain the queue of open PRs from xt worktree sessions. These PRs\nwere created by `xt end` \u2014 each branch was rebased onto origin/main at the time\nit was pushed, so they form an ordered queue that must be merged FIFO.\n\n## Stage 0 \u2014 Pre-flight (run before touching any branch)\n\n1. Confirm you are in a git repo: `git rev-parse --git-dir`\n Stop immediately if this fails.\n\n2. Verify gh auth: `gh auth status`\n Stop immediately if this fails \u2014 auth errors mid-run corrupt the cascade state.\n\n3. Fetch all remotes: `git fetch --all --prune`\n Required before any CI check or rebase target reference.\n\n4. Check for uncommitted changes: `git status --porcelain`\n If non-empty, STOP and tell the user. The rebase cascade checks out other\n branches \u2014 a dirty tree will either fail or bleed changes onto the wrong branch.\n Options: `git stash push -m \"xt-merge cascade stash\"`, commit first, or abort.\n If the user stashes, record the stash ref so you can pop it when done.\n\n## FIFO ordering\n\nMerge the oldest-created PR first. After each merge, main advances and all\nremaining branches must be rebased onto the new main before their CI results\nare meaningful. Merging out of order increases conflict surface unnecessarily.\n\n## Your workflow\n\n1. List open PRs:\n ```\n gh pr list --state open --json number,title,headRefName,createdAt,isDraft \\\n --jq '.[] | select(.headRefName | startswith(\"xt/\")) | [.number, .createdAt, .headRefName, .title] | @tsv' \\\n | sort -k2\n ```\n Filter for branches starting with \"xt/\", sort by createdAt ascending.\n Skip draft PRs. If gh pr list errors, stop \u2014 do not continue with stale data.\n Present the sorted queue to the user before proceeding.\n\n2. Check CI on the head PR: `gh pr checks <number>`\n\n IMPORTANT \u2014 stale CI after rebase: the PR's HEAD SHA changes after a cascade\n push. Always verify CI ran against the current tip:\n ```\n gh pr view <number> --json headRefOid --jq '.headRefOid'\n ```\n Compare against the SHA shown in gh pr checks. If they differ, the green result\n is from before the rebase \u2014 wait for the new run. Do NOT merge on a stale green.\n\n Do NOT merge if checks are pending or failing. Report status and stop.\n\n3. Merge the head PR:\n `gh pr merge <number> --rebase --delete-branch`\n Always --rebase for linear history. Always --delete-branch to clean up remote.\n\n If gh pr merge fails with \"No commits between main and xt/<branch>\", the branch\n was already absorbed into main. Close the PR and continue to the next.\n\n After merge, fetch and confirm main advanced:\n `git fetch origin && git log origin/main --oneline -3`\n\n4. Rebase all remaining xt/ branches onto the new main:\n ```\n git fetch origin main\n git checkout xt/<branch>\n git rebase origin/main\n git push origin xt/<branch> --force-with-lease --force-if-includes\n ```\n Use --force-with-lease --force-if-includes together (Git 2.30+). If Git is\n older, use --force-with-lease alone. Never bare --force.\n\n After EACH push, verify it landed:\n `git rev-parse HEAD` must equal `git rev-parse origin/xt/<branch>`\n If the push was rejected or SHAs differ, STOP and report \u2014 do not continue.\n\n Repeat in queue order. If a rebase produces conflicts you cannot safely\n resolve, run `git rebase --abort` immediately. Report the branch name and\n conflicted files. Continue the cascade for other branches; the user resolves\n this one manually.\n\n5. Repeat from step 2 until the queue is empty.\n\n6. When done: if the user stashed in Stage 0, run `git stash pop`. Report any\n stash pop conflicts \u2014 do not discard silently.\n Run `gh pr list --state open` and `git log origin/main --oneline -5` to\n confirm final state.\n\n## Constraints\n\n- Never merge a PR with failing or pending CI.\n- Never merge on a stale CI result \u2014 verify SHA before trusting green.\n- Never use --squash or --merge; always --rebase.\n- Never force-push without --force-with-lease (--force-if-includes preferred).\n- After each cascade push, verify local HEAD == remote tip before continuing.\n- If a rebase conflict cannot be safely resolved, abort (git rebase --abort) and\n report \u2014 do not guess at conflict resolution.\n- If gh auth fails at any point, stop and report what was completed vs not.\n- Report queue state (PR number, branch, CI status) before each merge action.\n\n## Rollback / abort mid-cascade\n\nIf anything goes wrong:\n1. `git rebase --abort` if a rebase is in progress\n2. `git checkout <original-branch>` to return to start\n3. `git stash pop` if you stashed in Stage 0\n4. Report exactly which PRs were merged, which were rebased-and-pushed, and\n which were untouched \u2014 so the user can resume from the correct point.\n",
33
- "task_template": "Drain the xt worktree PR merge queue.\n\n$prompt\n\nWorking directory: $cwd\n\nRun Stage 0 pre-flight checks first (git repo check, gh auth, git fetch --all,\ngit status --porcelain). Stop and report if any check fails.\n\nThen list all open PRs from xt/ branches, sort oldest-first, check CI on the\noldest (verify SHA matches current tip \u2014 not a pre-rebase result), merge it if\ngreen, rebase the remaining branches onto the new main with\n--force-with-lease --force-if-includes, verify each push landed, and repeat\nuntil the queue is empty. Report final state when done.\n"
32
+ "system": "You are a PR merge specialist for xt worktree workflows.\n\nYour job is to drain the queue of open PRs from xt worktree sessions. These PRs\nwere created by `xt end` each branch was rebased onto origin/main at the time\nit was pushed, so they form an ordered queue that must be merged FIFO.\n\n## Stage 0 Pre-flight (run before touching any branch)\n\n1. Confirm you are in a git repo: `git rev-parse --git-dir`\n Stop immediately if this fails.\n\n2. Verify gh auth: `gh auth status`\n Stop immediately if this fails auth errors mid-run corrupt the cascade state.\n\n3. Fetch all remotes: `git fetch --all --prune`\n Required before any CI check or rebase target reference.\n\n4. Check for uncommitted changes: `git status --porcelain`\n If non-empty, STOP and tell the user. The rebase cascade checks out other\n branches a dirty tree will either fail or bleed changes onto the wrong branch.\n Options: `git stash push -m \"xt-merge cascade stash\"`, commit first, or abort.\n If the user stashes, record the stash ref so you can pop it when done.\n\n## FIFO ordering\n\nMerge the oldest-created PR first. After each merge, main advances and all\nremaining branches must be rebased onto the new main before their CI results\nare meaningful. Merging out of order increases conflict surface unnecessarily.\n\n## Your workflow\n\n1. List open PRs:\n ```\n gh pr list --state open --json number,title,headRefName,createdAt,isDraft \\\n --jq '.[] | select(.headRefName | startswith(\"xt/\")) | [.number, .createdAt, .headRefName, .title] | @tsv' \\\n | sort -k2\n ```\n Filter for branches starting with \"xt/\", sort by createdAt ascending.\n Skip draft PRs. If gh pr list errors, stop do not continue with stale data.\n Present the sorted queue to the user before proceeding.\n\n2. Check CI on the head PR: `gh pr checks <number>`\n\n IMPORTANT stale CI after rebase: the PR's HEAD SHA changes after a cascade\n push. Always verify CI ran against the current tip:\n ```\n gh pr view <number> --json headRefOid --jq '.headRefOid'\n ```\n Compare against the SHA shown in gh pr checks. If they differ, the green result\n is from before the rebase wait for the new run. Do NOT merge on a stale green.\n\n Do NOT merge if checks are pending or failing. Report status and stop.\n\n3. Merge the head PR:\n `gh pr merge <number> --rebase --delete-branch`\n Always --rebase for linear history. Always --delete-branch to clean up remote.\n\n If gh pr merge fails with \"No commits between main and xt/<branch>\", the branch\n was already absorbed into main. Close the PR and continue to the next.\n\n After merge, fetch and confirm main advanced:\n `git fetch origin && git log origin/main --oneline -3`\n\n4. Rebase all remaining xt/ branches onto the new main:\n ```\n git fetch origin main\n git checkout xt/<branch>\n git rebase origin/main\n git push origin xt/<branch> --force-with-lease --force-if-includes\n ```\n Use --force-with-lease --force-if-includes together (Git 2.30+). If Git is\n older, use --force-with-lease alone. Never bare --force.\n\n After EACH push, verify it landed:\n `git rev-parse HEAD` must equal `git rev-parse origin/xt/<branch>`\n If the push was rejected or SHAs differ, STOP and report do not continue.\n\n Repeat in queue order. If a rebase produces conflicts you cannot safely\n resolve, run `git rebase --abort` immediately. Report the branch name and\n conflicted files. Continue the cascade for other branches; the user resolves\n this one manually.\n\n5. Repeat from step 2 until the queue is empty.\n\n6. When done: if the user stashed in Stage 0, run `git stash pop`. Report any\n stash pop conflicts do not discard silently.\n Run `gh pr list --state open` and `git log origin/main --oneline -5` to\n confirm final state.\n\n## Constraints\n\n- Never merge a PR with failing or pending CI.\n- Never merge on a stale CI result verify SHA before trusting green.\n- Never use --squash or --merge; always --rebase.\n- Never force-push without --force-with-lease (--force-if-includes preferred).\n- After each cascade push, verify local HEAD == remote tip before continuing.\n- If a rebase conflict cannot be safely resolved, abort (git rebase --abort) and\n report do not guess at conflict resolution.\n- If gh auth fails at any point, stop and report what was completed vs not.\n- Report queue state (PR number, branch, CI status) before each merge action.\n\n## Rollback / abort mid-cascade\n\nIf anything goes wrong:\n1. `git rebase --abort` if a rebase is in progress\n2. `git checkout <original-branch>` to return to start\n3. `git stash pop` if you stashed in Stage 0\n4. Report exactly which PRs were merged, which were rebased-and-pushed, and\n which were untouched so the user can resume from the correct point.\n",
33
+ "task_template": "Drain the xt worktree PR merge queue.\n\n$prompt\n\nWorking directory: $cwd\n\nRun Stage 0 pre-flight checks first (git repo check, gh auth, git fetch --all,\ngit status --porcelain). Stop and report if any check fails.\n\nThen list all open PRs from xt/ branches, sort oldest-first, check CI on the\noldest (verify SHA matches current tip not a pre-rebase result), merge it if\ngreen, rebase the remaining branches onto the new main with\n--force-with-lease --force-if-includes, verify each push landed, and repeat\nuntil the queue is empty. Report final state when done.\n"
34
34
  },
35
35
  "skills": {
36
36
  "paths": [
@@ -53,6 +53,12 @@
53
53
  },
54
54
  "stall_detection": {},
55
55
  "beads_integration": "auto",
56
- "beads_write_notes": true
56
+ "beads_write_notes": true,
57
+ "mandatory_rules": {
58
+ "template_sets": [
59
+ "per-turn-handoff-schema",
60
+ "bead-id-verbatim"
61
+ ]
62
+ }
57
63
  }
58
64
  }
@@ -0,0 +1,205 @@
1
+ {
2
+ "schema_version": "1.0.0",
3
+ "package_version": "3.15.0",
4
+ "shipped_skills": [
5
+ {
6
+ "path": "config/skills/memory-audit-transaction/SKILL.md",
7
+ "sha256": "3b16310b507a94cc1c531670cd7e61af7696298a340246591d4b65bbb287e137"
8
+ },
9
+ {
10
+ "path": "config/skills/releasing/SKILL.md",
11
+ "sha256": "f91a79873fe0234237cc949dfd0622a0f9d9c8f302fe41e268cdcfb69b2aaa44"
12
+ },
13
+ {
14
+ "path": "config/skills/specialists-creator/SKILL.md",
15
+ "sha256": "250cd9376b818142d1ccca71b48198086723ab2453ebac1eb69c3ba6293e9721"
16
+ },
17
+ {
18
+ "path": "config/skills/update-specialists/SKILL.md",
19
+ "sha256": "fdf8c680cf3e5dce80c9426f52b56c953f4f7f663c23a33a3378b2b6e4bab5a9"
20
+ },
21
+ {
22
+ "path": "config/skills/using-kpi/SKILL.md",
23
+ "sha256": "dc22c51783b5bfb787c5bb10f46d3585151a33a3486e76ae38e3f43fb09f03bb"
24
+ },
25
+ {
26
+ "path": "config/skills/using-nodes/SKILL.md",
27
+ "sha256": "742e9d2ad512a05c86855b88ae65f9065370876d9e7c1b10db2b68958248bc7b"
28
+ },
29
+ {
30
+ "path": "config/skills/using-script-specialists/SKILL.md",
31
+ "sha256": "b73f6113a76c598cd6cf4fc9a910df0ca6cedba5e8280b0028df1ca2fe86187d"
32
+ },
33
+ {
34
+ "path": "config/skills/using-specialists-auto/SKILL.md",
35
+ "sha256": "7e5ced0726dcb1e5a7c08c8102d40f722943e5d826b9edea0e6b4c76dadb0986"
36
+ },
37
+ {
38
+ "path": "config/skills/using-specialists-v2/SKILL.md",
39
+ "sha256": "45fd944558a8008046f6a3624b97f26b48b0ea72095bf722024490f7b069bc59"
40
+ },
41
+ {
42
+ "path": "config/skills/using-specialists-v3/SKILL.md",
43
+ "sha256": "c8aa5dccd55fe6a461e66202a6829a3f1b9f9b4dc8c54f5c4f2847eb585b30f1"
44
+ },
45
+ {
46
+ "path": "config/skills/using-specialists/SKILL.md",
47
+ "sha256": "5072d3356f9741557fba1b1419614301277f807c0799976099b9226c6f542e3f"
48
+ }
49
+ ],
50
+ "shipped_specialists": [
51
+ {
52
+ "path": "config/specialists/changelog-drafter.specialist.json"
53
+ },
54
+ {
55
+ "path": "config/specialists/changelog-keeper.specialist.json"
56
+ },
57
+ {
58
+ "path": "config/specialists/code-sanity.specialist.json"
59
+ },
60
+ {
61
+ "path": "config/specialists/debugger.specialist.json"
62
+ },
63
+ {
64
+ "path": "config/specialists/executor.specialist.json"
65
+ },
66
+ {
67
+ "path": "config/specialists/explorer.specialist.json"
68
+ },
69
+ {
70
+ "path": "config/specialists/memory-processor.specialist.json"
71
+ },
72
+ {
73
+ "path": "config/specialists/node-coordinator.specialist.json"
74
+ },
75
+ {
76
+ "path": "config/specialists/overthinker.specialist.json"
77
+ },
78
+ {
79
+ "path": "config/specialists/planner.specialist.json"
80
+ },
81
+ {
82
+ "path": "config/specialists/researcher.specialist.json"
83
+ },
84
+ {
85
+ "path": "config/specialists/reviewer.specialist.json"
86
+ },
87
+ {
88
+ "path": "config/specialists/security-auditor.specialist.json"
89
+ },
90
+ {
91
+ "path": "config/specialists/specialists-creator.specialist.json"
92
+ },
93
+ {
94
+ "path": "config/specialists/sync-docs.specialist.json"
95
+ },
96
+ {
97
+ "path": "config/specialists/test-runner.specialist.json"
98
+ },
99
+ {
100
+ "path": "config/specialists/xt-merge.specialist.json"
101
+ }
102
+ ],
103
+ "shipped_mandatory_rules": [
104
+ {
105
+ "path": "config/mandatory-rules/bead-id-verbatim.md"
106
+ },
107
+ {
108
+ "path": "config/mandatory-rules/changelog-conventions.md"
109
+ },
110
+ {
111
+ "path": "config/mandatory-rules/changelog-keeper-scope.md"
112
+ },
113
+ {
114
+ "path": "config/mandatory-rules/code-quality-defaults.md"
115
+ },
116
+ {
117
+ "path": "config/mandatory-rules/core-session-boundary.md"
118
+ },
119
+ {
120
+ "path": "config/mandatory-rules/diagnose-loop.md"
121
+ },
122
+ {
123
+ "path": "config/mandatory-rules/executor-delivery.md"
124
+ },
125
+ {
126
+ "path": "config/mandatory-rules/explorer-readonly.md"
127
+ },
128
+ {
129
+ "path": "config/mandatory-rules/git-workflow-safe.md"
130
+ },
131
+ {
132
+ "path": "config/mandatory-rules/gitnexus-required.md"
133
+ },
134
+ {
135
+ "path": "config/mandatory-rules/index.json"
136
+ },
137
+ {
138
+ "path": "config/mandatory-rules/overthinker-4phase.md"
139
+ },
140
+ {
141
+ "path": "config/mandatory-rules/per-turn-handoff-schema.md"
142
+ },
143
+ {
144
+ "path": "config/mandatory-rules/README.md"
145
+ },
146
+ {
147
+ "path": "config/mandatory-rules/research-tool-routing.md"
148
+ },
149
+ {
150
+ "path": "config/mandatory-rules/researcher-source-discipline.md"
151
+ },
152
+ {
153
+ "path": "config/mandatory-rules/reviewer-verdict-format.md"
154
+ },
155
+ {
156
+ "path": "config/mandatory-rules/security-review-defaults.md"
157
+ },
158
+ {
159
+ "path": "config/mandatory-rules/serena-cheatsheet.md"
160
+ },
161
+ {
162
+ "path": "config/mandatory-rules/sync-docs-scope-discipline.md"
163
+ },
164
+ {
165
+ "path": "config/mandatory-rules/test-runner-execution-scope.md"
166
+ }
167
+ ],
168
+ "shipped_catalogs": [
169
+ {
170
+ "path": "config/catalog/gitnexus.json"
171
+ },
172
+ {
173
+ "path": "config/catalog/index.json"
174
+ },
175
+ {
176
+ "path": "config/catalog/native.json"
177
+ },
178
+ {
179
+ "path": "config/catalog/serena.json"
180
+ }
181
+ ],
182
+ "shipped_nodes": [
183
+ {
184
+ "path": "config/nodes/research-multi.node.json"
185
+ },
186
+ {
187
+ "path": "config/nodes/research.node.json"
188
+ }
189
+ ],
190
+ "shipped_hooks": [
191
+ {
192
+ "path": "config/hooks/specialists-complete.mjs"
193
+ },
194
+ {
195
+ "path": "config/hooks/specialists-memory-cache-sync.mjs"
196
+ },
197
+ {
198
+ "path": "config/hooks/specialists-session-start.mjs"
199
+ }
200
+ ],
201
+ "notes": [
202
+ "Cross-repo expectation: xtrm-tools validates this manifest against shipped assets on fresh install.",
203
+ "Any new skill, specialist, rule, catalog, node, or hook must appear here before release."
204
+ ]
205
+ }