From beagle-rust
Reviews Rust serde serialization code for derive patterns, enum representations, custom implementations, and common bugs. Use when reviewing code with serde, serde_json, toml, or serde formats.
npx claudepluginhub existential-birds/beagle --plugin beagle-rustThis skill uses the workspace's default tool permissions.
1. **Check Cargo.toml** — Note serde features (`derive`, `rc`) and format crates (`serde_json`, `toml`, `bincode`, etc.)
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
derive, rc) and format crates (serde_json, toml, bincode, etc.)Serialize and Deserialize are derived appropriatelyReport findings as:
[FILE:LINE] ISSUE_TITLE
Severity: Critical | Major | Minor | Informational
Description of the issue and why it matters.
| Issue Type | Reference |
|---|---|
| Derive patterns, attribute macros, field configuration | references/derive-patterns.md |
| Custom Serialize/Deserialize, format-specific issues | references/custom-serialization.md |
#[derive(Serialize, Deserialize)] on types that cross serialization boundaries#[derive(Debug)] alongside serde derives (debugging serialization issues)#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]#[serde(rename_all = "...")] used consistently across the API#[serde(skip_serializing_if = "Option::is_none")] for optional fields (clean JSON output)#[serde(default)] for fields that should have fallback values during deserialization#[serde(rename = "...")] when Rust field names differ from wire format#[serde(flatten)] used judiciously (can cause key collisions)#[serde(deny_unknown_fields)] on types that need forward compatibility#[derive(sqlx::Type)] enums use consistent representation with serderename_all) and sqlx (rename_all)PartialEq derived for types with round-trip testsf64 → i64 in JSON numbers)Decimal used for money/precision-sensitive values, not f64#[serde(rename)] causing API-breaking field name changes#[serde(flatten)] causing silent key collisionsf64 precision loss for monetary values)rename_all across related types (confusing API)skip_serializing_if causing null/empty noise in outputdeny_unknown_fields on types consumed by evolving APIs (breaks forward compatibility)#[serde(default)] on required fields#[non_exhaustive] alongside serde for forward compatibility#[serde(untagged)] enums — Valid when discriminated by structure, not by tagserde_json::Value for dynamic data — Appropriate for truly schema-less fields#[serde(skip)] on computed fields — Correct for derived/cached values#[serde(with = "...")] for custom formats — Standard for dates, UUIDs, etc.Load and follow beagle-rust:review-verification-protocol before reporting any issue.