Skip to main content

Do Again

CI PyPI npm Python License

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 install
do-again status

Service lifecycle

On macOS, Do Again can install a per-repository launchd agent:

do-again install
do-again status
do-again restart
do-again stop
do-again uninstall

For attended or cross-platform use, run the agent in the foreground:

do-again run
do-again run --once

Each repository gets an isolated runtime, control worktree, state directory, policy copy, and service label under ~/.do_again. The installed service runs from a copied runtime so installs made through either PyPI or npm remain stable after the invoking shell exits.

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 Service lifecycle working launchd
Linux Foreground runner working; service adapter scaffolded systemd user service
Windows Foreground runner working; service adapter scaffolded Windows service

Do Again is currently alpha software. The foreground runner works across the supported Python platforms; macOS is the first platform with an installable background service 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.2.0 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.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for do-again 0.2.0
File Size Uploaded Provenance
do_again-0.2.0.tar.gz 33.3 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for do-again 0.2.0
File Interpreter ABI Platform
do_again-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 62.5 kB

Release files / do_again-0.2.0.tar.gz

Download URL do_again-0.2.0.tar.gz
Size 33.3 kB
Tags Source
SHA-256 checksum
How to use checksums
f88bdb3ee313370566c5a22663aaaa916eabc7482487c17be8b1bd8802aecde1
BLAKE2b-256 checksum
How to use checksums
9682711caca2d77954558f2c2ed635492d63d5772b8e8d3dd9f3ca2f5a69b4cb
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 log

Release files / do_again-0.2.0-py3-none-any.whl

Download URL do_again-0.2.0-py3-none-any.whl
Size 29.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
260092a3418756ae399e5d74f5a176727f23c1c885b3e527aed781aba3bbdf5e
BLAKE2b-256 checksum
How to use checksums
6666f46cf966949e36bce7bb8ce2abfc33df1354856e73c67a32c99b14a85c62
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 log

Security for do-again 0.2.0

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.

Select from 2 files

Attestation for do_again-0.2.0.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 log

A 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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page