Agent skill

Python Idioms

by irahardianto in irahardianto/awesome-agv

Modern Python (3.11+) idioms: type annotations, typing Protocols, Pydantic models, asyncio, pytest fixtures, and Ruff/Mypy strict compliance.

MITAuto-check passedDevelopment

Install Python Idioms

skills CLI
$ npx skills add irahardianto/awesome-agv --skill python-idioms -a claude-code

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

GitHub CLI
$ gh skill install irahardianto/awesome-agv python-idioms --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/irahardianto/awesome-agv.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/python-idioms .claude/skills/python-idioms && 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
python-idioms
GitHub stars
157
Token cost
~4.4k tokens
SKILL.md length
1,354 words
Files
4 (incl. references)
Skills in repo
34
Repo updated
First seen
Licence
MIT

At a glance

Modern Python (3.11+) idioms: type annotations, typing Protocols, Pydantic models, asyncio, pytest fixtures, and Ruff/Mypy strict compliance.

  • Works in 6 steps: Minimize dependency count — each… → Audit regularly — run pip-audit in CI. → Use pyproject.toml as the single source… → …
  • Reviewing Python applications
  • Calls pytest, ruff and mypy
  • Tasks that involve Type safety

What it does

Python Idioms is an agent skill from irahardianto/awesome-agv. Modern Python (3.11+) idioms: type annotations, typing Protocols, Pydantic models, asyncio, pytest fixtures, and Ruff/Mypy strict compliance. Use when writing, refactoring, or reviewing Python applications, APIs, or scripts.

