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.
On a supported harness, use the plugin installer (reviewed pin + lock, npm ci --ignore-scripts).
The no-plugin fallback is the pinned CLI in guides/generic.md
(@selat-ai/selat-cli@0.16.18 --ignore-scripts — not @latest). 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 (reviewed pin + lock). The no-plugin fallback is guides/generic.md:npm i -g @selat-ai/selat-cli@0.16.18 --ignore-scriptsthenselat init. Do not install@latestas the payment path.
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 installing the pinned @selat-ai/selat-cli package = runner + skill + pay. This repo adds the thin plugin
layer (manifests, hooks, a driver skill, per-harness guides) that auto-installs the
reviewed runtime closure (pin file + lock, npm ci --ignore-scripts) 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 + MPP + Apify + pay.sh + 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 ask the user and wait before selat init, a Circle OTP, or any spend (do not auto-run init). Paid calls need an armed session budget (selat budget start); selat freeze is the kill switch.
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 |
| Grok Build | install.md#grok-build | grok plugin marketplace add SELAT-AI/selat-plugins then grok plugin install selat --trust, then npm install -g @selat-ai/selat-cli (plugin SessionStart hooks don't execute in grok 1.0.5, so Grok gets the floating npm runner, not the reviewed pin + lock — see guides/grok-plugin-hook-gap.md) |
| 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 (no spend hook, no locked runner; --auto-update is not the default) |
| OpenClaw | guides/openclaw.md | openclaw plugins install selat --marketplace https://github.com/SELAT-AI/selat-plugins (bundle auto-detect) |
| Hermes | 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 vendors the pin + lock and installs the reviewed runner |
| Any other / none | guides/generic.md | npm i -g @selat-ai/selat-cli@0.16.18 --ignore-scripts then selat init (not @latest) |
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 reviewed pin+lock via npm ci --ignore-scripts; shell-rc PATH edit is opt-in
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
selat-runtime-package.json # reviewed CLI + discovery + pay versions
selat-runtime-package-lock.json
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 reviewed runtime (fail-closed if pin/lock missing)
after-install.md # post-install note shown after the plugin is enabled
selat-cli.version # vendored pin for the subdirectory install
selat-runtime-package.json # vendored reviewed manifest
selat-runtime-package-lock.json
guides/
claude-code.md codex.md cursor.md gemini-cli.md openclaw.md hermes.md generic.md
.github/
workflows/sync-selat-cli-version.yml # coordinated runtime release (manual): regenerates pin + lock, opens a review PR
workflows/validate-selat-runtime-lock.yml
scripts/regenerate-selat-runtime-lock.sh
scripts/validate-selat-runtime-lock.sh
SELAT_RUNTIME_RELEASE.md
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 asks and waits
before selat init when a paid call is needed — it installs the Circle CLI + drives the wallet login (the user enters the OTP), and funding stays manual. Paid calls need user approval and an armed session budget.
MCP vs this plugin. Hosted discovery MCP lives at
https://catalog.selat.ai/mcp(search + quotes; spend stays local). This repo's harness plugins wrap theselatCLI and do not ship.mcp.jsonor anmcpServersblock.