> Extracts and verifies the runnability and code coverage of all Python code blocks inside a Markdown file. Generates a detailed compilation and execution report.
npx skills add https://github.com/google/adk-python --skill adk-verify-snippets
This skill extracts all python ` blocks from a Markdown file, executes each
one in a process-isolated environment using the bundled run.py harness, and
generates a structured report covering load status, run status, and line
coverage.
> [!CAUTION] **STRICT READ-ONLY CONSTRAINT — READ THIS BEFORE DOING ANYTHING
> ELSE**
>
> This skill is read-only. The agent MUST NOT: - Modify any file in
> the repository (source, test, config, docs, or skill files — including this
> SKILL.md). - Delete any file in the repository. - Create any new file
> in the repository.
>
> The only two write operations permitted are: 1. Writing temporary .py
> snippet files to a system temp directory outside the repository. 2.
> Writing the final <filename>_REPORT.md into the **same directory as the
> source Markdown file**.
>
> If in doubt, do not write. Any other mutation is a violation of this skill's
> contract.
--------------------------------------------------------------------------------
uvvirtual environment active.
coverage package *(optional)*: Enables per-snippet coverage reporting.Without it, coverage columns show —.
uv pip install coverage
Agent,App, or Workflow (which make live Gemini API calls). Set one of:
export GEMINI_API_KEY="your-key-here"
# or
export GOOGLE_API_KEY="your-key-here"
If both are set, GEMINI_API_KEY takes precedence.
--------------------------------------------------------------------------------
uv run --no-sync python .agents/skills/adk-verify-snippets/scripts/verify_md.py <path_to_markdown_file.md>
The script prints progress for each snippet, then writes a report to
<filename>_REPORT.md in the same directory as the source file and prints
the full path on completion.
Report contents: :- Executive Summary table — one row per snippet:
preceding heading, Load phase status, Run phase status, coverage %, and error
detail.
execution logs (stdout + stderr/traceback), and the coverage report.
--------------------------------------------------------------------------------
Each python ` block falls into one of these categories:
If the snippet assigns a Workflow, Agent, or App to a **module-level
variable**, the runner executes it against the Gemini API.
vars(module).
any agent that appears in another agent's sub_agents list.
"Test input topic",define a module-level test_input string in the snippet.
If no module-level ADK component is found, the run phase is skipped and the
report shows ➖ NO ADK COMPONENT.
The runner verifies the snippet compiles and imports without error. No API call
is made.
Place <!-- verify-snippets: ignore --> immediately before the opening
python ` fence to exclude a block entirely. Use this for pseudo-code,
illustrative examples, or snippets that require external setup.
<!-- verify-snippets: ignore -->
my_agent = Agent(model="gemini-ultra-hypothetical", ...)
The report shows these as ⏭️ SKIPPED.
--------------------------------------------------------------------------------
subprocess with no imports or variables carried over from previous snippets.
A snippet that depends on code from an earlier block will fail with
NameError or ImportError. Make each snippet self-contained, or annotate
it with <!-- verify-snippets: ignore -->.
long-running or blocking snippets with <!-- verify-snippets: ignore -->.
<!-- verify-snippets: ignore -->annotation applies to the next python ` fence encountered. Blank lines
between the annotation and the fence are tolerated, but any non-blank line
(prose or a heading) cancels the annotation.
` closes the block: The parser closes a Python block on thefirst bare line (no language tag). A bare appearing as
content inside a snippet (e.g. to demonstrate Markdown syntax) will
prematurely close the block. Annotate such snippets with
<!-- verify-snippets: ignore -->.
--------------------------------------------------------------------------------
modify code blocks, or generate patches. Present the summary table to the
user and stop.
generated _REPORT.md and copy the Executive Summary table to the user
exactly as written — same six columns, same order, no renaming or
dropping: `Snippet | Preceding Heading | Load Phase | Run Phase | Coverage |
Details`
Interact with Obsidian vaults using the Obsidian CLI to read, create, search, and manage notes, tasks, properties, and more. Also supports plugin and theme development with commands to reload plugins, run JavaScript, capture errors, take screenshots, and inspect the DOM. Use when the user asks to interact with their Obsidian vault, manage notes, search vault content, perform vault operations from the command line, or develop and debug Obsidian plugins and themes.
Comprehensive project architecture blueprint generator that analyzes codebases to create detailed architectural documentation. Automatically detects technology stacks and architectural patterns, generates visual diagrams, documents implementation patterns, and provides extensible blueprints for maintaining architectural consistency and guiding new development.
Securely inspect and automate microscopy data workflows against OMERO.server with omero-py, BlitzGateway, OMERO CLI, tables, annotations, ROIs, rendering, and documented OMERO.web APIs. Use for scoped OMERO inventory, metadata export, import/export planning, or reviewed write workflows.
Review the changes since a fixed point (commit, branch, tag, or merge-base) along two axes — Standards (does the code follow this repo's documented coding standards?) and Spec (does the code match what the originating issue/PRD asked for?). Runs both reviews in parallel sub-agents and reports them side by side. Use when the user wants to review a branch, a PR, work-in-progress changes, or asks to "review since X".
Master API documentation with OpenAPI 3.1, AI-powered tools, and modern developer experience practices. Create interactive docs, generate SDKs, and build comprehensive developer portals.
Creates comprehensive API changelogs documenting breaking changes, deprecations, and migration strategies for API consumers. Use when managing API versions, communicating breaking changes, or creating upgrade guides.
Master API documentation with OpenAPI 3.1, AI-powered tools, and modern developer experience practices. Create interactive docs, generate SDKs, and build comprehensive developer portals. Use PROACTIVELY for API documentation or developer portal creation.
Analyze fundamental data primitives, type systems, and state management patterns in a codebase. Use when (1) evaluating typing strategies (Pydantic vs TypedDict vs loose dicts), (2) assessing immutability and mutation patterns, (3) understanding serialization approaches, (4) documenting state shape and lifecycle, or (5) comparing data modeling approaches across frameworks.
Take google/adk-verify-snippets from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip, uv.
Without those the skill loads but fails at the first command.