Its SKILL.md is about 4.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/project-structure.md`, `references/python-patterns-and-anti-patterns.md` and `references/recommended-dependencies.md`).

It sits in Development, covering Type safety, Linting and formatting and Refactoring. It works with Python, Pydantic, Ruff and pytest. The repository describes itself as: Comprehensive sets of standards and practices designed to elevate the capabilities of AI coding agents. The licence is MIT.

When your agent uses it

  • Reviewing Python applications
  • Tasks that involve Type safety
  • Tasks that involve Linting and formatting

Example prompts

  • “/python-idioms”

Requirements

  • Python 3

Workflow steps

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

  1. Minimize dependency count — each dependency is an attack surface.
  2. Audit regularly — run pip-audit in CI.
  3. Use pyproject.toml as the single source of truth for project metadata.
  4. Commit lockfiles for applications (uv.lock, requirements.lock).
  5. Prefer stdlib over third-party when feature parity exists.
  6. Check for unused dependencies with import analysis.

What it can do on your machine

Read from SKILL.md and the folder at commit 9e997ba. 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

    Shell commands in SKILL.md call:

    • pytest
    • ruff
    • mypy

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

  • Network

    No URLs in SKILL.md.

    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

Python Idioms loads about 4.4k tokens when it runs, and up to ~14k if it reads all its reference files. Until then it costs about 60 tokens; SKILL.md has 1,354 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~60
When it runs · the whole SKILL.md, loaded when a task matches
~4.4k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~14k

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from irahardianto/awesome-agv at commit 9e997ba, republished under its MIT licence (© irahardianto). 1,354 words, ~4,391 tokens.

Download SKILL.mdSave it as .claude/skills/python-idioms/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
python-idioms
description
Modern Python (3.11+) idioms: type annotations, typing Protocols, Pydantic models, asyncio, pytest fixtures, and Ruff/Mypy strict compliance. Use when writing, refactoring, or reviewing Python applications, APIs, or scripts.

Python Idioms and Patterns

Core Philosophy

Python rewards explicitness and readability over cleverness. Follow the Zen of Python. If it reads like plain English, it's probably idiomatic.

Scope: This skill covers Python-specific coding idioms. For file layout see references/project-structure.md. For safety/SAST/performance patterns see references/python-patterns-and-anti-patterns.md. For logging see logging-implementation skill. For quality commands see code-idioms-and-conventions rule.

Loading Guards
  • If no pyproject.toml or *.py files, this skill does not apply
  • If Django project (django in dependencies), co-load django-idioms skill alongside this one
When to Load References
SituationReference to Load
Starting a new project or setting up file layoutreferences/project-structure.md
Choosing packages, pyproject.toml setup, or ruff configreferences/recommended-dependencies.md
Writing code that handles user input, async operations, or I/Oreferences/python-patterns-and-anti-patterns.md
Toolchain and Python Version
  • Default to latest stable Python. As of August 2026, Python 3.14. Minimum target: 3.13+.
  • Key version milestones:
    • 3.14+ — Deferred evaluation of annotations (PEP 649, no more from __future__ import annotations), template strings (PEP 750)
    • 3.13+ — Improved error messages, experimental free-threaded build, experimental JIT
    • 3.12+ — Type parameter syntax type X = ... (PEP 695), @override decorator, improved f-strings, itertools.batched
    • 3.11+ — StrEnum, ExceptionGroup + except*, asyncio.TaskGroup, tomllib, fine-grained error locations
    • 3.10+ — Pattern matching (match/case), X | Y union syntax, TypeAlias
Type Hints — Non-Negotiable

Type hints are required for all public APIs, class attributes, and function signatures.

  • Use standard collections (list, dict, set) for typing, not typing.List etc.
  • Use X | Y instead of Union[X, Y] or Optional[X].
  • Use PEP 695 type parameter syntax (3.12+) for generic types: type Vector[T] = list[T]
  • Use @override (3.12+) to ensure methods actually override a base class method.
  • Use TypeVar with constraints and bounds when necessary.
  • Use Never for functions that always raise an exception or never return.
python
# ❌ Anti-pattern: Untyped or legacy typing
from typing import List, Optional, TypeVar

T = TypeVar('T')

def process_items(items: List[T], strict: Optional[bool] = None) -> List[T]: ...

class Worker(BaseWorker):
    def run(self): ... # Overrides base class? Maybe.
python
# ✅ Recommended pattern: Modern typing syntax
from typing import override, Never

type Vector[T] = list[T]

def process_items[T](items: Vector[T], strict: bool | None = None) -> Vector[T]: ...

class Worker(BaseWorker):
    @override
    def run(self) -> None: ...

def crash_and_burn(msg: str) -> Never:
    raise RuntimeError(msg)

Protocols for Structural Subtyping Define required behavior via Protocol instead of inheritance when depending on abstractions.

TypedDict for JSON/Dict payloads When dealing with dictionaries that have a fixed schema, use TypedDict.

Error Handling
  • Raise specific exceptions, not generic Exception.
  • Build a domain-specific exception hierarchy (e.g. AppError base class).
  • Never explicitly silence errors without handling or logging (except Exception: pass). Use contextlib.suppress() if appropriate and intentional.
  • Use exception groups and except* (3.11+) when multiple errors can occur simultaneously.
  • Use add_note() (3.11+) to attach additional context to exceptions before re-raising.
  • Pattern: Never assign the result of functions that return None (DeepSource bug risk).
  • Pattern: finally blocks should not swallow exceptions; they are for cleanup only.
python
# ❌ Anti-pattern: Broad except, swallowing errors, assigning None
def load_data():
    try:
        data = fetch()
        return data
    except Exception as e:
        print(f"Failed: {e}")
        
    finally:
        return None # Swallows exception!

res = dict.get("key") # Might return None, then what?
python
# ✅ Recommended pattern: Specific exceptions, exception groups, add_note
class AppError(Exception): pass
class NetworkError(AppError): pass

def load_data() -> dict:
    try:
        return fetch()
    except TimeoutError as e:
        e.add_note("Timeout while fetching external data")
        raise NetworkError("Failed to fetch") from e

# Exception groups (3.11+)
try:
    raise ExceptionGroup("Multiple failures", [NetworkError(), ValueError()])
except* NetworkError as e:
    handle_network(e)
except* ValueError as e:
    handle_value(e)
Dataclasses and Pydantic
  • Use @dataclass for internal data structures.
  • Use @dataclass(frozen=True, slots=True) (3.10+) as the recommended default for value objects. slots=True avoids __dict__ creation, saving memory and speeding up attribute access.
  • Use @dataclass(kw_only=True) (3.10+) to require keyword arguments.
  • Use Pydantic BaseModel when data crosses system boundaries (I/O, APIs, config) and requires validation.
  • Use Pydantic v2 model_validator and field_validator for complex validation rules.
python
# ✅ Recommended pattern: Dataclasses
from dataclasses import dataclass

@dataclass(frozen=True, slots=True, kw_only=True)
class UserConfig:
    id: int
    username: str
    active: bool = True
python
# ✅ Recommended pattern: Pydantic Validation
from pydantic import BaseModel, field_validator, model_validator

class User(BaseModel):
    password: str
    password_confirm: str

    @model_validator(mode="after")
    def check_passwords_match(self) -> "User":
        if self.password != self.password_confirm:
            raise ValueError("Passwords do not match")
        return self

When to use which:

Use CaseRecommendation
Untrusted / external data (API input, config files, webhook payloads)pydantic.BaseModel
Internal value objects, domain entities (no validation needed)@dataclass(frozen=True, slots=True)
Dictionary-shaped typed data (JSON response shapes, kwargs mappings)TypedDict
Named string or integer constantsenum.StrEnum / enum.IntEnum
Interfaces and Dependency Injection

Prefer composition and dependency injection over deep inheritance hierarchies. Depend on typing.Protocol to define the interface a function or class expects.

python
# ✅ Recommended pattern: Dependency Injection with Protocols
from typing import Protocol

class MessageSender(Protocol):
    def send(self, msg: str) -> None: ...

class EmailSender:
    def send(self, msg: str) -> None:
        pass # Implementation

def notify_user(sender: MessageSender) -> None:
    sender.send("Hello")
Async / Await
  • Use asyncio.TaskGroup (3.11+) as the preferred way to run concurrent tasks over asyncio.gather. It provides structured concurrency and better error handling.
  • Use asyncio.Runner (3.11+) for managing the event loop lifecycle instead of raw get_event_loop().
  • Never call asyncio.run() from inside an already running event loop.
  • Use asyncio.to_thread() to offload blocking/CPU-bound work to a thread pool so the event loop is not blocked.
python
# ❌ Anti-pattern: Unstructured concurrency
import asyncio

async def main():
    await asyncio.gather(task1(), task2()) # Errors in one task don't cancel the other easily
python
# ✅ Recommended pattern: Structured concurrency with TaskGroup
import asyncio

async def main():
    try:
        async with asyncio.TaskGroup() as tg:
            task1 = tg.create_task(fetch_data())
            task2 = tg.create_task(process_data())
        # tg automatically waits for all tasks. If one fails, others are cancelled.
    except* Exception as e:
        print(f"Task group failed: {e}")
Naming Conventions
EntityConventionExample
Variables, Functions, Methodssnake_casecalculate_total()
Classes, Protocols, TypeAliasesPascalCaseUserRepository
ConstantsUPPER_SNAKE_CASEMAX_RETRIES
Protected/Private members_leading_underscore_internal_cache
Dunder methods__dunder____init__
  • Be descriptive. fetch_user_by_id(user_id: int) is better than get_u(i).
Idiomatic Patterns
  • Context Managers: Use with statements for resource management (files, network connections, locks).
  • Generators: Use yield for lazy evaluation and memory efficiency when dealing with large sequences.
  • dataclasses.replace: Use for immutable updates to dataclasses.
  • functools.cache / lru_cache: Use for memoizing expensive deterministic function calls.
  • __slots__: Use via @dataclass(slots=True) or explicitly to save memory on heavily instantiated classes.
  • StrEnum: (3.11+) Use for string-based enumerations.
  • Pattern Matching (3.10+): Use match/case for structural pattern matching instead of long if/elif/else chains.
  • String Affixes (3.9+): Use str.removeprefix() and str.removesuffix() instead of error-prone slicing or strip().
  • Dict Merge Operator (3.9+): Use dict1 | dict2 to merge dictionaries.
  • Walrus Operator :=: Use for assignment expressions to avoid repeating expensive calls or improving loop conditions.
  • itertools.batched (3.12+): Use to cleanly chunk iterables into batches.
  • pathlib.Path: ALWAYS prefer over os.path for file operations.
  • Mutable Defaults: NEVER use mutable default arguments ([], {}). Use None as a sentinel. (DeepSource #1 bug risk)
python
# ❌ Anti-pattern: Mutable default argument
def add_item(item: str, items: list = []) -> list:
    items.append(item)
    return items

# ✅ Recommended pattern: None sentinel
def add_item(item: str, items: list | None = None) -> list:
    if items is None:
        items = []
    items.append(item)
    return items
python
# ✅ Recommended pattern: Pattern matching & itertools.batched
import itertools

def process(command: dict | list):
    match command:
        case {"action": "delete", "id": int(id_val)}:
            delete_record(id_val)
        case list(items):
            for batch in itertools.batched(items, 100):
                process_batch(batch)
Testing

Write deterministic tests focusing on behavior.

  • Test coverage non-negotiable policy (same as Rust/TS).
  • Coverage commands: pytest --cov=src --cov-report=term-missing
  • Prefer @pytest.mark.parametrize for data-driven testing.
  • Use pytest-asyncio for async tests.
  • Use typed mock factories or fixtures instead of patch decorators when possible.

Test Double Selection Table:

ApproachWhen to Use
Hand-written fake (implement Protocol)Simple interface, few methods, need stateful behavior
pytest-mock (mocker fixture)Verify call counts, argument matching
respxHTTP boundary mocking — intercepts httpx calls
@pytest.mark.parametrizeSame logic, multiple input/output pairs
Snapshot (syrupy)Large outputs — JSON responses, CLI output
hypothesisProperty-based testing for wide input spaces
Show full SKILL.md (494 more words)Show less
Lint Suppression Policy

NEVER suppress these — they signal structural problems:

RuleWhat It SignalsWhat To Do Instead
F841 (unused variable)Dead codeRemove the variable
S rules (security)Security vulnerabilityFix the vulnerability
B006 (mutable default)Shared mutable state bugUse None sentinel pattern
ANN (missing annotations)Untyped public APIAdd type annotations
E712 (== True/False/None)Identity vs equality confusionUse is / is not

Acceptable suppressions (with mandatory # noqa: + reason comment):

RuleWhen Acceptable
S101 (assert)In test files only
ANN101/ANN102 (self/cls annotations)Standard convention — self/cls never need annotations
T20 (print)In CLI tools or scripts
ARG (unused argument)In interface implementations where signature is fixed

Rule of thumb: If you're about to write # noqa:, stop and ask: "Am I suppressing a real design problem?"

Formatting and Static Analysis — Feedback Loop

Adopt the standard Rust/TS-style static analysis workflow:

PhaseCommandPurpose
TDD / rapid iterationmypy src/ --strictType-check only — fastest feedback
Pre-commitruff check . --fixLint — must pass with zero warnings
Pre-commitruff format .Formatting — non-negotiable
Pre-commitpytestUnit tests — must all pass
Coverage verificationpytest --cov=src --cov-report=term-missingVerify before merging
Security auditbandit -r src/ -c pyproject.tomlSecurity scanning
Dependency auditpip-auditCVE scanning

Configure all tools in pyproject.toml — never use per-file pragma comments to disable checks without a # noqa: reason comment.

Never use print() in production. Always use a configured logger (see logging-implementation skill).

Documentation

Document all public items:

  • Every public function, class, method, and module MUST have a docstring.
  • Use Google-style docstrings (recommended) or NumPy-style (for scientific code).
  • At minimum: one-line summary. For complex items: summary + Args + Returns + Raises.
python
# ❌ Anti-pattern: Undocumented public API
def calculate_discount(price: float, rate: float) -> float:
    return price * (1 - rate)
python
# ✅ Recommended pattern: Documented public API
def calculate_discount(price: float, rate: float) -> float:
    """Calculates the final price after applying a discount rate.

    Args:
        price: The original price.
        rate: The discount rate as a decimal (e.g., 0.2 for 20%).

    Returns:
        The final discounted price.
        
    Raises:
        ValueError: If the rate is not between 0.0 and 1.0.
    """
    if not (0.0 <= rate <= 1.0):
        raise ValueError("Rate must be between 0.0 and 1.0")
    return price * (1 - rate)
Dependency Management
  1. Minimize dependency count — each dependency is an attack surface.
  2. Audit regularly — run pip-audit in CI.
  3. Use pyproject.toml as the single source of truth for project metadata.
  4. Commit lockfiles for applications (uv.lock, requirements.lock).
  5. Prefer stdlib over third-party when feature parity exists.
  6. Check for unused dependencies with import analysis.

For the full curated dependency list with versions, see references/recommended-dependencies.md.

Configuration and Environment
  1. Never scatter os.environ / os.getenv() calls throughout the codebase.
  2. Use pydantic-settings BaseSettings for validated, typed config.
  3. Fail fast on missing required config at boot, not at first use.
python
# ❌ Anti-pattern: Scattered os.getenv calls
import os

def connect_db():
    db_url = os.getenv("DATABASE_URL") # Fails later if missing
    # connect...
python
# ✅ Recommended pattern: Centralized typed config
from pydantic_settings import BaseSettings

class Settings(BaseSettings):
    database_url: str
    api_key: str

# Fails immediately at startup if env vars are missing or invalid
settings = Settings() 

def connect_db():
    db_url = settings.database_url
    # connect...
Safety, Security, and Performance
  • Key safety rules (non-negotiable):
    • Never use eval() or exec() with untrusted input.
    • Never use pickle on untrusted data.
    • Always parameterize SQL queries; never concatenate strings to build SQL.
    • Always validate user input at system boundaries.
  • See references/python-patterns-and-anti-patterns.md for the full catalog of safety and security patterns.
  • See perf-optimization skill for profiling and performance guidance.
  • Code Idioms and Conventions @code-idioms-and-conventions.md
  • Project Structure — Python Backend @references/project-structure.md
  • Security Principles @security-principles.md
  • Architectural Patterns — Testability-First Design @architectural-pattern.md
  • Testing Strategy @testing-strategy.md
  • Error Handling Principles @error-handling-principles.md
  • Core Design Principles § Concurrency @core-design-principles.md
  • Logging and Observability Mandate @logging-and-observability-mandate.md
  • Logging Implementation @.agents/skills/logging-implementation/SKILL.md
  • Django Idioms @.agents/skills/django-idioms/SKILL.md
  • Testability Patterns @.agents/skills/testability-patterns/SKILL.md
  • Concurrency and Threading Principles @concurrency-and-threading-principles.md
  • Performance Optimization Principles @performance-optimization-principles.md
  • Resource and Memory Management Principles @resources-and-memory-management-principles.md
  • Security Mandate @security-mandate.md
  • Dependency Management Principles @dependency-management-principles.md
  • Recommended Dependencies @references/recommended-dependencies.md
  • Python Patterns and Anti-Patterns @references/python-patterns-and-anti-patterns.md

© irahardianto, MIT. 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 (references) in .agents/skills/python-idioms of irahardianto/awesome-agv.

  • SKILL.md
  • references/project-structure.md
  • references/python-patterns-and-anti-patterns.md
  • references/recommended-dependencies.md

Open the folder on GitHubat commit 9e997ba

Compare with similar skills

Python Idioms 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.

Python Idioms compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Python Idioms this skillirahardianto/awesome-agv157—~4.4kAutomated safety check: PassMIT
Python Rulessoftspark/ai-toolkit179—~2.9kAutomated safety check: PassApache-2.0
Kedro Babysitkedro-org/kedro11k—~4kAutomated safety check: PassCustom licence
Update Dependenciesalorence/django-modern-rpc111—~1.3kAutomated safety check: PassMIT
Adk Stylegoogle/adk-python22k—~769Automated safety check: PassApache-2.0
Cb Code QualityBlkLeg/CircuitBreaker201—~1.9kAutomated safety check: PassMIT

Similar skills

  • Python Rules

    softspark/ai-toolkit

    Python coding rules: style, patterns, security, testing. An agent skill from softspark/ai-toolkit.

    179 GitHub stars~2.9k tokensUpdated yesterday
    Backend & APIsAuto-check passed
  • Kedro Babysit

    kedro-org/kedro

    Run Kedro's local lint / format / type-check / tests on changed files (uses the project's pre-commit hooks, ruff, mypy, pytest, lint-imports, detect-secrets, Make targets — in the right venv), or…

    11k GitHub stars~4k tokensUpdated today
    DevelopmentAuto-check passed
  • 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
  • Adk Style

    google/adk-python

    Official

    Python style and codebase conventions for ADK (Agent Development Kit): private-by-default file visibility, imports, type hints, Pydantic v2 models, formatting, docstrings, logging, async I/O, file…

    22k GitHub stars~769 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 2 days ago
    DevelopmentAuto-check passed
  • Python Pro

    Jeffallan/claude-skills

    Writes type-annotated Python 3.11+ with async patterns, dataclasses and pytest suites, validated with mypy in strict mode, black and ruff.

    12k GitHub stars~1.6k tokensUpdated 4 days ago
    DevelopmentAuto-check passed

More from irahardianto/awesome-agv

All 34 skills in this repo
  • Distinctive Frontend Design Builder

    irahardianto/awesome-agv

    Commits to one bold aesthetic direction, sets up a CSS token system for it, then builds the interface in Vue or plain HTML using those tokens.

    157 GitHub stars~2.4k tokensUpdated 3 days ago
    Auto-check passed
  • Perf Optimization

    irahardianto/awesome-agv

    Profile-driven performance optimization protocol. An agent skill from irahardianto/awesome-agv.

    157 GitHub stars~4.3k tokensUpdated 3 days ago
    Auto-check passed
  • Angular Idioms and Patterns

    irahardianto/awesome-agv

    Coding conventions for Angular 19 and later: standalone components, signals, OnPush change detection, lazy routes and where RxJS still belongs.

    157 GitHub stars~3.8k tokensUpdated 3 days ago
    Auto-check passed
  • CI/CD Pipeline Principles

    irahardianto/awesome-agv

    Rules for designing CI/CD pipelines in layers: universal lint, test and scan stages, container builds with SBOM attestation, and GitOps for orchestrated deployments.

    157 GitHub stars~2.7k tokensUpdated 3 days ago
    Auto-check: notes
  • Hono Idioms

    irahardianto/awesome-agv

    Hono lightweight web framework patterns: type-safe route handlers, middleware composition, Zod validation, and RPC clients for Cloudflare Workers, Node, or Bun.

    157 GitHub stars~3k tokensUpdated 3 days ago
    Auto-check passed
  • Mobile Testing

    irahardianto/awesome-agv

    Mobile E2E testing patterns — Flutter integrationtest, Patrol, Maestro, golden testing, device matrix, and test data management.

    157 GitHub stars~1.8k tokensUpdated 3 days ago
    Auto-check: notes

Categories

Questions about Python Idioms

What does Python Idioms do?

Modern Python (3.11+) idioms: type annotations, typing Protocols, Pydantic models, asyncio, pytest fixtures, and Ruff/Mypy strict compliance. Python Idioms is an agent skill from irahardianto/awesome-agv.11+) idioms: type annotations, typing Protocols, Pydantic models, asyncio, pytest fixtures, and Ruff/Mypy strict compliance.

When should I use Python Idioms?

Python Idioms fits situations like: reviewing Python applications; tasks that involve Type safety; tasks that involve Linting and formatting.

How do I install Python Idioms in Claude Code?

Run `npx skills add irahardianto/awesome-agv --skill python-idioms -a claude-code`. Or copy the skill folder (.agents/skills/python-idioms in irahardianto/awesome-agv) into .claude/skills/python-idioms in your project. Claude Code loads it when a task matches its description.

How do I install Python Idioms in Codex?

Run `npx skills add irahardianto/awesome-agv --skill python-idioms -a codex`. Or copy the skill folder (.agents/skills/python-idioms in irahardianto/awesome-agv) into .agents/skills/python-idioms in your project. Codex loads it when a task matches its description.

Can I use Python Idioms 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 irahardianto/awesome-agv --skill python-idioms -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/python-idioms, .gemini/skills/python-idioms, .github/skills/python-idioms and .opencode/skills/python-idioms in your project.

What does Python Idioms need to run?

Going by SKILL.md and its folder, Python Idioms needs the command-line tools its instructions call (pytest, ruff and mypy). Our summary lists: Python 3.

Does Python Idioms access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Python Idioms 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. Review the folder before installing.

What licence does Python Idioms use?

Python Idioms is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Python Idioms use?

About 4.4k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 9.9k tokens, read only when the agent opens those files.

What are the alternatives to Python Idioms?

Skills that share tags, products or a category with Python Idioms: Python Rules (softspark/ai-toolkit, 179 stars), Kedro Babysit (kedro-org/kedro, 11k stars), Update Dependencies (alorence/django-modern-rpc, 111 stars) and Adk Style (google/adk-python, 22k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Python Idioms?

irahardianto (a GitHub user) maintains it in irahardianto/awesome-agv, which has 157 GitHub stars. The repository holds 34 skills in this directory. The repository was last updated on October 5, 2026.

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