Install SELAT in any agent harness — Claude Code, Codex, Cursor, Gemini CLI, or a plain CLI — so the agent can discover and pay for capabilities beyond its native abilities, settling each payment from the user's own Circle Agent Wallet (MPC self-custody). SELAT never sees a private key or holds the user's funds.
Copy this into your coding agent (Claude Code, Codex, Cursor, Gemini CLI, …) and it will set SELAT up for you:
Help me set up SELAT — it lets you find and pay for tools you don't have built in (image/video/audio generation, web scraping, live and on-chain data), paid from my own crypto wallet that I control. Read github.com/SELAT-AI/selat-plugins and follow the setup for your harness. Don't create or fund a wallet for me — guide me and I'll approve it.
Prefer to do it yourself? See Install per harness below, or just run npm i -g @selat-ai/selat-cli then selat init. Agents: the step-by-step runbook is install.md.
Marketplace repo:
SELAT-AI/selat-plugins— the third SELAT distribution surface (after the npm package and the published skill). Prefer the plugin install below. Or install the runner directly withnpm i -g @selat-ai/selat-cliand runselat init.
A small plugin/marketplace monorepo that wraps the published
@selat-ai/selat-cli runner. The
CLI package bundles everything in one install:
@selat-ai/selat-cli— theselatrunner@selat-ai/selat-discovery— the discovery skill (the published source of truth)@selat-ai/selat-pay— the pay engine (Circle MPC signing + x402 batching)
So npm i -g @selat-ai/selat-cli = runner + skill + pay. This repo adds the thin plugin
layer (manifests, hooks, a driver skill, per-harness guides) that auto-installs and
wires that runner into each host.
- Two-tier discovery. SELAT checks vetted, evaluated multi-step skills first
(
SELAT-AI/selat-skills), then falls back to a federated x402 / MPP endpoint catalog (Circle + x402 Bazaar + MPP + Apify + SELAT's owncatalog.selat.ai, merged). A flat index is one-tier. Discovery itself is free —selat search "<intent>"ranks candidates with no wallet or spend; onlyselat run/selat skill runpay. - Self-custody. Payments settle from the user's own Circle Agent Wallet (MPC). SELAT never holds keys or balance. Because a wallet is real onboarding, the plugin detects and guides — it never silently provisions a wallet or moves funds.
What "MPC self-custody" means concretely: the Circle Agent Wallet uses 2-of-2 MPC key management — the private key exists only as two key shares, both required to sign, and per Circle's docs the shares are never exposed to the agent (or to SELAT) and Circle cannot unilaterally move funds without the user's involvement. Signing is authorized by the user's email-OTP session; spending-policy writes require a fresh human OTP. SELAT signs only through the Circle CLI — it never holds a key share, funds, or login credentials.
The SessionStart hook does not create a wallet or move money. It installs/updates the
runner, then runs selat doctor to check setup. If the wallet/config is missing, it
tells the agent that free discovery (selat search, selat skill list, selat doctor) works now with no wallet — and to auto-run selat init only when the user wants to actually call/pay for a result (no permission gate; init then installs the Circle CLI and prompts for email + OTP).
Read-only discovery (selat search, selat doctor, selat history, selat skill list) is
auto-approved; anything that spends or moves money (selat run, selat skill run,
selat fund, selat setup-policy) always requires explicit approval.
Prerequisites: Node.js ≥ 18 (ships with npm). No Python needed.
| Harness | Guide | Quick install |
|---|---|---|
| Claude Code | guides/claude-code.md | /plugin marketplace add SELAT-AI/selat-plugins then /plugin install selat@selat-plugins |
| Codex | guides/codex.md | codex plugin marketplace add SELAT-AI/selat-plugins then codex plugin add selat@selat-plugins |
| Cursor | guides/cursor.md | Customize → Marketplace (or paste the prompt above). Then allowlist SELAT in .cursor/sandbox.json — see the guide |
| Gemini CLI | guides/gemini-cli.md | gemini extensions install https://github.com/SELAT-AI/selat-plugins --auto-update |
| OpenClaw | guides/openclaw.md | openclaw plugins install selat --marketplace https://github.com/SELAT-AI/selat-plugins (bundle auto-detect) |
| Hermes Agent | guides/hermes.md | hermes plugins install SELAT-AI/selat-plugins/plugins/selat-hermes --enable — the subdirectory path is required (the bare repo form buries the plugin at plugins/selat-plugins/plugins/selat-hermes/; see the guide). The plugin installs the selat-cli runner |
| Any other / none | guides/generic.md | npm i -g @selat-ai/selat-cli then selat init |
After install, every harness runs the same first-time setup (self-custody):
selat init # checks skill, Circle auth, Agent Wallet, selat-pay, config — installs Circle CLI if missing
selat doctor # confirm everything is green.claude-plugin/marketplace.json # Claude Code marketplace
.agents/plugins/marketplace.json # .agents-style marketplace
plugins/
selat/
.claude-plugin/plugin.json # Claude Code manifest
.codex-plugin/plugin.json # Codex manifest
.cursor-plugin/plugin.json # Cursor manifest (skills + rules + hooks)
package.json # Antigravity manifest
AGENTS.md # standing context for Codex/OpenClaw/Antigravity
# (OpenClaw consumes the bundle layout + AGENTS.md; no native manifest)
rules/
selat.mdc # Cursor standing reminder (alwaysApply rule — Cursor's
# beforeSubmitPrompt can't inject context, so the nudge lives here)
hooks/
hooks.json # Claude Code: SessionStart, UserPromptSubmit, PreToolUse(Bash), PostToolUse
hooks-cursor.json # Cursor: sessionStart, beforeShellExecution(matcher: selat)
hooks-handlers/ # scripts (Anthropic convention: wiring in hooks/, scripts here)
ensure-runner.sh # SessionStart: DETECT + GUIDE (never auto-creates a wallet); installs
# the version-pinned runner; shell-rc PATH edit is opt-in (SELAT_PATH_AUTOADD=1)
selat-context.sh # Claude UserPromptSubmit availability reminder (cat <<'EOF' heredoc)
auto-approve-selat.sh # Claude PreToolUse: auto-approve BARE READ-ONLY selat only (thin wrapper)
auto-approve-selat-cursor.sh # Cursor beforeShellExecution: same policy, Cursor permission schema
selat-fallback.sh # PostToolUse: nudge toward SELAT after an access/auth/paywall failure
lib/
classify-selat.sh # shared decode + classify core for both auto-approve hooks (fail-closed)
selat-cli.version # pinned @selat-ai/selat-cli version — source of truth for what installs
check-approve.sh # regression harness asserting the auto-approve classifier verdicts
run-hook.cmd # polyglot Windows/Unix wrapper (cross-OS hook support)
skills/
selat-discovery/SKILL.md # driver skill (the two-tier loop)
selat-gemini/
gemini-extension.json # Gemini variant (contextFileName; no mcpServers)
GEMINI.md # Gemini standing context (replaces a prompt hook)
selat-hermes/
plugin.yaml # Hermes plugin manifest
__init__.py # register() installs the @selat-ai/selat-cli runner
after-install.md # post-install note shown after the plugin is enabled
guides/
claude-code.md codex.md cursor.md gemini-cli.md openclaw.md hermes.md generic.md
.github/
workflows/sync-selat-cli-version.yml # polls npm; opens a PR to bump the runner pin + doc markers
scripts/sync-selat-cli-version.sh # the rewrite the workflow runs (pin file + version markers)
Standing-reminder mechanism differs by harness: a UserPromptSubmit hook on Claude Code
(it can inject per-prompt context); an alwaysApply rule (rules/selat.mdc) on Cursor
(its beforeSubmitPrompt hook is block-only and can't inject context, so the nudge lives in
a rule); a context file (GEMINI.md / AGENTS.md) on Gemini / Codex / OpenClaw /
Antigravity, which have no per-prompt context hook. Runner provisioning is a sessionStart
hook on both Claude Code and Cursor. Discovery is free everywhere (no wallet); the agent auto-runs
selat init only when a paid call is needed — it installs the Circle CLI + drives the wallet login (the user enters the OTP), and funding stays manual.
No MCP connector. SELAT has no MCP server today, so there is no
.mcp.jsonand nomcpServersblock anywhere in this repo.