@jaggerxtrm/specialists 3.16.0 → 3.18.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 (257) hide show
  1. package/README.md +268 -132
  2. package/config/mandatory-rules/json-only-final-output.md +13 -0
  3. package/config/mandatory-rules/research-tool-routing.md +4 -0
  4. package/config/mandatory-rules/service-skills-diff-scan-mandatory.md +26 -0
  5. package/config/mandatory-rules/service-skills-gitnexus-triage.md +5 -0
  6. package/config/mandatory-rules/test-runner-execution-scope.md +1 -1
  7. package/config/skills/setup-specialists/SKILL.md +556 -0
  8. package/config/skills/specialists-creator/SKILL.md +160 -5
  9. package/config/skills/specialists-creator/scripts/audit-spec-uniformity.mjs +1 -1
  10. package/config/skills/using-specialists-auto/SKILL.md +1 -1
  11. package/config/skills/using-specialists-v2/SKILL.md +7 -7
  12. package/config/skills/using-specialists-v3/SKILL.md +223 -147
  13. package/config/specialists/bare.specialist.json +3 -3
  14. package/config/specialists/changelog-drafter.specialist.json +9 -6
  15. package/config/specialists/changelog-keeper.specialist.json +10 -7
  16. package/config/specialists/debugger.specialist.json +8 -6
  17. package/config/specialists/executor.specialist.json +9 -7
  18. package/config/specialists/explorer.specialist.json +8 -6
  19. package/config/specialists/memory-processor.specialist.json +7 -5
  20. package/config/specialists/node-coordinator.specialist.json +7 -5
  21. package/config/specialists/obligations-scanner.specialist.json +149 -0
  22. package/config/specialists/overthinker.specialist.json +7 -5
  23. package/config/specialists/planner.specialist.json +8 -6
  24. package/config/specialists/quant-methodologist.specialist.json +145 -0
  25. package/config/specialists/quant-researcher.specialist.json +144 -0
  26. package/config/specialists/researcher.specialist.json +14 -9
  27. package/config/specialists/reviewer.specialist.json +11 -9
  28. package/config/specialists/seconder.specialist.json +170 -0
  29. package/config/specialists/security-auditor.specialist.json +6 -4
  30. package/config/specialists/service-skills-sync.specialist.json +93 -0
  31. package/config/specialists/specialists-creator.specialist.json +9 -7
  32. package/config/specialists/sync-docs.specialist.json +6 -4
  33. package/config/specialists/test-engineer.specialist.json +134 -0
  34. package/config/specialists/test-runner.specialist.json +11 -9
  35. package/config/specialists/transcriber.specialist.json +59 -0
  36. package/config/specialists/xt-merge.specialist.json +7 -5
  37. package/dist/asset-contract.json +39 -8
  38. package/dist/index.js +37083 -26912
  39. package/dist/lib.js +9850 -6147
  40. package/dist/types/cli/console/components.d.ts +83 -0
  41. package/dist/types/cli/console/components.d.ts.map +1 -0
  42. package/dist/types/cli/console/config-source.d.ts +58 -0
  43. package/dist/types/cli/console/config-source.d.ts.map +1 -0
  44. package/dist/types/cli/console/forensic.d.ts +11 -0
  45. package/dist/types/cli/console/forensic.d.ts.map +1 -0
  46. package/dist/types/cli/console/git.d.ts +28 -0
  47. package/dist/types/cli/console/git.d.ts.map +1 -0
  48. package/dist/types/cli/console/help.d.ts +2 -0
  49. package/dist/types/cli/console/help.d.ts.map +1 -0
  50. package/dist/types/cli/console/log.d.ts +13 -0
  51. package/dist/types/cli/console/log.d.ts.map +1 -0
  52. package/dist/types/cli/console/repo-config.d.ts +26 -0
  53. package/dist/types/cli/console/repo-config.d.ts.map +1 -0
  54. package/dist/types/cli/console/repo-discovery.d.ts +12 -0
  55. package/dist/types/cli/console/repo-discovery.d.ts.map +1 -0
  56. package/dist/types/cli/console/runtime.d.ts +12 -0
  57. package/dist/types/cli/console/runtime.d.ts.map +1 -0
  58. package/dist/types/cli/console/subscribe-prototype.d.ts +18 -0
  59. package/dist/types/cli/console/subscribe-prototype.d.ts.map +1 -0
  60. package/dist/types/cli/console/theme.d.ts +91 -0
  61. package/dist/types/cli/console/theme.d.ts.map +1 -0
  62. package/dist/types/cli/console/types.d.ts +231 -0
  63. package/dist/types/cli/console/types.d.ts.map +1 -0
  64. package/dist/types/cli/console/view-model.d.ts +252 -0
  65. package/dist/types/cli/console/view-model.d.ts.map +1 -0
  66. package/dist/types/cli/console.d.ts +2 -0
  67. package/dist/types/cli/console.d.ts.map +1 -0
  68. package/dist/types/cli/db.d.ts.map +1 -1
  69. package/dist/types/cli/doctor.d.ts.map +1 -1
  70. package/dist/types/cli/edit.d.ts.map +1 -1
  71. package/dist/types/cli/epic.d.ts.map +1 -1
  72. package/dist/types/cli/feed.d.ts.map +1 -1
  73. package/dist/types/cli/forensic.d.ts +2 -0
  74. package/dist/types/cli/forensic.d.ts.map +1 -0
  75. package/dist/types/cli/format-helpers.d.ts +4 -2
  76. package/dist/types/cli/format-helpers.d.ts.map +1 -1
  77. package/dist/types/cli/help.d.ts.map +1 -1
  78. package/dist/types/cli/init.d.ts +10 -0
  79. package/dist/types/cli/init.d.ts.map +1 -1
  80. package/dist/types/cli/list.d.ts.map +1 -1
  81. package/dist/types/cli/log.d.ts +2 -0
  82. package/dist/types/cli/log.d.ts.map +1 -0
  83. package/dist/types/cli/metrics.d.ts +2 -0
  84. package/dist/types/cli/metrics.d.ts.map +1 -0
  85. package/dist/types/cli/ps.d.ts.map +1 -1
  86. package/dist/types/cli/result.d.ts.map +1 -1
  87. package/dist/types/cli/resume.d.ts.map +1 -1
  88. package/dist/types/cli/run.d.ts +1 -0
  89. package/dist/types/cli/run.d.ts.map +1 -1
  90. package/dist/types/cli/script.d.ts +3 -0
  91. package/dist/types/cli/script.d.ts.map +1 -1
  92. package/dist/types/cli/serve.d.ts.map +1 -1
  93. package/dist/types/cli/setup.d.ts +19 -1
  94. package/dist/types/cli/setup.d.ts.map +1 -1
  95. package/dist/types/cli/status.d.ts.map +1 -1
  96. package/dist/types/cli/steer.d.ts.map +1 -1
  97. package/dist/types/cli/version-check.d.ts +1 -0
  98. package/dist/types/cli/version-check.d.ts.map +1 -1
  99. package/dist/types/index.d.ts +1 -1
  100. package/dist/types/pi/session.d.ts +11 -1
  101. package/dist/types/pi/session.d.ts.map +1 -1
  102. package/dist/types/server.d.ts +15 -0
  103. package/dist/types/server.d.ts.map +1 -1
  104. package/dist/types/specialist/benchmarks.d.ts +37 -0
  105. package/dist/types/specialist/benchmarks.d.ts.map +1 -0
  106. package/dist/types/specialist/chain-identity.d.ts +7 -1
  107. package/dist/types/specialist/chain-identity.d.ts.map +1 -1
  108. package/dist/types/specialist/control.d.ts.map +1 -1
  109. package/dist/types/specialist/forensic-events.d.ts +138 -0
  110. package/dist/types/specialist/forensic-events.d.ts.map +1 -0
  111. package/dist/types/specialist/forensic-renderer.d.ts +34 -0
  112. package/dist/types/specialist/forensic-renderer.d.ts.map +1 -0
  113. package/dist/types/specialist/git-diff-evidence.d.ts +28 -0
  114. package/dist/types/specialist/git-diff-evidence.d.ts.map +1 -0
  115. package/dist/types/specialist/global-config.d.ts +389 -0
  116. package/dist/types/specialist/global-config.d.ts.map +1 -0
  117. package/dist/types/specialist/job-file-output.d.ts +2 -0
  118. package/dist/types/specialist/job-file-output.d.ts.map +1 -1
  119. package/dist/types/specialist/launch.d.ts +1 -0
  120. package/dist/types/specialist/launch.d.ts.map +1 -1
  121. package/dist/types/specialist/live-aggregates.d.ts +46 -0
  122. package/dist/types/specialist/live-aggregates.d.ts.map +1 -0
  123. package/dist/types/specialist/loader.d.ts +50 -1
  124. package/dist/types/specialist/loader.d.ts.map +1 -1
  125. package/dist/types/specialist/model-chain.d.ts +7 -0
  126. package/dist/types/specialist/model-chain.d.ts.map +1 -0
  127. package/dist/types/specialist/model-probes.d.ts +28 -0
  128. package/dist/types/specialist/model-probes.d.ts.map +1 -0
  129. package/dist/types/specialist/node-contract.d.ts +18 -18
  130. package/dist/types/specialist/node-supervisor.d.ts.map +1 -1
  131. package/dist/types/specialist/observability-db.d.ts +1 -1
  132. package/dist/types/specialist/observability-db.d.ts.map +1 -1
  133. package/dist/types/specialist/observability-sqlite.d.ts +25 -0
  134. package/dist/types/specialist/observability-sqlite.d.ts.map +1 -1
  135. package/dist/types/specialist/preset-resolver.d.ts +56 -0
  136. package/dist/types/specialist/preset-resolver.d.ts.map +1 -0
  137. package/dist/types/specialist/prometheus-projection.d.ts +25 -0
  138. package/dist/types/specialist/prometheus-projection.d.ts.map +1 -0
  139. package/dist/types/specialist/runner.d.ts +29 -1
  140. package/dist/types/specialist/runner.d.ts.map +1 -1
  141. package/dist/types/specialist/schema.d.ts +181 -63
  142. package/dist/types/specialist/schema.d.ts.map +1 -1
  143. package/dist/types/specialist/script-runner.d.ts +5 -1
  144. package/dist/types/specialist/script-runner.d.ts.map +1 -1
  145. package/dist/types/specialist/snapshot-diff.d.ts +8 -0
  146. package/dist/types/specialist/snapshot-diff.d.ts.map +1 -0
  147. package/dist/types/specialist/source-queue.d.ts +13 -0
  148. package/dist/types/specialist/source-queue.d.ts.map +1 -0
  149. package/dist/types/specialist/supervisor.d.ts +39 -2
  150. package/dist/types/specialist/supervisor.d.ts.map +1 -1
  151. package/dist/types/specialist/timeline-events.d.ts +88 -2
  152. package/dist/types/specialist/timeline-events.d.ts.map +1 -1
  153. package/dist/types/tools/specialist/resume_specialist.tool.d.ts +4 -4
  154. package/dist/types/tools/specialist/specialist_status.tool.d.ts +1 -1
  155. package/dist/types/tools/specialist/steer_specialist.tool.d.ts +4 -4
  156. package/dist/types/tools/specialist/use_specialist.tool.d.ts +16 -16
  157. package/docs/ARCHITECTURE.md +1176 -0
  158. package/docs/TODO.md +9 -0
  159. package/docs/architecture.md +11 -0
  160. package/docs/archive/2026-03-13-bd-decision-context-template-plan.md +96 -0
  161. package/docs/archive/AGENT-HANDOFF.md +351 -0
  162. package/docs/archive/PARITY-ANALYSIS.md +296 -0
  163. package/docs/archive/SPECIALISTS_REFACTOR.md.md +30 -0
  164. package/docs/archive/cc-programmatic.md +216 -0
  165. package/docs/archive/claude-agent-sdk.md +594 -0
  166. package/docs/archive/decision-specialist-directory.md +41 -0
  167. package/docs/archive/discoveries.md +148 -0
  168. package/docs/archive/executor-benchmark-protocol.md +198 -0
  169. package/docs/archive/future-features.md +66 -0
  170. package/docs/archive/gzrx-completion-critique.md +183 -0
  171. package/docs/archive/gzrx-research-notes.md +401 -0
  172. package/docs/archive/gzrx-tool-catalog.md +760 -0
  173. package/docs/archive/iron-review-hardening-qa-chain-substrate.md +322 -0
  174. package/docs/archive/iron-review-hardening.html +1004 -0
  175. package/docs/archive/issuetracking.md +312 -0
  176. package/docs/archive/qa-v3.0.2.md +220 -0
  177. package/docs/archive/restructure.md +231 -0
  178. package/docs/archive/script-specialists.md +1254 -0
  179. package/docs/archive/spec-v3.md +792 -0
  180. package/docs/archive/specialist-stats.md +127 -0
  181. package/docs/archive/specialists-friction-audit.md +1347 -0
  182. package/docs/archive/specialists-runtime-critique.md +170 -0
  183. package/docs/archive/specialists-service-evaluation.md +713 -0
  184. package/docs/archive/specialists-substrate-alignment.md +255 -0
  185. package/docs/archive/substrate-review.md +1288 -0
  186. package/docs/archive/test-writer-specialist.md +254 -0
  187. package/docs/archive/using-specialists-v3-improvements-2026-05-09.md +600 -0
  188. package/docs/archive/xtrm-specialists-analysis.md +314 -0
  189. package/docs/authoring.md +701 -0
  190. package/docs/background-jobs.md +203 -0
  191. package/docs/bare-specialists.md +83 -0
  192. package/docs/benchmarks/executor-benchmark-runner.md +66 -0
  193. package/docs/bootstrap.md +161 -0
  194. package/docs/cli-reference.md +1645 -0
  195. package/docs/deploying-alongside.md +155 -0
  196. package/docs/design/README.md +36 -0
  197. package/docs/design/darth-feedor-migration.md +290 -0
  198. package/docs/design/roadmap/README.md +32 -0
  199. package/docs/design/roadmap/chain-templates/README.md +146 -0
  200. package/docs/design/roadmap/chain-templates/code-quick.formula.json +27 -0
  201. package/docs/design/roadmap/chain-templates/code-standard.formula.json +126 -0
  202. package/docs/design/roadmap/chain-templates/code-with-advisors.formula.json +128 -0
  203. package/docs/design/roadmap/chain-templates/code-with-tests.formula.json +76 -0
  204. package/docs/design/roadmap/chain-templates/debug.formula.json +128 -0
  205. package/docs/design/roadmap/chain-templates/doc-sync.formula.json +28 -0
  206. package/docs/design/roadmap/chain-templates/memory-hygiene.formula.json +27 -0
  207. package/docs/design/roadmap/chain-templates/planning.formula.json +27 -0
  208. package/docs/design/roadmap/chain-templates/premortem.formula.json +26 -0
  209. package/docs/design/roadmap/chain-templates/release-prep.formula.json +36 -0
  210. package/docs/design/roadmap/chain-templates/research-only.formula.json +28 -0
  211. package/docs/design/roadmap/chain-templates/restitch.formula.json +125 -0
  212. package/docs/design/roadmap/chain-templates/security-deep.formula.json +161 -0
  213. package/docs/design/roadmap/chain-templates/test-only.formula.json +52 -0
  214. package/docs/design/roadmap/chain-templates/triage.formula.json +35 -0
  215. package/docs/design/roadmap/history/handoff-from-substrate-design.md +87 -0
  216. package/docs/design/roadmap/history/substrate-reconciliation.md +105 -0
  217. package/docs/design/roadmap/specialists-roadmap.md +1193 -0
  218. package/docs/design/sp-console-subscribe-via-materializer.md +231 -0
  219. package/docs/design/sp-console-tui-mock-v2.html +293 -0
  220. package/docs/design/sp-console-tui-mock.html +120 -0
  221. package/docs/design/sp-console-tui.md +340 -0
  222. package/docs/design/specialist-agentops-suite.md +323 -0
  223. package/docs/design/substrate/channels.md +14 -0
  224. package/docs/design/substrate/devops-platform-engineering-prd.md +446 -0
  225. package/docs/design/substrate/html-design-example.md +339 -0
  226. package/docs/design/xtrm-tiers-architecture.svg +132 -0
  227. package/docs/devops/dependency-verdict-materialization.md +46 -0
  228. package/docs/epic-readiness.md +75 -0
  229. package/docs/examples/mercury-atomic-summarizer.specialist.json +26 -0
  230. package/docs/examples/smoke-echo-text-expected-keys.specialist.json +25 -0
  231. package/docs/examples/smoke-echo.specialist.json +25 -0
  232. package/docs/features.md +1577 -0
  233. package/docs/hooks.md +81 -0
  234. package/docs/installation.md +142 -0
  235. package/docs/manifest.md +184 -0
  236. package/docs/mcp-servers.md +73 -0
  237. package/docs/mcp-tools.md +71 -0
  238. package/docs/nodes.md +231 -0
  239. package/docs/observability-metrics.md +152 -0
  240. package/docs/operator/sp-console-v2-walkthrough.md +410 -0
  241. package/docs/overrides-guide.md +306 -0
  242. package/docs/pi-rpc-boundary.md +118 -0
  243. package/docs/pi-session.md +195 -0
  244. package/docs/release.md +22 -0
  245. package/docs/skills.md +132 -0
  246. package/docs/specialists/handoff-schema.md +181 -0
  247. package/docs/specialists-catalog.md +99 -0
  248. package/docs/specialists-service-install.md +226 -0
  249. package/docs/specialists-service.md +363 -0
  250. package/docs/surface-ownership.md +138 -0
  251. package/docs/upgrade-notes/kan-90-global-user-config.md +114 -0
  252. package/docs/upgrade-notes/kan-91-expanded-overrides.md +261 -0
  253. package/docs/workflow.md +114 -0
  254. package/docs/worktree.md +71 -0
  255. package/docs/worktrees.md +309 -0
  256. package/package.json +17 -12
  257. package/config/specialists/code-sanity.specialist.json +0 -108
