Why agents need a different CLI.
Human DX optimizes for discoverability and forgiveness. Agent DX optimizes for predictability and defense-in-depth. These goals diverge enough that you need a different kind of CLI.
Two audiences, two interfaces
When a human uses a CLI, they rely on habits and muscle memory. They type ls -la without thinking, scan a table of results and spot the anomaly, pipe to grep and scroll through less. CLIs are designed for this: terse flags, free-form output, helpful defaults.
When an AI agent uses a CLI, none of this applies. The agent doesn't remember flags between invocations. It either has the flag list in its context window or it doesn't. It can't "glance" at output; every byte consumes tokens. It can't scroll or pipe; the full output lands in context whether it's needed or not. And it makes mistakes humans never would: hallucinated parameter names, control characters in text fields, references to slides that don't exist.
A CLI built for human discoverability becomes hostile when an agent is the caller. The agent needs an interface that accepts structured input, validates aggressively, and returns only enough output to inform the next step.
Why wrap the library at all
The most direct way for an agent to use a Python library like python-pptx is to generate Python code and execute it. The agent knows Python. The library exists. Why add a layer?
Because code generation is an unreliable interface. The agent has to guess the API surface from whatever docs are in context, handle unit conversions (Inches(1) vs Pt(24)), manage object references across slides, and hope the result is valid OOXML (Office Open XML). When something goes wrong, the error is a Python traceback that says something broke but not how to fix it.
You wouldn't let a browser client execute arbitrary SQL against your database. You'd put an API in front of it with validation and structured error responses. The agent calling python-pptx is in the same position. It needs a layer that validates input, executes it safely, and returns structured results.
That's what the CLI wrapper does. The agent sends JSON, the CLI validates it against a typed schema, runs the operations transactionally, and returns a structured response. The error surface goes from "any Python runtime error" to "validation failure with a suggested fix."