MCPInstall

adk-review

Reviews the uncommitted changes in an adk-python working tree and reports correctness, design, public-API stability, test, sample and documentation gaps as a prioritized findings report, fixing them only when asked. Use when the user asks to review local changes, wants a self-review before opening a pull request, asks whether a change breaks the public API or needs tests, samples or docs, or asks what is wrong with the current diff. Required for changes to public APIs, core architecture (Runner, Workflow, BaseNode), new features and major refactors. Don't use for a single style nit (use adk-style), for diagnosing a failing test or a misbehaving agent at runtime (use adk-debug), or for wording a commit message or PR description (use adk-git).

Installs
79
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/google/adk-python --skill adk-review
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads adk-review automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

ADK Change Reviewer

Review the working-tree diff against the seven dimensions below, report what is wrong, and stop. Fix only what the user then asks you to fix.

Workflow

  1. git status and git diff (add --staged for staged work) to get the exact set of added, modified, and deleted files.
  2. Review the diff file by file against the checklist.
  3. Emit the report in the format below.
  4. Stop. Do not edit any file, and do not offer to. Wait for the user to ask.
  5. If the user asks for fixes, apply them, then re-run the affected tests (pytest tests/unittests/{path}) and pre-commit run --files {paths}.

Step 4 is the part that is easy to get wrong: an unrequested fix buries the findings the user asked for and mixes review output with new, unreviewed edits.

Checklist

1. Correctness

  • Types: no new mypy errors. CI diffs mypy output against the base branch and fails only on newly introduced errors, so a pre-existing error in a file you touched is not a blocker but a new one is.
  • Imports: no circular imports; absolute imports where the module already uses them.
  • Exceptions: no bare except:; catch a specific type and log with enough context to identify the caller.
  • Type discrimination: check an object's type before reading a type-specific attribute (for example confirm a node is an LlmAgent before inspecting mode), so an unexpected node type raises nothing.
  • Boundaries: None, empty collections, zero, and empty strings are handled by validation or a fallback default.
  • Preconditions: state invariants are checked before the core logic runs.

2. Design

  • Complexity: functions or classes that would be clearer split up.
  • Coupling: high cohesion, low coupling; no anti-patterns introduced.
  • Performance: redundant computation, repeated I/O in a loop, or allocations that scale with input where they need not.
  • Security: inputs validated, sensitive data not logged, no injection, resource exhaustion, or exposure of internal state.

3. Style

Cross-reference the diff against the adk-style skill rather than restating its rules here: visibility and _ prefixes, typing, Pydantic v2 patterns, lazy logging, imports, async, and file organization.

Confirm the changed files pass pre-commit run --files {paths}.

4. Architecture and unintended outcomes

  • Public API stability: does the change modify, remove, or narrow a public interface, class, method, argument list, or CLI surface under src/google/adk/? A breaking change needs a deprecation cycle first, because the package is released under Semantic Versioning and users pin minor versions.
  • Session, Artifact, and Memory service changes: adding any new field to Session, ArtifactVersion, MemoryEntry, or to BaseSessionService, BaseArtifactService, BaseMemoryService and their schemas is a breaking change (even if optional or defaulted), because existing downstream storage subclasses and external backends will not persist or deserialize unknown fields, causing silent state loss upon reload.
  • Execution and resumption: changes to workflows, nodes, or state must stay compatible with the event execution lifecycle and with session resumption (human-in-the-loop steps and checkpoints). See the adk-architecture skill.
  • Concurrency and lifetime: no race conditions; plugins, exporters, and connections are closed on every path, including the error path.
  • Database and runtime DDL safety: runtime startup paths (e.g., DatabaseSessionService.prepare_tables() and _ensure_schema_indexes_exist()) must never execute destructive DDL such as DROP INDEX (which takes ACCESS EXCLUSIVE locks and breaks rolling deployments/rollbacks). Any additive runtime DDL must account for multi-container startup races (process-local asyncio.Lock does not prevent cross-container TOCTOU races on checkfirst=True) by wrapping creation in a SAVEPOINT (connection.begin_nested()) and tolerating concurrent creation.
  • Scope: a new public name, parameter or flag the fix did not need; a flag that keeps the buggy behavior as the default; a fix in a shared layer when one caller needed it; an existing test assertion edited to match the new behavior.

5. Documentation impact

  • User-facing documentation lives in the separate adk-docs repository, so a user-visible change needs a PR there as well; note it in the report.
  • Guides under docs/guides/ may need an update when a public API or workflow pattern changes.
  • If the change alters a code unit's design contract, the adk-unit-design skill owns the design document for that unit.

6. Samples

  • Do existing samples under contributing/samples/ still run against the change?
  • Does a new capability warrant a new sample? Follow the adk-sample-creator conventions if so.

7. Tests

  • Every new or modified code path has a test under tests/unittests/.
  • A new test belongs in the existing test_{module}*.py file for its unit, not in a file named after the change, which fragments that unit's coverage.
  • Tests follow the rules in the adk-style testing reference: one behavior per test, behavior-named tests, no assertions on private attributes, minimal fixtures, arrange/act/assert structure.

Ground each finding

