recipes
0/5 steps
Tutorial V3 · 5 minutes

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.

prerequisite: the walkthrough worked example: the perps library
V3

Video recording in progress

Skills versus libraries

SkillsRecipe library
CarryThe workflow an agent follows.Recipes and domain actions.
Live inConsensys/skills, installed per checkout.A team repo, declared by path.
Needed to run a recipeNo.Yes, for your team's recipes.
Layering

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.
  1. 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 --save

    The agentic skills carry experimental maturity, so they are visible only when experimental skills are enabled. recipe-cook is the one you want first — it owns the authoring and review flows covered in V4.

    If it fails

    No skills script — 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.

  2. 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 typo

    The 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.

  3. Declare it

    One name=path entry, 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.

  4. Prove discovery sees it

    This is the step people skip, then spend an afternoon on.

    $ mm-harness run --list
    Expected — library recipes tagged with your library's name
    runnable 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. --describe shows the variant.

  5. 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 --plan

    Drop --plan when the mutation and its cleanup are what you want. The perps library's README.md is its onboarding doc, and docs/AUTHORING.md covers 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.