Design note

Context-window discipline.

Why output volume is a hard design constraint for agent-driven CLIs, and why deterministic output matters more than you'd think.

Output volume as a design constraint

Humans have unlimited screen space. They scroll, pipe to less, grep for what they need. Output volume is an inconvenience at worst.

For agents, every byte of output eats tokens from a fixed context window. A 50-slide deck inspection produces thousands of lines of JSON. If all of that lands in context, the agent loses track of its instructions, its earlier reasoning, and the user's brief. Quality degrades not because the agent can't do the task, but because irrelevant output has crowded out the information it needs.

So an agent-first CLI should invert the usual verbosity default. Most CLIs are verbose by default and quiet on request. An agent-first CLI should be compact by default. A human who wants verbose output can pass a flag. An agent that receives too much output can't un-receive it.

agent-slides controls output five ways. Field masks let the agent request only the fields it needs. NDJSON (newline-delimited JSON) pagination processes slides in batches instead of dumping everything. Compact mode strips nulls, cutting output 30-50%. Quiet mode suppresses stdout when writing to files. And agent-IO defaults turn compact and paged output on by default, so verbose is opt-in.

Deterministic output

Most PPTX libraries embed timestamps, random GUIDs, and non-deterministic ZIP member ordering. The same input produces different bytes every time. For a human, this is invisible. For automation, it breaks things.

You can't diff two builds to see what changed. You can't assert byte-equality in CI to verify a refactor didn't alter output. You can't reproduce a build from the same inputs to debug a regression. When something goes wrong, you need to know whether the change came from the input or from randomness in the tool.

agent-slides zeros timestamps, derives GUIDs from content hashes, and sorts ZIP members. Same inputs, same bytes, every time. The overhead is a few extra lines in the serialization path. The payoff is that diffing, CI assertions, and debugging all work the way they should.

Previous JSON payloads and runtime schemas Next Agent output as untrusted input