AI-powered adaptive Rust practice — based on your own codebase.
rust-dojo scans your local Rust projects, picks real code snippets, and asks you to:
- Read and explain — understand a specific mechanism in the code
- Apply it — solve a classic related problem in Rust
Difficulty adapts automatically based on your answers (1–5 stars).
╔══════════════════════════════════════════════════╗
║ Rust Adaptive Quiz System ║
║ q to quit | s to show progress ║
╚══════════════════════════════════════════════════╝
Scanned 312 local code snippets.
#1 [Iterator & Collections] ★☆☆☆☆
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// from scanner/mod.rs, lines 17-38
fn collect_rs_files(dir: &Path, snippets: &mut Vec<CodeSnippet>) {
let Ok(entries) = std::fs::read_dir(dir) else { return };
for entry in entries.flatten() { ... }
}
Why does `.flatten()` appear here? What would happen without it?
Additionally, implement a function that walks a directory and
returns all .toml file paths.
- Rust (stable)
- An API key: OpenAI / Anthropic / any OpenAI-compatible relay
1. Create config file
mkdir -p ~/.config/rust-dojo
cp config.example.toml ~/.config/rust-dojo/config.tomlEdit ~/.config/rust-dojo/config.toml:
# Required
api_key = "sk-ant-..."
# Optional: Rust projects to scan for questions
scan_dirs = [
"~/projects/my-app",
"~/projects/another-crate",
]
# Optional: where quiz files and session.json are stored
# Default: ~/.local/share/rust-dojo/quiz
# quiz_dir = "~/.local/share/rust-dojo/quiz"
# Optional: zh or en (default: auto-detect from system locale)
# lang = "en"
# Optional: override API endpoint and model
# api_base_url = "https://your-relay-endpoint"
# api_model = "claude-sonnet-4-6"Without scan_dirs, the system generates generic Rust questions.
api_key can also be set via environment variable API_KEY or ANTHROPIC_API_KEY.
2. Run
cargo run --releaseStart
└─ Load session.json
└─ Scan local .rs files → code snippets
└─ Loop:
├─ Pick a snippet (70%) or generic question (30%)
├─ AI generates question → written to ~/.local/share/rust-dojo/quiz/00N_topic.rs
├─ You edit the file:
│ /* Explanation: your analysis */
│ fn main() { /* your code */ }
├─ Press Enter → AI evaluates → score + feedback appended to file
└─ Difficulty: 2 correct → +1★ 2 wrong → -1★
Session progress is saved to session.json inside quiz_dir and resumes on next run.
All settings live in ~/.config/rust-dojo/config.toml. See config.example.toml for the full reference.
| Key | Default | Description |
|---|---|---|
api_key |
— | Required. API key (or env API_KEY) |
api_base_url |
Auto-detected | API endpoint |
api_model |
Auto-detected | Model name |
lang |
System locale | en or zh |
scan_dirs |
[] |
Rust project paths to scan |
quiz_dir |
~/.local/share/rust-dojo/quiz |
Quiz files + session.json location |
MIT