Pi provider
Why it is on the list
Section titled “Why it is on the list”Pi is a general-purpose toolkit rather than a dedicated coding agent, and that is precisely why it is planned. Every other CLI on the list is shaped like the one already implemented, so none of them can tell us whether the contract generalises or merely fits a family.
A provider is the identity of a CLI to point at, and what that CLI is for is the CLI’s business. If the words in Command only work for tools that were built to be coding agents, they are not the abstraction they claim to be.
What is known
Section titled “What is known”That it exists and that it is differently shaped from the rest of the list. Nothing about driving it has been established here.
What is not known
Section titled “What is not known”Everything about driving it. Not yet investigated:
- The command name and how a conversation is identified.
- Which flags make it a controllable two-way stream rather than a terminal UI.
- Whether its output is NDJSON with a
typediscriminator, which would letEventParserwork unchanged. - Its permission vocabulary, and whether the closed
PermissionModeset can spell it. - Whether it has
authandmcpsubcommands, and in what shape. - Whether a general-purpose toolkit even presents the session-shaped surface an adapter needs — which is the first thing to check, and has not been.
What attaching it would contribute
Section titled “What attaching it would contribute”A CLI that is not primarily a coding agent is the most severe test of whether the contract generalises. SpawnOptions speaks in the library’s vocabulary rather than any CLI’s, and Command speaks in intent — a message, a model, a permission mode. If a differently-shaped CLI can be driven through those words unchanged, that is strong evidence the abstraction is real.
If it cannot, that is the more valuable finding, and the order of work is what surfaces it:
- Port the adapter accurately, matching the CLI’s real behaviour.
- Note every place the existing contract had to be worked around.
- Extract the common shape from the implementations that exist.
- Only then widen
AbstractAdapter.
Where to go next
Section titled “Where to go next”- Writing a provider — what attaching a CLI involves.
- Why ActiveCLI — why an abstract adapter, rather than one wrapper per CLI.
- Roadmap — where this sits in the order of work.