This replaces the single default pricing assumption with a small model-aware pricing table for Sonnet, Opus, and Haiku so CLI usage output better matches the selected model. Unknown models still fall back cleanly with explicit labeling.
The change keeps pricing lightweight and local while improving the usefulness of usage/cost reporting for resumed sessions and live turns.
Constraint: Keep pricing local and dependency-free
Constraint: Preserve graceful fallback behavior for unknown model IDs
Rejected: Add a remote pricing source now | unnecessary coupling and risk for this slice
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: If pricing tables expand later, prefer explicit model-family matching and keep fallback labeling visible
Tested: cargo fmt; cargo clippy --all-targets --all-features -- -D warnings; cargo test -q
Not-tested: Validation against live provider billing exports
This adds a dedicated session inspect command to the Rust CLI so users can inspect a saved session's path, timestamps, size, token totals, preview text, and latest user/assistant context without opening the underlying file by hand.
It builds directly on the new session list/resume flows and keeps the UX lightweight and script-friendly.
Constraint: Keep session inspection CLI-native and read-only
Constraint: Reuse the existing saved-session format instead of introducing a secondary index format
Rejected: Add an interactive session browser now | more overhead than needed for this inspect slice
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep session inspection output stable and grep-friendly so it remains useful in scripts
Tested: cargo fmt; cargo clippy --all-targets --all-features -- -D warnings; cargo test -q
Not-tested: Manual inspection against a large corpus of real saved sessions
This adds a prompt-mode permission flow for the Rust CLI, surfaces permission policy details in the REPL, and improves tool output rendering with concise human-readable summaries before the raw JSON payload.
The goal is to make tool execution feel safer and more legible without changing the underlying runtime loop or adding a heavyweight UI layer.
Constraint: Keep the permission UX terminal-native and incremental
Constraint: Preserve existing allow and read-only behavior while adding prompt mode
Rejected: Build a full-screen interactive approval UI now | unnecessary complexity for this parity slice
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep raw tool JSON available even when adding richer summaries so debugging fidelity remains intact
Tested: cargo fmt; cargo clippy --all-targets --all-features -- -D warnings; cargo test -q
Not-tested: Manual prompt-mode approvals against live API-driven tool calls
This adds a lightweight session home for the Rust CLI, auto-persists REPL state, and exposes list, search, show, and named resume flows so users no longer need to remember raw JSON paths.
The change keeps the old --resume SESSION.json path working while adding friendlier session discovery. It also makes API env-based tests hermetic so workspace verification remains stable regardless of shell environment.
Constraint: Keep session UX incremental and CLI-native without introducing a new database or TUI layer
Constraint: Preserve backward compatibility for the existing --resume SESSION.json workflow
Rejected: Build a richer interactive picker now | higher implementation cost than needed for this parity slice
Confidence: high
Scope-risk: moderate
Reversibility: clean
Directive: Keep human-friendly session lookup additive; do not remove explicit path-based resume support
Tested: cargo fmt; cargo clippy --all-targets --all-features -- -D warnings; cargo test -q
Not-tested: Manual multi-session interactive REPL behavior across multiple terminals
This adds token and estimated cost reporting to runtime usage tracking and surfaces it in the CLI status and turn output. It also upgrades compaction summaries so users see a clearer resumable summary and token savings after /compact.
The verification path required cleaning existing workspace clippy and test friction in adjacent crates so cargo fmt, cargo clippy -D warnings, and cargo test succeed from the Rust workspace root in this repo state.
Constraint: Keep the change incremental and user-visible without a large CLI rewrite
Constraint: Verification must pass with cargo fmt, cargo clippy --all-targets --all-features -- -D warnings, and cargo test
Rejected: Implement a full model-pricing table now | would add more surface area than needed for this first UX slice
Confidence: high
Scope-risk: moderate
Reversibility: clean
Directive: If pricing becomes model-specific later, keep the current estimate labeling explicit rather than implying exact billing
Tested: cargo fmt; cargo clippy --all-targets --all-features -- -D warnings; cargo test -q
Not-tested: Live Anthropic API interaction and real streaming terminal sessions
Wire the CLI to the Anthropic client, runtime conversation loop, and MVP in-tree tool executor so prompt mode and the default REPL both execute real turns instead of scaffold-only commands.
Constraint: Proxy auth uses ANTHROPIC_AUTH_TOKEN as the primary x-api-key source and may stream extra usage fields
Constraint: Must preserve existing scaffold commands while enabling real prompt and REPL flows
Rejected: Keep prompt mode on the old scaffold path | does not satisfy end-to-end CLI requirement
Rejected: Depend solely on raw SSE message_stop from proxy | proxy/event differences required tolerant parsing plus fallback handling
Confidence: medium
Scope-risk: moderate
Reversibility: clean
Directive: Keep prompt mode tool-free unless the one-shot path is explicitly expanded and reverified against the proxy
Tested: cargo test -p api; cargo test -p tools; cargo test -p runtime; cargo test -p rusty-claude-cli; cargo build; cargo run -p rusty-claude-cli -- prompt "say hello"; printf '/quit\n' | cargo run -p rusty-claude-cli --
Not-tested: Full interactive tool_use roundtrip against the proxy in REPL mode