[02] · The stack
How I work with
Claude Code, Cursor & Claude.ai.
Eight practical hacks I’ve landed on over a year of daily use — the CLAUDE.md setup, the plan-before-code loop, the hooks that prevent the worst mistakes, the skills system, the MCP connectors I use for life admin. Steal anything. Tell me what you’d add.
“The unfair advantage isn’t the model. It’s the scaffoldingyou build around it.”
— operating principle
Each one is small.
Together they compound.
- [01]Setup
Start every machine with CLAUDE.md
What it is
A 10-principle file at ~/.claude/CLAUDE.md that loads automatically into every Claude Code session. Mine codifies: think before coding, simplicity-first, surgical changes, verify before claiming, no error-masking, no narrator comments, git hygiene.
Why it matters
The same rules I’d otherwise repeat in every prompt — now applied across every conversation, every project, every model. CLAUDE.md is the cheapest leverage in the entire stack: write the rule once, get it enforced forever.
Building blocks
- ·~/.claude/CLAUDE.md (global)
- ·./CLAUDE.md per project for overrides
- ·User instructions > skill > default cascade
- ·Pairs naturally with .cursor/rules/*.mdc for Cursor
- [02]Workflow
Plan mode before code mode — always
What it is
Before any non-trivial change I dispatch the Plan subagent or open Plan mode. The conversation has to reach a plan I approve before any Edit or Write tool can fire.
Why it matters
Bad approaches die in plan, not in 200 lines of code. Cuts rework by 3–5×, makes the LLM’s assumptions visible, and gives me a clean checkpoint to push back on before commits land.
Building blocks
- ·Plan subagent (subagent_type=Plan)
- ·ExitPlanMode tool for approval
- ·/plan slash command for one-line invocation
- ·Plans saved to .claude/plans/* for resumption
- [03]Agent
Specialised subagents on every task
What it is
I almost never let the main agent do everything. code-reviewer for review, debugger for stack traces, Explore for codebase questions, Plan for architecture, ui-designer for visual passes — each one in parallel when independent.
Why it matters
Specialists protect the main context window and produce sharper output. The reviewer doesn’t need the design history; the debugger doesn’t need the project bio. Right context, right tool, fewer tokens, better critique.
Building blocks
- ·Task tool with subagent_type=<role>
- ·Opus for code-writing / reviewing
- ·Sonnet for Explore / Plan
- ·Background mode for long-running scans
- [04]Hook
PreToolUse hooks for hard-stop guardrails
What it is
Shell-level hooks block destructive patterns: `git add -A`, `git add .`, `git commit -am`, and `git push` to `production` or `main`. The agent literally cannot bypass them — they error before the command runs.
Why it matters
Hooks turn intent into infrastructure. The hardest mistakes to fix are the ones that already happened. A hook makes them impossible, which is more reliable than discipline.
Building blocks
- ·~/.claude/settings.json hooks.PreToolUse
- ·Bash regex matcher + deny response
- ·Three hard rules I never override
- ·Hooks also fire on SessionStart / UserPromptSubmit
- [05]Skill
Skills as versioned markdown, not system prompt
What it is
Every recurring workflow gets a .md skill file with frontmatter (name + description). The agent loads it on demand based on description match — not via a 15,000-token mega-prompt.
Why it matters
Domain knowledge belongs in files anyone on the team can read, edit, and review in a PR. The agent only pulls in what’s relevant to the stage it’s in. Contextual compression by design, not by truncation.
Building blocks
- ·~/.claude/skills/* (personal)
- ·.claude/skills/* (project)
- ·.cursor/skills/* (Cursor variant)
- ·Frontmatter: name, description, model overrides
- [06]Memory
Auto-memory across conversations
What it is
File-based memory at ~/.claude/projects/<proj>/memory/ that survives context compaction. Typed entries: user preferences, feedback, project state, references to external systems.
Why it matters
LLMs forget at the context window. Auto-memory turns ‘every conversation is day one’ into ‘this assistant knows me.’ Saving the why alongside the rule lets future-me judge edge cases instead of blindly following.
Building blocks
- ·MEMORY.md index (always loaded, <200 lines)
- ·user / feedback / project / reference types
- ·[[name]] cross-links between memories
- ·Frontmatter: name, description, metadata.type
- [07]MCP
MCP connectors as one surface for life admin
What it is
Wire Gmail, Calendar, Drive, Linear into the same Claude.ai conversation. Draft an email, schedule the meeting, file the Linear ticket — in one sentence. Same surface for code and life.
Why it matters
The 30 seconds I used to spend tab-switching between Gmail → Calendar → Linear becomes ‘do all three.’ The agent becomes the universal verb across every tool I touch.
Building blocks
- ·claude.ai/customize/connectors
- ·Gmail · drafts, threads, labels
- ·Calendar · schedule + availability
- ·Linear · issues, comments, projects
- ·Drive · search + read
- [08]Workflow
Cursor + Claude Code, side by side
What it is
Cursor for in-editor refactors and chat-driven multi-file edits. Claude Code for terminal-level orchestration, subagents, MCP, anything that needs to touch multiple tools at once. Claude.ai chat for life admin and async drafts.
Why it matters
They’re not competitors — they’re three modes of the same brain. Picking all three is cheaper than picking wrong, and the shared CLAUDE.md / AGENTS.md / .cursor/rules makes them speak the same dialect.
Building blocks
- ·Cursor → .cursor/rules/*.mdc
- ·Claude Code → ~/.claude/CLAUDE.md
- ·Claude.ai → project instructions + connectors
- ·All three share repo .md skill files
[02] · Coda
Got a hack
I should steal back?
Every engineer I admire has a workshop like this — mostly different from mine. If you have a setup, hook, skill, or workflow that’s changed how you work, tell me about it.