Claude Code is Anthropic's terminal-based AI coding agent. You install it with one curl command, run claude inside any project directory, and it reads your files, writes code, runs shell commands, and commits to git through plain English prompts. At Formaum, I use Claude Code as the build layer for every client system I ship, from GoHighLevel migrations to Trigger.dev pipelines to FastAPI services running in production.
This is not a feature tour. This is how I actually use it on a Tuesday morning when a client's onboarding pipeline is broken and I have three hours to fix it.
Install it and log in
One command. Native install, no Node version dance, no Docker container.
curl -fsSL https://claude.ai/install.sh | bash
Then cd into a real project and run claude. It opens a browser tab once, you log in with your Claude Pro, Max, or Console account, and you're done. If you already pay $20 a month for Claude chat, you already have Claude Code. No separate billing.
For real work I run Max ($100/month). The token allowance on Pro runs out fast once you start letting it read whole codebases. If you bill clients at any real rate, Max pays for itself the first time it saves you an afternoon.
The first five minutes in a new project
Most tutorials skip this part. The first five minutes set the tone for every session that follows.
Inside the project, I run:
claude
> what does this project do?
> what's the deployment path?
> where does state live?
I want Claude to map the territory before I ask it to change anything. If it can't tell me where state lives in 30 seconds, I know the codebase is a mess and I plan accordingly. That's a diagnostic, not a tutorial step.
Then I write a CLAUDE.md file at the project root. This is the single most important file in your project for working with Claude Code. Not optional.
Write a CLAUDE.md that earns its keep
CLAUDE.md is auto-loaded into context every session. It's where you put the rules of the road. Mine for client work looks like this:
# Project: Client X CRM Migration
## Stack
- GoHighLevel (production)
- Trigger.dev v3 (background jobs)
- Supabase (audit log + reporting)
## Rules
- Never edit live GHL workflows directly. Stage in dev sub-account.
- All Trigger.dev tasks must have idempotency keys.
- Write tests before deploying webhook handlers.
## Deploy
- Push to main triggers Trigger.dev deploy automatically.
- GHL changes go through the staging export.
Three sections. Stack, rules, deploy. That's it. The mistake I see most often is people writing 800-line CLAUDE.md files that restate what the code already says. Keep it tight. Write the things Claude cannot figure out from reading the repo.
The daily workflow I actually use
Four phases. Same every time.
1. Explore. Plan Mode. Hit Shift+Tab to cycle into it. In Plan Mode, Claude reads but cannot write. I describe the problem and let it map a plan before any file gets touched. This catches 80% of bad approaches before they cost me anything.
2. Plan. I push back on the plan. "Why this approach instead of X?" Claude is sharper when challenged. If the plan still doesn't make sense after one round, I clear the session and start over with better framing. Two bad correction attempts means the context is poisoned. Start fresh.
3. Build. Exit Plan Mode. Claude proposes diffs. I approve each one until I trust the pattern, then I switch to Accept Edits mode for the rest of the task. /permissions manages this. Do not run --dangerously-skip-permissions in any project that touches production credentials. I know other tutorials recommend it. I do not.
4. Commit. Conversational git. "Commit these changes with a message describing the migration step." Done. Push it.
The features that actually matter
Most of the feature surface is noise on day one. These are the ones I use every single session.
@-file references. Type @src/lib/webhook.ts and Claude pulls that file into context directly. Faster and cheaper than letting Claude search for it.
Slash commands. /clear between unrelated tasks. /resume to pick up yesterday's session. /help to see everything available. Type / alone and the menu appears.
Custom slash commands. Drop a markdown file in .claude/commands/ and it becomes a command. I have /ship that runs my full pre-deploy checklist. I have /audit that runs a security pass on a target file. This is where Claude Code stops being a chat tool and starts being a system you've built.
Hooks. .claude/settings.json can fire shell commands on specific events. I have a hook that runs lint and typecheck before any commit Claude proposes. If it fails, Claude has to fix it before I see the diff. This is how you turn a code generator into a code shipper.
MCP servers. Claude Code can talk to external services through the Model Context Protocol. I have MCP servers wired to ClickUp, Trigger.dev, Airtable, Gmail, and the Anthropic API. Claude can read tasks, deploy code, send emails, query my own infrastructure. The boring infrastructure is the moat.
Project structure for real work
Every project I run with Claude Code has this skeleton:
project-root/
CLAUDE.md # rules, stack, deploy paths
.claude/
settings.json # hooks, permissions
commands/ # custom slash commands
.env.example # never .env in git
README.md
src/
The .claude directory is where the production discipline lives. Without it, Claude Code is a chat box. With it, Claude Code is a build pipeline.
Common mistakes I see
I read the top-ranked tutorials before writing this. Here is what they all miss.
Treating it like Cursor. Claude Code is not an inline autocomplete. It's an agent. If you use it to autocomplete one line at a time, you're paying agent prices for IDE features. Give it whole tasks. "Build the webhook handler, write the tests, and update the README." One prompt. Walk away. Come back to a diff.
No CLAUDE.md, or a CLAUDE.md that's a novel. Either extreme kills you. No CLAUDE.md means every session starts cold. A 600-line CLAUDE.md means context is bloated before you've asked anything. Three sections. Stack, rules, deploy.
Running with skip-permissions in production projects. Tutorials sell --dangerously-skip-permissions as a productivity hack. It is, until Claude deletes the wrong directory or pushes a half-built migration to main. Use it in throwaway sandboxes. Never in client work.
Letting bad sessions run long. If Claude is correcting itself twice on the same task, the context is broken. /clear and restart with sharper framing. Cheaper than the third correction loop.
Ignoring hooks. Hooks are how you stop being a copy-paste reviewer. Lint, typecheck, test, format. Wire them in once. Every diff Claude proposes from then on passes the bar before it reaches you.
Treating it as a solo tool. The real use is in the orchestration. Claude Code plus MCP plus Trigger.dev plus your CRM is a system. Not a chat. That's the infrastructure that makes an AI system actually run on a Tuesday at 3am when nobody is watching. That's the work I do at Formaum.
Run on a stack that's holding you back?
Book a 45-minute discovery call. I'll map what moves, what stays, and what makes sense for your operation.
Book a call