CLI and MCP server for managing skills across ~45 code CLI agents — Claude Code, Cursor, Codex, Goose, Gemini CLI, OpenCode, GitHub Copilot, Windsurf, OpenHands, Qwen Code, and more. List, search, install, enable, disable, and sync skills across tools.
Server provides 7 tools with clear verb-noun naming (list_tools, detect_tool, add_custom_tool, etc.). All tools have descriptions (avg ~120 chars, within baseline 34-392 range). Input schemas are present with type definitions and parameter descriptions. However, output schemas are not documented in the visible code, responses are inferred from implementation rather than explicitly declared. Error handling is minimal; no recovery guidance or actionable error messages visible. Tool descriptions lack WHEN/WHY context and prerequisites. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications (READ_ONLY vs WRITE). Parameter descriptions are adequate but lack format constraints, ranges, or validation rules.
Register a user-defined custom CLI agent by key + display name + absolute skills directory. Persists in ~/.config/swarmskills/config.json.
Remove the configured default tool (subsequent calls revert to claude-code).
Probe a single tool key and return its skills directory + installed status.
Return the effective default tool (used when no `tool` is passed) and the values that fed into it (config, env, fallback).
Return the registry of supported CLI agents (Claude Code, Cursor, Codex, Goose, Gemini CLI, OpenCode, GitHub Copilot, Windsurf, ~45 in total) with their skills directories and detected/installed status.
Unregister a previously-added custom tool.
Output schemas not documented. Tool responses are inferred from implementation; LLMs cannot predict return structure or plan downstream calls. Baseline: 100% of A+ tools have documented return types.
Tool annotations missing. Tools have clear risk classifications (READ_ONLY vs WRITE) but do not declare readOnlyHint or destructiveHint. Agents cannot distinguish safe from destructive operations without reading descriptions.
Error handling lacks recovery guidance. No visible error messages that tell LLMs what to do next (e.g., 'Tool not found. Try list_tools() to see available options'). Baseline: error responses must guide recovery.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Persist the default tool key in ~/.config/swarmskills/config.json so subsequent calls without an explicit `tool` use it. Pass key='all' to default to cross-tool discovery.
Parameter descriptions lack format constraints and validation rules. E.g., 'key' parameter has no length limits, character restrictions, or pattern guidance. Baseline: descriptions should state format, range, and allowed values.
Tool descriptions lack WHEN/WHY context. E.g., 'set_default_tool' does not explain when to use it vs inline --tool flags, or that it persists across sessions. Descriptions should guide tool selection.