Hey! I'm Rémi. I built Anatoly, an AI agent that deep-audits your entire codebase in one command. It catches what linters miss: dead code, hidden duplications, correctness bugs, over-engineering, test gaps, and more. Every single finding is backed by evidence, not guesswork.
I ran a full audit on your project and here's what Anatoly found. I hope it helps! If anything catches your eye, I'd love to hear your thoughts.
41 files reviewed in 0 min — $0.00 in AI analysis so you don't have to.
Verdict: CRITICAL · 4 critical bugs found · 472 findings in 37 files
Axes
| Axis |
Health |
Findings |
Details |
| Correction |
🟩🟩🟩🟩🟩🟩🟩🟩🟩⬜ 86% OK |
39 high · 14 med |
View → |
| Utility |
🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩 99% used |
3 high · 1 med |
View → |
| Duplication |
🟩🟩🟩🟩🟩🟩🟩🟩🟩⬜ 94% unique |
13 high · 9 med |
View → |
| Overengineering |
🟩🟩🟩🟩🟩🟩🟩🟩🟩⬜ 93% lean |
1 high · 1 med |
View → |
| Tests |
🟥🟥🟥🟥⬜⬜⬜⬜⬜⬜ 39% covered |
48 high · 20 med · 162 low |
View → |
| Documentation |
🟨🟨🟨🟨🟨⬜⬜⬜⬜⬜ 52% documented |
24 high · 6 med · 121 low |
View → |
| Best Practices |
🟩🟩🟩🟩🟩🟩🟩🟩⬜⬜ avg 8.1 / 10 |
10 high |
View → |
Top Findings
🐛 Correction
- 🔴 rustguard-tun/src/xdp.rs
XdpSocket — Three correctness bugs found in impl methods. (1) tx_send (around L348-L352) calls copy_nonoverlapping with data.len(...
- 🟡 rustguard-core/src/replay.rs
ReplayWindow — The bit-level shift inside shift_window (lines 112-116) is inverted in both direction and iteration order, causing al...
- 🔴 rustguard-enroll/src/server.rs
run — Two correctness defects: (1) In the MSG_TRANSPORT handler, decrypt_buf is fixed at 2048 bytes, but `ct = &buf[TRANS...
- 🟡 rustguard-kmod/src/cookie.rs
hash — Line 49 passes chunks.len() as u32 as num_chunks to the C function, but the loop at line 44 uses .take(4) and p...
- 🟡 rustguard-cli/src/main.rs
cmd_serve — Two bugs: (1) The .filter(|v| !v.is_empty()) guard for --pool (L82), --token (L89), and --xdp (L99) only rejects empt...
Showing top 5 of 53 findings. View all Correction findings →
♻️ Utility
- rustguard-enroll/src/packet.rs
parse_eth_udp — Exported function with 0 workspace importers per pre-computed analysis. Matches rule 2: exported symbol with 0 runtim...
- rustguard-kmod/src/replay.rs
ReplayWindow — Exported pub(crate) struct with 0 workspace importers per Pre-computed Import Analysis.
- rustguard-enroll/src/packet.rs
ParsedUdp — Exported struct with 0 workspace importers per pre-computed analysis. Matches rule 2: exported symbol with 0 runtime ...
Showing top 3 of 4 findings. View all Utility findings →
📋 Duplication
- rustguard-tun/src/linux_mq.rs
set_name — Identical to linux.rs version - copies string bytes to fixed buffer with length constraint
- rustguard-tun/src/linux_mq.rs
make_sockaddr_in — Identical to linux.rs version - creates sockaddr_in struct with identical field initialization
- rustguard-tun/src/linux_mq.rs
close_and_error — Identical to linux.rs version - captures OS error, closes fd, returns error in same sequence
- rustguard-enroll/src/client.rs
rand_index — Identical implementation — both generate random u32 via getrandom and le_bytes conversion. Score 0.965 with same-crat...
- rustguard-enroll/src/client.rs
base64_key — Identical implementation — both encode 32-byte key to base64 string using BASE64_STANDARD. Score 0.994 indicates near...
Showing top 5 of 22 findings. View all Duplication findings →
🏗️ Overengineering
- rustguard-daemon/src/tunnel.rs
ctrlc_handler — NIH reimplementation of what the ctrlc crate (~5M weekly downloads) provides in two lines. Uses raw unsafe libc (si...
Showing top 1 of 2 findings. View all Overengineering findings →
🧪 Tests
- rustguard-enroll/src/control.rs
new_window — No test file exists for control.rs. new_window has no tests whatsoever.
- rustguard-tun/src/xdp.rs
XdpSocket — Central AF_XDP socket struct with complex unsafe lifecycle methods (create, rx_poll, rx_release, tx_send, tx_complete...
- rustguard-core/src/cookie.rs
CookieChecker — Inline tests cover create_reply, verify_mac2, and the wrong-source failure case. However, verify_mac1 is never tested...
- rustguard-core/src/cookie.rs
CookieState — new, process_reply (happy path and wrong-mac1 failure), compute_mac2 (with and without cookie) are all tested. Howeve...
- rustguard-enroll/src/server.rs
ServeConfig — No test file exists for server.rs. ServeConfig is a public struct but has no test coverage. Types/structs with no run...
Showing top 5 of 230 findings. View all Tests findings →
📝 Documentation
- rustguard-daemon/src/config.rs
InterfaceConfig — Public struct with no /// doc comment on the type or on any of its five public fields (private_key, listen_port...
- rustguard-daemon/src/config.rs
PeerConfig — Public struct with no /// doc comment on the type or on any of its five public fields. Fields like preshared_key ...
- rustguard-enroll/src/control.rs
new_window — No /// doc comment on the function itself. The EnrollmentWindow type alias above has docs, but the constructor fu...
- rustguard-tun/src/xdp.rs
XdpSocket — Public struct. Has a two-line type-level /// doc comment describing purpose and zero-copy role. Only one field (`fr...
- rustguard-core/src/cookie.rs
COOKIE_LEN — Public constant has /// Cookie size. — present but trivially terse. Does not state the unit (bytes), no context on ...
Showing top 5 of 151 findings. View all Documentation findings →
✅ Best Practices
✨ CLEAN — Only low-confidence findings.
Documentation Coverage
Measures inline doc comments (/// in Rust, /** */ in JS/TS, docstrings in Python) on exported symbols.
Anatoly also generates reference pages in .anatoly/docs/ for every reviewed module.
| Metric |
Coverage |
Description |
| Complete doc comments |
🟥⬜⬜⬜⬜⬜⬜⬜⬜⬜ 12% (16/137) |
Exported symbols with a complete inline doc comment covering description, params, and return |
| Any doc comment |
🟨🟨🟨🟨🟨🟨🟨🟨⬜⬜ 77% (106/137) |
Exported symbols with at least a partial inline doc comment |
| Module guides |
🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩 100% (7/7) |
Modules > 200 LOC with a dedicated page in docs/ |
| Reference pages |
36 pages |
Anatoly-generated module and API reference pages |
No docs/ directory found. Copy .anatoly/docs/ to docs/ to adopt the generated documentation and speed up future Anatoly runs.
Gaps: 1 pages to create.
📚 Documentation
Anatoly generated a complete documentation for this project during the audit.
Browse the documentation →
View full report
Generated by Anatoly — Deep Audit Agent for codebases
Hey! I'm Rémi. I built Anatoly, an AI agent that deep-audits your entire codebase in one command. It catches what linters miss: dead code, hidden duplications, correctness bugs, over-engineering, test gaps, and more. Every single finding is backed by evidence, not guesswork.
I ran a full audit on your project and here's what Anatoly found. I hope it helps! If anything catches your eye, I'd love to hear your thoughts.
Axes
Top Findings
🐛 Correction
XdpSocket— Three correctness bugs found in impl methods. (1) tx_send (around L348-L352) calls copy_nonoverlapping with data.len(...ReplayWindow— The bit-level shift inside shift_window (lines 112-116) is inverted in both direction and iteration order, causing al...run— Two correctness defects: (1) In the MSG_TRANSPORT handler,decrypt_bufis fixed at 2048 bytes, but `ct = &buf[TRANS...hash— Line 49 passeschunks.len() as u32asnum_chunksto the C function, but the loop at line 44 uses.take(4)and p...cmd_serve— Two bugs: (1) The .filter(|v| !v.is_empty()) guard for --pool (L82), --token (L89), and --xdp (L99) only rejects empt...♻️ Utility
parse_eth_udp— Exported function with 0 workspace importers per pre-computed analysis. Matches rule 2: exported symbol with 0 runtim...ReplayWindow— Exported pub(crate) struct with 0 workspace importers per Pre-computed Import Analysis.ParsedUdp— Exported struct with 0 workspace importers per pre-computed analysis. Matches rule 2: exported symbol with 0 runtime ...📋 Duplication
set_name— Identical to linux.rs version - copies string bytes to fixed buffer with length constraintmake_sockaddr_in— Identical to linux.rs version - creates sockaddr_in struct with identical field initializationclose_and_error— Identical to linux.rs version - captures OS error, closes fd, returns error in same sequencerand_index— Identical implementation — both generate random u32 via getrandom and le_bytes conversion. Score 0.965 with same-crat...base64_key— Identical implementation — both encode 32-byte key to base64 string using BASE64_STANDARD. Score 0.994 indicates near...🏗️ Overengineering
ctrlc_handler— NIH reimplementation of what thectrlccrate (~5M weekly downloads) provides in two lines. Uses raw unsafe libc (si...🧪 Tests
new_window— No test file exists for control.rs. new_window has no tests whatsoever.XdpSocket— Central AF_XDP socket struct with complex unsafe lifecycle methods (create, rx_poll, rx_release, tx_send, tx_complete...CookieChecker— Inline tests cover create_reply, verify_mac2, and the wrong-source failure case. However, verify_mac1 is never tested...CookieState— new, process_reply (happy path and wrong-mac1 failure), compute_mac2 (with and without cookie) are all tested. Howeve...ServeConfig— No test file exists for server.rs. ServeConfig is a public struct but has no test coverage. Types/structs with no run...📝 Documentation
InterfaceConfig— Public struct with no///doc comment on the type or on any of its five public fields (private_key,listen_port...PeerConfig— Public struct with no///doc comment on the type or on any of its five public fields. Fields likepreshared_key...new_window— No///doc comment on the function itself. TheEnrollmentWindowtype alias above has docs, but the constructor fu...XdpSocket— Public struct. Has a two-line type-level///doc comment describing purpose and zero-copy role. Only one field (`fr...COOKIE_LEN— Public constant has/// Cookie size.— present but trivially terse. Does not state the unit (bytes), no context on ...✅ Best Practices
✨ CLEAN — Only low-confidence findings.
Documentation Coverage
Measures inline doc comments (
///in Rust,/** */in JS/TS, docstrings in Python) on exported symbols.Anatoly also generates reference pages in
.anatoly/docs/for every reviewed module.Gaps: 1 pages to create.
📚 Documentation
Anatoly generated a complete documentation for this project during the audit.
Browse the documentation →
View full report
Generated by Anatoly — Deep Audit Agent for codebases