Poe the Poet
A batteries included task runner that works well with poetry or uv.
Features
-
✅ Straight forward declaration of project tasks in your pyproject.toml (or poe_tasks.toml)
-
✅ Tasks are run in poetry or uv's virtualenv (or another env you specify)
-
✅ Shell completion of task names and arguments
-
✅ The poe CLI can be used standalone, or as a plugin for poetry
-
✅ Tasks can be commands, shell scripts, python expressions, or references to python functions
-
✅ Concise commands with extra arguments passed to the task
poe [options] task [task_args] -
✅ Easily declare named CLI arguments for your tasks
-
✅ Tasks can specify and reference environment variables, even without a shell
-
✅ Tasks are self documenting, with optional help messages and task grouping (just run
poewith no arguments) -
✅ Tasks can be composed to run in sequence, in parallel, or as a DAG.
-
✅ Works with
.envfiles -
✅ Can be used as a library to embed in other tools
-
✅ Tasks can be defined in python packages for ease of reuse across projects
-
✅ Also works fine as a general purpose task runner
-
✅ Ships with an official Agent Skill to help AI coding agents use poe effectively
Quick start
- Install the Poe the Poet globally via pipx or another method.
pipx install poethepoet
Or add it as a poetry project plugin:
[tool.poetry.requires-plugins]
poethepoet = ">=0.48"
- Define some tasks in your pyproject.toml
[tool.poe.tasks]
test = "pytest --cov=my_app" # a simple command task
serve.script = "my_app.service:run(debug=True)" # python script based task
tunnel.shell = "ssh -N -L 0.0.0.0:8080:$PROD:8080 $PROD &" # (posix) shell based task
# A more complete example with documentation and named arguments
[tool.poe.tasks.count-incomplete]
help = "Count incomplete tasks in DynamoDB"
cmd = """
aws dynamodb scan --table-name tasks
--select "COUNT"
--filter-expression "status >= :status"
--expression-attribute-values '{":status":{"S":"incomplete"}}'
--no-cli-pager
"""
args = [
# Allow $AWS_REGION to be overridden with a CLI option when calling the task
{name = "AWS_REGION", options = ["--region", "-r"], default = "${AWS_REGION}"}
]
- Run your tasks via the CLI
$ poe test -v tests/unit # extra CLI arguments are appended to the underlying command
Poe => pytest --cov=my_app
...
If you're using poetry or uv, then poe will automatically use CLI tools and libraries from your project's virtualenv without you having to run poetry run / uv run
Poe can also be used as a general purpose task runner.
Contributing
There's plenty to do, come say hi in the discussions or open an issue! 👋
Also check out the CONTRIBUTING guide 🤓
License
Metadata
Release files for poethepoet 0.48.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| poethepoet-0.48.0.tar.gz | 148.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| poethepoet-0.48.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 334.5 kB
Release files / poethepoet-0.48.0.tar.gz
| Download URL | poethepoet-0.48.0.tar.gz |
|---|---|
| Size | 148.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a06f49d244fadfc2e2e7faa78b54e64a9694727e4ce1d50e08f23cea3ded74f1
|
|
BLAKE2b-256 checksum How to use checksums |
5c9293a4af9511b8c7c647874521d9e6c904266be98067c2ee1eb2e74520d208
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.
Transparency logRelease files / poethepoet-0.48.0-py3-none-any.whl
| Download URL | poethepoet-0.48.0-py3-none-any.whl |
|---|---|
| Size | 185.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
98da6096d060f49b8d84034770265863fb7dc92a40233b7694b9d216ac68737d
|
|
BLAKE2b-256 checksum How to use checksums |
598dd7c9455b15f8d2d7ce57e7b71a8ef8d02d9992ae4283c9777120620c9022
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.
Transparency log