@jaggerxtrm/specialists 3.17.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.
- package/README.md +268 -134
- package/config/mandatory-rules/json-only-final-output.md +13 -0
- package/config/mandatory-rules/service-skills-diff-scan-mandatory.md +26 -0
- package/config/mandatory-rules/service-skills-gitnexus-triage.md +5 -0
- package/config/skills/setup-specialists/SKILL.md +556 -0
- package/config/skills/specialists-creator/SKILL.md +132 -4
- package/config/skills/specialists-creator/scripts/audit-spec-uniformity.mjs +1 -1
- package/config/specialists/bare.specialist.json +3 -3
- package/config/specialists/changelog-drafter.specialist.json +5 -4
- package/config/specialists/changelog-keeper.specialist.json +7 -6
- package/config/specialists/debugger.specialist.json +2 -2
- package/config/specialists/executor.specialist.json +2 -2
- package/config/specialists/explorer.specialist.json +4 -4
- package/config/specialists/memory-processor.specialist.json +3 -3
- package/config/specialists/node-coordinator.specialist.json +3 -3
- package/config/specialists/obligations-scanner.specialist.json +67 -17
- package/config/specialists/overthinker.specialist.json +3 -3
- package/config/specialists/planner.specialist.json +4 -4
- package/config/specialists/quant-methodologist.specialist.json +145 -0
- package/config/specialists/quant-researcher.specialist.json +144 -0
- package/config/specialists/researcher.specialist.json +5 -5
- package/config/specialists/reviewer.specialist.json +1 -1
- package/config/specialists/seconder.specialist.json +2 -2
- package/config/specialists/security-auditor.specialist.json +2 -2
- package/config/specialists/service-skills-sync.specialist.json +90 -75
- package/config/specialists/specialists-creator.specialist.json +4 -4
- package/config/specialists/sync-docs.specialist.json +4 -4
- package/config/specialists/test-engineer.specialist.json +3 -3
- package/config/specialists/test-runner.specialist.json +7 -7
- package/config/specialists/transcriber.specialist.json +3 -3
- package/config/specialists/xt-merge.specialist.json +4 -4
- package/dist/asset-contract.json +21 -2
- package/dist/index.js +25704 -16376
- package/dist/lib.js +9849 -6147
- package/dist/types/cli/console/components.d.ts +83 -0
- package/dist/types/cli/console/components.d.ts.map +1 -0
- package/dist/types/cli/console/config-source.d.ts +58 -0
- package/dist/types/cli/console/config-source.d.ts.map +1 -0
- package/dist/types/cli/console/forensic.d.ts +11 -0
- package/dist/types/cli/console/forensic.d.ts.map +1 -0
- package/dist/types/cli/console/git.d.ts +28 -0
- package/dist/types/cli/console/git.d.ts.map +1 -0
- package/dist/types/cli/console/help.d.ts +2 -0
- package/dist/types/cli/console/help.d.ts.map +1 -0
- package/dist/types/cli/console/log.d.ts +13 -0
- package/dist/types/cli/console/log.d.ts.map +1 -0
- package/dist/types/cli/console/repo-config.d.ts +26 -0
- package/dist/types/cli/console/repo-config.d.ts.map +1 -0
- package/dist/types/cli/console/repo-discovery.d.ts +12 -0
- package/dist/types/cli/console/repo-discovery.d.ts.map +1 -0
- package/dist/types/cli/console/runtime.d.ts +12 -0
- package/dist/types/cli/console/runtime.d.ts.map +1 -0
- package/dist/types/cli/console/subscribe-prototype.d.ts +18 -0
- package/dist/types/cli/console/subscribe-prototype.d.ts.map +1 -0
- package/dist/types/cli/console/theme.d.ts +91 -0
- package/dist/types/cli/console/theme.d.ts.map +1 -0
- package/dist/types/cli/console/types.d.ts +231 -0
- package/dist/types/cli/console/types.d.ts.map +1 -0
- package/dist/types/cli/console/view-model.d.ts +252 -0
- package/dist/types/cli/console/view-model.d.ts.map +1 -0
- package/dist/types/cli/console.d.ts +2 -0
- package/dist/types/cli/console.d.ts.map +1 -0
- package/dist/types/cli/db.d.ts.map +1 -1
- package/dist/types/cli/doctor.d.ts.map +1 -1
- package/dist/types/cli/edit.d.ts.map +1 -1
- package/dist/types/cli/epic.d.ts.map +1 -1
- package/dist/types/cli/feed.d.ts.map +1 -1
- package/dist/types/cli/forensic.d.ts +2 -0
- package/dist/types/cli/forensic.d.ts.map +1 -0
- package/dist/types/cli/format-helpers.d.ts +4 -2
- package/dist/types/cli/format-helpers.d.ts.map +1 -1
- package/dist/types/cli/help.d.ts.map +1 -1
- package/dist/types/cli/init.d.ts +10 -0
- package/dist/types/cli/init.d.ts.map +1 -1
- package/dist/types/cli/list.d.ts.map +1 -1
- package/dist/types/cli/log.d.ts.map +1 -1
- package/dist/types/cli/metrics.d.ts +2 -0
- package/dist/types/cli/metrics.d.ts.map +1 -0
- package/dist/types/cli/ps.d.ts.map +1 -1
- package/dist/types/cli/result.d.ts.map +1 -1
- package/dist/types/cli/run.d.ts +1 -0
- package/dist/types/cli/run.d.ts.map +1 -1
- package/dist/types/cli/script.d.ts +3 -0
- package/dist/types/cli/script.d.ts.map +1 -1
- package/dist/types/cli/serve.d.ts.map +1 -1
- package/dist/types/cli/setup.d.ts +19 -1
- package/dist/types/cli/setup.d.ts.map +1 -1
- package/dist/types/cli/status.d.ts.map +1 -1
- package/dist/types/cli/version-check.d.ts +1 -0
- package/dist/types/cli/version-check.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/pi/session.d.ts +11 -1
- package/dist/types/pi/session.d.ts.map +1 -1
- package/dist/types/server.d.ts +15 -0
- package/dist/types/server.d.ts.map +1 -1
- package/dist/types/specialist/benchmarks.d.ts +37 -0
- package/dist/types/specialist/benchmarks.d.ts.map +1 -0
- package/dist/types/specialist/chain-identity.d.ts +7 -1
- package/dist/types/specialist/chain-identity.d.ts.map +1 -1
- package/dist/types/specialist/control.d.ts.map +1 -1
- package/dist/types/specialist/forensic-events.d.ts +138 -0
- package/dist/types/specialist/forensic-events.d.ts.map +1 -0
- package/dist/types/specialist/forensic-renderer.d.ts +34 -0
- package/dist/types/specialist/forensic-renderer.d.ts.map +1 -0
- package/dist/types/specialist/git-diff-evidence.d.ts +28 -0
- package/dist/types/specialist/git-diff-evidence.d.ts.map +1 -0
- package/dist/types/specialist/global-config.d.ts +389 -0
- package/dist/types/specialist/global-config.d.ts.map +1 -0
- package/dist/types/specialist/launch.d.ts +1 -0
- package/dist/types/specialist/launch.d.ts.map +1 -1
- package/dist/types/specialist/live-aggregates.d.ts +46 -0
- package/dist/types/specialist/live-aggregates.d.ts.map +1 -0
- package/dist/types/specialist/loader.d.ts +50 -1
- package/dist/types/specialist/loader.d.ts.map +1 -1
- package/dist/types/specialist/model-chain.d.ts +7 -0
- package/dist/types/specialist/model-chain.d.ts.map +1 -0
- package/dist/types/specialist/model-probes.d.ts +28 -0
- package/dist/types/specialist/model-probes.d.ts.map +1 -0
- package/dist/types/specialist/node-contract.d.ts +18 -18
- package/dist/types/specialist/node-supervisor.d.ts.map +1 -1
- package/dist/types/specialist/observability-db.d.ts +1 -1
- package/dist/types/specialist/observability-db.d.ts.map +1 -1
- package/dist/types/specialist/observability-sqlite.d.ts +25 -0
- package/dist/types/specialist/observability-sqlite.d.ts.map +1 -1
- package/dist/types/specialist/preset-resolver.d.ts +56 -0
- package/dist/types/specialist/preset-resolver.d.ts.map +1 -0
- package/dist/types/specialist/prometheus-projection.d.ts +25 -0
- package/dist/types/specialist/prometheus-projection.d.ts.map +1 -0
- package/dist/types/specialist/runner.d.ts +26 -1
- package/dist/types/specialist/runner.d.ts.map +1 -1
- package/dist/types/specialist/schema.d.ts +163 -54
- package/dist/types/specialist/schema.d.ts.map +1 -1
- package/dist/types/specialist/script-runner.d.ts +5 -1
- package/dist/types/specialist/script-runner.d.ts.map +1 -1
- package/dist/types/specialist/snapshot-diff.d.ts +8 -0
- package/dist/types/specialist/snapshot-diff.d.ts.map +1 -0
- package/dist/types/specialist/source-queue.d.ts +13 -0
- package/dist/types/specialist/source-queue.d.ts.map +1 -0
- package/dist/types/specialist/supervisor.d.ts +15 -1
- package/dist/types/specialist/supervisor.d.ts.map +1 -1
- package/dist/types/specialist/timeline-events.d.ts +68 -1
- package/dist/types/specialist/timeline-events.d.ts.map +1 -1
- package/dist/types/tools/specialist/resume_specialist.tool.d.ts +4 -4
- package/dist/types/tools/specialist/specialist_status.tool.d.ts +1 -1
- package/dist/types/tools/specialist/steer_specialist.tool.d.ts +4 -4
- package/dist/types/tools/specialist/use_specialist.tool.d.ts +16 -16
- package/docs/ARCHITECTURE.md +1176 -0
- package/docs/TODO.md +9 -0
- package/docs/architecture.md +11 -0
- package/docs/archive/2026-03-13-bd-decision-context-template-plan.md +96 -0
- package/docs/archive/AGENT-HANDOFF.md +351 -0
- package/docs/archive/PARITY-ANALYSIS.md +296 -0
- package/docs/archive/SPECIALISTS_REFACTOR.md.md +30 -0
- package/docs/archive/cc-programmatic.md +216 -0
- package/docs/archive/claude-agent-sdk.md +594 -0
- package/docs/archive/decision-specialist-directory.md +41 -0
- package/docs/archive/discoveries.md +148 -0
- package/docs/archive/executor-benchmark-protocol.md +198 -0
- package/docs/archive/future-features.md +66 -0
- package/docs/archive/gzrx-completion-critique.md +183 -0
- package/docs/archive/gzrx-research-notes.md +401 -0
- package/docs/archive/gzrx-tool-catalog.md +760 -0
- package/docs/archive/iron-review-hardening-qa-chain-substrate.md +322 -0
- package/docs/archive/iron-review-hardening.html +1004 -0
- package/docs/archive/issuetracking.md +312 -0
- package/docs/archive/qa-v3.0.2.md +220 -0
- package/docs/archive/restructure.md +231 -0
- package/docs/archive/script-specialists.md +1254 -0
- package/docs/archive/spec-v3.md +792 -0
- package/docs/archive/specialist-stats.md +127 -0
- package/docs/archive/specialists-friction-audit.md +1347 -0
- package/docs/archive/specialists-runtime-critique.md +170 -0
- package/docs/archive/specialists-service-evaluation.md +713 -0
- package/docs/archive/specialists-substrate-alignment.md +255 -0
- package/docs/archive/substrate-review.md +1288 -0
- package/docs/archive/test-writer-specialist.md +254 -0
- package/docs/archive/using-specialists-v3-improvements-2026-05-09.md +600 -0
- package/docs/archive/xtrm-specialists-analysis.md +314 -0
- package/docs/authoring.md +701 -0
- package/docs/background-jobs.md +203 -0
- package/docs/bare-specialists.md +83 -0
- package/docs/benchmarks/executor-benchmark-runner.md +66 -0
- package/docs/bootstrap.md +161 -0
- package/docs/cli-reference.md +1645 -0
- package/docs/deploying-alongside.md +155 -0
- package/docs/design/README.md +36 -0
- package/docs/design/darth-feedor-migration.md +290 -0
- package/docs/design/roadmap/README.md +32 -0
- package/docs/design/roadmap/chain-templates/README.md +146 -0
- package/docs/design/roadmap/chain-templates/code-quick.formula.json +27 -0
- package/docs/design/roadmap/chain-templates/code-standard.formula.json +126 -0
- package/docs/design/roadmap/chain-templates/code-with-advisors.formula.json +128 -0
- package/docs/design/roadmap/chain-templates/code-with-tests.formula.json +76 -0
- package/docs/design/roadmap/chain-templates/debug.formula.json +128 -0
- package/docs/design/roadmap/chain-templates/doc-sync.formula.json +28 -0
- package/docs/design/roadmap/chain-templates/memory-hygiene.formula.json +27 -0
- package/docs/design/roadmap/chain-templates/planning.formula.json +27 -0
- package/docs/design/roadmap/chain-templates/premortem.formula.json +26 -0
- package/docs/design/roadmap/chain-templates/release-prep.formula.json +36 -0
- package/docs/design/roadmap/chain-templates/research-only.formula.json +28 -0
- package/docs/design/roadmap/chain-templates/restitch.formula.json +125 -0
- package/docs/design/roadmap/chain-templates/security-deep.formula.json +161 -0
- package/docs/design/roadmap/chain-templates/test-only.formula.json +52 -0
- package/docs/design/roadmap/chain-templates/triage.formula.json +35 -0
- package/docs/design/roadmap/history/handoff-from-substrate-design.md +87 -0
- package/docs/design/roadmap/history/substrate-reconciliation.md +105 -0
- package/docs/design/roadmap/specialists-roadmap.md +1193 -0
- package/docs/design/sp-console-subscribe-via-materializer.md +231 -0
- package/docs/design/sp-console-tui-mock-v2.html +293 -0
- package/docs/design/sp-console-tui-mock.html +120 -0
- package/docs/design/sp-console-tui.md +340 -0
- package/docs/design/specialist-agentops-suite.md +323 -0
- package/docs/design/substrate/channels.md +14 -0
- package/docs/design/substrate/devops-platform-engineering-prd.md +446 -0
- package/docs/design/substrate/html-design-example.md +339 -0
- package/docs/design/xtrm-tiers-architecture.svg +132 -0
- package/docs/devops/dependency-verdict-materialization.md +46 -0
- package/docs/epic-readiness.md +75 -0
- package/docs/examples/mercury-atomic-summarizer.specialist.json +26 -0
- package/docs/examples/smoke-echo-text-expected-keys.specialist.json +25 -0
- package/docs/examples/smoke-echo.specialist.json +25 -0
- package/docs/features.md +1577 -0
- package/docs/hooks.md +81 -0
- package/docs/installation.md +142 -0
- package/docs/manifest.md +184 -0
- package/docs/mcp-servers.md +73 -0
- package/docs/mcp-tools.md +71 -0
- package/docs/nodes.md +231 -0
- package/docs/observability-metrics.md +152 -0
- package/docs/operator/sp-console-v2-walkthrough.md +410 -0
- package/docs/overrides-guide.md +306 -0
- package/docs/pi-rpc-boundary.md +118 -0
- package/docs/pi-session.md +195 -0
- package/docs/release.md +22 -0
- package/docs/skills.md +132 -0
- package/docs/specialists/handoff-schema.md +181 -0
- package/docs/specialists-catalog.md +99 -0
- package/docs/specialists-service-install.md +226 -0
- package/docs/specialists-service.md +363 -0
- package/docs/surface-ownership.md +138 -0
- package/docs/upgrade-notes/kan-90-global-user-config.md +114 -0
- package/docs/upgrade-notes/kan-91-expanded-overrides.md +261 -0
- package/docs/workflow.md +114 -0
- package/docs/worktree.md +71 -0
- package/docs/worktrees.md +309 -0
- package/package.json +6 -3
|
@@ -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
|
+
|