Five skills, real depth on each.
Start with ftc-team-config for anything code-related, it hands off to ftc-construct once your config is confirmed. Code review and code generation are different skills: something written from scratch never starts with ftc-code-review, whose job is code you already have.
ftc-team-config
Establishes and maintains a confirmed picture of the robot before any code generation. Doesn't write code itself, hands off to ftc-construct once confirmed. Runs a deterministic feature-vector extractor over your repo first (import signatures, hardware-map declarations, OpMode base classes), so inference fills in what code can prove before a single question gets asked. Drivetrain topology, the season's mechanism set, and the software stack always get asked and confirmed regardless of how good the inference looks, because a wrong guess there gates too much downstream.
ftc-construct
Writes new code, OpModes, subsystems, mechanism features, grounded in real library docs, the hardware catalog, and the pattern corpus. Reads the confirmed config by reference; if it isn't confirmed, hands back to ftc-team-config rather than generating against a guess. Every API call against a library the config selects gets checked against that library's actual fetched docs before being written. A corpus pattern only gets cited if its applicable_when genuinely matches the confirmed config, with confidence and provenance tags displayed exactly as stored, never inflated.
ftc-hardware-lookup
Answers spec and math questions, motor specs, gear ratios, part compatibility, encoder ticks, projectile trajectory, from structured catalog tables and deterministic scripts. Never from memory, even for a spec that sounds well-known. If a part isn't in the seeded catalog, the answer is an explicit abstention with the reason and a pointer to the manufacturer page, not a plausible-sounding guess. A hardcoded goBILDA wheel size, asked for during a real config session for this project, was deliberately not answered from a strongly-remembered number, it was looked up on the actual product page because no catalog entry existed to check it against.
ftc-rule-check
Delivers legal / illegal / ambiguous verdicts with citations verified against the tagged Competition Manual. Every verdict runs a freshness check first (flags if the corpus might be behind the live manual), then a rule lookup with one-hop cross-reference traversal, an explicit reasoning step from the retrieved text to a verdict, and a final citation-existence check. "Ambiguous" is a real, valid outcome, not a failure to decide.
ftc-code-review
Reviews code that already exists, deterministic anti-pattern linting plus structural review grounded in the pattern corpus. Does not write new code. Two linters (config_lint.py, failure_mode_lint.py) catch specific known-failure-mode patterns, stale mutable static state written from an OpMode lifecycle method, a mechanism referenced in code the confirmed config declares absent, at O(1) script-call cost. If a review question turns out to be a legality question in disguise, it's resolved through ftc-rule-check's own real flow, not approximated.