[object Object]

← back to Cli Printing Press

docs(cli): add "Why These CLIs Win" section to README (#59)

f27c735ee90887159c2f79826ea3594d5706406f · 2026-03-29 18:09:37 -0700 · Trevin Chow

The unique features that make Printing Press CLIs different — SQLite
persistence, compound commands, agent-native flags, dual CLI+MCP
interface, mechanical verification — were scattered across philosophy
sections. This adds a scannable summary up front.

https://claude.ai/code/session_01CCQy6jhbQPQWQfBSdduAaL

Co-authored-by: Claude <noreply@anthropic.com>

Files touched

Diff

commit f27c735ee90887159c2f79826ea3594d5706406f
Author: Trevin Chow <trevin@trevinchow.com>
Date:   Sun Mar 29 18:09:37 2026 -0700

    docs(cli): add "Why These CLIs Win" section to README (#59)
    
    The unique features that make Printing Press CLIs different — SQLite
    persistence, compound commands, agent-native flags, dual CLI+MCP
    interface, mechanical verification — were scattered across philosophy
    sections. This adds a scannable summary up front.
    
    https://claude.ai/code/session_01CCQy6jhbQPQWQfBSdduAaL
    
    Co-authored-by: Claude <noreply@anthropic.com>
---
 README.md | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/README.md b/README.md
index ae3b2686..edd62b7a 100644
--- a/README.md
+++ b/README.md
@@ -27,6 +27,20 @@ go install github.com/mvanhorn/cli-printing-press/cmd/printing-press@latest
 /reload-plugins
 ```
 
+## Why These CLIs Win
+
+Most generators wrap endpoints and stop. Printing Press generates CLIs that **understand the domain**.
+
+**Local-first data layer.** High-gravity resources get domain-specific SQLite tables (not JSON blobs), FTS5 full-text search indexes, and incremental sync with cursor tracking. `sync` pulls data down. `search` finds it in milliseconds. `sql` lets power users query directly. All offline, all local.
+
+**Compound commands no wrapper can do.** Once data lives in SQLite, commands like `stale`, `health`, `bottleneck`, and `reconcile` become possible — they join across resources and analyze history. A stateless API wrapper literally cannot do this.
+
+**Agent-native by default.** Auto-JSON when piped. `--compact` drops to high-gravity fields only (60-80% fewer tokens). Typed exit codes (`0`/`2`/`3`/`4`/`5`/`7`) let agents self-correct without parsing error text. `--dry-run` for safe exploration. Every flag exists because an AI agent will call it thousands of times a day.
+
+**Dual interface from one spec.** Every API gets a Cobra CLI (`<api>-pp-cli`) and an MCP server (`<api>-pp-mcp`). Same client, same store, same auth. Shell agents use the CLI. IDE agents use MCP. Zero code duplication.
+
+**Verified, not vibes.** Four mechanical checks — scorecard, dogfood, proof-of-behavior, live API smoke test — catch hallucinated paths, dead flags, auth mismatches, and broken data pipelines before you ship.
+
 ## Every Endpoint. Every Insight. One Command.
 
 Discord's API has 300+ endpoints. Most generators stop there - wrap every endpoint, ship it, done. But [discrawl](https://github.com/steipete/discrawl) - Peter Steinberger's Discord tool - ignores most of them. It ships 11 commands: `sync`, `search`, `sql`, `tail`, `mentions`, `members`. **583 stars.**

← 4a1bd289 feat(skills): offer publish after CLI generation completes (  ·  back to Cli Printing Press  ·  feat(cli): add smart-default output format to generator temp 283ab9bf →