Skip to content

project: goosed to ACP-over-HTTP #6642

@alexhancock

Description

@alexhancock

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)
    • -t and -i modes 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 acp over stdio or goose serve with 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

  • goosed removed from codebase
  • goose-cli removed 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

agentclientprotocol/agent-client-protocol#721

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions