Official agent skill

Align Recipe pyproject.toml

by google in google/adk-recipes

Brings a Python recipe's pyproject.toml in line with the repo's CI rules, either as a read-only dry run or by rewriting the file while keeping comments.

OfficialApache-2.0Auto-check passedDevelopment

Install Align Recipe pyproject.toml

skills CLI
$ npx skills add google/adk-recipes --skill align-recipe-pyproject -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install google/adk-recipes align-recipe-pyproject --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/google/adk-recipes.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/align-recipe-pyproject .claude/skills/align-recipe-pyproject && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
align-recipe-pyproject
GitHub stars
10k
Token cost
~4.6k tokens
SKILL.md length
2,151 words
Files
4 (incl. scripts)
Skills in repo
14
Repo updated
First seen
Licence
Apache-2.0

At a glance

Brings a Python recipe's pyproject.toml in line with the repo's CI rules, either as a read-only dry run or by rewriting the file while keeping comments.

  • Works in 11 steps: Always use the script — never hand-edit… → Ask for the recipe directory if the user… → Always start with --dry-run unless the… → …
  • Aligning a recipe's pyproject.toml with the repo standard
  • SKILL.md covers What This Skill Checks, Rules for the Agent, Input and Run, plus 1 more section
  • Runs Python scripts from its folder; calls uv, python and git; reaches pypi.org

What it does

The skill runs scripts/align_pyproject.py against a recipe directory and checks eight rules enforced by the repository's recipe validation workflow, plus a check that a build-system table is present. Dry-run mode only reports what needs alignment. Apply mode rewrites pyproject.toml, and manifest.yaml when its description disagrees, using editors that keep comments intact.

Two of the rules are described in detail. Recipes may not declare their own ruff configuration, since it is centralized in the root pyproject.toml, so those tables are removed. And requires-python must accept Python 3.11 exactly, so a lower bound such as 3.10 or a higher one such as 3.12 is rewritten to a 3.11 floor while upper bounds, exclusions and pins are kept. If the result would still exclude 3.11, the tool refuses and asks a human to decide.

The scope is limited on purpose. Standalone ruff.toml files are caught by CI, not by this skill, and the warn-only notice about an older google-adk major is deliberately not implemented, because widening the version ceiling would import a major the recipe was never ported to. Crossing an ADK major is a code migration to do by hand.

When your agent uses it

  • Aligning a recipe's pyproject.toml with the repo standard
  • Checking what needs changing before submitting a recipe PR
  • Fixing a requires-python floor that does not accept Python 3.11
  • Removing local ruff settings from a recipe

Example prompts

  • “Run a dry run of the pyproject alignment on the recipe in core/support-agent.”
  • “Fix the pyproject for this recipe so it matches the repo standard.”
  • “Show me what in this recipe's pyproject would fail the validation workflow.”

Requirements

  • Python, to run scripts/align_pyproject.py
  • A recipe directory in the google/adk-recipes layout

Workflow steps

