API discovery: the Agent Client Protocol TypeScript SDK exposes ClientSideConnection.newSession() for opening a conversation with an agent. In a fresh Goose ACP commit, session-setup notifications move out of the session/new and session/fork response path; the tests assert that the response arrives before available-command updates.
Try it
Build a small “review this branch” ACP client with a command palette. Open the session, await the returned session ID and capabilities, then render commands or mode selectors from later updates. The useful design is not a spinner for its own sake: it prevents a UI from acting on setup state before it knows which session owns that state.
Copy-paste agent instruction
Build a small Agent Client Protocol client around ClientSideConnection. Await newSession() (and forkSession() when applicable) before enabling command, mode, or permission UI. Treat later session setup notifications as updates for the returned session ID; buffer or ignore updates that cannot yet be associated with that session. Add a deterministic test that proves the session response is observed before available-command state is rendered. Do not invent protocol fields—use the installed ACP SDK types and the target agent’s documented capabilities.
Test caveat
This is a client-initialization pattern, not a claim that the ACP specification mandates Goose’s exact notification order. The public SDK documents the connection and newSession() API; Goose supplies one current implementation receipt and focused tests. No live ACP provider was run for this brief, so test capability negotiation, transport behavior, and event ordering against the specific agent you intend to host.