Skip to content

Pi provider

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.

That it exists and that it is differently shaped from the rest of the list. Nothing about driving it has been established here.

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 type discriminator, which would let EventParser work unchanged.
  • Its permission vocabulary, and whether the closed PermissionMode set can spell it.
  • Whether it has auth and mcp subcommands, 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.

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:

  1. Port the adapter accurately, matching the CLI’s real behaviour.
  2. Note every place the existing contract had to be worked around.
  3. Extract the common shape from the implementations that exist.
  4. Only then widen AbstractAdapter.