Before reporting a finding, resolve the symbol through base classes (Event extends LlmResponse). For a correctness finding, name the input that makes it fail; for any other finding, quote the rule or convention it breaks. A finding that is neither is a guess; leave it out.

Report format

Group findings by priority and give a file path and line for each. Do not report a dimension with nothing to say.

  • 🔴 Critical: bugs, type errors, race conditions, resource leaks, security issues.
  • 🟠 Design: complexity, readability, performance, architectural misalignment.
  • 🟡 Style: lint, formatting, non-lazy logging, typing mismatches.
  • 🔵 Docs, tests, samples: missing or stale coverage, guides, samples.

FAQ

What does the adk-review skill do?

Reviews the uncommitted changes in an adk-python working tree and reports correctness, design, public-API stability, test, sample and documentation gaps as a prioritized findings report, fixing them only when asked. Use when the user asks to review local changes, wants a self-review before opening a pull request, asks whether a change breaks the public API or needs tests, samples or docs, or asks what is wrong with the current diff. Required for changes to public APIs, core architecture (Runner, Workflow, BaseNode), new features and major refactors. Don't use for a single style nit (use adk-style), for diagnosing a failing test or a misbehaving agent at runtime (use adk-debug), or for wording a commit message or PR description (use adk-git).

How do I install adk-review?

Run npx skills add https://github.com/google/adk-python --skill adk-review in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/adk-review/ (personal) or .claude/skills/adk-review/ (project).

Which AI agents can use adk-review?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is adk-review safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains adk-review?

It is published by google in google/adk-python. It has 79 recorded installs.

More from google/adk-python

View all →

adk-agent-builder

google/adk-python

Builds ADK (Agent Development Kit) Python agents: LLM agents with tools, graph workflows of function and agent nodes, conditional routing, fan-out and join, schema-validated delegation between agents, human-in-the-loop pauses, and pytest coverage for all of it. Use when asked to create an agent or a workflow, add a tool to one, branch or loop between nodes, run steps in parallel, pause for user approval, or test an agent. Don't use for explaining how ADK works internally or designing its core components (use adk-architecture), for an agent that already runs but misbehaves (use adk-debug), for authoring a sample under contributing/ (use adk-sample-creator), or for naming, typing, and formatting conventions (use adk-style).

Testing & QA459 installs

adk-architecture

google/adk-python

Explains how the ADK runtime fits together: the node and graph execution model, Context and Event flow, checkpoint and resume, tracing, and the rules governing the public API surface. Use when answering "how does X work" about ADK internals, tracing where an event or a piece of state comes from, deciding where a new capability belongs, reviewing a change to BaseNode, Workflow, Runner, Agent, Event or Context, working out why a node re-ran or stayed waiting after a resume, or judging whether a change breaks the public API. Don't use for assembling an agent from existing pieces (use adk-agent-builder), diagnosing one failing run or test (use adk-debug), or formatting and naming conventions (use adk-style).

adk-debug

google/adk-python

Diagnoses misbehaving ADK agents by inspecting sessions, events, tool calls, and the exact request that reached the model. Covers the adk run CLI and the adk web dev server with its session, trace, and debug HTTP endpoints. Use when an agent returns the wrong answer, ignores a tool or swallows a tool error, hangs, loops, emits raw JSON instead of calling tools, is not discovered by adk web, when a sub-agent cannot see the parent conversation, or when you need the LLM request/response, token counts, or logs for a run. Don't use for how ADK is designed internally (use adk-architecture), for building a new agent or workflow (use adk-agent-builder), for environment or dependency setup failures (use adk-setup), or for lint and style nits (use adk-style).

adk-style

google/adk-python

Open the skill to read its SKILL.md instructions.

106 installs

adk-setup

google/adk-python

Sets up a local ADK Python development environment in a git clone of the open-source adk-python repository: a uv virtual environment, all dependency extras, pre-commit hooks, and a first unit-test run. Runs only when explicitly requested, never on its own. Use when asked to set up, bootstrap, or repair a development checkout, install project dependencies, fix a missing or broken .venv, or prepare a machine for contributing a pull request. Don't use for debugging a running agent (use adk-debug), for commit and pull-request mechanics (use adk-git), or for re-running formatters on a checkout that is already set up (pre-commit run --all-files).

adk-sample-creator

google/adk-python

Creates a new sample agent in the ADK Python repository — the sample directory, its agent.py, and its README.md — following the conventions the existing samples already use. Use when the user wants to add a sample or example demonstrating a feature or agent pattern (dynamic nodes, fan-out/fan-in, a standalone tool-using agent), asks where a new sample belongs under contributing/samples/, or wants an existing sample's README brought up to the standard structure. Don't use for building a real working agent for the user's own project (use adk-agent-builder), or for checking whether the Python blocks in a Markdown file run (use adk-verify-snippets).

Docs & Writing91 installs

Popular code quality & workflow skills

View category →

grill-me

mattpocock/skills

A relentless interview to sharpen a plan or design.

Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.

handoff

mattpocock/skills

Compact the current conversation into a handoff document for another agent to pick up.

domain-modeling

mattpocock/skills

Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.

codebase-design

mattpocock/skills

Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.

diagnosing-bugs

mattpocock/skills

Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.