// docs / cli
Your library, from the terminal.
Save, search, copy, and pipe prompts straight into your agents and scripts. No account needed to start — signing in adds sync and version history.
Install
npm install -g promptlike
ple --versionThe CLI is live on npm as promptlike. Requires Node.js ≥18 and a clipboard tool on PATH for copy: pbcopy (macOS), xclip / wl-clipboard (Linux), or clip.exe (Windows).
Start here — no account needed
Since 0.4.0 the CLI works the moment it lands. Prompts are saved as plain Markdown files in ~/.promptlike/prompts/ — grep them, diff them, commit them to git. Nothing leaves your machine until you ask.
ple save "code review" -m "Review this diff and flag risks: {{diff}}"
ple get "code review" --var diff="$(git diff)" | claude
ple listSigned out, list / search / show / copy / getread the local store. Signed in, the same commands read your account library — the commands don't change, only where they read from.
Sign in — the upgrade, not the door
A (free) account adds sync across machines, unlimited version history with diff and rollback, and the web editor: sign up here. Local prompts are never uploaded automatically — bring them up explicitly with ple sync (--dry-run shows the list first). Signed up with Google? Google accounts have no password by default. Set one under Settings on the web first, because the CLI logs in with email + password.
Command reference
ple save <title> [-m <body>] [-d <desc>] [-t <tag>...] [--force]Save a prompt locally — no account needed. Body comes from -m or from stdin. Prompts live as plain Markdown files in ~/.promptlike/prompts/ (greppable, diffable, git-committable). Overwriting an existing prompt requires --force; tags and the description you don't repeat are carried over.
$ ple save "code review" -m "Review this diff: {{diff}}" -t review
✓ Saved: code review (code-review)
~/.promptlike/prompts/code-review.md
variables: {{diff}}
$ pbpaste | ple save "bug triage" # or pipe the body inple list [--tag <name>] [--limit <n>]Signed out, lists your local prompts; signed in, lists every prompt your account can access (tag filter server-side, default 30, max 100). Same command, different source.
$ ple list
ID TITLE UPDATED
──────── ───────────────────────────── ──────────
12ab34cd Senior Code Reviewer 2d ago
98ef76dc Bug Triage Assistant 5d ago
$ ple list --tag debug --limit 50ple search <keyword>Case-insensitive search across title and description (signed out it also searches local prompt bodies and tags).
$ ple search debug
2 results:
Bug Triage Assistant · 98ef76dc · 5d ago
Triages bug reports by severity and reproducibility.
Debug Helper · 33cc44dd · 2w ago
Walk through systematic debugging steps.ple show <name> [--project <repo>]Render a prompt in the terminal with section headers. Matches by title substring or short ID.
$ ple show "code review"
── ROLE ──
You are a senior code reviewer…
── DESCRIPTION ──
Reviews diffs for correctness and clarity.
── CONTEXT ──
…ple copy <name> [--project <repo>]Look up a prompt by title substring or short ID and send it straight to your system clipboard. If the same title lives in more than one repo, the candidates are listed with their repo names, and --project <repo> picks one.
$ ple copy "code review"
✓ Copied: Senior Code Reviewer (12ab34cd, 487 chars)
$ ple copy 12ab34cd # short ID also works
$ ple copy "code review" --project backend-promptsple get <name> [--var key=value...] [--copy] [--project <repo>]Print a prompt raw to stdout (no colors, no decoration) so agents and scripts can pipe it. Fills {{variable}} placeholders from repeatable --var flags; messages go to stderr to keep stdout clean. Add --project <repo> to scope to one repo when the same title exists in more than one.
$ ple get "code review" --var lang=python | claude
$ ple get "code review" --project backend-prompts # disambiguate by repople sync [--dry-run]Upload your local prompts into your signed-in account — one-way, explicit, never automatic on login. Sync copies (local files are kept), tags travel too, and every shortfall is reported with its reason. --dry-run lists what would be uploaded without changing anything.
$ ple sync --dry-run
2 local prompts would be uploaded:
code-review code review
bug-triage bug triage
$ ple sync
✓ Uploaded 2 prompts (+3 tag links)ple loginSign in with email + password — this is the upgrade, not the door. Adds sync, unlimited version history, and the web editor. The session is stored at ~/.config/promptlike/config.json (owner-only, 0600). After signing in, commands read your account library; bring local prompts up with ple sync.
$ ple login
Email: you@example.com
Password: ********
✓ Logged in as you@example.com
2 local prompts on this machine are not shown while signed in — bring them into your account: ple sync --dry-runple improve <name> [--focus <hint>] [--pick <n>] [--project <repo>]Loop Engineering, single round: the API generates 2-3 AI variants of your prompt (concise / structured / chain-of-thought), each with a rationale and a size comparison against the current version. Pick a winner and it's saved as a new version with a Loop(<strategy>) changelog. Pro feature.
$ ple improve "code review" --focus "shorter"
[1] CONCISE · 412 chars · ~103 tokens (-75 chars vs current)
why: Cuts filler, keeps the checklist.
…
Pick a winner [1-3], 0 to cancel: 1
✓ Saved 'Senior Code Reviewer' as v5 (concise).ple loop <name> [--exec <cmd>] [--rounds <n>] [--focus <hint>] [--pick <n>] [--project <repo>]Multi-round improve: connect your own agent as the judge. With --exec, every variant is run through your command (prompt delivered as the PLE_PROMPT env var and on stdin; a literal {} is substituted) and the first ~20 lines of output appear under the variant. Each round's winner becomes the base for the next. Pro feature.
$ ple loop "code review" --exec 'claude -p {}' --rounds 3
═══ Round 1/3: 'Senior Code Reviewer' ═══
[1] CONCISE · …
── exec output exit 0 ──
│ Here's my review of the diff…
Pick a winner [1-3], 0 to cancel: 2
✓ Saved 'Senior Code Reviewer' as v6 (structured).
Continue to next round? (y/n) yple logoutRemove the local session file. The session itself expires on its own clock.
$ ple logout
✓ Logged outLoop Engineering
Connect the CLI to your own agent and put your prompts under version control while they improve. ple loop generates variants, runs each one through the command you give it (Claude, a test script, anything) and saves the winner you pick as a new version. Your agent does the judging; your library keeps the history. Full guide: Loop docs.
# let Claude judge each variant, three rounds deep
ple loop "code review" --exec 'claude -p {}' --rounds 3
# or a quick single round without an agent
ple improve "code review" --focus "tighter output format"Loop Engineering is a Pro feature; Free accounts get a clear upgrade message on the first call.
Example flows
Day one, no account: save, fill, pipe. The whole loop works offline from the local store.
ple save "code review" -m "Review this diff: {{diff}}" -t review
ple get "code review" --var diff="$(git diff)" | claudeDaily use, signed in: browse, copy. Sign in once, find a prompt, drop it on your clipboard.
ple login
ple list
ple copy "Senior Reviewer"
✓ Copied: Senior Code Reviewer (12ab34cd, 487 chars)Agent / pipe workflow. ple get prints the raw prompt to stdout so you can pipe it into any tool, filling {{variables}} inline:
# pipe a filled prompt straight into an agent
ple get "code review" --var lang=python | claude
# or onto the clipboard
ple get my-prompt | pbcopyQuestions?
See the Help & FAQ or explore all features. Agents reading the library directly? That's the MCP server.