Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/tedivm/robs_awesome_python_template/python-testingnpx skills add tedivm/robs_awesome_python_template --skill python-testinggit clone --depth 1 https://github.com/tedivm/robs_awesome_python_templateWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00064 | $0.00900 |
| Opus 5 | $0.00032 | $0.00450 |
| Sonnet 5 | $0.00013 | $0.00180 |
| Haiku 4.5 | $0.00006 | $0.00090 |
Grade A, and why
python-testing scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 122 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Python Testing
context7: If the
context7_query-docstool is available, resolve and load the fullpytestdocumentation before creating new tests or running pytest commands not in the makefile:context7_resolve-library-id: "pytest" context7_query-docs: /pytest-dev/pytest "<query>"
Guidelines and patterns for writing tests in this codebase.
General Rules
- No test classes unless there is a specific technical reason. Prefer standalone functions.
- All fixtures must be defined or imported in
conftest.pyso they are automatically available to all tests in that directory. - No mocks for simple dataclasses or Pydantic models — construct an instance directly with the desired parameters instead.
- Test file structure mirrors the main code — a test for
{{cookiecutter.__package_slug}}/foo.pylives attests/test_foo.py. - When adding new code, add tests to cover it.
Running Tests
make pytest # Run full test suite with coverage report
make pytest_loud # Run with debug logging enabled
uv run pytest # Run directly — append any pytest options/arguments
uv run pytest tests/test_foo.py -k test_my_function -s
{%- if cookiecutter.include_fastapi == "y" %}
FastAPI Tests
Use the FastAPI TestClient via a fixture rather than calling router classes directly.
import pytest
from fastapi.testclient import TestClient
from {{cookiecutter.__package_slug}}.www import app
@pytest.fixture
def client() -> TestClient:
return TestClient(app)
def test_get_health(client: TestClient) -> None:
response = client.get("/health")
assert response.status_code == 200
{%- endif %}
{%- if cookiecutter.include_sqlalchemy == "y" %}
Database Tests
Use a memory-backed SQLite fixture. Wire it into the FastAPI app via a dependency override so routes use the test database automatically.
import pytest_asyncio
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker
from {{cookiecutter.__package_slug}}.models.base import Base
@pytest_asyncio.fixture
async def db_session() -> AsyncSession:
engine = create_async_engine("sqlite+aiosqlite:///:memory:")
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
async_session = async_sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
async with async_session() as session:
yield session
await engine.dispose()
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 122 lines · 64 tokens per session scan A 1c2b297cab7a
python-testing is a skill published in the GitHub repository tedivm/robs_awesome_python_template (309 stars, last pushed 3mo ago), licensed MIT. It adds 64 tokens to every session and 900 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
background-task
Add or modify work that runs outside the request/response cycle — emails, document ingestion, webhooks, cleanups, scheduled jobs. Use when something is slow or fire-and-forget, or when adding a periodic/cron task. This project's queue is {{ cookiecutter.backgroundtasks }}.
agent-tool
Add a new tool/function the AI agent can call (e.g. look something up, hit an external API, perform an action). Use when extending the assistant's capabilities, wiring a new function into the agent, or when the model needs a new action. This project uses {{ cookiecutter.aiframework }}.
frontend-feature
Build a new page, view, or data-driven feature in the Next.js frontend. Use when adding a route under the dashboard/marketing area, wiring UI to a backend endpoint, adding client state, or creating a localized page. Covers App Router, data fetching, Zustand stores, and i18n.
rag-knowledge
Work with the RAG knowledge base — ingest documents, run semantic search, manage collections, or add a sync source/connector (Google Drive, S3). Use when populating or debugging the knowledge base, tuning retrieval, or adding a new document source. This project uses {{ cookiecutter.vectorstore }} + {{…
alembic-migration
Create, review, and apply database schema changes with Alembic. Use whenever a SQLAlchemy model is added or changed, a column/index/constraint needs to change, or a data backfill is required — anything that alters the PostgreSQL schema.
channel-bot
Work with messaging-channel bots (Telegram / Slack) — register a bot, route inbound messages through the AI agent, handle webhooks vs polling, or add a new channel adapter. Use when wiring chat into a messaging platform or debugging bot delivery.