goose
Use goose through AnyAgent: what you can ask for, how it behaves, and the endpoint underneath.
The goose adapter drives the goose CLI over ACP (goose acp), detected as the goose binary on PATH; import goose from anyagent-js/goose. goose is Apache-2.0 open source and bring-your-own-key (BYOK): configure a provider once with goose configure.
What you can ask for
model, effort, mcp, cwd, and resume work on the endpoint’s own channels; readOnly, systemPrompt, and schema are provided by AnyAgent. attachments, session forking, and model listing are undeclared and throw. authStatus() runs goose info -v and checks the provider’s key env var; when the key may live in goose’s keyring the answer is "unknown". The full grid is on the support matrix.
Good to know
- Every turn runs on a live connection, so sessions steer; the session id lands on
result.sessionIdand is whatresumetakes back. modeltakes an id the configured provider serves, verbatim ("anthropic/claude-sonnet-4.5"on openrouter); a session that leaves it unset uses goose’s own configured model.effortis one ofoff,low,medium,high,max.readOnly: trueis enforced by denial: the turn runs in goose’sapprovemode, which asks before every tool call, and AnyAgent rejects each one. goose labels those requestsotherrather than by kind, so a read-only turn answers from the conversation rather than by reading files.- A failed turn reports the provider error as ordinary assistant text rather than throwing.
Under the hood
Every session launches goose acp and configures it over the protocol; the prompt travels as a content block. Run options become:
| Option | Channel |
|---|---|
model | config option model |
effort | config option thinking_effort |
mcp | the servers on session/new, by command or by url |
cwd | the cwd of the new session, and of the endpoint process |
resume | session/load with the session id |
readOnly: true | config option mode: approve, plus denial of every request |