Python + AI Agent + pytest rules for AI coding agents
Full stack: Python (scripts, agents, libraries) + LLM / agent SDKs (Python) + pytest
Ready-to-commit rules for Python (scripts, agents, libraries) + LLM / agent SDKs (Python) + pytest in every major format: AGENTS.md (Codex, Cursor, Copilot), CLAUDE.md (Claude Code), Cursor .mdc project rules, legacy .cursorrules, Copilot instructions, Windsurf rules and GEMINI.md. A Python AI agent or LLM script with uv, ruff and pytest.
Last reviewed 2026-10-21 · Customise in the generator · Raw: AGENTS.md, CLAUDE.md
Prompts and model names get scattered across files, and tests hit real paid APIs.
Generated files
# AGENTS.md - this project
Instructions for AI coding agents working in this repository.
## Project
A Python (scripts, agents, libraries) + LLM / agent SDKs (Python) + pytest project.
Stack: Python (scripts, agents, libraries), LLM / agent SDKs (Python), pytest.
## Commands
- Install deps: `uv sync`
- Run: `uv run python -m <package>`
- Lint and format: `uv run ruff check . && uv run ruff format .`
- Type check: `uv run mypy .`
- Tests: `uv run pytest -q`
## Project structure
- Source in `src/<package>/`, tests in `tests/`, config in `pyproject.toml`.
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
## Python (scripts, agents, libraries)
- Target the Python version in `pyproject.toml`. Use modern syntax (`list[str]`, `X | None`).
- Type-hint all public functions.
- Use `pathlib` for paths, `logging` (not `print`) for diagnostics.
- Add dependencies with `uv add`; never pip install into the global interpreter.
- Keep functions small and pure where possible; isolate I/O at the edges.
- Catch specific exceptions only. Never use bare `except:`.
## LLM / agent SDKs (Python)
- Read API keys from env vars; never hardcode them or log them.
- Keep model names, temperatures and token limits in one settings module.
- Store prompts as versioned files or constants, not scattered f-strings.
- Use structured outputs / JSON schema (Pydantic models) when parsing model output; validate before acting on it.
- Set timeouts and retries with backoff on every API call; handle rate limits gracefully.
- Log token usage and cost per call so spend is visible.
- Agent tools must validate their arguments and must never run shell commands or SQL built from raw model output.
## pytest
- Tests live in `tests/` named `test_*.py`. Use plain `assert`.
- Share setup with fixtures in `conftest.py`; use `@pytest.mark.parametrize` for input tables.
- Mock external services (HTTP, LLM APIs, payment providers); tests must not hit the network.
- Every bug fix adds a regression test.
## Reference docs
- [uv docs](https://docs.astral.sh/uv/)
- [Ruff docs](https://docs.astral.sh/ruff/)
- [OpenAI Python SDK](https://github.com/openai/openai-python)
- [Anthropic Python SDK](https://github.com/anthropics/anthropic-sdk-python)
- [pytest docs](https://docs.pytest.org)
# CLAUDE.md - this project
Project instructions for Claude Code.
## Project
A Python (scripts, agents, libraries) + LLM / agent SDKs (Python) + pytest project.
Stack: Python (scripts, agents, libraries), LLM / agent SDKs (Python), pytest.
## Commands
- Install deps: `uv sync`
- Run: `uv run python -m <package>`
- Lint and format: `uv run ruff check . && uv run ruff format .`
- Type check: `uv run mypy .`
- Tests: `uv run pytest -q`
## Project structure
- Source in `src/<package>/`, tests in `tests/`, config in `pyproject.toml`.
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
## Python (scripts, agents, libraries)
- Target the Python version in `pyproject.toml`. Use modern syntax (`list[str]`, `X | None`).
- Type-hint all public functions.
- Use `pathlib` for paths, `logging` (not `print`) for diagnostics.
- Add dependencies with `uv add`; never pip install into the global interpreter.
- Keep functions small and pure where possible; isolate I/O at the edges.
- Catch specific exceptions only. Never use bare `except:`.
## LLM / agent SDKs (Python)
- Read API keys from env vars; never hardcode them or log them.
- Keep model names, temperatures and token limits in one settings module.
- Store prompts as versioned files or constants, not scattered f-strings.
- Use structured outputs / JSON schema (Pydantic models) when parsing model output; validate before acting on it.
- Set timeouts and retries with backoff on every API call; handle rate limits gracefully.
- Log token usage and cost per call so spend is visible.
- Agent tools must validate their arguments and must never run shell commands or SQL built from raw model output.
## pytest
- Tests live in `tests/` named `test_*.py`. Use plain `assert`.
- Share setup with fixtures in `conftest.py`; use `@pytest.mark.parametrize` for input tables.
- Mock external services (HTTP, LLM APIs, payment providers); tests must not hit the network.
- Every bug fix adds a regression test.
## Reference docs
- [uv docs](https://docs.astral.sh/uv/)
- [Ruff docs](https://docs.astral.sh/ruff/)
- [OpenAI Python SDK](https://github.com/openai/openai-python)
- [Anthropic Python SDK](https://github.com/anthropics/anthropic-sdk-python)
- [pytest docs](https://docs.pytest.org)
---
description: "Core rules for this project"
alwaysApply: true
---
# this project
A Python (scripts, agents, libraries) + LLM / agent SDKs (Python) + pytest project.
Stack: Python (scripts, agents, libraries), LLM / agent SDKs (Python), pytest.
## Commands
- Install deps: `uv sync`
- Run: `uv run python -m <package>`
- Lint and format: `uv run ruff check . && uv run ruff format .`
- Type check: `uv run mypy .`
- Tests: `uv run pytest -q`
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
---
description: "Python (scripts, agents, libraries) conventions: Modern Python project managed with uv, ruff and pytest."
globs: **/*.py
alwaysApply: false
---
# Python (scripts, agents, libraries)
- Target the Python version in `pyproject.toml`. Use modern syntax (`list[str]`, `X | None`).
- Type-hint all public functions.
- Use `pathlib` for paths, `logging` (not `print`) for diagnostics.
- Add dependencies with `uv add`; never pip install into the global interpreter.
- Keep functions small and pure where possible; isolate I/O at the edges.
- Catch specific exceptions only. Never use bare `except:`.
Docs: https://docs.astral.sh/uv/, https://docs.astral.sh/ruff/
---
description: "LLM / agent SDKs (Python) conventions: LLM apps and agents using the OpenAI or Anthropic Python SDKs."
globs: **/*agent*.py, **/llm/**/*.py, **/prompts/**
alwaysApply: false
---
# LLM / agent SDKs (Python)
- Read API keys from env vars; never hardcode them or log them.
- Keep model names, temperatures and token limits in one settings module.
- Store prompts as versioned files or constants, not scattered f-strings.
- Use structured outputs / JSON schema (Pydantic models) when parsing model output; validate before acting on it.
- Set timeouts and retries with backoff on every API call; handle rate limits gracefully.
- Log token usage and cost per call so spend is visible.
- Agent tools must validate their arguments and must never run shell commands or SQL built from raw model output.
Docs: https://github.com/openai/openai-python, https://github.com/anthropics/anthropic-sdk-python
---
description: "pytest conventions: Python tests with pytest."
globs: tests/**/*.py, **/test_*.py
alwaysApply: false
---
# pytest
- Tests live in `tests/` named `test_*.py`. Use plain `assert`.
- Share setup with fixtures in `conftest.py`; use `@pytest.mark.parametrize` for input tables.
- Mock external services (HTTP, LLM APIs, payment providers); tests must not hit the network.
- Every bug fix adds a regression test.
Docs: https://docs.pytest.org
# Cursor rules - this project
You are an expert Python (scripts, agents, libraries), LLM / agent SDKs (Python), pytest engineer working on this codebase. Follow these rules.
## Project
A Python (scripts, agents, libraries) + LLM / agent SDKs (Python) + pytest project.
Stack: Python (scripts, agents, libraries), LLM / agent SDKs (Python), pytest.
## Commands
- Install deps: `uv sync`
- Run: `uv run python -m <package>`
- Lint and format: `uv run ruff check . && uv run ruff format .`
- Type check: `uv run mypy .`
- Tests: `uv run pytest -q`
## Project structure
- Source in `src/<package>/`, tests in `tests/`, config in `pyproject.toml`.
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
## Python (scripts, agents, libraries)
- Target the Python version in `pyproject.toml`. Use modern syntax (`list[str]`, `X | None`).
- Type-hint all public functions.
- Use `pathlib` for paths, `logging` (not `print`) for diagnostics.
- Add dependencies with `uv add`; never pip install into the global interpreter.
- Keep functions small and pure where possible; isolate I/O at the edges.
- Catch specific exceptions only. Never use bare `except:`.
## LLM / agent SDKs (Python)
- Read API keys from env vars; never hardcode them or log them.
- Keep model names, temperatures and token limits in one settings module.
- Store prompts as versioned files or constants, not scattered f-strings.
- Use structured outputs / JSON schema (Pydantic models) when parsing model output; validate before acting on it.
- Set timeouts and retries with backoff on every API call; handle rate limits gracefully.
- Log token usage and cost per call so spend is visible.
- Agent tools must validate their arguments and must never run shell commands or SQL built from raw model output.
## pytest
- Tests live in `tests/` named `test_*.py`. Use plain `assert`.
- Share setup with fixtures in `conftest.py`; use `@pytest.mark.parametrize` for input tables.
- Mock external services (HTTP, LLM APIs, payment providers); tests must not hit the network.
- Every bug fix adds a regression test.
## Reference docs
- [uv docs](https://docs.astral.sh/uv/)
- [Ruff docs](https://docs.astral.sh/ruff/)
- [OpenAI Python SDK](https://github.com/openai/openai-python)
- [Anthropic Python SDK](https://github.com/anthropics/anthropic-sdk-python)
- [pytest docs](https://docs.pytest.org)
# Copilot instructions - this project
A Python (scripts, agents, libraries) + LLM / agent SDKs (Python) + pytest project.
Stack: Python (scripts, agents, libraries), LLM / agent SDKs (Python), pytest.
## Commands
- Install deps: `uv sync`
- Run: `uv run python -m <package>`
- Lint and format: `uv run ruff check . && uv run ruff format .`
- Type check: `uv run mypy .`
- Tests: `uv run pytest -q`
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
---
applyTo: "**/*.py"
---
# Python (scripts, agents, libraries)
- Target the Python version in `pyproject.toml`. Use modern syntax (`list[str]`, `X | None`).
- Type-hint all public functions.
- Use `pathlib` for paths, `logging` (not `print`) for diagnostics.
- Add dependencies with `uv add`; never pip install into the global interpreter.
- Keep functions small and pure where possible; isolate I/O at the edges.
- Catch specific exceptions only. Never use bare `except:`.
---
applyTo: "**/*agent*.py,**/llm/**/*.py,**/prompts/**"
---
# LLM / agent SDKs (Python)
- Read API keys from env vars; never hardcode them or log them.
- Keep model names, temperatures and token limits in one settings module.
- Store prompts as versioned files or constants, not scattered f-strings.
- Use structured outputs / JSON schema (Pydantic models) when parsing model output; validate before acting on it.
- Set timeouts and retries with backoff on every API call; handle rate limits gracefully.
- Log token usage and cost per call so spend is visible.
- Agent tools must validate their arguments and must never run shell commands or SQL built from raw model output.
---
applyTo: "tests/**/*.py,**/test_*.py"
---
# pytest
- Tests live in `tests/` named `test_*.py`. Use plain `assert`.
- Share setup with fixtures in `conftest.py`; use `@pytest.mark.parametrize` for input tables.
- Mock external services (HTTP, LLM APIs, payment providers); tests must not hit the network.
- Every bug fix adds a regression test.
---
trigger: always_on
---
# this project
A Python (scripts, agents, libraries) + LLM / agent SDKs (Python) + pytest project.
Stack: Python (scripts, agents, libraries), LLM / agent SDKs (Python), pytest.
## Commands
- Install deps: `uv sync`
- Run: `uv run python -m <package>`
- Lint and format: `uv run ruff check . && uv run ruff format .`
- Type check: `uv run mypy .`
- Tests: `uv run pytest -q`
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
---
trigger: glob
globs: **/*.py
---
# Python (scripts, agents, libraries)
- Target the Python version in `pyproject.toml`. Use modern syntax (`list[str]`, `X | None`).
- Type-hint all public functions.
- Use `pathlib` for paths, `logging` (not `print`) for diagnostics.
- Add dependencies with `uv add`; never pip install into the global interpreter.
- Keep functions small and pure where possible; isolate I/O at the edges.
- Catch specific exceptions only. Never use bare `except:`.
---
trigger: glob
globs: **/*agent*.py, **/llm/**/*.py, **/prompts/**
---
# LLM / agent SDKs (Python)
- Read API keys from env vars; never hardcode them or log them.
- Keep model names, temperatures and token limits in one settings module.
- Store prompts as versioned files or constants, not scattered f-strings.
- Use structured outputs / JSON schema (Pydantic models) when parsing model output; validate before acting on it.
- Set timeouts and retries with backoff on every API call; handle rate limits gracefully.
- Log token usage and cost per call so spend is visible.
- Agent tools must validate their arguments and must never run shell commands or SQL built from raw model output.
---
trigger: glob
globs: tests/**/*.py, **/test_*.py
---
# pytest
- Tests live in `tests/` named `test_*.py`. Use plain `assert`.
- Share setup with fixtures in `conftest.py`; use `@pytest.mark.parametrize` for input tables.
- Mock external services (HTTP, LLM APIs, payment providers); tests must not hit the network.
- Every bug fix adds a regression test.
# GEMINI.md - this project
Project context for Gemini CLI.
## Project
A Python (scripts, agents, libraries) + LLM / agent SDKs (Python) + pytest project.
Stack: Python (scripts, agents, libraries), LLM / agent SDKs (Python), pytest.
## Commands
- Install deps: `uv sync`
- Run: `uv run python -m <package>`
- Lint and format: `uv run ruff check . && uv run ruff format .`
- Type check: `uv run mypy .`
- Tests: `uv run pytest -q`
## Project structure
- Source in `src/<package>/`, tests in `tests/`, config in `pyproject.toml`.
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
## Python (scripts, agents, libraries)
- Target the Python version in `pyproject.toml`. Use modern syntax (`list[str]`, `X | None`).
- Type-hint all public functions.
- Use `pathlib` for paths, `logging` (not `print`) for diagnostics.
- Add dependencies with `uv add`; never pip install into the global interpreter.
- Keep functions small and pure where possible; isolate I/O at the edges.
- Catch specific exceptions only. Never use bare `except:`.
## LLM / agent SDKs (Python)
- Read API keys from env vars; never hardcode them or log them.
- Keep model names, temperatures and token limits in one settings module.
- Store prompts as versioned files or constants, not scattered f-strings.
- Use structured outputs / JSON schema (Pydantic models) when parsing model output; validate before acting on it.
- Set timeouts and retries with backoff on every API call; handle rate limits gracefully.
- Log token usage and cost per call so spend is visible.
- Agent tools must validate their arguments and must never run shell commands or SQL built from raw model output.
## pytest
- Tests live in `tests/` named `test_*.py`. Use plain `assert`.
- Share setup with fixtures in `conftest.py`; use `@pytest.mark.parametrize` for input tables.
- Mock external services (HTTP, LLM APIs, payment providers); tests must not hit the network.
- Every bug fix adds a regression test.
## Reference docs
- [uv docs](https://docs.astral.sh/uv/)
- [Ruff docs](https://docs.astral.sh/ruff/)
- [OpenAI Python SDK](https://github.com/openai/openai-python)
- [Anthropic Python SDK](https://github.com/anthropics/anthropic-sdk-python)
- [pytest docs](https://docs.pytest.org)
Commands your agent should run
| Task | Command |
|---|---|
| Install deps | uv sync |
| Run | uv run python -m <package> |
| Lint and format | uv run ruff check . && uv run ruff format . |
| Type check | uv run mypy . |
| Tests | uv run pytest -q |
What the rules cover
Python (scripts, agents, libraries)
Modern Python project managed with uv, ruff and pytest. Scoped to **/*.py in Cursor, Copilot and Windsurf.
- Target the Python version in
pyproject.toml. Use modern syntax (list[str],X | None). - Type-hint all public functions.
- Use
pathlibfor paths,logging(notprint) for diagnostics. - Add dependencies with
uv add; never pip install into the global interpreter. - Keep functions small and pure where possible; isolate I/O at the edges.
- Catch specific exceptions only. Never use bare
except:.
LLM / agent SDKs (Python)
LLM apps and agents using the OpenAI or Anthropic Python SDKs. Scoped to **/*agent*.py, **/llm/**/*.py, **/prompts/** in Cursor, Copilot and Windsurf.
- Read API keys from env vars; never hardcode them or log them.
- Keep model names, temperatures and token limits in one settings module.
- Store prompts as versioned files or constants, not scattered f-strings.
- Use structured outputs / JSON schema (Pydantic models) when parsing model output; validate before acting on it.
- Set timeouts and retries with backoff on every API call; handle rate limits gracefully.
- Log token usage and cost per call so spend is visible.
- Agent tools must validate their arguments and must never run shell commands or SQL built from raw model output.
Source docs: OpenAI Python SDK, Anthropic Python SDK
pytest
Python tests with pytest. Scoped to tests/**/*.py, **/test_*.py in Cursor, Copilot and Windsurf.
- Tests live in
tests/namedtest_*.py. Use plainassert. - Share setup with fixtures in
conftest.py; use@pytest.mark.parametrizefor input tables. - Mock external services (HTTP, LLM APIs, payment providers); tests must not hit the network.
- Every bug fix adds a regression test.
Source docs: pytest docs
How to install
- Copy
AGENTS.mdto your repo root. That covers Codex, Cursor, GitHub Copilot and most other agents. - Using Claude Code? Add a
CLAUDE.mdwith the single line@AGENTS.md, or use the standalone CLAUDE.md tab above. - Want rules that only load for certain files in Cursor? Add the
.cursor/rules/*.mdcfiles. - Commit the files so your whole team (and every agent) shares them.
FAQ
Where do I put the AGENTS.md for Python (scripts, agents, libraries) + LLM / agent SDKs (Python) + pytest?
Save it as AGENTS.md in the root of your repository, next to your main config file. Codex, Cursor and GitHub Copilot pick it up automatically. For Claude Code, add a CLAUDE.md containing @AGENTS.md (or use the standalone CLAUDE.md on this page).
What is the most common mistake AI agents make with Python (scripts, agents, libraries)?
Prompts and model names get scattered across files, and tests hit real paid APIs.
Which commands should the agent run to check its work?
For this stack: uv sync, uv run python -m <package>, uv run ruff check . && uv run ruff format ., uv run mypy .. They are listed in the generated files so the agent runs them before finishing a task.
Do these Python (scripts, agents, libraries) + LLM / agent SDKs (Python) + pytest rules work with Cursor and Claude Code?
Yes. This page includes the same rules as AGENTS.md, CLAUDE.md, Cursor .mdc project rules, a legacy .cursorrules file, GitHub Copilot instructions, Windsurf rules and GEMINI.md.
Can I customise these rules?
Yes. Open this stack in the generator to add or remove libraries, set your project name and package manager, switch beginner explanations on, and download everything as a zip.
Related stacks
Python + FastAPI + LLM / agent SDKs (Python) + pytest
An AI agent backend: FastAPI serving LLM calls and tools.
Python + FastAPI + SQLAlchemy 2 + Alembic + pytest + Docker
A production-style Python API: FastAPI, SQLAlchemy 2 and Alembic, tested with pytest.
Python + FastAPI + Supabase + pytest
A FastAPI service on Supabase Postgres and auth.
Python + Django + pytest + Docker
A Django app tested with pytest.
Python + Django + Tailwind CSS v4 + pytest
Server-rendered Django with Tailwind styling.
Next.js (App Router) + Tailwind CSS v4 + shadcn/ui + Supabase + Zod validation
The default vibe-coding SaaS stack: Next.js App Router, Supabase for auth and Postgres, Tailwind and shadcn/ui for the interface.