Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

114 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SELAT plugins

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.

Get started — paste this to your agent

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 with npm i -g @selat-ai/selat-cli and run selat init.

What this is

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 — the selat runner
  • @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.

How SELAT differs from a flat capability index

  • 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 own catalog.selat.ai, merged). A flat index is one-tier. Discovery itself is freeselat search "<intent>" ranks candidates with no wallet or spend; only selat run / selat skill run pay.
  • 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.

Self-custody note (read this)

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.

Install per harness

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

Layout

.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.json and no mcpServers block anywhere in this repo.

About

Official SELAT plugins — discover vetted skills and federated x402/MPP capabilities, pay from your own Circle Agent Wallet (self-custody), from any agent.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages