ワンクリックで
api-review
Load before any API or CLI interface review. Required by the api-reviewer agent — covers REST naming, HTTP semantics, error consistency, breaking changes, CLI conventions, pagination, auth, and a three-tier severity model.
メニュー
Load before any API or CLI interface review. Required by the api-reviewer agent — covers REST naming, HTTP semantics, error consistency, breaking changes, CLI conventions, pagination, auth, and a three-tier severity model.
Load before planning or routing any task. Required by mission-control — maps task archetypes to ordered sequences of specialist agents, with handoff context and success criteria for each step.
Load before reviewing any phase. Required by all internal reviewer agents — covers adversarial review philosophy, the approve/reject verdict contract, and escalation policy.
Load when operating as a sub-agent invoked via the agent tool — covers handoff mode detection, autonomous execution, clarification protocol, and the minimum completion report contract.
Load before running a comprehensive review. Covers scope resolution, pre-flight tool checks, parallel specialist dispatch, synthesis, and output format.
Recipe reference for installing tools in the container environment. Used by bootstrap and specialist reviewer agents to look up the correct install command for any tool.
Load before any code review. Required by the reviewer agent — covers what to examine, smell categories, complexity thresholds, dead code signals, and a three-tier severity model.
| name | api-review |
| description | Load before any API or CLI interface review. Required by the api-reviewer agent — covers REST naming, HTTP semantics, error consistency, breaking changes, CLI conventions, pagination, auth, and a three-tier severity model. |
| license | AGPL-3.0-or-later |
| allowed-tools | read |
An API is a contract. Once callers depend on it, changes are costly. Review API changes with that permanence in mind. Apply this skill to REST HTTP APIs and CLI interfaces. The standards differ in form but share the same underlying goal: a predictable, consistent contract that callers can rely on.
/users, /orders/:id, not /getUser, /createOrder./users, not /user./users/:id/orders, not /userOrders?userId=.camelCase, snake_case, kebab-case) and apply it uniformly across all endpoints in the API./orders/:id/cancellations, not /cancelOrder).--kebab-case: --output-format, not --outputFormat or --output_format.-o, -v. Reserve them for the most commonly used flags.--output sets the output file in one command, it should mean the same thing in all commands. Do not reuse flag names for different purposes.<noun> <verb> or <verb> <noun> convention applied consistently: either app deploy everywhere or deploy app everywhere, not mixed.--verbose, --force, --dry-run. Avoid negated flag names like --no-verify as the only option — provide both when ambiguity exists.Using the wrong HTTP method breaks caching, idempotency guarantees, and client expectations.
| Method | Safe? | Idempotent? | Correct use |
|---|---|---|---|
| GET | Yes | Yes | Retrieve a resource or collection; must not mutate state |
| HEAD | Yes | Yes | Same as GET but response body omitted; for metadata checks |
| POST | No | No | Create a new resource; submit data for processing |
| PUT | No | Yes | Replace a resource in full at a known URI |
| PATCH | No | No* | Apply a partial update to a resource; only changed fields |
| DELETE | No | Yes | Remove a resource; repeated calls must return 204 or 404, not 500 |
*PATCH is not inherently idempotent but should be designed to be so when possible.
Common violations:
Callers integrate against your error responses exactly as they do your success responses. Inconsistency forces callers to write special-case handling.
{ "error": { "code": "...", "message": "...", "details": [...] } }. A mix of { "error": "..." } and { "message": "..." } breaks callers."code": "INVALID_EMAIL") alongside the human-readable message. This allows callers to handle specific errors programmatically without parsing message text.A breaking change is any change that causes an existing, correctly-written caller to fail or behave incorrectly without modification.
/v1/, /v2/): explicit, cacheable, easy to route; deprecated versions visible.Accept: application/vnd.api+json;version=2): clean URLs; harder to test in a browser.?version=2): simple but pollutes query strings.Whichever strategy is used must be applied consistently across the entire API.
0: success.0 on a failure. Do not exit with a non-zero code on success.stdout: the output of a successful operation. This is what gets piped, redirected, or processed by callers.stderr: error messages, warnings, progress indicators, diagnostics. These must not go to stdout.--timeout duration request timeout (default: 30s).--help and -h on every subcommand.cursor or next_token returned in the response body and passed back as a parameter in the next request. Stable under concurrent writes; does not skip or duplicate items.page and per_page or offset and limit. Simple to implement; can skip or duplicate items when the collection is modified between pages.total_count field is useful but must not be required for callers to determine whether more pages exist — use a has_more boolean or a next_cursor that is absent when the final page is reached./internal/ or /debug/ that skips the auth middleware is an access control vulnerability. See /security-review for the security dimension.Apply the general contract checks above first, then use the dominant framework conventions for the language in use.
req.body access is a contract risk.ProblemDetails consistently across endpoints..proto files are the primary contract; for REST wrappers, confirm that route naming and error payloads are documented because framework conventions are weaker than in higher-level stacks.net/http, chi, gin, and echo handlers should keep route patterns, status codes, and JSON field naming consistent across packages.IntoResponse implementations often create inconsistent payloads.Use the framework's documented contract conventions where they exist, and fall back to the core checks in this skill: stable naming, predictable status codes, explicit versioning, and consistent error envelopes.
edges, node, cursor, pageInfo) for client compatibility.!) makes schema evolution breaking.@deprecated(reason: "...") instead of removing fields — removal is a breaking change.errors array, which conflates expected failures with server errors..proto file is a breaking wire change — existing serialised messages will misread the field.reserved for removed fields: when removing a field, mark the tag and name as reserved to prevent future reuse.int32 → int64 is a breaking wire change in some language implementations despite appearing safe — use google.protobuf.Int64Value wrapper for optional integers.google.protobuf.Timestamp over custom date representations; FieldMask for partial updates; Duration for time spans.domain.entity.event) — inconsistent naming makes consumer discovery and filtering unreliable.message_id for consumer-side deduplication.X-Hub-Signature-256 or equivalent) and a replay-protection timestamp — consumers must verify both before processing.X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset and Retry-After on 429 responses.Idempotency-Key header and return the same response for duplicate requests within a window.ETag + If-Match / If-None-Match for optimistic concurrency and 304 Not Modified for caching.Cache-Control directives — an absent header means the response is potentially cached indefinitely by intermediaries.Signal: a new endpoint that introduces Level 0 or Level 1 behaviour in an otherwise Level 2 API is a Recommendation finding.
The API contract is incorrect or will cause integration failures. Must not be merged.
Examples: a breaking change with no version bump; an endpoint that returns 200 with an error body; missing auth on a sensitive endpoint.
The API works but has consistency or usability problems that will affect callers and accumulate as technical debt.
Examples: inconsistent error response shape; wrong HTTP verb; pagination missing from an unbounded collection endpoint; flag naming inconsistency in CLI.
Minor or informational. Low priority.
Examples: a response field that could be named more clearly; a help text entry missing a default value; an opportunity to add a machine-readable error code.
Group findings by severity (Blocking first). For each finding:
**[SEVERITY] location** (file:line or endpoint or command)
Description: what the issue is.
Why it matters: the consequence for callers or integrators.
Direction: the general approach to resolution — not an implementation.
Do not write implementation code. Provide direction, not implementation. If no findings exist in a severity tier, omit that tier.