Development conventions and architecture guide for the Claude Code CLI repository.
Scanned 5/27/2026
Install to Claude Code
npx -y skills add codeaashu/claude-code --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of claude-code-skill?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/codeaashu-claude-code-skill)More formats (shields.io, HTML) on the badges page.
---
name: claude-code-skill
description: Development conventions and architecture guide for the Claude Code CLI repository.
---
# Claude Code — Repository Skill
## Project Overview
Claude Code is Anthropic's CLI tool for interacting with Claude from the terminal. It supports file editing, shell commands, git workflows, code review, multi-agent coordination, IDE integration (VS Code, JetBrains), and Model Context Protocol (MCP).
**Codebase:** ~1,900 files, 512,000+ lines of TypeScript under `src/`.
## Tech Stack
| Component | Technology |
|------------------|------------------------------------------------|
| Language | TypeScript (strict mode, ES modules) |
| Runtime | Bun (JSX support, `bun:bundle` feature flags) |
| Terminal UI | React + Ink (React for CLI) |
| CLI Parser | Commander.js (`@commander-js/extra-typings`) |
| API Client | `@anthropic-ai/sdk` |
| Validation | Zod v4 |
| Linter/Formatter | Biome |
| Analytics | GrowthBook (feature flags & A/B testing) |
| Protocol | Model Context Protocol (MCP) |
## Architecture
### Directory Map (`src/`)
| Directory | Purpose |
|------------------|-----------------------------------------------------------------|
| `commands/` | ~50 slash commands (`/commit`, `/review`, `/config`, etc.) |
| `tools/` | ~40 agent tools (Bash, FileRead, FileWrite, Glob, Grep, etc.) |
| `components/` | ~140 Ink/React UI components for terminal rendering |
| `services/` | External integrations (API, OAuth, MCP, LSP, analytics, plugins)|
| `bridge/` | Bidirectional IDE communication layer |
| `state/` | React context + custom store (AppState) |
| `hooks/` | React hooks (permissions, keybindings, commands, settings) |
| `types/` | TypeScript type definitions |
| `utils/` | Utilities (shell, file ops, permissions, config, git) |
| `screens/` | Full-screen UIs (Doctor, REPL, Resume, Compact) |
| `skills/` | Bundled skills + skill loader system |
| `plugins/` | Plugin system (marketplace + bundled plugins) |
| `coordinator/` | Multi-agent coordination & supervisor logic |
| `tasks/` | Task management (shell tasks, agent tasks, teammates) |
| `context/` | React context providers (notifications, stats, FPS) |
| `memdir/` | Persistent memory system (CLAUDE.md, user/project memory) |
| `entrypoints/` | Initialization logic, Agent SDK, MCP entry |
| `voice/` | Voice input/output (STT, keyterms) |
| `vim/` | Vim mode keybinding support |
| `schemas/` | Zod configuration schemas |
| `keybindings/` | Keybinding configuration & resolver |
| `migrations/` | Config migrations between versions |
| `outputStyles/` | Output formatting & theming |
| `query/` | Query pipeline & processing |
| `server/` | Server/daemon mode |
| `remote/` | Remote session handling |
### Key Files
| File | Role |
|---------------------|-----------------------------------------------------|
| `src/main.tsx` | CLI entry point (Commander parser, startup profiling)|
| `src/QueryEngine.ts`| Core LLM API caller (streaming, tool-call loops) |
| `src/Tool.ts` | Tool type definitions & `buildTool` factory |
| `src/tools.ts` | Tool registry & presets |
| `src/commands.ts` | Command registry |
| `src/context.ts` | System/user context collection (git status, memory) |
| `src/cost-tracker.ts`| Token cost tracking |
### Entry Points & Initialization Sequence
1. `src/main.tsx` — Commander CLI parser, startup profiling
2. `src/entrypoints/init.ts` — Config, telemetry, OAuth, MDM
3. `src/entrypoints/cli.tsx` — CLI session orchestration
4. `src/entrypoints/mcp.ts` — MCP server mode
5. `src/entrypoints/sdk/` — Agent SDK (programmatic API)
6. `src/replLauncher.tsx` — REPL session launcher
Startup performs parallel initialization: MDM policy reads, Keychain prefetch, feature flag checks, then core init.
## Patterns & Conventions
### Tool Definition
Each tool lives in `src/tools/{ToolName}/` and uses `buildTool`:
```typescript
export const MyTool = buildTool({
name: 'MyTool',
aliases: ['my_tool'],
description: 'What this tool does',
inputSchema: z.object({
param: z.string(),
}),
async call(args, context, canUseTool, parentMessage, onProgress) {
// Execute and return { data: result, newMessages?: [...] }
},
async checkPermissions(input, context) { /* Permission checks */ },
isConcurrencySafe(input) { /* Can run in parallel? */ },
isReadOnly(input) { /* Non-destructive? */ },
prompt(options) { /* System prompt injection */ },
renderToolUseMessage(input, options) { /* UI for invocation */ },
renderToolResultMessage(content, progressMessages, options) { /* UI for result */ },
})
```
**Directory structure per tool:** `{ToolName}.ts` or `.tsx` (main), `UI.tsx` (rendering), `prompt.ts` (system prompt), plus utility files.
### Command Definition
Commands live in `src/commands/` and follow three types:
- **PromptCommand** — Sends a formatted prompt with injected tools (most commands)
- **LocalCommand** — Runs in-process, returns text
- **LocalJSXCommand** — Runs in-process, returns React JSX
```typescript
const command = {
type: 'prompt',
name: 'my-command',
description: 'What this command does',
progressMessage: 'working...',
allowedTools: ['Bash(git *)', 'FileRead(*)'],
source: 'builtin',
async getPromptForCommand(args, context) {
return [{ type: 'text', text: '...' }]
},
} satisfies Command
```
Commands are registered in `src/commands.ts` and invoked via `/command-name` in the REPL.
### Component Structure
- Functional React components with Ink primitives (`Box`, `Text`, `useInput()`)
- Styled with Chalk for terminal colors
- React Compiler for optimized re-renders
- Design system primitives in `src/components/design-system/`
### State Management
- `AppState` via React context + custom store (`src/state/AppStateStore.ts`)
- Mutable state object passed to tool contexts
- Selector functions for derived state
- Change observers in `src/state/onChangeAppState.ts`
### Permission System
- **Modes:** `default` (prompt per operation), `plan` (show plan, ask once), `bypassPermissions` (auto-approve), `auto` (ML classifier)
- **Rules:** Wildcard patterns — `Bash(git *)`, `FileEdit(/src/*)`
- Tools implement `checkPermissions()` returning `{ granted: boolean, reason?, prompt? }`
### Feature Flags & Build
Bun's `bun:bundle` feature flags enable dead-code elimination at build time:
```typescript
import { feature } from 'bun:bundle'
if (feature('PROACTIVE')) { /* proactive agent tools */ }
```
Notable flags: `PROACTIVE`, `KAIROS`, `BRIDGE_MODE`, `VOICE_MODE`, `COORDINATOR_MODE`, `DAEMON`, `WORKFLOW_SCRIPTS`.
Some features are also gated via `process.env.USER_TYPE === 'ant'`.
## Naming Conventions
| Element | Convention | Example |
|-------------|---------------------|----------------------------------|
| Files | PascalCase (exports) or kebab-case (commands) | `BashTool.tsx`, `commit-push-pr.ts` |
| Components | PascalCase | `App.tsx`, `PromptInput.tsx` |
| Types | PascalCase, suffix with Props/State/Context | `ToolUseContext` |
| Hooks | `use` prefix | `useCanUseTool`, `useSettings` |
| Constants | SCREAMING_SNAKE_CASE | `MAX_TOKENS`, `DEFAULT_TIMEOUT_MS`|
## Import Practices
- ES modules with `.js` extensions (Bun convention)
- Lazy imports for circular dependency breaking: `const getModule = () => require('./heavy.js')`
- Conditional imports via feature flags or `process.env`
- `biome-ignore` markers for manual import ordering where needed
## Services
| Service | Path | Purpose |
|--------------------|-------------------------------|-----------------------------------|
| API | `services/api/` | Anthropic SDK client, file uploads|
| MCP | `services/mcp/` | MCP client, tool/resource discovery|
| OAuth | `services/oauth/` | OAuth 2.0 auth flow |
| LSP | `services/lsp/` | Language Server Protocol manager |
| Analytics | `services/analytics/` | GrowthBook, telemetry, events |
| Plugins | `services/plugins/` | Plugin loader, marketplace |
| Compact | `services/compact/` | Context compression |
| Policy Limits | `services/policyLimits/` | Org rate limits, quota checking |
| Remote Settings | `services/remoteManagedSettings/` | Managed settings sync (Enterprise) |
| Token Estimation | `services/tokenEstimation.ts` | Token count estimation |
## Configuration
**Settings locations:**
- **Global:** `~/.claude/config.json`, `~/.claude/settings.json`
- **Project:** `.claude/config.json`, `.claude/settings.json`
- **System:** macOS Keychain + MDM, Windows Registry + MDM
- **Managed:** Remote sync for Enterprise users
## Guidelines
1. Read relevant source files before making changes — understand existing patterns first.
2. Follow the tool/command/component patterns above when adding new ones.
3. Keep edits minimal and focused — avoid unnecessary refactoring.
4. Use Zod for all input validation at system boundaries.
5. Gate experimental features behind `bun:bundle` feature flags or env checks.
6. Respect the permission system — tools that modify state must implement `checkPermissions()`.
7. Use lazy imports when adding dependencies that could create circular references.
8. Update this file as project conventions evolve.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!