[object Object]

← back to Cli Printing Press

docs(cli): replace emdashes with regular dashes in README

7a49df71b0dcf250ef62a5afe27558109b4ae0a8 · 2026-03-30 14:06:37 -0700 · Matt Van Horn

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit 7a49df71b0dcf250ef62a5afe27558109b4ae0a8
Author: Matt Van Horn <mvanhorn@MacBook-Pro.local>
Date:   Mon Mar 30 14:06:37 2026 -0700

    docs(cli): replace emdashes with regular dashes in README
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---
 README.md | 74 +++++++++++++++++++++++++++++++--------------------------------
 1 file changed, 37 insertions(+), 37 deletions(-)

diff --git a/README.md b/README.md
index b116913e..f089b71a 100644
--- a/README.md
+++ b/README.md
@@ -2,18 +2,18 @@
 
 Just making a CLI is not hard. Making a CLI that understands the power user is extremely hard. And the power user in 2026 is an AI agent.
 
-Claude Code, Codex, Gemini CLI, Cursor — they call CLIs thousands of times a day. Every printing press CLI is designed for agents first: `--json` by default when piped, typed exit codes for self-correction, `--compact` for token efficiency, `--dry-run` for safe exploration. Humans get the same great experience, but agents are the primary design target.
+Claude Code, Codex, Gemini CLI, Cursor - they call CLIs thousands of times a day. Every printing press CLI is designed for agents first: `--json` by default when piped, typed exit codes for self-correction, `--compact` for token efficiency, `--dry-run` for safe exploration. Humans get the same great experience, but agents are the primary design target.
 
 ```bash
 /printing-press Discord                              # From the catalog (18 APIs ready)
 /printing-press --spec ./openapi.yaml                # From a local spec
 /printing-press --har ./capture.har --name ESPN      # From captured browser traffic
 /printing-press https://postman.com/explore          # From a URL (auto-detects intent)
-/printing-press Discord codex                        # Codex mode — 60% fewer Opus tokens
+/printing-press Discord codex                        # Codex mode - 60% fewer Opus tokens
 /printing-press emboss notion                        # Second pass: improve an existing CLI
 ```
 
-One command. Lean loop. Produces a Go CLI + MCP server that absorbs every feature from every competing tool, then transcends with compound use cases only possible with local data. REST, GraphQL, or sniffed traffic — no OpenAPI spec required.
+One command. Lean loop. Produces a Go CLI + MCP server that absorbs every feature from every competing tool, then transcends with compound use cases only possible with local data. REST, GraphQL, or sniffed traffic - no OpenAPI spec required.
 
 ### Get it
 
@@ -35,21 +35,21 @@ Most generators wrap endpoints and stop. Printing Press generates CLIs that **un
 
 **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.
+**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.** Human-friendly tables when you're in a terminal. Auto-JSON when piped — no `--json` flag needed. `--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.
+**Agent-native by default.** Human-friendly tables when you're in a terminal. Auto-JSON when piped - no `--json` flag needed. `--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.
 
-**No spec? No problem.** Don't have an OpenAPI spec? Point the press at a website. It launches a browser, captures traffic, reverse-engineers the API, and generates the spec for you. ESPN, Postman Explore, internal tools — if you can click through it, the press can build a CLI for it.
+**No spec? No problem.** Don't have an OpenAPI spec? Point the press at a website. It launches a browser, captures traffic, reverse-engineers the API, and generates the spec for you. ESPN, Postman Explore, internal tools - if you can click through it, the press can build a CLI for it.
 
 **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.
+**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.
 
 **Credits its sources.** Every generated README includes a Sources & Inspiration section that credits the ecosystem tools studied during research. We built on giants' shoulders and we say so.
 
 ## 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.**
+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.**
 
 Why does the 11-command tool win? Because Steinberger saw something Discord's own API designers didn't: **conversations are institutional knowledge.** Every message thread is a document that should be archived, indexed, and searched locally. Those 11 commands embody that insight. The 300 endpoint wrappers don't.
 
