sepivip/seekerclaw/paysh-catalog
Claude Code and agent skill by sepivip/seekerclaw
- community
Checking that the SKILL.md file is still in the repository.
Catalog of pay.sh services payable via agent_pay (x402). OPT-IN ONLY — activate when the user explicitly invokes pay.sh / paysh / x402 / 'pay for' / 'pay with burner', or asks what they can pay for. Stay dormant otherwise; defer to free tools. Activation triggers are the frontmatter `triggers:` list (authoritative); policy + examples in the SKILL.md body.
Install
npx vskill@latest install sepivip/seekerclaw/paysh-catalogSKILL.md
pay.sh Service Catalog
A curated directory of HTTPS endpoints the agent can pay for using agent_pay and the burner wallet, only when the user explicitly opts in via a pay-intent keyword.
Default: this skill is DORMANT
For the vast majority of user messages, this skill should not activate. The agent's default behavior for any question is:
- Try training data (facts, definitions, well-established knowledge)
- Try
web_search/web_fetch(live web data, free) - If neither answers and the user did NOT explicitly invoke pay/x402, give a best-effort honest answer noting the limitation — do NOT autonomously reach for a paid catalog service
This skill activates ONLY when the user's message contains one of the explicit pay-intent keywords listed below. If you're unsure whether a message is opting in, prefer the free path — paid lookups cost USDC and the user did not authorize a charge implicitly.
Opt-in keywords (skill activates)
The authoritative activation contract is the triggers: list in this file's frontmatter (BAT-1035). The skill activates only when the user's message contains one of those exact phrases:
pay.sh/paysh— naming the platformx402— naming the protocolpay with burner— explicit burner-pay intentpay for— explicit paying verbwhat can you pay for/show me pay.sh services/list paid services— capability question
Intentionally NOT triggers: pay to <person> (that is a normal SOL/SPL transfer — use solana_send, not a paid API) and pay with main (agent_pay settles from the burner only, never the main wallet). If a message is ambiguous, prefer the free path — paid lookups cost USDC and the user did not authorize a charge implicitly.
NOT opt-in (skill stays dormant)
- Topical / factual questions: "what's the mass of the sun", "who founded Solana", "what time is it in Tokyo" → training data or
web_search - Live-data questions WITHOUT a paying verb: "find me a hotel in Rome", "current price of SOL", "best deal on a PS5" →
web_search - General Solana / Jupiter operations: "check my balance", "send 0.1 SOL to Alice", "swap SOL for USDC" → use the relevant tool directly (
solana_balance,solana_send,solana_swap); these are NOT x402 and don't involve this skill
What this skill does (once activated)
Once an opt-in keyword fires the skill, the agent's job is:
- Match intent → entry by reading
catalog.json(the index in this folder). v2 schema: top-level object withentries[]array; each entry hasid,service_id,name,endpoint.{method, path, cost_usdc},intents[],summary,doc_file,verification.*. Pick the entry whoseintents[]best matches user request. - Build the URL by combining
entry.upstream_ref.service_url + entry.endpoint.path. Add URL-encoded query params for GET endpoints (see encoding rules below). - Read the matching `entry.doc_file` (e.g.
services/wolfram-alpha.md) for body schema (POST endpoints), example calls, and any safety scoping. If the entry has adoc_anchor, jump to that section within the doc. - Call `agent_pay` with object-shaped args:
{ url: "<constructed-url>", max_usdc: "<decimal-string-ceiling>", method?: "GET"|"POST", body?: <JSON object or array, required for POST> }.max_usdcMUST be a decimal STRING (not number) — e.g."0.05".bodyMUST be a JSON object or array (or a JSON string that parses to one); primitives like numbers/strings/booleans are rejected withbody_not_json. GET calls run silently when under cap. POST calls always prompt the user for confirmation regardless of caps (POST can send SMS, post content, or trigger paid actions — the confirmation is by design). Useentry.endpoint.methodto pick GET vs POST. - Return the response to the user
Examples
Activates → paid call
User: "Use pay.sh to look up the current GDP of Japan in USD."
Why it activates: contains pay.sh + naming a paid lookup.
Activates → catalog browsing (no paid call yet)
User: "What can you pay for?"
Why it activates: matches the capability-ask phrase "what can you pay for". (NOT every message containing the word "pay" — only the specific capability-ask phrases listed in the opt-in section above.) Agent reads catalog.json, lists the 44 supported entries (across 10 services — many services have multiple endpoints now: stablecrypto-market-data has 21, perplexity has 2, others 1-5 each) with costs, mentions the 63 known-but-not-usable ones. No agent_pay call. For "what can you pay for" the agent should GROUP by service in the reply (e.g. "Wolfram Alpha — 2 endpoints (math facts, structured pods); Tripadvisor — 5 endpoints (search, details, reviews, photos); StableCrypto — 21 endpoints (CoinGecko price/chart/markets, DefiLlama TVL/yields)") rather than dumping 44 individual lines.
Does NOT activate → vanilla answer
User: "What's the mass of the sun?"
Why it stays dormant: no opt-in keyword. The agent answers from training data: "The Sun's mass is about 1.989 × 10³⁰ kg." — no USDC charge.
User: "Find me a hotel in Rome."
Why it stays dormant: "find" + "hotel" without any paying verb or service name. Use web_search. If the user then says "pay Tripadvisor to find one" the skill activates and we hit the catalog.
User: "Check my Solana balance."
Why it stays dormant: not an x402 query at all. Use solana_balance directly. The paysh-catalog skill is unrelated to Solana balance / send / swap operations.
Reading the catalog efficiently
catalog.json is small-ish (currently 44 entries across 10 services, ~30KB in v2 schema — services are now genuinely multi-endpoint: stablecrypto-market-data has 21 endpoints, tripadvisor has 5, rentcast has 5, crushrewards has 4, wolframalpha/reducto/perplexity have 2, others 1). Always load it first to pick the entry by intent match. Then read only the matching entry.doc_file (potentially scrolling to entry.doc_anchor within it) — never load every services/*.md at once. That's the whole point of the per-entry / per-service-doc layout.
v2 schema (see SCHEMA.md in this folder for the full spec):
- One entry per ENDPOINT (not per service) — a service exposing N catalogued endpoints has N entries, all sharing the same
service_id entry.doc_filemay carry an optionaldoc_anchorpointing at the endpoint-specific section within the shared service docentry.verification.last_captured_attells you how fresh the 402 capture is; if very old, the service may have drifted upstream (runnode tests/paysh/probe-catalog.js --refresh <id>from the dev workstation to re-verify)
The unsupported.json companion registry
unsupported.json lists 63 additional entries that exist on pay.sh today but the agent cannot end-to-end use yet — either because agent_pay can't pay them (protocol/auth gap), it can pay but can't deliver the response (binary content with no channel attachment path), the endpoint didn't return a 402 at probe time (broken / moved / re-routed), or the paid-response shape is contested and unverified.
v2 schema: top-level object with entries[] (same shape as catalog entries + reason field) AND a top-level reasons object — a registry of { <bucket>: { label, explanation, actionable } } you compose your "why can't you use X?" answers from. Several entries also carry audit_pending[] — sibling endpoints found by the BAT-706 audit that aren't catalogued yet (with deferred_to: BAT-XXX pointer).
Read unsupported.json when:
- The user asks "do you know about service X?" or "is X on pay.sh?"
- The user asks for a capability (translation, image OCR, video analysis, screenshots, Google Vision, image generation, etc.) that the supported 10 don't cover
- You want to give an honest "I know it exists but can't deliver it because of Y" answer instead of a generic "I don't have a service for that"
Six reason buckets:
| Reason | What it means | Will we ever use it? | |
|---|---|---|---|
mpp_protocol | Service uses Multi-Party Protocol (newer pay.sh settlement flow we don't implement) | Future BAT — not yet filed | |
siwx_auth_required | Service needs Sign-In-With-Solana auth before returning 402 | Adjacent to BAT-697 (Trigger V2 also needs SIWX) — likely unblocked when that lands | |
invalid_demand | Service returns 402 with amount=0; agent_pay refuses zero-demand AND our web_fetch throws on 402, so neither tool reaches them | Possible follow-up: a 402-tolerant fetch flag | |
requires_binary_response | Service returns binary content (image/audio/video) we can't pipe to Telegram/Discord as attachment | Future BAT — needs agent_pay → workspace-file path | |
endpoint_not_402_at_probe | Service is listed upstream but our probe got a non-402 HTTP status (4xx/5xx/200/301) — likely broken, moved, or auth-gated differently. Each entry's note records the probe-time status code | Re-probe via tests/paysh/probe-catalog.js if pay.sh announces the endpoint is back | |
unverified_paid_response_shape | Paid endpoint exists and parses OK, but available evidence about the response shape is contested or absent (e.g. openapi declares one content-type while product-family inference suggests another). Distinct from requires_binary_response — we only assert binary when evidence clearly points there. Conservative refuse pending paid-response capture | BAT-708 — paid-response capture + classification before catalog inclusion |
Some endpoint_not_402_at_probe and invalid_demand entries also carry BAT-706 audit notes about sibling endpoints on the same host that ARE payable but aren't catalogued yet (e.g. paysponge/nyne person-search endpoints — deferred to BAT-772 Tier 2c). Each pending endpoint's deferred_to field is either a BAT-XXX follow-up ticket id, or null when the endpoint is unscheduled (no ticket yet — known to exist, but no decision on when/how to catalog). Read each entry's note field — it tells you whether the audit found more and what their status is. (Note: paysponge/perplexity also had audit-discovered siblings; BAT-769 promoted /search and /v1/agent to the catalog, leaving only /v1/async/sonar in audit_pending as unscheduled.)
NEVER call `agent_pay` on a service in `unsupported.json`. Reasons and what to tell the user:
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingapp/src/main/assets/default-skills/paysh-catalog/SKILL.md
Popularity
- Repository stars
- 260
- Repository forks
- 61
- 7-day trend score
- 28
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/sepivip/seekerclaw/paysh-catalog)