
Pp Archive Is
- 495 installs
- 1.9k repo stars
- Updated August 4, 2026
- mvanhorn/printing-press-library
pp-archive-is is an agent skill that archives URLs and retrieves cached page snapshots via archive.today and the Wayback Machine CLI with lookup-before-submit and automatic fallback for developers who need paywall bypass
About
pp-archive-is in mvanhorn/printing-press-library provides archive.today and Wayback Machine CLI workflows with lookup-before-submit, automatic fallback when one backend is down, and agent-friendly output. No API key is required. Triggers include archive this article, bypass paywall on a link, grab cached text, save URL to archive.today, check if already archived, and bulk archive URL lists. Developers reach for pp-archive-is during competitive and market research when live pages change, paywalls block source text, or citations need preserved snapshots for comparison over time. The skill pulls article text from archive.today or Wayback caches and supports batch operations across many URLs. Automatic fallback between backends improves reliability when one archive service is unavailable. Apache-2.0 licensed and authored by Matt Van Horn, pp-archive-is fits research workflows that treat archived HTML as evidence rather than ephemeral browser state.
- Historical snapshots
- Claim verification
- Competitor page history
- Citation preservation
Pp Archive Is by the numbers
- 495 all-time installs (skills.sh)
- +23 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #418 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/mvanhorn/printing-press-library --skill pp-archive-isAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 495 |
|---|---|
| repo stars | ★ 1.9k |
| Last updated | August 4, 2026 |
| Repository | mvanhorn/printing-press-library ↗ |
How do you archive URLs with archive.today CLI?
Retrieve archived snapshots from archive.is to compare page history, verify claims, and preserve references during competitive and market research.
Who is it for?
Developers doing competitive or market research who need archived page snapshots, paywall bypass, or bulk URL preservation without API keys.
Skip if: Live web scraping at scale without archiving intent or workflows requiring authenticated proprietary archive APIs only.
When should I use this skill?
User asks to archive a URL, bypass a paywall, fetch cached page text, check existing archives, or bulk archive a URL list.
What you get
Archived URL snapshots, cached page text, and batch archive results from archive.today or Wayback Machine with automatic backend fallback.
- Archived URL snapshot
- Cached page text
- Batch archive results
By the numbers
- Uses 2 archive backends: archive.today and Wayback Machine with automatic fallback
- No API key required
Files
<!-- GENERATED FILE — DO NOT EDIT. This file is a verbatim mirror of library/media-and-entertainment/archive-is/SKILL.md, regenerated post-merge by tools/generate-skills/. Hand-edits here are silently overwritten on the next regen. Edit the library/ source instead. See the repository agent guide, section "Generated artifacts: registry.json, cli-skills/". -->
archive.today — Printing Press CLI
Prerequisites: Install the CLI
This skill drives the archive-is-pp-cli binary. You must verify the CLI is installed before invoking any command from this skill. If it is missing, install it first:
1. Install via the Printing Press installer. It defaults binaries to $HOME/.local/bin on macOS/Linux and %LOCALAPPDATA%\Programs\PrintingPress\bin on Windows:
npx -y @mvanhorn/printing-press-library install archive-is --cli-only2. Verify: archive-is-pp-cli --version 3. Ensure the reported install directory is on $PATH for the agent/runtime that will invoke this skill.
If the npx install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.4 or newer):
go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/archive-is/cmd/archive-is-pp-cli@latestIf --version reports "command not found" after install, the runtime cannot see the binary directory on $PATH. Do not proceed with skill commands until verification succeeds.
When to Use This CLI
Reach for this whenever a user wants to archive a URL, read a paywalled article, check whether something was previously archived, or batch-capture a list of URLs for research. Specifically good when:
- A user sends a paywalled link and asks "can you read this" →
readfetches text via archive - They want to preserve a URL that might change →
saveforces a fresh capture - They want historical versions →
historylists all known snapshots - They have 20+ URLs to archive →
bulkruns rate-limited batch archival
Don't reach for this if the URL is trivially scrapeable without archive services (no paywall, robots-allowed, direct HTTP works), or if the user wants the original source rather than a cached version.
Unique Capabilities
The whole CLI is unique — archive.today has no official API. But within this CLI, certain commands are the differentiators.
The hero commands
- `read <url>` — Find or create an archive for a URL. Looks up existing snapshots first (Memento timegate → CDX fallback); submits a fresh capture only if nothing exists. The "always do the right thing" command.
_This is how 90% of agent calls should start. It's idempotent — calling it twice on the same URL doesn't double-submit._
- `get <url> [--format text|html]` / `tldr <url>` — Fetch article text, optionally LLM-summarized. Automatic Wayback fallback when archive.today serves a CAPTCHA (which happens daily to cloud IPs).
_tldr pipes the fetched text through a summarization step — useful for agent chains where you want a short take without shipping 20KB of HTML back._
Durability operations
- `save <url>` — Force a fresh capture via
/submit/?url=<x>&anyway=1. Use whenreadreturns an existing snapshot that's too old or missing a paywall update.
- `history <url>` — List all known snapshots via Memento timemap parsing. Shows every capture date across both archive.today and Wayback.
- `bulk [file]` — Rate-limited batch archiving from a file or stdin. Reads URLs one per line, submits each with backoff, returns a report of successes / failures / pre-existing.
_grep -oE 'https?://[^ )]+' notes.md | archive-is-pp-cli bulk - archives every URL in a markdown file._
- `request <url>` — Fire-and-forget submit with optional wait+poll. Useful for long captures where you want to come back later.
Observability
- `snapshots newest <url>` — Just the newest snapshot URL for a target, useful in scripts.
- `captures` — List your local capture index (post-sync).
- `feeds` — archive.today's global recent-archives feed.
- `--backend archive-is,wayback` — Every read/get accepts a backend preference. Defaults to archive-is with Wayback fallback; flip the order for Wayback-primary.
Command Reference
Archive + retrieve:
archive-is-pp-cli read <url>— Find or create (hero command)archive-is-pp-cli get <url>— Fetch article text (with Wayback fallback)archive-is-pp-cli tldr <url>— Fetch + summarizearchive-is-pp-cli save <url>— Force fresh capturearchive-is-pp-cli request <url>— Fire-and-forget submitarchive-is-pp-cli check <url>— Does an archive exist?
Listing + history:
archive-is-pp-cli history <url>— All known snapshotsarchive-is-pp-cli newest <url>— Newest snapshot URLarchive-is-pp-cli captures— Local capture indexarchive-is-pp-cli feeds— Global recent feed
Batch:
archive-is-pp-cli bulk [file]— Batch from file or stdin
Local store:
archive-is-pp-cli sync/archive/export/import— Local SQLite ops
Auth + health:
archive-is-pp-cli auth— Config (no API key needed; auth is a no-op)archive-is-pp-cli doctor— Verify backend reachability
Recipes
Read a paywalled article
archive-is-pp-cli read "https://www.wsj.com/articles/..." --agent
# or: return just the text
archive-is-pp-cli get "https://www.wsj.com/articles/..." --format text --agentread returns the archive URL (finding existing or creating new). get --format text returns the article body, falling back to Wayback if archive.today CAPTCHAs.
Preserve a URL before it changes
archive-is-pp-cli save "https://example.com/important-page" --agent
archive-is-pp-cli history "https://example.com/important-page" --agent # verifyForce capture, then check history to confirm the new snapshot registered.
Bulk archive a research batch
grep -oE 'https?://[^ )]+' research-notes.md | archive-is-pp-cli bulk - --agent
# or from a file:
archive-is-pp-cli bulk urls.txt --agentReads URLs one per line, submits each with exponential backoff, returns per-URL status (archived, pre-existing, failed) as JSON.
Wayback-preferred for a reliable-read
archive-is-pp-cli read "https://ft.com/content/xyz" --backend wayback,archive-is --agentUse when the Wayback Machine snapshot is known to be cleaner or archive.today is rate-limiting.
Auth Setup
No API key required. Archive.today and Wayback Machine are both public. The auth subcommand exists for consistency but is a no-op — doctor reports "Auth: not required" which is the expected state.
Optional env:
ARCHIVE_IS_BASE_URL— override archive.today host (for mirrors)WAYBACK_BASE_URL— override Wayback Machine host
Agent Mode
Add --agent to any command. Expands to --json --compact --no-input --no-color --yes --no-prompt. Every action command also prints structured next_actions hints on stderr when called non-interactively — the calling agent sees "tried X, got Y, consider Z" automatically.
Notable flags:
--submit-timeout <duration>— max wait for a fresh submit (default10m;0= unbounded)--backend archive-is,wayback— backend preference and fallback order--format text|html—get/tldroutput format
Filtering output
--select accepts dotted paths to descend into nested responses; arrays traverse element-wise:
archive-is-pp-cli <command> --agent --select id,name
archive-is-pp-cli <command> --agent --select items.id,items.owner.nameUse this to narrow huge payloads to the fields you actually need — critical for deeply nested API responses.
Response envelope
Data-layer commands wrap output in {"meta": {...}, "results": <data>}. Parse .results for data and .meta.source to know whether it's live or local. The N results (live) summary is printed to stderr only when stdout is a TTY; piped/agent consumers see pure JSON on stdout.
Exit Codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 2 | Usage error |
| 3 | Not found (no snapshot exists) |
| 5 | API error (archive.today or Wayback down) |
| 7 | Rate limited (too many submits) |
Installation
go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/archive-is/cmd/archive-is-pp-cli@latest
archive-is-pp-cli doctorMCP Server
go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/archive-is/cmd/archive-is-pp-mcp@latest
claude mcp add archive-is-pp-mcp -- archive-is-pp-mcpArgument Parsing
Given $ARGUMENTS:
1. Empty, `help`, or `--help` → run archive-is-pp-cli --help 2. `install` → CLI; `install mcp` → MCP 3. Anything that looks like a URL, or "archive <url>" / "bypass paywall on <url>" → read <url> --agent is the default — it's idempotent and covers the 90% case. 4. "bulk archive" / "archive these" → bulk from stdin if URLs are pasted, else ask for the file path.
<!-- pr-218-features -->
Agent Workflow Features
This CLI exposes three shared agent-workflow capabilities patched in from cli-printing-press PR #218.
Named profiles
Persist a set of flags under a name and reuse them across invocations.
# Save the current non-default flags as a named profile
archive-is-pp-cli profile save <name>
# Use a profile — overlays its values onto any flag you don't set explicitly
archive-is-pp-cli --profile <name> <command>
# List / inspect / remove
archive-is-pp-cli profile list
archive-is-pp-cli profile show <name>
archive-is-pp-cli profile delete <name> --yesFlag precedence: explicit flag > env var > profile > default.
--deliver
Route command output to a sink other than stdout. Useful when an agent needs to hand a result to a file, a webhook, or another process without plumbing.
archive-is-pp-cli <command> --deliver file:/path/to/out.json
archive-is-pp-cli <command> --deliver webhook:https://hooks.example/inFile sinks write atomically (tmp + rename). Webhook sinks POST application/json (or application/x-ndjson when --compact is set). Unknown schemes produce a structured refusal listing the supported set.
feedback
Record in-band feedback about this CLI from the agent side of the loop. Local-only by default; safe to call without configuration.
archive-is-pp-cli feedback "what surprised you or tripped you up"
archive-is-pp-cli feedback list # show local entries
archive-is-pp-cli feedback clear --yes # wipeEntries append to ~/.archive-is-pp-cli/feedback.jsonl as JSON lines. When ARCHIVE_IS_FEEDBACK_ENDPOINT is set and either --send is passed or ARCHIVE_IS_FEEDBACK_AUTO_SEND=true, the entry is also POSTed upstream (non-blocking — local write always succeeds).
Related skills
How it compares
Pick pp-archive-is for CLI archiving with dual-backend fallback; pick browser automation skills when pages must be interacted with live rather than cached.
FAQ
Does pp-archive-is require an API key?
pp-archive-is runs archive.today and Wayback Machine CLI workflows without an API key, using lookup-before-submit and automatic fallback when one archive backend is unavailable.
What archive backends does pp-archive-is use?
pp-archive-is queries archive.today and the Wayback Machine, automatically falling back between backends and supporting bulk URL archiving plus cached article text extraction for research.