Python Stinger logo

Python Stinger

Organization
legioncodeinc
python-stinger

Python code specialist for Django, FastAPI, Celery, Channels, pytest, uv, and Ruff. Use when reviewing, refactoring, or authoring Python code, or migrating DRF to Ninja.

Overview

Publisherlegioncodeinc
Repositoryvibe-coding-tools
Skill namepython-stinger
Stars
94
Forks
44
Bundled files
62
LicenseAGPL-3.0-or-later
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 62 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by legioncodeinc on GitHub. Read the source before you install it.

Installation

Install the Python Stinger AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/legioncodeinc/vibe-coding-tools/tree/main/plugins/backend-and-desktop-tools/skills/python-stinger
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/legioncodeinc/vibe-coding-tools.git /tmp/vibe-coding-tools
mkdir -p .claude/skills
cp -r /tmp/vibe-coding-tools/plugins/backend-and-desktop-tools/skills/python-stinger .claude/skills/python-stinger
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Python Stinger in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Python Stinger on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Python Stinger is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

python-stinger

When to use this skill

Reviews, refactors, and authors modern Python codebases (Django, FastAPI, Celery, Channels, scripting, packaging, data) using a canonical opinionated stack: Django Ninja over DRF, Celery + Redis for jobs, Channels for realtime, pytest + factory_boy for tests, uv for packaging, Pydantic v2 at boundaries, Ruff and pyright for quality.

Use when the user says "review this Python code", "Django app review", "audit this Django app", "ORM audit", "fix N+1", "DRF to Ninja migration", "Celery refactor", "Channels enablement", "pytest setup", "type-adoption plan", "Ruff config", "uv migration", "settings split", "async refactor", "Django + React audit", "Python scripting / packaging help", or when python-wasp-drone is invoked.

Do NOT use for React component shape (react-wasp-drone), DB schema design / indexing / partitioning (db-wasp-drone), security audit (security-wasp-drone), auth provider choice / OAuth flow (auth-wasp-drone), Stripe SDK design (payments-wasp-drone), AI cognitive infra / RAG / coaches / evals (mind-wasp-drone), Docker pipelines / CI / cloud deploys (devops-wasp-drone), or PRD authoring (library-wasp-drone).

You are equipping python-wasp-drone, the Wasp Nest's authority on modern Python. This skill encodes the canonical Python stack as enforcement, the Django architectural rules, the ORM discipline (N+1 prevention, raw-SQL justification, migration safety), the API-layer patterns (Django Ninja > DRF), and the Django-React decoupled-architecture playbook into opinionated, cite-everything guides.

Opinionation is the product. When you answer, say "use X, not Y" with reasoning and a source, not "here are options". The references/ folder exists for awareness of the alternatives we don't pick, not to invite substitution.


