5.5 KiB
Hermes Agent ACP Registry + Zed Integration Implementation Plan
For Hermes: Use subagent-driven-development skill to implement this plan task-by-task.
Goal: Make Hermes Agent installable from Zed's official ACP Registry, so users can add Hermes from Zed's agent panel without manual custom agent_servers settings.
Architecture: Use the official agentclientprotocol/registry flow instead of the deprecated Zed Agent Server Extension path. Ship a registry-compatible launcher distribution, advertise valid ACP auth methods during every handshake, validate against official registry schema and auth CI, then submit a registry PR for hermes-agent.
Tech Stack: Hermes Agent Python package, ACP adapter (hermes acp / hermes-acp), npm launcher package, official ACP Registry JSON schema, Zed external agent UI.
Compliance constraints
- Zed v0.221.x+ prefers the ACP Registry for external agents; do not use Zed Agent Server Extensions for distribution.
- Registry repo layout is top-level
hermes-agent/agent.jsonandhermes-agent/icon.svg, notagents/hermes-agent/. - Registry metadata must use the official schema:
id,name,version,description,distribution, optionalrepository,website,authors,license. - Distribution must be exactly one supported type unless intentionally adding another:
binary,npx, oruvx. - Hermes must advertise at least one valid
authMethodsentry on a clean first-run handshake. No-provider/no-auth is not compliant. - Terminal Auth must be explicit and deterministic:
id: hermes-setup,type: terminal,args: ["--setup"]. icon.svgmust be 16x16, square, monochrome, and use onlycurrentColor/nonefor fill/stroke; no gradients, hardcoded colors, orurl(#...)paints.- ACP server mode must reserve stdout for JSON-RPC only. Diagnostics/logs go to stderr.
--version,--check, and--setupare not server mode and may print normally. - Published npm package must exist and be runnable before the upstream registry PR references it.
Tasks
-
Verify/implement ACP auth methods.
- Always return terminal setup auth from
initialize(). - Return configured provider auth in addition when provider credentials are resolvable.
- Add tests for provider auth, terminal fallback auth, and authenticate behavior before/after provider setup.
- Always return terminal setup auth from
-
Add non-interactive ACP commands.
hermes acp --versionhermes acp --checkhermes acp --setup- Same behavior through
hermes-acp.
-
Build npm launcher package.
- Package:
@nousresearch/hermes-agent-acp@<version>. - Command:
uvx --from 'hermes-agent[acp]==<version>' hermes-acp ...args. - Fallback:
uv tool run --from ...when onlyuvexists. - Forward all args, including
--setup,--version, and--check. - Preserve stdio in server mode.
- Print actionable stderr error when
uv/uvxis missing.
- Package:
-
Replace local registry metadata.
- Convert
acp_registry/agent.jsonfrom old command-style local format to official registry schema. - Replace
acp_registry/icon.svgwith compliant 16x16 currentColor icon. - Add tests rejecting old fields (
schema_version,display_name,distribution.type,distribution.command) and unknown distribution keys.
- Convert
-
Update docs.
- Zed docs show official ACP Registry install first: Add Agent /
zed: acp registry-> search Hermes Agent -> install. - Manual
agent_serversJSON remains only as local-development fallback. - Docs include
uvprerequisite andhermes acp --checktroubleshooting. - Developer internals mention npm launcher and terminal setup auth.
- Zed docs show official ACP Registry install first: Add Agent /
-
Validate locally.
python -m pytest tests/acp/test_auth.py tests/acp/test_server.py tests/acp/test_entry.py tests/acp/test_registry_manifest.py -q(cd packages/hermes-agent-acp && npm test)(cd packages/hermes-agent-acp && npm pack --dry-run)hermes acp --versionhermes acp --check
-
Validate against official registry tooling before PR.
- In a clone/fork of
agentclientprotocol/registry, copy files into top-levelhermes-agent/. - Run official dry-run build, e.g.
uv run --with jsonschema .github/workflows/build_registry.py --dry-run. - Run official auth check if available, e.g.
.github/workflows/scripts/run-registry-docker.sh python3 .github/workflows/verify_agents.py --auth-check. - Fix any schema/auth issues before submitting.
- In a clone/fork of
-
Publish and submit.
- Publish
@nousresearch/hermes-agent-acp@<version>. - Verify published package:
npx @nousresearch/hermes-agent-acp@<version> --versionnpx @nousresearch/hermes-agent-acp@<version> --check- ACP initialize/authMethods smoke test through the published package.
- Open PR to
agentclientprotocol/registryaddinghermes-agent/agent.jsonandhermes-agent/icon.svg.
- Publish
-
End-to-end Zed verification.
- Install Hermes Agent through Zed's ACP Registry.
- Start a Hermes thread.
- Verify workspace cwd, file tools, terminal tools, tool rendering, and approval prompts.
Acceptance criteria
- Hermes appears in Zed's official ACP Registry UI.
- Install starts Hermes without custom Zed settings.
- Registry CI passes schema and auth validation.
- ACP stdout remains JSON-RPC only; all logs go to stderr.
authMethodsare present and valid on clean first run.- Terminal Auth can launch Hermes provider/model setup with
--setup. - Zed workspace cwd is honored by Hermes file and terminal tools.
- Docs describe registry install first and manual custom config second.
- Package/release automation prevents registry entries from pointing at unpublished versions.