This release is a pre-release and may not be stable for production use.
assent — plan with AI, run unattended, approve as a human
Assent turns an agreed AI plan into isolated, repeatable work. You can use any
AI or other process for the planning conversation; Assent takes over once that
conversation has produced an Assent-format plan. Let assent run execute and
verify the work, run the declared runtime test when required, then make the
human acceptance decision.
The source remains ordinary Git. Assent keeps its plans and runtime evidence in
the project's ignored .assent/ directory.
Human workflow
The ordinary human-facing path is deliberately small:
| Stage | What happens | Main command |
|---|---|---|
| Initialize | Install shared contracts/settings and create the fail-closed verifier plus a pending main runtime decision. | assent init |
| Plan | Discuss requirements with any AI you choose. The planning AI creates .assent/<PLAN>/ and must run assent check until it passes before ending the meeting. |
AI-owned assent check |
| Run | Let Assent implement, test, repair, and verify the plan within finite limits. | assent run |
| Runtime test | Resolve or run the current main runtime decision, or run an explicit plan decision; after_plan runs during run. |
assent test [PLAN] |
| Accept | Make the human publication decision using matching evidence. | assent accept <PLAN> |
| Archive | Retire the finished plan. Archive performs the same safe cleanup as clean before compressing the plan record. |
assent archive <PLAN> |
You normally do not need to run assent check yourself; it is primarily the
planning contract's validation gate. You also do not need a separate
assent clean before archive.
DONE means the execution AI believes a task is finished. A passing receipt
means the reconstructed result passed complete verification. Neither is human
approval. assent accept records that approval by publishing the verified
result into the current target branch; it does not push anything to GitHub.
Install
Assent requires Python 3.11+, Git, and an installed and authenticated supported AI CLI for unattended execution, such as Claude or Codex. Planning itself is not tied to that choice: use whichever AI or workflow you want to reach the requirements consensus. Assent uses only the Python standard library.
python -m pip install assent
To uninstall:
python -m pip uninstall assent
Uninstalling removes the package and CLI only. It does not delete
~/.assent, project .assent/ directories, worktrees, archives, or Git
branches. Cleanup remains an explicit choice.
Quick start
Run assent init once from the root of an existing Git project:
assent init
Then hold the planning meeting with the AI of your choice. Assent does not start or choose that planning AI. After you explicitly agree on the requirements, the AI creates the Assent plan and validates it before ending the meeting. For example:
Help me plan this change. Read AGENTS.md, ~/.assent/instructions.md and
~/.assent/format.md. Do not create plan files until I explicitly agree.
Turn the consensus above into an Assent-format plan under `.assent/<PLAN>/`.
Configure its verification and runtime decisions, and run
assent check until it passes before ending this meeting.
Once the meeting is finished, the normal human path is:
assent run my-plan
assent test my-plan
assent accept my-plan
assent archive my-plan
Replace my-plan with the plan directory name created under .assent/.
assent test my-plan is needed when the plan declares execution = "explicit".
If it declares after_plan, runtime testing already runs inside assent run;
if it declares disabled, there is no runtime gate.
assent archive my-plan first performs the same mechanical safe-cleanup proof
and source worktree/branch removal as assent clean, then compresses and retires
the live plan record. A separate clean is only useful when you want that
cleanup without archiving the plan yet.
For whole-project scheduling, omit the plan names:
assent run
assent run --jobs 2
assent report, status, verify, rework, reject, reconcile, clean,
and ignored-inputs remain available for inspection, manual verification,
recovery, and advanced workflows. They are not extra steps in the ordinary
happy path.
assent init installs shared settings and three AI contracts under
~/.assent/. It also creates .assent/_runtime_test.toml with
execution = "pending"; no command is guessed during initialization. Its
.assent/verify.py starts fail-closed. Before finishing the first live plan,
the planning AI configures its complete project-test block, chooses that plan's
_runtime_test.toml, and runs assent check until it passes. The shared
settings already contain the runtime-test repair workflow.
What happens during run
At a high level, assent run lets configured AI roles work on the selected
plans, uses mechanical checks between repair attempts, verifies the reconstructed
result, and stops for human review rather than accepting anything automatically.
The configured [workflow] has a preflight repair layer, three core layers,
and an independent runtime-test workflow:
preflightruns the complete read-only check and starts its AI repairer only when that action fails;taskworks on one task and usesfocused_testas its mechanical gate;planruns afocused_sweepover the completed plan and reviews cumulative behavior only after all tasks are done or skipped; andintegrationreconstructs the exact selected result and runsfull_verify.
A passing action completes its layer immediately. A failure may open the next
configured repair role, whose work is checked by the following action. The
default repair roles combine review and repair in one session; custom workflows
may keep those abilities in separate roles. The arrays are the complete repair
budget: Assent never invents extra rounds.
Explicit assent check remains read-only; only assent run enters the
configured preflight repair workflow.
If automation cannot decide safely, it preserves all work and reports REVIEW UNRESOLVED, HUMAN DECISION for human review.
A failed task action stays in the task layer and advances through the remaining configured steps. Plan review has a different job: checking whether the cumulative implementation matches the agreed plan.
assent test [PLAN] is an independent runtime-test workflow. With PLAN, it
uses that live plan's _runtime_test.toml command or ordered command array in
the plan candidate. Without PLAN, it reads the main contract at
.assent/_runtime_test.toml and works directly in the current primary tree.
On the first run, pending means the command has not been decided: the action
does not start, a configured writable role inspects the implemented project and
proposes explicit plus a command, and the scheduler validates and installs
that proposal before the next action runs it. A plan using
execution = "after_plan" runs this workflow after its plan layer and before
integration full_verify; accept never runs runtime testing. An array stops
at its first failed command; repair evidence names that command, and the next
runtime action restarts the array from the beginning.
Integration keeps the exact selected plans. Typed Git conflict evidence names
the conflicting plan and paths, so a configured integration role may repair it
in the scheduler-provided reconcile or source worktree before full_verify
rebuilds the candidate. A multi-plan verifier failure without mechanical source
attribution remains a human decision. Assent never drops a plan, accepts a
passing prefix, or calls accept.
Documentation
- Workflow: planning, unattended execution, runtime testing, acceptance, and archive.
- Commands: the normal human path, command roles, and selection rules.
- Configuration: initialization, adapters, models, and workflow settings.
- Verification: focused/full checks, receipts, conflicts, and ignored inputs.
- Operations: worktrees, recovery, cleanup, and archive.
English documentation is canonical. Matching Traditional Chinese guides are
provided for readers. The installed AI contracts are deliberately separate
from these human guides: instructions.md gives session rules, format.md
defines plan files, and workflow.md defines scheduler and acceptance behavior.
Safety boundaries
- Assent preserves failed and interrupted work instead of reverting it.
- AI roles cannot change task contracts, scheduler state, Git state, receipts, or acceptance state.
- Complete verification uses a temporary integration candidate and changes no target ref.
- Cleanup never traverses a junction or directory symlink target.
- A worktree isolates and records changes; it is not a security sandbox.
rejectis destructive and asks for confirmation; usereworkwhen code should remain in place.- Verification never implies acceptance. The final decision remains human.
Metadata
Release files for assent 0.1.0a12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| assent-0.1.0a12.tar.gz | 493.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| assent-0.1.0a12-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 816.1 kB
Release files / assent-0.1.0a12.tar.gz
| Download URL | assent-0.1.0a12.tar.gz |
|---|---|
| Size | 493.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ad4aa5accaae27aeef5c05c783783a1c546244dd81b9792644cb43c7ae224b1b
|
|
BLAKE2b-256 checksum How to use checksums |
9318f5efd2d6ba8d2b91294591cd4609fbb711f0dcff5f1bffe61078a759e94e
|
| 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 Sep 16, 2026.
Transparency logRelease files / assent-0.1.0a12-py3-none-any.whl
| Download URL | assent-0.1.0a12-py3-none-any.whl |
|---|---|
| Size | 322.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5289222c41c7b7bc3d4f41e921a6f07ec0676b5798104f444d44488f85a60f01
|
|
BLAKE2b-256 checksum How to use checksums |
33dac502072f2246373413b60321873b528ebda834d28828496783fb7d8fe4c7
|
| 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 Sep 16, 2026.
Transparency log