Do Again
Do Again gives AI coding agents a policy-controlled way to execute work on a local development machine, return auditable receipts and artifacts, and keep iterating when another pass is needed.
How it works
agent
|
| request
v
operator-control branch
|
v
Do Again -> policy validation -> local command / file / test / git action
^ |
| |
+----------- receipt / artifact -----------+
The agent can inspect the result, decide what still needs work, and submit another scoped action instead of stopping at the first attempt.
Install
Python / PyPI
pip install do-again
Node / npm
npm install -g do-again
or run it without a global install:
npx do-again doctor
Both distributions expose the same command:
do-again
The npm package ships the same Python runtime from this repository behind a small Node launcher. It requires Node.js 18+ and Python 3.11+.
Quick start
do-again doctor
do-again init
do-again status
Why Do Again
- Explicit policy-based command permissions
- GitHub-backed request and receipt transport
- Project-scoped filesystem and command access
- Deterministic audit trail and recovery
- No agent API keys embedded in the project
- A shared platform interface for macOS, Linux, and Windows
- CI-tested on Python 3.11, 3.12, and 3.13 across all three platforms
Platform status
| Platform | Status | Service backend |
|---|---|---|
| macOS | Core working | launchd |
| Linux | Adapter scaffolded | systemd user service |
| Windows | Adapter scaffolded | Windows service |
Do Again is currently alpha software. macOS is the first active service platform while Linux and Windows service integration are being completed behind the same interface.
Development
git clone https://github.com/Tran-Steven/do-again.git
cd do-again
python -m pip install .
python -m unittest discover -s tests -v
do-again doctor
Release model
Releases use semantic versioning. Pushing a version tag such as v0.1.1 validates the shared release version, publishes the Python distribution to PyPI and the Node launcher to npm through Trusted Publishing, and creates the matching GitHub Release.
PyPI distribution name: do-again
npm package name: do-again
CLI command: do-again
Python package: do_again
Security
Do Again is designed around explicit allowlists, scoped filesystem roots, bounded execution, and auditable request/receipt records. It should not be configured as unrestricted shell access.
License
MIT
Metadata
Release files for do-again 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| do_again-0.1.1.tar.gz | 28.2 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| do_again-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 51.8 kB
Release files / do_again-0.1.1.tar.gz
| Download URL | do_again-0.1.1.tar.gz |
|---|---|
| Size | 28.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2c34a97044a509bd13cb9d3303c8055fad6f8831a8d29727f5e85796cdf87579
|
|
BLAKE2b-256 checksum How to use checksums |
fc5f0f4c50f2cedfe0955cba47405d20cb8292348aaf27f4ce3e1dc71dd3aae6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Oct 7, 2026.
Transparency logRelease files / do_again-0.1.1-py3-none-any.whl
| Download URL | do_again-0.1.1-py3-none-any.whl |
|---|---|
| Size | 23.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8f59dfd2521006728e4339e520818e505e5e35c53efcc61bc340c41040a7eefa
|
|
BLAKE2b-256 checksum How to use checksums |
50a481d875171b8ae04fef388efe9bd3c98dc6b00b6e42bec63cf2a45c834506
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Oct 7, 2026.
Transparency logSecurity for do-again 0.1.1
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for do_again-0.1.1.tar.gz
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 Oct 7, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.