agentleFS
alexaiarchitectalexaiarchitect/google-adk-skills/skills/agent-review/SKILL.md

agent-review

Skill0 starsChanged 13 days agoApache-2.0View on GitHub

Report-only review of an existing Google ADK Python agent, read statically so it works on a project that does not yet run. Checks loader and naming rules, model policy (deprecated, preview and hardcoded ids), the constructor kwargs that raise, tool contracts (docstrings, type hints, return shapes, raising versus returning errors), state writes that never persist, App wiring, ADK 2.x drift such as the deprecated workflow shells and global_instruction, backend configuration, and whether the instruction has branches an eval case could cover. Optionally imports the agent the way ADK does, to prove it loads. Use when asked to "review / lint / check my ADK agent", "is this ADK 2 compatible", "why won't adk find my agent", "why does my agent fail at startup", or before trusting an agent you did not write. Don't use for evalset quality (use `/adk:eval-review`), runtime misbehaviour (use `/adk:agent-debug`), or building a new agent (use `/adk:agent-create`).

11 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use commit.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • SentrySkill

    commit

    Create commit messages following Sentry conventions. Use when committing code changes, writing commit messages, or formatting git history. Follows conventional commits with Sentry-specific issue references.

    Also in 3 projects that use this

The file

We split this skill into the rules it gives an agent

2 rules. 0 are common, 2 are distinctive, and 0 are very specific to this project.

  • 0

    Common

    Most of the 9 edited versions we read keep these.

  • 2

    Distinctive

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Confirm before editing anything: If the user wants fixes applied, make the smallest change that addresses each finding, and re-run the …

    line 55
  2. Distinctive:

    Report only: Do not edit as part of reviewing, even for something obvious.

    line 115

“Common” is measured: kept by at least 6 in 10 of the 9 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Review an ADK agent

Static first, because a review that needs the project to run is useless exactly when you need it most. Nothing here imports the agent unless you ask for the load check.

This skill reports. It does not edit. Fixes happen after the user has seen the findings and chosen.

${CLAUDE_SKILL_DIR} is set by the skill runtime to this skill's own directory. Use it verbatim in every command below; a sibling skill's scripts are at ${CLAUDE_SKILL_DIR}/../<skill>/scripts/.

Flow

  1. Review.

    python3 ${CLAUDE_SKILL_DIR}/scripts/lint_agent.py <agent-dir>

    Optionally prove it loads, which needs an interpreter with ADK:

    python3 ${CLAUDE_SKILL_DIR}/scripts/load_agent.py <agent-dir>
  2. Report in severity order, leading with the count: "2 errors, 5 warnings". An error means ADK will reject it or the behaviour cannot work; a warning means it runs, but not as intended.
  3. Options. Typically: fix the errors, address the model policy, add an App export, migrate the deprecated workflow shells, or move on to eval coverage.
  4. Confirm before editing anything. If the user wants fixes applied, make the smallest change that addresses each finding, and re-run the review.

The fourteen dimensions

#DimensionWhat goes wrong
1loader and namingnothing loadable exported; a name that is not an identifier, or is user; two agents in the tree with one name (AGT015); an app directory adk cannot load (ENV015)
2model policyretiring gemini-2.0-flash / gemini-2.5-flash (a plugin policy, so a warning), preview ids, hardcoded dated ids; a max_output_tokens below 1024 on a thinking model (AGT084)
3agent configurationsampling kwargs passed directly; generate_content_config carrying tools, system_instruction or response_schema; max_parallel_workers= on an LlmAgent (AGT085)
4tool contractsno docstring, no Args:, untyped parameters, raising instead of returning, no status
5statesession.state[...] = ... on a service-fetched session; an instruction {key} nothing writes or seeds (AGT080)
6App wiringno App, so plugins, caching and resumability cannot reach a run
72.x driftSequentialAgent / ParallelAgent / LoopAgent, global_instruction, YAML config agents
8environmentno backend configured; missing project or location
9eval readinessan instruction with no branch, so there is nothing to test
10blocking callstime.sleep, requests, subprocess in a synchronous tool
11context cachinga cached prefix that changes per request, a long instruction nothing caches, an out-of-range ContextCacheConfig, caching no eval case can exercise (AGT060–AGT063), and plugin imports that need 2.11 or a public path (AGT065, AGT066), and a prefix too small for the cache floor (AGT067)
12skillsa SKILL.md ADK will reject, instructions too long to disclose progressively, an agent instruction that repeats a skill's body, a description too vague to trigger it, lifecycle settings out of range (AGT070–AGT075), two sibling skills described in mostly the same words (AGT083)
13context engineeringan EventsCompactionConfig ADK rejects, long conversations with no compaction, a sub-agent scoped wider than its job, a tool returning a large inline blob instead of an artifact (AGT076–AGT079), memory tools inside an AgentTool (AGT082)
14streaming toolsan async-generator tool on a text model, or on a live model whose evals lack live_model_config (AGT081)