@@ -0,0 +1,401 @@
1
+ # Research Findings: Agent-Runtime Tool Registries and Capability Systems
2
+
3
+ **Bead:** unitAI-6b821
4
+ **Date:** 2026-05-03
5
+ **Sources:** 10+ primary sources (repos, docs, code)
6
+
7
+ ---
8
+
9
+ ## Executive Summary
10
+
11
+ Surveyed 6 agent runtimes for tool registry patterns, permission models, capability classification, and failure handling. Key findings:
12
+
13
+ | System | Tool Registration | Permission Tiers | Capability Tags | Preference Signals | Failure Handling |
14
+ |--------|------------------|------------------|-----------------|-------------------|------------------|
15
+ | **pi-mono** (this project) | Hardcoded arrays | 4 levels (READ_ONLY→HIGH) | None | None | Silent skip |
16
+ | **Gemini CLI** | ToolRegistry class + MCP discovery | ApprovalMode enum + PolicyEngine | Kind enum (12 values) | Policy rules with priority | Connection states + diagnostics |
17
+ | **Claude Code** | MCP config + allowed-tools frontmatter | Sandbox + permission rules | None | Wildcard patterns | OAuth retry + reconnection |
18
+ | **VS Code** | IMcpRegistry + gallery | Contribution enablement | McpCapability enum | Extension enablement | State tracking |
19
+ | **Aider** | --lint-cmd + model config | None | None | None | Linter-based |
20
+ | **OpenHands** | litellm ToolRegistry | None | FunctionDeclaration schema | None | Not documented |
21
+
22
+ **Recommendation:** Gemini CLI's Kind + PolicyEngine pattern is most mature. pi-mono should adopt capability tags + soft/hard deny modes.
23
+
24
+ ---
25
+
26
+ ## 1. pi-mono (mariozechner/pi-coding-agent)
27
+
28
+ **Source:** `src/pi/session.ts` (lines 156-243, 643-675)
29
+
30
+ ### Tool Registration
31
+ - **Static hardcoded arrays** in `mapPermissionToTools()`:
32
+ - `GITNEXUS_READ_TOOLS` (5 tools)
33
+ - `SERENA_READ_TOOLS` (21 tools)
34
+ - `SERENA_LOW_TOOLS` (1 tool)
35
+ - `SERENA_WRITE_TOOLS` (20 tools)
36
+ - `GITNEXUS_WRITE_TOOLS` (2 tools)
37
+ - Native tools: `read`, `grep`, `find`, `ls`, `bash`, `edit`, `write`
38
+
39
+ ### Permission Tiers
40
+ ```typescript
41
+ // src/pi/session.ts:225-243
42
+ switch (level?.toUpperCase()) {
43
+ case 'READ_ONLY': return [read, grep, find, ls, ...GITNEXUS_READ, ...SERENA_READ];
44
+ case 'LOW': return [...READ_ONLY, bash, ...SERENA_LOW];
45
+ case 'MEDIUM': return [...LOW, edit, ...SERENA_WRITE, ...GITNEXUS_WRITE];
46
+ case 'HIGH': return [...MEDIUM, write];
47
+ }
48
+ ```
49
+
50
+ ### Capability Tags
51
+ - **None.** Tools grouped by source package, not capability.
52
+
53
+ ### Preference Signals
54
+ - **None.** Native `grep` and `gitnexus_query` coexist with no preference.
55
+
56
+ ### Failure Handling
57
+ - **Silent skip** via `existsSync()` (lines 662-675):
58
+ ```typescript
59
+ if (!excludedExtensions.has(gitnexusPackageName)) {
60
+ const gitnexusPath = join(npmGlobalDir, gitnexusPackageName);
61
+ if (existsSync(gitnexusPath)) args.push('-e', gitnexusPath);
62
+ }
63
+ ```
64
+ - No startup warning, no health probe, no fallback policy.
65
+
66
+ ### Patterns to Adopt
67
+ - Capability tags (Kind enum like Gemini CLI)
68
+ - Soft/hard deny modes for native fallbacks
69
+ - Health probes with `loaded_unhealthy` state
70
+
71
+ ### Patterns to Reject
72
+ - Silent extension skip (makes debugging impossible)
73
+ - No preference signals (causes explorer-uses-grep problem)
74
+
75
+ ---
76
+
77
+ ## 2. Gemini CLI (google-gemini/gemini-cli)
78
+
79
+ **Sources:**
80
+ - ToolRegistry: `packages/core/src/tools/tool-registry.ts`
81
+ - Kind enum: `packages/core/src/tools/tools.ts`
82
+ - PolicyEngine: `packages/core/src/policy/policy.ts`
83
+ - MCP handling: `packages/core/src/tools/mcp-client.ts`
84
+
85
+ ### Tool Registration
86
+ - **ToolRegistry class** with methods:
87
+ - `registerTool(tool: AnyDeclarativeTool)`
88
+ - `unregisterTool(name: string)`
89
+ - `getTool(name: string)`
90
+ - `getAllTools()`
91
+ - `getFunctionDeclarations(modelId?: string)`
92
+ - `discoverAllTools()` — discovers CLI + MCP tools
93
+
94
+ ### Permission Tiers
95
+ - **ApprovalMode enum:** `default`, `auto_edit`, `plan`, `yolo`
96
+ - **PolicyEngine** evaluates `PolicyRule` objects:
97
+ - Decision: `allow`, `deny`, `ask_user`
98
+ - Priority tiers: Admin(5) > User(4) > Workspace(3) > Extension(2) > Default(1)
99
+ - Conditions: `toolName`, `argsPattern`, `mcpName`, `toolAnnotations`, `interactive`, `modes`
100
+
101
+ ### Capability Tags
102
+ - **Kind enum** (12 values):
103
+ - `Read`, `Edit`, `Delete`, `Move`, `Search`, `Execute`, `Think`, `Agent`, `Fetch`, `Communicate`, `Plan`, `SwitchMode`, `Other`
104
+ - Tools declare `kind` property:
105
+ ```typescript
106
+ class ReadFileTool extends DeclarativeTool {
107
+ kind = Kind.Read;
108
+ isReadOnly = true;
109
+ }
110
+ ```
111
+ - `READ_ONLY_KINDS` array filters read-only tools.
112
+
113
+ ### Preference Signals
114
+ - **Policy rules** with wildcards:
115
+ ```toml
116
+ [[rule]]
117
+ toolName = "run_shell_command"
118
+ commandPrefix = "npm test"
119
+ decision = "allow"
120
+ priority = 100
121
+ modes = ["default", "autoEdit"]
122
+ ```
123
+ - `getExcludedTools()` method filters by policy before sending to model.
124
+
125
+ ### Failure Handling
126
+ - **MCP connection states:** `CONNECTING`, `CONNECTED`, `DISCONNECTED`
127
+ - `McpClientManager.getLastError(serverName)` tracks last error
128
+ - `emitDiagnostic()` for detailed diagnostics
129
+ - Tool errors: `isMCPToolError()` checks `isError` property
130
+ - Error sent to model as `functionResponse` for retry
131
+
132
+ ### Patterns to Adopt
133
+ - Kind enum for capability classification
134
+ - PolicyEngine with priority tiers
135
+ - Connection state tracking + `getLastError()`
136
+ - `getExcludedTools()` for preference filtering
137
+
138
+ ---
139
+
140
+ ## 3. Claude Code (anthropics/claude-code)
141
+
142
+ **Sources:**
143
+ - MCP integration: `plugins/plugin-dev/skills/mcp-integration/SKILL.md`
144
+ - Tool usage: `plugins/plugin-dev/skills/mcp-integration/references/tool-usage.md`
145
+ - Server types: `plugins/plugin-dev/skills/mcp-integration/references/server-types.md`
146
+
147
+ ### Tool Registration
148
+ - **MCP config** in `settings.json` or command frontmatter:
149
+ ```json
150
+ {
151
+ "my-server": {
152
+ "command": "npx",
153
+ "args": ["-y", "my-mcp-server"]
154
+ }
155
+ }
156
+ ```
157
+ - **allowed-tools frontmatter** for commands:
158
+ ```markdown
159
+ ---
160
+ allowed-tools: [
161
+ "mcp__plugin_asana_asana__asana_create_task",
162
+ "mcp__plugin_asana_asana__asana_search_tasks"
163
+ ]
164
+ ---
165
+ ```
166
+
167
+ ### Permission Tiers
168
+ - **Permission rules:** `allow`, `deny`, `ask`
169
+ - **Sandbox mode:** PID namespace isolation (Linux)
170
+ - `sandbox.failIfUnavailable` setting
171
+ - **Dangerous path safety checks** for critical directories
172
+ - `PreToolUse` hooks (but `deny` rules take precedence)
173
+
174
+ ### Capability Tags
175
+ - **None.** Tools identified by name pattern.
176
+
177
+ ### Preference Signals
178
+ - **Wildcard patterns** in allowed-tools:
179
+ ```markdown
180
+ allowed-tools: ["mcp__plugin_asana_asana__*"]
181
+ ```
182
+ - Frontmatter scoping per-command.
183
+
184
+ ### Failure Handling
185
+ - **OAuth fixes:** token refresh, timeout handling, `headersHelper`
186
+ - **Connection stability:** `ECONNRESET` retry with fresh TCP, bridge reconnection
187
+ - **Error reporting:** rate limits, API errors, malformed output
188
+ - **Reconnection:** auto-reconnect for SSE, persistent sessions
189
+ - **Tool availability:** first-turn headless sessions, subagent inheritance
190
+
191
+ ### Patterns to Adopt
192
+ - allowed-tools frontmatter for command scoping
193
+ - Sandbox mode with `failIfUnavailable`
194
+ - OAuth reconnection logic
195
+
196
+ ---
197
+
198
+ ## 4. VS Code MCP (microsoft/vscode)
199
+
200
+ **Sources:**
201
+ - `src/vs/workbench/contrib/mcp/common/mcpTypes.ts`
202
+ - `src/vs/platform/mcp/common/mcpManagementService.ts`
203
+ - `src/vs/workbench/services/mcp/common/mcpWorkbenchManagementService.ts`
204
+
205
+ ### Tool Registration
206
+ - **IMcpRegistry** interface
207
+ - **McpGalleryService** for marketplace installation
208
+ - **McpManagementService** for install/uninstall
209
+ - Extension-prefixed identifiers: `ext.packageName/toolName`
210
+
211
+ ### Permission Tiers
212
+ - **Contribution enablement:** `IEnablementModel`
213
+ - `ContributionEnablementState` enum
214
+ - Workspace trust gating
215
+
216
+ ### Capability Tags
217
+ - **McpCapability enum** (referenced in `mcpTypes.ts:25`)
218
+
219
+ ### Preference Signals
220
+ - Extension enablement state controls availability
221
+ - Gallery manifest status
222
+
223
+ ### Failure Handling
224
+ - Connection state tracking
225
+ - Gallery manifest status
226
+ - Workbench service error reporting
227
+
228
+ ### Patterns to Adopt
229
+ - Extension-prefixed tool names (avoids collisions)
230
+ - Gallery-based discovery model
231
+
232
+ ---
233
+
234
+ ## 5. Aider (aider-ai/aider)
235
+
236
+ **Sources:**
237
+ - Model config: `aider/website/docs/config/adv-model-settings.md`
238
+ - Linter config: `aider/website/_posts/2024-05-22-linting.md`
239
+
240
+ ### Tool Registration
241
+ - **--lint-cmd** for external linters:
242
+ ```bash
243
+ aider --lint-cmd javascript:jslint
244
+ ```
245
+ - Model metadata JSON for unrecognized LLMs
246
+
247
+ ### Permission Tiers
248
+ - **None.** LLM controls tool use.
249
+
250
+ ### Capability Tags
251
+ - **None.**
252
+
253
+ ### Preference Signals
254
+ - Built-in linter disabled for TypeScript (prefers ESLint)
255
+
256
+ ### Failure Handling
257
+ - Linter-based feedback loop
258
+
259
+ ### Patterns to Adopt
260
+ - (None directly applicable)
261
+
262
+ ---
263
+
264
+ ## 6. OpenHands (openhands/openhands)
265
+
266
+ **Sources:**
267
+ - CodeAct Agent: `openhands/agenthub/codeact_agent/README.md`
268
+ - Telemetry: `enterprise/doc/design-doc/openhands-enterprise-telemetry-design.md`
269
+
270
+ ### Tool Registration
271
+ - **litellm ChatCompletionToolParam** structure:
272
+ ```python
273
+ MyTool = ChatCompletionToolParam(
274
+ type='function',
275
+ function={
276
+ 'name': 'my_tool',
277
+ 'description': '...',
278
+ 'parameters': {...}
279
+ }
280
+ )
281
+ ```
282
+ - **CollectorRegistry** for metrics (not tools)
283
+
284
+ ### Permission Tiers
285
+ - **None.**
286
+
287
+ ### Capability Tags
288
+ - FunctionDeclaration schema only
289
+
290
+ ### Preference Signals
291
+ - **None.**
292
+
293
+ ### Failure Handling
294
+ - Not documented in available sources
295
+
296
+ ---
297
+
298
+ ## Design Recommendations for gzrx-tool-catalog
299
+
300
+ ### §2 Capability Axes — Adopt Gemini CLI Kind Enum
301
+ **Current:** Capability tags proposed but not standardized.
302
+ **Recommendation:** Align with Gemini CLI's 12-value Kind enum:
303
+ - `Read`, `Edit`, `Delete`, `Move`, `Search`, `Execute`, `Think`, `Agent`, `Fetch`, `Communicate`, `Plan`, `Other`
304
+ - Add `Analyze` for graph operations (GitNexus-specific)
305
+ - Split `memory` into `memory.read` / `memory.write` (as doc already notes)
306
+
307
+ **Source:** Gemini CLI `packages/core/src/tools/tools.ts`
308
+
309
+ ### §3 Tier Policy — Adopt PolicyEngine Pattern
310
+ **Current:** Static tier→tool mapping.
311
+ **Recommendation:** Implement PolicyEngine with:
312
+ - Priority tiers (Admin > User > Workspace > Extension > Default)
313
+ - Rule conditions: `toolName`, `argsPattern`, `mcpName`, `modes`
314
+ - `denied_natives_mode: soft|hard` as proposed
315
+ - `getExcludedTools()` method for filtering
316
+
317
+ **Source:** Gemini CLI `packages/core/src/policy/policy.ts`
318
+
319
+ ### §4 Tool Catalog Schema — Add Extension Prefix
320
+ **Current:** Flat tool names.
321
+ **Recommendation:** Adopt VS Code's extension-prefixed naming:
322
+ - `pi-gitnexus/gitnexus_query`
323
+ - `pi-serena-tools/find_symbol`
324
+ - Avoids collisions, clarifies source
325
+
326
+ **Source:** VS Code `extensionPrefixedIdentifier()` in `mcpTypes.ts`
327
+
328
+ ### §5 Manifest Extension — Add allowed-tools Frontmatter
329
+ **Current:** Manifest at tier level only.
330
+ **Recommendation:** Add Claude Code-style allowed-tools for specialist-level scoping:
331
+ ```json
332
+ "specialists": {
333
+ "explorer": {
334
+ "allowed_tools": ["gitnexus_*", "serena:read_*"],
335
+ "denied_natives_mode": "hard"
336
+ }
337
+ }
338
+ ```
339
+
340
+ **Source:** Claude Code `allowed-tools` frontmatter
341
+
342
+ ### §6 Resolved-Debug — Add Health Probes
343
+ **Current:** Silent extension skip.
344
+ **Recommendation:** Implement Gemini CLI-style health probes:
345
+ - `not_installed`, `disabled`, `loaded_healthy`, `loaded_unhealthy`
346
+ - `getLastError()` for MCP servers
347
+ - `/mcp list` equivalent in `sp config show --resolved`
348
+
349
+ **Source:** Gemini CLI `McpClientManager.getLastError()`, `MCPServerStatus`
350
+
351
+ ### §7 Migration — Add Soft Deny First
352
+ **Current:** No preference signals.
353
+ **Recommendation:** Phase 1 = soft deny via prompt instruction (no tool removal).
354
+ - Add `preferred_over` metadata to catalog
355
+ - System prompt: "Prefer gitnexus_query over grep when GitNexus is loaded"
356
+ - Phase 2 = hard deny after verification
357
+
358
+ **Source:** Gemini CLI `getExcludedTools()` pattern
359
+
360
+ ---
361
+
362
+ ## Anti-Patterns to Avoid
363
+
364
+ 1. **Silent extension skip** (pi-mono current) — makes debugging impossible
365
+ 2. **No capability tags** (pi-mono, Claude Code) — prevents intelligent filtering
366
+ 3. **Static tier mapping** (pi-mono) — no runtime adaptation
367
+ 4. **No health probes** (pi-mono) — can't distinguish `not_installed` from `loaded_unhealthy`
368
+ 5. **No preference signals** (pi-mono, Aider, OpenHands) — causes explorer-uses-grep problem
369
+
370
+ ---
371
+
372
+ ## Sources Cited
373
+
374
+ 1. `src/pi/session.ts` (pi-mono) — lines 156-243, 643-675
375
+ 2. Gemini CLI ToolRegistry — `packages/core/src/tools/tool-registry.ts`
376
+ 3. Gemini CLI Kind enum — `packages/core/src/tools/tools.ts`
377
+ 4. Gemini CLI PolicyEngine — `packages/core/src/policy/policy.ts`
378
+ 5. Gemini CLI MCP handling — `packages/core/src/tools/mcp-client.ts`
379
+ 6. Claude Code MCP integration — `plugins/plugin-dev/skills/mcp-integration/SKILL.md`
380
+ 7. Claude Code allowed-tools — `plugins/plugin-dev/skills/mcp-integration/references/tool-usage.md`
381
+ 8. VS Code MCP types — `src/vs/workbench/contrib/mcp/common/mcpTypes.ts`
382
+ 9. VS Code MCP management — `src/vs/platform/mcp/common/mcpManagementService.ts`
383
+ 10. Aider linter config — `aider/website/_posts/2024-05-22-linting.md`
384
+ 11. OpenHands CodeAct — `openhands/agenthub/codeact_agent/README.md`
385
+ 12. pi-gitnexus tools — `/home/dawid/.nvm/.../pi-gitnexus/dist/tools.js`
386
+ 13. pi-serena-tools — `/home/dawid/.nvm/.../pi-serena-tools/serenaTools.ts`
387
+
388
+ ---
389
+
390
+ ## Confidence Levels
391
+
392
+ | Finding | Confidence | Source Quality |
393
+ |---------|------------|----------------|
394
+ | pi-mono tool registration | HIGH | Direct code read |
395
+ | Gemini CLI Kind enum | HIGH | Direct code read |
396
+ | Gemini CLI PolicyEngine | HIGH | DeepWiki + code |
397
+ | Claude Code allowed-tools | MEDIUM | Docs only (no code access) |
398
+ | VS Code MCP types | MEDIUM | ghgrep snippets |
399
+ | Aider tool model | LOW | Docs only |
400
+ | OpenHands tool registry | MEDIUM | DeepWiki + code snippets |
401
+