Not in the top 1,000 by GitHub stars
wdm0006/python-skills
a set of claude skills for python development (and more) based on mcginniscommawill.com writings.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/common/accessible-interfaces/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/app-config/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/build-artifacts/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/ci-permissions/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/concurrent-branches/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/cross-surface-changes/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/defect-reports/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/derived-metrics/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/destructive-operations/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/git-hygiene/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/github-actions/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/interaction-states/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/marketing-pages/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/rendering-untrusted-content/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/reproducing-ci-locally/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/sync-jobs/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/text-normalization/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/threshold-calibration/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/ui-design/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/common/verifying-external-behavior/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/go/projects/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/javascript/browser-extensions/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/python/api-design/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/python/cli-development/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/python/code-quality/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/python/community/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/python/documentation/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/python/lazy-dependencies/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/python/library-review/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/python/llm-features/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/python/mcp-servers/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/python/packaging/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/python/performance/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/python/project-setup/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/python/release-management/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/python/security-audit/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/python/testing-strategy/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/python/web-app-architecture/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/rust/crates/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/scala/projects/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/swift/apps/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
skills/swift/releases/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a6ecdc0286de
No earlier version was observed for comparison.
Verified commit a6ecdc0286deb95cc0a8fb1840086089ed8847d4
git clone --filter=blob:none --no-checkout https://github.com/wdm0006/python-skills.git .hotskills/wdm0006-python-skills && git -C .hotskills/wdm0006-python-skills checkout --detach a6ecdc0286deb95cc0a8fb1840086089ed8847d4
# Copy each selected skill directory from .hotskills/wdm0006-python-skills into .claude/skills/<skill-name>/Heat
1.8- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- building-accessible-interfaces
skills/common/accessible-interfaces - wiring-application-config
skills/common/app-config - shipping-build-artifacts
skills/common/build-artifacts - permissioning-ci-workflows
skills/common/ci-permissions - concurrent-branches
skills/common/concurrent-branches - shipping-across-surfaces
skills/common/cross-surface-changes - writing-defect-reports
skills/common/defect-reports - reporting-derived-metrics
skills/common/derived-metrics - guarding-destructive-operations
skills/common/destructive-operations - keeping-git-repos-clean
skills/common/git-hygiene - running-github-actions-efficiently
skills/common/github-actions - designing-interaction-states
skills/common/interaction-states - designing-marketing-pages
skills/common/marketing-pages - rendering-untrusted-content
skills/common/rendering-untrusted-content - reproducing-ci-locally
skills/common/reproducing-ci-locally - running-resumable-sync-jobs
skills/common/sync-jobs - normalizing-text-for-measurement
skills/common/text-normalization - calibrating-thresholds-and-baselines
skills/common/threshold-calibration - designing-interfaces
skills/common/ui-design - verifying-external-behavior
skills/common/verifying-external-behavior - building-go-projects
skills/go/projects - building-browser-extensions
skills/javascript/browser-extensions - designing-python-apis
skills/python/api-design - building-python-clis
skills/python/cli-development - improving-python-code-quality
skills/python/code-quality - building-python-communities
skills/python/community - documenting-python-libraries
skills/python/documentation - deferring-heavy-dependencies
skills/python/lazy-dependencies - reviewing-python-libraries
skills/python/library-review - building-llm-backed-features
skills/python/llm-features - building-python-mcp-servers
skills/python/mcp-servers - packaging-python-libraries
skills/python/packaging - optimizing-python-performance
skills/python/performance - setting-up-python-libraries
skills/python/project-setup - managing-python-releases
skills/python/release-management - auditing-python-security
skills/python/security-audit - testing-python-libraries
skills/python/testing-strategy - building-python-web-apps
skills/python/web-app-architecture - building-rust-crates
skills/rust/crates - building-scala-projects
skills/scala/projects - building-swift-apps
skills/swift/apps - shipping-swift-apps
skills/swift/releases
How it works
building-accessible-interfaces
When your agent uses it
Makes web and app UIs usable by keyboard, screen-reader, low-vision and motion-sensitive users — semantic HTML before ARIA, labelled controls, visible focus, WCAG AA contrast measured rather than eyeballed, touch targets, reduced motion, and automated axe checks plus a manual keyboard pass in CI or before every UI PR. Use when building or restyling a screen, adding a form, modal, menu or custom control, choosing colors, or reviewing a UI change.
What it loads into context
Frontmatter
106 tokensAlways available to the agent
SKILL.md
1,498 tokensWhen the skill is activated
Reference documents
144,614 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Contents
- Step 1 — Semantic HTML first
- Step 2 — Every control has a name
- Step 3 — Keyboard and focus
- Step 4 — Contrast, measured
- Step 5 — Motion, zoom and touch
- Step 6 — Automated checks plus a manual pass
- Native apps
- Anti-patterns
Scripts executed separately
../../python/project-setup/scripts/create_project.py../../python/release-management/scripts/bump_version.py../../python/security-audit/scripts/security_scan.py
Files
../../../.claude-plugin/marketplace.jsonasset19,600 bytesSKILL.mdcore5,951 bytesSKILL.mdcore5,951 bytesSKILL.mdcore5,951 bytesSKILL.mdcore5,951 bytes../app-config/SKILL.mddoc13,136 bytes../build-artifacts/SKILL.mddoc7,706 bytes../ci-permissions/SKILL.mddoc9,011 bytes../concurrent-branches/SKILL.mddoc11,000 bytes../cross-surface-changes/SKILL.mddoc11,878 bytes../defect-reports/SKILL.mddoc11,600 bytes../derived-metrics/SKILL.mddoc14,250 bytes../destructive-operations/SKILL.mddoc10,860 bytes../git-hygiene/SKILL.mddoc7,622 bytes../github-actions/SKILL.mddoc14,159 bytes../interaction-states/SKILL.mddoc6,025 bytes../marketing-pages/SKILL.mddoc6,920 bytes../rendering-untrusted-content/SKILL.mddoc8,000 bytes../reproducing-ci-locally/SKILL.mddoc13,498 bytes../sync-jobs/SKILL.mddoc25,902 bytes../text-normalization/SKILL.mddoc13,610 bytes../threshold-calibration/SKILL.mddoc15,825 bytes../ui-design/MODERNIZING.mddoc6,600 bytes../ui-design/SKILL.mddoc14,682 bytes../ui-design/TOKENS.mddoc5,560 bytes../verifying-external-behavior/SKILL.mddoc11,668 bytes../../go/projects/SKILL.mddoc15,145 bytes../../javascript/browser-extensions/SKILL.mddoc17,775 bytes../../python/api-design/EVOLUTION.mddoc6,257 bytes../../python/api-design/PATTERNS.mddoc7,905 bytes../../python/api-design/SKILL.mddoc10,811 bytes../../python/cli-development/CLICK_PATTERNS.mddoc7,329 bytes../../python/cli-development/SKILL.mddoc3,275 bytes../../python/cli-development/TYPER_GUIDE.mddoc5,905 bytes../../python/code-quality/MYPY_CONFIG.mddoc1,427 bytes../../python/code-quality/RUFF_CONFIG.mddoc1,666 bytes../../python/code-quality/SKILL.mddoc13,446 bytes../../python/code-quality/TYPE_PATTERNS.mddoc2,512 bytes../../python/community/GOVERNANCE.mddoc6,368 bytes../../python/community/SKILL.mddoc3,401 bytes../../python/community/TEMPLATES.mddoc6,953 bytes../../python/documentation/SKILL.mddoc3,311 bytes../../python/documentation/SPHINX_CONFIG.mddoc5,039 bytes../../python/documentation/TUTORIALS.mddoc5,886 bytes../../python/lazy-dependencies/SKILL.mddoc8,297 bytes../../python/library-review/CHECKLIST.mddoc6,048 bytes../../python/library-review/REPORT_TEMPLATE.mddoc3,363 bytes../../python/library-review/SKILL.mddoc2,986 bytes../../python/llm-features/SKILL.mddoc11,354 bytes../../python/mcp-servers/SKILL.mddoc11,578 bytes../../python/packaging/CONDA.mddoc3,615 bytes../../python/packaging/SKILL.mddoc6,830 bytes../../python/performance/BENCHMARKS.mddoc6,375 bytes../../python/performance/PROFILING.mddoc7,025 bytes../../python/performance/SKILL.mddoc3,357 bytes../../python/project-setup/CI.mddoc6,175 bytes../../python/project-setup/MAKEFILE.mddoc1,315 bytes../../python/project-setup/PYPROJECT.mddoc3,305 bytes../../python/project-setup/SKILL.mddoc5,110 bytes../../python/project-setup/scripts/create_project.pyruns13,501 bytes../../python/release-management/AUTOMATION.mddoc2,983 bytes../../python/release-management/MIGRATION.mddoc3,033 bytes../../python/release-management/SKILL.mddoc3,638 bytes../../python/release-management/scripts/bump_version.pyruns9,176 bytes../../python/security-audit/CI_SECURITY.mddoc6,494 bytes../../python/security-audit/SKILL.mddoc6,142 bytes../../python/security-audit/VULNERABILITIES.mddoc8,234 bytes../../python/security-audit/scripts/security_scan.pyruns11,162 bytes../../python/testing-strategy/FIXTURES.mddoc1,419 bytes../../python/testing-strategy/HYPOTHESIS.mddoc1,807 bytes../../python/testing-strategy/SKILL.mddoc39,847 bytes../../python/web-app-architecture/AUTH.mddoc9,849 bytes../../python/web-app-architecture/BACKGROUND_JOBS.mddoc7,085 bytes../../python/web-app-architecture/DEPLOYMENT.mddoc8,700 bytes../../python/web-app-architecture/FRONTEND.mddoc3,887 bytes../../python/web-app-architecture/PAYMENTS.mddoc4,826 bytes../../python/web-app-architecture/SKILL.mddoc9,180 bytes../../python/web-app-architecture/STACK.mddoc6,130 bytes../../rust/crates/SKILL.mddoc5,002 bytes../../scala/projects/SKILL.mddoc4,599 bytes../../swift/apps/SKILL.mddoc12,499 bytes../../swift/releases/SKILL.mddoc11,127 bytes
Read SKILL.md
# Building Accessible Interfaces
Accessibility failures are concentrated in a few places: custom controls built from
`div`s, inputs without labels, invisible focus, low-contrast "subtle" text, and
modals that trap nothing or everything. Check those first; they cover most real
users' problems and most automated findings.
## Contents
- Step 1 — Semantic HTML first
- Step 2 — Every control has a name
- Step 3 — Keyboard and focus
- Step 4 — Contrast, measured
- Step 5 — Motion, zoom and touch
- Step 6 — Automated checks plus a manual passView the complete source on GitHubwiring-application-config
When your agent uses it
Load, merge, and validate layered application configuration (defaults plus a user YAML/TOML/JSON file or a stored settings object) so a mis-wired or misspelled key fails loudly instead of silently reverting to the default — sections the code reads that exist nowhere, sections that exist but nothing reads, unvalidated recursive merges, `bool`-passes-as-`int`, defaults aliased by a shallow merge, falsy-but-valid values killed by `or`/`||`, partial write-backs that are stickier than a missing file, and bootstrap ordering that swallows the loader's own warnings. Use when adding a config key, writing or reviewing a config loader/merge/schema, reading a setting in a new module, persisting user settings, wiring logging from config, or debugging a setting that "has no effect".
What it loads into context
Frontmatter
178 tokensAlways available to the agent
SKILL.md
3,019 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- A config key is a contract between two files. Check both ends.
- Be strict at the boundary, permissive after it
- Validate the file surface at load; drop unknown keys with a warning
- Validation makes config a closed surface — add a coverage test
- A merge that recurses on dicts only aliases your defaults
- Falsy is not missing
- Never persist a partial settings object
- Bootstrap ordering: don't swallow the loader's own warnings
- Testing
- Checklist
Files
SKILL.mdcore13,136 bytesSKILL.mdcore13,136 bytesSKILL.mdcore13,136 bytesSKILL.mdcore13,136 bytesSKILL.mdcore13,136 bytesSKILL.mdcore13,136 bytesSKILL.mdcore13,136 bytes
Read SKILL.md
# Wiring Application Configuration
Configuration bugs are quiet because every layer on the path has a fallback. A
value travels defaults → user file → merge → consumer, and each hop can drop it
without raising anything. The result is an application that starts cleanly,
reports success, and runs on values the user did not choose.
**Use a typed settings model when you can.** `pydantic-settings`, a tagged
struct, or any schema-first loader collapses most of this page into one class:
unknown keys and wrong types fail at construction, and every consumer gets
attribute access instead of `config["a"]["b"]`. Reach for the hand-rolled merge
below only when you genuinely need a layered file surface the typed model
doesn't cover — and then port the guarantees, don't skip them.
View the complete source on GitHubshipping-build-artifacts
When your agent uses it
Make the build step a real gate on what you actually distribute — build scripts that warn and exit 0 on a missing input, size checks with only an upper bound, hand-maintained file lists that drift from the entrypoints they must cover, committed bundles that go stale when only the source changes, GNU-only shell in release scripts that aborts on the other OS, and verification that runs against the source tree instead of the artifact. Use when writing or reviewing a build/package script, a `dist/` copy step, a release workflow that uploads a zip or installer, or a committed compiled asset.
What it loads into context
Frontmatter
130 tokensAlways available to the agent
SKILL.md
1,793 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- A script that warns and exits 0 is not a gate
- Bound the artifact size on *both* sides
- Derive the file list, or check it against the entrypoints
- Committed build outputs go stale silently
- Release scripts run on an OS you didn't write them on
- Verify the artifact, then publish — in that order, in that job
- Checklist
Files
SKILL.mdcore7,706 bytesSKILL.mdcore7,706 bytesSKILL.mdcore7,706 bytesSKILL.mdcore7,706 bytesSKILL.mdcore7,706 bytesSKILL.mdcore7,706 bytesSKILL.mdcore7,706 bytesSKILL.mdcore7,706 bytesSKILL.mdcore7,706 bytesSKILL.mdcore7,706 bytesSKILL.mdcore7,706 bytesSKILL.mdcore7,706 bytesSKILL.mdcore7,706 bytesSKILL.mdcore7,706 bytes
Read SKILL.md
# Shipping Build Artifacts
Lint, type-check, and tests run against the source tree. What users install is a
*different* set of bytes — assembled by a script that most gates never look at,
then uploaded by a workflow that trusts whatever the script left behind. Every
failure below ships a broken or stale artifact under fully green CI.
## A script that warns and exits 0 is not a gate
The shape is universal: a declared list of inputs, a copy loop, a friendly
warning when one is missing.
```js
for (const f of DIST_FILES) {View the complete source on GitHubpermissioning-ci-workflows
When your agent uses it
Give a CI job exactly the credentials it needs and know when it has none — declaring `permissions:` explicitly because the default GITHUB_TOKEN scope is a repo setting, reading the 403's x-accepted-github-permissions header instead of guessing the missing scope, one API call needing two scopes, a fork pull request getting a read-only token and no repository secrets, event-conditioned steps that skip on the re-run and turn a job green without fixing it, why `pull_request_target` is not the workaround, and preferring a check that needs no credential at all. Use when a workflow step comments on a PR, pushes a commit, opens an issue, uploads a report, calls another repository's API, or fails 403 while every build and test step passes.
What it loads into context
Frontmatter
165 tokensAlways available to the agent
SKILL.md
2,090 tokensWhen the skill is activated
Reference documents
8,670 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Declare permissions; never inherit them
- One API call can need two scopes
- The failure hides behind the step's own condition
- A fork pull request has a read-only token and no secrets
- `pull_request_target` is not the workaround
- Prefer a check that needs no credential at all
- Checklist
Files
SKILL.mdcore9,011 bytes../cross-surface-changes/SKILL.mddoc11,878 bytes../defect-reports/SKILL.mddoc11,600 bytes../github-actions/SKILL.mddoc14,159 bytes
Read SKILL.md
# Permissioning CI Workflows
A job that only reads code and runs tests needs no thought about credentials. The
moment a step comments on a pull request, pushes a commit, opens an issue,
uploads a report, or calls another repository's API, it depends on two things
that are invisible in the YAML: **which scopes the token carries**, and **whether
the run was allowed to have secrets at all**.
Both fail in the same shape — every build, lint, and test step green, one
trailing step red — which is why they get re-run instead of fixed.
For the cost side of workflows (triggers, concurrency, caching, matrix), see
**[running-github-actions-efficiently](../github-actions/SKILL.md)**. This skill
is about what a workflow is *allowed* to do.View the complete source on GitHubconcurrent-branches
When your agent uses it
Resolve conflicts and merges when several branches are open against one repo at the same time — the hotspot files every change must touch (registry manifests, a single version field, shared tool config, one aggregated test module, tracked build output), union-vs-recompute-vs-rebuild as three different correct resolutions, generated artifacts that must never be merged, non-deterministic serialization that makes every branch conflict, renumbered identifiers that git cannot show you, and why a clean auto-merge is not a passing test. Use when rebasing or merging a long-lived branch, resolving conflict markers, reviewing a merge commit, deciding what a repo should commit vs generate, or setting up a repo that will take parallel contributions.
What it loads into context
Frontmatter
151 tokensAlways available to the agent
SKILL.md
2,508 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Find the hotspots before you need to resolve them
- Additive registries: union both sides, never choose one
- Single-value counters: recompute from the integration branch
- Generated artifacts: rebuild, never merge
- Non-deterministic serialization turns every branch into a conflict
- Shared tool config: take the base file, re-apply your delta
- Aggregated test modules: keep both suites, then check for shadowing
- Append; never renumber a shared identifier
- A clean auto-merge is not verification
- Match the repo's integration style, and re-run the real gate
- Checklist
- Learn More
Files
SKILL.mdcore11,000 bytesSKILL.mdcore11,000 bytesSKILL.mdcore11,000 bytesSKILL.mdcore11,000 bytesSKILL.mdcore11,000 bytesSKILL.mdcore11,000 bytesSKILL.mdcore11,000 bytesSKILL.mdcore11,000 bytesSKILL.mdcore11,000 bytesSKILL.mdcore11,000 bytesSKILL.mdcore11,000 bytesSKILL.mdcore11,000 bytes
Read SKILL.md
# Merging Concurrent Branches
When several branches are open against the same repo at once, the conflicts do
not land in the code you were thinking about. They land in a small, predictable
set of **hotspot** files that nearly every change has to touch — a registry
manifest, a version field, shared tool config, one aggregated test module, a
tracked build output.
Each hotspot has exactly one correct resolution, and they are not the same rule.
"Take ours" / "take theirs" is right for almost none of them. Worse, getting one
wrong is silent: the dropped entry, the collided version, the stale bundle all
merge green and are found later by someone who cannot reproduce them.
## Find the hotspots before you need to resolve themView the complete source on GitHubshipping-across-surfaces
When your agent uses it
Land a change everywhere the same fact is stated — enumerating the full surface inventory (landing copy, docs, machine-readable summaries, changelog badges repeated across every page, sitemap, README, descriptions embedded in code, and untyped frontend consumers of typed responses), generating a surface instead of restating it, drift tests where you cannot generate, never hand-maintaining a copy of a surface another codebase owns, shipping a paired PR when you change a format a different codebase decodes, and keeping overloaded product words apart. Use when adding or renaming a user-facing feature, editing product/marketing copy or docs, renaming a serialized response field, changing a serialization or share-link format, wiring one repo's output into another's checks, or reviewing a PR that touched only one place a fact appears.
What it loads into context
Frontmatter
172 tokensAlways available to the agent
SKILL.md
2,564 tokensWhen the skill is activated
Reference documents
4,332 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Enumerate the surface inventory once, in the repo
- Prefer a generated surface to a restated one
- A response model is only half the contract
- Don't hand-maintain a copy of a surface you don't own
- A format change needs its consumer's PR in the same breath
- Keep overloaded words apart
- Make factual claims traceable
- Checklist
Files
../build-artifacts/SKILL.mddoc7,706 bytesSKILL.mdcore11,878 bytesSKILL.mdcore11,878 bytesSKILL.mdcore11,878 bytesSKILL.mdcore11,878 bytesSKILL.mdcore11,878 bytesSKILL.mdcore11,878 bytesSKILL.mdcore11,878 bytesSKILL.mdcore11,878 bytes../../python/llm-features/SKILL.mddoc11,354 bytes
Read SKILL.md
# Shipping Across Surfaces
Most product facts are stated more than once. The feature exists in code, is
described on a landing page, summarized for agents, listed in a changelog,
repeated in a nav badge, restated in a README, and embedded again in the
description string of every tool or endpoint that exposes it. Each copy drifts
independently, and none of them are covered by tests.
The failure is never loud. Nothing goes red; the product simply describes itself
inaccurately in the four places you didn't edit, and the one place a reader
happened to look is the stale one.
## Enumerate the surface inventory once, in the repo
View the complete source on GitHubwriting-defect-reports
When your agent uses it
Establish a finding before you publish it, and correct it after — headlines that overstate what actually reproduces at the layer a user sees, reporting code that no entry point can reach or that is already dead, filing a caveat the project's own records already answered, re-verifying your prior notes against the tree instead of against the note, choosing the narrowest injection point that reproduces a failure without breaking the run first, capturing probe output a harness swallows, and withdrawing a published claim in the thread where you published it. Use when filing an issue, writing the body of a PR or code review that asserts a defect, triaging someone else's report, or deciding whether a suspicious observation is reportable at all.
What it loads into context
Frontmatter
154 tokensAlways available to the agent
SKILL.md
2,540 tokensWhen the skill is activated
Reference documents
21,295 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The anomaly is real; the headline may not be
- Check the code is reachable before calling it broken
- Search the project's own records before filing a caveat
- Your earlier note is a claim, not evidence
- Pick the narrowest injection point that reproduces the failure
- Report the checks that model a real regression
- A red gate is not an aside
- Withdraw published claims where you published them
- Checklist
Files
../cross-surface-changes/SKILL.mddoc11,878 bytesSKILL.mdcore11,600 bytesSKILL.mdcore11,600 bytesSKILL.mdcore11,600 bytesSKILL.mdcore11,600 bytes../derived-metrics/SKILL.mddoc14,250 bytes../reproducing-ci-locally/SKILL.mddoc13,498 bytes../verifying-external-behavior/SKILL.mddoc11,668 bytes../../python/testing-strategy/SKILL.mddoc39,847 bytes
Read SKILL.md
# Writing Defect Reports
A report is a claim, and it is read by people who will not re-derive it. The cost
of an overstated one is not embarrassment — it is a maintainer spending an
afternoon on a premise that does not hold, or a "fix" landing for a failure mode
that never occurred. The techniques for *finding* a defect live in
[verifying-external-behavior](../verifying-external-behavior/SKILL.md) and
[testing-python-libraries](../../python/testing-strategy/SKILL.md). This skill is
about the step between finding one and publishing it.
The rule underneath all of it: **publish the claim you actually measured, at the
layer you measured it.**
## The anomaly is real; the headline may not beView the complete source on GitHubreporting-derived-metrics
When your agent uses it
Compute statistics, scores, and flags from samples that may be too small to support them — undefined dispersion returned as 0.0 and tripping a minimum threshold, sentinel choice (None vs 0 vs NaN), threshold blocks gated on "was this measured", reports that narrate findings from absent data, nullability as a public API change, `is None` vs truthiness, broad excepts that turn a metric bug into a normal-shaped result, and heavy-tailed samples where the mean points the opposite way to the median. Use when writing or reviewing a scoring/analysis pipeline, a z-score or outlier check, a quality or anomaly flag, a metrics rollup, a benchmark or cohort comparison, or any function that reduces a list of observations to one number a threshold or a report reads.
What it loads into context
Frontmatter
172 tokensAlways available to the agent
SKILL.md
3,446 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- An undefined statistic is not zero
- The threshold block needs its own "was this measured" gate
- Don't narrate findings from data you don't have
- When the distribution defeats the summary
- Nullability is a public API change, not an implementation detail
- Check `is None`, never truthiness
- Recheck the guards a new gate makes redundant
- A broad `except` turns a metric bug into a normal-shaped result
- Testing
- Checklist
Files
SKILL.mdcore14,250 bytesSKILL.mdcore14,250 bytesSKILL.mdcore14,250 bytesSKILL.mdcore14,250 bytesSKILL.mdcore14,250 bytesSKILL.mdcore14,250 bytesSKILL.mdcore14,250 bytes
Read SKILL.md
# Reporting Derived Metrics
A derived metric is a number computed from a sample and then compared against a
threshold to produce a flag, a score, or a sentence a user reads as a finding.
The bugs are almost never in the arithmetic. They are at the two ends: what the
function returns when the sample is too small to support the statistic, and what
the flag layer does with that value.
## An undefined statistic is not zero
Dispersion — standard deviation, variance, coefficient of variation, burstiness,
mean gap between events — needs at least two observations. Ratios and rates need
a non-zero denominator. The reflex on the short-sample branch is `return 0.0`,
and that is the worst available answer, because `0` is a real and *extreme* pointView the complete source on GitHubguarding-destructive-operations
When your agent uses it
Add and review preconditions on operations that delete, overwrite, rewrite history, or resolve a caller-supplied name to a filesystem path — refusing instead of warning, placing the guard ahead of the first mutation, structural classification rather than string-prefix matching, name validation plus resolved-path containment as two independent checks, why a guard on the destructive path is invisible to the dry-run, and mutation-testing each half separately. Use when writing or reviewing a `--rebuild`/`--reset`/`--purge` command, a bulk delete, a history rewrite, an `rm -rf`-shaped step, or any code that turns an argument into a file path.
What it loads into context
Frontmatter
147 tokensAlways available to the agent
SKILL.md
2,418 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Refuse; don't warn, and don't add an override
- Put the guard ahead of the first mutation
- Classify structurally, not by string prefix
- Test recovery against the target your setup command creates
- Name validation and resolved containment are two checks, not one
- A guard on the destructive path is invisible to the preview
- Know what the caller does with your refusal
- Testing
- Checklist
Files
SKILL.mdcore10,860 bytesSKILL.mdcore10,860 bytesSKILL.mdcore10,860 bytesSKILL.mdcore10,860 bytesSKILL.mdcore10,860 bytes
Read SKILL.md
# Guarding Destructive Operations
Some operations have no undo: an orphan-branch rewrite, a recursive delete of
every tracked file, an overwrite of a stored artifact, a `DROP`/`purge` path. The
implementation is usually short and usually correct *for the setup its author had
in mind*. The bug is never the deletion itself — it is that nothing checked
whether the target was the thing the author imagined.
Two shapes recur, and they take the same fix:
- **Blast radius.** The operation is correct only in a dedicated, single-purpose
target and is catastrophic in a mixed one.
- **Boundary escape.** A caller-supplied name is joined onto a base directory and
lands outside it.View the complete source on GitHubkeeping-git-repos-clean
When your agent uses it
Prevents, detects, and remediates files that should never be committed — secrets (.env, API tokens, hardcoded credentials) and dev artifacts (build output, scratch databases, editor/OS files). Covers .gitignore (and why it does not untrack), git rm --cached, auditing tracked files, history scrubbing, and credential rotation. Use when a repo has committed secrets or junk, when setting up a new repo's ignore rules, or when reviewing what a repo actually tracks.
What it loads into context
Frontmatter
112 tokensAlways available to the agent
SKILL.md
1,906 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The one rule everyone forgets
- Audit what a repo actually tracks
- Secrets need more than `git rm`
- "Committed" means "published"
- Prevent it: global ignore + a secret scanner
- Verification can dirty the tree
- Checklist
Files
SKILL.mdcore7,622 bytesSKILL.mdcore7,622 bytesSKILL.mdcore7,622 bytesSKILL.mdcore7,622 bytesSKILL.mdcore7,622 bytesSKILL.mdcore7,622 bytesSKILL.mdcore7,622 bytesSKILL.mdcore7,622 bytesSKILL.mdcore7,622 bytes
Read SKILL.md
# Keeping Git Repos Clean
Two classes of files keep ending up in repos: **secrets** and **dev artifacts**.
Both are cheap to prevent and expensive to clean up after the fact, because git
history is forever and public repos publish everything.
## The one rule everyone forgets
**`.gitignore` does NOT untrack files that are already committed.** Adding a path
to `.gitignore` only prevents *future untracked* files from being staged. A file
git is already tracking keeps getting committed regardless. This bites repeatedly:
a `.env` is listed in `.gitignore` but was committed before the rule existed, so
it keeps shipping.
View the complete source on GitHubrunning-github-actions-efficiently
When your agent uses it
Cut GitHub Actions minutes and wall-clock time without losing coverage — the OS billing multiplier (macOS 10x / Windows 2x / Linux 1x), trigger hygiene that stops push+pull_request double-firing, concurrency that cancels superseded runs, dependency caching keyed on lockfiles, matrix discipline, and auditing scheduled crons that bill 24/7. Use when CI is burning included minutes, when runs feel slow, when setting up a new repo's workflows, or when reviewing an existing workflow for waste.
What it loads into context
Frontmatter
118 tokensAlways available to the agent
SKILL.md
3,566 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- First, know the one number that dominates everything
- Trigger hygiene: stop paying for the same commit twice
- Concurrency: kill superseded runs automatically
- Cache dependencies — keyed on the lockfile
- Matrix discipline
- Scheduled workflows bill around the clock
- Failures and long runs still bill
- Measure before and after
- Checklist
Files
SKILL.mdcore14,159 bytesSKILL.mdcore14,159 bytesSKILL.mdcore14,159 bytes
Read SKILL.md
# Running GitHub Actions Efficiently
Actions minutes on **private** repos bill against a monthly included quota; public
repos are free. So cost concentrates in private repos, and a handful of workflows
usually dominate the bill. This skill is the checklist for finding and fixing that
waste. Every fix below preserves what CI actually verifies — none of them trade
away coverage.
## First, know the one number that dominates everything
Minutes are billed **per job**, rounded up to the minute, times a **runner-OS
multiplier**:
| Runner | Multiplier |View the complete source on GitHubdesigning-interaction-states
When your agent uses it
Designs the states screens actually spend their time in — first-run and empty states, loading and skeletons, inline validation and error messages, success feedback, destructive confirmations, and the microcopy for each — so a product feels finished instead of only working on the happy path. Use when building a form, list, dashboard, upload, checkout or settings screen, adding an async action, writing error or empty-state copy, or reviewing a UI that shows blank pages, raw errors or spinners forever.
What it loads into context
Frontmatter
109 tokensAlways available to the agent
SKILL.md
1,385 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Contents
- The state inventory
- Empty and first-run states
- Loading
- Forms and validation
- Errors
- Success and feedback
- Destructive actions
- Microcopy rules
- Checklist
Files
SKILL.mdcore6,025 bytes
Read SKILL.md
# Designing Interaction States
Most screens are designed in one state: full of realistic data, with every request
succeeding. Users mostly see the others — empty on day one, loading on a slow
network, an error on a typo. Those states are where an app feels either finished or
neglected.
## Contents
- The state inventory
- Empty and first-run states
- Loading
- Forms and validation
- Errors
- Success and feedbackView the complete source on GitHubdesigning-marketing-pages
When your agent uses it
Designs landing, pricing, comparison and product pages that explain the product fast and convert honestly — one-sentence value proposition above the fold, a single primary call to action, real product screenshots instead of stock art, proof, a clear pricing table, fast responsive pages, and no dark patterns. Use when building or redesigning a landing page, marketing site, pricing or comparison page, app store–style product page, or reviewing why a product's public pages feel dated or don't convert.
What it loads into context
Frontmatter
106 tokensAlways available to the agent
SKILL.md
1,508 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Contents
- The page skeleton
- Above the fold
- Show the product
- Proof and objections
- Pricing pages
- Comparison pages
- Visual design
- Performance and responsiveness
- Honesty rules
- Review checklist
Files
SKILL.mdcore6,920 bytesSKILL.mdcore6,920 bytesSKILL.mdcore6,920 bytes
Read SKILL.md
# Designing Marketing Pages
A visitor decides in a few seconds whether a page is for them. Everything on a
marketing page either answers "what is this, is it for me, what do I do next?" or
gets in the way. Most dated landing pages fail on clarity, not style.
## Contents
- The page skeleton
- Above the fold
- Show the product
- Proof and objections
- Pricing pages
- Comparison pages
- Visual designView the complete source on GitHubrendering-untrusted-content
When your agent uses it
Renders stored, authored, or imported content into HTML without shipping XSS — auditing every autoescape bypass (|safe, Markup, innerHTML), sanitizing Markdown output with an allowlist, escaping on both the server and the DOM, and writing sanitization tests that assert on the right copy of the string. Use when adding a Markdown or rich-text filter, rendering user/admin-authored content, reviewing a template that marks HTML trusted, building a client that injects values into innerHTML, or fixing an XSS report.
What it loads into context
Frontmatter
116 tokensAlways available to the agent
SKILL.md
1,889 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Step 1 — Enumerate the trust bypasses
- Step 2 — Markdown output is not sanitized HTML
- Step 3 — A shared filter has the whole corpus as its blast radius
- Step 4 — Test the copy of the string that actually matters
- Step 5 — Escape at both ends
- Step 6 — "No event handlers" is a test that fails on clean code
- Checklist
Files
SKILL.mdcore8,000 bytesSKILL.mdcore8,000 bytesSKILL.mdcore8,000 bytesSKILL.mdcore8,000 bytesSKILL.mdcore8,000 bytesSKILL.mdcore8,000 bytesSKILL.mdcore8,000 bytesSKILL.mdcore8,000 bytes
Read SKILL.md
# Rendering Untrusted Content
Template engines autoescape by default, so the vulnerable surface is small and
enumerable: it is exactly the places where something says *this value is already
safe HTML*. Find those first; everything else is already handled.
## Step 1 — Enumerate the trust bypasses
```bash
# Server-side (Jinja/Django templates + the Python that feeds them)
grep -rnE '\|\s*safe|Markup\(|autoescape false|mark_safe' templates/ src/
# Client-side
grep -rnE 'innerHTML|outerHTML|insertAdjacentHTML|document\.write' web/ static/View the complete source on GitHubreproducing-ci-locally
When your agent uses it
Run the CI gate on your machine so it agrees with the runner — deriving the exact command, paths, markers, and env from the workflow file instead of the Makefile, unblocking gate steps that short-circuit and hide the next failure, pinning the linter version CI resolves, building the interpreter/toolchain environment the runner builds, and confirming the run is green instead of explaining a red job away. Use when a check passes locally but fails in CI (or the reverse), when a lint/format job goes red on an untouched file, when setting up a local dev loop for an unfamiliar repo, or before pushing a branch you expect to merge.
What it loads into context
Frontmatter
143 tokensAlways available to the agent
SKILL.md
3,296 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Read the workflow before you run anything
- A short-circuiting gate hides the next failure
- Pin what gates the build, and reproduce the version CI resolves
- Build the environment the runner builds
- Fix divergence in shared config, not in the workflow
- Know which checks are actually gates
- Finish by confirming the run, not by explaining it
- Checklist
Files
SKILL.mdcore13,498 bytesSKILL.mdcore13,498 bytesSKILL.mdcore13,498 bytesSKILL.mdcore13,498 bytesSKILL.mdcore13,498 bytesSKILL.mdcore13,498 bytesSKILL.mdcore13,498 bytesSKILL.mdcore13,498 bytesSKILL.mdcore13,498 bytesSKILL.mdcore13,498 bytesSKILL.mdcore13,498 bytesSKILL.mdcore13,498 bytesSKILL.mdcore13,498 bytesSKILL.mdcore13,498 bytesSKILL.mdcore13,498 bytes
Read SKILL.md
# Reproducing CI Locally
A local check is only useful if it runs the same thing the runner runs. Most
"green locally, red in CI" failures are not bugs in the code — they are a
difference between two commands: different paths, different test markers,
different env, a different linter version, or a different interpreter.
The fix is mechanical: **derive the local command from the workflow file**, not
from the Makefile, not from habit, not from what the last repo used.
## Read the workflow before you run anything
The workflow is the contract. The Makefile is a convenience that drifts from it.
View the complete source on GitHubrunning-resumable-sync-jobs
When your agent uses it
Design and review long-running batch or sync jobs that process many items against a remote API and persist checkpoint state — exit codes that report partial failure, checkpoints that are safe to resume and written atomically, per-item tolerance vs. fatal abort, telling "zero" apart from "couldn't fetch", bounded retries, honest dry-runs, timezone-safe incremental cursors, and compensating reserved resources. Use when writing or reviewing a mirror/sync command, a nightly cron job, an importer, a paginated fetcher, or a background worker that consumes quota.
What it loads into context
Frontmatter
124 tokensAlways available to the agent
SKILL.md
6,152 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The exit code is the only thing automation reads
- Checkpoint what actually happened, not what you attempted
- Write the checkpoint file atomically, and pin its mode
- Per-item tolerance must be decided *before* the shared error handler
- Distinguish "zero" from "couldn't fetch"
- Harden the request itself when you fetch HTML
- Bound every retry, and count per unit of work
- Incremental cursors: re-include the boundary
- Dry-run must perform every in-memory mutation the real run does
- Sort anything you rebuild from a map before committing it
- Compensate reserved resources when the work never happens
- Testing these paths
- Checklist
Files
SKILL.mdcore25,902 bytesSKILL.mdcore25,902 bytesSKILL.mdcore25,902 bytesSKILL.mdcore25,902 bytesSKILL.mdcore25,902 bytesSKILL.mdcore25,902 bytesSKILL.mdcore25,902 bytesSKILL.mdcore25,902 bytesSKILL.mdcore25,902 bytesSKILL.mdcore25,902 bytesSKILL.mdcore25,902 bytesSKILL.mdcore25,902 bytesSKILL.mdcore25,902 bytesSKILL.mdcore25,902 bytes
Read SKILL.md
# Running Resumable Sync Jobs
A sync job is a loop over N items against a service that will fail partway
through. Everything hard about these jobs is what happens on item K of N: what
the process reports, what it wrote down, and what the *next* run does with that.
Get the happy path right and you still ship a job that silently under-collects,
double-applies, or bills for work it never did.
## The exit code is the only thing automation reads
The most common failure: per-item errors are printed as warnings, the loop
`continue`s, and the run finishes by saving state, committing, printing
"Sync complete!" and returning success. A cron wrapper, a CI step, or a
supervisor sees exit 0 and reports a healthy job forever.View the complete source on GitHubnormalizing-text-for-measurement
When your agent uses it
Strip, parse, and segment a document before something else measures it — normalizers that fuse two blocks into one word because a close-token emits no separator, the two metric classes failing on different residue — character-based ones (reading time, token budgets, size limits) inflated by leftover syntax, word-based ones (word count, readability) corrupted by boundaries the strip never inserted — sibling consumers that skip the normalizer entirely, parser presets whose rule set silently reclassifies a construct, sections grouped by a non-unique heading key that collapse and double-count into an ancestor, and deliberate lossiness that the next reader mistakes for a bug. Use when writing or reviewing a markdown/HTML stripper, a plain-text extractor, a section or paragraph splitter, a reading-time/word-count/readability/token-count function, a dedup key or checksum built from prose, or a search-index preprocessing step.
What it loads into context
Frontmatter
190 tokensAlways available to the agent
SKILL.md
2,972 tokensWhen the skill is activated
Reference documents
15,435 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- A missing separator fuses two blocks into one token
- Both metric classes need normalized text — they break on different residue
- Enumerate every consumer of the normalizer
- A parser preset is a rule set you did not choose
- Grouping by a natural key that is not unique
- Write down which lossiness is deliberate
- Testing a normalizer without depending on a third-party constant
- Review checklist
Files
../derived-metrics/SKILL.mddoc14,250 bytesSKILL.mdcore13,610 bytesSKILL.mdcore13,610 bytesSKILL.mdcore13,610 bytesSKILL.mdcore13,610 bytesSKILL.mdcore13,610 bytesSKILL.mdcore13,610 bytesSKILL.mdcore13,610 bytes../verifying-external-behavior/SKILL.mddoc11,668 bytes../../python/testing-strategy/SKILL.mddoc39,847 bytes
Read SKILL.md
# Normalizing Text for Measurement
Any pipeline that reduces a document to a number — word count, reading time,
readability, a token budget, a dedup key, a checksum, a search index — has two
halves: a **normalizer** that turns markup into something comparable, and a
**measurer** that consumes it. Reviews concentrate on the measurer. Almost every
bug in this shape lives in the normalizer, and none of them raise.
The failure mode is uniform: the output is still a plausible string, the metric
is still a plausible number, and nothing anywhere reports a problem. See
[reporting-derived-metrics](../derived-metrics/SKILL.md) for the other end of the
same pipeline — what the measurer does when the sample is too small.
## A missing separator fuses two blocks into one tokenView the complete source on GitHubcalibrating-thresholds-and-baselines
When your agent uses it
Check that a score-threshold-flag pipeline actually separates anything before you trust or tune it — reference constants that are hand-authored but formatted as measurements, a computed feature whose units do not match the constant it is compared against, per-class fire rates that expose a flag firing on nearly every item of both classes, rate features confounded by item length, confidence scores where one feature family contributes once per sub-feature, threshold sweeps hardcoded to one comparison direction and one statistic, and separating features that carry the decision from features that only populate a warning list. Use when writing or reviewing an anomaly detector, a quality or risk score, a fraud/abuse heuristic, a lint-style flag set, or any pipeline that z-scores features against stored baseline constants and emits flags.
What it loads into context
Frontmatter
169 tokensAlways available to the agent
SKILL.md
3,539 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- A committed baseline file is not a measurement
- The feature and the constant must be the same quantity
- Per-class fire rates are the cheapest calibration probe you have
- Re-render reports without re-scoring the sample
- Score composition: count each family once
- Verify saved scores before replaying a flag-layer change
- Sweep every statistic a threshold reads, in both directions
- Check the combined rule, not only its cutoffs
- Know whether the feature carries the decision or only the warning list
- Checklist
- Learn More
Files
SKILL.mdcore15,825 bytesSKILL.mdcore15,825 bytesSKILL.mdcore15,825 bytesSKILL.mdcore15,825 bytesSKILL.mdcore15,825 bytesSKILL.mdcore15,825 bytesSKILL.mdcore15,825 bytesSKILL.mdcore15,825 bytesSKILL.mdcore15,825 bytesSKILL.mdcore15,825 bytes
Read SKILL.md
# Calibrating Thresholds and Baselines
A scoring pipeline has three layers: features computed per item, reference
constants the features are compared against, and a flag/score layer that turns
the comparison into something a user reads. **reporting-derived-metrics** covers
the first layer — what a feature function returns when the sample is too thin to
support it. This skill covers the other two: where the constant came from, and
whether the flag it drives carries any information at all.
The failure mode is not a crash. It is a pipeline that runs clean, emits
confident-looking flags on every input, and nobody notices because no one ever
asked how often each flag fires per class.
## A committed baseline file is not a measurementView the complete source on GitHubdesigning-interfaces
When your agent uses it
Makes a product's UI look deliberate and current instead of dated or improvised — auditing a screen against hierarchy, type scale, spacing scale, color tokens, layout and component consistency; introducing design tokens before restyling anything; and verifying every change visually with before/after screenshots. Use when building or restyling any web or app screen, reviewing a UI that looks old, cluttered or inconsistent, starting a design system for an existing app, or planning a design-improvement issue.
What it loads into context
Frontmatter
106 tokensAlways available to the agent
SKILL.md
3,276 tokensWhen the skill is activated
Reference documents
3,312 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Contents
- Step 1 — Look before you touch anything
- Step 2 — Audit against the six fundamentals
- Match the visual language to the product
- Step 3 — Tokens first, restyle second
- Step 4 — Components and states
- Step 5 — Verify visually
- App chrome and dense views
- Native apps
- Scoping design work into issues
- Anti-patterns
Files
MODERNIZING.mddoc6,600 bytesSKILL.mdcore14,682 bytesSKILL.mdcore14,682 bytesSKILL.mdcore14,682 bytesTOKENS.mddoc5,560 bytes
Read SKILL.md
# Designing Interfaces
Most "ugly" apps are not missing talent, they are missing **constraints**: twelve
font sizes, spacing picked per element, a dozen near-identical greys, and buttons
that each grew their own style. Good design here is mostly removing choices. Fix
the system first (tokens, scales), then the screens fall into line.
## Contents
- Step 1 — Look before you touch anything
- Step 2 — Audit against the six fundamentals
- Match the visual language to the product
- Step 3 — Tokens first, restyle second
- Step 4 — Components and states
- Step 5 — Verify visuallyView the complete source on GitHubverifying-external-behavior
When your agent uses it
Confirms what a third-party library, remote API, build backend, or scraped document actually does before writing code that depends on it — throwaway probes that run in seconds, permissive clients that forward wrong arguments instead of rejecting them, per-endpoint docs that don't generalize, response shapes that make a "fast path" always-false, fakes that encode your assumption rather than the service's behavior, dry-runs that skip the step that fails, and large inputs that were silently read only in part. Use when integrating a new dependency or endpoint, writing a tolerated-status or error branch, choosing a client argument name, testing against a fake, or reviewing code that asserts an upstream contract.
What it loads into context
Frontmatter
151 tokensAlways available to the agent
SKILL.md
2,637 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Probe the exact call you are about to write
- Permissive clients don't reject wrong arguments — they ignore them
- Per-endpoint docs do not generalize across sibling endpoints
- The response *shape* is part of the contract
- A fake proves your code calls the fake
- Dry-runs skip the step that fails
- A big input can be partial without saying so
- Some verified behaviour is not yours to fix
- Checklist
Files
SKILL.mdcore11,668 bytesSKILL.mdcore11,668 bytesSKILL.mdcore11,668 bytesSKILL.mdcore11,668 bytesSKILL.mdcore11,668 bytesSKILL.mdcore11,668 bytesSKILL.mdcore11,668 bytesSKILL.mdcore11,668 bytesSKILL.mdcore11,668 bytesSKILL.mdcore11,668 bytesSKILL.mdcore11,668 bytesSKILL.mdcore11,668 bytes
Read SKILL.md
# Verifying External Behavior
Most integration bugs are not coding errors. They are a belief about someone
else's system — a status code, a parameter name, a response shape, a build
backend's scoping rule — that was never checked and turned out to be wrong. The
code is written correctly against a contract that does not exist.
The fix is not more care. It is a **probe**: a throwaway command that asks the
real system the exact question, before the code is written. Probes cost seconds.
The bugs they prevent are silent, ship green, and are found months later.
## Probe the exact call you are about to write
Not a similar call, not the documented example — the same endpoint form, the sameView the complete source on GitHubbuilding-go-projects
When your agent uses it
Sets up and maintains Go projects with a CI gate that actually gates — module-path correctness, golangci-lint config that matches the installed major version, deterministic gofmt, a pinned toolchain, and meaningful test/lint jobs. Use when creating a Go module, wiring GitHub Actions for Go, debugging a golangci-lint or gofmt CI failure on an unrelated PR, or reviewing a Go CLI that shells out to git/gh.
What it loads into context
Frontmatter
100 tokensAlways available to the agent
SKILL.md
3,915 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Module path must match the repo URL
- Pin the toolchain — `GOTOOLCHAIN=auto` makes a version matrix lie
- golangci-lint: the config's `version` key must match the installed major
- A test job with no tests is a no-op gate
- Deterministic output: never range a map into serialized output
- Dry-run must simulate state transitions, not skip them
- Bound text without splitting UTF-8
- Numeric input: `ParseFloat` accepts NaN/Inf, and `switch` can't see NaN
- Mutation-testing a Go guard: the build can fail instead of the test
- Linters that cap their own output
- Shelling out to git/gh: inject a runner, don't string-match stderr
- Outbound HTTP: always set a timeout and User-Agent
- Checklist
Files
SKILL.mdcore15,145 bytesSKILL.mdcore15,145 bytesSKILL.mdcore15,145 bytes
Read SKILL.md
# Go Project Setup & CI
Go's CI is deceptively easy to get *green* and hard to get *correct*. The traps
below all share one failure mode: a job that reports success while proving
nothing, or a config that breaks on a PR that never touched it. Each rule here
comes from a real green-but-wrong (or red-on-unrelated-PR) gate.
## Module path must match the repo URL
`go.mod`'s `module` line and every internal import must use the path users
actually `go install`/`go get`. A stale owner or renamed repo compiles and tests
locally but breaks `go install github.com/<owner>/<repo>@latest` for everyone.
```View the complete source on GitHubbuilding-browser-extensions
When your agent uses it
Builds and tests Manifest V3 browser extensions — service-worker message channels that survive teardown, chrome.storage read-modify-write safety, settings validation in the popup, and a Jest chrome mock that can actually fail. Use when writing or reviewing a background service worker, a popup that reads/writes chrome.storage, an extension's Jest suite, or debugging an extension whose UI silently stops responding.
What it loads into context
Frontmatter
85 tokensAlways available to the agent
SKILL.md
4,019 tokensWhen the skill is activated
Reference documents
2,090 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Await every side effect before the handler resolves
- `??`, never `||`, for numeric settings
- chrome.storage read-modify-write is a lost update
- Share reminder delivery only when the side effects match
- HTML input constraints are inert; validate in JS
- A stored deadline must be a usable `Date`, not just a number
- A throw during `DOMContentLoaded` kills the whole popup
- Notifications: stable ids replace, and `openPopup` can reject
- Your chrome mock is part of the system under test
- Smoke-testing the unpacked popup in a real browser
- PR-comment CI steps need two permissions
- Checklist
Files
../../common/ci-permissions/SKILL.mddoc9,011 bytesSKILL.mdcore17,775 bytes
Read SKILL.md
# Manifest V3 Extensions
An MV3 background script is not a long-lived page — it is a service worker the
browser tears down whenever it looks idle. Almost every bug below is the same
bug in different clothes: **work that was started but never awaited, or state
that was written from a stale snapshot.** Both fail silently. There is no crash,
no console error in front of the user — just a setting that reverts, a button
that does nothing, or a suite that stays green over a broken handler.
## Await every side effect before the handler resolves
A fire-and-forget `chrome.storage.local.set` can be killed with the worker. If a
message handler's caller depends on that write, the write must complete *before*
the response is sent.View the complete source on GitHubdesigning-python-apis
When your agent uses it
Designs intuitive Python library APIs following principles of simplicity, consistency, and discoverability. Handles public re-exports, API evolution, deprecation, breaking changes, and error handling. Use when designing or reviewing a library API, exposing a symbol from a package __init__, or managing API versioning and deprecations.
What it loads into context
Frontmatter
72 tokensAlways available to the agent
SKILL.md
2,449 tokensWhen the skill is activated
Reference documents
3,963 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Core Principles
- Progressive Disclosure Pattern
- Naming Conventions
- Error Handling
- Test the public import path, not only the implementation module
- Deprecation
- Anti-Patterns
- Review Checklist
- Learn More
Files
EVOLUTION.mddoc6,257 bytesPATTERNS.mddoc7,905 bytesSKILL.mdcore10,811 bytesSKILL.mdcore10,811 bytesSKILL.mdcore10,811 bytesSKILL.mdcore10,811 bytesSKILL.mdcore10,811 bytesSKILL.mdcore10,811 bytesSKILL.mdcore10,811 bytesSKILL.mdcore10,811 bytesSKILL.mdcore10,811 bytesSKILL.mdcore10,811 bytesSKILL.mdcore10,811 bytesSKILL.mdcore10,811 bytesSKILL.mdcore10,811 bytes../release-management/MIGRATION.mddoc3,033 bytes
Read SKILL.md
# Python API Design
## Core Principles
1. **Simplicity**: Simple things simple, complex things possible
2. **Consistency**: Similar operations work similarly
3. **Least Surprise**: Behave as users expect
4. **Discoverability**: Find via autocomplete and help
## Progressive Disclosure Pattern
```python
# Level 1: Simple functions
from mylib import encode, decodeView the complete source on GitHubbuilding-python-clis
When your agent uses it
Builds command-line interfaces for Python libraries using Click or Typer. Includes command groups, argument handling, progress bars, shell completion, and CLI testing with CliRunner. Use when adding CLI functionality to a library or building standalone command-line tools.
What it loads into context
Frontmatter
57 tokensAlways available to the agent
SKILL.md
829 tokensWhen the skill is activated
Reference documents
3,249 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Framework Selection
- Click Quick Start
- Entry Point (pyproject.toml)
- Common Patterns
- Testing with CliRunner
- Shell Completion
- CLI Checklist
- Learn More
Files
CLICK_PATTERNS.mddoc7,329 bytesSKILL.mdcore3,275 bytesSKILL.mdcore3,275 bytesSKILL.mdcore3,275 bytesSKILL.mdcore3,275 bytesSKILL.mdcore3,275 bytesSKILL.mdcore3,275 bytesTYPER_GUIDE.mddoc5,905 bytes
Read SKILL.md
# Python CLI Development
## Framework Selection
**Click** (Recommended): Mature, extensive features
**Typer**: Modern, type-hint focused
**argparse**: Zero dependencies, standard library
## Click Quick Start
```python
import click
@click.group()View the complete source on GitHubimproving-python-code-quality
When your agent uses it
Improves Python library code quality through ruff linting, mypy type checking, Pythonic idioms, and refactoring. Use when reviewing code for quality issues, adding type hints, configuring static analysis tools, or refactoring Python library code.
What it loads into context
Frontmatter
59 tokensAlways available to the agent
SKILL.md
3,315 tokensWhen the skill is activated
Reference documents
1,610 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick Reference
- Ruff Configuration
- MyPy Configuration
- Type Hints Patterns
- Common Anti-Patterns
- A Rule You Enabled Isn't a Rule That Fires
- Fail Loud: Don't Degrade Silently
- Determinism & Reproducibility
- Pythonic Idioms
- Module Organization
- Checklist
- Learn More
Files
MYPY_CONFIG.mddoc1,427 bytesRUFF_CONFIG.mddoc1,666 bytesSKILL.mdcore13,446 bytesSKILL.mdcore13,446 bytesSKILL.mdcore13,446 bytesSKILL.mdcore13,446 bytesSKILL.mdcore13,446 bytesSKILL.mdcore13,446 bytesSKILL.mdcore13,446 bytesSKILL.mdcore13,446 bytesSKILL.mdcore13,446 bytesSKILL.mdcore13,446 bytesSKILL.mdcore13,446 bytesSKILL.mdcore13,446 bytesSKILL.mdcore13,446 bytesSKILL.mdcore13,446 bytesSKILL.mdcore13,446 bytesSKILL.mdcore13,446 bytesTYPE_PATTERNS.mddoc2,512 bytes
Read SKILL.md
# Python Code Quality
## Quick Reference
| Tool | Purpose | Command |
|------|---------|---------|
| ruff | Lint + format | `ruff check src && ruff format src` |
| mypy | Type check | `mypy src` |
## Ruff Configuration
Minimal config in pyproject.toml:
```tomlView the complete source on GitHubbuilding-python-communities
When your agent uses it
Builds and manages open source Python library communities including CONTRIBUTING.md, CODE_OF_CONDUCT.md, issue/PR templates, contributor recognition, and GitHub automation. Use when setting up community infrastructure, improving contributor experience, or managing project governance.
What it loads into context
Frontmatter
58 tokensAlways available to the agent
SKILL.md
867 tokensWhen the skill is activated
Reference documents
2,992 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Essential Files
- Issue Templates
- PR Template
- GitHub Actions Automation
- Labels
- Checklist
- Learn More
Files
GOVERNANCE.mddoc6,368 bytesSKILL.mdcore3,401 bytesSKILL.mdcore3,401 bytesTEMPLATES.mddoc6,953 bytes
Read SKILL.md
# Python Library Community Management
## Essential Files
### CONTRIBUTING.md
```markdown
# Contributing
## Development Setup
git clone https://github.com/user/package.git
cd package
uv sync --extra devView the complete source on GitHubdocumenting-python-libraries
When your agent uses it
Creates comprehensive Python library documentation including Google-style docstrings, Sphinx setup, API references, tutorials, and ReadTheDocs configuration. Use when writing docstrings, setting up Sphinx documentation, or creating user guides for Python libraries.
What it loads into context
Frontmatter
55 tokensAlways available to the agent
SKILL.md
862 tokensWhen the skill is activated
Reference documents
2,658 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Docstring Style (Google)
- Sphinx Quick Setup
- pyproject.toml Dependencies
- README Template
- ReadTheDocs (.readthedocs.yaml)
- Checklist
- Learn More
Files
SKILL.mdcore3,311 bytesSKILL.mdcore3,311 bytesSKILL.mdcore3,311 bytesSKILL.mdcore3,311 bytesSPHINX_CONFIG.mddoc5,039 bytesTUTORIALS.mddoc5,886 bytes
Read SKILL.md
# Python Library Documentation
## Docstring Style (Google)
```python
def encode(latitude: float, longitude: float, *, precision: int = 12) -> str:
"""Encode geographic coordinates to a quadtree string.
Args:
latitude: The latitude in degrees (-90 to 90).
longitude: The longitude in degrees (-180 to 180).
precision: Number of characters in output. Defaults to 12.
Returns:View the complete source on GitHubdeferring-heavy-dependencies
When your agent uses it
Keep expensive resources — ML models, spellcheck dictionaries, embedded databases, large third-party imports — off code paths that never use them. Covers constructor work paid by every caller, one-size factories that load the heaviest member for the cheapest request, load-and-unload-per-call masquerading as a cache, measuring per-call cost in a fresh process, telling a one-time import from a repeated model load, and the test fallout (patches that only now take effect, autouse fixtures that hide the dependency). Use when a trivially cheap operation takes hundreds of milliseconds, when adding a heavy dependency to a shared constructor or factory, or when reviewing a class whose `__init__` builds something most callers never touch.
What it loads into context
Frontmatter
154 tokensAlways available to the agent
SKILL.md
1,864 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The cost is in construction, not in the call
- One factory for everything makes cheap paths pay for the expensive one
- Load-and-unload per call is not a cache
- Measure per call, in a fresh process
- An ambient fixture hides the dependency you are trying to remove
- Making a field lazy changes when patches bind
- Checklist
Files
SKILL.mdcore8,297 bytesSKILL.mdcore8,297 bytesSKILL.mdcore8,297 bytesSKILL.mdcore8,297 bytesSKILL.mdcore8,297 bytesSKILL.mdcore8,297 bytesSKILL.mdcore8,297 bytesSKILL.mdcore8,297 bytesSKILL.mdcore8,297 bytes
Read SKILL.md
# Deferring Heavy Dependencies
A word count should not load a language model. When it does, the cause is almost
never the algorithm — it is that the cheap function shares a constructor, a
factory, or an import with an expensive one. Profiling the function body finds
nothing, because the time is spent before the body runs.
## The cost is in construction, not in the call
```python
# Bad — every instance builds a dictionary, whatever the caller asked for.
class TextAnalyzer:
def __init__(self) -> None:
self.spell_checker = SpellChecker() # ~12 MB retained, ~80 msView the complete source on GitHubreviewing-python-libraries
When your agent uses it
Comprehensively reviews Python libraries for quality across project structure, packaging, code quality, testing, security, documentation, API design, and CI/CD. Provides actionable feedback and improvement recommendations. Use when evaluating library health, preparing for major releases, or auditing dependencies.
What it loads into context
Frontmatter
61 tokensAlways available to the agent
SKILL.md
724 tokensWhen the skill is activated
Reference documents
2,361 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick Health Check (5 min)
- Review Dimensions
- Red Flags 🚩
- Green Flags ✅
- Report Template
- Best Practices Checklist
- Learn More
Files
CHECKLIST.mddoc6,048 bytesREPORT_TEMPLATE.mddoc3,363 bytesSKILL.mdcore2,986 bytesSKILL.mdcore2,986 bytes
Read SKILL.md
# Python Library Review
## Quick Health Check (5 min)
```bash
git clone https://github.com/user/package && cd package
head -50 pyproject.toml # Modern config?
ls tests/ && uv run pytest --collect-only # Tests exist?
uv run pytest --cov=package | tail -20 # Coverage?
uvx bandit -r src/ # Security?
```
## Review Dimensions
View the complete source on GitHubbuilding-llm-backed-features
When your agent uses it
Builds application features on top of an LLM API in Python — prompt surfaces that drift apart, structured outputs, context budgeting, model/config wiring, filtered evaluator sets, keeping live-model calls out of default CI, evaluating stochastic output, and presenting model output truthfully. Use when adding an LLM call to an app, designing structured outputs or prompt templates, filtering audit rules, wiring model config, or testing/evaluating LLM-backed analysis.
What it loads into context
Frontmatter
101 tokensAlways available to the agent
SKILL.md
2,539 tokensWhen the skill is activated
Reference documents
6,571 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Every string the model reads is prompt surface
- Bound the context once, in a shared helper
- Wire config to a section that exists — and validate it at boot
- Keep live-model calls out of the default test path
- An empty evaluator set is not a clean pass
- Evaluate accuracy as its own job, and record raw outcomes
- Don't present output as more than it is
- Checklist
- Learn More
Files
../../go/projects/SKILL.mddoc15,145 bytesSKILL.mdcore11,354 bytesSKILL.mdcore11,354 bytesSKILL.mdcore11,354 bytesSKILL.mdcore11,354 bytesSKILL.mdcore11,354 bytesSKILL.mdcore11,354 bytesSKILL.mdcore11,354 bytesSKILL.mdcore11,354 bytesSKILL.mdcore11,354 bytes../mcp-servers/SKILL.mddoc11,578 bytes
Read SKILL.md
# Building LLM-Backed Features
Calling a model is easy; shipping a feature around one is where the bugs live.
The model is a non-deterministic dependency whose *inputs are spread across your
codebase* and whose *outputs get presented to users as facts*. This skill covers
the failure modes that recur in that gap. (Building a server that exposes tools
**to** a model is the other direction — see
**[../mcp-servers/SKILL.md](../mcp-servers/SKILL.md)**.)
## Every string the model reads is prompt surface
Wording that shapes model behavior does not live only in the prompt template. It
typically lives in four places that drift apart independently:
View the complete source on GitHubbuilding-python-mcp-servers
When your agent uses it
Builds robust Python MCP (Model Context Protocol) servers with FastMCP — tool design, error contracts, event-loop-safe blocking work, subprocess/CLI wrapping, single-file vs packaged distribution, global-state-free testing, and prompt-injection awareness. Use when writing an MCP server, exposing a tool or CLI to an LLM client, debugging tool registration/packaging, or testing MCP tools.
What it loads into context
Frontmatter
90 tokensAlways available to the agent
SKILL.md
2,656 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick Start (FastMCP)
- Error Contract: return, don't raise — and stay consistent
- Wrapping a subprocess / CLI
- No module-level global state (it makes the server untestable)
- Keep blocking work off the protocol event loop
- Sampling is an optional client capability — contain failures in the tool
- Distribution: single-file vs packaged
- Testing: prove the tools actually work
- Treat all tool I/O as untrusted (prompt injection)
- MCP Server Checklist
- Learn More
Files
SKILL.mdcore11,578 bytesSKILL.mdcore11,578 bytesSKILL.mdcore11,578 bytesSKILL.mdcore11,578 bytesSKILL.mdcore11,578 bytesSKILL.mdcore11,578 bytesSKILL.mdcore11,578 bytesSKILL.mdcore11,578 bytes
Read SKILL.md
# Building Python MCP Servers
MCP servers expose tools to an LLM client (Claude Desktop, Claude Code, etc.).
The LLM is the caller, so the failure modes differ from a normal library: errors
must be machine-readable, every input is untrusted, and a green test suite often
proves nothing about whether the tools actually work. This skill encodes the
patterns that recur when these go wrong.
## Quick Start (FastMCP)
```python
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("my-server")View the complete source on GitHubpackaging-python-libraries
When your agent uses it
Packages and distributes Python libraries using modern pyproject.toml, build backends (setuptools, hatchling), PyPI publishing with trusted publishing, and wheel building. Use when packaging libraries for distribution, publishing to PyPI, or troubleshooting packaging issues.
What it loads into context
Frontmatter
59 tokensAlways available to the agent
SKILL.md
1,718 tokensWhen the skill is activated
Reference documents
2,626 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- pyproject.toml Essentials
- Building
- Publishing to PyPI
- GitHub Actions (Trusted Publishing)
- Dependency Best Practices
- Including Package Data
- Direct-Reference Dependencies Need a Real Build
- Verify the Built Artifact (a green build is not a correct wheel)
- Checklist
- Learn More
Files
CONDA.mddoc3,615 bytesSKILL.mdcore6,830 bytesSKILL.mdcore6,830 bytesSKILL.mdcore6,830 bytesSKILL.mdcore6,830 bytesSKILL.mdcore6,830 bytesSKILL.mdcore6,830 bytesSKILL.mdcore6,830 bytesSKILL.mdcore6,830 bytesSKILL.mdcore6,830 bytesSKILL.mdcore6,830 bytesSKILL.mdcore6,830 bytes../project-setup/PYPROJECT.mddoc3,305 bytes../release-management/AUTOMATION.mddoc2,983 bytes
Read SKILL.md
# Python Library Packaging
## pyproject.toml Essentials
```toml
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "my-package"
version = "1.0.0"
description = "Short description"
readme = "README.md"View the complete source on GitHuboptimizing-python-performance
When your agent uses it
Optimizes Python library performance through profiling (cProfile, PyInstrument), memory analysis (memray, tracemalloc), benchmarking (pytest-benchmark), and optimization strategies. Use when analyzing performance bottlenecks, finding memory leaks, or setting up performance regression testing.
What it loads into context
Frontmatter
61 tokensAlways available to the agent
SKILL.md
855 tokensWhen the skill is activated
Reference documents
3,262 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Profiling Quick Start
- PyInstrument Usage
- Memory Analysis
- Benchmarking (pytest-benchmark)
- Common Optimizations
- Algorithm Complexity
- Optimization Checklist
- Learn More
Files
BENCHMARKS.mddoc6,375 bytesPROFILING.mddoc7,025 bytesSKILL.mdcore3,357 bytesSKILL.mdcore3,357 bytesSKILL.mdcore3,357 bytesSKILL.mdcore3,357 bytesSKILL.mdcore3,357 bytesSKILL.mdcore3,357 bytesSKILL.mdcore3,357 bytes
Read SKILL.md
# Python Performance Optimization
## Profiling Quick Start
```bash
# PyInstrument (statistical, readable output)
python -m pyinstrument script.py
# cProfile (detailed, built-in)
python -m cProfile -s cumulative script.py
# Memory profiling
uv add --dev memray
memray run script.pyView the complete source on GitHubsetting-up-python-libraries
When your agent uses it
Sets up professional Python library projects with modern tooling (pyproject.toml, uv, ruff, pytest, pre-commit, GitHub Actions). Use when creating new Python libraries, modernizing existing projects to pyproject.toml, configuring linting/testing/CI, or setting up Makefiles and pre-commit hooks.
What it loads into context
Frontmatter
75 tokensAlways available to the agent
SKILL.md
1,331 tokensWhen the skill is activated
Reference documents
2,821 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick Start
- Core Configuration
- Minimal pyproject.toml
- Essential Commands
- Keep local checks identical to CI
- Key Decisions
- Checklist
- Helper Script
- Learn More
Scripts executed separately
scripts/create_project.py
Files
CI.mddoc6,175 bytesMAKEFILE.mddoc1,315 bytesPYPROJECT.mddoc3,305 bytesSKILL.mdcore5,110 bytesSKILL.mdcore5,110 bytesSKILL.mdcore5,110 bytesSKILL.mdcore5,110 bytesSKILL.mdcore5,110 bytesscripts/create_project.pyruns13,501 bytes
Read SKILL.md
# Python Library Project Setup
## Quick Start
Create a new library with this structure:
```
my-library/
├── src/my_library/
│ ├── __init__.py
│ └── py.typed
├── tests/
├── pyproject.toml
├── MakefileView the complete source on GitHubmanaging-python-releases
When your agent uses it
Manages Python library releases including semantic versioning, changelog maintenance (Keep a Changelog format), release automation with GitHub Actions, and deprecation workflows. Use when planning releases, writing changelogs, automating release pipelines, or communicating breaking changes.
What it loads into context
Frontmatter
61 tokensAlways available to the agent
SKILL.md
979 tokensWhen the skill is activated
Reference documents
1,518 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Semantic Versioning
- Changelog Format (Keep a Changelog)
- Version in Code
- GitHub Actions Release
- Deprecation Process
- Release Process
- Checklist
- Learn More
Scripts executed separately
scripts/bump_version.py
Files
AUTOMATION.mddoc2,983 bytesMIGRATION.mddoc3,033 bytesSKILL.mdcore3,638 bytesSKILL.mdcore3,638 bytesSKILL.mdcore3,638 bytesSKILL.mdcore3,638 bytesscripts/bump_version.pyruns9,176 bytes
Read SKILL.md
# Python Release Management
## Semantic Versioning
```
MAJOR.MINOR.PATCH (e.g., 1.2.3)
PATCH: Bug fixes, no API changes
MINOR: New features, backward compatible
MAJOR: Breaking changes
```
## Changelog Format (Keep a Changelog)
View the complete source on GitHubauditing-python-security
When your agent uses it
Audits Python libraries for security vulnerabilities using Bandit, pip-audit, Semgrep, and detect-secrets. Identifies SQL injection, command injection, hardcoded credentials, secrets exposed through tracebacks, weak cryptography, and insecure deserialization. Use when reviewing library security, setting up security scanning in CI, or implementing secure coding patterns.
What it loads into context
Frontmatter
77 tokensAlways available to the agent
SKILL.md
1,501 tokensWhen the skill is activated
Reference documents
3,553 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick Start
- Tool Configuration
- Common Vulnerabilities
- Secure Patterns
- Tracebacks Must Not Dump Frame Locals
- CI Integration
- Audit Checklist
- Learn More
Scripts executed separately
scripts/security_scan.py
Files
CI_SECURITY.mddoc6,494 bytesSKILL.mdcore6,142 bytesSKILL.mdcore6,142 bytesSKILL.mdcore6,142 bytesSKILL.mdcore6,142 bytesSKILL.mdcore6,142 bytesSKILL.mdcore6,142 bytesVULNERABILITIES.mddoc8,234 bytesscripts/security_scan.pyruns11,162 bytes
Read SKILL.md
# Python Security Auditing
## Quick Start
```bash
# Run all four scanners (gates CI): exit 1 on a blocking finding, exit 2 when a
# requested scanner could not run, exit 0 only when every scanner ran clean:
uv run python scripts/security_scan.py .
# Tolerate scanners that are missing or hung (restores exit 0 in that case):
uv run python scripts/security_scan.py . --allow-scanner-failure
# Or individually:
uvx bandit -r src/ -ll # High-severity static analysisView the complete source on GitHubtesting-python-libraries
When your agent uses it
Designs and implements pytest test suites for Python libraries with fixtures, parametrization, mocking, Hypothesis property-based testing, and CI configuration. Use when creating tests, improving coverage, setting up testing infrastructure, or implementing property-based testing.
What it loads into context
Frontmatter
55 tokensAlways available to the agent
SKILL.md
9,352 tokensWhen the skill is activated
Reference documents
2,411 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick Start
- Pytest Configuration
- Test Structure
- Essential Patterns
- Test Principles
- Tests That Lie: Avoiding False-Green
- Prove the Test Can Fail: Mutate the Fix
- A Surviving Mutation Is Not Always a Test Gap
- Mutate in Both Directions: A Guard Can Also Fire Too Often
- Edge-Case Tests That Pass on the Unfixed Code
- Pick Fixture Values That Separate the Bug From the Fix
- Changing Behavior an Existing Test Already Asserts
- Asserting on Where Output Goes: Redirect in the Test Body
- Ambient State: Tests That Only Pass on Your Machine
- Prove Async Completion Ordering
- Checklist
- Learn More
Files
../project-setup/CI.mddoc6,175 bytesFIXTURES.mddoc1,419 bytesHYPOTHESIS.mddoc1,807 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytesSKILL.mdcore39,847 bytes
Read SKILL.md
# Python Library Testing
## Quick Start
```bash
uv run pytest # Run tests
uv run pytest --cov=my_library # With coverage
uv run pytest -x # Stop on first failure
uv run pytest -k "test_encode" # Run matching tests
```
## Pytest Configuration
```tomlView the complete source on GitHubbuilding-python-web-apps
When your agent uses it
Provides an opinionated reference architecture for production Python web apps — FastAPI + async SQLAlchemy + Postgres, pydantic-settings config, Stripe billing, server-rendered Jinja or a decoupled SPA, deployed as a single Docker image on a managed platform via Terraform. Use when starting a new SaaS/web app, choosing a stack, structuring routers/services/models, wiring Stripe webhooks, protecting FastAPI docs or OpenAPI routes, setting up config/secrets, or deciding how to deploy.
What it loads into context
Frontmatter
112 tokensAlways available to the agent
SKILL.md
2,258 tokensWhen the skill is activated
Reference documents
9,620 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The Default Stack
- Package Layout
- App Wiring
- Database
- Config & Secrets
- Payments
- The Decisions You Actually Make
- Deployment
- Review Checklist
- Reference Files
Files
AUTH.mddoc9,849 bytesBACKGROUND_JOBS.mddoc7,085 bytesDEPLOYMENT.mddoc8,700 bytesFRONTEND.mddoc3,887 bytesPAYMENTS.mddoc4,826 bytesSKILL.mdcore9,180 bytesSKILL.mdcore9,180 bytesSKILL.mdcore9,180 bytesSTACK.mddoc6,130 bytes
Read SKILL.md
# Building Python Web Apps
An opinionated, batteries-included blueprint for shipping a small-to-mid SaaS app
solo or with a small team. It favors **boring, well-understood pieces wired the same
way every time** so a new app reaches "auth + billing + deploy" in hours, not weeks.
## The Default Stack
| Concern | Default |
|----------------|---------------------------------------------------------------|
| Framework | **FastAPI** (async), `uvicorn[standard]` |
| Packaging | **uv** + `pyproject.toml` + `uv.lock`, hatchling, `src/` layout |
| Database | **Postgres 16** + `asyncpg`, **SQLAlchemy 2.0** async, **Alembic** |
| Config | **pydantic-settings** `BaseSettings`, env-prefixed, `@lru_cache` |View the complete source on GitHubbuilding-rust-crates
When your agent uses it
Sets up, tests, and publishes Rust crates — Cargo project layout, a fmt/clippy/test CI gate that actually gates, MSRV pinning, feature-flag hygiene, and crates.io publishing with cargo-release. Use when creating a Rust crate, wiring GitHub Actions for Rust, debugging a clippy or MSRV CI failure, or preparing a crates.io release.
What it loads into context
Frontmatter
84 tokensAlways available to the agent
SKILL.md
1,251 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Project layout & Cargo.toml essentials
- The CI gate: fmt + clippy-as-error + test
- Test the MSRV you advertise
- Feature-flag hygiene
- Don't `.unwrap()` in library code
- Publishing to crates.io
- Checklist
Files
SKILL.mdcore5,002 bytesSKILL.mdcore5,002 bytes
Read SKILL.md
# Building Rust Crates
> Starting point. This skill captures the load-bearing Rust project conventions;
> extend it with reference files (a full `Cargo.toml`, a CI workflow, a clippy
> config) as the patterns firm up, following the same one-owner discipline as the
> Python skills.
Rust's tooling is unusually good, which makes it easy to ship a crate that
compiles but fails other people: a lint gate that only runs locally, an MSRV you
advertise but never test, or a feature flag that breaks when a downstream unifies
it. The rules below make the gate mean what it says.
## Project layout & Cargo.toml essentials
View the complete source on GitHubbuilding-scala-projects
When your agent uses it
Sets up, tests, and publishes Scala projects — sbt build layout, scalafmt/scalafix as CI gates, Scala 2-vs-3 and cross-building, a test job that actually runs, and Maven Central publishing via sbt-ci-release. Use when creating an sbt project, wiring GitHub Actions for Scala, debugging a cross-build or scalafmt CI failure, or preparing a Sonatype/Maven Central release.
What it loads into context
Frontmatter
100 tokensAlways available to the agent
SKILL.md
1,206 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- build.sbt essentials
- The CI gate: format + lint + test on a pinned JVM
- Cross-building: compile every axis you claim to support
- A test job that runs nothing is a no-op gate
- Publishing to Maven Central
- Checklist
Files
SKILL.mdcore4,599 bytesSKILL.mdcore4,599 bytes
Read SKILL.md
# Building Scala Projects
> Starting point. This skill captures the load-bearing sbt/Scala conventions;
> extend it with reference files (a full `build.sbt`, a CI workflow, a publish
> runbook) as the patterns firm up, following the same one-owner discipline as the
> Python skills.
Scala's failure modes cluster around the build tool and cross-versioning: a JVM
or Scala version that differs between laptop and CI, a cross-build that only
compiles one axis, and a publish step that half-completes on Sonatype. The rules
below keep the gate honest.
## build.sbt essentials
View the complete source on GitHubbuilding-swift-apps
When your agent uses it
Builds, tests, and ships native Swift/SwiftUI apps for Apple platforms (macOS/iOS) reliably in CI and locally — unsigned CI builds, the hand-maintained pbxproj, SwiftPM-module vs app-target test boundaries, SourceKit false positives, gitignored base xcconfig, Keychain vs UserDefaults for secrets (OAuth state/PKCE), CloudKit/SwiftData constraints, and deterministic date/RNG handling. Use when wiring CI for an Xcode project, debugging "requires a provisioning profile" / "no testable scheme" / "cannot find type in scope", adding a Swift file to a target, wiring OAuth sign-in, or reviewing a Swift app.
What it loads into context
Frontmatter
148 tokensAlways available to the agent
SKILL.md
3,024 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- CI can't sign — build unsigned
- The pbxproj is hand-maintained — new files aren't in the build
- `swift test` vs `xcodebuild test` — mind the module boundary
- "no testable scheme" — the test gate that runs nothing
- SourceKit false positives — trust the build, not the squiggles
- Clean-checkout footgun: gitignored base xcconfig
- Secrets: Keychain, not UserDefaults — and OAuth needs state/PKCE
- CloudKit + SwiftData: optional is deliberate, don't "tidy" it
- Determinism: dates, formatters, and RNG
- Don't fabricate data on failure
- Checklist
Files
SKILL.mdcore12,499 bytesSKILL.mdcore12,499 bytes
Read SKILL.md
# Building Swift/Xcode Apps
Xcode projects fail in ways a package-manager-driven language never does: the
build graph lives in a hand-edited `project.pbxproj`, CI can't sign, and the IDE
lints against a module graph it doesn't actually have. The traps below each come
from a build that was green locally and broken in CI (or vice versa). The rule
throughout: trust `xcodebuild`, not the IDE, not `swift build`, not a green
`make test` that runs nothing.
## CI can't sign — build unsigned
CI runners don't have the developer team's provisioning profiles, so a normal
build dies with *"requires a provisioning profile"*. The half-fix everyone tries
first — ad-hoc signing — does **not** work when the app declares entitlementsView the complete source on GitHubshipping-swift-apps
When your agent uses it
Ships native Swift/SwiftUI apps to TestFlight and the App Store with fastlane and xcodebuild — one App Store Connect API key for both, fastlane lanes scoped to metadata/pricing/subscriptions, headless `xcodebuild archive` + `-exportArchive destination=upload`, build numbers read from App Store Connect instead of guessed, closed pre-release trains, `SKIP_INSTALL` for bundled helper apps, and per-destination archives for multiplatform targets. Use when setting up fastlane for an Xcode project, uploading a build to TestFlight from a script or CI, or debugging "Invalid Pre-Release Train", "expected one {} but found app-store-connect", "Unknown Distribution Error", or a duplicate-build-number rejection.
What it loads into context
Frontmatter
160 tokensAlways available to the agent
SKILL.md
2,628 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- fastlane owns metadata; xcodebuild owns the binary
- One API key authenticates both tools
- Ignore the credentials before you write them
- Never guess the next build number — ask
- A shipped version closes its train
- Helper `.app` targets must set `SKIP_INSTALL`
- Multiplatform targets need one archive per destination
- Pin the version Xcode uploads
- A release build failing on correct code means a stale checkout
- Uploaded is not processed, and processed is not released
- Commit the version bump, and fetch first
Files
SKILL.mdcore11,127 bytesSKILL.mdcore11,127 bytesSKILL.mdcore11,127 bytesSKILL.mdcore11,127 bytes
Read SKILL.md
# Shipping Swift Apps to TestFlight
Distribution fails differently from building. The compiler is happy, the archive
succeeds, and then App Store Connect rejects the upload for a reason that has
nothing to do with your code — a version train that closed when the last release
was approved, a build number someone already used, a helper target that made the
archive undistributable. Every trap below comes from an upload that was rejected
after a clean build.
For build- and CI-side problems (unsigned builds, the hand-maintained pbxproj,
test-target boundaries), see the `building-swift-apps` skill. This skill starts
at the archive.
## fastlane owns metadata; xcodebuild owns the binaryView the complete source on GitHubSkills included
- building-accessible-interfaces
- wiring-application-config
- shipping-build-artifacts
- permissioning-ci-workflows
- concurrent-branches
- shipping-across-surfaces
- writing-defect-reports
- reporting-derived-metrics
- guarding-destructive-operations
- keeping-git-repos-clean
- running-github-actions-efficiently
- designing-interaction-states
- designing-marketing-pages
- rendering-untrusted-content
- reproducing-ci-locally
- running-resumable-sync-jobs
- normalizing-text-for-measurement
- calibrating-thresholds-and-baselines
- designing-interfaces
- verifying-external-behavior
- building-go-projects
- building-browser-extensions
- designing-python-apis
- building-python-clis
- improving-python-code-quality
- building-python-communities
- documenting-python-libraries
- deferring-heavy-dependencies
- reviewing-python-libraries
- building-llm-backed-features
- building-python-mcp-servers
- packaging-python-libraries
- optimizing-python-performance
- setting-up-python-libraries
- managing-python-releases
- auditing-python-security
- testing-python-libraries
- building-python-web-apps
- building-rust-crates
- building-scala-projects
- building-swift-apps
- shipping-swift-apps
Repository facts
- License
- MIT
- Created
- Jan 15, 2026
- Last pushed
- Nov 5, 2026
- Forks
- 17
- Open issues
- 2
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 262 notes
skills/common/accessible-interfaces/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/accessible-interfaces/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/accessible-interfaces/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/app-config/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/app-config/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/app-config/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/app-config/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/app-config/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/app-config/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/build-artifacts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/build-artifacts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/build-artifacts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/build-artifacts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/build-artifacts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/build-artifacts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/build-artifacts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/build-artifacts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/build-artifacts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/build-artifacts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/common/build-artifacts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 32 dangerous shell commandsin 8 files: skills/common/git-hygiene/SKILL.md:3 skills/common/github-actions/SKILL.md:53 skills/common/destructive-operations/SKILL.md:3 and 5 more
- 375 network referencesin 38 files: skills/common/github-actions/SKILL.md:49 skills/python/testing-strategy/SKILL.md:161 skills/python/packaging/SKILL.md:27 and 35 more
- No hidden or obfuscated text
- No instruction overrides
- 55 references to secretsin 15 files: skills/swift/apps/SKILL.md:3 skills/common/reproducing-ci-locally/SKILL.md:167 skills/python/security-audit/VULNERABILITIES.md:80 and 12 more
- No requests to vote in Hot
Show all 468 signals by file
.claude-plugin/marketplace.json
- Network accessline 8
"description": "Opinionated, checklist-driven skills for professional software development across languages - Python libraries and web apps, Go projects, Swift/Apple apps, Rust crates, Scala projects, browser extensions, and UI design", - Network accessline 9
"version": "2.31.0", "homepage": "https://github.com/wdm0006/python-skills", "keywords": ["python", "go", "swift", "rust", "scala", "javascript", "browser-extension", "library", "packaging", "testing", "ci", "api-design", "xss", "sa - Network accessline 10
"homepage": "https://github.com/wdm0006/python-skills", "keywords": ["python", "go", "swift", "rust", "scala", "javascript", "browser-extension", "library", "packaging", "testing", "ci", "api-design", "xss", "sanitization", "sync-jobs", - Access to secretsline 278
[Credential-related source omitted]
skills/common/accessible-interfaces/SKILL.md
skills/common/destructive-operations/SKILL.md
- Dangerous shell operationline 3
description: Add and review preconditions on operations that delete, overwrite, rewrite history, or resolve a caller-supplied name to a filesystem path — refusing instead of warning, placing the guard ahead of the first mutation, structural - Dangerous shell operationline 3
description: Add and review preconditions on operations that delete, overwrite, rewrite history, or resolve a caller-supplied name to a filesystem path — refusing instead of warning, placing the guard ahead of the first mutation, structural - Dangerous shell operationline 29
// `rm -rf --ignore-unmatch .`, keeping only the state files it rewrites. - Dangerous shell operationline 29
// `rm -rf --ignore-unmatch .`, keeping only the state files it rewrites.
skills/common/git-hygiene/SKILL.md
- Dangerous shell operationline 3
description: Prevents, detects, and remediates files that should never be committed — secrets (.env, API tokens, hardcoded credentials) and dev artifacts (build output, scratch databases, editor/OS files). Covers .gitignore (and why it does - Dangerous shell operationline 3
description: Prevents, detects, and remediates files that should never be committed — secrets (.env, API tokens, hardcoded credentials) and dev artifacts (build output, scratch databases, editor/OS files). Covers .gitignore (and why it does - Dangerous shell operationline 23
git rm --cached path/to/file # untrack, leave working-tree copy in place - Dangerous shell operationline 23
git rm --cached path/to/file # untrack, leave working-tree copy in place - Dangerous shell operationline 24
git rm -r --cached some/dir/ # for a directory - Dangerous shell operationline 24
git rm -r --cached some/dir/ # for a directory - Dangerous shell operationline 62
2. **Untrack going forward** (`git rm --cached` + `.gitignore` + `.env.example` - Dangerous shell operationline 62
2. **Untrack going forward** (`git rm --cached` + `.gitignore` + `.env.example` - Network accessline 93
# .pre-commit-config.yaml repos: - repo: https://github.com/gitleaks/gitleaks - Network accessline 93
# .pre-commit-config.yaml repos: - repo: https://github.com/gitleaks/gitleaks - Network accessline 94
repos: - repo: https://github.com/gitleaks/gitleaks rev: v8.18.0 - Network accessline 94
repos: - repo: https://github.com/gitleaks/gitleaks rev: v8.18.0 - Network accessline 95
- repo: https://github.com/gitleaks/gitleaks - Network accessline 95
- repo: https://github.com/gitleaks/gitleaks - Network accessline 96
rev: v8.18.0 hooks: [{id: gitleaks}] - repo: https://github.com/Yelp/detect-secrets - Network accessline 96
rev: v8.18.0 hooks: [{id: gitleaks}] - repo: https://github.com/Yelp/detect-secrets - Network accessline 97
hooks: [{id: gitleaks}] - repo: https://github.com/Yelp/detect-secrets rev: v1.5.0 - Network accessline 97
hooks: [{id: gitleaks}] - repo: https://github.com/Yelp/detect-secrets rev: v1.5.0 - Network accessline 98
- repo: https://github.com/Yelp/detect-secrets - Network accessline 98
- repo: https://github.com/Yelp/detect-secrets - Access to secretsline 107
[Credential-related source omitted] - Access to secretsline 107
[Credential-related source omitted] - Access to secretsline 183
[Credential-related source omitted] - Access to secretsline 183
[Credential-related source omitted] - Dangerous shell operationline 188
- [ ] `git rm --cached` + .gitignore entry for each offending file - Dangerous shell operationline 188
- [ ] `git rm --cached` + .gitignore entry for each offending file
skills/common/github-actions/SKILL.md
- Network accessline 49
run: | set -euxo pipefail curl -fsSL -o /tmp/sl.zip https://github.com/realm/SwiftLint/releases/download/0.65.0/swiftlint_linux_amd64.zip - Network accessline 49
run: | set -euxo pipefail curl -fsSL -o /tmp/sl.zip https://github.com/realm/SwiftLint/releases/download/0.65.0/swiftlint_linux_amd64.zip - Network accessline 49
run: | set -euxo pipefail curl -fsSL -o /tmp/sl.zip https://github.com/realm/SwiftLint/releases/download/0.65.0/swiftlint_linux_amd64.zip - Network accessline 50
set -euxo pipefail curl -fsSL -o /tmp/sl.zip https://github.com/realm/SwiftLint/releases/download/0.65.0/swiftlint_linux_amd64.zip unzip -oq /tmp/sl.zip -d /tmp/sl - Network accessline 50
set -euxo pipefail curl -fsSL -o /tmp/sl.zip https://github.com/realm/SwiftLint/releases/download/0.65.0/swiftlint_linux_amd64.zip unzip -oq /tmp/sl.zip -d /tmp/sl - Network accessline 50
set -euxo pipefail curl -fsSL -o /tmp/sl.zip https://github.com/realm/SwiftLint/releases/download/0.65.0/swiftlint_linux_amd64.zip unzip -oq /tmp/sl.zip -d /tmp/sl - Network accessline 51
curl -fsSL -o /tmp/sl.zip https://github.com/realm/SwiftLint/releases/download/0.65.0/swiftlint_linux_amd64.zip - Network accessline 51
curl -fsSL -o /tmp/sl.zip https://github.com/realm/SwiftLint/releases/download/0.65.0/swiftlint_linux_amd64.zip - Network accessline 51
curl -fsSL -o /tmp/sl.zip https://github.com/realm/SwiftLint/releases/download/0.65.0/swiftlint_linux_amd64.zip - Network accessline 52
unzip -oq /tmp/sl.zip -d /tmp/sl sudo install -m0755 /tmp/sl/swiftlint-static /usr/local/bin/swiftlint curl -fsSL -o /tmp/sf.zip https://github.com/nicklockwood/SwiftFormat/releases/download/0.62.1/swiftformat_linux.zip - Network accessline 52
unzip -oq /tmp/sl.zip -d /tmp/sl sudo install -m0755 /tmp/sl/swiftlint-static /usr/local/bin/swiftlint curl -fsSL -o /tmp/sf.zip https://github.com/nicklockwood/SwiftFormat/releases/download/0.62.1/swiftformat_linux.zip - Network accessline 52
unzip -oq /tmp/sl.zip -d /tmp/sl sudo install -m0755 /tmp/sl/swiftlint-static /usr/local/bin/swiftlint curl -fsSL -o /tmp/sf.zip https://github.com/nicklockwood/SwiftFormat/releases/download/0.62.1/swiftformat_linux.zip - Dangerous shell operationline 53
sudo install -m0755 /tmp/sl/swiftlint-static /usr/local/bin/swiftlint - Dangerous shell operationline 53
sudo install -m0755 /tmp/sl/swiftlint-static /usr/local/bin/swiftlint - Dangerous shell operationline 53
sudo install -m0755 /tmp/sl/swiftlint-static /usr/local/bin/swiftlint - Network accessline 53
sudo install -m0755 /tmp/sl/swiftlint-static /usr/local/bin/swiftlint curl -fsSL -o /tmp/sf.zip https://github.com/nicklockwood/SwiftFormat/releases/download/0.62.1/swiftformat_linux.zip unzip -oq /tmp/sf.zip -d /tmp/sf - Network accessline 53
sudo install -m0755 /tmp/sl/swiftlint-static /usr/local/bin/swiftlint curl -fsSL -o /tmp/sf.zip https://github.com/nicklockwood/SwiftFormat/releases/download/0.62.1/swiftformat_linux.zip unzip -oq /tmp/sf.zip -d /tmp/sf - Network accessline 53
sudo install -m0755 /tmp/sl/swiftlint-static /usr/local/bin/swiftlint curl -fsSL -o /tmp/sf.zip https://github.com/nicklockwood/SwiftFormat/releases/download/0.62.1/swiftformat_linux.zip unzip -oq /tmp/sf.zip -d /tmp/sf - Network accessline 54
curl -fsSL -o /tmp/sf.zip https://github.com/nicklockwood/SwiftFormat/releases/download/0.62.1/swiftformat_linux.zip - Network accessline 54
curl -fsSL -o /tmp/sf.zip https://github.com/nicklockwood/SwiftFormat/releases/download/0.62.1/swiftformat_linux.zip - Network accessline 54
curl -fsSL -o /tmp/sf.zip https://github.com/nicklockwood/SwiftFormat/releases/download/0.62.1/swiftformat_linux.zip - Dangerous shell operationline 56
sudo install -m0755 /tmp/sf/swiftformat_linux /usr/local/bin/swiftformat - Dangerous shell operationline 56
sudo install -m0755 /tmp/sf/swiftformat_linux /usr/local/bin/swiftformat - Dangerous shell operationline 56
sudo install -m0755 /tmp/sf/swiftformat_linux /usr/local/bin/swiftformat - Network accessline 62
which needs a Swift runtime the bare runner lacks) and SwiftFormat's `swiftformat_linux` — both are statically linked and run on plain `ubuntu-latest`. Pin versions in the URL, `curl -f` to fail on a bad download, and reference the - Network accessline 62
which needs a Swift runtime the bare runner lacks) and SwiftFormat's `swiftformat_linux` — both are statically linked and run on plain `ubuntu-latest`. Pin versions in the URL, `curl -f` to fail on a bad download, and reference the - Network accessline 62
which needs a Swift runtime the bare runner lacks) and SwiftFormat's `swiftformat_linux` — both are statically linked and run on plain `ubuntu-latest`. Pin versions in the URL, `curl -f` to fail on a bad download, and reference the - Network accessline 63
`swiftformat_linux` — both are statically linked and run on plain `ubuntu-latest`. Pin versions in the URL, `curl -f` to fail on a bad download, and reference the exact binary names rather than a fragile `find`. - Network accessline 63
`swiftformat_linux` — both are statically linked and run on plain `ubuntu-latest`. Pin versions in the URL, `curl -f` to fail on a bad download, and reference the exact binary names rather than a fragile `find`. - Network accessline 63
`swiftformat_linux` — both are statically linked and run on plain `ubuntu-latest`. Pin versions in the URL, `curl -f` to fail on a bad download, and reference the exact binary names rather than a fragile `find`. - Network accessline 64
Pin versions in the URL, `curl -f` to fail on a bad download, and reference the - Network accessline 64
Pin versions in the URL, `curl -f` to fail on a bad download, and reference the - Network accessline 64
Pin versions in the URL, `curl -f` to fail on a bad download, and reference the - Network accessline 261
Verify both a passing matrix and a deliberately failing cell on a disposable branch, then confirm the PR reports the original required check name. See [GitHub's required-check troubleshooting guidance](https://docs.github.com/en/pull-reques - Network accessline 261
Verify both a passing matrix and a deliberately failing cell on a disposable branch, then confirm the PR reports the original required check name. See [GitHub's required-check troubleshooting guidance](https://docs.github.com/en/pull-reques - Network accessline 261
Verify both a passing matrix and a deliberately failing cell on a disposable branch, then confirm the PR reports the original required check name. See [GitHub's required-check troubleshooting guidance](https://docs.github.com/en/pull-reques - Network accessline 262
branch, then confirm the PR reports the original required check name. See [GitHub's required-check troubleshooting guidance](https://docs.github.com/en/pull-requests/how-tos/merge-and-close-pull-requests/troubleshooting-required-status-chec - Network accessline 262
branch, then confirm the PR reports the original required check name. See [GitHub's required-check troubleshooting guidance](https://docs.github.com/en/pull-requests/how-tos/merge-and-close-pull-requests/troubleshooting-required-status-chec - Network accessline 262
branch, then confirm the PR reports the original required check name. See [GitHub's required-check troubleshooting guidance](https://docs.github.com/en/pull-requests/how-tos/merge-and-close-pull-requests/troubleshooting-required-status-chec - Network accessline 263
[GitHub's required-check troubleshooting guidance](https://docs.github.com/en/pull-requests/how-tos/merge-and-close-pull-requests/troubleshooting-required-status-checks) - Network accessline 263
[GitHub's required-check troubleshooting guidance](https://docs.github.com/en/pull-requests/how-tos/merge-and-close-pull-requests/troubleshooting-required-status-checks) - Network accessline 263
[GitHub's required-check troubleshooting guidance](https://docs.github.com/en/pull-requests/how-tos/merge-and-close-pull-requests/troubleshooting-required-status-checks)
skills/common/reproducing-ci-locally/SKILL.md
- Access to secretsline 167
[Credential-related source omitted] - Access to secretsline 167
[Credential-related source omitted] - Access to secretsline 167
[Credential-related source omitted] - Access to secretsline 274
[Credential-related source omitted] - Access to secretsline 274
[Credential-related source omitted] - Access to secretsline 274
[Credential-related source omitted]
skills/common/sync-jobs/SKILL.md
- Network accessline 289
var scrapeClient = &http.Client{Timeout: 30 * time.Second} - Network accessline 289
var scrapeClient = &http.Client{Timeout: 30 * time.Second} - Network accessline 384
So the sign of the offset decides which failure you get: west of UTC you over-fetch (free, if the merge is idempotent), east of UTC you silently - Network accessline 384
So the sign of the offset decides which failure you get: west of UTC you over-fetch (free, if the merge is idempotent), east of UTC you silently - Network accessline 385
over-fetch (free, if the merge is idempotent), east of UTC you silently - Network accessline 385
over-fetch (free, if the merge is idempotent), east of UTC you silently
skills/common/text-normalization/SKILL.md
- Network accessline 203
def test_markdown_measures_as_its_plain_equivalent(): markdown = "# Title\n\nSome [linked](https://example.com/a/long/path) text.\n" - Network accessline 203
def test_markdown_measures_as_its_plain_equivalent(): markdown = "# Title\n\nSome [linked](https://example.com/a/long/path) text.\n" - Network accessline 204
markdown = "# Title\n\nSome [linked](https://example.com/a/long/path) text.\n" - Network accessline 204
markdown = "# Title\n\nSome [linked](https://example.com/a/long/path) text.\n"
skills/common/ui-design/SKILL.md
- Network accessline 30
uvx --from playwright playwright screenshot --viewport-size "1280,800" "http://127.0.0.1:$PORT/" before-home-desktop.png - Network accessline 30
uvx --from playwright playwright screenshot --viewport-size "1280,800" "http://127.0.0.1:$PORT/" before-home-desktop.png - Network accessline 31
uvx --from playwright playwright screenshot --viewport-size "390,844" "http://127.0.0.1:$PORT/" before-home-phone.png - Network accessline 31
uvx --from playwright playwright screenshot --viewport-size "390,844" "http://127.0.0.1:$PORT/" before-home-phone.png
skills/common/verifying-external-behavior/SKILL.md
- Network accessline 26
# The exact URL, including the collection-vs-item distinction curl -s -o /dev/null -w '%{http_code}\n' https://api.example.com/v1/things - Network accessline 26
# The exact URL, including the collection-vs-item distinction curl -s -o /dev/null -w '%{http_code}\n' https://api.example.com/v1/things - Network accessline 26
# The exact URL, including the collection-vs-item distinction curl -s -o /dev/null -w '%{http_code}\n' https://api.example.com/v1/things - Network accessline 26
# The exact URL, including the collection-vs-item distinction curl -s -o /dev/null -w '%{http_code}\n' https://api.example.com/v1/things - Network accessline 27
curl -s -o /dev/null -w '%{http_code}\n' https://api.example.com/v1/things - Network accessline 27
curl -s -o /dev/null -w '%{http_code}\n' https://api.example.com/v1/things - Network accessline 27
curl -s -o /dev/null -w '%{http_code}\n' https://api.example.com/v1/things - Network accessline 27
curl -s -o /dev/null -w '%{http_code}\n' https://api.example.com/v1/things - Network accessline 28
curl -s -o /dev/null -w '%{http_code}\n' https://api.example.com/v1/things/1 - Network accessline 28
curl -s -o /dev/null -w '%{http_code}\n' https://api.example.com/v1/things/1 - Network accessline 28
curl -s -o /dev/null -w '%{http_code}\n' https://api.example.com/v1/things/1 - Network accessline 28
curl -s -o /dev/null -w '%{http_code}\n' https://api.example.com/v1/things/1
skills/go/projects/SKILL.md
- Network accessline 298
client := &http.Client{Timeout: 15 * time.Second} - Network accessline 298
client := &http.Client{Timeout: 15 * time.Second} - Network accessline 298
client := &http.Client{Timeout: 15 * time.Second} - Network accessline 299
req, _ := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) req.Header.Set("User-Agent", "project/1.0 (+https://github.com/owner/project)") resp, err := client.Do(req) - Network accessline 299
req, _ := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) req.Header.Set("User-Agent", "project/1.0 (+https://github.com/owner/project)") resp, err := client.Do(req) - Network accessline 299
req, _ := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) req.Header.Set("User-Agent", "project/1.0 (+https://github.com/owner/project)") resp, err := client.Do(req) - Network accessline 300
req.Header.Set("User-Agent", "project/1.0 (+https://github.com/owner/project)") - Network accessline 300
req.Header.Set("User-Agent", "project/1.0 (+https://github.com/owner/project)") - Network accessline 300
req.Header.Set("User-Agent", "project/1.0 (+https://github.com/owner/project)") - Network accessline 313
hazard, it does not remove it — prefer a machine-readable attribute (`data-date`, a JSON endpoint) when the source offers one. - **Hold the client in a package-level `var`** (`var httpClient = &http.Client{...}`) - Network accessline 313
hazard, it does not remove it — prefer a machine-readable attribute (`data-date`, a JSON endpoint) when the source offers one. - **Hold the client in a package-level `var`** (`var httpClient = &http.Client{...}`) - Network accessline 313
hazard, it does not remove it — prefer a machine-readable attribute (`data-date`, a JSON endpoint) when the source offers one. - **Hold the client in a package-level `var`** (`var httpClient = &http.Client{...}`) - Network accessline 314
(`data-date`, a JSON endpoint) when the source offers one. - **Hold the client in a package-level `var`** (`var httpClient = &http.Client{...}`) so tests can swap its transport for an `httptest` server and assert the headers - Network accessline 314
(`data-date`, a JSON endpoint) when the source offers one. - **Hold the client in a package-level `var`** (`var httpClient = &http.Client{...}`) so tests can swap its transport for an `httptest` server and assert the headers - Network accessline 314
(`data-date`, a JSON endpoint) when the source offers one. - **Hold the client in a package-level `var`** (`var httpClient = &http.Client{...}`) so tests can swap its transport for an `httptest` server and assert the headers - Network accessline 315
- **Hold the client in a package-level `var`** (`var httpClient = &http.Client{...}`) - Network accessline 315
- **Hold the client in a package-level `var`** (`var httpClient = &http.Client{...}`) - Network accessline 315
- **Hold the client in a package-level `var`** (`var httpClient = &http.Client{...}`)
skills/python/api-design/EVOLUTION.md
skills/python/api-design/PATTERNS.md
skills/python/api-design/SKILL.md
- Network accessline 286
This skill is based on the [Ergonomics](https://mcginniscommawill.com/guides/python-library-development/#ergonomics-the-joy-of-good-design) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/gui - Network accessline 286
This skill is based on the [Ergonomics](https://mcginniscommawill.com/guides/python-library-development/#ergonomics-the-joy-of-good-design) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/gui - Network accessline 288
- [The Art of API Design](https://mcginniscommawill.com/posts/2025-02-03-art-of-api-design/) - Network accessline 288
- [The Art of API Design](https://mcginniscommawill.com/posts/2025-02-03-art-of-api-design/) - Network accessline 289
- [Designing for Developer Joy](https://mcginniscommawill.com/posts/2025-02-06-designing-for-developer-joy/) - Network accessline 289
- [Designing for Developer Joy](https://mcginniscommawill.com/posts/2025-02-06-designing-for-developer-joy/)
skills/python/cli-development/CLICK_PATTERNS.md
skills/python/cli-development/SKILL.md
- Network accessline 121
This skill is based on the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/python-library-development/) by [Will McGinnis](https://mcginniscommawill.com/). See these posts for related coverage: - Network accessline 121
This skill is based on the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/python-library-development/) by [Will McGinnis](https://mcginniscommawill.com/). See these posts for related coverage: - Network accessline 123
- [Makefiles for Python Development](https://mcginniscommawill.com/posts/2025-04-08-makefiles-for-python/) - Network accessline 123
- [Makefiles for Python Development](https://mcginniscommawill.com/posts/2025-04-08-makefiles-for-python/) - Network accessline 124
- [pyproject.toml Explained](https://mcginniscommawill.com/posts/2025-01-26-pyproject-toml-explained/) - Network accessline 124
- [pyproject.toml Explained](https://mcginniscommawill.com/posts/2025-01-26-pyproject-toml-explained/)
skills/python/cli-development/TYPER_GUIDE.md
skills/python/code-quality/SKILL.md
- Network accessline 47
# Optional def fetch(url: str, timeout: int | None = None) -> bytes: ... - Network accessline 47
# Optional def fetch(url: str, timeout: int | None = None) -> bytes: ... - Network accessline 48
def fetch(url: str, timeout: int | None = None) -> bytes: ... - Network accessline 48
def fetch(url: str, timeout: int | None = None) -> bytes: ... - Network accessline 371
This skill is based on the [Code Quality](https://mcginniscommawill.com/guides/python-library-development/#code-quality-the-foundation) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/ - Network accessline 371
This skill is based on the [Code Quality](https://mcginniscommawill.com/guides/python-library-development/#code-quality-the-foundation) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/ - Network accessline 373
- [Linting & Formatting with Ruff](https://mcginniscommawill.com/posts/2025-01-30-linting-formatting-ruff/) - Network accessline 373
- [Linting & Formatting with Ruff](https://mcginniscommawill.com/posts/2025-01-30-linting-formatting-ruff/) - Network accessline 374
- [Understanding McCabe Complexity](https://mcginniscommawill.com/posts/2025-04-24-understanding-mccabe-complexity/) - Network accessline 374
- [Understanding McCabe Complexity](https://mcginniscommawill.com/posts/2025-04-24-understanding-mccabe-complexity/) - Network accessline 375
- [Adding Type Hints](https://mcginniscommawill.com/posts/2025-04-03-pygeohash-type-hints/) - Network accessline 375
- [Adding Type Hints](https://mcginniscommawill.com/posts/2025-04-03-pygeohash-type-hints/)
skills/python/code-quality/TYPE_PATTERNS.md
- Network accessline 42
# Keyword-only after * def fetch(url: str, *, timeout: int = 30) -> bytes: - Network accessline 42
# Keyword-only after * def fetch(url: str, *, timeout: int = 30) -> bytes: - Network accessline 43
def fetch(url: str, *, timeout: int = 30) -> bytes: - Network accessline 43
def fetch(url: str, *, timeout: int = 30) -> bytes:
skills/python/community/SKILL.md
- Network accessline 17
git clone https://github.com/user/package.git - Network accessline 17
git clone https://github.com/user/package.git - Network accessline 40
Use [Contributor Covenant](https://www.contributor-covenant.org/) - the standard for open source. - Network accessline 40
Use [Contributor Covenant](https://www.contributor-covenant.org/) - the standard for open source. - Network accessline 125
This skill is based on the [Maintenance](https://mcginniscommawill.com/guides/python-library-development/#maintenance-the-long-game) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/pyt - Network accessline 125
This skill is based on the [Maintenance](https://mcginniscommawill.com/guides/python-library-development/#maintenance-the-long-game) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/pyt - Network accessline 127
- [Building Engaging Community](https://mcginniscommawill.com/posts/2025-01-22-building-engaging-community/) - Network accessline 127
- [Building Engaging Community](https://mcginniscommawill.com/posts/2025-01-22-building-engaging-community/) - Network accessline 128
- [Inner Source Introduction](https://mcginniscommawill.com/posts/2025-02-11-inner-source-introduction/) - Network accessline 128
- [Inner Source Introduction](https://mcginniscommawill.com/posts/2025-02-11-inner-source-introduction/) - Network accessline 129
- [Building Internal Library Community](https://mcginniscommawill.com/posts/2025-02-15-building-internal-library-community/) - Network accessline 129
- [Building Internal Library Community](https://mcginniscommawill.com/posts/2025-02-15-building-internal-library-community/) - Network accessline 130
- [From Silos to Shared Libraries](https://mcginniscommawill.com/posts/2025-02-18-silos-to-shared-libraries/) - Network accessline 130
- [From Silos to Shared Libraries](https://mcginniscommawill.com/posts/2025-02-18-silos-to-shared-libraries/) - Network accessline 131
- [Cursor for Library Maintenance](https://mcginniscommawill.com/posts/2025-03-09-cursor-for-library-maintenance/) - Network accessline 131
- [Cursor for Library Maintenance](https://mcginniscommawill.com/posts/2025-03-09-cursor-for-library-maintenance/)
skills/python/community/TEMPLATES.md
- Network accessline 25
We use [uv](https://docs.astral.sh/uv/) for environment and dependency management. - Network accessline 25
We use [uv](https://docs.astral.sh/uv/) for environment and dependency management. - Network accessline 27
git clone https://github.com/user/package.git - Network accessline 27
git clone https://github.com/user/package.git - Network accessline 83
Adopt the [Contributor Covenant](https://www.contributor-covenant.org/) rather than writing your own. It is the de facto standard, translated into many languages, and instantly recognizable to contributors. - Network accessline 83
Adopt the [Contributor Covenant](https://www.contributor-covenant.org/) rather than writing your own. It is the de facto standard, translated into many languages, and instantly recognizable to contributors. - Network accessline 87
1. Download version 2.1 from the [Contributor Covenant site](https://www.contributor-covenant.org/version/2/1/code_of_conduct/). - Network accessline 87
1. Download version 2.1 from the [Contributor Covenant site](https://www.contributor-covenant.org/version/2/1/code_of_conduct/). - Network accessline 205
contact_links: - name: Questions & Discussion url: https://github.com/user/package/discussions - Network accessline 205
contact_links: - name: Questions & Discussion url: https://github.com/user/package/discussions - Network accessline 206
- name: Questions & Discussion url: https://github.com/user/package/discussions about: Ask usage questions and share ideas here. - Network accessline 206
- name: Questions & Discussion url: https://github.com/user/package/discussions about: Ask usage questions and share ideas here. - Network accessline 207
url: https://github.com/user/package/discussions - Network accessline 207
url: https://github.com/user/package/discussions
skills/python/documentation/SKILL.md
- Network accessline 67
[](https://pypi.org/project/package/) - Network accessline 67
[](https://pypi.org/project/package/) - Network accessline 82
Full docs at [package.readthedocs.io](https://package.readthedocs.io/) - Network accessline 82
Full docs at [package.readthedocs.io](https://package.readthedocs.io/) - Network accessline 124
This skill is based on the [Documentation](https://mcginniscommawill.com/guides/python-library-development/#documentation-your-librarys-ambassador) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill - Network accessline 124
This skill is based on the [Documentation](https://mcginniscommawill.com/guides/python-library-development/#documentation-your-librarys-ambassador) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill - Network accessline 126
- [Writing Effective Docstrings](https://mcginniscommawill.com/posts/2025-03-06-writing-effective-docstrings/) - Network accessline 126
- [Writing Effective Docstrings](https://mcginniscommawill.com/posts/2025-03-06-writing-effective-docstrings/) - Network accessline 127
- [Getting Started with Sphinx](https://mcginniscommawill.com/posts/2025-03-15-getting-started-sphinx/) - Network accessline 127
- [Getting Started with Sphinx](https://mcginniscommawill.com/posts/2025-03-15-getting-started-sphinx/) - Network accessline 128
- [Automating Docs Deployment](https://mcginniscommawill.com/posts/2025-03-23-automating-docs-deployment/) - Network accessline 128
- [Automating Docs Deployment](https://mcginniscommawill.com/posts/2025-03-23-automating-docs-deployment/) - Network accessline 129
- [Documenting Your Library's API](https://mcginniscommawill.com/posts/2025-03-30-documenting-library-api/) - Network accessline 129
- [Documenting Your Library's API](https://mcginniscommawill.com/posts/2025-03-30-documenting-library-api/)
skills/python/documentation/SPHINX_CONFIG.md
- Network accessline 89
# Cross-link identifiers to the stdlib and common libraries. intersphinx_mapping = { "python": ("https://docs.python.org/3", None), - Network accessline 89
# Cross-link identifiers to the stdlib and common libraries. intersphinx_mapping = { "python": ("https://docs.python.org/3", None), - Network accessline 90
intersphinx_mapping = { "python": ("https://docs.python.org/3", None), "numpy": ("https://numpy.org/doc/stable/", None), - Network accessline 90
intersphinx_mapping = { "python": ("https://docs.python.org/3", None), "numpy": ("https://numpy.org/doc/stable/", None), - Network accessline 91
"python": ("https://docs.python.org/3", None), - Network accessline 91
"python": ("https://docs.python.org/3", None), - Network accessline 92
"numpy": ("https://numpy.org/doc/stable/", None), - Network accessline 92
"numpy": ("https://numpy.org/doc/stable/", None),
skills/python/library-review/SKILL.md
- Network accessline 11
git clone https://github.com/user/package && cd package - Network accessline 11
git clone https://github.com/user/package && cd package - Network accessline 103
This skill is based on the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/python-library-development/) by [Will McGinnis](https://mcginniscommawill.com/). The review criteria in this skill draw from - Network accessline 103
This skill is based on the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/python-library-development/) by [Will McGinnis](https://mcginniscommawill.com/). The review criteria in this skill draw from
skills/python/llm-features/SKILL.md
- Network accessline 251
This skill is based on the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/python-library-development/) by [Will McGinnis](https://mcginniscommawill.com/). - Network accessline 251
This skill is based on the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/python-library-development/) by [Will McGinnis](https://mcginniscommawill.com/). - Network accessline 251
This skill is based on the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/python-library-development/) by [Will McGinnis](https://mcginniscommawill.com/).
skills/python/mcp-servers/SKILL.md
- Network accessline 263
This skill is based on the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/python-library-development/) by [Will McGinnis](https://mcginniscommawill.com/). - Network accessline 263
This skill is based on the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/python-library-development/) by [Will McGinnis](https://mcginniscommawill.com/). - Network accessline 263
This skill is based on the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/python-library-development/) by [Will McGinnis](https://mcginniscommawill.com/).
skills/python/packaging/CONDA.md
- Network accessline 25
source: url: https://pypi.io/packages/source/m/my-package/my_package-1.0.0.tar.gz - Network accessline 25
source: url: https://pypi.io/packages/source/m/my-package/my_package-1.0.0.tar.gz - Network accessline 26
url: https://pypi.io/packages/source/m/my-package/my_package-1.0.0.tar.gz - Network accessline 26
url: https://pypi.io/packages/source/m/my-package/my_package-1.0.0.tar.gz - Network accessline 47
about: home: https://github.com/user/my-package - Network accessline 47
about: home: https://github.com/user/my-package - Network accessline 48
home: https://github.com/user/my-package - Network accessline 48
home: https://github.com/user/my-package
skills/python/packaging/SKILL.md
- Network accessline 27
[project.urls] Homepage = "https://github.com/user/package" - Network accessline 27
[project.urls] Homepage = "https://github.com/user/package" - Network accessline 28
Homepage = "https://github.com/user/package" - Network accessline 28
Homepage = "https://github.com/user/package" - Network accessline 29
Documentation = "https://package.readthedocs.io" - Network accessline 29
Documentation = "https://package.readthedocs.io" - Network accessline 90
A dependency such as `toolkit @ https://example.com/toolkit.whl` may resolve in - Network accessline 90
A dependency such as `toolkit @ https://example.com/toolkit.whl` may resolve in - Network accessline 95
[project] dependencies = [ "toolkit @ https://example.com/releases/toolkit.whl", - Network accessline 95
[project] dependencies = [ "toolkit @ https://example.com/releases/toolkit.whl", - Network accessline 96
dependencies = [ "toolkit @ https://example.com/releases/toolkit.whl", ] - Network accessline 96
dependencies = [ "toolkit @ https://example.com/releases/toolkit.whl", ] - Network accessline 97
"toolkit @ https://example.com/releases/toolkit.whl", - Network accessline 97
"toolkit @ https://example.com/releases/toolkit.whl", - Network accessline 194
This skill is based on the [Distribution](https://mcginniscommawill.com/guides/python-library-development/#distribution-reaching-your-users) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/gu - Network accessline 194
This skill is based on the [Distribution](https://mcginniscommawill.com/guides/python-library-development/#distribution-reaching-your-users) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/gu - Network accessline 196
- [pyproject.toml Explained](https://mcginniscommawill.com/posts/2025-01-26-pyproject-toml-explained/) - Network accessline 196
- [pyproject.toml Explained](https://mcginniscommawill.com/posts/2025-01-26-pyproject-toml-explained/) - Network accessline 197
- [Publishing PyGeohash](https://mcginniscommawill.com/posts/2025-04-06-pygeohash-publishing/) - Network accessline 197
- [Publishing PyGeohash](https://mcginniscommawill.com/posts/2025-04-06-pygeohash-publishing/)
skills/python/performance/SKILL.md
- Network accessline 122
This skill is based on the [Performance](https://mcginniscommawill.com/guides/python-library-development/#performance-beyond-raw-speed) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/ - Network accessline 122
This skill is based on the [Performance](https://mcginniscommawill.com/guides/python-library-development/#performance-beyond-raw-speed) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/ - Network accessline 124
- [Performance Benchmarking](https://mcginniscommawill.com/posts/2025-02-22-testing-benchmark/) - Network accessline 124
- [Performance Benchmarking](https://mcginniscommawill.com/posts/2025-02-22-testing-benchmark/) - Network accessline 125
- [Profiling with PyInstrument](https://mcginniscommawill.com/posts/2025-02-25-testing-profiling-pyinstrument/) - Network accessline 125
- [Profiling with PyInstrument](https://mcginniscommawill.com/posts/2025-02-25-testing-profiling-pyinstrument/) - Network accessline 126
- [Memory Profiling with Memray](https://mcginniscommawill.com/posts/2025-03-01-testing-profiling-memray/) - Network accessline 126
- [Memory Profiling with Memray](https://mcginniscommawill.com/posts/2025-03-01-testing-profiling-memray/)
skills/python/project-setup/CI.md
- Network accessline 128
# .pre-commit-config.yaml repos: - repo: https://github.com/pre-commit/pre-commit-hooks - Network accessline 128
# .pre-commit-config.yaml repos: - repo: https://github.com/pre-commit/pre-commit-hooks - Network accessline 128
# .pre-commit-config.yaml repos: - repo: https://github.com/pre-commit/pre-commit-hooks - Network accessline 129
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.5.0 - Network accessline 129
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.5.0 - Network accessline 129
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.5.0 - Network accessline 130
- repo: https://github.com/pre-commit/pre-commit-hooks - Network accessline 130
- repo: https://github.com/pre-commit/pre-commit-hooks - Network accessline 130
- repo: https://github.com/pre-commit/pre-commit-hooks - Network accessline 139
- repo: https://github.com/astral-sh/ruff-pre-commit - Network accessline 139
- repo: https://github.com/astral-sh/ruff-pre-commit - Network accessline 139
- repo: https://github.com/astral-sh/ruff-pre-commit - Network accessline 146
- repo: https://github.com/pre-commit/mirrors-mypy - Network accessline 146
- repo: https://github.com/pre-commit/mirrors-mypy - Network accessline 146
- repo: https://github.com/pre-commit/mirrors-mypy
skills/python/project-setup/MAKEFILE.md
- Dangerous shell operationline 33
rm -rf build dist *.egg-info .pytest_cache .mypy_cache .ruff_cache .coverage htmlcov - Dangerous shell operationline 33
rm -rf build dist *.egg-info .pytest_cache .mypy_cache .ruff_cache .coverage htmlcov - Dangerous shell operationline 34
find . -type d -name __pycache__ -exec rm -rf {} + - Dangerous shell operationline 34
find . -type d -name __pycache__ -exec rm -rf {} +
skills/python/project-setup/PYPROJECT.md
- Network accessline 51
[project.urls] Homepage = "https://github.com/username/my-library" - Network accessline 51
[project.urls] Homepage = "https://github.com/username/my-library" - Network accessline 51
[project.urls] Homepage = "https://github.com/username/my-library" - Network accessline 52
Homepage = "https://github.com/username/my-library" - Network accessline 52
Homepage = "https://github.com/username/my-library" - Network accessline 52
Homepage = "https://github.com/username/my-library" - Network accessline 53
Documentation = "https://my-library.readthedocs.io" - Network accessline 53
Documentation = "https://my-library.readthedocs.io" - Network accessline 53
Documentation = "https://my-library.readthedocs.io" - Network accessline 54
Repository = "https://github.com/username/my-library" - Network accessline 54
Repository = "https://github.com/username/my-library" - Network accessline 54
Repository = "https://github.com/username/my-library" - Network accessline 55
Changelog = "https://github.com/username/my-library/blob/main/CHANGELOG.md" - Network accessline 55
Changelog = "https://github.com/username/my-library/blob/main/CHANGELOG.md" - Network accessline 55
Changelog = "https://github.com/username/my-library/blob/main/CHANGELOG.md"
skills/python/project-setup/SKILL.md
- Network accessline 139
This skill is based on the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/python-library-development/) by [Will McGinnis](https://mcginniscommawill.com/). See these posts for deeper coverage: - Network accessline 139
This skill is based on the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/python-library-development/) by [Will McGinnis](https://mcginniscommawill.com/). See these posts for deeper coverage: - Network accessline 141
- [Defining Library Scope](https://mcginniscommawill.com/posts/2025-01-17-defining-library-scope/) - Network accessline 141
- [Defining Library Scope](https://mcginniscommawill.com/posts/2025-01-17-defining-library-scope/) - Network accessline 142
- [Dependency Management](https://mcginniscommawill.com/posts/2025-01-21-dependency-management/) - Network accessline 142
- [Dependency Management](https://mcginniscommawill.com/posts/2025-01-21-dependency-management/) - Network accessline 143
- [Licensing Your Project](https://mcginniscommawill.com/posts/2025-01-24-licensing-your-project/) - Network accessline 143
- [Licensing Your Project](https://mcginniscommawill.com/posts/2025-01-24-licensing-your-project/) - Network accessline 144
- [pyproject.toml Explained](https://mcginniscommawill.com/posts/2025-01-26-pyproject-toml-explained/) - Network accessline 144
- [pyproject.toml Explained](https://mcginniscommawill.com/posts/2025-01-26-pyproject-toml-explained/)
skills/python/project-setup/scripts/create_project.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 152
[project.urls] Homepage = {_toml_string(f"https://github.com/username/{name}")} - Network accessline 152
[project.urls] Homepage = {_toml_string(f"https://github.com/username/{name}")} - Network accessline 153
Homepage = {_toml_string(f"https://github.com/username/{name}")} - Network accessline 153
Homepage = {_toml_string(f"https://github.com/username/{name}")} - Network accessline 154
Repository = {_toml_string(f"https://github.com/username/{name}")} - Network accessline 154
Repository = {_toml_string(f"https://github.com/username/{name}")} - Network accessline 233
git clone https://github.com/username/{name} - Network accessline 233
git clone https://github.com/username/{name} - Dangerous shell operationline 329
\tfind . -type d -name __pycache__ -exec rm -rf {{}} + - Dangerous shell operationline 329
\tfind . -type d -name __pycache__ -exec rm -rf {{}} + - Network accessline 399
pre_commit = dedent(''' repos: - repo: https://github.com/pre-commit/pre-commit-hooks - Network accessline 399
pre_commit = dedent(''' repos: - repo: https://github.com/pre-commit/pre-commit-hooks - Network accessline 400
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.5.0 - Network accessline 400
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.5.0 - Network accessline 401
- repo: https://github.com/pre-commit/pre-commit-hooks - Network accessline 401
- repo: https://github.com/pre-commit/pre-commit-hooks - Network accessline 410
- repo: https://github.com/astral-sh/ruff-pre-commit - Network accessline 410
- repo: https://github.com/astral-sh/ruff-pre-commit - Network accessline 417
- repo: https://github.com/pre-commit/mirrors-mypy - Network accessline 417
- repo: https://github.com/pre-commit/mirrors-mypy
skills/python/release-management/AUTOMATION.md
- Network accessline 29
One tag-triggered workflow builds the distribution with `uv`, creates a GitHub release, and publishes to PyPI via [trusted publishing](https://docs.pypi.org/trusted-publishers/) - Network accessline 29
One tag-triggered workflow builds the distribution with `uv`, creates a GitHub release, and publishes to PyPI via [trusted publishing](https://docs.pypi.org/trusted-publishers/) - Network accessline 29
One tag-triggered workflow builds the distribution with `uv`, creates a GitHub release, and publishes to PyPI via [trusted publishing](https://docs.pypi.org/trusted-publishers/) - Network accessline 30
release, and publishes to PyPI via [trusted publishing](https://docs.pypi.org/trusted-publishers/) - Network accessline 30
release, and publishes to PyPI via [trusted publishing](https://docs.pypi.org/trusted-publishers/) - Network accessline 30
release, and publishes to PyPI via [trusted publishing](https://docs.pypi.org/trusted-publishers/)
skills/python/release-management/SKILL.md
- Network accessline 37
[Unreleased]: https://github.com/user/repo/compare/v1.2.0...HEAD - Network accessline 37
[Unreleased]: https://github.com/user/repo/compare/v1.2.0...HEAD - Network accessline 38
[1.2.0]: https://github.com/user/repo/releases/tag/v1.2.0 - Network accessline 38
[1.2.0]: https://github.com/user/repo/releases/tag/v1.2.0 - Network accessline 135
This skill is based on the [Maintenance](https://mcginniscommawill.com/guides/python-library-development/#maintenance-the-long-game) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/pyt - Network accessline 135
This skill is based on the [Maintenance](https://mcginniscommawill.com/guides/python-library-development/#maintenance-the-long-game) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/pyt - Network accessline 137
- [Semantic Versioning](https://mcginniscommawill.com/posts/2025-01-28-semantic-versioning/) - Network accessline 137
- [Semantic Versioning](https://mcginniscommawill.com/posts/2025-01-28-semantic-versioning/)
skills/python/release-management/scripts/bump_version.py
skills/python/security-audit/CI_SECURITY.md
- Network accessline 85
# .pre-commit-config.yaml repos: - repo: https://github.com/Yelp/detect-secrets - Network accessline 85
# .pre-commit-config.yaml repos: - repo: https://github.com/Yelp/detect-secrets - Network accessline 86
repos: - repo: https://github.com/Yelp/detect-secrets rev: v1.5.0 - Network accessline 86
repos: - repo: https://github.com/Yelp/detect-secrets rev: v1.5.0 - Network accessline 87
- repo: https://github.com/Yelp/detect-secrets - Network accessline 87
- repo: https://github.com/Yelp/detect-secrets - Dangerous shell operationline 141
value = eval(expr) # nosemgrep: python.lang.security.audit.eval-detected - Dangerous shell operationline 141
value = eval(expr) # nosemgrep: python.lang.security.audit.eval-detected
skills/python/security-audit/SKILL.md
- Access to secretsline 60
[Credential-related source omitted] - Access to secretsline 60
[Credential-related source omitted] - Network accessline 151
This skill is based on the [Security](https://mcginniscommawill.com/guides/python-library-development/#security-a-matter-of-trust) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/pytho - Network accessline 151
This skill is based on the [Security](https://mcginniscommawill.com/guides/python-library-development/#security-a-matter-of-trust) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/pytho - Network accessline 153
- [Avoiding Injection Flaws](https://mcginniscommawill.com/posts/2025-01-18-avoiding-injection-flaws/) - Network accessline 153
- [Avoiding Injection Flaws](https://mcginniscommawill.com/posts/2025-01-18-avoiding-injection-flaws/) - Network accessline 154
- [Intro to Bandit](https://mcginniscommawill.com/posts/2025-01-25-intro-to-bandit/) - Network accessline 154
- [Intro to Bandit](https://mcginniscommawill.com/posts/2025-01-25-intro-to-bandit/) - Network accessline 155
- [Advanced Bandit Configuration](https://mcginniscommawill.com/posts/2025-08-22-advanced-bandit-configuration/) - Network accessline 155
- [Advanced Bandit Configuration](https://mcginniscommawill.com/posts/2025-08-22-advanced-bandit-configuration/) - Network accessline 156
- [SQL Injection Detection](https://mcginniscommawill.com/posts/2025-08-25-sql-injection-detection-b608/) - Network accessline 156
- [SQL Injection Detection](https://mcginniscommawill.com/posts/2025-08-25-sql-injection-detection-b608/) - Network accessline 157
- [Dependency Security with pip-audit](https://mcginniscommawill.com/posts/2025-01-27-dependency-security-pip-audit/) - Network accessline 157
- [Dependency Security with pip-audit](https://mcginniscommawill.com/posts/2025-01-27-dependency-security-pip-audit/) - Network accessline 158
- [Handling Sensitive Data](https://mcginniscommawill.com/posts/2025-01-29-handling-sensitive-data/) - Network accessline 158
- [Handling Sensitive Data](https://mcginniscommawill.com/posts/2025-01-29-handling-sensitive-data/) - Network accessline 159
- [Secure Coding Practices](https://mcginniscommawill.com/posts/2025-02-02-secure-coding-practices/) - Network accessline 159
- [Secure Coding Practices](https://mcginniscommawill.com/posts/2025-02-02-secure-coding-practices/)
skills/python/security-audit/VULNERABILITIES.md
- Dangerous shell operationline 40
# Vulnerable — shell parses the string, so filename can inject `; rm -rf /` - Dangerous shell operationline 40
# Vulnerable — shell parses the string, so filename can inject `; rm -rf /` - Access to secretsline 80
[Credential-related source omitted] - Access to secretsline 80
[Credential-related source omitted] - Access to secretsline 86
[Credential-related source omitted] - Access to secretsline 86
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted] - Network accessline 136
# Vulnerable — attacker points url at internal metadata / localhost services url = request.args["url"] resp = requests.get(url) - Network accessline 136
# Vulnerable — attacker points url at internal metadata / localhost services url = request.args["url"] resp = requests.get(url) - Network accessline 138
resp = requests.get(url) - Network accessline 138
resp = requests.get(url) - Network accessline 145
if any(ipaddress.ip_address(item[4][0]).is_private for item in addresses): raise ValueError("Disallowed URL") resp = requests.get(url, timeout=5) # resolves the hostname again - Network accessline 145
if any(ipaddress.ip_address(item[4][0]).is_private for item in addresses): raise ValueError("Disallowed URL") resp = requests.get(url, timeout=5) # resolves the hostname again - Network accessline 147
resp = requests.get(url, timeout=5) # resolves the hostname again - Network accessline 147
resp = requests.get(url, timeout=5) # resolves the hostname again
skills/python/security-audit/scripts/security_scan.py
skills/python/testing-strategy/SKILL.md
- Network accessline 161
# GOOD — pins both the count and the values. canonicals = re.findall(r'<link rel="canonical" href="([^"]*)"', html) assert canonicals == ["https://example.com/guide/"] - Network accessline 161
# GOOD — pins both the count and the values. canonicals = re.findall(r'<link rel="canonical" href="([^"]*)"', html) assert canonicals == ["https://example.com/guide/"] - Network accessline 161
# GOOD — pins both the count and the values. canonicals = re.findall(r'<link rel="canonical" href="([^"]*)"', html) assert canonicals == ["https://example.com/guide/"] - Network accessline 161
# GOOD — pins both the count and the values. canonicals = re.findall(r'<link rel="canonical" href="([^"]*)"', html) assert canonicals == ["https://example.com/guide/"] - Network accessline 163
assert canonicals == ["https://example.com/guide/"] - Network accessline 163
assert canonicals == ["https://example.com/guide/"] - Network accessline 163
assert canonicals == ["https://example.com/guide/"] - Network accessline 163
assert canonicals == ["https://example.com/guide/"] - Access to secretsline 753
[Credential-related source omitted] - Access to secretsline 753
[Credential-related source omitted] - Access to secretsline 753
[Credential-related source omitted] - Access to secretsline 753
[Credential-related source omitted] - Network accessline 844
This skill is based on the [Code Quality](https://mcginniscommawill.com/guides/python-library-development/#code-quality-the-foundation) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/ - Network accessline 844
This skill is based on the [Code Quality](https://mcginniscommawill.com/guides/python-library-development/#code-quality-the-foundation) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/ - Network accessline 844
This skill is based on the [Code Quality](https://mcginniscommawill.com/guides/python-library-development/#code-quality-the-foundation) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/ - Network accessline 844
This skill is based on the [Code Quality](https://mcginniscommawill.com/guides/python-library-development/#code-quality-the-foundation) section of the [Guide to Developing High-Quality Python Libraries](https://mcginniscommawill.com/guides/ - Network accessline 846
- [Testing with Pytest](https://mcginniscommawill.com/posts/2025-02-04-testing-pytest-intro/) - Network accessline 846
- [Testing with Pytest](https://mcginniscommawill.com/posts/2025-02-04-testing-pytest-intro/) - Network accessline 846
- [Testing with Pytest](https://mcginniscommawill.com/posts/2025-02-04-testing-pytest-intro/) - Network accessline 846
- [Testing with Pytest](https://mcginniscommawill.com/posts/2025-02-04-testing-pytest-intro/) - Network accessline 847
- [Testing Coverage](https://mcginniscommawill.com/posts/2025-02-09-testing-coverage/) - Network accessline 847
- [Testing Coverage](https://mcginniscommawill.com/posts/2025-02-09-testing-coverage/) - Network accessline 847
- [Testing Coverage](https://mcginniscommawill.com/posts/2025-02-09-testing-coverage/) - Network accessline 847
- [Testing Coverage](https://mcginniscommawill.com/posts/2025-02-09-testing-coverage/) - Network accessline 848
- [Testing with Tox](https://mcginniscommawill.com/posts/2025-02-13-testing-tox/) - Network accessline 848
- [Testing with Tox](https://mcginniscommawill.com/posts/2025-02-13-testing-tox/) - Network accessline 848
- [Testing with Tox](https://mcginniscommawill.com/posts/2025-02-13-testing-tox/) - Network accessline 848
- [Testing with Tox](https://mcginniscommawill.com/posts/2025-02-13-testing-tox/) - Network accessline 849
- [Testing with Mocking](https://mcginniscommawill.com/posts/2025-02-16-testing-mocking/) - Network accessline 849
- [Testing with Mocking](https://mcginniscommawill.com/posts/2025-02-16-testing-mocking/) - Network accessline 849
- [Testing with Mocking](https://mcginniscommawill.com/posts/2025-02-16-testing-mocking/) - Network accessline 849
- [Testing with Mocking](https://mcginniscommawill.com/posts/2025-02-16-testing-mocking/)
skills/python/web-app-architecture/AUTH.md
skills/python/web-app-architecture/FRONTEND.md
skills/python/web-app-architecture/PAYMENTS.md
- Access to secretsline 25
[Credential-related source omitted] - Access to secretsline 25
[Credential-related source omitted] - Network accessline 108
resource "stripe_webhook_endpoint" "app" { url = "https://${var.app_host}/api/v1/stripe/webhook" - Network accessline 108
resource "stripe_webhook_endpoint" "app" { url = "https://${var.app_host}/api/v1/stripe/webhook" - Network accessline 109
url = "https://${var.app_host}/api/v1/stripe/webhook" - Network accessline 109
url = "https://${var.app_host}/api/v1/stripe/webhook"
skills/python/web-app-architecture/SKILL.md
skills/python/web-app-architecture/STACK.md
skills/rust/crates/SKILL.md
- Network accessline 26
license = "MIT OR Apache-2.0" description = "One line; required by crates.io" repository = "https://github.com/owner/my-crate" - Network accessline 26
license = "MIT OR Apache-2.0" description = "One line; required by crates.io" repository = "https://github.com/owner/my-crate" - Network accessline 28
repository = "https://github.com/owner/my-crate" - Network accessline 28
repository = "https://github.com/owner/my-crate"
skills/swift/apps/SKILL.md
- Access to secretsline 3
[Credential-related source omitted] - Access to secretsline 3
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Dangerous shell operationline 43
- run: sudo xcode-select -s /Applications/Xcode_26.2.app - Dangerous shell operationline 43
- run: sudo xcode-select -s /Applications/Xcode_26.2.app - Access to secretsline 105
[Credential-related source omitted] - Access to secretsline 105
[Credential-related source omitted] - Access to secretsline 109
[Credential-related source omitted] - Access to secretsline 109
[Credential-related source omitted] - Access to secretsline 239
[Credential-related source omitted] - Access to secretsline 239
[Credential-related source omitted]
skills/swift/releases/SKILL.md
- Network accessline 55
[Credential-related source omitted] - Network accessline 55
[Credential-related source omitted] - Access to secretsline 55
[Credential-related source omitted] - Access to secretsline 55
[Credential-related source omitted] - Network accessline 56
[Credential-related source omitted] - Network accessline 56
[Credential-related source omitted] - Access to secretsline 56
[Credential-related source omitted] - Access to secretsline 56
[Credential-related source omitted] - Network accessline 57
key_id: ENV.fetch("ASC_KEY_ID"), - Network accessline 57
key_id: ENV.fetch("ASC_KEY_ID"), - Network accessline 58
issuer_id: ENV.fetch("ASC_ISSUER_ID"), - Network accessline 58
issuer_id: ENV.fetch("ASC_ISSUER_ID"), - Network accessline 59
key_filepath: ENV.fetch("ASC_KEY_PATH"), - Network accessline 59
key_filepath: ENV.fetch("ASC_KEY_PATH"),
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Signal confidence: 464 facts
- Network access in code of the SKILL.mdaccessible-interfaces/SKILL.md:71High confidence
- Network access in code of the SKILL.mdaccessible-interfaces/SKILL.md:72High confidence
- Dangerous shell operation in the frontmatter of the SKILL.mdskills/common/destructive-operations/SKILL.md:3Low confidence
- Dangerous shell operation in the frontmatter of the SKILL.mddestructive-operations/SKILL.md:3Low confidence
- Dangerous shell operation in code of the SKILL.mdskills/common/destructive-operations/SKILL.md:29High confidence
- Dangerous shell operation in code of the SKILL.mddestructive-operations/SKILL.md:29High confidence
- Dangerous shell operation in the frontmatter of the SKILL.mdskills/common/git-hygiene/SKILL.md:3Low confidence
- Dangerous shell operation in the frontmatter of the SKILL.mdgit-hygiene/SKILL.md:3Low confidence
- Dangerous shell operation in code of the SKILL.mdskills/common/git-hygiene/SKILL.md:23High confidence
- Dangerous shell operation in code of the SKILL.mdgit-hygiene/SKILL.md:23High confidence
- Dangerous shell operation in code of the SKILL.mdskills/common/git-hygiene/SKILL.md:24High confidence
- Dangerous shell operation in code of the SKILL.mdgit-hygiene/SKILL.md:24High confidence
- Dangerous shell operation in prose of the SKILL.mdskills/common/git-hygiene/SKILL.md:62Low confidence
- Dangerous shell operation in prose of the SKILL.mdgit-hygiene/SKILL.md:62Low confidence
- Network access in code of the SKILL.mdskills/common/git-hygiene/SKILL.md:93High confidence
- Network access in code of the SKILL.mdgit-hygiene/SKILL.md:93High confidence
- Network access in code of the SKILL.mdskills/common/git-hygiene/SKILL.md:94High confidence
- Network access in code of the SKILL.mdgit-hygiene/SKILL.md:94High confidence
- Network access in code of the SKILL.mdskills/common/git-hygiene/SKILL.md:95High confidence
- Network access in code of the SKILL.mdgit-hygiene/SKILL.md:95High confidence
- Network access in code of the SKILL.mdskills/common/git-hygiene/SKILL.md:96High confidence
- Network access in code of the SKILL.mdgit-hygiene/SKILL.md:96High confidence
- Network access in code of the SKILL.mdskills/common/git-hygiene/SKILL.md:97High confidence
- Network access in code of the SKILL.mdgit-hygiene/SKILL.md:97High confidence
- Network access in code of the SKILL.mdskills/common/git-hygiene/SKILL.md:98High confidence
- Network access in code of the SKILL.mdgit-hygiene/SKILL.md:98High confidence
- Access to secrets in code of the SKILL.mdskills/common/git-hygiene/SKILL.md:107High confidence
- Access to secrets in code of the SKILL.mdgit-hygiene/SKILL.md:107High confidence
- Access to secrets in code of the SKILL.mdskills/common/git-hygiene/SKILL.md:183High confidence
- Access to secrets in code of the SKILL.mdgit-hygiene/SKILL.md:183High confidence
- Dangerous shell operation in code of the SKILL.mdskills/common/git-hygiene/SKILL.md:188High confidence
- Dangerous shell operation in code of the SKILL.mdgit-hygiene/SKILL.md:188High confidence
- Network access in code of the SKILL.mdskills/common/github-actions/SKILL.md:49High confidence
- Network access in code of the SKILL.mdskills/common/github-actions/SKILL.md:49High confidence
- Network access in code of the SKILL.mdgithub-actions/SKILL.md:49High confidence
- Network access in code of the SKILL.mdskills/common/github-actions/SKILL.md:50High confidence
- Network access in code of the SKILL.mdskills/common/github-actions/SKILL.md:50High confidence
- Network access in code of the SKILL.mdgithub-actions/SKILL.md:50High confidence
- Network access in code of the SKILL.mdskills/common/github-actions/SKILL.md:51High confidence
- Network access in code of the SKILL.mdskills/common/github-actions/SKILL.md:51High confidence
- Network access in code of the SKILL.mdgithub-actions/SKILL.md:51High confidence
- Network access in code of the SKILL.mdskills/common/github-actions/SKILL.md:52High confidence
- Network access in code of the SKILL.mdskills/common/github-actions/SKILL.md:52High confidence
- Network access in code of the SKILL.mdgithub-actions/SKILL.md:52High confidence
- Dangerous shell operation in code of the SKILL.mdskills/common/github-actions/SKILL.md:53High confidence
- Dangerous shell operation in code of the SKILL.mdskills/common/github-actions/SKILL.md:53High confidence
- Dangerous shell operation in code of the SKILL.mdgithub-actions/SKILL.md:53High confidence
- Network access in code of the SKILL.mdskills/common/github-actions/SKILL.md:53High confidence
- Network access in code of the SKILL.mdskills/common/github-actions/SKILL.md:53High confidence
- Network access in code of the SKILL.mdgithub-actions/SKILL.md:53High confidence
and 414 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/common/accessible-interfaces/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/common/accessible-interfaces/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/common/accessible-interfaces/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/common/accessible-interfaces/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/common/accessible-interfaces/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.