Adding agent integrations
September 5, 2026 ยท View on GitHub
Minutes has several agent surfaces. Do not add a new agent by copying an existing integration wholesale. Pick the smallest surface that matches what the host actually supports.
Install the Claude Code plugin
The repository is a Claude Code plugin marketplace. Add it, then install the Minutes plugin:
claude plugin marketplace add silverstein/minutes
claude plugin install minutes@minutes
The plugin starts npx -y minutes-mcp automatically, so its Minutes tools are
available without a separate MCP configuration.
MCP server CLI auto-install
When an MCP host starts minutes-mcp without a compatible Minutes CLI, the
server installs a checksum-verified release asset. On Apple Silicon (including
Node running under Rosetta), it selects minutes-macos-arm64-sherpa.tar.gz,
which contains the CLI and its Developer ID-signed sherpa plugin. The server
extracts into a temporary directory, confirms the staged CLI runs, and then
atomically replaces the installed binary and plugin. Releases from before the
archive existed fall back to the checksum-verified bare macOS binary and log
that Parakeet is unavailable.
After installation, a default engine = "auto" health check that finds the
plugin but no Parakeet model triggers plain minutes setup. That installs the
Parakeet model and the Whisper tiny fallback without changing explicit engine
choices.
For a host that only reads existing transcripts, set MINUTES_MCP_AUTO_SETUP to "0" in the MCP server's environment to skip speech-model health checks and downloads. The generated minutes-mcp --demo configuration sets this option. The CLI remains required for meeting access rules and can still be installed automatically. Before recording, use the desktop setup or minutes setup to prepare the speech model.
MEETINGS_DIR selects the corpus for MCP recall tools, including consistency reports. The server passes that folder explicitly to minutes consistency --dir <folder> and requires a CLI with the consistency_corpus_root_v1 capability. An older CLI must be updated before it can produce this report; the server does not fall back to a different meeting library.
Surfaces
| Surface | Use when | Examples |
|---|---|---|
| Raw files | The agent can read ~/meetings/ directly. | Cursor, any local coding agent |
| MCP server | The host supports MCP tools/resources/prompts. | Claude Desktop, Codex, Gemini CLI, OpenClaw, Hermes-agent |
| Portable skills | The host discovers Agent Skills-style .agents/skills folders. | Codex, Gemini CLI, Pi, OpenClaw, Hermes-agent |
| Host-specific skills | The host needs a different generated shape. | Claude Code plugin, OpenCode commands |
agent_command backend | Minutes should call the agent CLI for summaries. | claude, codex, opencode, pi, agent (Cursor Agent CLI) |
| OpenAI-compatible model backend | Minutes should call a model API directly, not an agent CLI. | OpenRouter, Vercel AI Gateway, Cloudflare AI Gateway, llama.cpp, vLLM |
| Routing eval | The agent has a non-interactive prompt mode worth benchmarking. | npm --prefix tooling/skills run routing:agents -- --agent codex |
Agent hosts vs model providers
Do not treat every AI brand as an agent integration. Minutes has two separate contracts:
- Agent hosts run their own agent loop, tool policy, memory, and prompt wrapper.
They belong in
agent_commandonly when Minutes can safely invoke them non-interactively and capture stdout. - Model providers expose inference APIs. They belong behind a direct summarization backend, ideally a generic OpenAI-compatible backend with provider presets.
OpenCode is an agent host. It can use many providers internally, but that only
covers the agent_command = "opencode" path. It does not replace Minutes
supporting direct model backends for users who want summaries without an
external coding-agent loop.
Model backend candidates
Prefer one generic OpenAI-compatible backend over one engine per provider. That keeps settings small and lets advanced users bring their own gateway or local runtime.
| Backend | Classification | Notes |
|---|---|---|
| Ollama | Local model runtime | Already supported directly as engine = "ollama"; can also be reached through its OpenAI-compatible endpoint. |
| llama.cpp / llama-cpp-python | Local model runtime | Support through an OpenAI-compatible base_url; do not add as an agent option. |
| vLLM / LM Studio / LocalAI | Local or self-hosted runtime | Support through the same OpenAI-compatible path when available. |
| OpenRouter | Cloud model router | Good preset for one-key access to many providers; transcripts leave the machine. |
| Vercel AI Gateway | Cloud model gateway | Good preset for hosted apps and teams already using Vercel; transcripts leave the machine. |
| Cloudflare AI Gateway | Cloud model gateway | Good preset for observability, rate limits, caching, retries, and Cloudflare-managed routing; transcripts leave the machine unless the upstream is local/private. |
Recommended config shape for future direct backends:
[summarization]
engine = "openai-compatible"
openai_compatible_model = "openai/gpt-4o-mini"
openai_compatible_base_url = "https://gateway.example.com/v1"
openai_compatible_api_key_env = "AI_GATEWAY_API_KEY"
In the desktop app, cloud gateway presets use the same backend with a friendlier
secret path: users paste the key in Settings, Minutes stores it in macOS
Keychain, and the app hydrates MINUTES_OPENAI_COMPATIBLE_API_KEY for its own
summarization calls. Keep provider-specific env vars as the CLI/power-user
fallback, not as the default desktop experience.
Checklist
-
Identify the host contract.
- Can it read files?
- Does it support MCP?
- Does it auto-discover
.agents/skills? - Does it require a host-specific skill tree?
- Does it have a non-interactive CLI mode?
-
If the host can reuse
.agents/skills, do not generate a duplicate tree. Duplicate skill names can create collisions and make the agent less reliable. -
If the host needs a generated skill surface, update:
tooling/skills/schema.tstooling/skills/hosts/tooling/skills/compiler/render.tstooling/skills/compiler/compile.tstooling/skills/compiler/check.tstooling/skills/compiler/golden.ts- generated outputs under the host-specific tree
-
If the host should be callable from Minutes summarization, update:
crates/core/src/summarize.rs- targeted
prepare_agent_invocation_*tests tauri/src-tauri/src/commands.rstauri/src/index.htmldocs/architecture/config.md
-
If adding a direct model backend rather than an agent host, update:
crates/core/src/summarize.rsSummarizationConfigincrates/core/src/config.rs- desktop settings and validation in
tauri/src-tauri/src/commands.rs tauri/src/index.htmldocs/architecture/config.md- provider-specific docs only when there are real caveats
-
If the host should participate in routing evals, update:
tooling/skills/compiler/agent-routing.tstooling/skills/compiler/agent-routing.test.tsif parsing or unavailable handling changes
-
Update public and agent-facing docs:
README.mdsite/app/for-agents/page.tsxsite/lib/product-surfaces.jsonmanifest.jsondocs/architecture/config.mddocs/<agent>.mdwhen the host has provider-specific caveats- run
node scripts/generate_llms_txt.mjs
-
Run the relevant gates:
cargo fmt- targeted Rust tests for the invocation path
cargo check -p minutes-appnpm --prefix tooling/skills run buildnpm --prefix tooling/skills run compile:drynpm --prefix tooling/skills run checknpm --prefix tooling/skills run testnpm --prefix site run check:llmsnpm --prefix site run buildwhen site pages changed
Current agent classes
- Claude Code: host-specific plugin surface plus MCP.
- OpenCode: host-specific
.opencode/skillsand.opencode/commands, plus MCP when configured. - Codex: portable
.agents/skillsplus MCP. - Gemini CLI: portable
.agents/skillsplus MCP. - Pi coding agent: portable
.agents/skillsplus opt-inagent_command = "pi"summarization. No separate.pi/skillstree. - Cursor: raw meeting files and MCP where the host supports it, plus opt-in
agent_command = "agent"(Cursor Agent CLI) for non-interactive summarization. See cursor-agent.md.
Experimental runtime watchlist
These are real enough to mention but should not become first-class UI options until a small spike proves the command contract:
| Runtime | Why it matters | Integration posture |
|---|---|---|
| Goose | Open-source on-machine agent with CLI, API, MCP extensions, and custom OpenAI-compatible provider support. | Spike as agent_command only if goose has a clean non-interactive run mode for transcript summaries. |
| Hermes Agent | Persistent personal agent with gateway, memory, skills, browser control, OpenRouter, custom APIs, and local vLLM support. | Treat as an experimental agent host and portable-skills target; verify non-interactive stdout behavior first. |
| OpenClaw | Local-first personal automation gateway with many messaging channels, tools, and daemon-style routing. | Prefer webhook/notification recipes first; only add agent_command after a security review and command-contract spike. |
| Aider | Open-source terminal pair programmer with broad model support, including OpenRouter. | Coding-focused; verify read-only, non-editing summarization behavior before exposing. |
| OpenHands | Open-source agent platform and SDK with local and sandboxed deployment modes. | Advanced/platform integration, not a simple dropdown peer to Codex or OpenCode. |
When in doubt, prefer the raw file or MCP path first. Add a custom host surface only when the agent cannot consume the existing portable one.