Setup guide

Five minutes. No new infra. Your stack, untouched.

Mint runs in your existing GitHub Actions runner, boots your app the same way you do, and never sees your production secrets. This page walks through everything: how it runs, how it talks to your database, what we can and can’t see, and exactly what to paste.

~5 min to first run · ~30 min if your app has unusual auth

First — the three things engineers ask

If you’ve evaluated CI tools before, you’ve heard these. Here are the honest answers.

“It won’t actually run my project.”

It runs your project the same way npm run dev does. You tell Mint your boot command in mint.yml:

services:
  web:
    command: "npm run dev"
    cwd: "."
    port: 3000
    healthcheck: "http://localhost:3000"

Or if you use docker compose, point it at that. Mint runs inside your GitHub Actions runner — the same Ubuntu VM you already use for tests. If your app boots in CI today, it boots for Mint.

“What about my database? No way you’re touching prod.”

Mint never connects to a database directly — not yours, not anyone’s. The only thing it does is hit your app through a real browser. Test users get created via your script that takes an email + password:

setup:
  create_user_command: "node scripts/mint-create-user.js \
    --email={{email}} --password={{password}}"

You decide what that script does. Most teams use a local docker Mongo/Postgres in CI, or a per-PR ephemeral branch (Neon, Supabase). Production is never even reachable from the runner.

“How is this thing actually secure?”

Four things make it boring rather than scary:

  • Your secrets stay in your repo. Mint reads MINT_API_KEY from your GitHub Actions secrets. We never see your Mongo URL, Stripe key, or anything else in your backend/.env.
  • The action is open source. Every line is at github.com/adamgusky/mint-action. Pin to a tag (@v1), audit it, fork it. We can’t change what runs in your CI without you re-pinning.
  • We only see what GitHub tells us. Mint reads your PR’s mint.yml and .mint/flows/*.json via the GitHub App — just two file paths. We never clone your repo or read source.
  • You can uninstall in one click. GitHub App settings → uninstall. Your data is purged within 24 hours.

Now, the actual setup

Four steps. None of them require leaving your editor.

1

Install the Mint GitHub App on the repo you want tested

30s

One-click install. Pick a single repo or your whole org — your choice.

2

Generate an API key + add it to repo secrets

1m

From your dashboard, click Create API key. You’ll see the plaintext once — copy it, then run:

gh secret set MINT_API_KEY -b 'mint_xxxxxxxxxxxxxxx' -R owner/repo

If your app needs persona credentials too: gh secret set MINT_TEST_PASSWORD -b "$(openssl rand -base64 18)"

3

Paste the setup prompt into Claude Code or Cursor

3m

This is the whole onboarding. The prompt detects your stack, writes mint.yml, drops in the workflow file, and stubs out a test-user creation script you can adapt to your DB layer.

What the prompt makes Claude do:

  • · Look at package.json to detect Next.js or React
  • · Write mint.yml with the right dev command + base URL
  • · Add .github/workflows/mint.yml that boots your app + calls our action
  • · Stub scripts/mint-create-user.js with Mongo/Prisma/Drizzle variants commented out — uncomment yours
  • · Run npx @getmint/cli validate to confirm everything boots
(personalized with your repo + key)
4

Open a PR. Mint posts proof.

The first time you push a PR that touches code referenced by a recorded flow, Mint dispatches a run. You’ll see a 👀 reaction within a couple seconds, then a sticky comment with video + screenshots + evidence when the run completes (usually 3–8 min depending on how long your app takes to boot).

Want to trigger Mint on-demand? Comment @mint test signup on any PR. The bot parses it with an LLM and runs the flow you mentioned.

Where the work happens

So you know exactly what crosses the wire.

┌──────────────────────────┐         ┌──────────────────────────┐
│ Your repo (GitHub)       │         │ Mint (mint-blond-six...) │
│ ──────────────────       │         │ ──────────────────────── │
│ mint.yml                 │◄──read──┤ App webhook on PR open   │
│ .mint/flows/*.json       │  perms  │ Picks flow w/ Claude LLM │
│ .github/workflows/mint   │         │ Dispatches your workflow │
└────────────┬─────────────┘         └────────────┬─────────────┘
             │                                    │
   workflow_dispatch                              │
             │                                    │
             ▼                                    │
┌──────────────────────────┐                      │
│ Your GitHub Actions      │                      │
│ ──────────────────────   │                      │
│ Boots your app           │                      │
│ Runs getmint/action@v1   │──────POST steps──────┤
│   (Playwright)           │   POST result        │
│ Uses your repo secrets   │   PUT video/images   │
└──────────────────────────┘   to Vercel Blob     │
                                                  │
                                                  ▼
                                       ┌──────────────────────┐
                                       │ Sticky PR comment    │
                                       │ posted by App        │
                                       └──────────────────────┘
  • · We never run your code on our servers. Browser, Playwright, your app — all in your runner.
  • · We only see the mint files we’re allowed to read (mint.yml, .mint/flows/) plus PR metadata.
  • · LLM calls go through our key (you don’t need an Anthropic account). Prompts include flow names + step intents, not your source code.

Ready when you are.

Free during preview. No credit card. Email adam@getmint.com if you want help with the first run.