11 steps, taken from the first numbered list in SKILL.md.

  1. Always use the script — never hand-edit pyproject.toml or manifest.yaml to perform these changes. The script exists specifically so edits…
  2. Ask for the recipe directory if the user has not provided one. Do not guess. Recipe roots live under core/python//, contrib/python//, or…
  3. Always start with --dry-run unless the user has explicitly said "apply", "fix it", "just do it", or equivalent. Show them what would…
  4. Only report checks that need attention. The script always returns every check's status, but the user does not need to see the ones that…
  5. If description-matches-manifest returns needs_input, the descriptions in pyproject.toml and manifest.yaml disagree and the script cannot…
  6. If build-system-present returns report_only, [build-system] is missing or incomplete. Tell the user the recipe cannot be built as a…
  7. If default-pypi-index returns report_only, the recipe declares a default index that is NOT public PyPI (e.g. a private mirror, TestPyPI)…
  8. If stale-python-version-refs returns report_only, list the affected files from details.files and call out any executable ones first (.sh…
  9. If runnability-test-in-testpaths returns report_only, the recipe's testpaths excludes tests/test_runnability.py, so a bare uv run pytest…
  10. After apply mode succeeds, remind the user to run uv sync in the recipe directory if the pyproject changes touched dependencies (the…
  11. Do not commit any changes. Show the diff or file contents; let the user commit.

What it can do on your machine

Read from SKILL.md and the folder at commit fa9bdde. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • uv
    • python
    • git
    • pip

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • pypi.org

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Align Recipe pyproject.toml loads about 4.6k tokens when it runs. Until then it costs about 189 tokens; SKILL.md has 2,151 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~189
When it runs · the whole SKILL.md, loaded when a task matches
~4.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from google/adk-recipes at commit fa9bdde, republished under its Apache-2.0 licence (© google). 2,151 words, ~4,631 tokens.

Download SKILL.mdSave it as .claude/skills/align-recipe-pyproject/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
align-recipe-pyproject
description
Aligns a Python recipe's pyproject.toml with the repo's standards enforced by .github/workflows/python-validate-recipe.yml, plus one critical [build-system] presence check. Scope is pyproject.toml only — standalone ruff.toml / .ruff.toml files (also forbidden in recipes) are caught by the CI workflow instead, not by this skill. Runs in two modes: a read-only --dry-run that reports what needs alignment, and an apply mode that rewrites pyproject.toml (and optionally manifest.yaml) using comment-preserving TOML/YAML editors. Use when the user wants to "align the recipe's pyproject.toml", "fix pyproject to match the repo standard", "check what needs changing in a recipe's pyproject", or clean up a recipe before submitting a PR.
metadata.author
Google
metadata.license
Apache-2.0
metadata.version
1.1.0

Align Recipe pyproject.toml

Use this skill to bring a Python recipe's pyproject.toml (and, when it disagrees, its manifest.yaml description) into conformance with the repo standard enforced by .github/workflows/python-validate-recipe.yml.

Scope: pyproject.toml only. Standalone ruff.toml / .ruff.toml files are also forbidden in recipes but are enforced by the CI workflow (Check 7 in python-validate-recipe.yml) — outside this skill's concern.

Not in scope: adk-major-current. The CI validator also emits a warn-only notice when a core/ recipe resolves to an older google-adk major. This skill deliberately does not implement it, and you should not add it. The mechanical fix — widening <2.0.0 to <3.0.0 and re-locking — produces a recipe importing a major it was never ported to, and that break surfaces at runtime rather than in any check. Crossing an ADK major is a code migration; this skill only rewrites metadata. If you are asked to "fix the ADK notice", port the recipe by hand.


What This Skill Checks

Runs scripts/align_pyproject.py against a recipe directory. Eight rules:

Rule IDWhat it checksAuto-fix
no-local-ruff-configRecipe pyproject.toml must not declare any [tool.ruff*] table. Ruff config is centralized in the root pyproject.toml.Yes — removes the tables.
python-version-floor[project].requires-python must accept Python 3.11 exactly — it must neither permit anything below (loose floors like >=3.10) nor exclude 3.11 by requiring higher (>=3.12, ~=3.12, etc.). Per AGENTS.md "Minimum python version: 3.11" and CI in .github/workflows/python-dependency-policy.yml, which pins Python 3.11 and would otherwise emit a misleading "lockfile is out of date" error whose real cause is the interpreter mismatch.Yes — rewrites the specifier so its lower bound is >=3.11 while preserving every upper bound, exclusion, compatible-release (~=) ceiling, and pin (only pure >=/> are dropped or replaced). Applies to BOTH failure modes (loose floors AND higher-than-min floors). If the result would still exclude 3.11 (e.g. >=3.10,!=3.11 → >=3.11,!=3.11, or ~=3.12 → >=3.11,~=3.12 == >=3.12,<4), refuses to apply and returns needs_input for a human to resolve (typically: relax the ceiling, or raise the recipe with the maintainers to update CI's pinned interpreter).
project-name-matches-folder[project].name must equal the recipe's required name: the folder basename under core//contrib/, but <vertical>-<solution> under plugins/, whose mandatory vertical namespace (plugins/<vertical>/<solution>) makes the basename non-unique — plugins/retail/product-search and plugins/grocery/product-search would otherwise both claim product-search.Yes — sets it.
description-matches-manifestIf [project].description is set, it must equal manifest.description. Field is optional; skipped when absent.Only with --description-source={pyproject,manifest,delete}. Refuses to touch description otherwise.
build-system-present[build-system] must have both requires and build-backend. Without it, uv build and pip install . fail.No — backend choice is editorial. Reported for the human to fix.
default-pypi-index[[tool.uv.index]] must have an entry with default = true pointing at public PyPI (https://pypi.org/simple[/]). Required so uv sync works on Google corp workstations without corp Airlock auth — see the block comment in the root pyproject.toml for the full rationale.Yes when the block is entirely missing — appends it. No when a default entry exists but points elsewhere (custom private index, TestPyPI, mirror) — reported for the human to reconcile, since the divergence may be intentional.
stale-python-version-refsScans every text file in the recipe for references to a Python version below the 3.11 floor. Raising requires-python is not a self-contained edit: the version is typically repeated in prose (README.md, SKILL.md) and in executable setup code.No — report-only. Which references are stale and how to reword them is editorial.
runnability-test-in-testpathsIf [tool.pytest.ini_options].testpaths is set, at least one entry must collect tests/test_runnability.py (which .github/policy.yml requires every Python recipe to have).No — report-only. Broadening testpaths changes what CI collects.
Why stale-python-version-refs exists

A bootstrap script that picks an interpreter from an allowlist still containing the old floor will happily build a venv the recipe then refuses to install into:

bash
for py in python3.13 python3.12 python3.11 python3.10 python3; do
# ...
# ERROR: Package requires a different Python: 3.10.x not in '>=3.11'

The scan requires a Python-ish context (python 3.10, Python :: 3.10, >=3.10) rather than matching bare digits, so a model name like gemini-3.5-flash is not a false positive. It skips lockfiles, virtualenvs, caches, and binary files, and ignores requires-python in pyproject.toml itself (owned by python-version-floor, and still pre-rewrite in memory when this check runs). Hits are capped at 40 in details.hits, but details.files always lists every affected file.

Edit safety
  • TOML edits go through tomlkit — comments, blank lines, and unrelated tables in pyproject.toml are preserved.
  • YAML edits (only when --description-source=pyproject overwrites manifest.description) go through ruamel.yaml — comments in manifest.yaml are preserved.
  • Files are only rewritten if at least one auto-fix actually ran. Otherwise on-disk bytes are untouched.
  • No files outside the recipe directory are ever modified. The workflow file, root pyproject.toml, and other recipes are safe.

Rules for the Agent

  1. Always use the script — never hand-edit pyproject.toml or manifest.yaml to perform these changes. The script exists specifically so edits are style-preserving and reviewable via one report.

  2. Ask for the recipe directory if the user has not provided one. Do not guess. Recipe roots live under core/python/<name>/, contrib/python/<name>/, or plugins/<vertical>/<solution>/.

  3. Always start with --dry-run unless the user has explicitly said "apply", "fix it", "just do it", or equivalent. Show them what would change before doing it.

  4. Only report checks that need attention. The script always returns every check's status, but the user does not need to see the ones that passed. Filter to status != "ok".

    • If nothing needs attention: reply with a single positive line (see the response format below). Don't list what's fine, don't build a table.
    • If something needs attention: render only the non-ok checks.
  5. If description-matches-manifest returns needs_input, the descriptions in pyproject.toml and manifest.yaml disagree and the script cannot pick a winner. Present the two values side by side and ask the user to choose one of the three resolution options. Do not re-run the script until they choose.

  6. If build-system-present returns report_only, [build-system] is missing or incomplete. Tell the user the recipe cannot be built as a package until this is fixed, and offer them a hatchling or uv_build template snippet. Do not silently pick one.

  7. If default-pypi-index returns report_only, the recipe declares a default index that is NOT public PyPI (e.g. a private mirror, TestPyPI). The skill will not overwrite an intentional choice. Show the user the current url from details.current_url and ask whether it's deliberate. If yes, they can # noqa-comment it or update the repo standard; if no, they should change the URL to https://pypi.org/simple/. Do not auto-rewrite.

  8. If stale-python-version-refs returns report_only, list the affected files from details.files and call out any executable ones first (.sh, .py, Makefile, CI YAML) — a stale interpreter allowlist in a bootstrap script is a live bug, not a docs nit, and it produces a confusing requires a different Python failure at install time. Prose files (README.md, SKILL.md) are lower priority but still inconsistent. Offer to update them; do not rewrite without asking, since some references are legitimately historical ("dropped 3.10 support in v2").

  9. If runnability-test-in-testpaths returns report_only, the recipe's testpaths excludes tests/test_runnability.py, so a bare uv run pytest never runs it — the recipe looks tested while its import-smoke test silently never executes. Show details.testpaths and suggest adding "tests". Do not auto-rewrite.

  10. After apply mode succeeds, remind the user to run uv sync in the recipe directory if the pyproject changes touched dependencies (the script emits this in notes when relevant).

  11. Do not commit any changes. Show the diff or file contents; let the user commit.


Input

FieldRequiredDescription
--recipe-dirYesPath to the recipe root (e.g. core/python/cross-session-memory, contrib/python/my-recipe, plugins/retail/store-ops).
--dry-runNoReport what would change without modifying any files.
--description-sourceOnly when resolving a description-matches-manifest mismatch. Values: pyproject, manifest, delete. See below.Chooses how to reconcile a description mismatch.
--description-source semantics
ValueEffect
pyprojectOverwrite manifest.description with the value from [project].description. Use when pyproject is authoritative (e.g. it was updated more recently).
manifestOverwrite [project].description with the value from manifest.description. Use when the manifest is authoritative.
deleteRemove [project].description from pyproject.toml entirely, so manifest.description becomes the single source of truth. Use when the recipe doesn't need a wheel-metadata description.

If the descriptions already match, this flag is ignored.


Run

Show full SKILL.md (874 more words)Show less
Dry-run (read-only report — start here)
bash
uv run --no-project --with tomlkit --with 'ruamel.yaml' --with packaging \
  python .agents/skills/align-recipe-pyproject/scripts/align_pyproject.py \
  --recipe-dir <RECIPE_DIR> --dry-run

Output: JSON on stdout. Every check produces one entry with id, status (ok / would_fix / needs_input / report_only / error), a human-readable message, and structured details. Exit code is always 0 in dry-run.

Apply (rewrite files)
bash
uv run --no-project --with tomlkit --with 'ruamel.yaml' --with packaging \
  python .agents/skills/align-recipe-pyproject/scripts/align_pyproject.py \
  --recipe-dir <RECIPE_DIR>

Fixes everything the script can safely fix. Exits 0 if nothing is left unresolved, 1 otherwise (typically because description-matches-manifest needs --description-source or build-system-present needs a human).

Apply with description resolution
bash
uv run --no-project --with tomlkit --with 'ruamel.yaml' --with packaging \
  python .agents/skills/align-recipe-pyproject/scripts/align_pyproject.py \
  --recipe-dir <RECIPE_DIR> --description-source={pyproject|manifest|delete}
Preview a description resolution (dry-run + --description-source)

--description-source combines with --dry-run: the script reports the would_fix outcome of the chosen resolution without writing any files. Use this to show the user exactly what a given choice will do before you apply it — the two flags are not mutually exclusive.

bash
uv run --no-project --with tomlkit --with 'ruamel.yaml' --with packaging \
  python .agents/skills/align-recipe-pyproject/scripts/align_pyproject.py \
  --recipe-dir <RECIPE_DIR> --dry-run \
  --description-source={pyproject|manifest|delete}

Respond

Filter the report to checks with status != "ok". Never list what's fine — the user is here to see what needs doing.

If everything passed

Reply with a single line, no table, no bullets. Something like:

✓ <RECIPE_DIR>'s pyproject.toml is fully aligned with the repo standard. No changes needed.

Then stop. Do not run any further tools.

If there are things to report

Name the recipe directory once, then render a single Markdown table with these three columns:

RuleStatusDetails
  • Rule — the check id, in backticks (e.g. `no-local-ruff-config`).
  • Status — the raw status value (would_fix, fixed, needs_input, report_only, error). Do not add emoji unless the user has asked for them.
  • Details — a compact summary of both what's wrong and what will happen (or what the user must do), merged into one cell so the table stays 3 columns wide. Quote from → to values from details when present.

Include exactly one row per non-ok check. Do not include ok rows.

Status-specific guidance for what to put in the Details cell:

  • would_fix (dry-run) — describe the current-state problem, then say what apply would do. Include the from → to or the list of tables to be removed.
  • fixed (apply) — one-liner confirming the change (new value or list of removed tables).
  • needs_input (only description-matches-manifest) — the Details cell says something like "descriptions differ — needs --description-source={pyproject,manifest,delete}". Do not put the two long descriptions inside the table. See "Follow-up content" below.
  • report_only (four rules can hit this: build-system-present, default-pypi-index when a non-PyPI default is declared, stale-python-version-refs, and runnability-test-in-testpaths) — the Details cell names what's missing or non-conforming (e.g. "[build-system] missing; recipe cannot be built as a package" or "default index is TestPyPI, not public PyPI"). Follow-up content goes below the table (see next section).
  • error — the Details cell shows the message verbatim; if it's very long, truncate with … and put the full text below.
Follow-up content below the table

Only for statuses that need extra context. Order: table first, then this content, then closing action.

  • needs_input follow-up — present pyproject_description and manifest_description from details side by side (a small nested table works well), then ask the user to pick one of pyproject, manifest, or delete. Do not re-run until they answer.

  • report_only follow-up — explain the impact (recipe cannot be built as a package) and paste both templates so the user can choose:

    toml
    # Hatchling (traditional Python packaging)
    [build-system]
    requires = ["hatchling"]
    build-backend = "hatchling.build"
    
    [tool.hatch.build.targets.wheel]
    packages = ["app"]
    
    # ---- OR ----
    
    # uv_build (Astral's uv-native backend)
    [build-system]
    requires = ["uv_build>=0.8.14,<0.9.0"]
    build-backend = "uv_build"
    
    [tool.uv.build-backend]
    module-root = ""
    module-name = "app"
  • error follow-up — if the message was truncated in the table, print it verbatim in full below. Do not attempt to work around it.

Closing action
  • Dry-run with at least one would_fix row — offer to apply the fixes yourself. Do NOT paste the raw command as a copy-and-paste snippet for the user. Instead ask something like "Want me to apply these fixes?" (a yes/no question is fine; a question with clear options is nicer UX). If the user agrees, run apply mode yourself and render the result as another table (with fixed rows instead of would_fix). If the user declines, stop.

  • Dry-run with only needs_input for description-matches-manifest — after the table, show the two descriptions side by side and ask the user to pick one of pyproject, manifest, or delete. When they choose, run apply yourself with --description-source=<their choice> and render the resulting table. Do not offer generic "apply" — the flag is required.

  • Dry-run with only report_only (and no would_fix rows) — after the table, address the specific case:

    • build-system-present: show the two [build-system] template snippets and stop. This is a manual edit; the skill does not auto-fix it.
    • default-pypi-index: quote details.current_url, explain that this is not public PyPI, and ask whether it's intentional. If not, tell the user to change the URL to https://pypi.org/simple/. Do not auto-rewrite.
    • stale-python-version-refs: list details.files, executable files first, and offer to update them.
    • runnability-test-in-testpaths: quote details.testpaths and suggest adding "tests".
  • Dry-run with only error rows — do not offer to apply. Errors mean the script bailed before it could compute a fix; the user has to resolve the underlying issue first.

  • Dry-run with a mix (e.g. some would_fix + a needs_input) — offer to apply the fixable ones. The apply run will fix those and leave the others as-is; render the resulting table and then address the remaining statuses per the rules above.

  • Apply mode with any fixed row — end with the "Next steps" reminder (see below).

Do NOT commit any changes yourself. Ever.

After apply mode

If any check has status: fixed, remind the user:

Next steps:
  cd <RECIPE_DIR> && uv sync    # if dependencies changed
  git diff                       # review the edits before committing

Then stop. Do not commit. Do not run any further tools. End your turn.

© google, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (scripts) in .agents/skills/align-recipe-pyproject of google/adk-recipes.

  • SKILL.md
  • scripts/align_pyproject.py
  • tests/conftest.py
  • tests/test_align_pyproject.py

Open the folder on GitHubat commit fa9bdde

Compare with similar skills

Align Recipe pyproject.toml next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Align Recipe pyproject.toml compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Align Recipe pyproject.toml this skillgoogle/adk-recipes10k—~4.6kAutomated safety check: PassApache-2.0
Update Dependenciesalorence/django-modern-rpc111—~1.3kAutomated safety check: PassMIT
Cb Code QualityBlkLeg/CircuitBreaker201—~1.9kAutomated safety check: PassMIT
Code Qualitynotque/vexjoy-agent435—~1.5kAutomated safety check: NotesMIT
ONNX Runtime Lintmicrosoft/onnxruntime22k—~392Automated safety check: PassMIT
Megatron-LM Linting and FormattingNVIDIA/Megatron-LM18k—~317Automated safety check: PassApache-2.0

Similar skills

  • Update Dependencies

    alorence/django-modern-rpc

    Routine update of all project dependencies — uv itself, uv.lock (all groups), tool versions pinned in GitHub workflows and .pre-commit-config.yaml (uv, ruff, mypy...), and SHA-pinned GitHub Actions.

    111 GitHub stars~1.3k tokensUpdated today
    DevelopmentAuto-check passed
  • Cb Code Quality

    BlkLeg/CircuitBreaker

    Circuit Breaker code conventions and the quality gates that actually block a push — ruff, mypy, eslint, the pytest coverage ratchet, and the make verify tiers.

    201 GitHub stars~1.9k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Code Quality

    notque/vexjoy-agent

    Code quality: cleanup, linting, formatting, quality gates. An agent skill from notque/vexjoy-agent.

    435 GitHub stars~1.5k tokensUpdated 4 days ago
    DevelopmentAuto-check: notes
  • ONNX Runtime Lint

    microsoft/onnxruntime

    Official

    Lints and formats C++ and Python code in the ONNX Runtime repository with lintrunner, clang-format and ruff, preferring a pass over only the changed files.

    22k GitHub stars~392 tokensUpdated today
    DevelopmentAuto-check passed
  • Official

    Runs the Megatron-LM autoformat script and its linting tools before a pull request, and keeps Python imports in order with isort.

    18k GitHub stars~317 tokensUpdated today
    DevelopmentAuto-check passed
  • Vibe Python Style Guide

    mistralai/mistral-vibe

    Official

    Python conventions for the Mistral Vibe codebase covering style, strict typing, imports, Pydantic patterns, logging, error handling and file I/O.

    5.1k GitHub stars~1.2k tokensUpdated yesterday
    DevelopmentAuto-check passed

More from google/adk-recipes

All 14 skills in this repo
  • Retail Product Search Agent

    google/adk-recipes

    Official

    Builds a retail product search agent on Google Cloud, from catalog ingestion into BigQuery and Vector Search to ADK scaffolding, evaluation and Cloud Run deployment.

    10k GitHub stars~3k tokensUpdated yesterday
    Auto-check passed
  • Official

    Generates a minimal tests/test_runnability.py for a Python agent recipe that imports the agent module and checks root_agent, adding only the mocks and env vars it needs.

    10k GitHub stars~3.3k tokensUpdated yesterday
    Auto-check passed
  • Retail Virtual Try-On Agent

    google/adk-recipes

    Official

    Sets up a virtual try-on agent on Google Cloud that generates image and catwalk-video try-ons with Gemini, from first setup through local testing.

    10k GitHub stars~3.5k tokensUpdated yesterday
    Auto-check passed
  • Scaffold Python ADK Recipe

    google/adk-recipes

    Official

    Creates a new Python recipe for the ADK recipes repository by running a scaffold script that copies template files, after confirming the output directory and recipe name.

    10k GitHub stars~931 tokensUpdated yesterday
    Auto-check passed
  • Official

    Reviews a GitHub pull request and drafts a small set of inline comments in a human reviewing voice, each checkable from the line it points at, then posts them after approval.

    10k GitHub stars~8.4k tokensUpdated yesterday
    Auto-check passed
  • Official

    Makes an existing Python recipe deployable: generates the serving files a container needs (Dockerfile, .dockerignore, fastapiapp.py, apputils/a2a.py, apputils/services.py…

    10k GitHub stars~6.9k tokensUpdated yesterday
    Auto-check: notes

Categories

Questions about Align Recipe pyproject.toml

What does Align Recipe pyproject.toml do?

Brings a Python recipe's pyproject.toml in line with the repo's CI rules, either as a read-only dry run or by rewriting the file while keeping comments. py against a recipe directory and checks eight rules enforced by the repository's recipe validation workflow, plus a check that a build-system table is present. Dry-run mode only reports what needs alignment.

When should I use Align Recipe pyproject.toml?

Align Recipe pyproject.toml fits situations like: aligning a recipe's pyproject.toml with the repo standard; checking what needs changing before submitting a recipe PR; fixing a requires-python floor that does not accept Python 3.11; removing local ruff settings from a recipe.

How do I install Align Recipe pyproject.toml in Claude Code?

Run `npx skills add google/adk-recipes --skill align-recipe-pyproject -a claude-code`. Or copy the skill folder (.agents/skills/align-recipe-pyproject in google/adk-recipes) into .claude/skills/align-recipe-pyproject in your project. Claude Code loads it when a task matches its description.

How do I install Align Recipe pyproject.toml in Codex?

Run `npx skills add google/adk-recipes --skill align-recipe-pyproject -a codex`. Or copy the skill folder (.agents/skills/align-recipe-pyproject in google/adk-recipes) into .agents/skills/align-recipe-pyproject in your project. Codex loads it when a task matches its description.

Can I use Align Recipe pyproject.toml in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add google/adk-recipes --skill align-recipe-pyproject -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/align-recipe-pyproject, .gemini/skills/align-recipe-pyproject, .github/skills/align-recipe-pyproject and .opencode/skills/align-recipe-pyproject in your project.

What does Align Recipe pyproject.toml need to run?

Going by SKILL.md and its folder, Align Recipe pyproject.toml needs Python for the scripts in its folder and the command-line tools its instructions call (uv, python, git and pip). Our summary lists: Python, to run scripts/align_pyproject.py; A recipe directory in the google/adk-recipes layout.

Does Align Recipe pyproject.toml access the network?

SKILL.md names 1 domain. In commands or code: pypi.org; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Align Recipe pyproject.toml safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Align Recipe pyproject.toml use?

Align Recipe pyproject.toml is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Align Recipe pyproject.toml use?

About 4.6k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Align Recipe pyproject.toml?

Skills that share tags, products or a category with Align Recipe pyproject.toml: Update Dependencies (alorence/django-modern-rpc, 111 stars), Cb Code Quality (BlkLeg/CircuitBreaker, 201 stars), Code Quality (notque/vexjoy-agent, 435 stars) and ONNX Runtime Lint (microsoft/onnxruntime, 22k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Align Recipe pyproject.toml?

google (a GitHub organization, an official publisher) maintains it in google/adk-recipes, which has 10,419 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 5, 2026.

Source: google/adk-recipes on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.