You're not learning ten hard things. You're learning a few simple tools that each do one job. Here's the whole map.
The terminal is just the window where you type commands. A CLI is a tool you operate by typing instead of clicking. git, gh, and claude are each a separate CLI, three different tools that all run inside the same terminal window.
claude is not recognized (Windows) or command not found: claude (Mac), the terminal just can't see that tool yet. It's a find-it problem, not a broken-computer problem. The one-time fix for each is on drerinjacques.com/stuck."CLI" is a category, not a word that shows up in the command. A CLI command is just an instruction you type into the terminal to make a program do something. Here's how to recognize one at a glance.
claude, git, npm, curl, ls, cd. A line that begins with a lowercase tool name like that is almost always a CLI command.-- or -, like --scope, --transport, -s. Plain English never has those. A dead giveaway.% prompt, not into Claude's chat.claudethe program you're commandingmcp addthe action (add an MCP)--scope projecta flag + its value (an option)--transport httpanother flag + valuestripean argument (the name for this server)https://mcp.stripe.com/an argument (the URL)| Type | Looks like | Goes where |
|---|---|---|
| CLI command | claude mcp add --scope … (tool name + flags) | the terminal (%) |
| A prompt to Claude | "Using the Stripe MCP, create a coupon…" (full English sentences) | inside Claude (>) |
| Code | const x = ...; (symbols, brackets, semicolons) | inside a file |
--flags? → it's a CLI command, goes in the terminal. Reads like a sentence? → that's a prompt for Claude./mcp that only work there./mcp works./mcp in the terminal.Claude ↔ Supabase. Lets Claude build your tables and database. Set up in the terminal with /mcp.
Site ↔ Supabase. The URL + anon key in your page and Vercel. This is what makes login work for real people.
These two show up constantly and work as a pair. One holds your secrets; the other makes sure those secrets never leave your computer.
KEY=value per line. It lives on your computer and is meant to stay private, so your keys aren't sitting inside your actual code where they could leak..env.local) and bulky auto-generated folders (node_modules, the downloaded code libraries)..env.local holds your keys, and .gitignore is the bouncer that keeps that file from ever being uploaded to GitHub. That's exactly why your Supabase keys are safe on your computer but Vercel doesn't automatically have them, they were (correctly) kept off GitHub, so you add them to Vercel separately..gitignore is what stops your keys from leaking, and .env.local is where they live..mcp.json comes before /mcp./mcp basically says "connect to Supabase." But it needs to know which project. That answer lives in .mcp.json (your project's reference ID).
Think of /mcp as "call Supabase," and .mcp.json as the phone number it dials. No file, nothing to connect to, and "supabase" won't even appear in the list to authorize.