Repository navigation
Bevy support, a Claude Code vs Codex benchmark, and every Rust example compiled in CI. Thanks to @tmchow and @DylanCosto for their pull requests, and to @millionart for proposing Bevy support.
Bevy support
A new Bevy 0.20 reference teaches the skills which general Rust rules don't fit Bevy systems (by-value system parameters, the prelude, plain-data components, complex queries) and which ECS bugs compile cleanly but fail at runtime: two queries that can reach the same component mutably (a B0001 panic on the first frame), systems with no order between them, deferred Commands read back too early, and unwrapped single() calls. It also lists the four lint allows a Bevy crate needs. Every behavior it describes was confirmed with a test on bevy 0.20.0. Two new eval cases cover it: a review of a combat plugin with planted bugs, and a feature added to the fixed plugin.
Claude Code vs Codex, with and without the skills
All eight eval cases ran on Claude Code (Opus 5.5) and Codex CLI (default model), with and without the skills, graded blind:
| Without skills | With skills | |
|---|---|---|
| Claude Code | 72/85 (85%) | 80/85 (94%) |
| Codex CLI | 53/85 (62%) | 76/85 (89%) |
The biggest gains were in code review. It's one run per setup, and one case got worse with the skills; the benchmark page has the method, the caveats, and every graded assertion.
Every Rust example is compiled
scripts/check-examples.py compiles every Rust code block in the skills, the reference guides, and the README on every pull request, and reports a broken one at its markdown line. The agent copies these examples into real code, so now they have to build. Contributed by @tmchow in #4.
New rules and lints
- Application code takes
Stringor&strrather thanimpl Into<String>, and library code returns an iterator rather than aVeccollected only to return it.rust-reviewflags both. From the Google Rust Style Guide; contributed by @tmchow in #9. - Two more lints:
missing_assert_messageandexhaustive_enums(libraries only). Contributed by @tmchow in #8. - Framework preludes such as
use bevy::prelude::*are now allowed by the no-globs rule.
Fixed
- The skill paired
getwithget_uncheckedas a safe API and its panicking twin, but an out-of-boundsget_uncheckedis undefined behavior. It now pairsv[i]withv.get(i). Reported and fixed by @DylanCosto in #3 and #6.
Full details are in the changelog. Update a Claude Code install with claude plugin update beautiful-rust; for other agents, re-run your install command.