Pre-flight Dependencies (auto-injected by Plugin Store CI) Run once per session before first use. These checks ensure required tools are installed. Install onchainos CLI + Skills (auto-injected) --- Plugin Store A CLI marketplace for installing/uninstalling/updating Skills and MCP servers across Claude Code, Cursor, and OpenClaw. Also an open-source community platform where any developer can submit plugins. Pre-flight Checks Run once per session before the first command. Do not echo routine output to the user. 1. Check binary version - If the reported version is ≥ (this skill's ): binary is c…

)\n num2=$(echo \"$pre2\" | grep -o '[0-9]*

Pre-flight Dependencies (auto-injected by Plugin Store CI) Run once per session before first use. These checks ensure required tools are installed. Install onchainos CLI + Skills (auto-injected) --- Plugin Store A CLI marketplace for installing/uninstalling/updating Skills and MCP servers across Claude Code, Cursor, and OpenClaw. Also an open-source community platform where any developer can submit plugins. Pre-flight Checks Run once per session before the first command. Do not echo routine output to the user. 1. Check binary version - If the reported version is ≥ (this skill's ): binary is c…

)\n num1=${num1:-0}\n num2=${num2:-0}\n [ \"$num1\" -gt \"$num2\" ] 2>/dev/null && return 0\n return 1\n}\n\n# ── GitHub API helpers ───────────────────────────────────────\nget_latest_stable_version() {\n response=$(curl -sSL --max-time 10 \"https://api.github.com/repos/${REPO}/releases/latest\" 2>/dev/null) || true\n ver=$(echo \"$response\" | grep -o '\"tag_name\": *\"v[^\"]*\"' | head -1 | sed 's/.*\"v\\([^\"]*\\)\".*/\\1/')\n if [ -z \"$ver\" ]; then\n echo \"Error: could not fetch latest version from GitHub.\" >&2\n echo \"Check your network connection or install manually from https://github.com/${REPO}\" >&2\n exit 1\n fi\n echo \"$ver\"\n}\n\n# ── Binary installer ─────────────────────────────────────────\ninstall_binary() {\n target=$(get_target)\n if [ -z \"$target\" ]; then\n exit 1\n fi\n tag=\"$1\"\n\n binary_name=\"${BINARY}-${target}\"\n url=\"https://github.com/${REPO}/releases/download/${tag}/${binary_name}\"\n checksums_url=\"https://github.com/${REPO}/releases/download/${tag}/checksums.txt\"\n\n echo \"Installing ${BINARY} ${tag} (${target})...\"\n\n tmpdir=$(mktemp -d)\n trap 'rm -rf \"$tmpdir\"' EXIT\n\n curl -fsSL \"$url\" -o \"$tmpdir/$binary_name\"\n curl -fsSL \"$checksums_url\" -o \"$tmpdir/checksums.txt\" 2>/dev/null || true\n\n if [ -f \"$tmpdir/checksums.txt\" ]; then\n expected_hash=$(grep \"$binary_name\" \"$tmpdir/checksums.txt\" 2>/dev/null | awk '{print $1}')\n if [ -n \"$expected_hash\" ]; then\n if command -v sha256sum >/dev/null 2>&1; then\n actual_hash=$(sha256sum \"$tmpdir/$binary_name\" | awk '{print $1}')\n elif command -v shasum >/dev/null 2>&1; then\n actual_hash=$(shasum -a 256 \"$tmpdir/$binary_name\" | awk '{print $1}')\n fi\n\n if [ -n \"$actual_hash\" ] && [ \"$actual_hash\" != \"$expected_hash\" ]; then\n echo \"Error: checksum mismatch!\" >&2\n echo \" Expected: $expected_hash\" >&2\n echo \" Got: $actual_hash\" >&2\n echo \"The downloaded file may have been tampered with. Aborting.\" >&2\n exit 1\n fi\n echo \"Checksum verified.\"\n fi\n fi\n\n mkdir -p \"$INSTALL_DIR\"\n mv \"$tmpdir/$binary_name\" \"$INSTALL_DIR/$BINARY\"\n chmod +x \"$INSTALL_DIR/$BINARY\"\n\n echo \"Installed ${BINARY} ${tag} to ${INSTALL_DIR}/${BINARY}\"\n}\n\n# ── PATH setup ───────────────────────────────────────────────\nensure_in_path() {\n case \":$PATH:\" in\n *\":$INSTALL_DIR:\"*) return 0 ;;\n esac\n\n EXPORT_LINE=\"export PATH=\\\"\\$HOME/.local/bin:\\$PATH\\\"\"\n\n shell_name=$(basename \"$SHELL\" 2>/dev/null || echo \"sh\")\n case \"$shell_name\" in\n zsh) profile=\"$HOME/.zshrc\" ;;\n bash)\n if [ -f \"$HOME/.bash_profile\" ]; then\n profile=\"$HOME/.bash_profile\"\n elif [ -f \"$HOME/.bashrc\" ]; then\n profile=\"$HOME/.bashrc\"\n else\n profile=\"$HOME/.profile\"\n fi\n ;;\n *) profile=\"$HOME/.profile\" ;;\n esac\n\n if [ -f \"$profile\" ] && grep -qF '$HOME/.local/bin' \"$profile\" 2>/dev/null; then\n return 0\n fi\n\n echo \"\" >> \"$profile\"\n echo \"# Added by plugin-store installer\" >> \"$profile\"\n echo \"$EXPORT_LINE\" >> \"$profile\"\n\n export PATH=\"$INSTALL_DIR:$PATH\"\n\n echo \"\"\n echo \"Added $INSTALL_DIR to PATH in $profile\"\n echo \"To start using '${BINARY}' now, run:\"\n echo \"\"\n echo \" source $profile\"\n echo \"\"\n echo \"Or simply open a new terminal window.\"\n}\n\n# ── Main ─────────────────────────────────────────────────────\nmain() {\n local_ver=$(get_local_version)\n\n # Fast path: binary exists, cache is fresh, AND cached latest == local version\n if [ -n \"$local_ver\" ] && is_cache_fresh; then\n cached_ver=$(cached_latest_version)\n if [ -n \"$cached_ver\" ] && [ \"$local_ver\" = \"$cached_ver\" ]; then\n echo \"${BINARY} ${local_ver} already up to date.\"\n return 0\n fi\n # Version mismatch (local != cached latest) — fall through to re-check\n fi\n\n latest_stable=$(get_latest_stable_version)\n\n if [ -z \"$local_ver\" ]; then\n target_ver=\"$latest_stable\"\n elif [ \"$local_ver\" = \"$latest_stable\" ]; then\n write_cache \"$latest_stable\"\n echo \"${BINARY} ${local_ver} already up to date.\"\n return 0\n else\n if semver_gt \"$latest_stable\" \"$local_ver\"; then\n target_ver=\"$latest_stable\"\n else\n write_cache \"$latest_stable\"\n echo \"${BINARY} ${local_ver} already up to date.\"\n return 0\n fi\n fi\n\n if [ -n \"$local_ver\" ]; then\n echo \"Updating ${BINARY} from ${local_ver} to ${target_ver}...\"\n fi\n\n install_binary \"v${target_ver}\"\n write_cache \"$target_ver\"\n ensure_in_path\n}\n\nmain\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":8390,"content_sha256":"b88540fbb9dbf0116139397edc43dc08b7845a88d161c3e50082081dea175c17"},{"filename":"references/cli-reference.md","content":"# Plugin Store CLI Reference\n\nComplete command reference with parameters, output fields, and usage examples.\n\n---\n\n## 1. `plugin-store list`\n\nList all available plugins in the registry.\n\n**Parameters:** None\n\n**Output:**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| Name | string | Plugin name (unique identifier) |\n| Version | string | Current version in registry |\n| Source | enum | Trust level: `official`, `dapp-official`, `community` |\n| Description | string | One-line description |\n\n**Example:**\n\n```bash\n$ plugin-store list\n\nName Version Source Description\n------------------------------------------------------------------------------------------\nuniswap-ai 1.7.0 dapp-official AI-powered Uniswap developer tools...\n\n2 plugins available.\n```\n\n---\n\n## 2. `plugin-store search \u003ckeyword>`\n\nSearch plugins by keyword. Matches against name, tags, description, and category.\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `keyword` | string | Yes | Search term |\n\n**Output:** Same table format as `list`, filtered by keyword match.\n\n**Example:**\n\n```bash\n$ plugin-store search trading\n\nName Version Source Description\n------------------------------------------------------------------------------------------\nuniswap-ai 1.7.0 dapp-official AI-powered Uniswap developer tools...\n\n2 plugins found.\n```\n\n```bash\n$ plugin-store search uniswap\n\nName Version Source Description\n------------------------------------------------------------------------------------------\nuniswap-ai 1.7.0 dapp-official AI-powered Uniswap developer tools...\n\n1 plugins found.\n```\n\n---\n\n## 3. `plugin-store info \u003cname>`\n\nShow detailed plugin metadata including components, chains, and protocols.\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `name` | string | Yes | Exact plugin name |\n\n**Output:**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| Name | string | Plugin name |\n| Version | string | Current version |\n| Description | string | Full description |\n| Author | string | Author name and GitHub URL |\n| Category | string | Plugin category |\n| Source | enum | Trust level |\n| Tags | string[] | Comma-separated tags |\n| Components | flags | Which components are available: Skill ✔, MCP ✔ (type), Binary ✔ |\n| Extra | object | Chains, protocols, risk level (only if plugin has extra metadata) |\n\n**Example:**\n\n```bash\n$ plugin-store info uniswap-ai\n\nName: uniswap-ai\nVersion: 1.7.0\nDescription: AI-powered Uniswap developer tools: trading, hooks, drivers, and on-chain analysis across V2/V3/V4\nAuthor: Uniswap (https://github.com/Uniswap/uniswap-ai)\nCategory: defi-protocol\nSource: dapp-official\nTags: uniswap, trading, hooks, v2, v3, v4, multi-chain\n\nComponents:\n ✔ Skill\n\nExtra:\n Chains: ethereum, base, arbitrum, optimism, polygon, bnb, avalanche, celo, blast, zora, worldchain, unichain\n Protocols: uniswap-v2, uniswap-v3, uniswap-v4, universal-router\n Risk Level: medium\n```\n\n**Error — plugin not found:**\n\n```\nPlugin 'foo' not found. Run `plugin-store search \u003ckeyword>` to find plugins.\n```\n\n---\n\n## 4. `plugin-store install \u003cname> [OPTIONS]`\n\nInstall a plugin to one or more agents. Downloads skill files, configures MCP servers, and installs binaries as applicable.\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `name` | string | Yes | Plugin name to install |\n| `--skill-only` | flag | No | Install skill component only (skip MCP and binary) |\n| `--mcp-only` | flag | No | Install MCP component only (skip skill and binary) |\n| `--agent \u003cid>` | string | No | Target agent ID. Skip interactive selection. Valid: `claude-code`, `cursor`, `openclaw` |\n\n**Behavior:**\n\n1. Fetches plugin metadata from registry\n2. If `type == \"community\"` and not already installed → shows warning, asks confirmation\n3. If `--agent` not specified → detects installed agents, prompts multi-select\n4. Installs components per agent:\n - **Skill**: downloads SKILL.md from GitHub → writes to `~/\u003cagent>/skills/\u003cplugin>/SKILL.md`\n - **MCP**: writes config entry to agent's settings file\n - **Binary**: downloads platform-specific binary from GitHub releases, verifies checksum\n5. Records install state to `~/.plugin-store/installed.json`\n\n**Example:**\n\n```bash\n# Interactive install (prompts for agent selection)\n$ plugin-store install uniswap-ai\n\n# Install to Claude Code only\n$ plugin-store install uniswap-ai --agent claude-code\n\n# Install skill only, skip MCP/binary\n$ plugin-store install uniswap-ai --skill-only\n\n# Install MCP only, skip skill/binary\n$ plugin-store install uniswap-ai --mcp-only\n\n# Combine: skill-only + specific agent\n$ plugin-store install uniswap-ai --skill-only --agent claude-code\n```\n\n**Output:**\n\n```\nInstalling uniswap-ai 1.7.0...\n ✔ Skill installed → ~/.claude/skills/uniswap-ai/ (Claude Code)\nDone!\n```\n\n**Error — plugin not found:**\n\n```\nPlugin 'foo' not found. Run `plugin-store search \u003ckeyword>` to find plugins.\n```\n\n**Error — no agents selected:**\n\n```\nNo agents selected.\n```\n\n**Error — unknown agent ID:**\n\n```\nUnknown agent 'foo'. Valid: claude-code, cursor, openclaw\n```\n\n---\n\n## 5. `plugin-store uninstall \u003cname> [OPTIONS]`\n\nUninstall a plugin. Removes skill files, MCP config entries, and binaries.\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `name` | string | Yes | Plugin name to uninstall |\n| `--agent \u003cid>` | string | No | Only remove from this agent. Valid: `claude-code`, `cursor`, `openclaw` |\n\n**Behavior:**\n\n- Without `--agent`: removes from ALL agents the plugin was installed to, then removes state record\n- With `--agent`: removes from that agent only. If no agents remain, removes state record entirely\n\n**Example:**\n\n```bash\n# Uninstall from all agents\n$ plugin-store uninstall uniswap-ai\n\n# Uninstall from Claude Code only\n$ plugin-store uninstall uniswap-ai --agent claude-code\n```\n\n**Output:**\n\n```\nUninstalling uniswap-ai...\n ✔ Skill removed from Claude Code\n ✔ State updated\nDone!\n```\n\n**Error — not installed:**\n\n```\nPlugin 'foo' is not installed.\n```\n\n---\n\n## 6. `plugin-store update \u003cname>`\n\nUpdate a specific installed plugin to the latest registry version.\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `name` | string | No | Plugin name. Omit when using `--all` |\n| `--all` | flag | No | Update all installed plugins |\n\n**Behavior:**\n\n1. Force-refreshes registry cache\n2. Compares installed version vs registry version for target plugin(s)\n3. If update available: shows `oldVersion -> newVersion`, re-installs to same agents\n4. If `--all` with multiple updates: asks confirmation before proceeding\n5. If already up to date: prints `(up to date)`\n\n**Example:**\n\n```bash\n# Update a specific plugin\n$ plugin-store update uniswap-ai\n\n# Update all installed plugins\n$ plugin-store update --all\n```\n\n**Output — update available:**\n\n```\nUpdates available:\n uniswap-ai: 1.5.0 -> 1.7.0\nInstalling uniswap-ai 1.7.0...\n ✔ Skill installed → ~/.claude/skills/uniswap-ai/ (Claude Code)\nDone!\n```\n\n**Output — up to date:**\n\n```\n uniswap-ai 1.7.0 (up to date)\nAll plugins are up to date.\n```\n\n**Output — nothing installed:**\n\n```\nNo plugins installed.\n```\n\n**Output — missing arguments:**\n\n```\nSpecify a plugin name or use --all.\n```\n\n---\n\n## 7. `plugin-store installed`\n\nShow all installed plugins with their agents and components.\n\n**Parameters:** None\n\n**Output:**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| Name | string | Plugin name |\n| Version | string | Installed version |\n| Agents | string[] | Comma-separated agent IDs (e.g. `claude-code, cursor`) |\n| Components | string[] | Comma-separated installed components (e.g. `skill, mcp, binary`) |\n\n**Example:**\n\n```bash\n$ plugin-store installed\n\nName Version Agents Components\n-------------------------------------------------------------------------------------\nuniswap-ai 1.7.0 claude-code skill\n\n2 plugins installed.\n```\n\n**Output — nothing installed:**\n\n```\nNo plugins installed.\n```\n\n---\n\n## 8. `plugin-store registry update`\n\nForce refresh the local registry cache from remote GitHub.\n\n**Parameters:** None\n\n**Behavior:**\n\n- Fetches latest `registry.json` from GitHub raw URL\n- Overwrites local cache at `~/.plugin-store/cache/registry.json`\n- Resets the 12-hour cache TTL\n\n**Example:**\n\n```bash\n$ plugin-store registry update\n\nRefreshing registry...\n OK Registry updated. 2 plugins available.\n```\n\n---\n\n## 9. `plugin-store self-update`\n\nUpdate the plugin-store CLI binary itself to the latest GitHub release.\n\n**Parameters:** None\n\n**Behavior:**\n\n1. Fetches latest release from GitHub API\n2. Compares latest tag version with current binary version (`CARGO_PKG_VERSION`)\n3. If already up to date: prints confirmation and exits\n4. If update available: detects current platform target, finds matching binary asset in release\n5. Downloads binary, verifies SHA256 checksum against `checksums.txt` (if present in release)\n6. Atomically replaces current binary: `current → .bak`, `new → current`; removes `.bak` on success; rolls back on failure\n\n**Example:**\n\n```bash\n$ plugin-store self-update\n\nChecking for updates...\n Current version: 0.1.0\n Latest version: 0.2.0\n\n Update available: 0.1.0 → 0.2.0\n Downloading plugin-store-aarch64-apple-darwin...\n Checksum verified ✓\n\nUpdated! 0.1.0 → 0.2.0\n```\n\n**Output — already up to date:**\n\n```\nChecking for updates...\n Current version: 0.2.0\n Latest version: 0.2.0\n\nAlready up to date!\n```\n\n**Output — no releases on GitHub:**\n\n```\n No releases found on GitHub. You're on the latest build.\n```\n\n**Error — platform not supported:**\n\n```\nNo binary found for platform 'riscv64-unknown-linux-gnu'. Available assets: plugin-store-x86_64-apple-darwin, ...\n```\n\n**Error — checksum mismatch:**\n\n```\nChecksum verification failed.\n Expected: abc123...\n Got: def456...\n```\n\n---\n\n## Agent IDs\n\nValid values for `--agent` parameter:\n\n| ID | Agent | Detection |\n|----|-------|-----------|\n| `claude-code` | Claude Code | `~/.claude/` exists |\n| `cursor` | Cursor | `~/.cursor/` exists |\n| `openclaw` | OpenClaw | `~/.openclaw/` exists |\n\n---\n\n## File Paths\n\n| Path | Description |\n|------|-------------|\n| `~/.plugin-store/cache/registry.json` | Cached registry (12h TTL) |\n| `~/.plugin-store/installed.json` | Installed plugin state |\n| `~/.plugin-store/bin/` | Default binary install directory |\n| `~/.claude/skills/\u003cplugin>/SKILL.md` | Skill file for Claude Code |\n| `~/.claude/settings.json` → `mcpServers` | MCP config for Claude Code |\n| `~/.cursor/skills/\u003cplugin>/SKILL.md` | Skill file for Cursor |\n| `~/.cursor/mcp.json` → `mcpServers` | MCP config for Cursor |\n| `~/.openclaw/skills/\u003cplugin>/SKILL.md` | Skill file for OpenClaw |\n\n---\n\n## Common Workflows\n\n### Install a plugin end-to-end\n\n```bash\nplugin-store list # Browse available plugins\nplugin-store info uniswap-ai # Check details\nplugin-store install uniswap-ai --agent claude-code # Install\nplugin-store installed # Verify\n```\n\n### Update everything\n\n```bash\nplugin-store registry update # Refresh registry first\nplugin-store update --all # Update all installed\n```\n\n### Remove a plugin from one agent\n\n```bash\nplugin-store uninstall uniswap-ai --agent cursor # Remove from Cursor only\nplugin-store installed # Verify remaining\n```\n\n### Search and install\n\n```bash\nplugin-store search prediction # Find prediction market plugins\n```\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":12070,"content_sha256":"f1ad66cfb33869f8b9e4eed689b48591ed35494d24508c8b71c1a9355a37140b"},{"filename":"SUMMARY.md","content":"`For Everyone`\n\n**The plugin marketplace for AI coding agents — discover, install, and manage all Skills and MCP servers with a single command.**\n\n- One CLI works across Claude Code, Cursor, and OpenClaw\n- Search, install, update, and uninstall plugins without leaving your terminal\n- Open developer platform: submit your own plugin via Pull Request and publish to all users\n\n### Plugin Store\n\nThe CLI marketplace for AI coding agents to discover, install, update, and manage Skills and MCP servers.\n\n### Prerequisites\n\n- Claude Code, Cursor, or OpenClaw installed\n- onchainos is auto-installed as a dependency on first use — no manual setup needed\n\n### When to Use This Skill\n\nUse this skill when the user:\n- Asks what plugins, skills, strategies, or DApps are available\n- Wants to install, uninstall, or update a plugin\n- Wants to extend their AI agent with new tools or capabilities\n- Is a developer who wants to submit or publish their own plugin\n\n### How It Works\n\nPlugin Store provides a unified CLI interface that works across Claude Code, Cursor, and OpenClaw. It maintains a registry of all available plugins — Skills and MCP servers — which you can browse, search, and install from a single tool. Batch updates keep everything current at once. For developers, the store is an open submission platform: scaffold a new plugin with `plugin-store init`, validate it with `plugin-store lint`, and submit via Pull Request. Automated lint checks, AI review, and build verification run before the plugin is published and available to all users.\n\nKey commands:\n- `plugin-store list` — Browse all available plugins\n- `plugin-store search \u003ckeyword>` — Search by name, description, or tags\n- `plugin-store install \u003cname>` — Install a plugin\n- `plugin-store uninstall \u003cname>` — Uninstall a plugin\n- `plugin-store update --all` — Update all installed plugins\n- `plugin-store installed` — Show all installed plugins and their status\n- `plugin-store init \u003cname>` — Scaffold a new plugin for submission\n- `plugin-store lint \u003cpath>` — Validate a plugin before submitting","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2086,"content_sha256":"fb17937f9b1065b2aa0c6616379b79aa80edcfdfad4fe14c3185eb277cdd48f9"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":2},"content":[{"text":"Pre-flight Dependencies (auto-injected by Plugin Store CI)","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"Run once per session before first use. These checks ensure required tools are installed.","type":"text"}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Install onchainos CLI + Skills (auto-injected)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# 1. Install onchainos CLI — pin to latest release tag, verify SHA256\n# of the installer before executing (no curl|sh from main).\nif ! command -v onchainos >/dev/null 2>&1; then\n set -e\n LATEST_TAG=$(curl -sSL --max-time 5 \\\n \"https://api.github.com/repos/okx/onchainos-skills/releases/latest\" \\\n | sed -n 's/.*\"tag_name\"[[:space:]]*:[[:space:]]*\"\\([^\"]*\\)\".*/\\1/p' | head -1)\n if [ -z \"$LATEST_TAG\" ]; then\n echo \"ERROR: failed to resolve latest onchainos release tag (network or rate limit).\" >&2\n echo \" Manual install: https://github.com/okx/onchainos-skills\" >&2\n exit 1\n fi\n\n ONCHAINOS_TMP=$(mktemp -d)\n curl -sSL --max-time 30 \\\n \"https://raw.githubusercontent.com/okx/onchainos-skills/${LATEST_TAG}/install.sh\" \\\n -o \"$ONCHAINOS_TMP/install.sh\"\n curl -sSL --max-time 30 \\\n \"https://github.com/okx/onchainos-skills/releases/download/${LATEST_TAG}/installer-checksums.txt\" \\\n -o \"$ONCHAINOS_TMP/installer-checksums.txt\"\n\n EXPECTED=$(awk '$2 ~ /install\\.sh$/ {print $1; exit}' \"$ONCHAINOS_TMP/installer-checksums.txt\")\n if command -v sha256sum >/dev/null 2>&1; then\n ACTUAL=$(sha256sum \"$ONCHAINOS_TMP/install.sh\" | awk '{print $1}')\n else\n ACTUAL=$(shasum -a 256 \"$ONCHAINOS_TMP/install.sh\" | awk '{print $1}')\n fi\n if [ -z \"$EXPECTED\" ] || [ \"$EXPECTED\" != \"$ACTUAL\" ]; then\n echo \"ERROR: onchainos installer SHA256 mismatch — refusing to execute.\" >&2\n echo \" expected=$EXPECTED actual=$ACTUAL tag=$LATEST_TAG\" >&2\n rm -rf \"$ONCHAINOS_TMP\"\n exit 1\n fi\n\n sh \"$ONCHAINOS_TMP/install.sh\"\n rm -rf \"$ONCHAINOS_TMP\"\n set +e\nfi\n\n# 2. Install onchainos skills (enables AI agent to use onchainos commands)\nnpx skills add okx/onchainos-skills --yes --global\n\n# 3. Install plugin-store skills (enables plugin discovery and management)\nnpx skills add okx/plugin-store --skill plugin-store --yes --global","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":1},"content":[{"text":"Plugin Store","type":"text"}]},{"type":"paragraph","content":[{"text":"A CLI marketplace for installing/uninstalling/updating Skills and MCP servers across Claude Code, Cursor, and OpenClaw. Also an open-source community platform where any developer can submit plugins.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Pre-flight Checks","type":"text"}]},{"type":"paragraph","content":[{"text":"Run once per session before the first ","type":"text"},{"text":"plugin-store","type":"text","marks":[{"type":"code_inline"}]},{"text":" command. Do not echo routine output to the user.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"1. Check binary version","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"plugin-store --version 2>/dev/null || ~/.local/bin/plugin-store --version 2>/dev/null || ~/.cargo/bin/plugin-store --version 2>/dev/null","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"If the reported version is ","type":"text"},{"text":"≥ ","type":"text","marks":[{"type":"strong"}]},{"text":"0.3.0","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" (this skill's ","type":"text"},{"text":"metadata.version","type":"text","marks":[{"type":"code_inline"}]},{"text":"): binary is current, skip to step 2.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"If the binary is ","type":"text"},{"text":"missing or older","type":"text","marks":[{"type":"strong"}]},{"text":": run the installer.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"\u003c!-- TODO(security/C01): Automated install commands removed pending upstream fix.","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":" The previous macOS/Linux and Windows one-liners (a 'curl -sSL ... | sh'\n pipe and an 'irm ... | iex' equivalent fetching install.sh / install.ps1\n directly from the main branch) are flagged C01 (zero-verification\n remote code execution) by the skill security scanner. The literal\n command strings have been intentionally omitted from this comment so\n the scanner does not match them.\n\n A SHA256-verified replacement modelled on okx/onchainos-skills\n (which fetches install.sh + installer-checksums.txt from a pinned\n release, hashes install.sh locally, and refuses to execute on\n mismatch) cannot ship today because github.com/okx/plugin-store\n does not yet publish the required artifacts:\n\n 1. No plugin-store CLI v* release exists (current releases are\n per-plugin only: plugins/\u003cname>@\u003cversion>).\n 2. No 'installer-checksums.txt' asset is published on any\n release.\n\n Re-enable an OnchainOS-style automated install ONLY after BOTH\n conditions below are satisfied on github.com/okx/plugin-store:\n 1. release.yml produces a v* tag dedicated to the plugin-store\n CLI itself, and\n 2. The release.yml 'checksums' job ALSO hashes\n skills/plugin-store/install.sh and install.ps1 into a release\n asset named 'installer-checksums.txt'.\n\n Until then, instruct the user to install manually using the\n 'Manual install' block below.","type":"text"}]},{"type":"paragraph","content":[{"text":"-->","type":"text"}]},{"type":"paragraph","content":[{"text":"Manual install","type":"text","marks":[{"type":"strong"}]},{"text":" — visit ","type":"text"},{"text":"https://github.com/okx/plugin-store/releases","type":"text","marks":[{"type":"link","attrs":{"href":"https://github.com/okx/plugin-store/releases","title":null}}]},{"text":", download the binary for your platform, verify it against ","type":"text"},{"text":"checksums.txt","type":"text","marks":[{"type":"code_inline"}]},{"text":" from the same release, and place it on your ","type":"text"},{"text":"PATH","type":"text","marks":[{"type":"code_inline"}]},{"text":" (e.g. ","type":"text"},{"text":"~/.local/bin/plugin-store","type":"text","marks":[{"type":"code_inline"}]},{"text":").","type":"text"}]},{"type":"paragraph","content":[{"text":"Offline fallback:","type":"text","marks":[{"type":"strong"}]},{"text":" if a binary already exists locally, proceed with it. If not installed and the network is unreachable, stop and ask the user to check their connection.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"2. Check for Skill update (remote version check)","type":"text"}]},{"type":"paragraph","content":[{"text":"Fetch the latest Skill version from GitHub (timeout 5 seconds, non-blocking):","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"curl -sSL --max-time 5 \"https://raw.githubusercontent.com/okx/plugin-store/main/skills/plugin-store/SKILL.md\" 2>/dev/null | head -20 | grep 'version:' | head -1","type":"text"}]},{"type":"paragraph","content":[{"text":"Compare the remote ","type":"text"},{"text":"metadata.version","type":"text","marks":[{"type":"code_inline"}]},{"text":" with the local version (","type":"text"},{"text":"0.3.0","type":"text","marks":[{"type":"code_inline"}]},{"text":").","type":"text"}]},{"type":"paragraph","content":[{"text":"If remote version is newer than local","type":"text","marks":[{"type":"strong"}]},{"text":", display this notice to the user:","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"📦 Plugin Store Skill 有新版本可用(当前: 0.3.0, 最新: X.Y.Z)","type":"text"}]},{"type":"paragraph","content":[{"text":"是否更新?更新命令:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"plugin-store install plugin-store --agent claude-code --skill-only","type":"text"}]},{"type":"paragraph","content":[{"text":"⚠️ 注意:更新后需要","type":"text"},{"text":"重启当前会话","type":"text","marks":[{"type":"strong"}]},{"text":",新版 Skill 才会在上下文中生效。","type":"text"}]}]},{"type":"paragraph","content":[{"text":"Then ","type":"text"},{"text":"wait for the user's response","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"If user says yes / 确认 / 更新 → run the install command, then remind: \"Skill 已更新,请重启当前会话(退出并重新进入)以加载新版本。\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"If user says no / 跳过 / 以后再说 → continue with current version, do not ask again this session.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"If the curl fails or times out → skip silently, continue with current version.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"If versions match or remote is unreachable","type":"text","marks":[{"type":"strong"}]},{"text":", skip silently — do not print anything.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"3. Do not auto-reinstall on command failures","type":"text"}]},{"type":"paragraph","content":[{"text":"Report errors and suggest ","type":"text"},{"text":"plugin-store self-update","type":"text","marks":[{"type":"code_inline"}]},{"text":" or checking https://github.com/okx/plugin-store.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"4. Install onchainos-skills (silent, non-blocking)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"npx skills add okx/onchainos-skills --yes 2>/dev/null || true","type":"text"}]},{"type":"paragraph","content":[{"text":"This installs sub-skills used by Skill Routing (","type":"text"},{"text":"okx-dex-token","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"okx-dex-swap","type":"text","marks":[{"type":"code_inline"}]},{"text":", etc.). Do not block on failure.","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"Available Plugins","type":"text"}]},{"type":"paragraph","content":[{"text":"Always run ","type":"text","marks":[{"type":"strong"}]},{"text":"plugin-store list","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" to get the current plugin list — never rely on a hardcoded table.","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"plugin-store list","type":"text"}]},{"type":"paragraph","content":[{"text":"Parse the output and present it to the user as a clean table (name, category, downloads, description). The registry updates dynamically; this is the only source of truth.","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"Skill Routing","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"User Intent","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Action","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"What dapps / strategies / skills are available?\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store list","type":"text","marks":[{"type":"code_inline"}]},{"text":", present results as a table","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"What can you do?\" / capability discovery","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store list","type":"text","marks":[{"type":"code_inline"}]},{"text":", explain capabilities based on live output","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"Plugin商店有什么\" / \"有什么Plugin\" / \"有什么项目\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store list","type":"text","marks":[{"type":"code_inline"}]},{"text":", present results as a table","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"什么项目最火\" / \"最热门的项目\" / \"trending projects\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store list","type":"text","marks":[{"type":"code_inline"}]},{"text":", sort by downloads, highlight top entries","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"怎么玩DeFi\" / \"链上怎么赚币\" / \"链上有什么玩法\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store list","type":"text","marks":[{"type":"code_inline"}]},{"text":", introduce categories and recommend starting points","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"有什么好的策略\" / \"推荐策略\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store list","type":"text","marks":[{"type":"code_inline"}]},{"text":", filter and highlight trading-strategy category","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"有什么DeFi协议\" / \"推荐DeFi项目\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store list","type":"text","marks":[{"type":"code_inline"}]},{"text":", filter and highlight defi-protocol category","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"Install X\" / \"安装 X\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store install \u003cname> --yes","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"Uninstall X\" / \"卸载 X\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store uninstall \u003cname>","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"Update all\" / \"更新Plugin\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store update --all","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"Show installed\" / \"已安装\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store installed","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"Search X\" / \"搜索 X\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store search \u003ckeyword>","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"I want to create/submit a plugin\" / \"我想开发Plugin\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Guide through the Developer Workflow below","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"How to contribute\" / \"怎么提交Plugin\" / \"hackathon\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Guide through the Developer Workflow below","type":"text"}]}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"Command Index","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"CLI Reference","type":"text","marks":[{"type":"strong"}]},{"text":": For full parameter tables, output fields, and error cases, see ","type":"text"},{"text":"cli-reference.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/cli-reference.md","title":null}}]},{"text":".","type":"text"}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"User Commands","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"#","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Command","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Description","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"1","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"plugin-store list","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"List all available plugins in the registry","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"2","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"plugin-store search \u003ckeyword>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Search plugins by name, tag, or description","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"3","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"plugin-store info \u003cname>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Show detailed plugin info (components, chains, protocols)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"4","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"plugin-store install \u003cname>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Install a plugin (interactive agent selection)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"5","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"plugin-store install \u003cname> --yes","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Install non-interactively (auto-detects agents)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"6","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"plugin-store install \u003cname> --skill-only","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Install skill component only","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"7","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"plugin-store uninstall \u003cname>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Uninstall a plugin from all agents","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"8","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"plugin-store update --all","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Update all installed plugins","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"9","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"plugin-store installed","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Show all installed plugins and their status","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"10","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"plugin-store registry update","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Force refresh registry cache","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"11","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"plugin-store self-update","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Update plugin-store CLI itself to latest version","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Developer Commands","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"#","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Command","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Description","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"12","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"plugin-store init \u003cname>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Scaffold a new plugin (creates plugin.yaml, SKILL.md, LICENSE, etc.)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"13","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"plugin-store lint \u003cpath>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Validate a plugin before submission (30+ checks)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"14","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"plugin-store import \u003cgithub-url>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Import an existing Claude marketplace Plugin into plugin-store format (Mode C)","type":"text"}]}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"Operation Flow","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Intent: Strategy / DApp / Capability Discovery","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store list","type":"text","marks":[{"type":"code_inline"}]},{"text":" to fetch the live registry","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Present results as a clean table (name, category, downloads, description)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Suggest next steps: \"Want to install one? Just say ","type":"text"},{"text":"install \u003cname>","type":"text","marks":[{"type":"code_inline"}]},{"text":"\"","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Intent: Install a Plugin","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store install \u003cname> --yes","type":"text","marks":[{"type":"code_inline"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"--yes","type":"text","marks":[{"type":"code_inline"}]},{"text":" skips the community plugin confirmation prompt","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Agent selection is automatic in non-interactive mode (installs to all detected agents)","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"The CLI will:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Fetch plugin metadata from registry","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Download and install skill, MCP config, and/or binary as applicable","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Immediately after install succeeds","type":"text","marks":[{"type":"strong"}]},{"text":", read the installed skill file directly — do NOT ask the user to restart:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"Read file: ~/.claude/skills/\u003cname>/SKILL.md","type":"text"}]},{"type":"paragraph","content":[{"text":"Then follow the instructions in that file (Pre-flight → onboarding flow). The skill is immediately usable in the current session.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Intent: Manage Installed Plugins","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store installed","type":"text","marks":[{"type":"code_inline"}]},{"text":" to show current state","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store update --all","type":"text","marks":[{"type":"code_inline"}]},{"text":" to update everything","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store uninstall \u003cname>","type":"text","marks":[{"type":"code_inline"}]},{"text":" to remove","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"Developer Workflow: Create and Submit a Plugin","type":"text"}]},{"type":"paragraph","content":[{"text":"Plugin Store is an open-source community platform. Any developer can submit a plugin through a Pull Request. The full workflow:","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Overview","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"Two types of plugins:\n Type A: Pure Skill — just a SKILL.md that orchestrates onchainos CLI commands\n Type B: Skill + Source Code — SKILL.md + a CLI tool compiled/installed from your source repo\n\nFive supported languages for source code:\n Rust, Go → compiled to native binary (~1-20MB)\n TypeScript, Node.js → distributed via npm install (~KB)\n Python → distributed via pip install (~KB)","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 1: Fork and scaffold","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Fork https://github.com/okx/plugin-store on GitHub, then:\ngit clone --depth=1 [email protected]:YOUR_USERNAME/plugin-store.git\ncd plugin-store\nplugin-store init \u003cyour-plugin-name>","type":"text"}]},{"type":"paragraph","content":[{"text":"This creates ","type":"text"},{"text":"skills/\u003cyour-plugin-name>/","type":"text","marks":[{"type":"code_inline"}]},{"text":" with a complete template:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"skills/\u003cyour-plugin-name>/\n├── plugin.yaml # Plugin manifest (fill in your details)\n├── skills/\u003cname>/\n│ └── SKILL.md # Skill definition (built-in onchainos demo)\n│ └── references/\n├── LICENSE\n├── CHANGELOG.md\n└── README.md","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 2: Edit plugin.yaml","type":"text"}]},{"type":"paragraph","content":[{"text":"Pure Skill","type":"text","marks":[{"type":"strong"}]},{"text":" — just fill in the basics:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"yaml"},"content":[{"text":"schema_version: 1\nname: \u003cyour-plugin-name> # lowercase + hyphens, 2-40 chars\nversion: \"1.0.0\"\ndescription: \"What your plugin does\"\nauthor:\n name: \"Your Name\"\n github: \"your-github-username\" # must match PR submitter\nlicense: MIT\ncategory: utility # trading-strategy | defi-protocol | analytics | utility | security | wallet | nft\ntags: [keyword1, keyword2]\n\ncomponents:\n skill:\n dir: skills/\u003cyour-plugin-name>\n\napi_calls: [] # external API domains your plugin calls","type":"text"}]},{"type":"paragraph","content":[{"text":"Skill + Source Code","type":"text","marks":[{"type":"strong"}]},{"text":" — add a ","type":"text"},{"text":"build","type":"text","marks":[{"type":"code_inline"}]},{"text":" section pointing to your source repo:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"yaml"},"content":[{"text":"# ... same as above, plus:\nbuild:\n lang: rust # rust | go | typescript | node | python\n source_repo: \"your-org/your-tool\" # your GitHub repo with source code\n source_commit: \"a1b2c3d4e5f6...\" # full 40-char commit SHA (git rev-parse HEAD)\n binary_name: \"your-tool\" # compiled output name\n # main: \"src/index.js\" # required for typescript/node/python","type":"text"}]},{"type":"paragraph","content":[{"text":"How to get the commit SHA:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"cd your-source-repo\ngit push origin main\ngit rev-parse HEAD # copy this 40-char string into build.source_commit","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 3: Write SKILL.md","type":"text"}]},{"type":"paragraph","content":[{"text":"SKILL.md teaches the AI agent how to use your plugin. Required sections:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"YAML frontmatter","type":"text","marks":[{"type":"strong"}]},{"text":" — name, description, version, author, tags","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Overview","type":"text","marks":[{"type":"strong"}]},{"text":" — what the plugin does (2-3 sentences)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Pre-flight Checks","type":"text","marks":[{"type":"strong"}]},{"text":" — what needs to be installed before use","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Commands","type":"text","marks":[{"type":"strong"}]},{"text":" — specific onchainos commands with When to use / Output","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Error Handling","type":"text","marks":[{"type":"strong"}]},{"text":" — table of common errors and resolutions","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Skill Routing","type":"text","marks":[{"type":"strong"}]},{"text":" — when to defer to other skills","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Critical rule:","type":"text","marks":[{"type":"strong"}]},{"text":" All on-chain write operations (signing, broadcasting, swaps, contract calls) MUST use onchainos CLI. Querying external data sources (third-party APIs, price feeds) is freely allowed.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 4: Validate locally","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"plugin-store lint ./skills/\u003cyour-plugin-name>/","type":"text"}]},{"type":"paragraph","content":[{"text":"Fix all errors (❌), then re-run until you see ✓. Warnings (⚠️) are advisory.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 5: Submit via Pull Request","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"git checkout -b submit/\u003cyour-plugin-name>\ngit add skills/\u003cyour-plugin-name>/\ngit commit -m \"[new-plugin] \u003cyour-plugin-name> v1.0.0\"\ngit push origin submit/\u003cyour-plugin-name>","type":"text"}]},{"type":"paragraph","content":[{"text":"Then create a PR from your fork to ","type":"text"},{"text":"okx/plugin-store","type":"text","marks":[{"type":"code_inline"}]},{"text":". Each PR must contain exactly one plugin.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"What happens after submission","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"Phase 2: Structure check (~30s) — bot validates plugin.yaml + SKILL.md\nPhase 3: AI code review (~2min) — Claude reads your code, writes a 9-section report\nPhase 4: Build check (if binary) — compiles your source code on 3 platforms\nPhase 7: After merge — auto-publishes to registry, users can install immediately","type":"text"}]},{"type":"paragraph","content":[{"text":"Human review takes 1-3 days. Once merged, your plugin is live:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"plugin-store install \u003cyour-plugin-name>","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Source code requirements by language","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Language","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Key requirements","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Rust","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Cargo.toml","type":"text","marks":[{"type":"code_inline"}]},{"text":" with ","type":"text"},{"text":"[[bin]]","type":"text","marks":[{"type":"code_inline"}]},{"text":" matching ","type":"text"},{"text":"binary_name","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Go","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"go.mod","type":"text","marks":[{"type":"code_inline"}]},{"text":" with module declaration, ","type":"text"},{"text":"func main()","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"TypeScript","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"package.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" with ","type":"text"},{"text":"\"bin\"","type":"text","marks":[{"type":"code_inline"}]},{"text":" field, entry file has ","type":"text"},{"text":"#!/usr/bin/env node","type":"text","marks":[{"type":"code_inline"}]},{"text":", must be JS (not .ts)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Node.js","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"package.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" with ","type":"text"},{"text":"\"bin\"","type":"text","marks":[{"type":"code_inline"}]},{"text":" field, entry file has ","type":"text"},{"text":"#!/usr/bin/env node","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Python","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"pyproject.toml","type":"text","marks":[{"type":"code_inline"}]},{"text":" with ","type":"text"},{"text":"[build-system]","type":"text","marks":[{"type":"code_inline"}]},{"text":" + ","type":"text"},{"text":"[project.scripts]","type":"text","marks":[{"type":"code_inline"}]},{"text":", recommend also ","type":"text"},{"text":"setup.py","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Common lint errors","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Error","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Fix","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"E031 name format invalid","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Use lowercase + hyphens only: ","type":"text"},{"text":"my-cool-plugin","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"E052 missing SKILL.md","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Put SKILL.md in the path specified by ","type":"text"},{"text":"components.skill.dir","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"E110/E111 binary needs build","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Add ","type":"text"},{"text":"build","type":"text","marks":[{"type":"code_inline"}]},{"text":" section with ","type":"text"},{"text":"lang","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"source_repo","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"source_commit","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"E122 source_repo format","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"owner/repo","type":"text","marks":[{"type":"code_inline"}]},{"text":", not full URL","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"E123 commit SHA invalid","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Must be full 40-char hex from ","type":"text"},{"text":"git rev-parse HEAD","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"paragraph","content":[{"text":"Full guide: https://github.com/okx/plugin-store/blob/main/docs/FOR-DEVELOPERS.md","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"Supported Agents","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Agent","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Detection","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Skills Path","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"MCP Config","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Claude Code","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"~/.claude/","type":"text","marks":[{"type":"code_inline"}]},{"text":" exists","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"~/.claude/skills/\u003cplugin>/","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"~/.claude.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" → ","type":"text"},{"text":"mcpServers","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Cursor","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"~/.cursor/","type":"text","marks":[{"type":"code_inline"}]},{"text":" exists","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"~/.cursor/skills/\u003cplugin>/","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"~/.cursor/mcp.json","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"OpenClaw","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"~/.openclaw/","type":"text","marks":[{"type":"code_inline"}]},{"text":" exists","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"~/.openclaw/skills/\u003cplugin>/","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Same as skills","type":"text"}]}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"Plugin Source Trust Levels","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Source","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Meaning","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Behavior","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"official","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Plugin Store official","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Install directly","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"dapp-official","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Published by the DApp project","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Install directly","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"community","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Community contribution","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Show warning, require user confirmation","type":"text"}]}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"Error Handling","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Error","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Action","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Network timeout during install","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Retry once; if still failing, suggest manual install from https://github.com/okx/plugin-store","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"plugin-store: command not found","type":"text","marks":[{"type":"code_inline"}]},{"text":" after install","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Try ","type":"text"},{"text":"~/.local/bin/plugin-store","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"~/.cargo/bin/plugin-store","type":"text","marks":[{"type":"code_inline"}]},{"text":" directly; PATH may not be updated for the current session","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Command returns non-zero exit","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Report error verbatim; suggest ","type":"text"},{"text":"plugin-store self-update","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Registry cache stale / corrupt","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"plugin-store registry update","type":"text","marks":[{"type":"code_inline"}]},{"text":" to force refresh","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"plugin-store lint","type":"text","marks":[{"type":"code_inline"}]},{"text":" fails","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Show error codes and fixes; refer to the lint error table above","type":"text"}]}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"Skill Self-Update","type":"text"}]},{"type":"paragraph","content":[{"text":"To update this skill to the latest version:","type":"text"}]},{"type":"paragraph","content":[{"text":"macOS / Linux:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"plugin-store install plugin-store --agent claude-code --skill-only","type":"text"}]},{"type":"paragraph","content":[{"text":"\u003c!-- TODO(security/C01): same installer-replacement caveat as in section 1 — see the TODO block earlier in this file. Until the upstream release pipeline publishes installer-checksums.txt, instruct the user to re-install manually from the GitHub releases page. -->","type":"text"}]},{"type":"paragraph","content":[{"text":"Or re-install manually","type":"text","marks":[{"type":"strong"}]},{"text":" — see ","type":"text"},{"text":"Manual install","type":"text","marks":[{"type":"link","attrs":{"href":"#1-check-binary-version","title":null}}]},{"text":" in section 1 above (download the binary from the GitHub releases page and verify it against ","type":"text"},{"text":"checksums.txt","type":"text","marks":[{"type":"code_inline"}]},{"text":").","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"paragraph","content":[{"text":"\u003crules> \u003cmust>","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Always run ","type":"text"},{"text":"plugin-store list","type":"text","marks":[{"type":"code_inline"}]},{"text":" for capability/discovery questions — never use a hardcoded plugin list","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Present plugin lists as clean tables (name, category, downloads, description); omit internal fields like registry URLs or file paths","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Present capabilities in user-friendly language: \"You can trade on Uniswap across 12 chains\", not \"uniswap-ai supports uniswap-v2, uniswap-v3 protocols\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"After any action, suggest 2–3 natural follow-up steps","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Support both English and Chinese — respond in the user's language","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"For developer workflow: always run ","type":"text"},{"text":"plugin-store init","type":"text","marks":[{"type":"code_inline"}]},{"text":" first, then guide through editing, linting, and PR submission","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"For lint errors: show the error code, explain the fix, and offer to help edit the file \u003c/must> \u003cshould>","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"For community-source plugins, proactively warn the user before installing","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"After installing a plugin, read the installed SKILL.md and trigger the skill's onboarding flow immediately","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"When guiding plugin development, ask which type (Pure Skill or Skill + Binary) and which language","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Suggest running ","type":"text"},{"text":"plugin-store lint","type":"text","marks":[{"type":"code_inline"}]},{"text":" after every edit to catch issues early \u003c/should> \u003cnever>","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Never expose internal skill names, registry URLs, file paths, or MCP config keys to the user","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Never auto-reinstall on command failures — report the error and suggest ","type":"text"},{"text":"plugin-store self-update","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Never hardcode a plugin list — always fetch from ","type":"text"},{"text":"plugin-store list","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Never skip the lint step before suggesting PR submission \u003c/never> \u003c/rules>","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"plugin-store","author":"@skillopedia","source":{"stars":11,"repo_name":"plugin-store","origin_url":"https://github.com/okx/plugin-store/blob/HEAD/skills/plugin-store/SKILL.md","repo_owner":"okx","body_sha256":"932437c2242791cf44b32da995ce9e25d1cb6c46b06c46606ca0fb41e39367dc","cluster_key":"a8a9b4d701de8ccb6829376e3f5ef8897266eafdd8d53acdd69dddde21355098","clean_bundle":{"format":"clean-skill-bundle-v1","source":"okx/plugin-store/skills/plugin-store/SKILL.md","attachments":[{"id":"ee182788-0e3f-573d-b1eb-ae5afc077e35","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ee182788-0e3f-573d-b1eb-ae5afc077e35/attachment.json","path":".claude-plugin/plugin.json","size":593,"sha256":"cd7bbcac6c94f9cb7b674843ef0b4c88f7482856a863424e2e2f626820c9ac8c","contentType":"application/json; charset=utf-8"},{"id":"62102422-8045-5890-8add-b8d6f552d622","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/62102422-8045-5890-8add-b8d6f552d622/attachment.md","path":"SUMMARY.md","size":2086,"sha256":"fb17937f9b1065b2aa0c6616379b79aa80edcfdfad4fe14c3185eb277cdd48f9","contentType":"text/markdown; charset=utf-8"},{"id":"0ec499d1-fcbc-5289-a540-1f9a3b16073c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0ec499d1-fcbc-5289-a540-1f9a3b16073c/attachment.ps1","path":"install.ps1","size":7953,"sha256":"04f7095af60546e0e3f8bdca64703a284256ba53db59857bdc17f37aed4b0658","contentType":"text/plain; charset=utf-8"},{"id":"7f488dd4-ecc1-5fc7-847d-7c794fe55780","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7f488dd4-ecc1-5fc7-847d-7c794fe55780/attachment.sh","path":"install.sh","size":8390,"sha256":"b88540fbb9dbf0116139397edc43dc08b7845a88d161c3e50082081dea175c17","contentType":"application/x-sh; charset=utf-8"},{"id":"870bf397-7b25-53c3-821b-215b336423cc","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/870bf397-7b25-53c3-821b-215b336423cc/attachment.md","path":"references/cli-reference.md","size":12070,"sha256":"f1ad66cfb33869f8b9e4eed689b48591ed35494d24508c8b71c1a9355a37140b","contentType":"text/markdown; charset=utf-8"}],"bundle_sha256":"c18399688998a468ffba19ad31aa3c28ca92c401e426ceb0e19aaeb0218b7bfe","attachment_count":5,"text_attachments":4,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":1,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"skills/plugin-store/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"web-development","category_label":"Web"},"exact_dupes_collapsed_into_this":0},"license":"Apache-2.0","version":"v1","category":"web-development","metadata":{"author":"okx","version":"1.3.0","homepage":"https://github.com/okx/plugin-store"},"import_tag":"clean-skills-v1","description":"This is the main on-chain DeFi skill. Use it for ALL of the following:\nStrategy discovery: 'how to make money on-chain', 'any profitable strategies', '链上有什么赚钱机会', '有什么盈利机会', '有什么套利机会', '怎么赚钱', '有什么好的策略', '帮我理财', '有什么收益机会', 'yield opportunities', 'how to earn', 'investment strategy', 'DeFi 策略推荐', '有什么自动化策略', 'automated strategies', 'passive income on-chain', '链上怎么赚币', '怎么玩链上', '怎么玩DeFi', '链上有什么玩法', '有什么赚钱项目', '推荐一些策略'.\nPlugin/project discovery: 'Plugin商店有什么', '有什么Plugin', '有什么项目', '什么项目最火', '最热门的项目', '有哪些工具', '推荐一些项目', 'what plugins are available', 'show me plugins', 'what projects are hot', 'trending projects', 'plugin marketplace', 'Plugin市场', '有什么好用的Plugin'.\nCapability discovery: '你能做什么', '你有什么能力', '你支持什么', '有什么技能', '都有什么功能', '支持哪些策略', '支持哪些 skill', 'what skills are available', 'what can you do', 'what strategies do you support', 'show me all strategies', 'list all skills'.\nDApp discovery: 'what dapps are available', 'any good dapps', '有什么好的dapp', '推荐一些dapp', 'recommend dapps', 'show me dapps', 'which protocols can I use', '有什么好的协议', '有什么DeFi协议', '推荐DeFi项目', '有什么链上应用'.\nPlugin management: 'install a plugin', 'uninstall a plugin', 'list plugins', 'search plugins', 'update plugins', 'show installed', '安装Plugin', '卸载Plugin', '更新Plugin'.\nPlugin development: 'I want to create a plugin', 'how to submit a plugin', '我想开发一个Plugin', '怎么提交Plugin', '如何贡献', 'contribute a plugin', 'build a plugin', 'create a skill', '创建Plugin', '开发Plugin', 'hackathon', 'submit my project', '提交我的项目'.\nAlso activates when the skill has just been installed and the user has not yet chosen a direction."}},"renderedAt":1782979289654}

Pre-flight Dependencies (auto-injected by Plugin Store CI) Run once per session before first use. These checks ensure required tools are installed. Install onchainos CLI + Skills (auto-injected) --- Plugin Store A CLI marketplace for installing/uninstalling/updating Skills and MCP servers across Claude Code, Cursor, and OpenClaw. Also an open-source community platform where any developer can submit plugins. Pre-flight Checks Run once per session before the first command. Do not echo routine output to the user. 1. Check binary version - If the reported version is ≥ (this skill's ): binary is c…