Setup
Set up ppq.ai credentials — create a new anonymous account (fully automated, funded over Lightning), install an existing API key WITHOUT it passing through the chat (clipboard/stdin), or inspect config status and balance. Use when no ppq key is configured, ppq returns 401, or the user wants a new ppq account or to store, replace, or check their key.From its SKILL.md
npx -y skills add nikicat/claude-ppq --skill setupAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.7 KB, as published. Nobody here has run it
ppq.ai setup (account + key)
One bash script, no uv/python needed (deliberate — setup may run on a fresh machine before any tooling exists):
bash ${CLAUDE_SKILL_DIR}/scripts/setup.sh status # config + balance overview (always masked)
bash ${CLAUDE_SKILL_DIR}/scripts/setup.sh new # create an anonymous account, save key + credit id
bash ${CLAUDE_SKILL_DIR}/scripts/setup.sh from-clipboard # install a key from the clipboard, then clear it
bash ${CLAUDE_SKILL_DIR}/scripts/setup.sh from-stdin # read a key from stdin (silent prompt on a TTY)
Run these exactly as shown — one command, full script path, no cd, no
SCRIPT= variable, nothing chained, and the path copied byte-for-byte (keep
Windows backslashes as printed — rewriting separators or re-quoting breaks the
match). These exact shapes are pre-approved (allowed-tools) for as long as
this turn lasts; any other shape falls back to a normal permission prompt.
If a literal unsubstituted ${CLAUDE_SKILL_DIR} appears above (older
harness), build the path from this SKILL.md's own location instead — the
"Base directory for this skill" header, or the directory you read this
SKILL.md from — still the same script, never an improvised alternative.
Files: ~/.config/ppq/api-key and ~/.config/ppq/credit-id, both chmod 600.
Secret hygiene — the rules that matter
- Never ask the user to paste an API key into the chat. Everything said in the conversation lands in transcript files on disk; the script's ingestion paths exist precisely so the key never enters model context.
- Never
cator Read the key or credit-id files (the Read tool counts — file contents land in the transcript), never put a key in a command's argv or an inline env assignment.statusprints masked values by design — use it for any inspection;test -r ~/.config/ppq/api-keyfor a bare presence check. - The
credit_idis also a secret: it drives the/keysmanagement API (x-credit-idheader) and can mint new spending keys.
Flows
Keep the whole flow inside this one turn. The allowed-tools grant dies
with the turn — ending your turn to ask something in prose means the next
script run hits a permission prompt. Need the user's input mid-flow? Use the
AskUserQuestion tool (numbered choices): the answer comes back as a tool
result, the turn continues, and the grant stays armed.
- Always run
statusfirst — the user may already be configured; relay the masked overview. - Unconfigured? Ask with AskUserQuestion — options: install an existing key from the clipboard, create a new anonymous account, or type the key locally via from-stdin. Word the clipboard option so the user copies the key before selecting it (the dialog waits — e.g. "My key is on the clipboard now — install it").
- Existing key (clipboard): after the answer, run
from-clipboard— it validates the key against/credits/balancebefore saving, and clears the clipboard afterwards. Wrong clipboard contents? Re-ask with AskUserQuestion and retry — don't end the turn. No clipboard tooling: have the user run! bash "${CLAUDE_SKILL_DIR}/scripts/setup.sh" from-stdinthemselves — the TTY prompt hides input and the key never reaches the conversation. - New account: run
new. It POSTshttps://api.ppq.ai/accounts/create(unauthenticated), saves both files, and prints masked ids. Always relay the no-recovery warning: anonymous account, the key IS the balance, back up~/.config/ppq. Then hand off toppq:topupto fund it — invoke it in this same turn (Skill(ppq:topup)is pre-approved here); creation to funded balance is fully automated except the Lightning payment itself. - Overwrite guard: the script refuses
new/from-*if a key file exists, because overwriting a funded account's key destroys the balance. Only add--forceafter the user explicitly confirmed they backed the old file up (AskUserQuestion, same turn). - Invalid keys are rejected before saving (validated with a free
/credits/balancecall), so a bad paste can't silently break a working config.