mirror of
https://github.com/codeaashu/claude-code.git
synced 2026-04-08 22:28:48 +03:00
221 lines
10 KiB
Markdown
221 lines
10 KiB
Markdown
---
|
|
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.
|
|
|
|
|