Skills and your team's library
Two things turn a bare harness into your team's setup: skills that carry the workflow, and a library that carries the recipes. Both install into a checkout.
Video recording in progress
Skills versus libraries
| Skills | Recipe library | |
|---|---|---|
| Carry | The workflow an agent follows. | Recipes and domain actions. |
| Live in | Consensys/skills, installed per checkout. | A team repo, declared by path. |
| Needed to run a recipe | No. | Yes, for your team's recipes. |
Personal beats domain beats default, for skills and libraries alike. Your own overrides your team's,
which overrides what ships. A library that shadows another is reported in the run summary's
shadowed list rather than silently winning.
Set it up
Paste this into your agent
Task: install the latest recipe skills and shared MetaMask Perps recipe library,
then prove one real recipe runs end to end.
1. Work from the MetaMask product checkout I started you in. Run
`npm i -g @deeeed/metamask-harness@latest` and `mm-harness --version`.
2. Install the latest Consensys recipe skills into this checkout:
`yarn skills --maturity experimental --include
agentic/recipe-cook,agentic/recipe-quality --save`
This command updates the skills sources before syncing. Show me that
recipe-cook and recipe-quality were installed.
3. Use this exact library directory:
`$HOME/shared-library/metamask-recipe-perps`.
If it does not exist, clone
`git@github.com:MetaMask/experimental-metamask-recipe-perps.git` there.
If it exists and is clean, update it with `git pull --ff-only`; if it is
dirty, preserve it and report that instead of changing its files.
If cloning reports 404 or permission denied, stop and tell me that repository
access is missing; do not search for a substitute repository.
4. Run `mm-harness run --list --library
"perps=$HOME/shared-library/metamask-recipe-perps"` and show me the recipes
tagged `[perps]`. Use this explicit `--library` on every later command; do not
assume an `export` survives between tool shells.
5. Run `mm-harness status`. If the app is not ready, follow its public `Next:`
command while preserving the same device UUID or serial used during setup.
6. Choose only a recipe actually printed by step 4 for THIS checkout — the
`[perps]` set differs per adapter, so do not copy a name from the docs.
`perps.snapshot-market` is a good non-mutating pick on Core;
`perps.open-market` is its Extension/Mobile counterpart. If neither is in
your list, use the bundled `wallet.smoke` (Extension/Mobile) or
`runner.smoke` (Core).
7. Run the chosen recipe with `--describe`, then `--plan`, then for real with
`--artifacts-dir ./first-team-recipe-artifacts`. Include
`--library "perps=$HOME/shared-library/metamask-recipe-perps"` each time.
For a Perps recipe use `network=testnet market=BTC`. Never place an order or
use mainnet in this setup proof.
8. Show me summary.json status, every trace.json node result, and all artifact
paths. Then confirm the checkout is ready for a bug-fix task using the
installed recipe-cook skill.-
Install the skills into your checkout
Run this from the product checkout you work in.
$ yarn skills --maturity experimental --include agentic/recipe-cook,agentic/recipe-quality --saveThe agentic skills carry
experimentalmaturity, so they are visible only when experimental skills are enabled.recipe-cookis the one you want first — it owns the authoring and review flows covered in V4.If it fails
No
skillsscript — not every repo has the tooling wired yet. Check the skills repo for the current install path for your checkout.The skill does not appear — confirm experimental maturity is enabled; that is the usual cause.
-
Clone your team's library
The perps library, as the worked example:
$ git clone git@github.com:MetaMask/experimental-metamask-recipe-perps.git \ "$HOME/shared-library/metamask-recipe-perps"A 404 means access, not a typoThe repository is private. If the clone fails with a 404, your account cannot see it yet — ask for access rather than hunting for the right URL.
Already have it somewhere? Symlink that checkout instead of making a second copy.
-
Declare it
One
name=pathentry, absolute path:$ export RECIPE_LIBRARY_PATH="perps=$HOME/shared-library/metamask-recipe-perps"Several libraries are colon-separated, and the name is how they are labelled in output:
$ export RECIPE_LIBRARY_PATH="perps=$HOME/shared-library/metamask-recipe-perps:mine=$HOME/dev/my-recipes"Put it in your shell profile so every session has it. Per-command,
--library perps=<path>does the same thing and is repeatable. -
Prove discovery sees it
This is the step people skip, then spend an afternoon on.
$ mm-harness run --listExpected — library recipes tagged with your library's namerunnable recipes (core) Inspect: mm-harness run <recipe> --describe perps.ensure-market-state [perps] variant=core params=network,market,side,… perps.prove-order [perps] variant=core params=network,market,side,order_type,… perps.snapshot-market [perps] variant=core params=network,market perps.smoke [metamask] variant=core — Non-mutating Perps domain smoke… runner.smoke [metamask] variant=core — Proves the headless Core runner…The tag is the proof:
[perps]came from your library,[metamask]ships with the harness. No tags from your library means it was not loaded. This example is a Core checkout; Extension and Mobile print their own variants, so work from your list, not this one.If it fails
Only
[metamask]recipes — the variable is unset in this shell, or the path is wrong or relative. Echo it and check the path exists.Fewer recipes than expected — recipes declare which adapters they support. A mobile-only recipe will not appear in a core checkout.
--describeshows the variant. -
Read one before running it
Team recipes take parameters and many mutate testnet state.
$ mm-harness run perps.prove-order --describe $ mm-harness run perps.prove-order market=ETH side=short order_type=limit --planDrop
--planwhen the mutation and its cleanup are what you want. The perps library'sREADME.mdis its onboarding doc, anddocs/AUTHORING.mdcovers writing recipes into it.
Your team's library follows the same pattern: a repo of recipes plus domain actions, cloned and declared by path. Nothing about the perps setup above is perps-specific except the URL.