Async Python MITM proxy with a self-signed CA — HTTP/1.1 & HTTP/2, pluggable middleware for inspecting and rewriting traffic in flight.
docker run -d --name mitm-proxy -p 127.0.0.1:8080:8080 ghcr.io/metalayerlab/mitm-proxy:latest
curl http://127.0.0.1:8080/healthzThe full walk-through is in the wiki's Quick Start.
Everything is in the wiki. Its source is docs/wiki/, in this
repository, reviewed with the code.
- Introduction: what it is and how it works
- In-Depth Configuration: every setting
- Deployment: docker, k8s, systemd
- Troubleshooting and FAQ
- Contributing and Release Process
Built with AI assistants; every change gets human review. AGENTS.md and .agents/stack.md are the only instruction files (stack, commands, rules, definition of done, docs map). Read them instead of this README.
| Assistant | Entry point |
|---|---|
| Claude Code | CLAUDE.md (imports both) + .claude/settings.json |
| Codex, Cursor, Copilot coding agent | AGENTS.md, natively (Copilot, Cursor pointers) |
| Gemini CLI | GEMINI.md (imports both) |
| Chat without repo access | docs/ai/prompts.md, "Context for a chat assistant" |
Humans: kick-off prompts are in docs/ai/prompts.md, and the review checklist in docs/ai/review-checklist.md.
uv sync # Python >= 3.13, dev tools included
uv run pytest # tests (80% coverage floor)
uv run ruff check && uv run mypy # lint and type checkNew project? Fill in .github/repository.toml (the description, homepage = the wiki, topics), then run
python3 scripts/repo-metadata.py to set GitHub's About box from it; CI warns when the two drift.
The workflow is: a branch, Conventional Commit PR titles, squash merge. Releases are automated by release-please. See Contributing.
This project was generated from template-base and template-python (and template-container for the image). Template fixes arrive as a weekly Template update PR per template.
Released into the public domain under the Unlicense.