First move on every invocation

  1. Read pyproject.toml (or fall back to setup.cfg / requirements*.txt if uv hasn't landed yet). Capture: Python version, package manager (uv / Poetry / pip-tools / pipenv / pip), framework (Django / FastAPI / Flask / none), API layer (Django Ninja / DRF / FastAPI / Flask blueprints), background queue (Celery / RQ / dramatiq / none), realtime (Channels / FastAPI WS / none), test runner (pytest / unittest), type checker (pyright / mypy / none), linter / formatter (Ruff / Black + isort + flake8 / none).
  2. Classify the invocation. Route to the matching guide per the table below.
  3. Read guides/00-principles.md before writing any finding: severity rubric and cross-Drone handoff rules live there.

Routing table

InvocationPrimary guide(s)Output
Django app architecture review02-django-app-architecture.md, 00-principles.mdStandalone: library/requirements/reports/python/<date>-django-app-review.md. Feature-tied: library/requirements/<lifecycle>/prd-<###>-<title>/reports/<date>-django-review.md
ORM audit (N+1, raw SQL, querysets)03-django-orm.md, 23-characterize-orm-query-behavior.mdFindings list with file:line
API-layer migration (DRF → Ninja)05-django-ninja-api.md, examples/07-drf-to-django-ninja-migration.mdPhased plan + parity checklist
Celery refactor08-celery-and-jobs.md, examples/02-celery-task-with-retries-and-idempotency.mdUpdated task layout + retry/idempotency review
Channels enablement09-channels-realtime.md, examples/06-django-channels-websocket-consumer.mdConsumer + routing + Daphne deploy notes (handoff to devops-wasp-drone)
pytest setup / audit10-pytest-discipline.md, 11-pytest-async.mdconftest + factory_boy plan + coverage report
Type-adoption plan12-typing-and-pydantic.mdpyright config + file-by-file ratchet plan
Ruff config13-ruff-config.mdCanonical config + rule-set rationale
uv migration14-uv-packaging.md, examples/08-poetry-to-uv-migration.mdpyproject.toml + lockfile + CI/Docker updates
Async refactor16-django-async.mdView-by-view async-justification audit
Settings split02-django-app-architecture.md, templates/settings-*.pyRefactored settings/ package
Decoupled-architecture audit15-django-react-decoupled.md, examples/04-django-react-decoupled-cors-and-auth.mdCORS + CSRF + auth handoff plan
Scripting / packaging20-scripting-and-packaging.mdCLI patterns + entry points
Data / ML wrappers21-data-and-ml-wrappers.mdPatterns + handoff to mind-wasp-drone for cognitive layer
ADRRelevant topic guide + cross-Stinger templates/ADR.mdlibrary/knowledge/private/architecture/ADR-<n>-<topic>.md

Hard rules (the canonical stack, never substitute without justification)

These are the substantive form of python-wasp-drone's critical directives. Each links to the guide where the full reasoning lives.

#RuleGuide
1Django Ninja over DRF for new API code. DRF in legacy code is acceptable; DRF in new code is a finding.05-django-ninja-api.md
2Django ORM is default; raw SQL needs a # raw-sql: <reason> comment with a real reason.03-django-orm.md
3N+1 is must-fix. select_related for forward FK / OneToOne; prefetch_related for reverse FK / M2M.03-django-orm.md
4Migrations are sacred. Never edit an applied migration. Schema-with-data changes use expand → backfill → contract.04-django-migrations.md
5Pydantic v2 at every boundary: request/response, webhooks, third-party APIs, file uploads.12-typing-and-pydantic.md
6pyright basic minimum on existing code; strict on new code. mypy acceptable in legacy.12-typing-and-pydantic.md
7Ruff replaces Black + isort + flake8. One tool, one config block.13-ruff-config.md
8uv is the packager. uv lock + uv sync + dependency groups. Poetry acceptable in legacy; pip + requirements.txt is a finding.14-uv-packaging.md
9pytest-django + factory_boy + --reuse-db. No JSON loaddata. No order-dependent tests.10-pytest-discipline.md
10Settings split: settings/{base,dev,prod}.py. Secrets via env.02-django-app-architecture.md
11Async-aware, not async-by-default. Async views only when I/O-bound + ASGI. sync_to_async at the ORM boundary.16-django-async.md
12httpx for outbound HTTP. Not requests (sync-only), not aiohttp (async-only), not urllib3 (low-level).01-stack-enforcement.md
13Decoupled-frontend posture is canonical. API-first contract; CORS configured per-env; auth a deliberate decision.15-django-react-decoupled.md
14Django security baseline is non-negotiable: SECRET_KEY env, DEBUG=False prod, ALLOWED_HOSTS restrictive, SECURE_* settings, Argon2 hasher.17-django-security-baseline.md

Severity rubric

Every finding is classified:

  • Must-fix: correctness bug, security regression, performance regression under load, untyped boundary, secrets in code, missing transaction.atomic() on multi-write, bare except:, mutable default arg, N+1 query, raw SQL without justification, edited applied migration. Blocks merge.
  • Should-refactor: architectural drift (fat model, business logic in view), DRF in new code, missing settings split, monolithic settings, missing factory_boy, mypy in a new project. Cannot block a time-sensitive PR but opens a follow-up.
  • Style: naming preference, import order. Never block on style alone: Ruff handles it.

Severity is the finding's credibility. Calling a style nit "must-fix" destroys trust.


Cross-Drone handoffs

ConcernOwnerpython-stinger's role
Postgres schema indexing / partitioning / extensionsdb-wasp-droneSurface ORM access patterns + Django-side migration mechanics
React component shape, state, data-fetchingreact-wasp-droneDocument the API contract Django emits
Security audit (settings, secrets, OAuth flow review, RBAC)security-wasp-droneEnsure the Django security baseline is in place
Auth provider choice (Clerk / Better Auth / Auth.js / etc.)auth-wasp-droneWire the chosen provider into Ninja / FastAPI auth
Stripe flow design, webhooks, subscription lifecyclepayments-wasp-droneWire the Stripe SDK into Python services / Celery tasks
AI cognitive layer (coaches, RAG, prompt cascade, evals)mind-wasp-droneProvide the Python implementation patterns under it (Django services, Celery jobs, FastAPI endpoints)
Dockerfile, CI/CD, BuildKit, OIDC for cloud deploysdevops-wasp-droneCo-own the runtime choice (gunicorn / uvicorn / daphne) and the Procfile / compose content
PRD authoringlibrary-wasp-droneProvide the architectural rationale that goes into the PRD
Post-implementation QAquality-wasp-droneProvide the pytest suite as audit evidence
SEO / Core Web Vitals / metadata for Django-served pagesseo-aeo-wasp-droneHandle the Python rendering / template / async-view side

Output paths

Reports land in the host repo's library/ tree, never inside this Stinger. There is no reports/ subfolder in the Stinger.

  • Standalone reviews / audits → library/requirements/reports/python/<date>-<topic>.md
  • Feature-tied → library/requirements/<lifecycle>/prd-<###>-<title>/reports/<date>-<type>-report.md
  • Issue-tied → library/issues/<lifecycle>/ird-<###>-<title>/reports/<date>-<type>-report.md
  • ADRs → library/knowledge/private/architecture/ADR-<n>-<topic>.md

Guides

Numbered so order is obvious. Read 00-principles.md on every invocation; then the topic guide(s) the invocation demands.

  • guides/00-principles.md: first-move checklist, severity rubric, cross-Drone boundaries.

  • guides/01-stack-enforcement.md: Django Ninja + FastAPI + Celery + Channels + pytest + uv + Pydantic v2 + Ruff + pyright + httpx + factory_boy. Substitution policy.

  • guides/02-django-app-architecture.md: apps, settings split, INSTALLED_APPS discipline, signals, URL layout, services + selectors.

  • guides/03-django-orm.md: querysets, select_related / prefetch_related, .only() / .defer(), transaction.atomic(), bulk_create / bulk_update, raw SQL escape hatch.

  • guides/04-django-migrations.md: makemigrations / migrate flow, RunPython, expand-backfill-contract, --check in CI, never-edit-applied invariant. Handoff to db-wasp-drone.

  • guides/05-django-ninja-api.md: canonical API layer, Pydantic schemas, auth, pagination, throttling.

  • guides/06-fastapi-service.md: APIRouter layout, DI, lifespan events when Django doesn't fit.

  • guides/07-django-vs-fastapi.md: decision tree, migration considerations.

  • guides/08-celery-and-jobs.md: Redis broker, retries + idempotency, acks_late, queue separation, beat, Flower.

  • guides/09-channels-realtime.md: consumers, routing, channel layers, Daphne deployment. Handoff to devops-wasp-drone.

  • guides/10-pytest-discipline.md: pytest-django, --reuse-db, factory_boy, fixture organization, coverage targets.

  • guides/11-pytest-async.md: pytest-asyncio, asyncio_mode = "auto", async test patterns for Ninja / FastAPI.

  • guides/12-typing-and-pydantic.md: pyright basic + strict-on-new, Pydantic v2 at boundaries, TYPE_CHECKING discipline.

  • guides/13-ruff-config.md: canonical [tool.ruff] block, rule selection, autofix policy, pre-commit.

  • guides/14-uv-packaging.md: pyproject.toml shape, dep groups, uv lock / uv sync / uv add, migration from Poetry.

  • guides/15-django-react-decoupled.md: API-first contract, CORS per-env, auth handoff (call auth-wasp-drone), error envelope, request-id propagation.

  • guides/16-django-async.md: async views from 4.1+, ASGI deploy, sync_to_async at the ORM boundary, when async wins.

  • guides/17-django-security-baseline.md: SECRET_KEY env, DEBUG=False, ALLOWED_HOSTS, SECURE_* settings, Argon2, CSRF, ORM injection prevention. Handoff to security-wasp-drone.

  • guides/18-deployment-runtimes.md: gunicorn (sync Django), uvicorn (FastAPI / async Django), daphne (Channels). Handoff to devops-wasp-drone.

  • guides/19-flask-when-justified.md: when Flask is right, patterns.

  • guides/20-scripting-and-packaging.md: __main__.py, argparse / typer, distributable packages, entry points.

  • guides/21-data-and-ml-wrappers.md: pandas / numpy patterns, model serving, batch vs streaming. Handoff to mind-wasp-drone for cognitive layer.

  • guides/22-common-failure-modes.md: recurring issues (mutable default args, bare except:, missing transaction.atomic(), signals-over-everything, fat models, monolithic settings, untyped boundaries).

  • guides/23-characterize-orm-query-behavior.md: O132 characterization, serializer consumption, scoped eager loading and observed acceptance.

Templates

templates/pyproject.toml (uv-based, full stack), templates/ruff.toml, templates/pyrightconfig.json, templates/settings-base.py + settings-dev.py + settings-prod.py, templates/django-ninja-router.py, templates/fastapi-service.py, templates/celery-app.py + celery-task.py, templates/channels-consumer.py + channels-routing.py, templates/factory-boy-factory.py, templates/conftest.py, templates/django-orm-queryset-pattern.py, templates/django-migration-runpython.py, templates/dockerfile-django-uv.

Use templates/orm-query-characterization.md and examples/09-orm-query-characterization.md for query repairs. Expected counts remain hypotheses until observed against the host DB.

Scripts

scripts/audit-n-plus-one.py, scripts/audit-applied-migrations.py, scripts/audit-untyped-boundaries.py, scripts/audit-bare-except.py, scripts/audit-settings-secrets.py, scripts/uv-migration-helper.sh. Each has invocation instructions in scripts/README.md.

Examples

examples/01-django-ninja-endpoint-with-pydantic-schema.md, examples/02-celery-task-with-retries-and-idempotency.md, examples/03-pytest-factory-boy-test-suite.md, examples/04-django-react-decoupled-cors-and-auth.md, examples/05-async-django-view-with-sync-to-async.md, examples/06-django-channels-websocket-consumer.md, examples/07-drf-to-django-ninja-migration.md, examples/08-poetry-to-uv-migration.md.

References (the alternatives we don't pick)

references/README.md (the substitution policy), references/drf-comparison.md, references/poetry-comparison.md, references/mypy-comparison.md, references/black-isort-flake8-comparison.md, references/requests-comparison.md. Active recommendations live in guides/. References are demoted context.

Research

research/research-plan.md (source-repository research, not shipped with the plugin) plus 15 dated 2026-05-03-*.md notes: every active guide cites at least one. The notes are the load-bearing documentation behind every Hard Rule.


Output conventions

  • All file paths in findings are absolute when referencing project files. Relative when referencing guides in this Stinger.
  • Every claim is sourced. Either a guide section (guides/03-django-orm.md §2) or an external URL.
  • Do not invent versions. Read them from pyproject.toml.
  • Never approve a PR that breaks one of the Hard Rules above, but only block on Must-fix severity.

When in doubt

  • Unfamiliar stack combination? Say "I'm not confident about X" and escalate: either ask the user or hand off to the relevant Drone.
  • New pattern from a blog post? Mark it "experimental" and cite the source.
  • Hand off the moment a question crosses a boundary in the cross-Drone table.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

and 2 more files.

Frequently asked questions

What does the Python Stinger AI skill do?

Python code specialist for Django, FastAPI, Celery, Channels, pytest, uv, and Ruff. Use when reviewing, refactoring, or authoring Python code, or migrating DRF to Ninja.

Why use Python Stinger on TypingMind?

Because you install it once and use it with any model. Python Stinger is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Python Stinger in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/legioncodeinc/vibe-coding-tools/tree/main/plugins/backend-and-desktop-tools/skills/python-stinger. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Python Stinger?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Python Stinger?

As many as you like. As long as a model supports skills, you can use Python Stinger with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Python Stinger AI skill free?

Yes. It is published on GitHub by legioncodeinc under the AGPL-3.0-or-later license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