
adk-verify-snippets
Checks that every Python code block in a Markdown file actually compiles and runs, by extracting each block to a temporary file, executing it in an isolated subprocess, and writing a pass/fail report with per-snippet coverage. Use when the user asks to verify, test, or validate the code samples in a README, a guide, or a documentation page; wants to know which snippets in a Markdown file are broken or out of date; or asks for a snippet verification report. Don't use for running the project's test suite (run pytest directly), for checking code style or formatting (use adk-style), or for authoring a new runnable sample agent (use adk-sample-creator).
- Installs
- 61
- 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-verify-snippets- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads adk-verify-snippets automatically when relevant.
- 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.
Verify Markdown Snippets
Extracts every ```python block from a Markdown file, runs each one in its
own subprocess via the bundled run.py harness, and writes a report covering
load status, run status, and line coverage per snippet.
Read-only contract
Verifying a doc must never change the doc. Do not create, modify, or delete any file in the repository — including the Markdown being verified, its code blocks, and this SKILL.md. Report the failures; do not fix them and do not offer patches.
The script performs the only two writes that happen: temporary .py files in a
system temp directory outside the repository (removed when it exits), and the
report beside the source Markdown file.
Prerequisites
-
An ADK development environment — run from the repository root with the
uvvirtual environment active (see theadk-setupskill). -
coverage, optional. It is not a declared project dependency, so install it explicitly; without it the Coverage column shows—.uv pip install coverage -
A Gemini API key, needed only for snippets that build an
Agent,App, orWorkflow— those are executed against the live API.export GEMINI_API_KEY="{your_key}" # or export GOOGLE_API_KEY="{your_key}"If both are set the harness drops
GOOGLE_API_KEY, soGEMINI_API_KEYwins.
Usage
uv run --no-sync python .agents/skills/adk-verify-snippets/scripts/verify_md.py {path_to_markdown_file}
The script prints per-snippet progress, then writes the report beside the source file and prints its full path.
The report filename is the source file's stem lowercased with everything except
[a-z0-9_] stripped, plus _REPORT.md. Workflow-Guide.md therefore produces
workflowguide_REPORT.md, not Workflow-Guide_REPORT.md — read the path the
script prints rather than reconstructing it.
The report contains an Executive Summary table with one row per snippet, then a detailed section per snippet holding the code block, the execution logs (stdout plus stderr/traceback), and the coverage output.
How each snippet is classified
Runnable — has a module-level ADK component
If the snippet assigns a Workflow, Agent, or App to a module-level
variable, the harness executes it against the Gemini API.
- The variable name does not matter; the harness scans
vars(module). - Precedence is
Workflow, then rootAgent, thenApp. AWorkflowanywhere in the snippet wins over any agent in it. - The root agent is the first agent that appears in no other agent's
sub_agents, so multi-agent snippets resolve correctly whatever order the agents are defined in. - An
Appmust have been constructed with aroot_agentor the run fails. - The prompt sent is
"Test input topic". Override it by defining a module-leveltest_inputstring in the snippet.
Load-only — no ADK component
The harness confirms the snippet compiles and imports, and makes no API call.
The report shows ➖ NO ADK COMPONENT.
Skipped — annotated with ignore
Put <!-- verify-snippets: ignore --> alone on a line immediately before the
opening ```python fence to exclude a block. Use it for pseudo-code,
illustrative fragments, and snippets that need external setup. The report shows
⏭️ SKIPPED.
<!-- verify-snippets: ignore -->
```python
# pseudo-code — not runnable as-is
my_agent = Agent(model="gemini-ultra-hypothetical", ...)
```
Limitations that make correct snippets report as broken
Annotate with <!-- verify-snippets: ignore --> instead of editing the doc to
work around any of these.
- No shared state between snippets. Each snippet runs in a fresh
subprocess, so one that relies on an import or variable from an earlier
block fails with
NameErrororImportError. - 120-second timeout per snippet, after which the process is killed and the snippet reports as a run failure.
- Annotation placement. The annotation applies to the next
```pythonfence. Blank lines between the two are fine; any prose line or heading between them cancels it. - A bare
```closes the block. The parser closes a Python block at the first fence carrying no language tag, so a bare fence used as content inside a snippet truncates it. A tagged fence (for example```bash) is kept as literal content and is safe. - Module-level
asyncio.run()collides with the harness's own event loop and reports as a run failure. Snippets should keep top-level async calls behindif __name__ == "__main__":.
Reporting back to the user
Read the generated report and copy the Executive Summary table across exactly as
written — same six columns, same order, nothing renamed or dropped:
Snippet | Preceding Heading | Load Phase | Run Phase | Coverage | Details.
Present it and stop.
FAQ
What does the adk-verify-snippets skill do?
Checks that every Python code block in a Markdown file actually compiles and runs, by extracting each block to a temporary file, executing it in an isolated subprocess, and writing a pass/fail report with per-snippet coverage. Use when the user asks to verify, test, or validate the code samples in a README, a guide, or a documentation page; wants to know which snippets in a Markdown file are broken or out of date; or asks for a snippet verification report. Don't use for running the project's test suite (run pytest directly), for checking code style or formatting (use adk-style), or for authoring a new runnable sample agent (use adk-sample-creator).
How do I install adk-verify-snippets?
Run npx skills add https://github.com/google/adk-python --skill adk-verify-snippets 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-verify-snippets/ (personal) or .claude/skills/adk-verify-snippets/ (project).
Which AI agents can use adk-verify-snippets?
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-verify-snippets 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-verify-snippets?
It is published by google in google/adk-python. It has 61 recorded installs.
More from google/adk-python
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).
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-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).
Popular docs & writing skills
grill-with-docs
mattpocock/skills
A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go.
lark-markdown
open.feishu.cn
飞书 Markdown:查看、创建、上传、编辑和比较飞书中的原生 Markdown 文件。当用户要操作飞书 Markdown 文件,或比较其远端版本及本地草稿时使用。纯本地 Markdown 文件操作不触发本 skill。不负责将 Markdown 导入为飞书在线文档,也不负责文件搜索、权限、评论、移动、删除等云空间管理操作。
writing-beats
mattpocock/skills
Writing, exploit; assemble raw material into a journey of beats, grounding each term before a beat leans on it.
writing-shape
mattpocock/skills
Writing, exploit: shape raw material into an article, paragraph by paragraph.
writing-fragments
mattpocock/skills
Writing, explore: mine raw fragments, no structure yet.
writing-for-agents
mattpocock/skills
Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.