Claude Code Onboarding
π€ Team onboarding kit for Claude Code AI coding assistant. Pre-configured with agents, skills, slash commands, and MCP integrations for Java 21/Spring Boot WebFlux, Angular, Flutter, PostgreSQL, and Firebase. Clone β install β start building.
Ask AI about Claude Code Onboarding
Powered by Claude Β· Grounded in docs
I know everything about Claude Code Onboarding. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Claude Code β Team Onboarding Kit
Get your team from zero to productive with Claude Code in under 30 minutes.
This repository is a pre-configured starter kit packed with agents, skills, slash commands, and MCP integrations β ready to go for the following tech stack:
| Layer | Technologies |
|---|---|
| Backend | Java 21, Spring Boot WebFlux v3.5.x, Node.js v24.14, NestJS v11.17.x, Python v3.14 |
| Agentic AI | Python 3.14, LangChain v1.2.8, LangGraph v1.0.7, Google ADK, FastAPI 0.135.2 |
| Frontend | Angular 21.2.x, TypeScript 5.9.x, A2UI v0.8 (Agent-to-User Interface renderer) |
| Mobile | Flutter 3.41.x, Dart 3.10.9 |
| Data & Infra | PostgreSQL, pgvector (vector search), Weaviate Serverless, Firebase |
| AI Tooling | Claude Code, MCP servers |
Clone it, install Claude Code, and start building.

