Quickstart: self-host in 10 minutes

You need Docker, Node 22+, pnpm, and a free Stripe account with Issuing enabled in test mode. Everything runs locally; no real money can move (the app refuses to boot with a live key).

1. Clone and configure

git clone https://github.com/meyerdav24/molt && cd molt
cp .env.example .env

Open .env and fill in four values (each is explained inline):

  • MOLT_SESSION_SECRET: any long random string
  • MOLT_TA_SIGNING_KEY: the generator one-liner is in the file
  • STRIPE_API_KEY: a test-mode restricted key (rk_test_...) with Issuing Cardholders and Cards write access
  • EMAIL_API_KEY + EMAIL_FROM: a Resend key, for step-up emails. Skippable at first; held purchases then wait without an email.

2. Run it

docker compose up

Postgres comes up with the schema applied, the web app (the Tab Authority) listens on localhost:3000. Check /api/v1/health: it must say "mode": "test".

3. Open a tab (the one human moment)

Register at /login with a passkey, then open a tab: set total budget, per purchase max, expiry, categories, and the step-up policy. Your passkey signs exactly these limits. In the dashboard, create an agent key for the tab; it is shown once.

4. Connect an agent

Follow Claude Desktop / MCP with the agent key from step 3. For a first purchase you need a Shopify store to buy from; a free development store with the Bogus payment gateway works out of the box (add its host to MOLT_BOGUS_GATEWAY_HOSTS in the MCP server env, because test-mode issuing cards cannot be charged across Stripe accounts).

5. Buy something, then verify the receipt

Ask the agent to buy an item. Watch the tab detail page: shell grown, worn once, shed. Download the receipt JSON from the dashboard and check it offline:

npx molt verify receipt.json

Contributors who prefer running without Docker: pnpm install, pnpm build, then pnpm --filter @molt/web dev against any Postgres, same .env.