@@ -59,9 +59,9 @@ Until now, you had to choose: breadth (wrap every endpoint) or depth (understand
 
 The GOAT CLI isn't built by finding gaps. It's built by stealing every good idea and compounding on top.
 
-**Layer 1 — Absorb:** Before generating, the ecosystem absorb gate catalogs every feature from every Claude Code plugin, MCP server, community skill, competing CLI, and automation script for your API. Every feature becomes a row in the absorb manifest — something our CLI must match AND beat with offline support, agent-native output, and SQLite persistence. The system even auto-suggests novel features it thinks are missing from the ecosystem before you approve the manifest.
+**Layer 1 - Absorb:** Before generating, the ecosystem absorb gate catalogs every feature from every Claude Code plugin, MCP server, community skill, competing CLI, and automation script for your API. Every feature becomes a row in the absorb manifest - something our CLI must match AND beat with offline support, agent-native output, and SQLite persistence. The system even auto-suggests novel features it thinks are missing from the ecosystem before you approve the manifest.
 
-**Layer 2 — Transcend:** Once you have everything in SQLite, compound use cases emerge that no stateless tool can do. Velocity tracking requires historical cycle data. Churn risk requires joining charges + subscriptions. Bottleneck detection requires the full issue relationship graph. These are the Non-Obvious Insight commands — and they only work because Layer 1 put everything in a local database.
+**Layer 2 - Transcend:** Once you have everything in SQLite, compound use cases emerge that no stateless tool can do. Velocity tracking requires historical cycle data. Churn risk requires joining charges + subscriptions. Bottleneck detection requires the full issue relationship graph. These are the Non-Obvious Insight commands - and they only work because Layer 1 put everything in a local database.
 
 The GOAT = everything everyone else does + everything nobody else thought of.
 
@@ -88,11 +88,11 @@ The **Non-Obvious Insight (NOI)** is a one-sentence reframe:
 
 The NOI is the creative DNA of every CLI the press generates. Phase 0 cannot complete without one. If the LLM can't write an NOI, the research wasn't deep enough.
 
-The printing press automates what Steinberger does intuitively: look at an API, see what power users actually do with it, and build the commands that matter — then also wrap every endpoint for completeness.
+The printing press automates what Steinberger does intuitively: look at an API, see what power users actually do with it, and build the commands that matter - then also wrap every endpoint for completeness.
 
 ## How I Knew This Was Real
 
-I was choosing between Peter Steinberger's [gogcli](https://github.com/steipete/gogcli) (6.5K+ stars, Go) and Google's official [Workspace CLI](https://github.com/googleworkspace/cli) (10K+ stars in a week, Rust). I ran [/last30days](https://github.com/mvanhorn/last30days-skill) — my recency research skill — across 34 X posts, 5 YouTube videos, and 10 web sources.
+I was choosing between Peter Steinberger's [gogcli](https://github.com/steipete/gogcli) (6.5K+ stars, Go) and Google's official [Workspace CLI](https://github.com/googleworkspace/cli) (10K+ stars in a week, Rust). I ran [/last30days](https://github.com/mvanhorn/last30days-skill) - my recency research skill - across 34 X posts, 5 YouTube videos, and 10 web sources.
 
 The verdict: **use gogcli**. The newer, official tool with 10x the API coverage lost to the older third-party one. As one user put it: "my preference is 100% gogcli since I have my agent working a lot with Google Docs and sheets, and gogcli just makes him able to do what he needs to do."
 
@@ -114,18 +114,18 @@ Rung 3 is table stakes. Rung 4 is where discrawl lives. Rung 5 is where nobody e
 
 The press generates the API wrapper in Phase 2 (Rung 1-2). Then it generates the discrawl-style data layer and workflow commands in Phase 3 (Rung 3-5) from domain archetype templates. Both in one run.
 
-## Why Not Just CLIs — CLIs + MCP
+## Why Not Just CLIs - CLIs + MCP
 
 The NOI is the creative intelligence. The printing press generates **both interfaces** from one spec:
 
-- **`<api>-pp-cli`** — Cobra CLI for humans + shell agents (Claude Code, Codex, Gemini CLI)
-- **`<api>-pp-mcp`** — MCP server for Claude Desktop, Cursor, Windsurf, Cline — auto-discovered, no shell needed
+- **`<api>-pp-cli`** - Cobra CLI for humans + shell agents (Claude Code, Codex, Gemini CLI)
+- **`<api>-pp-mcp`** - MCP server for Claude Desktop, Cursor, Windsurf, Cline - auto-discovered, no shell needed
 
 Same `internal/client`, same `internal/store`, same auth. Two binaries, zero code duplication.
 
 **CLIs win for agents:** 100x fewer tokens than MCP tool definitions. LLMs were trained on shell interactions. Exit code 0 = done. `--json | jq` is a first-class composition pattern.
 
-**MCP wins for IDE integration:** Claude Desktop and Cursor discover tools automatically via MCP. No shell needed. The MCP server exposes the same operations as the CLI — including the data layer (sync, search, sql).
+**MCP wins for IDE integration:** Claude Desktop and Cursor discover tools automatically via MCP. No shell needed. The MCP server exposes the same operations as the CLI - including the data layer (sync, search, sql).
 
 ```
 One spec  -->  printing-press generate  -->  <api>-pp-cli (cobra)  +  <api>-pp-mcp (MCP server)
@@ -166,9 +166,9 @@ Phase 5     Live Smoke (optional)     (2-5 min)    Read-only API smoke + data-fl
 
 **Three entry paths.** Got an OpenAPI spec? Use `--spec`. Got a URL to a website with no docs? The sniff gate launches a browser, captures traffic, and generates the spec. Got a HAR file from DevTools? Pass `--har`. The press handles all three.
 
-**18 APIs in the catalog.** Asana, DigitalOcean, Discord, Front, GitHub, HubSpot, LaunchDarkly, Pipedrive, Plaid, Postman, SendGrid, Sentry, Square, Stripe, Stytch, Telegram, Twilio — plus Petstore for testing. Each pre-verified with spec URL, auth type, and category.
+**18 APIs in the catalog.** Asana, DigitalOcean, Discord, Front, GitHub, HubSpot, LaunchDarkly, Pipedrive, Plaid, Postman, SendGrid, Sentry, Square, Stripe, Stytch, Telegram, Twilio - plus Petstore for testing. Each pre-verified with spec URL, auth type, and category.
 
-**Discovery provenance.** When the press sniffs a website, it archives everything — pages visited, endpoints discovered, response samples, rate limiting events — into a `discovery/` manuscript alongside the research and proofs. Full audit trail.
+**Discovery provenance.** When the press sniffs a website, it archives everything - pages visited, endpoints discovered, response samples, rate limiting events - into a `discovery/` manuscript alongside the research and proofs. Full audit trail.
 
 ### Codex Mode (opt-in)
 
@@ -177,7 +177,7 @@ Phase 5     Live Smoke (optional)     (2-5 min)    Read-only API smoke + data-fl
 /printing-press Discord          # Standard Opus mode (default)
 ```
 
-When you add `codex`, Phase 3's code generation tasks are delegated to Codex CLI. Claude stays the brain (research, planning, scoring, review). Codex does the hands (writing Go code from scoped prompts). Same quality, 60% fewer Opus tokens. If Codex fails 3 times in a row, the press falls back to doing it locally — no manual intervention needed.
+When you add `codex`, Phase 3's code generation tasks are delegated to Codex CLI. Claude stays the brain (research, planning, scoring, review). Codex does the hands (writing Go code from scoped prompts). Same quality, 60% fewer Opus tokens. If Codex fails 3 times in a row, the press falls back to doing it locally - no manual intervention needed.
 
 ### Emboss Mode (second pass)
 
@@ -187,17 +187,17 @@ When you add `codex`, Phase 3's code generation tasks are delegated to Codex CLI
 /printing-press emboss ~/printing-press/library/notion-pp-cli   # By full path
 ```
 
-Already generated a CLI? Emboss runs a focused improvement cycle: audit baseline (verify + scorecard), re-research what's changed, identify top 5 improvements, build them, re-verify, report the delta. Offered at the end of every run — never triggered automatically.
+Already generated a CLI? Emboss runs a focused improvement cycle: audit baseline (verify + scorecard), re-research what's changed, identify top 5 improvements, build them, re-verify, report the delta. Offered at the end of every run - never triggered automatically.
 
 ## What Gets Generated
 
-**Designed for AI agents.** Every flag, every output format, every exit code is chosen because an agent will consume it. Human-friendly table output in the terminal. Auto-JSON when piped — no flag needed. `--compact` drops to high-gravity fields only (id, name, status, timestamps) — 60-80% fewer tokens. Typed exit codes (`0`=success, `2`=usage, `3`=not found, `4`=auth, `5`=API, `7`=rate limited) let agents self-correct in one retry without parsing error text. `--dry-run` lets agents explore safely. Humans benefit from all of this too — agent-native design is just good CLI design taken seriously.
+**Designed for AI agents.** Every flag, every output format, every exit code is chosen because an agent will consume it. Human-friendly table output in the terminal. Auto-JSON when piped - no flag needed. `--compact` drops to high-gravity fields only (id, name, status, timestamps) - 60-80% fewer tokens. Typed exit codes (`0`=success, `2`=usage, `3`=not found, `4`=auth, `5`=API, `7`=rate limited) let agents self-correct in one retry without parsing error text. `--dry-run` lets agents explore safely. Humans benefit from all of this too - agent-native design is just good CLI design taken seriously.
 
 **Agent-first flags** (every command): `--json`, `--select`, `--dry-run`, `--stdin`, `--csv`, `--compact`, `--quiet`, `--yes`, `--no-input`, `--no-cache`, `--no-color`. Auto-JSON when piped (no `--json` needed). Typed exit codes (`0`=success, `2`=usage, `3`=not found, `4`=auth, `5`=API, `7`=rate limited).
 
 **Actionable errors**: errors include the specific flag/arg that's wrong, the correct usage pattern, and the command path. Agents self-correct in one retry.
 
-**Bounded output**: list commands show "Showing N results. To narrow: add --limit, --json --select, or filter flags." Token-conscious `--compact` mode returns only high-gravity fields — 60-80% fewer tokens.
+**Bounded output**: list commands show "Showing N results. To narrow: add --limit, --json --select, or filter flags." Token-conscious `--compact` mode returns only high-gravity fields - 60-80% fewer tokens.
 
 **Table stakes features** (from the absorb gate): every feature the top competitor has, classified and built before novel features. If schpet/linear-cli has `start` (git branch from issue), you get it. If 4ier/notion-cli has human-friendly filters, you get it. Anti-gaming rules prevent scorecard optimization over real features.
 
@@ -215,7 +215,7 @@ Already generated a CLI? Emboss runs a focused improvement cycle: audit baseline
 
 **Proxy-envelope support**: for APIs that wrap all requests in a POST envelope (like Postman's `_api/ws/proxy`), the press detects the pattern during sniffing and generates a specialized client.
 
-**Adaptive rate limiting**: sniffed APIs get conservative pacing — start slow, ramp up on success, back off on 429s. Never aborts, always recovers.
+**Adaptive rate limiting**: sniffed APIs get conservative pacing - start slow, ramp up on success, back off on 429s. Never aborts, always recovers.
 
 **Tests**: minimum 1 test file per package (store, cli). Table-driven tests for data layer queries and workflow commands.
 
@@ -227,11 +227,11 @@ Already generated a CLI? Emboss runs a focused improvement cycle: audit baseline
 
 **Sync performance** (discrawl-inspired): Cursor-based pagination, batch SQLite transactions, tuned pragmas (`synchronous=NORMAL`, `mmap_size=256MB`), `--since` incremental sync, `--concurrency` parallel workers, progress reporting to stderr.
 
-## Quality Scoring — Three Benchmarks
+## Quality Scoring - Three Benchmarks
 
 Three benchmarks, not one. All must pass:
 
-1. **Architecture** (discrawl benchmark): Does it have a real data layer — domain-specific SQLite, FTS5, incremental sync, workflow commands?
+1. **Architecture** (discrawl benchmark): Does it have a real data layer - domain-specific SQLite, FTS5, incremental sync, workflow commands?
 2. **Quality** (gogcli benchmark): Does the code have proper output modes, typed errors, agent-native flags, doctor, README with cookbook?
 3. **Features** (competitor benchmark): Would a user of the top competitor switch to this CLI?
 
@@ -239,7 +239,7 @@ Architecture without features is a toy. Features without architecture is a thin
 
 Inspired by Peter Steinberger's [gogcli](https://github.com/steipete/gogcli). Two tiers, 100 points max, weighted 50/50. Grade A = 85+.
 
-**Tier 1: Infrastructure** (50 points) — does the skeleton have the right patterns?
+**Tier 1: Infrastructure** (50 points) - does the skeleton have the right patterns?
 
 | Dimension | What It Checks |
 |-----------|---------------|
@@ -249,7 +249,7 @@ Inspired by Peter Steinberger's [gogcli](https://github.com/steipete/gogcli). Tw
 | Agent-Native | --json, --select, --dry-run, --stdin, --no-input, --compact, --yes |
 | + 5 more | Terminal UX, README, Doctor, Local Cache, Breadth |
 
-**Tier 2: Domain Correctness** (50 points) — does the code actually work?
+**Tier 2: Domain Correctness** (50 points) - does the code actually work?
 
 | Dimension | What It Checks |
 |-----------|---------------|
@@ -284,10 +284,10 @@ Published CLIs live in [printing-press-library](https://github.com/mvanhorn/prin
 
 | CLI | Category | API | Install |
 |-----|----------|-----|---------|
-| `espn-pp-cli` | Media & Entertainment | ESPN sports data — scores, stats, standings across 17 sports and 139 leagues | `go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/espn-pp-cli/...@latest` |
-| `linear-pp-cli` | Project Management | Linear — issues, cycles, teams, projects with GraphQL | `go install github.com/mvanhorn/printing-press-library/library/project-management/linear-pp-cli/...@latest` |
+| `espn-pp-cli` | Media & Entertainment | ESPN sports data - scores, stats, standings across 17 sports and 139 leagues | `go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/espn-pp-cli/...@latest` |
+| `linear-pp-cli` | Project Management | Linear - issues, cycles, teams, projects with GraphQL | `go install github.com/mvanhorn/printing-press-library/library/project-management/linear-pp-cli/...@latest` |
 
-Each published CLI includes research manuscripts, verification proofs, and a `.printing-press.json` provenance manifest. The full catalog has **18 APIs** ready to generate — run `/printing-press-catalog` to browse.
+Each published CLI includes research manuscripts, verification proofs, and a `.printing-press.json` provenance manifest. The full catalog has **18 APIs** ready to generate - run `/printing-press-catalog` to browse.
 
 ## Quick Start
 
@@ -316,7 +316,7 @@ No repo checkout needed. The binary embeds its own catalog data and the plugin p
 /printing-press --spec ./openapi.yaml                # From a local spec
 /printing-press --har ./capture.har --name ESPN      # From captured browser traffic
 /printing-press https://postman.com/explore          # From a URL (auto-detects intent)
-/printing-press Stripe codex                         # Codex mode — 60% fewer Opus tokens
+/printing-press Stripe codex                         # Codex mode - 60% fewer Opus tokens
 ```
 
 Each run produces two binaries (`<api>-pp-cli` + `<api>-pp-mcp`), research documents, verification proofs, and a Quality Score.
@@ -340,7 +340,7 @@ When you're happy with a CLI, publish it to the library:
 
 ## Verification Tools
 
-Four layers of mechanical validation — no vibes, no self-assessment.
+Four layers of mechanical validation - no vibes, no self-assessment.
 
 ```bash
 # Quality Scorecard: two-tier scoring (infrastructure + domain correctness)
@@ -352,7 +352,7 @@ printing-press dogfood --dir ./my-pp-cli --spec ./openapi.json
 
 ### Proof of Behavior
 
-The scorecard checks structure. Proof of Behavior checks data flow — does `sync.go` actually call `UpsertMessage` on a table that `search.go` queries?
+The scorecard checks structure. Proof of Behavior checks data flow - does `sync.go` actually call `UpsertMessage` on a table that `search.go` queries?
 
 Four behavioral proofs:
 - **Path Proof**: Every URL in generated commands exists in the OpenAPI spec
@@ -393,7 +393,7 @@ brew install lefthook
 lefthook install
 ```
 
-This adds a pre-push hook that runs `golangci-lint` on changed files. The same linter config (`.golangci.yml`) runs in CI — lefthook just catches failures locally first.
+This adds a pre-push hook that runs `golangci-lint` on changed files. The same linter config (`.golangci.yml`) runs in CI - lefthook just catches failures locally first.
 
 If you also want `golangci-lint` locally:
 
@@ -407,9 +407,9 @@ go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
 
 ## Credits
 
-- **Peter Steinberger** ([@steipete](https://github.com/steipete)) — [discrawl](https://github.com/steipete/discrawl) and [gogcli](https://github.com/steipete/gogcli) set the bar. The quality scoring system is inspired by his work. discrawl's sync architecture directly influenced the printing press templates.
-- **Trevin Chow** ([@trevin](https://x.com/trevin)) — [7 Principles for Agent-Friendly CLIs](https://x.com/trevin/status/2037250000821059933) shaped the agent-first template design. Co-builder shipping PRs daily.
-- **Ramp** ([@tryramp](https://github.com/ramp-public/ramp-cli)) — Their agent-first CLI inspired auto-JSON piping, --no-input, and --compact output.
+- **Peter Steinberger** ([@steipete](https://github.com/steipete)) - [discrawl](https://github.com/steipete/discrawl) and [gogcli](https://github.com/steipete/gogcli) set the bar. The quality scoring system is inspired by his work. discrawl's sync architecture directly influenced the printing press templates.
+- **Trevin Chow** ([@trevin](https://x.com/trevin)) - [7 Principles for Agent-Friendly CLIs](https://x.com/trevin/status/2037250000821059933) shaped the agent-first template design. Co-builder shipping PRs daily.
+- **Ramp** ([@tryramp](https://github.com/ramp-public/ramp-cli)) - Their agent-first CLI inspired auto-JSON piping, --no-input, and --compact output.
 
 ## License
 

← cc28b36f docs(cli): comprehensive README rewrite reflecting current p  ·  back to Cli Printing Press  ·  docs(cli): replace 'stealing' with 'absorbing' in README b2ad7a86 →