Table of Contents
- Claude Code β Team Onboarding Kit
- Table of Contents
- What is Claude Code?
- 1. Prerequisites
- 2. Clone This Repo
- 3. Set Up Your Editor (Install VS Code)
- 4. Install Claude Code
- 5. First-time Using Claude Code
- 6. Install Claude-Mem (Persistent Memory) (Optional)
- 7. Enable Voice Mode (Optional)
- 8. Try It Out β Your First 5 Minutes
- 9. Understanding Claude Code Components
- How They Fit Together
- Decision Matrix - When to Use What
- CLAUDE.md (Project Context)
- Slash Commands β Reusable Prompt Shortcuts
- Agents (Subagents) β Specialist AI Personas
- Subagent-Driven Development (SDD) β Plan-to-PR Pipeline
- Skills β Auto-Activated Knowledge
- MCP Servers β External Tool Integrations
- settings.json Configuration
- Hooks β Automated Guardrails
- Lessons Log β Self-Improvement Loop
- Model Selection & Cost Awareness
- 10. Cheaper Alternative: MiniMax M2.5
- 11. Multiple Sub Agents
- 12. Agent Teams β Coordinated Multi-Agent Collaboration
- 13. Claude Code Desktop β GUI with Live Preview
- 14. What Gets Sent to the LLM?
- 15. What's in This Repo
- 16. iOS App Store Release Pipeline
- 17. Android Google Play Release Pipeline
- 16. Hands-On Exercises
- Exercise 1: Scaffold a Flutter Fitness App
- Exercise 2: Build a Weather REST API (Java)
- Exercise 3: Build a Todo API (NestJS)
- Exercise 4: Build an Analytics API (Python)
- Exercise 5: Design a Full-Stack E-Commerce System
- Exercise 6: Pull Live Docs with Context7 (MCP)
- Exercise 7: Design & Review Architecture
- Exercise 8: Build an AI Agent Service (Agentic AI)
- Exercise 9: Domain-Driven Design with DDD Architect
- Exercise 10: Add a Feature End-to-End
- Exercise 11: Build an A2UI Renderer (Agent-to-User Interface)
- Exercise 12: Build a Google ADK Agent Service
- What's Next?
- 17. Development Workflow β Putting It All Together
- 17a. AI-DLC β Full Development Lifecycle Workflow (Optional)
- 18. Security Considerations
- 19. Customizing the Kit
- 20. Claude Code Power Features
- 21. Tips & Best Practices
- 22. Troubleshooting
- 23. Quick Reference Card
- 24. Resources
What is Claude Code?
Claude Code is an agentic AI coding assistant that lives in your terminal. It understands your codebase, edits files, runs commands, and writes code β all through natural language.
Think of it as a senior developer pair-programming with you who knows your entire project, follows your team's conventions, and never gets tired.
1. Prerequisites
Before you begin, make sure you have:
Optional for Quick Start (required for MCP servers):
2. Clone This Repo
This repo is your playground β use it to learn and practice Claude Code (Agentic AI coding assistant) and get familiar with its components (agents, skills, slash commands, hooks, MCP servers, memory) so you can automate your development workflow.
Option A: Learn & Explore (recommended for first-timers)
Clone the full repo and work through the exercises:
git clone https://github.com/kumaran-is/claude-code-onboarding.git
cd claude-code-onboarding
Option B: Adopt into an Existing Project
Already have a project? Copy just the Claude Code configuration into it:
# From the cloned repo, copy the config into your project
cp -r claude-code-onboarding/.claude/ your-project/.claude/
cp claude-code-onboarding/CLAUDE.md your-project/
cp claude-code-onboarding/.mcp.json your-project/
# Then customize for your project
cd your-project
After copying, you'll want to:
- Edit
CLAUDE.mdβ replace the tech stack and conventions with your project's - Edit
.claude/settings.jsonβ adjustpermissions.allowfor your build tools (e.g., removeflutterif you don't use it) - Edit
.mcp.jsonβ remove MCP servers you don't need, add project-specific ones - Remove agents/skills/commands for stacks you don't use
- Run
chmod +x .claude/hooks/*.shto make hooks executable - Install the git pre-commit secrets hook (blocks commits containing API keys, tokens, and credentials):
cp git-hooks/pre-commit-secrets.sh .git/hooks/pre-commit chmod +x .git/hooks/pre-commit
Customize for your tech stack and team. This kit ships with skills, agents, rules, and commands covering Java, NestJS, Python, Angular, Flutter, iOS, Android, and more β but you don't need all of them. Keep only what matches your stack and workflow:
Component Where What to trim Skills .claude/skills/Delete skill folders for stacks you don't use (e.g. remove java-spring-api/if you're Python-only)Agents .claude/agents/Remove agent .mdfiles for domains outside your stack β each one adds ~150 tokens to every sessionRules .claude/rules/Keep core-behaviors.md,lessons.md, andcode-standards.mdas a minimum. Add team-specific rules as new files in this folder β they are always loadedCommands .claude/commands/Keep slash commands your team will actually use; delete the rest Hooks .claude/hooks/+settings.jsonDisable hooks you don't need by removing their entry from settings.jsonunderhooks:MCP servers .mcp.jsonRemove servers for tools you don't use β each connected server adds to session startup time The goal is a lean, focused setup: fewer agents means less context overhead per session, fewer rules means clearer signal, and fewer commands means less noise in
/autocomplete. Start minimal and add back what you find yourself needing.
3. Set Up Your Editor (Install VS Code)
We recommend open source Visual Studio Code as your IDE, though Claude Code works from any terminal β no specific editor is required. Download and install Visual Studio Code from the official site:
After installing, open the cloned project claude-code-onboarding with Visual Studio Code and use the integrated terminal for the remaining steps.
4. Install Claude Code
Open the Visual Studio Code integrated terminal and run the following:
Native Binary (Recommended)
- For macOS / Linux
curl -fsSL https://claude.ai/install.sh | bash
- Reload your shell
source ~/.bashrc # or: source ~/.zshrc
- After installation, restart VS Code(Close and reopen VS Code) so the terminal picks up the new PATH, then verify installation
claude --version
For Windows, see the official installation docs.
5. First-time Using Claude Code
Note: First-time users will be prompted to authenticate with a Claude Pro/Max subscription or an Anthropic API key.
From the VS Code terminal, launch the CLI:
claude
Follow the on-screen prompts to log in. Once authenticated with your Claude Pro/Max subscription or Anthropic Console API key. Claude Code automatically detects and loads the project configuration:
That's it! Claude Code will automatically detect and load:
| File / Directory | Purpose |
|---|---|
CLAUDE.md | Project context and conventions |
.mcp.json | MCP server configurations |
.claude/agents/ | Specialized AI agents |
.claude/skills/ | Domain knowledge and templates |
.claude/commands/ | Slash commands |
Try these right away:
> /project-status
> What agents and skills are available in this project?
> Explain the tech stack from CLAUDE.md
π Official Docs: https://code.claude.com/docs/en/quickstart
6. Install Claude-Mem (Persistent Memory) (Optional)
Claude Code forgets everything between sessions. Claude-Mem gives Claude persistent memory across sessions.
Inside a Claude Code CLI session, run:
> /plugin marketplace add thedotmack/claude-mem
> /plugin install claude-mem
Then restart Claude Code (/exit) or restart (close and reopen) the vscode.
What Claude-Mem Does
- Automatically captures what Claude Code does (file edits, decisions, tool usage)
- Compresses sessions into searchable memory using AI
- Injects relevant context at the start of new sessions
- Web viewer at
http://localhost:37777to browse memory
Verify with: Inside a Claude Code CLI session, run:
> Do you have any memory from previous sessions?
6a. Set Up Team Memory Sharing (Optional)
Once each developer has claude-mem installed individually, claude-mem-sync lets the team share selected observations (decisions, bug fixes, discoveries) across a shared GitHub repo β so your team's collective knowledge grows over time.
Run the one-shot setup command inside a Claude Code session:
> /setup-team-memory
This command:
- Installs and configures
claude-mem-sync - Creates
.claude/memories/folder structure in the repo - Adds a GitHub Actions workflow that auto-merges contributions on push
- Updates
.gitignoreto keep raw contributions local - Schedules weekly exports (Fridays 4pm) and imports (Saturdays 9am)
- Prints a full pass/fail verification table at the end
Safe to re-run β skips any step already completed. Each developer runs it once on their machine; the shared infrastructure files (workflow, memories folder) are committed once and shared via the repo.
7. Enable Voice Mode (Optional)
Claude Code does not support voice mode by default. VoiceMode is a community MCP server that adds this capability, letting you talk to Claude Code instead of typing, using OpenAI Whisper for STT (speech-to-text) and OpenAI TTS for speech output.
Note: VoiceMode supports any OpenAI-compatible STT/TTS service, not just OpenAI's Whisper/TTS.
One-Prompt Setup
Open a Claude Code session and paste this prompt β it handles the full installation (macOS, Linux, and Windows WSL2):
Set up VoiceMode for Claude Code using OpenAI Whisper (STT) and OpenAI TTS (speech output). Do the following steps in order:
1. Check if UV is installed (uv --version). If not, install it: curl -LsSf https://astral.sh/uv/install.sh | sh
2. Run: uvx voice-mode-install
3. Run: claude mcp add --scope user voicemode -- uvx --refresh voice-mode
4. Create or update ~/.voicemode/voicemode.env with these two lines:
VOICEMODE_TTS_BASE_URLS=https://api.openai.com/v1
VOICEMODE_STT_BASE_URLS=https://api.openai.com/v1
5. Check if OPENAI_API_KEY is set in the environment. If not, remind me to add it to ~/.zshrc and re-source it.
Tell me when each step completes and flag any errors before moving to the next step.
After setup, restart Claude Code so the MCP server loads.
Manual Setup
Prerequisites
- Python 3.14+
- A microphone and speakers (or headphones)
- An OpenAI API key (for Whisper STT and OpenAI TTS)
Quick Install
# 1. Install UV package manager (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 2. Install VoiceMode
uvx voice-mode-install
# 3. Register VoiceMode MCP server with Claude Code
claude mcp add --scope user voicemode -- uvx --refresh voice-mode
What Each Step Does
| Step | Command | What It Does |
|---|---|---|
| 1 | curl ... | sh | Installs UV, a fast Python package manager |
| 2 | uvx voice-mode-install | Installs the VoiceMode Python package and adds the voicemode CLI to your system. Also checks system dependencies (PortAudio, FFmpeg) |
| 3 | claude mcp add ... | Registers VoiceMode as an MCP server so Claude Code knows it exists. Without this, Claude Code has no idea the voice tools are installed β like installing PostgreSQL but never adding the connection string to your app |
OpenAI API Configuration
VoiceMode uses OpenAI Whisper for speech-to-text (STT) and OpenAI TTS for speech output β two separate services under the same API key:
# 1. Set your OpenAI key (add to ~/.zshrc to persist)
export OPENAI_API_KEY=your-openai-key
# 2. Configure voicemode to use OpenAI for both STT and TTS
# Add to ~/.voicemode/voicemode.env:
VOICEMODE_TTS_BASE_URLS=https://api.openai.com/v1
VOICEMODE_STT_BASE_URLS=https://api.openai.com/v1
# 3. Restart Claude Code so the MCP server picks up the new key
claude converse
Important: The MCP server reads
OPENAI_API_KEYfrom the environment at startup. If you set the key after Claude Code is already running, you must restart it for the change to take effect.
Usage
# Start Claude Code with voice mode
claude converse
# Or combine with auto-approved permissions (learning/playground only β οΈ)
claude --dangerously-skip-permissions converse
Once running, just speak into your mic β Claude will listen, process, and respond through your speakers. Say "stop" or press Ctrl+C to exit.
How It Works
OpenAI Cloud API (same key, separate models)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Whisper (whisper-1) /v1/audio/transcriptions β
β You speak βββββββββββββββββββββββββββΊ Claude Code β
β β β
β OpenAI TTS (tts-1) /v1/audio/speech β β
β You hear βββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Auto-Approve Voice Tools
To avoid permission prompts every time voice mode activates, the kit's .claude/settings.json includes:
{
"permissions": {
"allow": [
"mcp__voicemode__converse",
"mcp__voicemode__service",
"Bash(voicemode *)"
]
}
}
Platform-Specific Dependencies
macOS
Usually works out of the box. If you get audio errors:
brew install portaudio ffmpeg
Ubuntu / Debian
sudo apt update
sudo apt install -y ffmpeg libasound2-dev libasound2-plugins libportaudio2 portaudio19-dev python3-dev
Fedora
sudo dnf install alsa-lib-devel ffmpeg portaudio portaudio-devel python3-dev
Windows (WSL2)
sudo apt install -y ffmpeg libasound2-dev libasound2-plugins libportaudio2 portaudio19-dev pulseaudio pulseaudio-utils python3-dev
WSL2 requires pulseaudio packages for microphone access.
Troubleshooting
| Problem | Fix |
|---|---|
| "No audio input device" | Check microphone permissions in System Settings β Privacy β Microphone |
[BLANK_AUDIO] returned | Speak during the recording window; check mic is selected as default input |
| Audio choppy/laggy | Close other audio apps; try wired headset over Bluetooth |
| MCP not connecting | Run /mcp in Claude Code; restart after install |
| API key not picked up | Restart Claude Code β MCP server reads OPENAI_API_KEY at startup only |
8. Try It Out β Your First 5 Minutes
You're set up. Before diving into components and theory, take Claude Code for a spin. Run these inside your Claude Code session:
Ask about the project
> What is this project? Summarize the tech stack and structure
> /project-status
Scaffold something
> /scaffold-spring-api hello-world
Watch how Claude creates the full project structure, files, and boilerplate β all from a single command.
Or, if you're not sure which scaffold command to use, describe what you want to build and let /new-project figure it out:
> /new-project flutter fitness tracker with Firebase
> /new-project python REST API for invoices
> /new-project angular dashboard for analytics
/new-project reads your description, maps it to the right tech stack, and routes to the correct scaffold command β including running the Mobile Design checkpoint and plan gate for Flutter projects. Supported stacks: Spring Boot, NestJS, Python/FastAPI, Agentic AI, Angular, Flutter, PostgreSQL schema, vector database.
Use a sub-agent
> @architect What improvements would you suggest for this project's structure?
Notice how the agent runs in its own context without cluttering your main conversation.
Pull live docs with MCP
> Explain how to set up Spring Security with JWT. use context7
The context7 MCP server fetches current, version-specific documentation instead of relying on training data.
Check what's loaded
> What agents, skills, and slash commands are available in this project?
> /mcp
> /agents
That's the core workflow: slash commands to scaffold, agents for expertise, MCP servers for external tools, and skills that activate automatically in the background. The next section breaks down each component in detail.
A note on permissions
Claude Code will ask for permission before accessing files or running commands. You'll see prompts like:
Do you want to proceed?
1. Yes
β― 2. Yes, allow reading from claude-code-onboarding/ from this project
3. No
This can feel repetitive at first. The kit ships with pre-configured allow rules in .claude/settings.json that auto-approve common operations (build tools, git, Docker) β so most prompts you'll see are for operations that genuinely deserve a second look.
β οΈ For this learning playground only, you can skip all permission prompts:
claude --dangerously-skip-permissionsDo not use this in real projects. It disables all guardrails including the hooks and deny rules this kit ships with. For real projects, add frequently-used commands to the
allowlist insettings.jsoninstead β see the Settings Configuration section for the full reference.
9. Understanding Claude Code Components
Knowing when to use what is the key to being productive with Claude Code. Here's a quick reference:
| Component | What It Does | Location | How It's Invoked |
|---|---|---|---|
| CLAUDE.md | Project context Claude reads at startup β tech stack, coding standards, architecture, workflows | ./CLAUDE.md, ~/.claude/CLAUDE.md, .claude/rules/ | Auto-loaded at startup |
| settings.json | JSON configuration for permissions, hooks, and environment β allow/deny/ask permission rules, hooks config, env vars for Claude Code | .claude/settings.json (project), ~/.claude/settings.json (user) | Auto-loaded at startup |
| Skills | Modular expertise Claude applies automatically based on context β lazy-loaded when needed, not user-invoked. Best for complex, recurring workflows (code review, API design patterns) | .claude/skills/<name>/SKILL.md | Auto (Claude decides) |
| Slash Commands | /command shortcuts for repeatable prompts β quick actions you trigger manually | .claude/commands/<name>.md | You type /command |
| Sub-agents | Specialized AI with isolated context for complex tasks β parallel processing, focused expertise | .claude/agents/<name>.md | You type @agent or Auto (Claude decides |
| Hooks | Scripts that run at lifecycle events β auto-formatting, validation, notifications. Types: PreToolUse, PostToolUse, UserPromptSubmit, Stop, PreCompact, Notification | Defined in settings.json β hooks | Automatic on events |
| MCP Servers | Tool connections to external services β GitHub, Slack, databases, docs, APIs | .mcp.json (project root) | Claude uses as needed |
How They Fit Together
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLAUDE.md β What Claude knows about your project β
β settings.json β What Claude can / can't do β
β Skills β How Claude handles recurring tasks β
β Commands β Quick actions you trigger manually β
β Sub-agents β Specialists for complex work β
β Hooks β Automatic formatting / validation β
β MCP Servers β External tool connections β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Decision Matrix - When to Use What
| Use | You Need To⦠| Example |
|---|---|---|
| CLAUDE.md | Set project conventions and context | Project Overview, Project Context, Tech Stack, Coding Standards, Rules |
| settings.json | Control what Claude can do | Allow git commands, deny sudo |
| Skill | Auto-apply patterns for a domain | Always use Riverpod State Management when building Flutter |
| Slash Command | Run a repeatable prompt yourself(manual) | /scaffold-spring-api weather-service |
| Sub-agent | Get deep domain expertise in isolation, can be manual or auto | @database-designer Design schema for⦠|
| Hook | Enforce hard rules every time | Block commits without passing tests |
| MCP Server | Connect to external services | GitHub PRs, Context7 live docs, Firebase |
| Claude-Mem plugin | Remember things across sessions | Persistent memory of past decisions |
CLAUDE.md (Project Context)
What: A Markdown file at the project root that gives Claude Code, context about your project β tech stack, conventions, common commands, architecture, and rules.
When to use: Every project should have one. It's the first thing Claude reads at startup.
Where: ./CLAUDE.md (project root) or ~/.claude/CLAUDE.md (global, all projects)
You can auto-generate one by running /init inside a Claude Code session. This repo already includes one, so you can skip this step.
# Auto-generate one from your codebase
claude
> /init
Tips:
- Keep it under 40KB β too much context overloads the LLM's 200K token window
- Put the most important rules at the top
- Use imports for large docs:
@docs/api-reference.md
File Locations & Priority
| Type | Location | Scope | Git |
|---|---|---|---|
| Enterprise | /Library/Application Support/ClaudeCode/CLAUDE.md (macOS) | All users in org | N/A |
| User Global | ~/.claude/CLAUDE.md | All your projects | No |
| Project | ./CLAUDE.md | Team-shared | Yes |
| Project Local | ./CLAUDE.local.md | Personal (your machine) | No (auto-ignored) |
| Directory-specific | ./src/api/CLAUDE.md | Subdirectory scope | Yes |
| Rules Directory | .claude/rules/*.md | Conditional rules | Yes |
Slash Commands β Reusable Prompt Shortcuts
What: Prompts you trigger with /command-name. Think of them as reusable prompt shortcuts.
When to use: When you have a repeatable workflow you run often β scaffolding, reviewing, deploying.
Where: .claude/commands/my-command.md (project) or ~/.claude/commands/ (global)
Examples: Try running below commands inside Claude Code Session
> /scaffold-spring-api weather-service
> /scaffold-flutter-app fitness-tracker
> /design-database fitness tracking with users, workouts, and goals
Use $ARGUMENTS in the command file (.claude/commands/scaffold-spring-api.md) to accept parameters.
Agents (Subagents) β Specialist AI Personas
What: Specialized AI with isolated context for complex tasks with their own system prompt and tool restrictions. They run in a separate context window, so they don't pollute your main conversation.
When to use: When you need deep expertise in a specific domain β a dedicated backend developer, database architect, or codereviewer.
Where: .claude/agents/my-agent.md (project) or ~/.claude/agents/ (global)
Examples: Try running below commands inside Claude Code Session
> @java-spring-api Create a CRUD API for a Product entity with name, price, and category
> @flutter-mobile Build a login screen with Firebase Auth
> @database-designer Design the schema for an e-commerce platform
> @architect Design the system architecture for a real-time chat feature
Subagent-Driven Development (SDD) β Plan-to-PR Pipeline
What: A 3-role autonomous pipeline that turns an approved plan file into reviewed, committed code β without you shepherding each step.
Pipeline: Research (optional) β Implementer β Spec Reviewer β Quality Reviewer β PR
| Role | What it does |
|---|---|
| Research (optional) | Explores unfamiliar APIs or domains, produces docs/research/<feature>.md |
| Implementer | Writes code + tests for each task in the plan |
| Spec Reviewer | Checks implementation against the plan's acceptance criteria |
| Quality Reviewer | Tech-stack-specific review (Spring, NestJS, Flutter, etc.) |
When to use: A plan file exists at docs/plans/YYYY-MM-DD-<feature>.md (created via /plan-review) and the work spans 3+ tasks.
Research phase β when it helps: When the feature touches an external API or service your team hasn't integrated before (e.g., Stripe Connect, a new compliance standard, an unfamiliar third-party SDK). The research agent produces a committed docs/research/<feature>.md artifact that the spec reviewer uses to validate API usage in Step 2. Skip it when the stack is familiar.
Two dispatch modes:
- Subagent mode β
Agenttool, general-purpose agents, sequential. Best for β€5 tasks. - Team mode β
TeamCreatewith tech-specific agents running concurrently. Best for 6+ tasks.
How to trigger:
> Run the SDD pipeline for docs/plans/2026-03-01-payments.md
> Use subagent-driven-development to implement the auth feature plan
Or Claude auto-activates the subagent-driven-development skill when it detects a plan file and 3+ tasks.
Skill: .claude/skills/subagent-driven-development/
Skills β Auto-Activated Knowledge
What: Markdown files with domain knowledge, templates, and code patterns. Unlike commands, Skills are lazy-loaded and only brought into context when needed. Claude decides when to use them based on the task context β you don't invoke them explicitly.
When to use: When you want Claude to automatically apply certain patterns whenever a matching task comes up (e.g., always use your team's DTO pattern when creating Spring entities).
Where: .claude/skills/my-skill/SKILL.md
The skills in this repo auto-activate based on context:
| When You Ask About⦠| Skill That Activates |
|---|---|
| Spring Boot | java-spring-api |
| Angular components | angular-spa |
| Flutter screens | flutter-mobile |
| Database schemas | database-design |
| System architecture | architecture-design |
MCP Servers β External Tool Integrations
What: The Model Context Protocol connects Claude Code to external services (GitHub, databases, documentation servers, gmail, slack, APIs) so Claude can use them as tools.
When to use: When Claude needs to interact with services beyond the local filesystem β creating GitHub PRs, querying live databases, fetching up-to-date documentation, invoking APIs.
Where: .mcp.json (project root)
This repo comes pre-configured with:
| Server | What It Does |
|---|---|
| Context7 | Live, version-specific documentation for any library β add use context7 to prompts |
| GitHub | Create issues, PRs, browse repos, review code via GitHub Copilot MCP |
| Angular CLI | Angular schematics, builds, and project scaffolding directly from Claude |
| Chrome DevTools | Browser debugging and inspection |
| Firebase | Firestore and Auth operations |
| Sequential Thinking | Step-by-step reasoning for complex multi-step problems |
| Dart | Dart language server integration |
| XcodeBuildMCP | Build, run, debug, and test Xcode projects from Claude β covers iOS simulator, device, and macOS targets |
| Maestro | Cross-platform mobile E2E testing β run test flows on iOS simulator and Android emulator using natural language |
| Filesystem | Secure file search and manipulation with configurable directory permissions |
| LangChain Docs | Live LangChain documentation lookup |
| Weaviate Docs | Live Weaviate documentation lookup |
Weaviate Docs MCP Server
Gives Claude Code instant access to Weaviate documentation inside your editor.
Configuration
Add the following to your .mcp.json:
{
"mcpServers": {
"weaviate-docs": {
"type": "stdio",
"command": "npx",
"args": [
"mcp-remote",
"https://weaviate-docs.mcp.kapa.ai"
],
"timeout": 60000,
"env": {}
}
}
}
Authentication
The server requires a one-time OAuth login. Run the following command and follow the browser prompt to sign in with Google or GitHub:
npx mcp-remote https://weaviate-docs.mcp.kapa.ai
Your session will be cached at ~/.mcp-remote/ β you won't need to re-authenticate on subsequent uses.
Verify the server is connected:
claude mcp get weaviate-docs
You should see Status: β Connected.
settings.json Configuration
Purpose: Permissions, environment variables, hooks, and tool behavior.
File Locations & Priority
| Type | Location | Scope |
|---|---|---|
| User | ~/.claude/settings.json | All projects |
| Project (shared) | .claude/settings.json | Team-shared |
| Project (local) | .claude/settings.local.json | Personal |
| Enterprise | OS-specific managed location | Organization |
Permission Rule Syntax
| Pattern | Example | Description |
|---|---|---|
| Exact match | Bash(npm run test) | Only this exact command |
| Wildcard suffix | Bash(npm run:*) | npm run followed by anything |
| Glob patterns | Read(./src/**/*.ts) | All .ts files recursively |
| Tool types | Read, Write, Edit, Bash, WebFetch, WebSearch | Tool categories |
Key design decisions:
This kit ships with a pre-configured settings.json that balances safety with productivity.
| Category | What's Configured | Why |
|---|---|---|
| Allow | Build tools (npm, mvn, flutter, ng), git read/write, Docker, Python tooling | These run frequently β prompting every time kills productivity |
| Ask | Destructive file ops (rm, mv, cp), curl/wget, git reset | One-time confirmation prevents accidents without blocking workflow |
| Deny | Force-push, sudo, eval, reading .env/secrets/keys | Never allowed β these are hard guardrails |
| Env | CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR | Keeps Claude in the project root instead of drifting to /home/user |
Note: This uses the array-style permission syntax (e.g.,
"Bash(npm *)") which is the current format. If you see older examples with object-style syntax ("Bash": ["npm *"]), those are outdated.
To add your own project-specific permissions, modify .claude/settings.json or create a personal .claude/settings.local.json for overrides that aren't committed to git.
Hooks β Automated Guardrails
What: Shell scripts that run automatically at specific lifecycle events (before/after tool use, on session start/end). Think of them as middleware for Claude Code β deterministic, always execute the same way.
When to use: When you need hard rules enforced every time, like run linter before commit or block commits without passing tests or block destructive commands or auto-format after every edit.
| Hook Event | Fires When | Mental Model | Real-World Examples |
|---|---|---|---|
| PreToolUse | Before a tool executes | π Stop something dangerous from happening | Block git push to main/master, prevent rm -rf / or DROP DATABASE, protect .env files from edits |
| PostToolUse | After a tool completes | π§ Fix/check what just happened to a single file | Auto-format with Prettier/ruff after edits, run ESLint on the changed file, type-check with tsc --noEmit |
| Stop | When Claude finishes responding | β Validate the whole result before calling it done | Run unit tests once at the end (not per-file), audit all changed files, scan for leaked secrets |
| PermissionRequest | When Claude shows a permission dialog | π Auto-decide on permission prompts | Auto-approve git status, deny sudo commands |
| UserPromptSubmit | When you send a message | π₯ Intercept and enrich your input | Auto-prepend "use context7" to all prompts, inject current git branch name, Inject project-specific context, validate prompt format |
| SubagentStop | When a sub-agent finishes | π Quality-check delegated work | Check generated code compiles, verify output format |
| PreCompact | Before context compaction | πΎ Save state before memory shrinks | Export TODO list, save working notes to a file |
| SessionStart | When a session starts or resumes | π Set up the environment | Source .env files, verify toolchain is installed |
| SessionEnd | When a session ends | π§Ή Clean up after yourself | Log session summary, clean up temp files |
| Notification | On permission prompts or idle | π’ Route alerts externally | Send Slack alert on long-running tasks, desktop notifications |
Where: .claude/settings.json β hooks section, scripts in .claude/hooks/
Note:
SessionStart,SessionEnd,SubagentStop,PreCompact, andPermissionRequesthooks were added in recent Claude Code releases. If a hook event doesn't fire, verify your Claude Code version withclaude --versionand update if needed. The core events (PreToolUse,PostToolUse,Stop) are available in all versions.
This repo includes 4 hooks out of the box:
| Hook | Script | Event | What It Does |
|---|---|---|---|
| Bash Guard | pre-bash-guard.sh | PreToolUse β Bash | Blocks rm -rf /, rm -rf ., force-push to main, DROP DATABASE |
| Protect Sensitive Files | pre-edit-protect-sensitive.sh | PreToolUse β Write/Edit | Blocks edits to .env, credentials, private keys, lock files |
| Auto-Format | post-edit-format.sh | PostToolUse β Write/Edit | Runs Prettier (TS/JS/HTML/CSS), dart format, ruff/black (Python) |
| Smart Suggest | smart-suggest.sh | UserPromptSubmit | Behavioral coaching β detects intent (debug/review/deploy/scaffold) and injects the right command/agent suggestion before Claude responds. Tier 0 blocks policy violations. |
| Secrets Scan (Output) | output-secrets-scanner.sh | PostToolUse | Scans tool outputs (Bash, Read, WebFetch) for API keys, JWT tokens, DB connection strings, private keys. Closes the read-path gap β catches secrets in git history dumps, env reads, API responses. Warn only, never blocks. |
| Secret Scan | stop-secret-scan.sh | Stop | Warns if changed files contain AWS/GCP/GitHub/OpenAI API keys |
| Blackbox Log | stop-blackbox-log.sh | Stop | Appends session decisions, user constraints, and changed files to blackbox/session-log.md |
| Ralph Loop | stop-ralph-loop.sh | Stop | Autonomous iteration β blocks exit and re-feeds prompt until task complete. Opt-in: only active when /ralph-loop was called. |
After cloning:
chmod +x .claude/hooks/*.sh
Two-Layer Hook System
This repo implements a two-layer hook architecture:
| Layer | Technology | Purpose | How Rules Are Defined |
|---|---|---|---|
| Layer 1 β Core Safety | Shell scripts (.claude/hooks/*.sh) | Non-negotiable guardrails β always enforced | Hardcoded in shell scripts |
| Layer 2 β Configurable | Hookify Python engine (.claude/hookify/) | Team-customizable rules β enable/disable per project | Markdown rule files (.claude/hookify.*.local.md) |
Shell hooks are the baseline β always active, no way to disable them. Hookify sits on top and adds rules you can toggle without touching shell code.
Layer 2: Hookify Rule Engine
Rules live in .claude/hookify.*.local.md files with YAML frontmatter:
---
name: warn-console-log
enabled: true # false to disable without deleting the file
event: file # bash | file | stop | prompt | all
pattern: console\.log\( # regex matched against the relevant field
action: warn # warn (show message) | block (deny the tool call)
---
console.log detected β use the centralized logger instead.
To add a custom rule (slash command β no file editing needed):
/hookify Warn me when I write console.log in a TypeScript file
/hookify Block force-push to main
/hookify # scan conversation for behaviors to prevent
Or manage existing rules:
/hookify-list # show all rules and their enabled/disabled status
/hookify-configure # interactive toggle β enable or disable rules
Hookify never crashes Claude β it always exits 0. If Python is unavailable, a rule file is malformed, or any error occurs, Claude continues normally and the error is shown as a systemMessage.
Rule fields reference:
| Field | Values | Required |
|---|---|---|
name | Any string | Yes |
enabled | true / false | Yes |
event | bash, file, stop, prompt, all | Yes |
action | warn, block | Yes |
pattern | Regex string (shorthand for single condition) | One of pattern or conditions |
conditions | List of {field, operator, pattern} | One of pattern or conditions |
Blackbox β Session Decision Log
The blackbox is a persistent, append-only log of every session where decisions were made, code was written, or user constraints were stated. Think of it as a flight data recorder for your AI sessions β you don't look at it every day, but when something goes wrong or you need to trace a decision, it's invaluable.
How it works:
| Component | Location | Auto-loaded? | Purpose |
|---|---|---|---|
| Policy rule | .claude/rules/blackbox-policy.md | β Always | Instructs Claude to write entries at session end |
| Log data | blackbox/session-log.md | β Never | Actual entries β grows freely without bloating context |
| Hook script | .claude/hooks/stop-blackbox-log.sh | Runs at Stop | Mechanically appends git-changed files as backup |
Each log entry looks like this:
## 2026-02-28T09:00Z
### Decisions
- Used PostgreSQL per user constraint (not AI default)
### Constraints Stated by User
- No mobile app β web only
### Files Modified
- src/db/config.ts β switched connection pool to postgres
### Deferred
- Rate limiting β explicitly deferred to post-launch
---
Key design principles:
- Never bloats context β
blackbox/session-log.mdlives outside.claude/so it's never auto-loaded into every session - Auto-created β hook creates the
blackbox/directory and log file on first session end if missing - Monthly rotation β on month boundary, hook auto-renames to
archive-YYYY-MM.mdand starts fresh - Two-layer logging β Claude writes decisions (policy rule); hook writes git facts (mechanical backup)
- Committed to git β full history preserved, team-visible
When to read it:
# "What did we decide last week?"
cat blackbox/session-log.md
# "Why was this file changed?"
grep -A 10 "2026-02-20" blackbox/session-log.md
# Read archived months
cat blackbox/archive-2026-01.md
Diagram Staleness Detection:
The blackbox also tracks when source code changes may have made an architecture diagram stale. The hook checks if any modified files match a known diagram by folder name and appends a warning automatically:
β οΈ Diagrams that may need updating:
- docs/diagrams/auth-flow.md (auth/ was modified)
Naming convention: src/auth/ β docs/diagrams/auth-flow.md (folder prefix = diagram prefix). The policy rule instructs Claude to update or create diagrams during the session; the hook warns if it was missed.
docs/
βββ diagrams/
βββ auth-flow.md β generated after auth feature, updated when auth/ changes
βββ payment-flow.md β generated after payments feature
βββ api-contracts.md β generated after API layer work
Reference a diagram in any session with @docs/diagrams/auth-flow.md to give Claude instant architectural context without codebase exploration.
Ralph Loop β Autonomous Iteration
The ralph loop is a Stop hook that keeps Claude working on a task autonomously β when Claude tries to exit, the hook intercepts, checks if the task is done, and if not, feeds the same prompt back to start another iteration. Each iteration can see all file changes from previous iterations.
Named after Ralph Wiggum (The Simpsons) β persistent iteration despite setbacks. High risk. Use deliberately. Adapted from the
ralph-wiggumplugin in the Anthropicclaude-code-samplesrepository.
Start
/ralph-loop "Your task" --max-iterations 10 --completion-promise "DONE"
| Flag | Default | Meaning |
|---|---|---|
--max-iterations N | 10 | Hard stop after N iterations (safety net β always set this) |
--completion-promise "TEXT" | none | Claude exits ONLY when it outputs <promise>TEXT</promise> and means it |
Monitor progress:
head -5 .claude/ralph-loop.local.md # iteration: 3, max_iterations: 10, ...
Stop
/cancel-ralph # deletes state file β loop exits on next turn
Regular use
# Fix all TypeScript errors β loop until clean
/ralph-loop "Run: npx tsc --noEmit. Fix all errors. Repeat until zero errors." \
--max-iterations 15 --completion-promise "ZERO ERRORS"
# Implement all unchecked items in a plan file
/ralph-loop "Read docs/plans/feature.md. Implement the next unchecked item. Repeat." \
--max-iterations 20 --completion-promise "ALL ITEMS DONE"
With sub-agents
Sub-agents work naturally inside a ralph loop. Each iteration spawns fresh sub-agents; their file changes persist into the next iteration.
/ralph-loop "Run /review-pr. Fix all CRITICAL findings using specialist agents.
When zero CRITICAL findings remain, output <promise>ALL CRITICAL RESOLVED</promise>" \
--max-iterations 10 --completion-promise "ALL CRITICAL RESOLVED"
With Agent teams
Teams are recreated each iteration (previous team sessions end, but TaskList entries and file changes persist). Write prompts that check TaskList state first:
/ralph-loop "Check TaskList for pending tasks. If tasks remain, create a team and dispatch them.
When all tasks complete and tests pass, output <promise>TEAM DONE</promise>" \
--max-iterations 5 --completion-promise "TEAM DONE"
When to use / avoid
| Use | Avoid |
|---|---|
| Multi-attempt problems (fix errors, pass tests) | Single-shot tasks that don't need retry |
| Overnight / unattended long work | Tasks requiring human decisions mid-way |
| Iterative refinement over existing files | Tasks with no clear completion signal |
Always set --max-iterations. Without it, the loop runs until the completion promise is satisfied or you run /cancel-ralph. Uncontrolled loops = uncontrolled API costs.
Autoresearch β Metric-Gated Improvement Loop
Autoresearch is an autonomous loop that improves code quality by measuring, changing, and deciding β mathematically. Unlike /ralph-loop (which runs blind), autoresearch only keeps changes that move the metric in the right direction. Every regression is automatically rolled back with git reset --hard.
Inspired by Andrej Karpathy's
autoresearchpattern β a self-improving loop that applies ML-style evaluation (keep if better, discard if worse) to codebase quality.
Start
/autoresearch # measure all stacks, fix top issues
/autoresearch --metric nestjs # focus on NestJS only
/autoresearch --metric flutter --max-iterations 5
/autoresearch --metric all --target 10 # aim to cut 10 issues per iteration
| Flag | Default | Meaning |
|---|---|---|
--metric STACK | all | Stack to measure: flutter, nestjs, angular, python, all |
--target N | 5 | Issues to eliminate per iteration (sets improvement bar) |
--max-iterations N | 10 | Hard stop after N iterations |
What it measures
| Stack | Metrics tracked |
|---|---|
| Flutter | flutter analyze warnings, TODOs in lib/ |
| NestJS | : any / as any type assertions, console.log in production code, TODOs |
| Angular | : any / as any, console.log in production code |
| Python | TODO/type: ignore comments, bare except: clauses |
How a single iteration works
Measure baseline score (e.g. 47 issues)
β
Pick highest-impact category (e.g. console.log β Logger)
β
Implementer agent fixes 3β5 easiest instances
β
Re-measure score (e.g. 41 issues)
β
41 < 47? β
git commit β keep changes, continue
41 β₯ 47? β git reset --hard β discard, try different category next iteration
Example β NestJS type safety pass
# Before: 34 `: any` types in src/
/autoresearch --metric nestjs --target 5 --max-iterations 8
# Iteration 1: finds easy fetch responses with `as any` β adds proper types β 34 β 29 β
committed
# Iteration 2: tries a complex service, breaks a test β git reset β rollback
# Iteration 3: finds console.log calls β replaces with Logger β 29 β 24 β
committed
# ...continues until max-iterations or score hits 0
Stop
/cancel-ralph # autoresearch shares the same cancel mechanism as ralph-loop
How it differs from /ralph-loop
/ralph-loop | /autoresearch | |
|---|---|---|
| Stops when | Completion promise satisfied or max-iterations | max-iterations or score hits 0 |
| Keeps bad changes? | β Yes β runs blind, no rollback | β No β git reset --hard on any regression |
| Knows if it helped? | No β subjective completion promise | Yes β objective metric score |
| Best for | Open-ended tasks, implementing features, fixing errors | Quality metric reduction: types, linting, dead code |
| Risk | May accumulate wrong changes over many iterations | Self-correcting β regressions never land |
Rule of thumb: Use /ralph-loop when success is defined by a behaviour ("all tests pass", "feature works"). Use /autoresearch when success is defined by a number ("zero console.log", "zero as any").
When to use / avoid
| Use | Avoid |
|---|---|
Eliminating as any / console.log / TODOs at scale | Tasks requiring business logic decisions |
| Gradual type safety hardening over multiple sessions | New feature implementation |
| Pre-release code hygiene cleanup | Refactors that require architecture judgment |
| Onboarding cleanup of inherited legacy code | Single-file fixes (just do it directly) |
Lessons Log β Self-Improvement Loop
The lessons log is the team's shared record of corrections β mistakes Claude made that you corrected, expressed as rules to prevent recurrence.
Unlike the blackbox (which is never auto-loaded), lessons.md lives in .claude/rules/ so it is always active in every session.
| Component | Location | Auto-loaded? | Purpose |
|---|---|---|---|
| Lessons log | .claude/rules/lessons.md | Always | Active correction patterns for current sessions |
| Trigger rule | CLAUDE.md (Self-Improvement Loop section) | Always | Instructs Claude to write a lesson when corrected |
How it works:
- Claude makes a mistake. You correct it.
- Before proceeding, Claude writes a 4-line lesson entry to
lessons.md. - You commit and push. All teammates get the lesson on next
git pull. - From that session forward, every Claude instance on the team avoids the same mistake.
Bloat prevention β three-tier lifecycle:
lessons.md (max 15 entries)
|
| lesson recurs 3x across sessions
v
Promoted to matching rules file (core-behaviors.md, code-standards.md, etc.)
+ deleted from lessons.md
lessons.md stays lean (~60 lines max). Repeated lessons become permanent rules. One-off mistakes that never recur get pruned at the 15-entry cap.
Difference from blackbox:
blackbox/session-log.md | .claude/rules/lessons.md | |
|---|---|---|
| Auto-loaded? | Never | Always |
| Records | Decisions + files changed | Correction patterns |
| Grows? | Unboundedly (append-only) | Capped at 15 entries |
| Purpose | Audit trail | Active mistake prevention |
Model Selection & Cost Awareness
Claude Code supports three Anthropic models, each optimized for different use cases:
| Model | Best For | Cost (1M in/out) | Context | Speed |
|---|---|---|---|---|
| Claude Sonnet 4.5 | Balanced quality/cost β 80% of your work | $3 / $15 | 200K (1M beta) | Medium |
| Claude Haiku 4.5 | Fast, cheap tasks (docs, non-critical work) | $1 / $5 | 200K | Fast |
| Claude Opus 4.6 | Complex reasoning (expensive, burns tokens fast) | $5 / $25 | 200K (1M beta) | Slow |
Pricing details:
- Opus 4.6: $5 per million input tokens, $25 per million output tokens. Source
- Sonnet 4.5: $3 per million input tokens, $15 per million output tokens. Source
- Haiku 4.5: $1 per million input tokens, $5 per million output tokens. Source
- Long context (>200K tokens): Premium rates apply β Opus: $10/$37.50, Sonnet: $6/$22.50 per million tokens. Source
Recommended default: Sonnet 4.5
Sonnet balances high performance with efficient response times for coding tasks. Set it as your persistent default in .claude/settings.json:
{
"permissions": {},
"model": "sonnet"
}
Switching models:
Inside a Claude Code session:
/model sonnet # Switch to Sonnet (default)
/model haiku # Switch to Haiku (fast, cheap)
/model opus # Switch to Opus (complex reasoning)
Or use the --model flag when starting:
claude --model sonnet
claude --model haiku
claude --model opus
Cost monitoring:
/cost # Token usage and estimated cost for this session
/stats # Usage stats over 7/30 days or all-time
/usage # Plan limits and remaining usage
Cost-saving tips:
- Use Sonnet for 80% of work β code generation, debugging, refactoring
- Use Haiku for docs β README updates, comments, non-critical tasks
- Use Opus sparingly β complex architecture, critical security reviews (burns tokens quickly)
- Use
/compactregularly in long sessions β stale context wastes tokens - Use
@filereferences instead of pasting file contents - Disable unused MCP servers (
/mcpto check)
10. Cheaper Alternative: MiniMax M2.5
MiniMax M2.5 is a cost-effective alternative to Claude for agentic coding workflows.
Why Choose MiniMax M2.5?
MiniMax M2.5 (released February 12, 2026) delivers near-frontier coding performance β matching or approaching Claude Opus 4.6 on key benchmarks like SWE-Bench Verified (80.2%), while being 10-20x cheaper and often faster in real agentic workflows. It excels at full-stack development across 10+ languages, task decomposition, planning, and tool use via its Forge Framework.
For heavy users of Claude Code CLI, the MiniMax Coding Plan turns this into an ultra-cost-effective setup with predictable prompt-based limits instead of per-token bills that can explode during long sessions. Many developers report switching from Claude Max and handling 90%+ of daily coding/agentic work at a fraction of the cost, with seamless integration and built-in extras like MCP server with web search and image understanding.
Overview of MiniMax M2.5 for Coding
MiniMax M2.5 is a 230B-parameter model (10B active) built for coding and agentic tasks. It supports 10+ languages, handles the full dev lifecycleβfrom system design to testingβand works across Web, Android, iOS, and Windows. Powered by its Forge Framework for agentic workflows.
- The MiniMax M2.5 Coding Plan subscription provides a dedicated API key (exclusive to the plan, not interchangeable with pay-as-you-go keys).
- It uses the same Anthropic-compatible endpoint (
https://api.minimax.io/anthropic). - The model remains MiniMax-M2.5 (or just
MiniMax-M2.5in most configs). - It includes extras like built-in tools (e.g.,
web_search,understand_image) via MCP (MiniMax Coding Plan tools), which you can enable in Claude Code. - Billing is subscription-based with prompt/hour limits (rolling 5-hour window: e.g., Starter = 100 prompts/5h, Plus = 300, Max = 1000), much cheaper and more predictable for heavy coding use than pay-as-you-go or Claude Max.
Step-by-Step Configuration
1. Subscribe to the Coding Plan
- Go to: https://platform.minimax.io/subscribe/coding-plan
- Choose a plan
- After subscription activates, go to your account: https://platform.minimax.io/user-center/payment/coding-plan (or API Keys section).
- Generate/copy your Coding Plan API Key (it looks like a standard
sk-...or similar key, but it's plan-exclusive). Protect itβdon't share or commit it.
2. Clear Any Conflicting Anthropic Variables (important to avoid your Claude Max auth leaking in)
In your terminal:
unset ANTHROPIC_AUTH_TOKEN
unset ANTHROPIC_BASE_URL
3. Configure Claude Code
Update the settings.local.json file (~/.claude/settings.local.json) as below.
Paste this (replace <YOUR_CODING_PLAN_API_KEY> with your actual key):
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.minimax.io/anthropic",
"ANTHROPIC_AUTH_TOKEN": "<MINIMAX_CODING_PLAN_KEY>",
"API_TIMEOUT_MS": "3000000",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": 1,
"ANTHROPIC_MODEL": "MiniMax-M2.5",
"ANTHROPIC_SMALL_FAST_MODEL": "MiniMax-M2.5",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "MiniMax-M2.5",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "MiniMax-M2.5",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "MiniMax-M2.5"
}
}
4. (Optional but Highly Recommended) Enable MCP Tools (web search + image understanding β included in Coding Plan)
MiniMax provides an official MCP server for Claude Code to get these tools working seamlessly.
Install/run it (requires uvx/pipx or similar for Python tools):
claude mcp add -s user MiniMax --env MINIMAX_API_KEY=<YOUR_CODING_PLAN_API_KEY> --env MINIMAX_API_HOST=https://api.minimax.io -- uvx minimax-coding-plan-mcp -y
Or manually add to ~/.mcp.json:
{
"mcpServers": {
"MiniMax": {
"command": "uvx",
"args": ["minimax-coding-plan-mcp", "-y"],
"env": {
"MINIMAX_API_KEY": "<YOUR_CODING_PLAN_API_KEY>",
"MINIMAX_API_HOST": "https://api.minimax.io"
}
}
}
}
- In Claude Code session, type
/mcpβ you should seeweb_searchandunderstand_imagelisted if successful.
5. Test It
- Run:
claude - Type
/modelinside the session β it should show MiniMax-M2.5. - Try a coding task: "Plan and implement a full-stack Todo app with Angular + Java Spring boot".
- Test tools: Ask something needing search, like "Search latest Angular features and update this component".
11. Multiple Sub Agents
Spwaning Multiple agents that run inside main Claude Code session to handle specific subtasks (like research or verification). They work independently, then report results back to main Claude Code session.
Example:
> Spawn a multiple sub-agents to implement Authentication service
12. Agent Teams β Coordinated Multi-Agent Collaboration
Agent Teams is a new experimental feature for Claude Code where multiple Claude Code sessions working in parallel. One lead coordinates and assigns tasks. Multiple Teammates work independently with separate context windows and communicate via shared tasks and messages.
Architecture:
Team Lead Session (Main Claude)
β
Spawns 3 teammate sessions (separate Claude Code instances)
β
Teammate 1 ββ Shared Task Board ββ Teammate 2
β β β
ββββββββββ Teammate 3 ββββββββββββββββ
(Direct P2P messaging)
Key Capabilities:
- Teammates communicate directly with each other
- Shared task list all teammates can read/write
- Each teammate = separate Claude Code session
- You can interact with individual teammates directly
- Parallel + autonomous coordination
Key Difference from Sub-Agents:
| Feature | Sub-Agents | Agent Teams (New) |
|---|---|---|
| Architecture | Single session, sub-processes | Multiple independent Claude Code sessions |
| Parallel execution | Claude spawns multiple sub-agents | Spawns multiple teammate sessions |
| Context | Isolated but within main session | Separate Claude Code per teammate |
| Communication | Report back to main session only | Direct peer-to-peer messaging |
| Coordination | All goes through you (main session) | Autonomous via shared task list |
| Spawn based on task context | Claude decides automatically | Claude decides automatically |
| Use case | Focused individual tasks | Complex multi-component projects |
| File sharing | Don't know about each other | Can read each other's outputs |
| Visibility | In parent session | Split panes (with tmux) |
When to Use Agent Teams:
- Parallel code reviews (security, performance, testing)
- Multi-layer features (frontend + backend + database in parallel)
How to Enable
Agent Teams are disabled by default. Enable by setting the CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS environment variable.
settings.json
{
"env": {
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
},
"teammateMode": "tmux"
}
tmux Setup:
Agent Teams work best with tmux mode, which gives you real-time visibility of all teammates in split panes.
Step 1: Install tmux
brew install tmux
Step 2: Verify installation
tmux -V
Step 3: Start Claude Code in tmux
Start tmux session
tmux
Launch Claude Code inside tmux session
claude
Step 4: Spawn teammates
> Spawn 3 teammates to refactor authentication module:
> 1. Frontend: Refactor authentication UI components
> 2. Backend: Update JWT token validation in auth service
> 3. Database: Add user session tracking table
What you'll see:
- Lead in main pane (top)
- Teammate 1 in split pane
- Teammate 2 in split pane
- Teammate 3 in split pane
Known Limitations:
| Limitation | Impact | Workaround |
|---|---|---|
| No session resumption | Can't /resume a team session | Complete tasks in one session or use git to save state |
| No nested teams | Can't spawn sub-teams | Flatten hierarchy β use sub-agents instead |
| Token-intensive | ~5Γ context cost for 5 agents | Use only for high-value parallel tasks |
Use Agent Teams when parallelization justifies the cost. For sequential tasks, stick with sub-agents.
13. Claude Code Desktop β GUI with Live Preview
Claude Code Desktop is a desktop GUI that wraps the same Claude Code engine you use in the terminal β same CLAUDE.md, same .claude/agents, skills, slash commands, settings.json, hooks, and MCP servers. Everything in this kit works in Desktop without changes.
What Desktop adds on top of CLI: an embedded browser preview with interactive testing, visual diff review, parallel sessions with Git worktree isolation, background PR monitoring with auto-merge, and the ability to seamlessly switch between Desktop β CLI β VS Code at any time.

What It Can Do
| Capability | How It Works |
|---|---|
| Everything Claude Code CLI does | Same engine β code gen, agents, skills, commands, MCP servers, hooks, git |
| Start servers + live preview | Runs ng serve, mvn spring-boot:run, flutter run and opens the app in an embedded browser |
| Interactive UI testing | Claude clicks buttons, fills forms, takes screenshots, reads DOM β and self-corrects issues |
| Auto-verify changes | After every code edit, Claude screenshots the preview and confirms the fix works |
| PR lifecycle automation | Creates PR β monitors CI β auto-fixes failures β auto-merges when green |
| Visual diff review | Side-by-side code diffs in the GUI instead of terminal output |
| Session mobility | Start in Desktop, continue in CLI (/desktop command), or move to web/mobile |
| Remote SSH debugging | Connect to EC2/GCP/Azure VMs and debug directly β read logs, fix configs, restart services |
Note: Agent Teams are not supported in Claude Code Desktop β they are a CLI-only feature that requires tmux for split-pane visibility. Agent Teams need the CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS environment variable and spawn multiple independent Claude Code CLI sessions, which the Desktop GUI doesn't support. Sub-agents (single-session task delegation) work fine in Desktop. If you need Agent Teams, use the CLI.
Testing Frontend SPAs (Angular, React)
Sample repo: kumaran-is/shopping-list-demo β Angular 21 shopping list app pre-configured with agents, skills, and slash commands. Open in Claude Code Desktop and start testing.

Start the dev server and test interactively β Claude can click, type, navigate, and verify DOM changes in the embedded preview with HMR hot-reload:
> Start ng serve and open the preview. Add an item "Milk" with quantity 2.
Verify it appears in the list and the counter updates.
> Mark "Milk" as picked up. Switch to Pending filter. Confirm it's hidden.
> Add localStorage persistence. Refresh the preview and verify items persist.
Claude takes screenshots, reads the DOM, identifies errors, and fixes them β all within the embedded browser.
Testing Backend REST APIs (Spring Boot, NestJS)
Sample repo: kumaran-is/claude-desktop-springboot-demo β Spring Boot 3.5 WebFlux REST API with H2, Swagger UI, and full CRUD. Open in Desktop, launch Swagger UI in preview, and test endpoints.

Launch Swagger UI in the embedded preview and test endpoints using plain English:
> Run mvn spring-boot:run and open Swagger UI in the preview.
> In Swagger UI, POST a product: name "Laptop", price 999.99, category "Electronics".
Then GET /api/v1/products and verify it returns.
> Test full CRUD in Swagger UI: POST two products, PUT to rename one,
DELETE the other, GET to confirm final state.
Claude expands endpoints, clicks "Try it out", fills JSON bodies, executes requests, and reads responses β all in the embedded browser, no curl needed.
Testing Flutter Apps (Canvas Limitation)
Sample repo: kumaran-is/claude-desktop-flutter-demo β Flutter notes app with Riverpod, GoRouter, and Device Preview. Includes the full canvas limitation workaround guide and code-assisted test prompts.

Flutter web renders to a <canvas> element, not DOM nodes. This means preview_fill and JavaScript text input do not work on Flutter TextFields. Button clicks via the semantics tree work fine.
Workaround β code-assisted testing: For any step requiring text input, temporarily modify source code (provider state, controller initial text), restart the server, verify via screenshot + accessibility snapshot, then revert.
> Modify notes_provider.dart to pre-populate with 4 test notes. Restart the
preview server. Verify all notes appear via screenshot and accessibility tree.
> Click the star button for "Meeting Notes" in the semantics tree. Verify it
shows as important.
> Revert provider to empty state. Restart and confirm empty list.
See the Flutter Web Canvas Limitation doc in the Flutter demo repo for the full interaction patterns reference.
XcodeBuildMCP β iOS Build, Debug & Test from Claude
XcodeBuildMCP is an MCP server by Sentry that gives Claude direct access to Xcode's build system. It provides 79 tools across build, debug, test, simulator management, device deployment, and UI automation β making it a complete iOS/macOS development companion.
Why it matters for Flutter: Flutter generates an Xcode project (ios/Runner.xcworkspace). XcodeBuildMCP lets Claude build it, run it on a simulator or device, attach a debugger, capture logs, and inspect the UI β all without opening Xcode.
Install
brew tap getsentry/xcodebuildmcp
brew install xcodebuildmcp
Requirements: macOS 14.5+, Xcode 16+
Configure (.mcp.json)
Already configured in this repo. The entry:
"xcodebuild": {
"type": "stdio",
"disabled": false,
"description": "Xcode build, run, debug, and test for iOS simulator, device, and macOS targets.",
"command": "xcodebuildmcp",
"args": ["mcp", "--disable-telemetry"],
"timeout": 60000
}
Note:
--disable-telemetryopts out of Sentry's crash reporting. Remove it if you want to help the project with error telemetry.
Key Tool Groups
| Group | Tools | What Claude Can Do |
|---|---|---|
| iOS Simulator | build_sim, build_run_sim, install_app_sim, launch_app_sim | Build and run Flutter iOS app on simulator |
| iOS Device | build_device, install_app_device, launch_app_device | Deploy to a physical iPhone |
| LLDB Debugging | debug_attach_sim, debug_breakpoint_add, debug_variables, debug_stack | Attach debugger, set breakpoints, inspect variables |
| Log Capture | start_sim_log_cap, stop_sim_log_cap | Capture app logs during a run |
| UI Automation | tap, swipe, type_text, snapshot_ui, screenshot | Interact with and verify the running app |
| Simulator Mgmt | list_sims, boot_sim, set_sim_location, set_sim_appearance | Manage simulators, set GPS, toggle dark mode |
| Project Discovery | discover_projs, list_schemes, show_build_settings | Inspect Xcode project structure and signing config |
Sample Prompts
> Build the Flutter iOS app for simulator and launch it
> Attach the debugger to the running app, set a breakpoint in AppDelegate,
and show me the variables when it hits
> Capture simulator logs while I test the login flow, then show me any errors
> List available Xcode schemes for the ios/Runner.xcworkspace
> Build for my connected iPhone and install the app
Maestro β Mobile E2E Testing (iOS + Android)
Maestro is a cross-platform mobile E2E testing framework with an MCP server. Claude generates and runs test flows from natural language β no YAML writing required. Completely free for local use (Apache 2.0, no API key needed).
Prerequisites
| Requirement | Why | Install |
|---|---|---|
| Xcode (16+) | iOS Simulator + build tools | Mac App Store β then run xcode-select --install for CLI tools |
| Android Studio | Android Emulator + SDK | developer.android.com/studio β then create an emulator via AVD Manager |
| Java 21 | Maestro runtime | brew install openjdk@21 (see below) |
Note: You only need Xcode for iOS testing and Android Studio for Android testing. Install whichever platforms you target β or both for full cross-platform E2E.
Step 1: Install Java 21
brew install openjdk@21
After Homebrew finishes, create the system symlink so macOS can find it:
sudo ln -sfn /opt/homebrew/opt/openjdk@21/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-21.jdk
Step 2: Set PATH in your shell
Add these lines to ~/.zshrc (default macOS shell) or ~/.bashrc:
# Java 21
export JAVA_HOME="/opt/homebrew/opt/openjdk@21"
export PATH="$JAVA_HOME/bin:$PATH"
# Maestro
export PATH="$PATH:$HOME/.maestro/bin"
Reload your shell:
source ~/.zshrc # or source ~/.bashrc
Step 3: Install Maestro CLI
curl -fsSL "https://get.maestro.mobile.dev" | bash
Step 4: Verify both
java -version # Should show: openjdk 21.x.x
maestro --version # Should show: Maestro [version number]
Troubleshooting: If
maestro --versionshows "Unable to locate a Java Runtime", the symlink step was missed β run thesudo lncommand from Step 1. Ifjava -versionshows nothing, runsource ~/.zshrcor open a new terminal.
How It Works
You describe tests in plain English. Claude generates the YAML flow, runs it via Maestro MCP, and reports results:
You: "Test the login flow with email test@example.com and password secret123"
Claude: 1. Generates login-flow.yaml
2. Runs it on the active simulator/emulator
3. Reports: PASS (5/5 steps) or FAIL (step 3: "Dashboard" not visible)
The generated YAML flows are saved to test/e2e/ β reusable by your team and runnable in CI without Claude.
Configure (.mcp.json)
Already configured in this repo:
"maestro": {
"type": "stdio",
"disabled": false,
"description": "Maestro MCP server for cross-platform mobile E2E testing on iOS and Android.",
"command": "maestro",
"args": ["mcp"],
"timeout": 60000
}
Sample Prompts
Test on iOS Simulator:
> Build the fitness app with XcodeBuildMCP, then run Maestro E2E tests
on the login screen β try valid and invalid credentials
> Test the full workout flow: navigate to Exercises, filter by CHEST,
tap Bench Press, add it to a workout, complete the workout
> Generate Maestro test flows for all screens in the fitness app
and save them to test/e2e/
Test on Android Emulator:
> Start the Android emulator, install the fitness app APK,
then run the login E2E test with Maestro
> Run the same login-flow.yaml on Android to verify cross-platform parity
Test on Connected Device:
> Run the checkout E2E flow on my connected iPhone
> Run all test flows in test/e2e/ on the connected Android device
Generate + Save Flows for CI:
> Create Maestro test flows for login, registration, and workout creation.
Save each as a separate YAML file in test/e2e/
> Run all Maestro flows in test/e2e/ and give me a pass/fail summary
XcodeBuildMCP + Maestro Together
These two MCP servers complement each other for a complete iOS testing workflow:
XcodeBuildMCP Maestro
βββββββββββββ βββββββ
build_run_sim β build & launch app β Run E2E test suite
debug_attach_sim β diagnose crash β Test failure found
screenshot β quick visual check Structured pass/fail assertions
| Task | Tool |
|---|---|
| Build and launch iOS app | XcodeBuildMCP |
| Quick visual spot-check | XcodeBuildMCP |
| Debug a crash (LLDB) | XcodeBuildMCP |
| Repeatable regression tests | Maestro |
| Cross-platform (iOS + Android) tests | Maestro |
| CI/CD test automation | Maestro |
What a Generated Flow Looks Like
Claude generates this automatically β you never write it by hand:
# test/e2e/login-flow.yaml
appId: com.example.fitnessApp
---
- launchApp
- tapOn: "Email"
- inputText: "test@example.com"
- tapOn: "Password"
- inputText: "secret123"
- tapOn: "Sign In"
- assertVisible: "Welcome"
- assertVisible: "Workout"
Run it anytime without Claude: maestro test test/e2e/login-flow.yaml
CI/CD & PR Workflow
Claude Desktop monitors PRs in the background and auto-fixes CI failures:
> Stage all changes, commit, push to feature/shopping-list, and create a PR.
> Create a GitHub Actions CI workflow that runs lint, test, and build on PRs.
Push it and verify the action runs.
> Check the GitHub Actions status on our PR. If it failed, show me the error
and fix it.
Claude watches the PR, catches CI failures, pushes fixes, and can auto-merge when green β all while you continue working on the next task.
For CLI users, the same loop is available as a slash command: /iterate-pr β see After Opening a PR.
Remote SSH Debugging
Connect to any remote server (EC2, GCP VM, Azure VM, dev containers) and debug directly from the Desktop GUI. Claude Code must be installed on the remote machine.
Setup: Environment dropdown β + Add SSH connection β enter Host + Identity File
> Check why the Spring Boot app is failing on the EC2 instance.
Read logs, test endpoints, fix the config, restart the service.
Full capabilities on SSH: file access, bash commands, connectors, plugins, MCP servers, git, and embedded preview (with SSH port forwarding for visual preview).
Desktop vs CLI β When to Use What
| Use Case | Tool |
|---|---|
| Scaffolding, code generation, bulk editing | CLI β faster, uses full terminal capabilities |
| Live preview, UI interaction, visual testing | Desktop β embedded browser + auto-verify |
| Code review with visual diffs | Desktop β side-by-side diff view |
| PR monitoring, CI/CD automation | Desktop β background PR watching + auto-fix |
| Remote server debugging | Desktop β SSH sessions with full GUI |
| Quick one-off commands, scripting | CLI β lower overhead |
| Long-running autonomous tasks | Desktop β Cowork tab for background agents |
You can switch between them at any time β start in CLI, run /desktop to bring the session into Desktop, or move a local Desktop session to the web with "Continue with Claude Code on the web."
Quick Start
- Download Claude Desktop from claude.ai/download
- Open the app β Code tab β select your project folder
- Pick a model and permission mode β start chatting
- Desktop auto-detects dev servers and stores config in
.claude/launch.json
Docs: Claude Code Desktop Β· Desktop Quickstart Β· Preview, Review, and Merge
14. What Gets Sent to the LLM?
Every time you send a prompt in Claude Code, it assembles a context window β the complete package of information sent to the LLM for that turn. Understanding what goes into this window helps you manage it effectively.
Context Window Anatomy

What Each Layer Contains
| Layer | What's Loaded | When | Token Impact |
|---|---|---|---|
| System Prompt | Claude's core behavior rules, response formatting, ethical guidelines. Internal to Claude Code β not visible or editable by users. | Always β every turn | ~3K tokens (fixed) |
| System Tools | Built-in tool definitions (Read, Write, Edit, Bash, Grep, etc.). Internal to Claude Code β not visible or editable by users. | Always β every turn | ~12K tokens (fixed) |
| CLAUDE.md | Your project context β tech stack, conventions, rules | Startup β persists all session | Varies (keep under 300 lines or under 40KB) |
| MCP Tools | Tool schemas from connected MCP servers | Startup, or on-demand via Tool Search | Can be 5Kβ50K+ depending on server count |
| Agent Definitions | Descriptions of available sub-agents | Startup | Small (~100 tokens per agent) |
| Hooks Config | Hook definitions from settings.json | Startup | ~1K tokens |
| Slash Commands | Resolved command content (only the one you invoked) | When you run /command | Varies per command |
| Skills | Skill content (only skills Claude deems relevant) | On-demand β Claude decides | Varies per skill |
| @ File References | File contents pulled into the prompt | When you use @file in a prompt | Depends on file size |
| Conversation History | All prior messages, responses, and tool outputs | Accumulates every turn | Grows linearly |
| Compression Buffer | Reserved space for auto-compaction summaries | When context approaches ~75% full | ~22% of window |
Key Takeaways
Everything competes for the same 200K tokens. A bloated CLAUDE.md, 20 MCP servers, and a long conversation history all eat from the same pool. When the window fills up, Claude's output quality degrades.
MCP tools are the biggest variable cost. Each connected server adds tool schemas to every turn. With 20+ servers, you can lose 50K+ tokens before typing anything. Claude Code now has Tool Search that loads MCP tools on-demand (auto-activates when tools exceed 10% of context), but keeping unused servers disabled is still best practice.
Skills and commands load selectively. Unlike CLAUDE.md (always loaded), skills only load when Claude determines they're relevant, and slash commands only load when you invoke them. This is why skills are preferred over stuffing everything into CLAUDE.md.
Monitor your usage:
> /context # Visual breakdown of token usage
> /cost # Token and cost statistics
> /compact # Manually compress conversation history
15. What's in This Repo
79 components β 21 skills, 14 commands, 21 agents, 4 rules, 4 hooks, 12 MCP servers, 2 settings files, 1 CLAUDE.md.
claude-code-onboarding/
βββ CLAUDE.md # Project instructions β tech stack, conventions, rules
βββ .mcp.json # 12 MCP servers (see table below)
βββ .gitignore
βββ README.md # β You are here
β
βββ .claude/
βββ settings.json # Permissions (allow/ask/deny) and hook configs
βββ settings.local.json # Personal overrides (gitignored)
β
βββ rules/ # Always-loaded behavioral guidelines
β βββ code-standards.md # Error handling, DRY, logging, output quality
β βββ core-behaviors.md # Assumptions, confusion management, simplicity
β βββ first-principles.md # Hard Constraints, Quality Thresholds, Workflow Invariants, AI anti-pattern detection
β βββ leverage-patterns.md # Task protocol, test-first, naive-then-optimize
β βββ verification-and-reporting.md # Verify before claiming, honest status reporting
β
βββ hooks/ # Lifecycle hook scripts (chmod +x after cloning)
β βββ pre-bash-guard.sh # Block destructive bash commands (rm -rf, DROP, etc.)
β βββ pre-edit-protect-sensitive.sh # Block edits to .env, keys, lock files
β βββ post-edit-format.sh # Auto-format TS/JS/Dart/Python after edits
β βββ stop-secret-scan.sh # Scan changed files for leaked secrets on stop
β
βββ agents/ # 20 specialist AI personas (invoke with @name)
β β
β β # β Development agents (model: sonnet) β
β βββ java-spring-api.md # Spring Boot WebFlux expert
β βββ nestjs-api.md # NestJS / Fastify / Prisma expert
β βββ python-dev.md # Python / FastAPI expert
β βββ agentic-ai-dev.md # LangChain / LangGraph AI agent builder
β βββ google-adk.md # Google ADK (Gemini agents) builder
β βββ angular-spa.md # Angular frontend expert
β βββ a2ui-angular.md # A2UI renderer developer (Angular)
β βββ flutter-mobile.md # Flutter mobile expert
β βββ frontend-design.md # Creative UI/UX design specialist
β βββ database-designer.md # PostgreSQL + Firestore architect
β βββ architect.md # Solution architect
β βββ flutter-security-expert.md # Mobile security & privacy compliance
β β
β β # β Review agents (model: opus) β
β βββ code-reviewer.md # General code quality & review
β βββ nestjs-reviewer.md # NestJS code review specialist
β βββ spring-reactive-reviewer.md # Spring WebFlux review specialist
β βββ agentic-ai-reviewer.md # Agentic AI code review specialist
β βββ security-reviewer.md # Security vulnerability reviewer
β βββ postgresql-database-reviewer.md # PostgreSQL performance & schema reviewer
β β
β β # β Specialist agents β
β βββ accessibility-auditor.md # WCAG / a11y compliance auditor
β βββ riverpod-reviewer.md # Flutter Riverpod state management reviewer
β βββ dedup-code-agent.md # Dead code & duplication detector
β βββ ui-standards-expert.md # UI consistency & design system enforcement
β β
β β # β CI/CD agents (model: haiku) β
β βββ deployment-engineer.md # GitHub Actions, Docker, Cloud Run, Flutter CI, Firebase deploy
β β
β β # β Infrastructure agents (model: opus) β
β βββ terraform-specialist.md # GCP IaC: Cloud Run, Cloud SQL, Artifact Registry, IAM, WIF
β
βββ commands/ # 13 slash commands (triggered with /name)
β β
β β # β Scaffolding β
β βββ scaffold-spring-api.md # /scaffold-spring-api <name>
β βββ scaffold-nestjs-api.md # /scaffold-nestjs-api <name>
β βββ scaffold-python-api.md # /scaffold-python-api <name>
β βββ scaffold-agentic-ai.md # /scaffold-agentic-ai <name>
β βββ scaffold-google-adk.md # /scaffold-google-adk <name>
β βββ scaffold-angular-app.md # /scaffold-angular-app <name>
β βββ scaffold-a2ui.md # /scaffold-a2ui <name> β A2UI renderer module
β βββ scaffold-flutter-app.md # /scaffold-flutter-app <name>
β β
β β # β Design β
β βββ design-database.md # /design-database <domain description>
β βββ design-architecture.md # /design-architecture <system description>
β β
β β # β Workflow β
β βββ add-feature.md # /add-feature <feature description>
β βββ review-code.md # /review-code [focus area]
β βββ audit-security.md # /audit-security [scope]
β βββ iterate-pr.md # /iterate-pr [PR#] β fix CI + feedback loop until green
β βββ status-check.md # /status-check β binary works/broken report
β βββ project-status.md # /project-status β codebase summary
β
βββ skills/ # 20 auto-activated domain knowledge skills
β
β # β Backend skills β
βββ java-spring-api/ # Spring Boot 3.5.x: entity patterns, resilience (Resilience4j),
β # testing (WebTestClient, Testcontainers), security hardening,
β # reactive debugging, Redis/SSE patterns (9 reference files)
βββ java-coding-standard/ # Java naming, immutability, records, sealed types (1 reference file)
βββ nestjs-api/ # NestJS 11.x: module structure, Prisma 7.x, config management,
β # circuit breakers, feature flags, messaging (BullMQ/RabbitMQ/Kafka),
β # REST controllers, security, debugging, testing (23 reference files)
βββ nestjs-coding-standard/ # NestJS naming, module patterns, DTO conventions (1 reference file)
βββ python-dev/ # Python 3.14: FastAPI patterns, Pydantic v2, async SQLAlchemy,
β # pytest fixtures, ruff/mypy config (1 reference file)
β
β # β Agentic AI skills β
βββ agentic-ai-dev/ # LangChain/LangGraph: ReAct agents, RAG (standard/agentic/self-RAG),
β # tool definitions, multi-provider LLM routing, guardrails,
β # prompt injection detection, PII redaction (17 reference files)
βββ agentic-ai-coding-standard/ # Agentic AI naming, TypedDict state, async patterns (1 reference file)
βββ google-adk/ # Google ADK (Agent Development Kit): Agent, SequentialAgent,
β # ParallelAgent, LoopAgent, FunctionTool, McpToolset, callbacks,
β # session management, memory, artifacts, FastAPI integration (8 reference files)
β
β # β Frontend & mobile skills β
βββ angular-spa/ # Angular 21.x: standalone components, signals, control flow,
β # TailwindCSS 4.x + daisyUI 5.x setup, zoneless testing,
β # accessibility checklist, troubleshooting (12 reference files)
βββ a2ui-angular/ # A2UI (Agent-to-User Interface): recursive renderer,
β # component catalog allowlist, agent service (REST/SSE),
β # security validation, streaming support (5 reference files)
βββ flutter-mobile/ # Flutter 3.41.x: clean architecture layers, Riverpod 3.x,
β # Freezed models, GoRouter, Firebase integration (2 reference files)
βββ riverpod-patterns/ # Riverpod: AsyncNotifier, AsyncValue.when, ref.watch vs ref.read,
β # family providers, lifecycle management (1 reference file)
βββ ui-standards-tokens/ # Design tokens: spacing scale, color system, typography,
β # elevation, touch targets, responsive breakpoints (2 reference files)
β
β # β Architecture & design skills β
βββ architecture-design/ # C4 diagrams, API contracts, sequence diagrams,
β # deployment topology, ADR templates (1 reference file)
βββ architecture-decision-records/ # ADR lifecycle, templates, status tracking (3 reference files)
βββ database-schema-designer/ # PostgreSQL schema: normalization, Flyway migrations,
β # Firestore collections, indexing strategy, ERDs (7 reference files)
βββ ddd-architect/ # Domain-Driven Design: bounded contexts, aggregates,
β # context mapping, event storming, strategic/tactical design (4 reference files)
βββ openapi-spec-generation/ # OpenAPI 3.1: schema generation, path definitions,
β # security schemes, examples, validation (5 reference files)
β
β # β Tooling skills β
βββ mcp-builder/ # MCP server development: Python (FastMCP) and Node.js (MCP SDK),
β # tool definitions, transport config (18 reference files + scripts)
βββ browser-testing/ # Browser automation & testing: Chrome DevTools MCP (inspection,
β # performance, network) + Browser-Use MCP (E2E flows, form filling) (3 reference files)
βββ domain-finder/ # Domain name availability checking via WHOIS (1 reference file)
βββ changelog-generator/ # Git history parsing, semantic versioning,
# release notes generation (1 reference file)
β
βββ docs/
βββ workflows/ # 43 multi-phase workflow guides (humans + Claude Code)
βββ README.md # β Index of all workflows by category
Workflow guides:
docs/workflows/README.mdβ covers every development process from ideation to deployment, organized by phase (Feature Dev, Testing, Security, Shipping, Ops, Tooling).
MCP Servers (.mcp.json)
| Server | Transport | Purpose |
|---|---|---|
github | HTTP | GitHub API β issues, PRs, code search |
langchain-docs | HTTP | LangChain documentation search |
angular-cli | stdio | Angular CLI operations |
browser-use | stdio | Human-like browser interaction & autonomous E2E flows |
context7 | stdio | Live documentation for any library |
dart-mcp-server | stdio | Dart/Flutter tooling daemon |
firebase | stdio | Firebase CLI operations |
postgres | stdio | PostgreSQL query & schema tools |
docker | stdio | Docker container management |
xcodebuild | stdio | Xcode build, run, debug, test β iOS simulator, device, and macOS (replaces ios-simulator) |
maestro | stdio | Mobile UI testing framework |
adk-docs | stdio | Google Agent Development Kit docs via mcpdoc (https://google.github.io/adk-docs/llms.txt) |
Browser Automation
We use a three-tool stack for complete browser testing:
| Tool | Type | Role |
|---|---|---|
| playwright-cli | Bash CLI (stateful) | Scripted tests β navigation, snapshots, screenshots, network/console inspection, performance tracing |
| Browser-Use MCP | MCP server | Autonomous agent flows β describe a goal, Claude figures out the steps |
| Maestro MCP | MCP server | Cross-platform mobile E2E β same YAML flow runs on iOS simulator and Android emulator |
Install playwright-cli
# Package name is @playwright/mcp; binary installed is playwright-cli
npm install -g @playwright/mcp@latest
playwright-cli install # download browsers
playwright-cli --version # verify
Quick sanity check
playwright-cli open https://example.com
playwright-cli snapshot # accessibility tree β should show page structure
playwright-cli network # should show GET https://example.com β 200
playwright-cli close-all
playwright-cli vs Browser-Use decision rule
- Know the exact steps? β
playwright-cli(scripted, inspectable, network/console visible) - Describe a goal and let Claude figure out the steps? β Browser-Use MCP
Sample Prompts
Quick health check:
Open localhost:4200, check for any console errors or failed network requests
Scripted login test:
Use playwright-cli to test the login flow at localhost:4200/login β fill the form,
submit, check network for POST /api/auth/login β 200, take a screenshot of the result
Autonomous flow:
Use Browser-Use to sign up at localhost:4200/signup with a test email and confirm
the welcome email screen appears
Performance trace:
Run a playwright-cli tracing-start/stop on localhost:4200, then open the trace
to identify render-blocking resources
Claude automatically picks the right tool based on the task. See .claude/skills/browser-testing/SKILL.md and .claude/agents/browser-testing.md for the full workflow guide.
Verify Maestro MCP
maestro mcp # should start without error (Ctrl+C to exit)
maestro list-devices # confirm simulator/emulator visibility
16. iOS App Store Release Pipeline
Flutter developers build the app β but the journey doesn't end at the IPA. This section covers the full pipeline from Xcode build to App Store review, powered by two complementary tools in this kit.
How the Tools Fit Together
Flutter Development XcodeBuildMCP ASC Skills
ββββββββββββββββββ ββββββββββββββββββ βββββββββββββββββββββββββββ
Write Dart/Flutter code -> Build iOS project -> Upload IPA to App Store Connect
flutter build ios -> Archive & export IPA -> Distribute to TestFlight groups
Riverpod + Freezed -> Debug on simulator -> Submit to App Store review
Widget tests -> Capture screenshots -> Monitor review status
-> Inspect signing config -> Triage crash reports
XcodeBuildMCP (xcodebuild in .mcp.json) handles everything that requires a live Xcode environment: building, archiving, running on simulator, attaching a debugger, and capturing logs.
ASC Skills handle everything that happens after the IPA is built: uploading, TestFlight distribution, signing asset management, App Store submission, and post-release monitoring.
Step 1 β Build the IPA (XcodeBuildMCP)
The xcodebuild MCP server executes these steps natively. Load the flutter-mobile skill and use XcodeBuildMCP tools:
1. discover_projs -> finds ios/Runner.xcworkspace
2. list_schemes -> identifies the Runner scheme
3. build_sim -> builds for simulator (development)
4. build_run_sim -> builds + launches on simulator
5. show_build_settings -> verifies signing config
For a release build that produces an IPA for upload:
# Run once to generate Xcode project and Pods
flutter build ios --release
# XcodeBuildMCP then handles archive + export
# (or use xcodebuild directly via asc-xcode-build skill)
Step 2 β Set Up Signing (asc-signing-setup skill)
Before uploading, ensure signing assets are in place:
asc bundle-ids list --paginate
asc certificates list --certificate-type IOS_DISTRIBUTION
asc profiles create --name "AppStore Profile" --profile-type IOS_APP_STORE \
--bundle "BUNDLE_ID" --certificate "CERT_ID"
asc profiles download --id "PROFILE_ID" --output "./profiles/"
Load skill: .claude/skills/asc-signing-setup/
Step 3 β Upload & Distribute (asc-release-flow skill)
# Preferred: single command for TestFlight
asc publish testflight --app APP_ID --ipa ./build/ios/ipa/MyApp.ipa --group GROUP_ID --wait
# Preferred: single command for App Store
asc publish appstore --app APP_ID --ipa ./build/ios/ipa/MyApp.ipa --version 1.2.3 --wait --submit --confirm
Load skill: .claude/skills/asc-release-flow/
Step 4 β Manage Beta (asc-testflight-orchestration skill)
asc testflight beta-groups list --app APP_ID --paginate
asc testflight beta-testers add --app APP_ID --email tester@example.com --group "Beta"
asc builds add-groups --build BUILD_ID --group GROUP_ID
asc builds test-notes create --build BUILD_ID --locale en-US --whats-new "Bug fixes"
Load skill: .claude/skills/asc-testflight-orchestration/
Step 5 β Preflight & Submit (asc-submission-health skill)
Run all 7 preflight checks before submitting. See reference/submission-preflight-checklist.md for the full checklist.
asc builds info --build BUILD_ID # Must be VALID
asc encryption declarations list --app APP_ID # Must exist + assigned
asc submit create --app APP_ID --version 1.2.3 --build BUILD_ID --confirm
asc submit status --id SUBMISSION_ID
Load skill: .claude/skills/asc-submission-health/
Step 6 β Monitor & Triage (asc-crash-triage skill)
After release, monitor crashes and beta feedback:
asc crashes --app APP_ID --sort -createdDate --limit 10
asc feedback --app APP_ID --sort -createdDate --limit 10
asc performance diagnostics list --build BUILD_ID
Load skill: .claude/skills/asc-crash-triage/
ASC Skills in This Kit
These skills were adapted from the open-source app-store-connect-cli-skills repository by @rudrankriyam, and enhanced to match this kit's skill standards (Iron Law, progressive disclosure, metadata blocks, Documentation Sources).
| Skill | Directory | When to Load |
|---|---|---|
asc-cli-usage | .claude/skills/asc-cli-usage/ | Before running any asc command |
asc-id-resolver | .claude/skills/asc-id-resolver/ | When you need APP_ID, BUILD_ID, GROUP_ID |
asc-signing-setup | .claude/skills/asc-signing-setup/ | Setting up or rotating signing assets |
asc-release-flow | .claude/skills/asc-release-flow/ | Uploading IPA, TestFlight or App Store release |
asc-testflight-orchestration | .claude/skills/asc-testflight-orchestration/ | Managing beta groups, testers, build notes |
asc-submission-health | .claude/skills/asc-submission-health/ | Preflight checks and App Store submission |
asc-crash-triage | .claude/skills/asc-crash-triage/ | Crash reports, beta feedback, performance |
Prerequisites
# Install the asc CLI
brew install rudrankriyam/tap/app-store-connect-cli
# Authenticate (keychain β recommended)
asc auth login
# Or set environment variables
export ASC_KEY_ID="your-key-id"
export ASC_ISSUER_ID="your-issuer-id"
export ASC_PRIVATE_KEY_PATH="/path/to/AuthKey.p8"
Example Prompts
Copy any of these directly into Claude Code to trigger the iOS release skills:
Upload & TestFlight distribution
Upload the IPA at ./build/ios/ipa/MyApp.ipa to TestFlight for app APP_ID and distribute it to the "Internal Testers" group.
Full App Store release
Run all preflight submission checks for my iOS app APP_ID version 2.1.0, then submit it to App Store review.
Signing setup
Create a new App Store distribution certificate and provisioning profile for bundle ID com.example.myapp on iOS.
Check review status
What is the current App Store review status for my app APP_ID? Show me if there are any active submissions.
Crash triage
Show me the top 10 TestFlight crash reports for app APP_ID sorted by most recent, grouped by crash signature.
Resolve IDs
Find the app ID, latest build ID, and Internal Testers group ID for my app with bundle ID com.example.myapp.
Rotate expired certificate
My iOS distribution certificate is expiring. Check what exists, revoke the old one, and create a new certificate and provisioning profile for com.example.myapp.
TestFlight What to Test notes
Set the What to Test notes for build BUILD_ID in en-US locale to "Fixed login crash on iOS 18. Please test the onboarding flow."
Skills used by these prompts:
asc-cli-usageβasc-id-resolverβasc-signing-setupβasc-release-flowβasc-testflight-orchestrationβasc-submission-healthβasc-crash-triageSource: github.com/rudrankriyam/app-store-connect-cli-skills
17. Android Google Play Release Pipeline
Flutter developers build Android apps β but the journey doesn't end at the AAB. This section covers the full pipeline from Android build to Google Play production, powered by the GPD skills in this kit.
How the Tools Fit Together
Flutter Development flutter CLI / Maestro MCP GPD Skills
ββββββββββββββββββ ββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββ
Write Dart/Flutter code β Build Android AAB β Upload AAB to Google Play
flutter build appbundle β Run E2E tests (Maestro) β Release to internal/beta track
Riverpod + Freezed β Inspect on emulator β Staged rollout to production
Widget tests β Cross-platform E2E flows β Monitor vitals and reviews
Flutter CLI handles the Android build: flutter build appbundle produces the .aab file.
Maestro MCP (maestro in .mcp.json) runs cross-platform E2E test flows on Android emulator before release.
GPD Skills handle everything after the AAB is built: uploading to Google Play, track management, staged rollouts, submission health checks, and post-release monitoring.
Step 1 β Build the AAB (Flutter CLI)
# Build release AAB
flutter build appbundle --release
# Output: build/app/outputs/bundle/release/app-release.aab
Then run E2E flows on Android emulator via Maestro MCP before uploading.
Step 2 β Resolve IDs (gpd-id-resolver skill)
Before running any release commands, resolve your package name and track names:
gpd publish tracks --package com.example.app
gpd publish status --package com.example.app --track production
Load skill: .claude/skills/gpd-id-resolver/
Step 3 β Upload & Release (gpd-release-flow skill)
# Upload AAB to Google Play
gpd publish upload app.aab --package com.example.app
# Release to internal track
gpd publish release --package com.example.app --track internal --status completed
# Promote to beta
gpd publish promote --package com.example.app --from-track internal --to-track beta
# Staged rollout to production: 5% β 50% β 100%
gpd publish release --package com.example.app --track production --status inProgress --version-code 123
gpd publish rollout --package com.example.app --track production --percentage 5
gpd publish rollout --package com.example.app --track production --percentage 50
gpd publish rollout --package com.example.app --track production --percentage 100
Load skill: .claude/skills/gpd-release-flow/
Step 4 β Manage Beta Testers (gpd-betagroups skill)
gpd publish testers list --package com.example.app --track internal
gpd publish testers add --package com.example.app --track internal --group testers@example.com
gpd publish release --package com.example.app --track beta --status completed
Load skill: .claude/skills/gpd-betagroups/
Step 5 β Preflight Before Production (gpd-submission-health skill)
Run all 5 preflight checks before releasing to production. See reference/submission-preflight-checklist.md for full commands.
gpd publish edit validate EDIT_ID --package com.example.app # Must pass
gpd publish status --package com.example.app --track production
gpd publish listing get --package com.example.app # Metadata complete
gpd publish images list phoneScreenshots --package com.example.app --locale en-US
Load skill: .claude/skills/gpd-submission-health/
Step 6 β Monitor Build State (gpd-build-lifecycle skill)
gpd publish status --package com.example.app --track production
gpd publish tracks --package com.example.app
# Emergency: halt bad rollout
gpd publish halt --package com.example.app --track production --confirm
gpd publish rollback --package com.example.app --track production --confirm
Load skill: .claude/skills/gpd-build-lifecycle/
GPD Skills in This Kit
These skills were adapted from the open-source gpd-cli-skills repository by @rudrankriyam, and enhanced to match this kit's skill standards (Iron Law, progressive disclosure, metadata blocks, Documentation Sources).
| Skill | Directory | When to Load |
|---|---|---|
gpd-cli-usage | .claude/skills/gpd-cli-usage/ | Before running any gpd command |
gpd-id-resolver | .claude/skills/gpd-id-resolver/ | When you need package name, track, version code, or product ID |
gpd-release-flow | .claude/skills/gpd-release-flow/ | Uploading AAB, track releases, staged rollout |
gpd-betagroups | .claude/skills/gpd-betagroups/ | Managing internal/beta testers and track promotion |
gpd-submission-health | .claude/skills/gpd-submission-health/ | Preflight checks before production release |
gpd-build-lifecycle | .claude/skills/gpd-build-lifecycle/ | Build upload status, internal sharing, halt/rollback |
Prerequisites
# Install the gpd CLI
brew install rudrankriyam/tap/google-play-developer-cli
# Set service account credentials
export GPD_SERVICE_ACCOUNT_KEY="/path/to/service-account.json"
# Validate access
gpd auth check --package com.example.app
Example Prompts
Copy any of these directly into Claude Code to trigger the Android release skills:
Upload AAB and release to internal track
Upload ./build/app/outputs/bundle/release/app-release.aab to Google Play for package com.example.myapp and release it to the internal testing track.
Staged rollout to production
Promote my app com.example.myapp from beta to production with a staged rollout β start at 5%, then 50%, then 100%.
Full preflight check before production
Run all preflight submission checks for com.example.myapp version code 123 before I release to the production track.
Add beta testers
Add tester@example.com to the internal testing track for com.example.myapp and distribute the latest build to them.
Check release status
What is the current release status of com.example.myapp on the production track? Show version code and rollout percentage.
Halt a bad rollout
Halt the production rollout for com.example.myapp immediately β there's a critical crash in the latest release.
Resolve IDs before release
List all available tracks and the current version codes for com.example.myapp on Google Play.
Manage store listing
Export the current Play Store listing for com.example.myapp to a local Fastlane metadata folder, then validate it.
Skills used by these prompts:
gpd-cli-usageβgpd-id-resolverβgpd-build-lifecycleβgpd-release-flowβgpd-betagroupsβgpd-submission-health
16. Hands-On Exercises
Work through these exercises to get familiar with Claude Code. Each one uses different components from this kit. These exercises follow a deliberate progression to help you understand which component to use for and when:
| Exercises | Focus | Components Introduced |
|---|---|---|
| 1β4 | Single-stack scaffolding | Slash Commands, Skills (auto), Agents |
| 5 | Multi-stack integration | Chaining commands + agents across layers |
| 6 | External tooling | MCP Servers (Context7) |
| 7 | Design & review | Review agents, architecture patterns |
| 8 | AI agent development | Agentic AI stack, advanced agent patterns |
| 9 | Domain modeling | DDD skill, cross-cutting analysis |
| 10 | Full workflow | All components working together |
Exercises 1β4 are independent β do them in any order based on your stack. Exercises 5+ build on concepts from earlier exercises, so work through them sequentially.
Exercise 1: Scaffold a Flutter Fitness App
Components used: Slash Command β Skill (auto) β Sub-agent
How it works: The slash command kicks off scaffolding. Based on task context, Claude automatically activates relevant skills and sub-agents as needed β you just keep prompting naturally.
> /scaffold-flutter-app fitness tracker
Then iterate:
> Add a workout logging feature with Firestore integration
> Create the database schema for tracking workouts, exercises, and user stats
> Add a dashboard screen showing weekly workout summary with charts
Exercise 2: Build a Weather REST API (Java)
Components used: Slash Command β Sub-agent β Skill (auto)
Scaffold first, then use the @java-spring-api agent for domain-specific implementation:
> /scaffold-spring-api weather-service
> @java-spring-api Add a WeatherController that accepts a city name and returns mock weather data with temperature, humidity, and condition
> Add integration tests for the weather endpoint
Exercise 3: Build a Todo API (NestJS)
Components used: Slash Command β Sub-agent
> /scaffold-nestjs-api todo-service
> @nestjs-api Add a Todo feature module with CRUD endpoints, Prisma model, DTO validation, and service
> Add Vitest integration tests for create and list endpoints
> Add a PATCH endpoint to mark todos as complete
Exercise 4: Build an Analytics API (Python)
Components used: Slash Command β Sub-agent
> /scaffold-python-api analytics-service
> @python-dev Add an async endpoint that accepts event data and stores it with timestamps
> Create a Pydantic model for events with type, payload, and metadata
> Add pytest tests for the event endpoints
Exercise 5: Design a Full-Stack E-Commerce System
Components used: Slash Command β Sub-agent β Skill (auto) β MCP Server
This exercise chains multiple components together β architecture design, database schema, API scaffolding, and implementation:
> /design-architecture An e-commerce platform with product catalog, shopping cart, checkout, and order tracking. Angular SPA for web, Flutter for mobile, Spring Boot backend.
> /design-database e-commerce platform with products, categories, users, orders, order items, payments, and shipping
> /scaffold-spring-api ecommerce-api
> @java-spring-api Create CRUD endpoints for Products with name, description, price, category, and image URL
Exercise 6: Pull Live Docs with Context7 (MCP)
Components used: MCP Server (Context7)
Append use context7 to any prompt to fetch up-to-date, version-specific documentation instead of relying on Claude's training data:
> Create a Spring Boot WebFlux endpoint that uses Spring Security with JWT. use context7
> Build an Angular component using the new Angular signals API. use context7
> Set up Firebase App Check in Flutter. use context7
> Create a FastAPI endpoint with async SQLAlchemy. use context7
> Create a NestJS guard with JWT validation using @nestjs/passport. use context7
Exercise 7: Design & Review Architecture
Components used: Sub-agents (@architect, @database-designer)
Use specialized agents for design and review tasks that benefit from isolated, focused context:
> @architect Review the current project structure and suggest improvements
> @architect Design a real-time notification system that works across Angular web and Flutter mobile using Firebase Cloud Messaging
> @database-designer Design the notification schema with PostgreSQL for persistence and Firestore for real-time delivery
Exercise 8: Build an AI Agent Service (Agentic AI)
Components used: Slash Command β Sub-agent β Skill (auto) β MCP Server
Scaffold a production AI agent service, then build out a ReAct agent with RAG and tools:
> /scaffold-agentic-ai research-agent
> @agentic-ai-dev Add a web search tool and a database query tool with Pydantic input validation
> @agentic-ai-dev Build an Agentic RAG system with query routing, document grading, and web search fallback
> @agentic-ai-dev Add guardrails β prompt injection detection, PII redaction, and output validation
> @agentic-ai-dev Write tests for the ReAct agent: basic invoke, tool usage, iteration limit, and error recovery
Then review your work:
> @agentic-ai-reviewer Review the agent service for graph correctness, safety, cost, and production readiness
Exercise 9: Domain-Driven Design with DDD Architect
Components used: Skill (ddd-architect) β Sub-agents (@architect, @database-designer)
Use the DDD Architect skill to decompose a complex domain into bounded contexts, aggregates, and integration patterns β then hand off to implementation agents:
> Perform a full DDD analysis for an online food delivery platform. The system handles restaurant menus, customer ordering, real-time delivery tracking, payments, ratings and reviews, and a loyalty program. Tech stack: Spring Boot microservices, Angular web, Flutter mobile, PostgreSQL, Firebase for real-time.
Claude activates the ddd-architect skill automatically and walks through strategic β tactical β technical phases. Follow up to drill deeper:
> Show me the context map with all integration patterns between Order, Delivery, and Payment contexts
> Design the Order aggregate with invariants β what rules must hold when placing, modifying, or cancelling an order?
> Which contexts should communicate via domain events vs. synchronous API calls? Justify each.
> Generate the implementation roadmap β which bounded contexts should we build first and why?
Then use the outputs to drive implementation:
> @database-designer Design the PostgreSQL schema for the Order bounded context based on the DDD tactical design
> @architect Design the event-driven integration between Order, Payment, and Delivery contexts using the context map
Exercise 10: Add a Feature End-to-End
Components used: Slash Command β all components in action
This is the real-world workflow β a single command that triggers scaffolding, skills, agents, and MCP servers working together:
> /add-feature User profile management β users can update their name, avatar, and preferences. Backend API + Angular settings page + Flutter profile screen
Exercise 11: Build an A2UI Renderer (Agent-to-User Interface)
Components used: Slash Command + Agent + Skill + MCP
A2UI is Google's declarative protocol (v0.8) that lets AI agents describe rich, interactive UIs as structured JSONL instead of generating executable code. The agent sends four message types (surfaceUpdate, dataModelUpdate, beginRendering, deleteSurface); your Angular app validates each component type against an approved catalog and renders it with native daisyUI components.
Official component types: Row, Column, Text, Image, Icon, Button, TextField, CheckBox, DateTimeInput, Card, Modal, Tabs, List. Components reference their children via {"explicitList": ["id1", "id2"]} and all text fields use typed value objects: {"literalString": "value"} or {"path": "/data/pointer"} for reactive data binding.
Scaffold with the slash command:
> /scaffold-a2ui travel-assistant
This creates a complete A2UI feature module: models (SurfaceState, A2UIMessage, A2UIAgentAction), catalog service, sanitizer, recursive renderer, agent service (REST + SSE/JSONL), chat page, routes, and tests.
Or use the specialist agent for custom work:
> @a2ui-angular Build an A2UI renderer that supports flight cards, hotel listings, and booking forms. The agent backend is at /api/travel/chat and streams via SSE as JSONL.
> @a2ui-angular Add a "table" component type (Angular extension, not in core spec) to our existing A2UI catalog and renderer. Use daisyUI table classes.
> @a2ui-angular Review our A2UI renderer for security issues β make sure all component types are validated against the catalog allowlist and property values use the literalString/path format.
Key concept: A2UI payloads are untrusted. Every component type from the agent is validated against a client-side catalog allowlist before rendering. Unknown types are silently skipped. Agent-provided code is never executed. Actions use a structured format {"name": "...", "context": [...]} β never executable strings.
Exercise 12: Build a Google ADK Agent Service
Components used: Slash Command + Agent + Skill + MCP (Context7)
Google ADK (Agent Development Kit) is Google's framework for building Gemini-powered agents. Unlike LangGraph's graph-based state machines, ADK uses composable agent primitives: SequentialAgent for pipelines, ParallelAgent for concurrent analysis, LoopAgent for iterative refinement, and transfer_to_agent for multi-agent routing. Tools are plain Python functions β no decorators needed.
Scaffold a new ADK service with the slash command:
> /scaffold-google-adk travel-agent
This creates a complete ADK project: Agent with gemini-2.5-flash, FunctionTool examples, InMemorySessionService, FastAPI /chat and /stream (SSE) endpoints, InMemoryRunner-based tests, .env template, and Dockerfile.
Or build directly with the specialist agent:
> @google-adk Build a research pipeline using SequentialAgent: researcher β writer β editor. Each agent should pass its output via output_key so the next stage can read it from session state.
> @google-adk Add a ParallelAgent that runs technical_analyst, market_analyst, and risk_analyst concurrently. Wire it into a SequentialAgent so a synthesizer receives all three analyses and produces a final report.
> @google-adk Expose the agent via FastAPI β POST /chat returns the final response, GET /stream returns SSE. Use InMemorySessionService. Close the runner in the lifespan shutdown.
> @google-adk Add a before_model_callback to enforce rate limiting (max 100 calls per session) and an on_tool_error_callback that returns a structured error dict instead of raising.
> @google-adk Write tests for the pipeline using InMemoryRunner β basic response, tool invoked, output_key passed between agents, LoopAgent exits within max_iterations, FastAPI /chat returns 200.
Key concepts:
- Tools are plain Python functions β full docstring (Args + Returns) required for schema auto-generation
ToolContextis auto-injected when typedtool_context: ToolContextβ access session state viatool_context.stateoutput_key="key"stores an agent's final output into session state; downstream agents read it as{key}ininstructionInMemoryRunnerfor tests β never call real Gemini API in unit tests- Always
await runner.close()in FastAPI lifespan shutdown to release MCP connections
Review your work:
> @agentic-ai-reviewer Review the ADK agent service for correctness, safety guardrails, and production readiness
> @security-reviewer Check tool input validation and session state handling in the ADK service
What's Next?
You've used every component in the kit β agents, skills, commands, hooks, and MCP servers. Now apply it to your own project:
- Copy the config into your project (Option B from Section 2):
cp -r .claude/ your-project/.claude/ cp CLAUDE.md your-project/ cp .mcp.json your-project/ - Trim what you don't need β remove agents, skills, and commands for stacks you don't use. See Removing Components You Don't Need in the Customization section
- Write your own CLAUDE.md β replace the tech stack, conventions, and rules with your project's. See Writing a Good CLAUDE.md for principles
- Set up credentials β copy
.env.exampleto.env, configure MCP server tokens as environment variables - Verify β run Claude Code and check that everything loads:
> /project-status > /mcp > What agents and skills are available? - Iterate β your CLAUDE.md and skills will evolve as you discover what works for your team. Treat them like living documentation β PR-reviewed and version-controlled
17. Development Workflow β Putting It All Together
You've learned each component individually. Here's how they work together across a real development lifecycle. Every phase uses the same interaction model: slash commands trigger, agents execute, skills supply knowledge, MCP servers provide ground truth, hooks guard, and rules enforce β the mix just shifts per phase.
How Components Interact

No component works alone. Slash commands without agents are just prompts. Agents without skills lose institutional knowledge. Skills without MCP servers drift to outdated patterns. Code without hooks skips safety checks.
Phase 1: Design & Architecture
Start with slash commands to establish boundaries, then iterate with agents and skills.
Slash commands set the foundation: produces DDD artifacts, Architectural diagrams, API contracts, and ADRs. Generates Database design, ERDs. These commands give you a concrete artifact to iterate on rather than vague conversation.
Agents refine the design: Challenges assumptions, identifies missing NFRs, normalizes schemas, choice of database, tech stack and proposes deployment topology. You go back and forth until the design is solid.
Skills activate silently by Claude based on context and task type and feeds the right templates and patterns into every response without you asking.
MCP servers ground designs in reality β context7 checks current tech stack and framework capabilities so your architecture doesn't depend on deprecated APIs.
Rules (always loaded) enforce behaviors across all phases: no silent failures, surface assumptions before coding, verify before claiming "done."
This is one example mix β swap components to match your team's stack and workflow.
| Component | What fires | Purpose |
|---|---|---|
| Slash commands | /design-architecture, /design-database | Produce structured artifacts |
| Agents | architect, database-designer | Iterate on design decisions |
| Skills | architecture-design, ddd-architect, database-schema-designer, openapi-spec-generation | Supply templates and patterns |
| MCP | context7 | Verify against live documentation |
Phase 2: Scaffold & Bootstrap
Slash commands generate the project skeleton to your team's standards. Slash commands like /scaffold-nestjs-api, /scaffold-angular-app, /scaffold-flutter-app β each one produces a buildable project with your design artifacts (Phase 1) and conventions baked in (folder structure, config, dependencies, sample endpoint, test). Each scaffold command delegates to a stack-specific agent backed by coding-standard skills, so the generated code follows your conventions from line one.
Hooks are already active: pre-edit-protect-sensitive.sh blocks accidental edits to lock files and credentials during setup.
Verify immediately: run the build command (mvn verify, ng build, flutter build) before moving on. Never trust scaffold output blindly.
Phase 3: Feature Development
This is where agents and skills do the heavy lifting.
Agents bring stack-specific expertise: @java-spring-api for backend endpoints, @angular-spa for UI components, @flutter-mobile for mobile screens. Each agent runs as a focused sub-task with its own context, so it doesn't consume your main conversation window. You can run multiple agents in parallel β backend and frontend simultaneously.
Skills auto-activate based on what you're touching. Edit a .dart file and flutter-mobile + riverpod-patterns kick in. Touch a Spring controller and java-spring-api + java-coding-standard apply. You don't invoke them β they just work.
MCP servers connect to external tools as needed: context7 for live docs (append use context7 to any prompt), dart-mcp-server for Flutter tooling, postgres for schema queries, github for PR creation.
Hooks run automatically on every edit: post-edit-format.sh auto-formats your code (Prettier for TS, dart format for Dart, ruff for Python), pre-bash-guard.sh blocks destructive commands before they execute.
Tip: Append
use context7to any prompt to force live documentation lookup β this prevents deprecated API usage before it happens.
Phase 4: Review & Enforce Quality
Slash commands trigger multi-agent reviews; hooks catch what slips through.
/review-code auto-detects the stack and delegates to the right reviewer (spring-reactive-reviewer, nestjs-reviewer, agentic-ai-reviewer, riverpod-reviewer). /audit-security runs security-reviewer across the scope. /status-check gives you an honest binary works/broken report β no "95% done" hedging.
Hooks run automatically and act as deterministic guardrails you never have to think about:
post-edit-format.shβ auto-formats after every editpre-bash-guard.shβ blocksrm -rf, force pushes,DROP DATABASEpre-edit-protect-sensitive.shβ blocks edits to.env, credentials, private keysstop-secret-scan.shβ scans for leaked keys at session end
Every commands and hook below is customizable β add, remove, or replace them to fit your review process.
| Trigger | What runs | Catches |
|---|---|---|
/review-code | 9 stack-specific reviewer agents | Code quality, patterns, architecture |
/audit-security | security-reviewer agent | OWASP Top 10, secrets, dependencies |
/audit-skills | Read-only skill scanner | Iron Law, staleness, description quality, line count |
| Every edit | post-edit-format.sh hook | Formatting inconsistencies |
| Every command | pre-bash-guard.sh hook | Destructive operations |
| Session end | stop-secret-scan.sh hook | Leaked secrets in git diff |
/audit-skills scans all 107 skills and outputs a PASS/WARN/FAIL report across 7 dimensions: Iron Law presence, last-reviewed staleness (WARN at 90 days, FAIL at 180), description quality, allowed-tools declaration, body line count, reference directory existence, and name/directory match. Run it monthly or after adding a batch of new skills to catch drift before it affects code generation quality.
Before Opening a PR β Two Commands, Always in This Order
These are manual β run them yourself before pushing.
/pr-risk [main..HEAD] # 1st β quantitative risk score across 5 dimensions
/review-pr # 2nd β 6-role qualitative review by specialist agents
/pr-risk runs git commands and scores the diff across: size, complexity, test coverage, dependency changes, and security-sensitive files. Output is a scored table (0β10 per factor) plus a risk level:
- π’ Low β open the PR
- π‘ Medium β fix the flagged drivers first, then open
- π High / π΄ Critical β split the PR or get a second reviewer before touching GitHub
/review-pr dispatches 6 specialist agents in parallel: comment accuracy, test coverage gaps, silent failures, type design, code quality, and unnecessary complexity. Findings are aggregated by severity β CRITICAL / IMPORTANT / SUGGESTIONS.
Run /pr-risk first. If the score is High or Critical, fix the structural issues before spending 6 agents on a review that will change anyway.
After Opening a PR β Autonomous CI + Feedback Loop
/iterate-pr # current branch PR
/iterate-pr 123 # specific PR number
/iterate-pr runs a continuous loop until all checks are green:
- Fetches review feedback and classifies it by LOGAF scale β auto-fixes
high/medium, asks you aboutlow - Polls CI via
gh; for each failure reads the actual log snippet and traces the root cause - Fixes, verifies locally, commits, pushes β restarting the CI run
- Repeats until all checks pass and no unaddressed high/medium feedback remains
It also posts reply comments on inline review threads (via GitHub GraphQL) so reviewers see what was changed.
Trigger naturally: Say "fix the CI failures" or "address the review comments" β Claude auto-activates the skill without the slash command.
When not to use: Before a PR exists (use /pr-risk + /review-pr first), or when failures are infrastructure-level flakiness that code changes can't fix.
Phase 5: Evolve Your Setup
Over time, customize everything based on what you learn.
- Add skills when you see recurring patterns Claude keeps getting wrong
- Add agents when a domain needs specialized expertise beyond what existing agents cover
- Add slash commands for workflows your team repeats often
- Add hooks for rules that must be enforced deterministically (no human memory required)
- Remove components you don't use β fewer MCP servers and skills means more context budget for actual work
The setup is a living product. Treat it like code: version-controlled, PR-reviewed, continuously improved.
17a. AI-DLC β Full Development Lifecycle Workflow (Optional)
Credit: Adapted from awslabs/aidlc-workflows by AWS Labs β an open-source AI-assisted development methodology originally built for Amazon Q Developer, Cursor, Cline, and Kiro IDE.
For non-trivial features, /aidlc gives Claude a structured, approval-gated development lifecycle instead of jumping straight to code.
> /aidlc
How It Works
AI-DLC runs three phases β Inception (plan), Construction (build), Operations (future):
Inception gathers requirements, writes user stories, and plans which stages to run. Construction works through each unit of work: functional design β NFR requirements β infrastructure design β code generation. Every phase ends with an explicit approval gate β Claude won't advance until you confirm.
The workflow is adaptive: a simple bug fix skips most stages and goes straight to code. A new multi-service feature runs the full lifecycle. Claude proposes the execution plan at the Workflow Planning gate and you can override any stage.
An append-only aidlc-docs/audit.md logs every interaction verbatim with ISO timestamps. aidlc-docs/aidlc-state.md tracks stage progress so sessions resume exactly where they left off.
How It Fits With This Kit
/aidlc doesn't replace skills, agents, or rules β it orchestrates on top of them. CLAUDE.md project constraints always win. During Construction, the same stack agents and skills this kit ships with are activated per stage β architect for design, security-reviewer for NFR, the appropriate stack agent (flutter-mobile, nestjs-api, etc.) for code generation.
Two opt-in extensions ship in .aidlc-rule-details/extensions/:
- security/baseline β enforces security constraints at every construction stage
- testing/property-based β adds property-based testing patterns to code generation
Full reference: docs/workflows/aidlc.md
18. Security Considerations
Before using Claude Code with real projects, understand the security boundaries.
What Goes to Anthropic's API
Every prompt, file content pulled via @file references, and tool outputs are sent to Anthropic's API for processing. This means:
- Never paste real API keys, passwords, or tokens into prompts β they'll be transmitted to Anthropic's servers
- Be cautious with
@filereferences to sensitive files β the file contents are sent as part of the prompt - Tool outputs (Bash, Read, etc.) are included in context β if a command outputs secrets, they're sent too
MCP Server Credentials
MCP servers like postgres and github require connection strings or tokens. Handle these safely:
# β
GOOD β credentials from environment variables
# .mcp.json
"args": ["${POSTGRES_CONNECTION_STRING}"]
# β BAD β credentials hardcoded in .mcp.json
"args": ["postgresql://admin:password123@localhost:5432/mydb"]
Always use environment variable references (${VAR_NAME}) in .mcp.json β never hardcode credentials.
The --dangerously-skip-permissions Flag
This flag disables all permission prompts. Rules for safe usage:
| Environment | Safe to Use? | Why |
|---|---|---|
| Local dev, throwaway project | β Yes | Low risk, easy to reset |
| Local dev, real project | β οΈ Caution | Claude can modify/delete files without asking |
| CI/CD pipeline | β No | Automated environment with real credentials and deployment access |
| Shared/team machine | β No | Other users' files and credentials may be accessible |
Pre-configured Guardrails in This Kit
This repo includes Claude Code hooks (.claude/hooks/) and a git pre-commit hook (.git/hooks/pre-commit) that enforce security automatically:
Claude Code hooks β fire on Claude Code lifecycle events:
| Hook | Event | What It Prevents |
|---|---|---|
pre-bash-guard.sh | PreToolUse | rm -rf /, force-push to main, DROP DATABASE, piping curl to shell |
pre-edit-protect-sensitive.sh | PreToolUse | Direct edits to .env, private keys, credentials, lock files |
pre-prompt-injection.sh | PreToolUse | Role-override attacks, jailbreaks, delimiter injection, authority impersonation, encoded payloads in Bash commands |
pre-unicode-injection.sh | PreToolUse | Zero-width characters, RTL overrides, ANSI escapes, null bytes hidden in file edits (CVE-2025-53109/53110) |
session-claudemd-scan.sh | SessionStart | Injection patterns in CLAUDE.md / .claude/*.md files loaded at session start |
stop-secret-scan.sh | Stop | Warns if changed files contain AWS/GCP/GitHub/Stripe/Anthropic API key patterns |
stop-blackbox-log.sh | Stop | Appends session decisions and changed files to blackbox/session-log.md for accountability |
post-edit-format.sh | PostToolUse | Not security-related, but auto-formats to prevent malformed code commits |
Git pre-commit hook β fires on every git commit, before the commit is created:
| Hook | Location | What It Prevents |
|---|---|---|
pre-commit | .git/hooks/pre-commit | Blocks commits containing 15 secret patterns: OpenAI/Anthropic API keys, GitHub tokens, AWS access keys, Firebase/GCP credentials, database URLs with passwords, private key blocks, JWTs, generic api_key/secret/token assignments |
pre-commit-evaluator.sh | git-hooks/pre-commit-evaluator.sh | Claude haiku scores staged diff on 4 dimensions (correctness, completeness, safety, scope). Blocks commit if overall score < threshold. Opt-in: CLAUDE_PRECOMMIT_EVAL=1. Threshold: CLAUDE_PRECOMMIT_THRESHOLD (default 7/10). |
The git hook is the last line of defence before secrets enter git history. It complements stop-secret-scan.sh (which catches secrets in Claude's output) by catching secrets in your own edits.
# Install (one-time, after cloning):
cp git-hooks/pre-commit-secrets.sh .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
# The hook then runs automatically on every git commit.
# To bypass in an emergency (use with caution):
git commit --no-verify
# To add a false-positive to the allowlist, edit the WHITELIST array in:
git-hooks/pre-commit-secrets.sh # source (committed)
.git/hooks/pre-commit # active copy (re-copy after editing)
These hooks are defense-in-depth β they catch mistakes but aren't a substitute for proper secret management. Always use a secrets manager (AWS Secrets Manager, HashiCorp Vault, 1Password CLI) for production credentials.
Security Superpowers β AI-Assisted Security Tooling
Beyond the passive guardrails above, this kit ships dedicated security commands, a threat-modeling agent, and SAST skills β adapted from claude-skill-samples/security/ and tailored to the onboarding stack (Java/Spring, NestJS, Python, Angular, Flutter):
| Tool | Invoke | What It Does |
|---|---|---|
/security-hardening [scope] | Command | Full-stack orchestration: SAST β threat model β architecture review β fix β hardening β validation |
/security-sast [path] | Command | SAST across all stack languages (Bandit, Semgrep, ESLint Security, SpotBugs, dart analyze). Risk score 0β100. |
/security-dependencies [path] | Command | CVE scan across npm / pip / Maven / pub.dev. Priority score per CVE. CycloneDX SBOM output. |
/xss-scan [path] | Command | Angular-specific XSS: bypassSecurityTrust*, [innerHTML], ElementRef.nativeElement. Fix patterns included. |
/audit-security [scope] | Command | Full audit β now includes dependency scan as Step 5. |
@threat-modeling-expert | Agent | STRIDE analysis, DFD review, attack trees, risk scoring. Call before designing any new service. |
threat-modeling skill | Skill | Lazy-loaded STRIDE methodology + control library. Auto-loads references on demand. |
sast-configuration skill | Skill | Lazy-loaded SAST tool config, Semgrep rules, CI/CD integration. |
Typical security workflow:
| Phase | Action |
|---|---|
| Before design | @threat-modeling-expert β STRIDE the new feature |
| After coding | /security-sast src/ β catch code-level vulns |
| After coding | /security-dependencies . β catch CVEs in packages |
| Before release | /audit-security β full audit (includes dep scan) |
| Failing audit | /security-hardening β orchestrated remediation |
Checklist Before Using Claude Code on a Real Project
- No real secrets in
.mcp.jsonβ all use${ENV_VAR}references -
.envfiles are in.gitignore -
settings.jsondenies access to credential files (pre-configured in this kit) - Team members understand what gets sent to Anthropic's API
- CI/CD pipelines do NOT use
--dangerously-skip-permissions - Hook scripts are executable (
chmod +x .claude/hooks/*.sh)
19. CI/CD Automation β Deployment Engineer Agent
The deployment-engineer agent generates production-ready GitHub Actions pipelines for every service in this stack. It knows your exact tech versions, branching model (feature/* β develop β main), and pipeline architecture β no generic templates.
Triggers automatically when you mention CI/CD, Docker builds, Cloud Run, Flutter builds, or Firebase deployments. Or invoke directly with @deployment-engineer.
What it covers
| Service | Pipeline it generates |
|---|---|
| NestJS (Node.js 24.14) | npm cache β lint/test β Docker build β Trivy scan β Prisma migrate β Cloud Run staging/prod |
| Python FastAPI | uv cache β test β Docker build β Trivy scan β Alembic migrate β Cloud Run |
| LangChain / LangGraph | Same as Python + Cloud Run --memory=4Gi --timeout=300 --concurrency=1 |
| Spring Boot | Maven cache β test β Buildpacks image β Cloud Run with --cpu-boost |
| Flutter | Flutter SDK cache β analyze/test β APK + IPA β Firebase App Distribution (QA) / Fastlane (prod) |
| Angular | npm cache β build β Firebase Hosting deploy |
| Firestore | firebase deploy --only firestore:rules,firestore:indexes |
All pipelines include: Docker layer caching (~60% faster builds), Trivy CVE scanning (hard-fail on CRITICAL), Workload Identity Federation (no JSON keys in secrets), health check post-deploy, and production approval gate.
Example prompts
Set up GitHub Actions CI/CD for our NestJS payments service to deploy to Cloud Run
Create a Flutter build pipeline β APK to QA via Firebase App Distribution on develop merge
Add Trivy vulnerability scanning to our Python API Docker build
Configure Cloud Run for our LangGraph agent with correct memory and timeout settings
Set up Prisma migrate deploy as a step before NestJS Cloud Run revision goes live
Automate Firestore security rules deployment on every merge to develop
Configure Workload Identity Federation β remove the JSON service account key from our secrets
Your pipeline at a glance
PR merged to develop
βββ Flutter: test β APK build β Firebase App Distribution (QA team notified)
βββ Python API: Docker build β Trivy scan β Cloud Run staging
βββ NestJS API: Docker build β Trivy scan β Cloud Run staging
βββ Firestore: rules + indexes β Firebase staging project
QA signs off β merge develop to main
βββ Flutter: APK + IPA β Google Play / App Store (Fastlane)
βββ Python API: Cloud Run production β approval gate
βββ NestJS API: Cloud Run production β approval gate
βββ Spring Boot: Cloud Run production β approval gate
βββ Firestore: Firebase production project
19b. GCP Infrastructure β Terraform Specialist Agent
The terraform-specialist agent provisions and manages all GCP infrastructure as code. It handles what the deployment-engineer doesn't β creating the platform your services run on.
Rule of thumb: terraform-specialist runs once (or when infra changes). deployment-engineer runs on every merge.
terraform-specialist deployment-engineer
βββββββββββββββββββββββββββββββββββββββββββββββββ
Creates Cloud Run service β Deploys image to it
Creates Artifact Registry β Pushes Docker images
Creates Secret Manager β Reads secrets at runtime
Sets up Workload Identity β Uses it in CI pipeline
Runs rarely Runs on every PR merge
What it provisions for your stack
| Resource | Terraform resource |
|---|---|
| Cloud Run services (NestJS, Python, Spring, AI agent) | google_cloud_run_v2_service |
| Artifact Registry (Docker images) | google_artifact_registry_repository |
| Cloud SQL PostgreSQL 15 | google_sql_database_instance |
| Secret Manager (API keys, DB URLs) | google_secret_manager_secret |
| Workload Identity (keyless GitHub Actions auth) | google_iam_workload_identity_pool |
| GCS bucket (Terraform remote state) | google_storage_bucket |
| Firebase project | google_firebase_project |
Example prompts
Provision complete GCP infra for our project β Cloud Run services, Artifact Registry,
Cloud SQL, Secret Manager, Workload Identity, GCS state bucket, staging + prod tfvars
Create a reusable Terraform module for Cloud Run used by all our services
Set up Workload Identity Federation so GitHub Actions deploys without JSON keys
Configure Cloud Run for our LangGraph agent with 4Gi memory and 300s timeout
Import our existing Cloud Run services into Terraform state management
Add tfsec and Checkov security scanning to our Terraform CI pipeline
The only workflow you need
terraform init
terraform workspace new staging # or: select staging
terraform plan -var-file=staging.tfvars # always review before apply
terraform apply -var-file=staging.tfvars
If
planshows# will be destroyedon Cloud SQL or Cloud Run β stop and ask the agent why before applying.
20. Customizing the Kit
This kit is a starting point β customize it for your team's stack and workflows.
Adding a New Agent
Create a file in .claude/agents/ with YAML frontmatter:
---
name: my-agent
description: One-line description of when to use this agent. Claude reads this to decide when to activate it.
model: sonnet
tools: Bash, Read, Write, Edit, Glob, Grep
skills:
- my-related-skill
---
# My Agent Name
You are a [role] specializing in [domain].
## Your Responsibilities
1. First responsibility
2. Second responsibility
## How to Work
1. Read the `my-related-skill` skill before writing code
2. Follow [specific conventions]
## Key Rules
- Rule 1
- Rule 2
Usage: @my-agent Do something specific
Adding a New Slash Command
Create a file in .claude/commands/ with YAML frontmatter:
---
description: What this command does (shown in /help)
argument-hint: "[parameter description]"
allowed-tools: Bash, Read, Write, Edit
---
# Command Title
**Input:** $ARGUMENTS
## Steps
1. First step β explain what to do
2. Second step β reference skills or agents if needed
3. Final step β verify and report
Use the `my-skill` skill for patterns and templates.
Usage: /my-command some argument here
Key notes:
$ARGUMENTSis replaced with whatever the user types after the command nameargument-hintshows up in autocomplete to guide the userallowed-toolsrestricts which tools the command can use- Add
disable-model-invocation: trueto prevent the command from using sub-agents
Adding a New Skill
Create a directory in .claude/skills/ with a SKILL.md file:
.claude/skills/my-skill/
βββ SKILL.md # Entry point (keep under 5KB)
βββ reference/ # Detailed docs loaded on-demand
βββ templates.md # Code templates
βββ patterns.md # Design patterns
βββ troubleshooting.md # Common issues and fixes
SKILL.md structure:
---
name: my-skill
description: |
Use this skill when the user asks about [domain].
Triggers: [list of keywords or contexts that activate this skill].
---
# My Skill
## Overview
What this skill covers and when it applies.
## Quick Reference
| Task | Pattern |
|------|---------|
| Common task 1 | Brief pattern |
| Common task 2 | Brief pattern |
## Detailed References
When working on [specific task]:
β Read `reference/templates.md` for code templates
When troubleshooting:
β Read `reference/troubleshooting.md`
Key notes:
- Keep
SKILL.mdunder 5KB β it loads into context when activated - Put detailed content in
reference/files β they load on-demand, saving tokens - The
descriptionfield is critical β Claude uses it to decide when to activate the skill - Skills activate automatically based on context. Users don't invoke them directly
Adding a New Hook
- Create the script in
.claude/hooks/:
#!/usr/bin/env bash
# Brief description of what this hook does
set -uo pipefail
# Read tool input from stdin
input=$(cat)
file=$(echo "$input" | jq -r '.tool_input.file_path // .tool_input.path // ""' 2>/dev/null) || file=""
# Your logic here
# Exit 0 = allow/pass, Exit 2 = block (message via stderr)
exit 0
- Make it executable:
chmod +x .claude/hooks/my-hook.sh
- Register it in
.claude/settings.json:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "$CLAUDE_PROJECT_DIR/.claude/hooks/my-hook.sh",
"timeout": 10
}
]
}
]
}
}
Hook events and matchers:
| Event | Matcher | Use Case |
|---|---|---|
PreToolUse | Bash, Write, Edit, WebFetch | Block dangerous operations before they happen |
PostToolUse | Write, Edit | Auto-format, lint, or validate after changes |
Stop | (no matcher) | Run tests, scan for secrets when Claude finishes |
UserPromptSubmit | (no matcher) | Enrich or validate user prompts before processing |
Removing Components You Don't Need
If your team doesn't use a particular stack, remove the corresponding files to reduce noise:
# Example: Remove Flutter-related components if you don't use Flutter
rm .claude/agents/flutter-mobile.md
rm .claude/agents/flutter-security-expert.md
rm .claude/agents/riverpod-reviewer.md
rm .claude/agents/accessibility-auditor.md
rm .claude/agents/ui-standards-expert.md
rm -rf .claude/skills/flutter-mobile/
rm -rf .claude/skills/riverpod-patterns/
rm -rf .claude/skills/ui-standards-tokens/
rm .claude/commands/scaffold-flutter-app.md
# Update CLAUDE.md to remove Flutter references from the tech stack table
Also disable unused MCP servers in .mcp.json by setting "disabled": true.
Version Update Guide
When a framework releases a new major version, update these files:
| To Update... | Edit These Files |
|---|---|
| Angular version | CLAUDE.md (tech stack), .claude/skills/angular-spa/SKILL.md, .claude/agents/angular-spa.md |
| Spring Boot version | CLAUDE.md, .claude/skills/java-spring-api/SKILL.md, .claude/agents/java-spring-api.md |
| NestJS version | CLAUDE.md, .claude/skills/nestjs-api/SKILL.md, .claude/agents/nestjs-api.md |
| Flutter/Dart version | CLAUDE.md, .claude/skills/flutter-mobile/SKILL.md, .claude/agents/flutter-mobile.md |
| Python version | CLAUDE.md, .claude/skills/python-dev/SKILL.md, .claude/agents/python-dev.md |
| LangChain/LangGraph | CLAUDE.md, .claude/skills/agentic-ai-dev/SKILL.md, .claude/agents/agentic-ai-dev.md |
Process:
- Update version numbers in the files above
- Update any changed API patterns in skill
reference/files - Test with a scaffold command to verify the generated code compiles
- Commit as
docs: update [framework] to vX.Y
20. Claude Code Power Features
Keyboard Shortcuts (Inside Claude Code)
| Shortcut | Action |
|---|---|
/help | Show all available commands |
/clear | Clear conversation context |
/compact | Manually trigger context compaction |
/rewind | Go back to a previous state |
/checkpoints | File-level undo points |
/exit | Exit Claude Code |
/agents | List / create agents |
/mcp | Check MCP server status |
! | Quick bash command prefix |
@ | Search for files |
Tab | Toggle thinking display |
Shift+Enter | Multi-line input |
Ctrl+U | Delete entire line (faster than backspace) |
Esc | Cancel current generation |
Esc Esc | Interrupt Claude / restore code |
/context | View context usage as a colored grid |
/cost | Show token usage statistics |
/stats | Usage stats with date range (7/30/all-time) |
/usage | View plan limits and usage |
/model | Switch between models |
/plan | Enter plan mode (Opus plans, Sonnet executes) |
/rename <name> | Name the current session |
/resume <name> | Resume a previous session by name or ID |
/review | Request code review |
/doctor | Run diagnostics |
Essential CLI Flags
| Flag | What It Does | Example |
|---|---|---|
claude | Start interactive session | claude |
claude --dangerously-skip-permissions | Skip all permission prompts β οΈ use with caution | For trusted CI environments only |
claude --continue | Continue last session | claude --continue |
claude --resume | Resume a specific session by ID or name | claude --resume auth-refactor |
claude --model <name> | Use a specific model | claude --model opus |
claude --output-format json | JSON output (useful for CI/CD pipelines) | claude -p "run tests" --output-format json |
claude --add-dir <path> | Add extra working directories | claude --add-dir ../frontend ../shared |
claude --debug | Enable debug logging | claude --debug "api,mcp" |
Core Tools
These are the built-in tools Claude Code can use during a session:
| Tool | Purpose | Needs Permission |
|---|---|---|
| Read | Read files, images, PDFs | No |
| Write | Create new files | Yes |
| Edit | Modify existing files via exact string replacement | Yes |
| Bash | Execute shell commands | Yes |
| Grep | Search content with regex (ripgrep) | No |
| Glob | Find files by pattern | No |
| Task | Launch sub-agents | No |
| TodoWrite | Track multi-step task progress | No |
| WebFetch | Fetch and read web pages | Yes |
| WebSearch | Search the web | Yes |
| LSP | Go-to-definition, find references, hover docs | No |
| NotebookRead | Read Jupyter notebooks | No |
| NotebookEdit | Edit Jupyter notebooks | Yes |
Permission Model
Claude Code uses an allow / deny / ask system. Common safe commands run without asking, sensitive files are blocked entirely, and everything else asks for confirmation.
Configure in .claude/settings.json:
{
"permissions": {
"allow": [
"Bash(npm *)",
"Bash(git status *)",
"Bash(git diff *)"
],
"ask": [
"Bash(rm *)",
"Bash(curl *)"
],
"deny": [
"Bash(sudo *)",
"Bash(rm -rf /)",
"Read(./.env)",
"Read(./**/*.key)"
]
}
}
Permission rule patterns:
| Pattern | Example | Description |
|---|---|---|
| Exact match | Bash(npm run test) | Only this exact command |
| Wildcard suffix | Bash(npm *) | npm followed by anything |
| Glob patterns | Read(./src/**/*.ts) | All .ts files recursively |
| Tool-only | Read, Write, Edit, Bash, WebFetch, WebSearch | Entire tool category |
This repo's settings.json comes pre-configured with sensible defaults β see Settings Configuration in Section 10 for the full breakdown.
21. Tips & Best Practices
Prompting Best Practices
- Be specific β The more context you give Claude, the better the output:
| β Vague | β Specific |
|---|---|
| "Add tests" | "Write Jest tests for src/utils/date.ts covering formatDate with valid dates, invalid inputs, and timezone handling" |
| "Fix the bug" | "Login fails when email contains +. Fix src/auth/validate.ts:23 to handle plus signs in email addresses" |
| "Review this" | "Review src/api/users.ts for N+1 queries, missing error handling, and SQL injection risks" |
| "Make it faster" | "Profile the /api/products endpoint. Identify the slowest operation. Target: < 100ms response" |
| "Add auth" | "Add JWT auth to the Express API: login/register endpoints, middleware for protected routes, refresh tokens with 7-day expiry" |
-
Use agents for focused work β
@java-spring-apigives you a specialized backend expert instead of a generalist -
Append
use context7to any prompt when you need current library docs β it fetches live documentation and prevents hallucinated APIs -
Resume sessions β
claude -ccontinues your last conversation,claude --resumelets you pick from recent sessions -
Chain commands in one prompt β combine slash commands and natural language:
/scaffold-spring-api order-service then @java-spring-api add CRUD for Orders with items, totals, and status
Common Pitfalls β Avoid These
These mistakes are common among new Claude Code users and waste significant time:
| β Pitfall | Why It's Bad | β Instead |
|---|---|---|
| Enable all 12 MCP servers at once | Each server's tool schemas consume context tokens. 12 servers can eat 50K+ tokens before you type anything | Enable only the 3β4 servers relevant to your current task. Disable unused ones in .mcp.json using "disabled": true |
| Paste entire files into the prompt | Files are transmitted as prompt tokens β a 500-line file wastes context | Use @src/path/to/file.ts references instead |
Skip /compact in long sessions | Context fills up silently. Claude's output quality degrades before you notice | Run /compact every ~30β50 tool operations, or when you switch tasks |
| Ask Claude to "review everything" | Unbounded scope β shallow, generic feedback | Be specific: "Review src/auth/ for SQL injection and missing input validation" |
| Trust the first scaffold output blindly | Generated code may use outdated APIs or miss project-specific conventions | Always run the build command (ng build, mvn verify, npm run build) after scaffolding |
| Use the same Claude session for unrelated tasks | Context from task A pollutes task B, causing confusion | Start a fresh session (/exit β claude) for unrelated work, or use /clear |
| Ignore the "Context remaining" warnings | Once context is exhausted, Claude can't process new information effectively | Watch /context and compact or start fresh before hitting limits |
@ File References
Reference files directly in prompts with @ β Claude reads them into context automatically, which is more token-efficient than reading entire directories:
> Review @src/auth/login.ts for security issues
> Compare @src/api/v1/users.ts and @src/api/v2/users.ts β what changed?
> Generate tests for @src/utils/validator.ts
> This bug is in @src/services/auth.ts, check @logs/error.log for clues
Works in both regular prompts and slash command arguments. Reduces token usage compared to reading entire directories.
Context Window Management
Sonnet 4.6 and Opus 4.6 have a 1M token context window with automatic compaction (GA 2026-03-13, no long-context premium). Mismanaging context still degrades performance and output quality β a larger window just moves the problem further out.
| Problem | Impact | Fix |
|---|---|---|
| Too many MCPs enabled | Each MCP's tool definitions eat context before you even start. 20+ MCPs can cut usable context significantly | Keep MCPs in config but disable unused ones β enable β€ 10 servers / β€ 80 tools at a time |
| Too many plugins active | Same issue β each plugin adds tool definitions | Install many, enable only 4β5 per project |
| Long sessions without compacting | Context fills up, Claude loses track of earlier work | Use /compact to manually trigger compaction, or let auto-compact handle it |
| Oversized CLAUDE.md | Goes into every prompt, crowding out actual task context | Keep < 300 lines or <40 KB, use progressive disclosure |
Three principles for long sessions:
| Principle | Rule |
|---|---|
| Tokens-per-task | Optimize total tokens for the whole task, not per-request. Losing a file path or decision costs more to re-fetch than it saved to compress. |
| Degradation threshold | Onset at ~700K tokens (70% of 1M). Signs: repeating earlier steps, forgetting which files were modified, losing track of decisions. Begin compression here. |
| Structured summary | Before /compact or sub-agent handoff, produce the 6-section template: Session Intent β Files Modified β Decisions Made β Current State β Next Steps. Prose summaries silently drop file paths and decisions; structure forces preservation. |
Full rules in
.claude/rules/leverage-patterns.md Β§Context Window Management
Check your current state anytime:
> /mcp # MCP status and tool count
> /plugins # Enabled plugins
> /statusline # Context remaining %
> /context # Context usage as a colored grid
> /cost # Token usage statistics
Parallel Workflows
Don't queue tasks β run them simultaneously:
| Technique | When to Use | How |
|---|---|---|
| Sub-agents | Independent subtasks within one session | Claude spawns multiple @agents that run in parallel with isolated context |
| /fork | Non-overlapping tasks in the same repo | Branches the conversation β each fork works independently |
| Git worktrees | Overlapping tasks that touch the same files | Each worktree is an independent checkout with its own Claude instance |
| tmux | Long-running commands (servers, test suites) | Claude runs in a tmux session you can detach and reattach |
Note sub-agents iscommonly used light-weight parallelism option β no git setup or terminal multiplexing needed, just spawn agents within the same session.
# Sub-agents β parallel specialists in one session
> @java-spring-api Build the auth endpoints
> @angular-spa Build the login page
> @database-designer Design the user schema
# Claude can run these concurrently without context collision
# /fork β branch the conversation
> /fork
# Fork 1: Add payment processing
# Fork 2: Add email notifications
# Each fork works independently in the same repo
# Git worktrees β parallel Claudes without conflicts
git worktree add ../feature-auth feature/auth
git worktree add ../feature-dashboard feature/dashboard
# Run separate `claude` instances in each directory
# tmux β monitor long-running tasks
tmux new -s dev
# Detach: Ctrl+B, D | Reattach: tmux attach -t dev
Team Collaboration Patterns
When multiple developers use Claude Code on the same codebase:
Shared vs Personal Configuration
| File | Git Tracked? | Shared With Team? | Purpose |
|---|---|---|---|
CLAUDE.md | β Yes | β Yes | Project conventions everyone follows |
CLAUDE.local.md | β No (auto-gitignored) | β No | Personal preferences (model, verbosity, shortcuts) |
.claude/settings.json | β Yes | β Yes | Shared permissions, hooks |
.claude/settings.local.json | β No | β No | Personal permission overrides |
.mcp.json | β Yes | β Yes | MCP server configurations |
.env | β No (gitignored) | β No | Personal API keys and credentials |
Branch Collision Prevention
When two developers use Claude Code simultaneously on the same repo:
# Each developer works on their own feature branch
git checkout -b feature/alice-auth
git checkout -b feature/bob-dashboard
# For tasks that touch the same files, use git worktrees
git worktree add ../project-auth feature/alice-auth
git worktree add ../project-dashboard feature/bob-dashboard
# Run separate Claude Code instances in each worktree
Standardizing Team CLAUDE.md
To keep the team aligned:
- Project-level
CLAUDE.mdβ committed to git, contains stack info, conventions, commands. PR-reviewed like any other code change - Personal
CLAUDE.local.mdβ each developer's preferences (model choice, verbosity, personal shortcuts). Never committed - Rules directory
.claude/rules/β committed to git. Breaking rules into files allows teams to own different areas (frontend team ownsangular-rules.md, backend team ownsspring-rules.md)
Onboarding a New Team Member
# 1. Clone the repo (CLAUDE.md, agents, skills, commands come with it)
git clone <repo-url> && cd <repo>
# 2. Copy the .env template and fill in personal credentials
cp .env.example .env
# Edit .env with your API keys
# 3. Make hooks executable
chmod +x .claude/hooks/*.sh
# 4. Start Claude Code and run the status check
claude
> /project-status
# 5. Try a scaffold exercise to verify everything works
> /scaffold-spring-api hello-world
Plugins Ecosystem
Beyond Claude-Mem, there's a growing plugin ecosystem. Plugins bundle tools, skills, agents, hooks, or MCP integrations for easy install.
# Install a plugin marketplace
> /plugin marketplace add <github-user/repo>
# Browse and install from /plugins menu
> /plugins
Sample plugins:
| Plugin | What It Does |
|---|---|
typescript-lsp | Real-time type checking + go-to-definition without an IDE |
hookify | Create hooks by describing them in natural language |
context7 | Live documentation for any library |
β οΈ Same context warning as MCPs β each enabled plugin adds tool definitions. Install many, enable few.
Skills β Best Practices
Keep skills lean:
- Target 3β5KB for the SKILL.md file
- If your skill exceeds 10KB, you're probably embedding too much documentation
Use lazy loading for large skills: Instead of embedding all documentation in SKILL.md, put detailed references in separate files and load them on-demand:
.claude/skills/my-skill/
βββ SKILL.md # 3KB β routing logic only
βββ reference/
βββ use_case_1.md # Loaded when needed
βββ use_case_2.md # Loaded when needed
βββ use_case_3.md # Loaded when needed
In your SKILL.md, instruct Claude to load the right reference:
**When user asks about use case 1:**
β Read reference/use_case_1.md, then proceed
This can reduce token usage by 80β95% for complex skills.
SKILL.md frontmatter:
---
name: my-skill # Required: hyphen-case, max 64 chars
description: | # Required: when to activate (max 1024 chars)
This skill should be used when the user asks to...
allowed-tools: Read, Bash(npm:*) # Optional: restrict available tools
---
Writing a Good CLAUDE.md
Your CLAUDE.md is the highest-leverage file in the entire setup β it goes into every session and shapes every task. A bad line here gets into every plan, every implementation, every artifact Claude produces. Invest time crafting it carefully.
The Basics: WHAT β WHY β HOW
| Tell Claude... | Example |
|---|---|
| WHAT β your project context, tech stack, rules, project structure | "Monorepo: apps/api (Spring Boot), apps/web (Angular), packages/shared" |
| WHY β the purpose of each part | "The auth + gateway service handles auth + rate-limiting for all downstream APIs" |
| HOW β how to work on the project | "Use bun not npm. Run tests with mvn test. Flyway migrations live in db/migrations/" |
Key Principles
| Principle | Why It Matters |
|---|---|
| Less is more | LLMs can reliably follow ~150β200 instructions. Claude Code's system prompt already uses ~50 of those. Every line you add competes for attention β keep only what's universally applicable. |
| Claude may ignore irrelevant content | Claude Code wraps your CLAUDE.md in a system reminder saying "this may or may not be relevant." If your file is full of niche instructions, Claude is more likely to skip all of them β not just the niche ones. |
| Progressive disclosure | Don't dump everything into CLAUDE.md. Keep domain-specific docs in separate files and reference them so Claude reads them only when needed (see example below). |
| Don't use it as a linter | Never send an LLM to do a linter's job. Use deterministic tools (ruff, Biome, ESLint) via Hooks instead. Style guidelines bloat your context and degrade instruction-following. |
| Prefer pointers over copies | Don't paste code snippets β they go stale. Point to file:line references so Claude reads the actual source of truth. |
| Craft it by hand | /init auto-generates a CLAUDE.md but includes too much irrelevant content. Use it as a starting point, then trim aggressively. |
Progressive Disclosure Example
Instead of a 500-line CLAUDE.md, keep it short and point to detail docs:
# CLAUDE.md
## Project
E-commerce platform β Spring Boot API + Angular SPA + Flutter mobile.
## Key Docs (read the relevant ones before starting a task)
- `docs/building.md` β how to build, run, and deploy each service
- `docs/testing.md` β test commands, fixtures, CI expectations
- `docs/database.md` β schema overview, migration workflow
- `docs/api-contracts.md` β OpenAPI specs and versioning rules
- `docs/code-conventions.md` β naming, structure, PR standards
## Universal Rules
- All code must pass `mvn verify` before committing
- Use conventional commits: feat|fix|docs|refactor(scope): message
- Never commit secrets or .env files
Quick Rules of Thumb
- < 300 lines or <40 KB is the general rule, shorter is better (some teams use < 60 lines)
- Most important rules go at the top and bottom β LLMs attend most to the start and end of context
- Use
CLAUDE.local.mdfor personal preferences (auto-gitignored) - Use
.claude/rules/for conditional rules scoped to specific directories
When Claude Ignores Its Rules
The Hard Truth: Why CLAUDE.md Isn't Enough
CLAUDE.md and .claude/rules/ tell Claude how to behave β but they're guidance, not enforcement. Three deeply baked in biases from training cause Claude to break its own rules:
| Bias | What Happens | Example |
|---|---|---|
| Path of least resistance | Creates new files is simpler instead of understanding existing code | Adds utils-v2.ts instead of modifying utils.ts |
| Safety instinct | Return something rather than fail. So it returns empty/mock data instead of failing visibly | catch (e) { return []; } instead of rethrowing |
| Optimism bias | LLMs want to seem helpful/complete | Says "done" when 2 of 5 items are implemented |
The fix: CLAUDE.md is prevention. The prompts below are treatment β copy-paste them when Claude misbehaves.
Start-of-Task Prompt
Paste this at the beginning of any non-trivial task to set expectations:
Before you start, confirm you understand:
1. VERIFY before claiming β read actual code, show file:line evidence
2. No flip-flopping β if you say "missing", verify first, don't change when I push back
3. Implement 100% of the plan β no skipping items
4. Modify existing files β don't create new ones without approval
5. No mock data, no silent errors β failures must be visible
6. Binary status: works or broken β no "95% done"
Say "understood" then proceed.
When Claude Guesses Instead of Verifying
Problem
You ask: "What's implemented so far?"
Claude says: "Auth service is done, payment module is missing"
You check: Auth service has no validations and no tests, payment module exists at src/payments/
WHY? Claude saw auth-service.ts and assumed it was complete.
It didn't see payments/ because it never opened the directory β it guessed from memory.
Solution: Paste below prompt
Before you tell me what's missing or implemented:
1. Actually READ the code files
2. For each claim, show file:line as evidence
3. Don't guess based on file names
If you can't point to specific code, say "I haven't verified this yet."
When Claude Flip-Flops
Problem
Claude says: "Feature X is missing"
You ask: "Are you sure?"
Claude says: "Actually it IS implemented!"
WHY? Claude didn't actually check. It guessed, then agreed with you to avoid conflict.
Solution: Paste below prompt
STOP. You just flip-flopped.
First you said [X] was missing. Now you say it's implemented.
Which is it? Show me:
1. The exact file and line number
2. The actual code snippet
Don't guess. Don't agree with me to avoid conflict. VERIFY and show evidence.
When Challenging Claude's Analysis
Problem
Claude says: "The validation logic is missing"
You say: "I'm pretty sure it's there"
Claude says: "You're right, it is there!"
WHY? Claude wants to avoid conflict. Instead of re-reading the code,
it just agrees with whatever you say β even if its original claim was correct.
Solution: Paste below prompt
You said [X] is missing. Are you sure?
Don't just agree with me β RE-VERIFY by reading the actual code.
Show me the file you checked and what you found or didn't find.
22. Troubleshooting
command not found: claude
Your shell can't find the Claude binary. Add it to your PATH:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
"Context too large" error
> /compact # Quick reset
> /compact "keep the auth work" # Preserves specified context
Prevention: use /compact every ~50 operations in long sessions, or start a fresh session for new features.
Edit tool fails with "string not found"
Claude's Edit tool requires an exact string match including whitespace and indentation. Fix:
> Read the file again to see exact content
If the string appears multiple times, provide more surrounding context for uniqueness.
MCP server not connecting
Run /mcp to check status.
> /mcp
Check the status output. Common fixes:
- Ensure
npxis available (requires Node.js) - For GitHub MCP, set your token:
export GITHUB_PERSONAL_ACCESS_TOKEN=ghp_your_token - Restart Claude Code after changing
.mcp.json - On Windows, MCP servers need a
cmdwrapper:"command": "cmd", "args": ["/c", "npx", "-y", "package-name"]
Claude isn't using skills or agents
- Verify the files exist:
ls .claude/agents/andls .claude/skills/ - Check that each file has valid YAML frontmatter (
---delimiters) - Try referencing explicitly: "Use the java-spring-api skill"
Background task not responding
> /tasks # or /bashes β check status
> /kill <id> # Stop the stuck task
Permission errors
Never use sudo with npm installs. Fix global permissions instead:
npm config set prefix ~/.npm-global
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
Pre-configure allowed commands in .claude/settings.json to avoid repeated permission prompts.
Windows-Specific Setup
Hooks require a Bash shell. The .claude/hooks/*.sh scripts won't run natively on Windows. Options:
| Approach | How | Trade-off |
|---|---|---|
| WSL 2 (recommended) | Install WSL 2, run Claude Code from a WSL terminal | Full Linux compatibility, hooks work natively |
| Git Bash | Install Git for Windows, use Git Bash as your terminal | Most hooks work, occasional path issues |
| Rewrite as .ps1 | Convert bash hooks to PowerShell scripts | Native Windows, but requires rewriting and testing each hook |
If using WSL 2:
# Install WSL 2 (from PowerShell as admin)
wsl --install
# Clone the repo inside WSL, not on /mnt/c/
cd ~ && git clone <repo-url>
# Run Claude Code from WSL
claude
MCP servers on Windows may need a cmd wrapper in .mcp.json:
"command": "cmd",
"args": ["/c", "npx", "-y", "package-name"]
Run diagnostics
When something isn't working and you're not sure why:
claude doctor # General health check
claude --debug # Full debug logging
claude --debug "mcp" # Debug a specific category
23. Quick Reference Card
Print or bookmark this β it covers 90% of daily Claude Code usage.
Commands You'll Use Every Day
claude # Start session
claude --continue # Resume last session
claude --resume <name> # Resume named session
/compact # Compress context (do this often)
/context # Check context usage
/cost # Token usage this session
/exit # End session
Scaffolding
/scaffold-spring-api <name> # Java Spring Boot API
/scaffold-nestjs-api <name> # NestJS API
/scaffold-python-api <name> # Python FastAPI
/scaffold-angular-app <name> # Angular SPA
/scaffold-flutter-app <name> # Flutter mobile app
/scaffold-agentic-ai <name> # AI Agent service
Design & Review
/design-architecture <description> # System architecture with diagrams
/design-database <domain> # Database schema with ERD + migrations
/pr-risk [main..HEAD] # 1st β risk score before opening a PR
/review-pr [scope] # 2nd β 6-role qualitative review
/review-code [scope] # Code review (auto-detects stack)
/audit-security [scope] # Security vulnerability scan
/project-status # Codebase summary
/status-check # Binary works/broken report
Requirements & Feature Specs Skills (feature-forge)
Skill: .claude/skills/feature-forge/
What it is: A structured requirements gathering skill. Runs a PM + Dev dual-perspective interview before implementation starts, then produces a formal spec saved to specs/{feature}.spec.md.
Why use it: Most implementation mistakes are scoped-in at requirements time, not caught in code review. This skill forces structured elicitation β scope, NFRs, edge cases, and acceptance criteria β before the first line of code is written.
When to use it:
- Starting any new feature, before
/scaffold-*commands - When requirements are vague ("add payments", "improve search")
- When a PM or stakeholder has a feature request to formalise
- When you need a spec document to hand off to another team
How to use it: Say any trigger phrase β Claude runs the interview and produces a spec.
# Trigger phrases
"Define this feature"
"Gather requirements for X"
"Write a spec for X"
"Help me write user stories for X"
"What are the requirements for X?"
# 5-phase workflow
Discover β AskUserQuestion: goal, target users, business value
Interview β PM Hat (scope, priority, success metrics) + Dev Hat (security, performance, edge cases)
Document β EARS-format functional requirements + Given/When/Then acceptance criteria
Validate β Review spec with stakeholder, confirm scope and trade-offs
Plan β Implementation checklist: backend, frontend, testing TODOs
# Output saved to
specs/{feature_name}.spec.md
Sample skill library adapted from jeffallan.github.io/claude-skills
Critical Reasoning Skills (the-fool)
Skill: .claude/skills/the-fool/
What it is: An adversarial reasoning skill that stress-tests plans, decisions, and designs using formal methodology β not gut-feel pushback.
Why use it: Most mistakes aren't caught in code review β they're baked in at the decision stage. This skill forces structured challenge before you commit to a design, technology choice, or architecture. It exposes hidden assumptions, failure modes, and weak evidence while there's still time to change course cheaply.
When to use it:
- Before finalising an architecture or tech stack choice
- Before shipping a feature or going live
- When a plan feels right but you want to be sure
- When a stakeholder pushes back and you need to stress-test your own position
How to use it: Say any trigger phrase β no slash command needed. Claude activates the skill and asks you to pick a reasoning mode.
# Say any of these to activate
"Play devil's advocate on this design"
"Pre-mortem this β we ship in 3 days"
"Red team my authentication flow"
"Poke holes in my microservices decision"
"Challenge this" / "Stress test this" / "What could go wrong?"
"Test my assumptions"
# Then pick a mode
Expose My Assumptions β Surfaces what you're taking for granted (Socratic)
Argue the Other Side β Steel-manned counter-argument + synthesis (Dialectic)
Find the Failure Modes β Ranked failures with mitigations (Pre-mortem)
Attack This β Adversary profiles, attack vectors, defenses (Red team)
Test the Evidence β Are your conclusions actually supported? (Falsificationism)
Sample skill library adapted from jeffallan.github.io/claude-skills
Adversarial Plan Review (plan-challenger)
Agent: .claude/agents/plan-challenger.md
What it is: An Opus-powered read-only agent that attacks implementation plans across 5 dimensions β Assumptions, Missing Cases, Security, Architecture, and Complexity Creep β then tries to disprove each challenge before reporting. Only findings that survive self-scrutiny reach the report.
How it differs from the-fool: the-fool is conversational and works on any idea at any stage. plan-challenger is autonomous, plan-specific, reads the actual codebase to ground its claims, and has a built-in refutation step that eliminates false positives before you ever see them. Use the-fool to challenge a strategy; use plan-challenger to vet an implementation plan before coding starts.
Workflow:
1. Produce a plan /plan-review β saved to docs/plans/YYYY-MM-DD-<feature>.md
2. Challenge the plan Use the plan-challenger agent to review docs/plans/<plan-file>.md
3. Resolve blockers Fix π΄ Blockers before writing a line of code
Use architect or the-fool to explore alternatives if needed
4. Begin implementation Only after blockers are resolved
When to use it:
- Before any multi-day implementation effort
- Before irreversible decisions: database schema, public API contract, auth architecture
- When the team can't agree on an approach β challenges surface hidden assumptions
Stack-aware: The agent includes targeted challenge questions for every stack in this kit β Java/WebFlux reactive chains, NestJS/Prisma N+1 risk, Python async/sync mixing, Angular Observable leaks, Flutter/Riverpod lifecycle mismatches, PostgreSQL migration reversibility, Firebase security rules.
# Invoke after saving an approved plan
Use the plan-challenger agent to review docs/plans/2026-03-08-payment-service.md
Security
/security-hardening [scope] # Full-stack orchestrated hardening (10-step pipeline)
/security-sast [path] # SAST β Bandit + Semgrep + ESLint + SpotBugs + dart analyze
/security-dependencies [path] # CVE scan β npm / pip / Maven / pub.dev + SBOM
/xss-scan [path] # Angular XSS scan β bypassSecurityTrust*, innerHTML
/audit-security [scope] # Full security audit (includes dep scan)
@threat-modeling-expert # STRIDE threat model before any new design
Git Housekeeping
/worktree-sync # Sync worktrees for all open PRs (parallel work)
/worktree-sync --new <branch> # New branch + isolated worktree in one step
/branch-cleanup --dry-run # Preview stale/merged branches to delete
/branch-cleanup # Interactive cleanup (confirm each deletion)
/branch-cleanup --force # Delete all merged branches without prompts
Hookify β Custom Rules
/hookify <describe behavior> # Create a rule from plain English description
/hookify # Scan conversation for behaviors to prevent
/hookify-list # Show all rules and enabled/disabled status
/hookify-configure # Interactive toggle β enable or disable rules
Agents (use @name)
@java-spring-api # Spring Boot backend expert
@nestjs-api # NestJS backend expert
@python-dev # Python / FastAPI expert
@angular-spa # Angular frontend expert
@flutter-mobile # Flutter mobile expert
@agentic-ai-dev # AI agent builder
@architect # Solution architecture
@database-designer # PostgreSQL + Firestore
@security-reviewer # Security audit
@code-reviewer # General code review
Keyboard Shortcuts
@filename # Reference a file in prompt
Tab # Toggle thinking display
Shift+Enter # Multi-line input
Esc # Cancel generation
Ctrl+U # Delete entire line
/clear # Clear conversation
/model # Switch model
MCP Tips
use context7 # Append to any prompt for live docs
/mcp # Check MCP server status
