npx skills add ...
npx skills add paulnsorensen/easy-cheese --skill python-authoring
Write, edit, refactor, or review Python in easy-cheese with concise stdlib-first code, Python 3.12, wedge .pyz packaging, and repository test and validation conventions. Use for Python changes under src/, scripts/, .github/scripts/, or tests/, especially when the user asks for Pythonic, succinct, de-slopped, dataclass-based, CLI, validator, or bundled-helper code.
npx skills add paulnsorensen/easy-cheese --skill python-authoring
Produce the smallest readable Python change that satisfies the request and matches easy-cheese.
This is a repository-local skill. Keep it under .agents/skills/python-authoring/; do not mirror it into the published skills/ tree or add agents/openai.yaml. Renaming this directory requires updating the matching !.agents/skills/<dir>/ line in .gitignore — that path list is an allowlist, so a renamed dir without its own line is silently untracked.
just check.src/. Any third-party runtime dependency must be pure Python and admitted to requirements/runtime.txt; bundle builds resolve internal and external hashes into an ephemeral requirements file.argparse, json, pathlib, tempfile, shutil, zipfile, collections, itertools, and contextlib over hand-written equivalents.TypedDict only when a mapping must remain a mapping. It documents a static shape; it does not validate runtime input.Enum or Literal for closed value sets and Protocol for structural interfaces that have multiple real consumers.src/easy_cheese/skills/<skill_name>/ and declare its CLI surface in commands.py.src/easy_cheese/shared/ only when multiple existing skills need the same behavior; bundle it into each owning archive.skills/<skill>/scripts/<skill>.pyz by hand. Run just wedge-build after changing archive inputs and just wedge-check to verify committed archives.argv, return an integer status, print diagnostics to stderr, and propagate failure through a nonzero exit..github/scripts/ validators read-only. They inspect and report; they do not mutate the workspace.match for genuine shape-based dispatch; keep a simple if for a binary decision.any, all, comprehensions, and generator expressions for pure collection queries or transformations. Keep a loop when it carries state, side effects, or clearer early exits.enumerate, direct iteration, f-strings, context managers, and pathlib instead of manual indexing, string assembly, cleanup, or path manipulation.except, swallow Exception, return an empty default on failure, or use contextlib.suppress(Exception).basedpyright <changed .py files> (fall back to uvx basedpyright if the binary is absent) before finishing. Changed files must report zero errors and warnings.[tool.basedpyright] in pyproject.toml: include paths, pythonVersion = "3.12", and an execution environment pinning src/easy_cheese_schemas to 3.11 to honor the published wheel's requires-python >=3.11. typeCheckingMode is deliberately unset — basedpyright defaults to recommended, which enables every rule with an error/warning split and failOnWarnings, so a full run fails on warnings too.just typecheck (wired into just check, just ci, and the validate workflow) enforces zero errors and warnings. Any diagnostic your change surfaces is yours to fix before finishing — there is no baseline and no pre-existing backlog to defer to. Imports resolve against .venv-typing; just typecheck-install (re)creates it from requirements/typing.txt._ (reportUnusedCallResult), collapse implicit string concatenations, and cast untrusted boundary reads to their validated type.importlib.import_module plus cast-typed getattr, not static imports the checker cannot resolve.# pyright: ignore[ruleName], never a bare # type: ignore or a file-wide switch — reportIgnoreCommentWithoutRule flags unscoped ignores.--outputjson when a tool needs machine-readable diagnostics. In GitHub Actions the CLI detects CI and emits inline PR annotations with no extra flags.pyright and pyright-langserver shims resolve to basedpyright.tmp_path or an equivalent temporary directory. Do not depend on user paths, repository-external state, network access, or auto-loaded pytest plugins.skills/<skill>/scripts/<skill>.pyz archives without rebuilding them. Keep repository imports unavailable when testing archive isolation.just wedge-build, then just wedge-check before focused tests execute an archive. Run just update-generated when generated runtime sources change.just check as the final project gate.Confirm:
scripts/runtime_gates.py, just wedge-check).just check run passed.