Decision rules

  • Errors are things ADK rejects or behaviour that cannot work. A reserved name, a forbidden generate_content_config field, a state write that never persists. Fix these first: some stop the agent loading at all.
  • Warnings run but mislead. A deprecated workflow shell still works today, and so does a retiring model id. Say when the clock is ticking rather than implying it is broken — and where the clock is this plugin's policy rather than ADK's, say whose policy it is.
  • A hardcoded model id is a warning, not a style note. Dated ids get retired, and the agent stops working on a date nobody wrote down.
  • A raising tool is worth explaining, not just flagging. An exception ends the invocation; a returned error is an observation the model can act on. That is the difference between an agent that self-corrects and one that gives up.
  • A streaming tool belongs to a live agent. AGT081 as a warning means a text agent has an async-generator tool: on 2.12+ its second yield aborts a run_async run, on 2.9 its body never runs. As an info it means the agent is live but no eval config sets live_model_config, so evals never exercise the streaming. Point at ../agent-create/references/live-agents.md.
  • Released behaviour decides the severity. AGT082 (memory tools inside an AgentTool) warns because through 2.13.0 they search a fresh, empty store; main after 2.13.0 shares the parent's memory, so with --adk-version above 2.13.0 it drops to info. ENV015 is an error when the loader refuses the app directory name (a hyphen, dot, space or non-ASCII letter) and an info for a keyword or leading digit, which loads today. AGT085 (max_parallel_workers= on an LlmAgent) is an error on every release, which refuses the kwarg at construction; above 2.13.0 it is an error only for a value below 1 or a missing parallel_worker=True. Never flag @node / Node.
  • Two infos that read like style notes and are not. AGT083: the model picks a skill from its name and description alone, so two descriptions in the same words let the broader skill take the other's requests; suggest rewording and a negative sibling activation case (/adk:eval-create). AGT084: an output cap under 1024 on a thinking model is a ceiling, not a thinking budget, so hard turns come back truncated; suggest thinking_config or the instruction instead. Both are static and version-independent.
  • The load check is optional and it costs an import. Offer it when the static review is clean but the agent is reported not to work, or when the user is mid-migration.
  • Report only. Do not edit as part of reviewing, even for something obvious.

References

QuestionFile
Every finding id, what triggers it, and its ADK sourcereview-checklist.md
The model policy and why it existsmodel-policy.md
Decoding a failed loadload-check.md
Context caching: the decision, the prefix rules, measuring it../agent-create/references/context-caching.md
Skills: frontmatter limits, progressive disclosure, lifecycles../agent-create/references/skills-and-progressive-disclosure.md
Context engineering: compaction, include_contents, artifacts../agent-create/references/context-engineering.md
Live agents: streaming tools, stop_streaming, run_live vs run_async../agent-create/references/live-agents.md

The 1.x-to-2.x drift table lives in the router skill: ../adk/references/adk-1x-to-2x-migration.md.

Scripts

CommandDoesExit codes
scripts/lint_agent.py <agent-dir> [--strict] [--no-backend] [--adk-version V] [--json]the static review, fourteen dimensions (streaming tools: AGT081, warn on a text model, info on a live one whose evals lack live_model_config); --adk-version stands in for the resolved runner in version-gated checks (AGT066, AGT074, AGT082)0 clean, 1 findings, 2 no agent
scripts/load_agent.py <agent-dir> [--json]imports it the way ADK does0 loaded, 1 did not load, 2 no runner

Completion checklist

  • The review ran and its counts were reported.
  • Every error was explained with its consequence, not just its rule.
  • Model policy findings name the replacement.
  • Deprecated APIs were linked to their 2.x replacement.
  • Nothing was edited without the user asking.
  • If the agent has no evalset, the user was pointed at /adk:eval-create.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.