claude-code-rust 0.3.0

A native Rust terminal interface for Claude Code
Documentation
# Contributing to claude_rust

Thank you for considering contributing to claude_rust! This document provides
guidelines and information for contributors.

## Code of Conduct

This project follows the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md).
By participating, you agree to uphold this code.

## How to Contribute

### Reporting Bugs

- Use the [Bug Report]../../issues/new?template=bug_report.yml issue template
- Include reproduction steps, expected vs actual behavior, and environment details
- Run with `RUST_LOG=debug` and include relevant log output

### Suggesting Features

- Use the [Feature Request]../../issues/new?template=feature_request.yml template
- Check existing issues and discussions first
- Describe the problem being solved, not just the desired solution

### Submitting Code

1. Fork the repository
2. Create a feature branch from `main`: `git checkout -b feat/my-feature`
3. Make your changes following the coding standards below
4. Add or update tests as appropriate
5. Ensure all checks pass:
   ```bash
   cargo fmt --all -- --check
   cargo clippy --all-targets --all-features -- -D warnings
   cargo test --all-features
   ```
6. Commit using [Conventional Commits]https://www.conventionalcommits.org/:
   ```
   feat: add keyboard shortcut for tool collapse
   fix: prevent panic on empty terminal output
   ```
7. Push to your fork and open a Pull Request against `main`
8. Fill out the PR template completely

## Development Setup

```bash
# Prerequisites
# - Rust 1.88.0+ (install via https://rustup.rs)
# - Node.js 18+ (for the ACP adapter)
# - npx (included with Node.js)

# Clone and build
git clone https://github.com/srothgan/claude-code-rust.git
cd claude_rust
cargo build

# Run
cargo run

# Run with debug logging
RUST_LOG=debug cargo run

# Run tests
cargo test

# Check formatting
cargo fmt --all -- --check

# Run lints
cargo clippy --all-targets --all-features -- -D warnings
```

## Coding Standards

- **Formatting**: Use `rustfmt` (configured via `rustfmt.toml`)
- **Linting**: `cargo clippy` must pass with zero warnings (configured via `clippy.toml` and `Cargo.toml` `[lints.clippy]`)
- **Naming**: Follow [Rust API Guidelines]https://rust-lang.github.io/api-guidelines/naming.html
- **Error handling**: Use `thiserror` for library errors, `anyhow` in main/app
- **Comments**: Only where the logic isn't self-evident
- **License headers**: Every new `.rs` file must include the AGPL-3.0 header

## Architecture

See [detailed-plan.md](notes/detailed-plan.md) for the full architecture and implementation plan.

Key architectural decisions:
- ACP futures are `!Send` - all ACP code runs in `tokio::task::LocalSet`
- UI and ACP communicate via `tokio::sync::mpsc` channels
- The TUI uses Ratatui with Crossterm backend (cross-platform)

## License

By contributing, you agree that your contributions will be licensed under the
AGPL-3.0-or-later license, the same license as the project.