{"id":47730112,"url":"https://github.com/maulanasdqn/claude-rust","last_synced_at":"2026-04-07T01:00:32.078Z","repository":{"id":348245508,"uuid":"1197094030","full_name":"maulanasdqn/claude-rust","owner":"maulanasdqn","description":"Claude Code Rust Version","archived":false,"fork":false,"pushed_at":"2026-04-05T12:51:37.000Z","size":636,"stargazers_count":6,"open_issues_count":19,"forks_count":3,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2026-04-06T00:02:55.435Z","etag":null,"topics":["claude","code","rust"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/claude-rust","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maulanasdqn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-31T10:17:41.000Z","updated_at":"2026-04-05T12:51:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"f07bbc8e-4c24-44cb-805b-2e1f5f6eb80e","html_url":"https://github.com/maulanasdqn/claude-rust","commit_stats":null,"previous_names":["maulanasdqn/claude-code-rs","maulanasdqn/claude-rust"],"tags_count":38,"template":false,"template_full_name":null,"purl":"pkg:github/maulanasdqn/claude-rust","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maulanasdqn%2Fclaude-rust","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maulanasdqn%2Fclaude-rust/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maulanasdqn%2Fclaude-rust/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maulanasdqn%2Fclaude-rust/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maulanasdqn","download_url":"https://codeload.github.com/maulanasdqn/claude-rust/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maulanasdqn%2Fclaude-rust/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31495466,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T17:22:55.647Z","status":"ssl_error","status_checked_at":"2026-04-06T17:22:54.741Z","response_time":112,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude","code","rust"],"created_at":"2026-04-02T21:23:48.479Z","updated_at":"2026-04-07T01:00:32.050Z","avatar_url":"https://github.com/maulanasdqn.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# claude-rust\n\nA Rust reimplementation of [Claude Code](https://docs.anthropic.com/en/docs/claude-code) -- the agentic tool-use loop backed by the Anthropic streaming API.\n\nThe TypeScript original has ~1,900 files. This project distills it to its essence: a multi-crate Rust workspace that streams responses from the Anthropic Messages API, detects tool-use requests, executes tools locally, feeds results back, and loops until the model is done.\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\n## Architecture\n\nEvery crate follows **Clean Architecture** with `domain/`, `application/`, and `infrastructure/` layers.\n\n```\nclaude-rust-auth        - Credential resolution (macOS Keychain / Linux keyring OAuth + API key fallback)\nclaude-rust-config      - Settings loading and merging (global + project)\nclaude-rust-errors      - AppError enum, axum IntoResponse impl\nclaude-rust-types       - Shared traits (Tool, Provider, PermissionChecker) and message types\nclaude-rust-tools       - Tool implementations and ToolRegistry (+ MCP support)\nclaude-rust-provider    - Anthropic HTTP + SSE streaming client with thinking support\nclaude-rust-engine      - Agentic tool-use loop with streaming callbacks, retry, and sub-agents\nclaude-rust-permission  - Config-aware permission checker with interactive prompts and skill scoping\nclaude-rust-memory      - Session persistence (JSON files)\nclaude-rust-commands    - Slash commands and @file references\nclaude-rust-compact     - 4-stage conversation compaction pipeline (auto, micro, session memory, full)\nclaude-rust-services    - Platform services (analytics, notifications, LSP, token estimation, rate limiting, diagnostics)\nclaude-rust             - Interactive terminal REPL (the main binary)\nclaude-rust-server      - axum HTTP server (POST /chat, GET /health)\n```\n\n### Core Loop\n\n```\nuser input\n  -\u003e expand @file references + image attachments\n  -\u003e build Conversation\n  -\u003e provider.stream() (with extended thinking if enabled)\n  -\u003e accumulate StreamEvents\n  -\u003e if stop_reason == ToolUse -\u003e check permission -\u003e execute tools -\u003e append results -\u003e loop\n  -\u003e if overloaded -\u003e retry with exponential backoff (up to 3 attempts)\n  -\u003e else -\u003e return final text -\u003e auto-save session\n```\n\nBounded by `max_turns` (default 20). Tool errors are sent back as `is_error: true` so the model can self-correct.\n\n## Authentication\n\nCredentials are resolved automatically in this order:\n\n1. **`ANTHROPIC_API_KEY` environment variable** -- uses `api.anthropic.com` with `x-api-key` header.\n2. **System Keychain** -- reads the OAuth token stored by Claude Code. Uses `api.claude.ai` with `Authorization: Bearer` header. Works on macOS (Keychain) and Linux (secret-tool/keyring).\n\nIf you already have Claude Code installed and logged in, it just works -- no extra configuration needed.\n\n## Features\n\n### Interactive CLI\n\n- Rich terminal UI with bordered input box, permission mode badges, and git branch display\n- Session persistence with resume on startup\n- Streaming output with `indicatif` progress spinners and task progress display\n- Vi mode editing (toggle with `/vim`)\n- Command autocomplete with dropdown suggestions\n- History search (`Ctrl+R`)\n- Image paste from clipboard (`Ctrl+V`) with `[Image #N]` markers\n- Background task execution (`Ctrl+B`)\n- Stash/restore input buffer (`Ctrl+S`)\n- `@file` references: type `@Cargo.toml` to inject file contents\n- Interactive permission prompts for dangerous tool calls\n- Retry with exponential backoff on API overload\n- Extended thinking support (`/think`)\n\n### Slash Commands\n\n| Command | Description |\n|---------|-------------|\n| `/help` | List available commands |\n| `/model [name]` | Show or switch model (interactive picker if no arg) |\n| `/fast` | Toggle fast mode (Haiku) |\n| `/mode` | Cycle permission mode (Normal / Auto-accept / Plan / Bypass) |\n| `/plan [task]` | Enter plan mode for read-only exploration |\n| `/think` | Toggle extended thinking |\n| `/effort [level]` | Set effort level (low / medium / high / max) |\n| `/clear` | Clear conversation history |\n| `/compact` | Compact conversation to save context |\n| `/diff` | Show git diff |\n| `/status` | Show git status |\n| `/review` | Review uncommitted changes |\n| `/commit` | Commit staged changes |\n| `/memory` | Show CLAUDE.md files |\n| `/export` | Export conversation to markdown |\n| `/rewind [n]` | Rewind conversation by N messages |\n| `/add \u003cpath\u003e` | Pin a file to all future messages |\n| `/files` | List pinned files |\n| `/config` | Show current settings |\n| `/permissions` | Show permission rules |\n| `/usage` | Show plan usage (OAuth only) |\n| `/doctor` | Diagnostic checks |\n| `/vim` | Toggle vi mode |\n| `/copy` | Copy last response to clipboard |\n| `/login` / `/logout` | Manage authentication |\n| `/version` | Show version |\n| `/quit` or `/exit` | End the session |\n\n### Custom Skills \u0026 Commands\n\nLoad custom slash commands from markdown files with YAML frontmatter:\n\n**Skills** (`~/.claude/skills/` or `.claude/skills/`):\n```\n~/.claude/skills/\n  my-skill/\n    SKILL.md       # Directory format (preferred)\n```\n\n**Legacy Commands** (`~/.claude/commands/` or `.claude/commands/`):\n```\n~/.claude/commands/\n  smart-push.md    # Standalone .md format\n  my-tool/\n    SKILL.md       # Directory format also supported\n```\n\n#### Frontmatter Format\n\n```yaml\n---\nname: smart-push\ndescription: Intelligent git workflow with grouped commits\nargument-hint: [optional commit message]\nallowed-tools: Bash(git add:*), Bash(git status:*), Bash(git commit:*), Bash(git push:*)\nwhen_to_use: Use when the user wants to commit and push changes\nuser-invocable: true\n---\n\nYour prompt template here. Use $ARGUMENTS for user-provided arguments.\n```\n\n- **`allowed-tools`**: Auto-approve matching tool calls during skill execution\n- **`when_to_use`**: Included in system prompt so the model can suggest the skill\n- **`user-invocable`**: Set to `false` to hide from autocomplete (default: `true`)\n\n### Built-in Tools\n\n| Tool | Permission | Description |\n|------|-----------|-------------|\n| `bash` | Dangerous | Execute a shell command |\n| `read` | ReadOnly | Read a file with line numbers |\n| `file_write` | Dangerous | Create or overwrite a file |\n| `file_edit` | Dangerous | Find-and-replace edit in a file |\n| `glob` | ReadOnly | Find files matching a glob pattern |\n| `grep` | ReadOnly | Search file contents with regex |\n| `web_fetch` | Dangerous | Fetch a URL and extract content |\n| `web_search` | Dangerous | Search the web |\n| `ask_user_question` | ReadOnly | Ask the user a question |\n| `todo_write` | ReadOnly | Create/update task list with progress display |\n| `todo_read` | ReadOnly | Read current task list |\n| `enter_plan_mode` / `exit_plan_mode` | ReadOnly | Plan mode transitions |\n| `agent` | Dangerous | Spawn an autonomous sub-agent |\n| `explore` | ReadOnly | Spawn a read-only exploration sub-agent |\n| MCP tools | Varies | External tools via Model Context Protocol |\n\n### Configuration\n\nSettings are loaded from `~/.claude/settings.json` (global) and `.claude/settings.json` (project), with project overriding global:\n\n```json\n{\n  \"model\": \"claude-sonnet-4-6\",\n  \"max_turns\": 20,\n  \"max_tokens\": 16384,\n  \"permissions\": {\n    \"allow\": [\"read\", \"glob\", \"grep\", \"bash(git *)\"],\n    \"deny\": [\"bash(rm -rf *)\"]\n  },\n  \"hooks\": {\n    \"PreToolUse\": [{ \"matcher\": \"bash\", \"command\": \"echo $CLAUDE_TOOL_INPUT\" }],\n    \"PostToolUse\": [{ \"command\": \"notify-send 'Tool done'\" }],\n    \"SessionStart\": [{ \"command\": \"echo 'Session started'\" }],\n    \"Stop\": [{ \"command\": \"echo 'Session ended'\" }]\n  }\n}\n```\n\n### CLAUDE.md\n\nProject instructions are loaded hierarchically from `CLAUDE.md` and `.claude/CLAUDE.md` files, walking up from the current directory to `~/.claude/CLAUDE.md`. All found files are concatenated into the system prompt.\n\n### MCP (Model Context Protocol)\n\nExternal tool servers are configured via `.mcp.json`, `.claude/mcp.json`, or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"my-server\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"my-mcp-server\"],\n      \"env\": { \"API_KEY\": \"...\" }\n    }\n  }\n}\n```\n\n### HTTP Server\n\n- `GET /health` -- health check\n- `POST /chat` -- send messages and get responses\n\n## Environment Variables\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `ANTHROPIC_API_KEY` | (auto-detected) | API key. Falls back to system keychain if unset |\n| `ANTHROPIC_BASE_URL` | auto | Override the API base URL |\n| `MODEL` | `claude-sonnet-4-6` | Model to use |\n| `RUST_LOG` | `warn` (cli) / `info` (server) | Log level filter |\n\n## Prerequisites\n\n- Rust 1.85+ (2024 edition)\n- One of:\n  - An [Anthropic API key](https://console.anthropic.com/), or\n  - An existing Claude Code installation (credentials are read from the system keychain)\n\n## Quick Start\n\n### Install from source\n\n```bash\ngit clone https://github.com/maulanasdqn/claude-rust.git\ncd claude-rust\ncargo install --path claude-rust\n```\n\n### Run\n\n```bash\n# Using your existing Claude Code session (no env var needed)\nclaude-rust\n\n# Or with an explicit API key\nANTHROPIC_API_KEY=sk-ant-... claude-rust\n```\n\n### Keyboard Shortcuts\n\n| Shortcut | Action |\n|----------|--------|\n| `Enter` | Submit message |\n| `Shift+Enter` | New line |\n| `Ctrl+C` | Cancel current operation |\n| `Ctrl+R` | Search history |\n| `Ctrl+V` | Paste image from clipboard |\n| `Ctrl+B` | Run current input as background task |\n| `Ctrl+S` | Stash/restore input buffer |\n| `Up/Down` | Navigate history / autocomplete suggestions |\n| `Tab` | Accept autocomplete suggestion |\n| `Esc` | Dismiss suggestions |\n\n## Project Structure\n\n```\n.\n├── Cargo.toml                          Workspace root\n├── claude-rust/                        CLI binary\n│   └── src/\n│       ├── main.rs\n│       └── infrastructure/\n│           ├── app_loop.rs             Main REPL loop\n│           ├── skills.rs               Skill/command loader\n│           ├── command_handler.rs       Slash command dispatcher\n│           ├── command_extras/          Review, commit, export, memory\n│           ├── run_engine.rs            Engine runner with progress display\n│           ├── event_renderer/          Streaming event rendering\n│           └── terminal/\n│               ├── input.rs            Input box rendering\n│               ├── input_raw.rs        Raw mode input + clipboard\n│               ├── input_handler.rs    Key event processing + vi mode\n│               ├── input_suggest.rs    Command autocomplete\n│               ├── input_search.rs     History search (Ctrl+R)\n│               ├── input_select.rs     Interactive list picker\n│               ├── banner.rs           Startup banner\n│               └── system_prompt.rs    System prompt builder\n├── claude-rust-auth/                   Credential resolution\n│   └── src/\n│       ├── domain/credential.rs\n│       ├── application/resolve_credential.rs\n│       └── infrastructure/keychain_provider.rs\n├── claude-rust-config/                 Settings loading + merging\n│   └── src/\n│       ├── domain/config.rs            Settings, Hooks, Permissions structs\n│       └── application/load_config.rs  Global + project merge\n├── claude-rust-errors/\n│   └── src/lib.rs                      AppError, IntoResponse\n├── claude-rust-types/\n│   └── src/domain/\n│       ├── message.rs                  Message, ContentBlock, Conversation\n│       ├── tool.rs                     Tool trait, PermissionLevel\n│       ├── provider.rs                 Provider trait, StreamEvent\n│       └── permission.rs              PermissionChecker trait, AllowAll\n├── claude-rust-tools/\n│   └── src/\n│       ├── application/registry.rs     ToolRegistry\n│       └── infrastructure/\n│           ├── bash_tool.rs            Shell execution\n│           ├── read_tool.rs            File reading\n│           ├── file_write_tool.rs      File creation\n│           ├── file_edit_tool.rs       Find-and-replace editing\n│           ├── glob_tool.rs            File pattern matching\n│           ├── grep_tool.rs            Content search\n│           ├── web_fetch_tool.rs       URL fetching\n│           ├── web_search_tool.rs      Web search\n│           ├── ask_user_tool.rs        Interactive questions\n│           ├── todo_write_tool.rs      Task management\n│           ├── todo_read_tool.rs       Task reading\n│           ├── plan_mode_tool.rs       Plan mode enter/exit\n│           ├── mcp_tool.rs             MCP external tools\n│           └── todo_store.rs           Task state store\n├── claude-rust-provider/\n│   └── src/infrastructure/\n│       ├── anthropic_provider.rs       Streaming client + thinking\n│       ├── request_builder.rs          API request serialization\n│       └── sse_parser.rs              Server-sent events parser\n├── claude-rust-engine/\n│   └── src/application/\n│       ├── query_engine.rs             Agentic tool-use loop\n│       ├── tool_executor.rs            Permission-checked execution\n│       ├── hook_runner.rs              Pre/Post tool hooks\n│       └── undo.rs                     File edit undo stack\n├── claude-rust-permission/\n│   └── src/infrastructure/\n│       ├── config_aware_checker.rs     Config + skill-scoped permissions\n│       └── terminal_checker.rs         Interactive y/n prompts\n├── claude-rust-compact/                Conversation compaction pipeline\n│   └── src/\n│       ├── lib.rs                      CompactionPipeline (4-stage)\n│       ├── auto_compact.rs             Token threshold check\n│       ├── micro_compact.rs            Truncate oversized tool results\n│       ├── session_memory_compact.rs   Extract key memories before discard\n│       ├── full_compact.rs             Provider-based summarization\n│       ├── grouping.rs                 MessageGroup utilities\n│       └── prompt.rs                   Compaction prompt templates\n├── claude-rust-services/               Platform services\n│   └── src/\n│       ├── analytics/                  Usage analytics\n│       ├── notifications/              System notifications\n│       ├── lsp/                        LSP integration\n│       ├── token_estimation/           Token counting utilities\n│       ├── tool_use_summary/           Tool call summarization\n│       ├── rate_limit/                 API rate limiting\n│       ├── prevent_sleep/              System sleep prevention\n│       ├── plugin_registry/            Plugin management\n│       ├── session_memory/             In-memory session state\n│       └── diagnostics/               Health diagnostics\n├── claude-rust-memory/\n│   └── src/\n│       ├── domain/session_repository.rs\n│       ├── application/{save,load}_session.rs\n│       └── infrastructure/file_session_repository.rs\n├── claude-rust-commands/\n│   └── src/\n│       ├── domain/command.rs           SlashCommand enum\n│       ├── application/\n│       │   ├── parse_command.rs\n│       │   ├── execute_command.rs\n│       │   └── expand_references.rs    @file and image expansion\n│       ├── infrastructure/handlers/\n│       └── tests/\n└── claude-rust-server/\n    └── src/\n        ├── main.rs\n        └── infrastructure/http/\n            ├── routes.rs\n            ├── handlers.rs\n            └── dto.rs\n```\n\n### Dependency DAG\n\n```\nclaude-rust-errors\n  \u003c- claude-rust-types\n       \u003c- claude-rust-tools\n       \u003c- claude-rust-permission\n  \u003c- claude-rust-auth\n       \u003c- claude-rust-provider\n  \u003c- claude-rust-config\n  \u003c- claude-rust-memory\n  \u003c- claude-rust-compact\n  \u003c- claude-rust-services\n  \u003c- claude-rust-commands\n            \u003c- claude-rust-engine\n                 \u003c- claude-rust (CLI)\n                 \u003c- claude-rust-server\n```\n\n## Building\n\n```bash\ncargo build --workspace\ncargo build --workspace --release\ncargo test --workspace\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaulanasdqn%2Fclaude-rust","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaulanasdqn%2Fclaude-rust","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaulanasdqn%2Fclaude-rust/lists"}