{"id":50508307,"url":"https://github.com/MetaMask/skills","last_synced_at":"2026-06-19T12:00:43.526Z","repository":{"id":337555705,"uuid":"1148522772","full_name":"MetaMask/skills","owner":"MetaMask","description":"A collection of skills for OpenClaw agents, with implementations and integrations across the MetaMask ecosystem.","archived":false,"fork":false,"pushed_at":"2026-06-19T07:57:45.000Z","size":6916,"stargazers_count":18,"open_issues_count":9,"forks_count":8,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-19T09:28:45.007Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MetaMask.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":null,"patreon":null,"open_collective":"metamask","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2026-02-03T04:02:32.000Z","updated_at":"2026-06-19T07:57:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/MetaMask/skills","commit_stats":null,"previous_names":["metamask/openclaw-skills","metamask/skills"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/MetaMask/skills","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MetaMask%2Fskills","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MetaMask%2Fskills/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MetaMask%2Fskills/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MetaMask%2Fskills/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MetaMask","download_url":"https://codeload.github.com/MetaMask/skills/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MetaMask%2Fskills/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34530302,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-19T02:00:06.005Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-02T18:00:26.754Z","updated_at":"2026-06-19T12:00:43.510Z","avatar_url":"https://github.com/MetaMask.png","language":"Shell","funding_links":["https://opencollective.com/metamask"],"categories":["Wallets \u0026 Identity"],"sub_categories":[],"readme":"# MetaMask/skills\n\nAgent skills, rules, and domain knowledge for the MetaMask ecosystem.\n\nTwo audiences share this repo:\n\n1. **dApp / Web3 developers** — skills under `domains/web3-tools/` teach AI\n   agents how to use MetaMask developer libraries (`gator-cli`,\n   `smart-accounts-kit`, OpenCode plugin, etc.). Drop them into your\n   editor/agent and it will operate the tooling correctly.\n2. **MetaMask product engineers** — skills under `domains/perps/`,\n   `domains/testing/`, `domains/pr-workflow/`, `domains/agentic/`, etc. carry the conventions\n   and review heuristics for `metamask-extension`, `metamask-mobile`, and `core`.\n   These install into consumer repos via a small CLI.\n\nSingle source of truth, multi-operator output (Claude Code, Cursor,\nCodex/OpenAI), public canonical, private overlay optional.\n\n\u003e **Private overlay:** internal-only skills (Consensys-wide tooling,\n\u003e in-progress experiments, non-public products) live in a separate\n\u003e private repo, [`Consensys/skills`](https://github.com/Consensys/skills).\n\u003e Engineers with access can layer those skills on top of the public set.\n\u003e See [Federation](#federation-public--private).\n\n## Quickstart\n\n### For dApp / Web3 developers (use a single skill)\n\nPoint your agent at this repo and load the skill that matches your\ntooling. For example, to use the `gator-cli` skill in Claude Code:\n\n```bash\n# One-time clone:\ngit clone https://github.com/MetaMask/skills ~/dev/metamask/skills\n\n# Copy or symlink the skill you want into your project (or ~/.claude/skills):\ncp -r ~/dev/metamask/skills/domains/web3-tools/skills/gator-cli/* \\\n     ~/.claude/skills/gator-cli/\n```\n\nOr use the installer to drop all `web3-tools/` skills at once:\n\n```bash\n~/dev/metamask/skills/tools/install \\\n  --repo metamask-extension --target . --domain web3-tools\n```\n\n### Package CLI\n\n`@metamask/skills` is also an npm package and exposes the shared consumer CLI:\n\n```bash\nmetamask-skills list          # discover installable skills for the current repo\nmetamask-skills search test   # search skill names and descriptions\nmetamask-skills describe testing/unit-testing\nmetamask-skills sync          # infer repo + target, refresh cache, install skills\nmetamask-skills postinstall   # refresh cache; run sync only when SKILLS_AUTO_UPDATE=1\nmetamask-skills install       # lower-level installer wrapper\n```\n\nThe discovery commands make opt-in selection self-serve. Developers can find a\nskill, inspect it, then save their selection:\n\n```bash\nmetamask-skills list --domain testing\nmetamask-skills describe testing/unit-testing\nmetamask-skills sync --include testing/unit-testing --save\n```\n\nConsumer repos should prefer this CLI over copying sync/postinstall scripts.\nThat keeps cache behavior, `.skills.local` parsing, maturity filtering, and\nexperimental skill opt-in semantics uniform across Mobile, Extension, Core, and\nfuture org packages.\n\n\n### For engineers in `metamask-extension` / `metamask-mobile` / `core`\n\nFrom inside an integrated consumer repo:\n\n```bash\nyarn skills\n\n# To opt into experimental ADR-58 recipe skills:\nyarn skills --domain agentic --maturity experimental\n```\n\nThe integrated consumer script is intentionally small: `yarn skills` calls the\npublished `@metamask/skills` CLI. The CLI infers the current repo from git\nremote/package metadata, keeps a public `MetaMask/skills` checkout in\n`.skills-cache/metamask-skills`, and falls back to the package's bundled skills\nsnapshot when offline. It writes managed skills into `.claude/skills/`,\n`.cursor/rules/`, and `.agents/skills/`.\n\nOptional: set `METAMASK_SKILLS_DIR=~/dev/metamask/skills` in `.skills.local` or\nyour shell if you want to use a separate local checkout instead of the cache.\n\n### For cloud agents (Cursor cloud, Codex cloud, etc.)\n\nNo SSH key, no env var — one curl pipe to bash inside the consumer repo:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/MetaMask/skills/main/tools/bootstrap | \\\n  bash -s -- --repo metamask-extension\ncurl -fsSL https://raw.githubusercontent.com/MetaMask/skills/main/tools/bootstrap | \\\n  bash -s -- --repo metamask-mobile\ncurl -fsSL https://raw.githubusercontent.com/MetaMask/skills/main/tools/bootstrap | \\\n  bash -s -- --repo core\n\n# To opt into experimental ADR-58 recipe skills:\ncurl -fsSL https://raw.githubusercontent.com/MetaMask/skills/main/tools/bootstrap | \\\n  bash -s -- --repo metamask-extension --domain agentic --maturity experimental\n```\n\nThe bootstrap script clones this repo into a cache dir under\n`$HOME/.cache/metamask-skills` and runs the installer against the current\ndirectory.\n\n## Repo structure\n\n```\ndomains/\u003carea\u003e/\n  skills/\u003cskill-name\u003e/\n    skill.md                    # base skill\n    references/                 # optional supporting docs\n    scripts/                    # optional helper scripts\n    adapters/                   # optional runtime payloads used by scripts\n    repos/\u003cconsuming-repo\u003e.md   # optional repo-specific overlay\n  knowledge/                    # optional shared domain reference\ntools/\n  install      # core writer (mms- prefix, multi-operator output)\n  sync         # Flow 2: `yarn skills` wrapper for engineers\n  deploy       # Flow 1: maintainer push to multiple targets\n  bootstrap    # zero-config installer for cloud agents\n.targets.local.example          # template for maintainer config\n```\n\n## Domains today\n\n| Domain         | Audience          | Examples                                    |\n| -------------- | ----------------- | ------------------------------------------- |\n| `web3-tools`   | dApp builders     | `gator-cli`, `smart-accounts-kit`, `oh-my-opencode` |\n| `coding`       | MM product eng    | Coding guidelines, controller patterns       |\n| `agentic`      | MM product eng    | Experimental recipe workflows and runtime proof tools |\n| `general`      | All agents        | `codex`, `gemini` CLI usage guides           |\n| `performance`  | MM product eng    | React rendering, hooks, state perf          |\n| `perps`        | MM product eng    | Perps feature dev + review                  |\n| `pr-workflow`  | MM product eng    | PR title, description, changelog            |\n| `swaps`        | MM product eng    | Non-EVM swap integration                    |\n| `testing`      | MM product eng    | E2E, unit, visual, perf testing             |\n| `ui`           | MM product eng    | Component development                       |\n\n## Two distribution flows\n\n### Flow 1 — Push (maintainer)\n\nFrom inside `MetaMask/skills`, push the current state to one or more\nconsumer checkouts.\n\n**One target:**\n\n```bash\ntools/install --repo metamask-extension --target ~/dev/metamask/metamask-extension\n# Core monorepo:\ntools/install --repo core --target ~/dev/metamask/core\n```\n\n**All configured targets:**\n\n```bash\ncp .targets.local.example .targets.local   # one-time\n# edit paths\ntools/deploy\ntools/deploy --domain perps --dry-run      # forwarded to install\n```\n\n`.targets.local` is gitignored.\n\n### Flow 2 — Pull (engineer)\n\nFrom inside a consumer repo:\n\n```bash\nyarn skills                                          # sync all stable/default saved domains\nyarn skills --select                                 # interactive domain picker\nyarn skills --domain agentic --maturity experimental # opt into all experimental recipe skills\nyarn skills --include agentic/recipe-harness         # cherry-pick one experimental skill\nyarn skills --exclude testing/visual-testing         # opt out of one selected/default skill\nyarn skills --include agentic/recipe-harness --save  # persist granular selection to .skills.local\nSKILLS_DOMAINS=perps,testing yarn skills             # non-interactive domain filter\nSKILLS_INCLUDE=agentic/recipe-harness yarn skills    # non-interactive skill opt-in\nSKILLS_MATURITY=experimental yarn skills             # non-interactive maturity filter\nMETAMASK_SKILLS_DIR=/some/path yarn skills           # override location\n```\n\n`yarn skills` should be wired to the shared `@metamask/skills` CLI:\n\n```json\n{\n  \"scripts\": {\n    \"skills\": \"metamask-skills sync\",\n    \"skills:postinstall\": \"metamask-skills postinstall\"\n  },\n  \"devDependencies\": {\n    \"@metamask/skills\": \"^0.1.0\"\n  }\n}\n```\n\nThe CLI infers the repo name by default (`metamask-mobile`,\n`metamask-extension`, or `core`) from `git remote get-url origin` or the\n`package.json` repository URL. Use `METAMASK_SKILLS_TARGET_REPO` in\n`.skills.local` for forks or unusual remotes; pass `--repo` for one-off\noverrides/debugging.\n\nSource selection is centralized for consistency across org packages:\n\n1. `METAMASK_SKILLS_DIR` / `CONSENSYS_SKILLS_DIR` when configured.\n2. The repo-local `.skills-cache/metamask-skills` checkout maintained by the CLI.\n3. The bundled skills snapshot inside the installed `@metamask/skills` package.\n\n`tools/sync` then delegates to `tools/install` with the selected sources. This\nkeeps every consumer repo on the same parser, cache refresh, maturity filter,\nand `SKILLS_AUTO_UPDATE` behavior instead of duplicating setup scripts.\n\n## Manual install (the primitive)\n\nBoth flows ultimately invoke `tools/install`:\n\n```bash\ntools/install \\\n  --repo metamask-mobile \\\n  --target ~/dev/metamask/metamask-mobile \\\n  --domain agentic \\\n  --maturity experimental \\\n  --dry-run\n```\n\n### Flags\n\n| Flag             | Default  | Purpose                                                                          |\n| ---------------- | -------- | -------------------------------------------------------------------------------- |\n| `--target`       | required | Path to consuming repo                                                           |\n| `--repo`         | auto     | Consuming repo name. Auto-detected from git/repository URL (fallback: target dirname). |\n| `--source`       | this repo | Skill source dir (repeatable, ordered; later overrides earlier on name collision) |\n| `--domain`       | all      | Comma-separated domain filter. Default installs **all** domains; pass to opt out. |\n| `--maturity`     | `stable` | Min maturity: `experimental`, `stable`, `deprecated`                             |\n| `--include`, `--skill` | none | Comma-separated skill opt-ins (`domain/skill` or `skill`). Explicit includes bypass domain and maturity filters. Repeatable. |\n| `--exclude`      | none | Comma-separated skill opt-outs (`domain/skill` or `skill`). Explicit excludes win. Repeatable. |\n| `--save`         | off | Persist CLI domain/maturity/include/exclude choices to `.skills.local`. CLI flags are one-off unless this is passed. |\n| `--include-user` | off      | Also install `scope: user` skills (writes to `$HOME` — outside the target repo). Default skips them with a warning. |\n| `--dry-run`      | off      | Preview without writing                                                          |\n\n**Install-all default with granular overrides.** Stable skills install for every\ndomain by default. Engineers opt out per-machine by editing `.skills.local`\n(`SKILLS_DOMAINS=perps,testing`) or by running `yarn skills --select` for an\ninteractive domain picker. New stable domains land automatically on the next\nsync — that's by design so new tooling is discoverable.\n\nWhen a domain mixes stable and experimental skills, use skill-level selection\ninstead of raising the maturity for the whole domain. `SKILLS_INCLUDE` /\n`--include` adds specific skills even when their domain or maturity would\nnormally skip them; `SKILLS_EXCLUDE` / `--exclude` removes specific skills even\nwhen their domain is selected. Items may be `domain/skill` or just `skill`; use\n`domain/skill` when names could collide across public/private sources. CLI\nselection is one-off unless passed with `--save`, which writes `.skills.local`:\n\n```bash\n# Stable defaults plus only one experimental recipe skill for this run:\nyarn skills --include agentic/recipe-harness\n\n# Persist stable defaults plus selected experimental recipe skills:\nyarn skills \\\n  --include agentic/recipe-harness,agentic/recipe-quality \\\n  --exclude testing/visual-testing \\\n  --save\n```\n\nRecipe skills currently live in the experimental `agentic` domain. Install all\nlower-level recipe tools in this rollout with `--domain agentic --maturity\nexperimental`, or cherry-pick only the ones you want with\n`--include agentic/\u003cskill\u003e`.\n\n**User-scope skills (`scope: user` in frontmatter).** Some skills target the\nengineer's home dir (`$HOME/.claude/skills`, `$HOME/.codex/skills`) instead\nof the target repo. They are **never auto-installed** — installer lists them\nin a final warning. Run with `--include-user` to install manually.\n\n### Recipe skills quick use\n\nRecipe skills are experimental. Install them with:\n\n```bash\nyarn skills --domain agentic --maturity experimental\n```\n\nExperimental recipe skills include lower-level proof tools plus the opt-in high-level workflows `/mms-recipe-dev` and `/mms-recipe-fix-ticket`. Treat the high-level workflows as validation-backed orchestration entry points; they still delegate runtime proof to the lower-level recipe skills.\n\nUse these directly when steering/debugging:\n\n- `/mms-recipe-doctor` — check tool, skill, harness, runtime-context, and fixture/profile readiness before a run.\n- `/mms-recipe-harness` — install/verify Mobile or Extension runtime harness.\n- `/mms-recipe-cook` — author/refine the executable recipe.\n- `/mms-recipe-quality` — critique recipe/evidence and force weak proof into explicit gaps.\n- `/mms-recipe-evidence` — format artifacts into reviewer-ready PR text.\n- `/mms-recipe-wallet-control` — optional wallet/app primitives for setup, navigation, state, and screenshots.\n\nHappy path for this lower-level rollout: clear task + acceptance criteria → `/mms-recipe-doctor` setup check → `/mms-recipe-harness` verify → `/mms-recipe-cook` recipe → live recipe run → screenshots/trace/summary/manifest → `/mms-recipe-quality` critique → `/mms-recipe-evidence` block → human validation.\n\n### Output\n\nPer consuming repo, the CLI writes:\n\n- `.claude/skills/mms-\u003cname\u003e/SKILL.md` — Claude Code, OpenCode\n- `.cursor/rules/mms-\u003cname\u003e/RULE.md` — Cursor\n- `.agents/skills/mms-\u003cname\u003e/SKILL.md` + `agents/openai.yaml` — Codex, OpenCode\n\nWhen a source skill includes bundled resources, `references/`, `scripts/`,\n`assets/`, and `adapters/` are mirrored into each output skill directory.\nLarge runtime skills such as recipe harnesses can therefore add sizeable\nignored payloads under `.claude/skills/`, `.cursor/rules/`, and\n`.agents/skills/`; this is intentional so installed skills remain\nself-contained. Sync removes stale managed bundle directories when the source\nskill removes them. \"Self-contained\" means the skill payload is present; live\nruntime proof still depends on the target repo dependencies, device/browser,\nand CDP state described by each repo overlay. Repo overlays still decide which\nadapter an agent should use.\n\nAll output names are prefixed `mms-` (managed metamask skill). Source\nfrontmatter `name:` stays unprefixed; the prefix is applied at install time.\n\nEach output file carries a `\u003c!-- DO NOT EDIT --\u003e` banner. Synced content\nis additive and intended to be `.gitignore`'d in consuming repos.\n\n## Federation (public + private)\n\nWhen both env vars are set, `tools/sync` walks both sources and the\nprivate overlay overrides the public skill on name conflict. The shared\n`@metamask/skills` CLI passes these sources through while still providing the\nrepo-local public cache and bundled package snapshot as zero-config fallbacks.\n\n```bash\nexport METAMASK_SKILLS_DIR=~/dev/metamask/skills        # public, this repo\nexport CONSENSYS_SKILLS_DIR=~/dev/Consensys/skills      # private overlay\nyarn skills\n```\n\nEngineers without access to the private repo simply don't set\n`CONSENSYS_SKILLS_DIR` — the public set installs cleanly on its own.\n\n## Authoring a skill\n\n```\ndomains/\u003carea\u003e/\n  skills/\u003cskill-name\u003e/\n    skill.md\n    references/                   # optional supporting docs\n    scripts/                      # optional helper scripts\n    adapters/                     # optional runtime payloads used by scripts\n    repos/metamask-extension.md   # optional repo overlay\n    repos/metamask-mobile.md      # optional repo overlay\n    repos/core.md                 # optional Core monorepo overlay\n```\n\n### `skill.md` frontmatter\n\n```yaml\n---\nname: \u003cslash-command-name\u003e\ndescription: \u003c≤1,536 chars including when_to_use cues\u003e\nmaturity: stable          # experimental | stable | deprecated (default stable)\n---\n```\n\nExtra metadata blocks (e.g. OpenClaw-style `metadata:` with emoji and\nhomepage) are preserved through install — only `name`, `description`,\n`maturity`, `mandatory`, and `scope` are read by the CLI.\n\n### Overlay frontmatter\n\n```yaml\n---\nrepo: metamask-extension  # or metamask-mobile / core\nparent: \u003cskill-name\u003e\n---\n```\n\nOverlays merge into the base body at install time. Skills with a `repos/`\nsubdir but no overlay matching `--repo` are skipped for that target.\nSkills with no `repos/` subdir at all install for any target.\n\n## Multi-operator priority\n\n```\nEnterprise \u003e User (~/.claude/skills/) \u003e Project (.claude/skills/)\n```\n\nMost-local wins on name conflict. The `mms-` prefix on output names\nprevents collision with personal skills.\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n\n## Security\n\nSee [SECURITY.md](SECURITY.md) for how to report issues with skills or\nthe installer.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMetaMask%2Fskills","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMetaMask%2Fskills","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMetaMask%2Fskills/lists"}