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.
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_KEYfrom your GitHub Actions secrets. We never see your Mongo URL, Stripe key, or anything else in yourbackend/.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.ymland.mint/flows/*.jsonvia 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.
Generate an API key + add it to repo secrets
1mFrom 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/repoIf your app needs persona credentials too: gh secret set MINT_TEST_PASSWORD -b "$(openssl rand -base64 18)"
Paste the setup prompt into Claude Code or Cursor
3mThis 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.jsonto detect Next.js or React - · Write
mint.ymlwith the right dev command + base URL - · Add
.github/workflows/mint.ymlthat boots your app + calls our action - · Stub
scripts/mint-create-user.jswith Mongo/Prisma/Drizzle variants commented out — uncomment yours - · Run
npx @getmint/cli validateto confirm everything boots
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.