recipes
0/8 steps
Tutorial V1 · 5 minutes

Getting started with recipes

The promise in one sentence: one command-line tool drives a real MetaMask build, and then proves what it did. This is the first video in the series and the shortest path into everything else.

no prerequisites checklist shared with How it works
V1

Video recording in progress

The checklist below is the video

Same eight steps, same commands, same expected output — it is genuinely useful before the recording exists, which is why it is here rather than a "coming soon" page. Your progress is shared with How it works: tick a step in either place and it is ticked in both. How it works carries the longer explanations and the full "if it fails" notes for each step.

What the video covers

BeatWhat is on screen
0:00The promise — one CLI drives the wallet and proves what happened.
0:30Install into a clean checkout, then doctor. One failure gets fixed by following the error's own instruction — twenty seconds, no dwelling.
1:15launch — the real app comes up under harness control.
1:45actions, and the line that matters: you never guess capabilities, you discover them. Then two live calls — read the wallet state, then one UI action visibly moving the app.
3:00The same steps as a recipe: run executes the graph and adds assertions. This is the jump from driving to proving.
4:00Open the artifacts directory. summary.json, the trace, the screenshot.
4:30Close on the cheatsheet — everything just done, on one page.

Artifact you finish with: a green summary.json you produced yourself.

Follow along

  1. Get the CLI

    Install globally, confirm it resolved, then work from inside a product checkout.

    $ npm i -g @deeeed/metamask-harness@latest
    $ mm-harness --version
    0.34.x — any 0.34 or newer
  2. Run doctor, follow what it tells you

    Read-only readiness check. Each finding names the exact command that fixes it — including, often, doctor --fix itself.

    $ mm-harness doctor
    $ mm-harness doctor --fix
    pass extension bridge present ready=true fixed=[runtime-context] failed=[]
  3. Launch the app

    Platform auto-detects. Mobile needs an explicit target; core is headless and says so.

    $ mm-harness launch          # extension
    $ mm-harness launch ios      # mobile
  4. Discover the vocabulary

    The line to remember: you never guess capabilities, you discover them. This list is the capability boundary, not a sample of one.

    $ mm-harness actions --categories
    $ mm-harness actions --category ui
  5. Drive it: read wallet state

    One action through the real engine path. Reads first — they cannot break anything.

    $ mm-harness call read_state
  6. Drive it: move the UI

    Keep the app on screen. This is the beat where a terminal command visibly moves a real build.

    $ mm-harness call navigate page=perps
  7. Prove it: run a recipe

    The same operations composed into a graph with assertions. --plan validates first without touching anything.

    $ mm-harness run --list
    $ mm-harness run wallet.smoke --plan
    $ mm-harness run wallet.smoke --artifacts-dir ./first-recipe-artifacts
  8. Open the evidence

    The closing shot of the video, and the reason for all of it. Start with report.md, then the summary, then the trace when you want to know why.

    $ cat first-recipe-artifacts/report.md
    $ cat first-recipe-artifacts/summary.json