You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Implement a universal ACP (Agent Client Protocol) Worker that enables HotPlex to connect with any ACP-compatible agent via stdio (JSON-RPC 2.0). Hermes Agent is the first pilot implementation.
HotPlex currently supports 3 Workers (ClaudeCode / CodexCLI / OpenCodeServer), each with a private protocol. Adding a new agent requires writing a complete Worker from scratch. ACP is an open protocol adopted by Claude Code, Codex CLI, OpenCode, Hermes, and more — one generic Worker serves all.
Implementation Plan
P0 — MVP
AEP Protocol Extension (pkg/events/events.go)
Add 3 new Kind constants: ToolUpdate, Plan, ModeUpdate
Add 5 new Data structs: ToolUpdateData, PlanData, PlanItem, ModeUpdateData, FileLocation, FileDiff
Extend ToolCallData with Title, Kind, Status, Locations
Summary
Implement a universal ACP (Agent Client Protocol) Worker that enables HotPlex to connect with any ACP-compatible agent via stdio (JSON-RPC 2.0). Hermes Agent is the first pilot implementation.
Design spec:
docs/specs/ACP-Worker-Spec.mdMotivation
HotPlex currently supports 3 Workers (ClaudeCode / CodexCLI / OpenCodeServer), each with a private protocol. Adding a new agent requires writing a complete Worker from scratch. ACP is an open protocol adopted by Claude Code, Codex CLI, OpenCode, Hermes, and more — one generic Worker serves all.
Implementation Plan
P0 — MVP
AEP Protocol Extension (
pkg/events/events.go)ToolUpdate,Plan,ModeUpdateToolUpdateData,PlanData,PlanItem,ModeUpdateData,FileLocation,FileDiffToolCallDatawithTitle,Kind,Status,LocationsToolResultDatawithStatus,Diffomitempty— zero breaking changeNDJSON Codec (
internal/worker/acp/codec.go~150 lines)id/methodpresenceACP Client (
internal/worker/acp/client.go~300 lines)Initialize→NewSession→PromptlifecycleACP ↔ AEP Mapper (
internal/worker/acp/mapper.go~350 lines)MapNotification()convertssession/update→ AEP Envelopesmessage.start/message.end/stateagent_message_chunk,agent_thought_chunk,tool_call,tool_call_update,plan,current_mode_update,request_permissiondonewith StatsWorker Interface (
internal/worker/acp/worker.go~200 lines)base.BaseWorkerStart: proc.Start → Initialize → NewSession → readLoopInput: constructsession/promptTerminate: Cancel → SIGTERM → 5s → SIGKILLSend: bridgepermission_responseback to ACPRegistration (
internal/worker/acp/init.go~20 lines)worker.Register("acp", ...)ininit()Config (
internal/config/config.go~15 lines)ACPConfigstruct:Command,Args,AutoApprove,SessionStoreP1 — Important
LoadSessionrequest_permission↔permission_request/response)auto_approveconfig supportP2 — Enhancements
SetSessionModel/SetSessionModesession/newmcpServersparam)Estimated Effort
~1570 lines of Go across 8 new files. See spec §8 for breakdown.
Acceptance Criteria
hermes-acpbinary works end-to-end through HotPlex GatewayValidation
See spec §11 for Hermes pilot validation plan.
Supersedes
(acpx CLI middleware approach)Worker-ACPX-Spec.md(consolidated into this spec)AEP-ACP-Extension-Spec.md