Editors, SDKs & CI
The terminal is one client of the agent, not the whole product. The same engine runs inside editors over the Agent Client Protocol, embeds in your own applications through Rust, TypeScript, and Python SDKs, answers one-shot prompts headless in scripts and pipelines, and reads CI through one normalized interface. Sessions, permissions, and the savings accounting are shared across all of them.
contents
contents
In your editor, over ACP
squeezy acp runs Squeezy as an Agent Client Protocol agent: an ACP-capable editor launches it as a child process and talks JSON-RPC over stdin and stdout. Squeezy implements stable ACP v1, session create, load, resume, list, and delete, streaming assistant text and reasoning, tool-call progress and permission prompts, plan and cost updates, cancellation, and the Chat, Plan, Edit, and Orchestrate modes (Edit is the terminal's Build mode under its protocol name).
Editor sessions are ordinary Squeezy sessions in the same local store, under the same session ids, so work started in the editor can be resumed in the terminal and back. The ACP command starts no daemon and opens no network listener; closing stdin cancels active turns and exits the process.
squeezy acp In your application, through an SDK
squeezy app-server --stdio exposes the agent as a local app server: one JSON object per line over stdin and stdout, an initialize handshake with explicit capability negotiation, and typed events for everything a turn does, assistant deltas, tool activity, permission requests, usage updates, subagent lifecycle. Three official clients wrap it, the squeezy-sdk crate for Rust and the TypeScript and Python packages, and each spawns the binary, performs the handshake, correlates concurrent requests, and shuts down cleanly on EOF.
The embedding model is deliberately conservative: a child process your application owns, no daemon, no open port, nothing listening on the network, which keeps the security review short. Permission prompts arrive as requests your application answers, so an embedder builds its own approval UX rather than inheriting a terminal's. And the same savings ledger the terminal shows is readable per session over the protocol, so an application embedding Squeezy can audit what the substrate avoided spending instead of taking it on trust.
squeezy app-server --stdio In a script, headless
squeezy --prompt runs one non-interactive turn and writes the answer to stdout, and piped stdin activates headless mode with no flag at all. Exit codes are a contract rather than a convention: 0 for a completed run, 1 for a retryable failure, 2 for a malformed invocation that will fail the same way every time, 3 for a name that does not exist, so a pipeline can branch on the failure class instead of parsing error text. A --cd flag runs as if launched from another directory, so a Makefile recipe or container entrypoint needs no shell wrapper just to cd.
squeezy --prompt "summarize the failing tests in this repo"
git log -1 --format=%s | squeezy One interface for CI
squeezy ci reads your pipeline through one normalized schema whichever provider runs it, GitHub Actions and GitLab today. status reports the current pipeline and its jobs; failures narrows to the failing jobs and steps, each with a log window around the failure; log fetches one job's log, reduced to the failure context and tail. The one mutation is explicit: rerun refuses to run without --authorize-mutation, so asking a question can never restart a pipeline as a side effect. A provider without an adapter returns a structured answer that names the provider and points at its raw CLI, rather than pretending coverage it does not have.
squeezy ci status
squeezy ci failures
squeezy ci log <job>
squeezy ci rerun --authorize-mutation Watching a pull request
squeezy pr watch snapshots a pull request's CI, review, and mergeability state, and on repeat polls reports only what changed since the last one, so a long watch pays for state changes, not for polls. It is careful about what counts as actionable feedback: unsubmitted draft reviews are excluded, and so are comments from authors with no standing on the repository, with the excluded counts reported rather than hidden. A drive-by comment on a public repository is not a review, and an agent that treated one as an instruction could be steered by anyone with an account. The command never mutates: no merge, no reply, no rerun. It reports state and what that state implies, and acting on it stays with you.
squeezy pr watch
squeezy pr watch --watch --json