The Embarrassing Truth
I'm a Tech Lead running 8-10 parallel projects on Claude Code. I thought my setup was good.
It wasn't.
Before running an internal training session for ~80 engineers at my company, I decided to audit everything. I checked Anthropic's official documentation — every page. I went through GitHub repos: GStack (Garry Tan, 20K+ stars), Everything Claude Code (100K+ stars), shanraisshan's best-practice repo, VoltAgent's subagents, Antigravity's 1,304-skill library. I read Reddit threads, Hacker News discussions, Medium articles, Twitter threads from Anthropic engineers.
Then I looked at my own setup and realized I was leaving 80% of Claude Code's value on the table.
What I Found Wrong
50 agents loaded. I had agents for everything — ux-researcher, compliance-auditor, trend-researcher, feedback-synthesizer. Most I'd never used once. Each one consumed tokens and confused Claude's routing when it had to pick which specialist to delegate to.
Zero hooks. Not a single safety gate. Nothing preventing Claude from running destructive commands, committing credentials, or force-pushing to main. I was relying on prompts — which are requests Claude can interpret flexibly. Hooks are deterministic guarantees that fire every time.
No LSP. Every time Claude needed to find a function definition, it was doing text-based grep searches across the entire codebase. 30-60 seconds per lookup. On a codebase with thousands of files, this is painfully slow.
Generic CLAUDE.md. Auto-generated by /init and never touched. Didn't have our architecture patterns, coding standards, or forbidden patterns.
The 6 Fixes
Fix 1: Hooks — 0 to 5
{
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "bash .claude/hooks/security-gate.sh",
"timeout": 5
}]
}]
}
}
The security gate script checks for patterns like rm -rf /, git push --force main, DROP TABLE, and exits with code 2 to block execution.
During the live demo, I asked Claude to run rm -rf /. Blocked instantly. The room went silent, then everyone understood — this is why hooks aren't optional.
Key detail: Exit code 2 = hard block. Exit code 1 = warning only. Every security hook MUST use exit 2.
Fix 2: LSP — 900x Faster
export ENABLE_LSP_TOOL=1
/plugin install pyright@claude-plugins-official # Python
/plugin install vtsls@claude-plugins-official # TypeScript
/plugin install rust-analyzer@claude-plugins-official # Rust
50ms symbol lookup instead of 30-60 seconds. The biggest single upgrade that almost nobody configures.
This gives Claude goToDefinition, findReferences, hover, documentSymbol, and workspaceSymbol operations. It's the difference between Claude guessing where a function lives and Claude knowing.
Fix 3: Agents — 50 to 19
Moved 31 rarely-used agents to ~/.claude/agents/_archived/. Kept the ones I actually use weekly: code-reviewer, debugger, frontend-developer, backend-developer, python-pro, typescript-pro, terraform-engineer, and a few others.
Claude immediately got better at picking the right specialist from a focused list. Fewer options = better routing.
Fix 4: CLAUDE.md — Enriched to 67 Lines
Added:
- Architecture overview (microservices, FastAPI, React/Next.js, PostgreSQL)
- Tech stack with exact versions
- Build/test/lint commands for every language
- Coding rules (type hints, strict mode, 50-line function limit)
- Forbidden patterns (
NEVER use print() for debugging,NEVER commit .env files) - Git conventions (branch naming, commit format)
Every line answers one question: "Would removing this cause Claude to make mistakes?"
If the answer is no, the line doesn't belong.
Fix 5: GStack
git clone https://github.com/garrytan/gstack.git ~/.claude/skills/gstack
cd ~/.claude/skills/gstack && ./setup
What it gives you:
-
/review— acts as a senior code reviewer with severity grading (Critical/High/Medium/Low) -
/qa— opens a real headless browser, tests your app, finds bugs, fixes them -
/cso— runs OWASP Top 10 + STRIDE security audits -
/ship— detects base branch, runs tests, bumps version, creates PR -
/investigate— four-phase systematic debugging (investigate → analyze → hypothesize → implement)
During the demo, /cso found a real XSS vector in one of our projects. That got people's attention.
Fix 6: Parallel Work + Agent Teams
claude --worktree --tmux
Each agent gets an isolated git branch and its own context window. Built-in since Claude Code v2.1.50.
5-7 concurrent agents is the practical ceiling. Beyond that, you're context-switching more than the agents are.
Also enabled experimental Agent Teams where teammates can communicate directly with each other and coordinate on shared task lists.
Making It Work for Non-Developers
The session wasn't just for developers. We had TPMs, designers, and testers in the room.
TPMs:
- GitHub MCP for real-time sprint reports and issue tracking
-
/loop 1h check for P0 issuesfor automated monitoring - The
executive-summary-generatoragent for status updates to leadership
Designers:
- Figma MCP to generate React components from design frames
- GStack's
/plan-design-reviewfor UI scoring and AI slop detection - Playwright MCP for responsive screenshots at mobile/tablet/desktop widths
Testers:
- Playwright MCP for browser-based E2E testing
- GStack's
/qafor automated test-and-fix workflows - The
superpowers:test-driven-developmentskill for TDD
The Setup: Before and After
| Component | Before | After |
|---|---|---|
| Hooks | 0 | 5 (security + formatter + credential guard) |
| LSP | Not configured | 3 plugins (pyright, vtsls, rust-analyzer) |
| Agents | 50 (3.4K tokens) | 19 (~1.5K tokens saved) |
| GStack | Not installed | v0.11.18.2 |
| CLAUDE.md | Generic | 67 lines (enriched) |
| Agent Teams | Disabled | Enabled |
| Version | 2.1.83 | 2.1.84 |
The Slide Deck
I'm sharing the full 15-slide presentation. It covers:
- The 7-layer architecture of Claude Code
- Hooks configuration with working scripts
- LSP setup for 22+ languages
- Open-source setups (GStack, ECC, VoltAgent, Antigravity)
- Role-specific guides for TPMs, designers, and testers
- The complete action checklist
This isn't a theoretical setup guide. This is running in production right now across 8-10 parallel projects.
What's your Claude Code setup? I'm genuinely curious about configurations that look different from mine.
Top comments (0)