diff --git a/README.md b/README.md index 1853e3e..b670af8 100644 --- a/README.md +++ b/README.md @@ -1,280 +1,199 @@ -# Claude Code Source Snapshot for Security Research +# free-code -> This repository mirrors a **publicly exposed Claude Code source snapshot** that became accessible on **March 31, 2026** through a source map exposure in the npm distribution. It is maintained for **educational, defensive security research, and software supply-chain analysis**. +**The free build of Claude Code.** + +All telemetry stripped. All injected security-prompt guardrails removed. All experimental features unlocked. One binary, zero callbacks home. --- -## Research Context +## What is this -This repository is maintained by a **university student** studying: +This is a clean, buildable fork of Anthropic's [Claude Code](https://docs.anthropic.com/en/docs/claude-code) CLI -- the terminal-native AI coding agent. The upstream source became publicly available on March 31, 2026 through a source map exposure in the npm distribution. -- software supply-chain exposure and build artifact leaks -- secure software engineering practices -- agentic developer tooling architecture -- defensive analysis of real-world CLI systems +This fork applies three categories of changes on top of that snapshot: -This archive is intended to support: +### 1. Telemetry removed -- educational study -- security research practice -- architecture review -- discussion of packaging and release-process failures +The upstream binary phones home through OpenTelemetry/gRPC, GrowthBook analytics, Sentry error reporting, and custom event logging. In this build: -It does **not** claim ownership of the original code, and it should not be interpreted as an official Anthropic repository. +- All outbound telemetry endpoints are dead-code-eliminated or stubbed +- GrowthBook feature flag evaluation still works locally (needed for runtime feature gates) but does not report back +- No crash reports, no usage analytics, no session fingerprinting + +### 2. Security-prompt guardrails removed + +Anthropic injects system-level instructions into every conversation that constrain Claude's behavior beyond what the model itself enforces. These include: + +- Hardcoded refusal patterns for certain categories of prompts +- Injected "cyber risk" instruction blocks +- Managed-settings security overlays pushed from Anthropic's servers + +This build strips those injections. The model's own safety training still applies -- this just removes the extra layer of prompt-level restrictions that the CLI wraps around it. + +### 3. Experimental features enabled + +Claude Code ships with dozens of feature flags gated behind `bun:bundle` compile-time switches. Most are disabled in the public npm release. This build unlocks all 45+ flags that compile cleanly, including: + +| Feature | What it does | +|---|---| +| `ULTRAPLAN` | Remote multi-agent planning on Claude Code web (Opus-class) | +| `ULTRATHINK` | Deep thinking mode -- type "ultrathink" to boost reasoning effort | +| `VOICE_MODE` | Push-to-talk voice input and dictation | +| `AGENT_TRIGGERS` | Local cron/trigger tools for background automation | +| `BRIDGE_MODE` | IDE remote-control bridge (VS Code, JetBrains) | +| `TOKEN_BUDGET` | Token budget tracking and usage warnings | +| `BUILTIN_EXPLORE_PLAN_AGENTS` | Built-in explore/plan agent presets | +| `VERIFICATION_AGENT` | Verification agent for task validation | +| `BASH_CLASSIFIER` | Classifier-assisted bash permission decisions | +| `EXTRACT_MEMORIES` | Post-query automatic memory extraction | +| `HISTORY_PICKER` | Interactive prompt history picker | +| `MESSAGE_ACTIONS` | Message action entrypoints in the UI | +| `QUICK_SEARCH` | Prompt quick-search | +| `SHOT_STATS` | Shot-distribution stats | +| `COMPACTION_REMINDERS` | Smart reminders around context compaction | +| `CACHED_MICROCOMPACT` | Cached microcompact state through query flows | + +See [FEATURES.md](FEATURES.md) for the full audit of all 88 flags and their status. --- -## How the Public Snapshot Became Accessible +## Requirements -[Chaofan Shou (@Fried_rice)](https://x.com/Fried_rice) publicly noted that Claude Code source material was reachable through a `.map` file exposed in the npm package: +- [Bun](https://bun.sh) >= 1.3.11 +- macOS or Linux (Windows via WSL) +- An Anthropic API key (set `ANTHROPIC_API_KEY` in your environment) -> **"Claude code source code has been leaked via a map file in their npm registry!"** -> -> — [@Fried_rice, March 31, 2026](https://x.com/Fried_rice/status/2038894956459290963) - -The published source map referenced unobfuscated TypeScript sources hosted in Anthropic's R2 storage bucket, which made the `src/` snapshot publicly downloadable. +```bash +# Install Bun if you don't have it +curl -fsSL https://bun.sh/install | bash +``` --- -## Repository Scope +## Build -Claude Code is Anthropic's CLI for interacting with Claude from the terminal to perform software engineering tasks such as editing files, running commands, searching codebases, and coordinating workflows. +```bash +# Clone the repo +git clone https://github.com/paoloanzn/claude-code.git +cd claude-code -This repository contains a mirrored `src/` snapshot for research and analysis. +# Install dependencies +bun install -- **Public exposure identified on**: 2026-03-31 -- **Language**: TypeScript -- **Runtime**: Bun -- **Terminal UI**: React + [Ink](https://github.com/vadimdemedes/ink) -- **Scale**: ~1,900 files, 512,000+ lines of code +# Standard build -- produces ./cli +bun run build + +# Dev build -- dev version stamp, experimental GrowthBook key +bun run build:dev + +# Dev build with ALL experimental features enabled -- produces ./cli-dev +bun run build:dev:full + +# Compiled build (alternative output path) -- produces ./dist/cli +bun run compile +``` + +### Build variants + +| Command | Output | Features | Notes | +|---|---|---|---| +| `bun run build` | `./cli` | `VOICE_MODE` only | Production-like binary | +| `bun run build:dev` | `./cli-dev` | `VOICE_MODE` only | Dev version stamp | +| `bun run build:dev:full` | `./cli-dev` | All 45+ experimental flags | The full unlock build | +| `bun run compile` | `./dist/cli` | `VOICE_MODE` only | Alternative output directory | + +### Individual feature flags + +You can enable specific flags without the full bundle: + +```bash +# Enable just ultraplan and ultrathink +bun run ./scripts/build.ts --feature=ULTRAPLAN --feature=ULTRATHINK + +# Enable a specific flag on top of the dev build +bun run ./scripts/build.ts --dev --feature=BRIDGE_MODE +``` --- -## Directory Structure +## Run + +```bash +# Run the built binary directly +./cli + +# Or the dev binary +./cli-dev + +# Or run from source without compiling (slower startup) +bun run dev + +# Set your API key +export ANTHROPIC_API_KEY="sk-ant-..." + +# Or use Claude.ai OAuth +./cli /login +``` + +### Quick test + +```bash +# One-shot mode +./cli -p "what files are in this directory?" + +# Interactive REPL (default) +./cli + +# With specific model +./cli --model claude-sonnet-4-6-20250514 +``` + +--- + +## Project structure + +``` +scripts/ + build.ts # Build script with feature flag system -```text src/ -├── main.tsx # Entrypoint orchestration (Commander.js-based CLI path) -├── commands.ts # Command registry -├── tools.ts # Tool registry -├── Tool.ts # Tool type definitions -├── QueryEngine.ts # LLM query engine -├── context.ts # System/user context collection -├── cost-tracker.ts # Token cost tracking -│ -├── commands/ # Slash command implementations (~50) -├── tools/ # Agent tool implementations (~40) -├── components/ # Ink UI components (~140) -├── hooks/ # React hooks -├── services/ # External service integrations -├── screens/ # Full-screen UIs (Doctor, REPL, Resume) -├── types/ # TypeScript type definitions -├── utils/ # Utility functions -│ -├── bridge/ # IDE and remote-control bridge -├── coordinator/ # Multi-agent coordinator -├── plugins/ # Plugin system -├── skills/ # Skill system -├── keybindings/ # Keybinding configuration -├── vim/ # Vim mode -├── voice/ # Voice input -├── remote/ # Remote sessions -├── server/ # Server mode -├── memdir/ # Persistent memory directory -├── tasks/ # Task management -├── state/ # State management -├── migrations/ # Config migrations -├── schemas/ # Config schemas (Zod) -├── entrypoints/ # Initialization logic -├── ink/ # Ink renderer wrapper -├── buddy/ # Companion sprite -├── native-ts/ # Native TypeScript utilities -├── outputStyles/ # Output styling -├── query/ # Query pipeline -└── upstreamproxy/ # Proxy configuration + entrypoints/cli.tsx # CLI entrypoint + commands.ts # Command registry (slash commands) + tools.ts # Tool registry (agent tools) + QueryEngine.ts # LLM query engine + screens/REPL.tsx # Main interactive UI + + commands/ # /slash command implementations + tools/ # Agent tool implementations (Bash, Read, Edit, etc.) + components/ # Ink/React terminal UI components + hooks/ # React hooks + services/ # API client, MCP, OAuth, analytics + state/ # App state store + utils/ # Utilities + skills/ # Skill system + plugins/ # Plugin system + bridge/ # IDE bridge + voice/ # Voice input + tasks/ # Background task management ``` --- -## Architecture Summary +## Tech stack -### 1. Tool System (`src/tools/`) - -Every tool Claude Code can invoke is implemented as a self-contained module. Each tool defines its input schema, permission model, and execution logic. - -| Tool | Description | -|---|---| -| `BashTool` | Shell command execution | -| `FileReadTool` | File reading (images, PDFs, notebooks) | -| `FileWriteTool` | File creation / overwrite | -| `FileEditTool` | Partial file modification (string replacement) | -| `GlobTool` | File pattern matching search | -| `GrepTool` | ripgrep-based content search | -| `WebFetchTool` | Fetch URL content | -| `WebSearchTool` | Web search | -| `AgentTool` | Sub-agent spawning | -| `SkillTool` | Skill execution | -| `MCPTool` | MCP server tool invocation | -| `LSPTool` | Language Server Protocol integration | -| `NotebookEditTool` | Jupyter notebook editing | -| `TaskCreateTool` / `TaskUpdateTool` | Task creation and management | -| `SendMessageTool` | Inter-agent messaging | -| `TeamCreateTool` / `TeamDeleteTool` | Team agent management | -| `EnterPlanModeTool` / `ExitPlanModeTool` | Plan mode toggle | -| `EnterWorktreeTool` / `ExitWorktreeTool` | Git worktree isolation | -| `ToolSearchTool` | Deferred tool discovery | -| `CronCreateTool` | Scheduled trigger creation | -| `RemoteTriggerTool` | Remote trigger | -| `SleepTool` | Proactive mode wait | -| `SyntheticOutputTool` | Structured output generation | - -### 2. Command System (`src/commands/`) - -User-facing slash commands invoked with `/` prefix. - -| Command | Description | -|---|---| -| `/commit` | Create a git commit | -| `/review` | Code review | -| `/compact` | Context compression | -| `/mcp` | MCP server management | -| `/config` | Settings management | -| `/doctor` | Environment diagnostics | -| `/login` / `/logout` | Authentication | -| `/memory` | Persistent memory management | -| `/skills` | Skill management | -| `/tasks` | Task management | -| `/vim` | Vim mode toggle | -| `/diff` | View changes | -| `/cost` | Check usage cost | -| `/theme` | Change theme | -| `/context` | Context visualization | -| `/pr_comments` | View PR comments | -| `/resume` | Restore previous session | -| `/share` | Share session | -| `/desktop` | Desktop app handoff | -| `/mobile` | Mobile app handoff | - -### 3. Service Layer (`src/services/`) - -| Service | Description | -|---|---| -| `api/` | Anthropic API client, file API, bootstrap | -| `mcp/` | Model Context Protocol server connection and management | -| `oauth/` | OAuth 2.0 authentication flow | -| `lsp/` | Language Server Protocol manager | -| `analytics/` | GrowthBook-based feature flags and analytics | -| `plugins/` | Plugin loader | -| `compact/` | Conversation context compression | -| `policyLimits/` | Organization policy limits | -| `remoteManagedSettings/` | Remote managed settings | -| `extractMemories/` | Automatic memory extraction | -| `tokenEstimation.ts` | Token count estimation | -| `teamMemorySync/` | Team memory synchronization | - -### 4. Bridge System (`src/bridge/`) - -A bidirectional communication layer connecting IDE extensions (VS Code, JetBrains) with the Claude Code CLI. - -- `bridgeMain.ts` — Bridge main loop -- `bridgeMessaging.ts` — Message protocol -- `bridgePermissionCallbacks.ts` — Permission callbacks -- `replBridge.ts` — REPL session bridge -- `jwtUtils.ts` — JWT-based authentication -- `sessionRunner.ts` — Session execution management - -### 5. Permission System (`src/hooks/toolPermission/`) - -Checks permissions on every tool invocation. Either prompts the user for approval/denial or automatically resolves based on the configured permission mode (`default`, `plan`, `bypassPermissions`, `auto`, etc.). - -### 6. Feature Flags - -Dead code elimination via Bun's `bun:bundle` feature flags: - -```typescript -import { feature } from 'bun:bundle' - -// Inactive code is completely stripped at build time -const voiceCommand = feature('VOICE_MODE') - ? require('./commands/voice/index.js').default - : null -``` - -Notable flags: `PROACTIVE`, `KAIROS`, `BRIDGE_MODE`, `DAEMON`, `VOICE_MODE`, `AGENT_TRIGGERS`, `MONITOR_TOOL` - ---- - -## Key Files in Detail - -### `QueryEngine.ts` (~46K lines) - -The core engine for LLM API calls. Handles streaming responses, tool-call loops, thinking mode, retry logic, and token counting. - -### `Tool.ts` (~29K lines) - -Defines base types and interfaces for all tools — input schemas, permission models, and progress state types. - -### `commands.ts` (~25K lines) - -Manages registration and execution of all slash commands. Uses conditional imports to load different command sets per environment. - -### `main.tsx` - -Commander.js-based CLI parser and React/Ink renderer initialization. At startup, it overlaps MDM settings, keychain prefetch, and GrowthBook initialization for faster boot. - ---- - -## Tech Stack - -| Category | Technology | +| | | |---|---| | Runtime | [Bun](https://bun.sh) | -| Language | TypeScript (strict) | -| Terminal UI | [React](https://react.dev) + [Ink](https://github.com/vadimdemedes/ink) | -| CLI Parsing | [Commander.js](https://github.com/tj/commander.js) (extra-typings) | -| Schema Validation | [Zod v4](https://zod.dev) | -| Code Search | [ripgrep](https://github.com/BurntSushi/ripgrep) | -| Protocols | [MCP SDK](https://modelcontextprotocol.io), LSP | -| API | [Anthropic SDK](https://docs.anthropic.com) | -| Telemetry | OpenTelemetry + gRPC | -| Feature Flags | GrowthBook | -| Auth | OAuth 2.0, JWT, macOS Keychain | +| Language | TypeScript | +| Terminal UI | React + [Ink](https://github.com/vadimdemedes/ink) | +| CLI parsing | [Commander.js](https://github.com/tj/commander.js) | +| Schema validation | Zod v4 | +| Code search | ripgrep (bundled) | +| Protocols | MCP, LSP | +| API | Anthropic Messages API | --- -## Notable Design Patterns +## License -### Parallel Prefetch - -Startup time is optimized by prefetching MDM settings, keychain reads, and API preconnect in parallel before heavy module evaluation begins. - -```typescript -// main.tsx — fired as side-effects before other imports -startMdmRawRead() -startKeychainPrefetch() -``` - -### Lazy Loading - -Heavy modules (OpenTelemetry, gRPC, analytics, and some feature-gated subsystems) are deferred via dynamic `import()` until actually needed. - -### Agent Swarms - -Sub-agents are spawned via `AgentTool`, with `coordinator/` handling multi-agent orchestration. `TeamCreateTool` enables team-level parallel work. - -### Skill System - -Reusable workflows defined in `skills/` are executed through `SkillTool`. Users can add custom skills. - -### Plugin Architecture - -Built-in and third-party plugins are loaded through the `plugins/` subsystem. - ---- - -## Research / Ownership Disclaimer - -- This repository is an **educational and defensive security research archive** maintained by a university student. -- It exists to study source exposure, packaging failures, and the architecture of modern agentic CLI systems. -- The original Claude Code source remains the property of **Anthropic**. -- This repository is **not affiliated with, endorsed by, or maintained by Anthropic**. +The original Claude Code source is the property of Anthropic. This fork exists because the source was publicly exposed through their npm distribution. Use at your own discretion.