-
Notifications
You must be signed in to change notification settings - Fork 3.2k
project: goosed to ACP-over-HTTP #6642
Description
Goal: Replace goosed's custom SSE-based streaming API with a standards-based ACP (Agent Communication Protocol) over HTTP interface, enabling better client portability, protocol standardization, and eventually a unified interface for all goose clients.
Background
Current Architecture
- goose-cli (Rust): Direct in-process agent communication
- goosed (goose-server): Custom REST + SSE streaming API consumed by the Electron desktop app
Proposed Architecture
A new ACP-over-HTTP server that:
- Implements the standardized ACP (Agent Communication Protocol) specification
- Uses JSON-RPC 2.0 over HTTP with SSE streaming as the transport
- Enables any ACP-compatible client to interact with goose
Prototype
See the prototype branch: https://github.com/block/goose/tree/alexhancock/goosed-acp-and-new-cli
Example of single agent (video): ref
Example of multi-agent orchestration (screenshots): ref
Phase 1: Stabilize ACP Server
Goal: Production-ready ACP server that can fully replace goosed
Tasks
- Session persistence and resumption (
session/load) - Enough goosed features to power alternative alpha CLI (extensions, modalities, streaming, etc)
Success Criteria
- Core goosed features available via ACP-over-HTTP
- Integration tests passing
Phase 2: TypeScript TUI Alpha
Goal: Feature-complete TUI which will be an evolution of the current CLI
Tasks
- Core features of existing CLI supported
- Messages & tool calling
- Extensions (add, remove, edit config)
- Session (list, resume, export)
-tand-imodes for zero-shotting
- Make MCP features work (sampling, elicitation, etc)
- UX polish (syntax highlighting, markdown rendering, diffs, themes?)
- Build process that makes a single binary
Success Criteria
- TUI usable as daily driver
- Docs
Phase 3: Desktop Update
Goal: Updated desktop app which uses goose-acp
Tasks
- Integrate an ACP client (using
goose acpover stdio orgoose servewith http/ws into new desktop app
Success Criteria
- Desktop app multi-chat works with goose's ACP support as the server
Phase 4: Consolidation
Goal: ACP becomes the single interface for all goose clients, and new tui is fully launched
Tasks
- Deprecate and remove
goosed - Deprecate and remove
goose-cli(to be replaced with simpler bin target part of the goose crate) - Update all documentation
Success Criteria
goosedremoved from codebasegoose-cliremoved from codebase- Distribute binary for new tui
- Single unified architecture for addressing goose
Technical Details
ACP Protocol Overview
The ACP protocol uses JSON-RPC 2.0 with the following methods:
Client → Server Requests (client sends, server responds):
initialize - Handshake and capability negotiation
authenticate - Authentication (currently no-op)
session/new - Create a new conversation session (returns ACP session_id)
session/load - Resume an existing session (replays history via notifications)
session/prompt - Send user message, receive streaming response
Client → Server Notifications (client sends, no response):
session/cancel - Cancel in-progress prompt
Server → Client Requests (server sends, client must respond):
request_permission - Request user confirmation for tool execution
Server → Client Notifications (server sends via SSE, no response):
SessionNotification with SessionUpdate variants:
- AgentMessageChunk - Streaming text from agent
- AgentThoughtChunk - Streaming reasoning/thinking content
- UserMessageChunk - User message (used in session/load replay)
- ToolCall - Tool invocation started (status: pending)
- ToolCallUpdate - Tool status change (completed/failed) with result
HTTP Transport
The HTTP transport wraps ACP's JSON-RPC protocol over Stremable HTTP