Scope: read-only comparison between the original TypeScript source at /home/bellman/Workspace/claude-code/src/ and the Rust port under rust/crates/.
Method: compared feature surfaces, registries, entrypoints, and runtime plumbing only. No TypeScript source was copied.
The Rust port has a good foundation for:
It is not feature-parity with the TypeScript CLI.
Largest gaps:
Evidence:
src/tools/ contains broad tool families including AgentTool, AskUserQuestionTool, BashTool, ConfigTool, FileReadTool, FileWriteTool, GlobTool, GrepTool, LSPTool, ListMcpResourcesTool, MCPTool, McpAuthTool, ReadMcpResourceTool, RemoteTriggerTool, ScheduleCronTool, SkillTool, Task*, Team*, TodoWriteTool, ToolSearchTool, WebFetchTool, WebSearchTool.src/services/tools/StreamingToolExecutor.ts, src/services/tools/toolExecution.ts, src/services/tools/toolHooks.ts, and src/services/tools/toolOrchestration.ts.Evidence:
rust/crates/tools/src/lib.rs via mvp_tool_specs().rust/crates/tools/src/lib.rs and rust/crates/runtime/src/conversation.rs.AskUserQuestionTool, LSPTool, ListMcpResourcesTool, MCPTool, McpAuthTool, ReadMcpResourceTool, RemoteTriggerTool, ScheduleCronTool, Task*, Team*, and several workflow/system tools.Status: partial core only.
Evidence:
src/commands/hooks/.src/services/tools/toolHooks.ts and src/services/tools/toolExecution.ts.PreToolUse, PostToolUse, and broader hook-driven behaviors configured through settings and documented in src/skills/bundled/updateConfig.ts.Evidence:
rust/crates/runtime/src/config.rs.rust/crates/commands/src/lib.rs and rust/crates/rusty-claude-cli/src/main.rs.rust/crates/runtime/src/prompt.rs.rust/crates/runtime/src/conversation.rs./hooks parity command.Status: config-only; runtime behavior missing.
Evidence:
src/plugins/builtinPlugins.ts and src/plugins/bundled/index.ts.src/services/plugins/PluginInstallationManager.ts and src/services/plugins/pluginOperations.ts.src/commands/plugin/ and src/commands/reload-plugins/.Evidence:
rust/crates/./plugin or /reload-plugins parity.Status: missing.
Evidence:
src/skills/loadSkillsDir.ts, src/skills/bundledSkills.ts, and src/skills/mcpSkillBuilders.ts.src/skills/bundled/.src/commands/skills/.Evidence:
Skill tool in rust/crates/tools/src/lib.rs resolves and reads local SKILL.md files.rust/crates/runtime/src/prompt.rs./memory and /init via rust/crates/commands/src/lib.rs and rust/crates/rusty-claude-cli/src/main.rs./skills command.Status: basic local skill loading only.
Evidence:
src/commands/ including agents, hooks, mcp, memory, model, permissions, plan, plugin, resume, review, skills, tasks, and many more.src/cli/structuredIO.ts, src/cli/remoteIO.ts, and src/cli/transports/*.src/cli/handlers/*.Evidence:
rust/crates/commands/src/lib.rs.help, status, compact, model, permissions, clear, cost, resume, config, memory, init, diff, version, export, session.rust/crates/rusty-claude-cli/src/main.rs./agents, /hooks, /mcp, /plugin, /skills, /plan, /review, /tasks, and many others.Status: functional local CLI core, much narrower than TS.
Evidence:
src/assistant/sessionHistory.ts.src/services/tools/StreamingToolExecutor.ts, src/services/tools/toolExecution.ts, src/services/tools/toolOrchestration.ts.src/cli/structuredIO.ts and src/cli/remoteIO.ts.Evidence:
rust/crates/runtime/src/conversation.rs.rust/crates/rusty-claude-cli/src/main.rs.rust/crates/runtime/src/session.rs.Status: strong core loop, missing orchestration layers.
Evidence:
src/services/api/*.src/services/oauth/*.src/services/mcp/*.src/services/*.Evidence:
rust/crates/api/src/{client,error,sse,types}.rs.rust/crates/runtime/src/oauth.rs.rust/crates/runtime/src/{config,mcp,mcp_client,mcp_stdio}.rs.rust/crates/runtime/src/usage.rs.rust/crates/runtime/src/remote.rs.Status: core foundation exists; broader service ecosystem missing.
rust/crates/rusty-claude-cli/src/main.rs now constructs prompt mode with LiveCli::new(model, true, ...).DangerFullAccess in rust/crates/rusty-claude-cli/src/main.rs.DangerFullAccess in rust/crates/rusty-claude-cli/src/args.rs.dontAsk in rust/crates/rusty-claude-cli/src/init.rs.{} tool-input prefix bug
rust/crates/rusty-claude-cli/src/main.rs now strips the initial empty object only for streaming tool input, while preserving legitimate {} in non-stream responses.rust/crates/runtime/src/conversation.rs with usize::MAX.