Skip to main content

Harness-neutral phase-loop orchestration runtime and CLI

Project description

phase-loop-runtime

The harness-neutral phase-loop orchestration runtime and CLI. It drives the roadmap → plan → execute workflow by dispatching each phase to whatever harness you choose (Claude / Codex / Gemini / OpenCode); the runtime itself makes no model calls. Part of the public agent-harness monorepo (Apache-2.0).

Install

Most users should use the repo's installer (it also installs the workflow skills):

git clone https://github.com/ViperJuice/agent-harness
agent-harness/install-agent-harness.sh --harness claude

To install just this runtime package directly (e.g. as a pinned dependency):

# isolated tool install:
uv tool install "git+https://github.com/ViperJuice/agent-harness@v0.1.5#subdirectory=phase-loop-runtime"
# …or into the current environment:
pip install "git+https://github.com/ViperJuice/agent-harness@v0.1.5#subdirectory=phase-loop-runtime"

This exposes two console scripts — phase-loop and codex-phase-loop — both calling phase_loop_runtime.cli:main. The canonical protocol document ships in the wheel as package data and is also installed to share/phase-loop-runtime/protocol/protocol.md.

Roadmap validation

Lint a phase-plan roadmap spec (required headings, unique aliases, acyclic dependency DAG, IF-gate reconciliation, lane-count hints) via the always-installed runtime:

phase-loop validate-roadmap specs/phase-plans-v1.md
# module form — only when phase_loop_runtime is on the ACTIVE python's path (a pip
# install into your env); under `uv tool install` isolation use the console command:
python3 -m phase_loop_runtime.roadmap_lint specs/phase-plans-v1.md

Both wrap phase_loop_runtime.roadmap_lint (the single source of truth). Exit 0 = clean; non-zero prints each issue on stderr.

Workflow skills bundle

The runtime also installs the harness-neutral workflow-skills bundle. The skill sources live in the sibling phase-loop-skills/ directory, with unprefixed base directories and optional _overrides/<harness>/ overlays.

phase-loop install --harness codex --source <path-to>/phase-loop-skills --symlink --dry-run
phase-loop install --harness codex --source <path-to>/phase-loop-skills --symlink --apply

Path resolution is provided by phase_loop_runtime.skill_paths, which keeps handoffs repo-local, preserves harness-specific reflection roots, and documents the default install roots for Claude, Codex, Gemini, and OpenCode.

Closeout ownership gate & operator break-glass

When a phase verifies green but the executor touched files outside the plan's declared owned-files globs, the graduated closeout gate classifies the beyond-ownership remainder (closeout_classifier.classify_unowned_path):

  • SAFE classes (docs, plans, handoffs, config_nonsource) auto-commit as a recorded soft exception.
  • UNSAFE classes (source, ci, secrets, lockfile) block with closeout_scope_violation.

The operator escape is phase-loop run --phase <P> --closeout-allow-unowned "<reason>" (also valid on resume/dry-run; reason required and non-empty; --phase required, bounding the override to a single phase). It folds the source/ci/lockfile remainder into the closeout commit as a recorded break_glass exception carrying the reason. secrets are never break-glassable — a .env*/*.pem/secrets/** path blocks regardless of the reason. See protocol.md → "Closeout Exceptions".

The closeout verdict is runner-authoritative: when the runner rejects a child's closeout, the persisted terminal-summary.json reflects the runner's blocking verdict (the child's self-reported complete/passed is not overlaid back), preventing a stale "complete" summary from reconcile-skipping the work on the next run.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

phase_loop_runtime-0.3.0.tar.gz (1.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

phase_loop_runtime-0.3.0-py3-none-any.whl (1.2 MB view details)

Uploaded Python 3

File details

Details for the file phase_loop_runtime-0.3.0.tar.gz.

File metadata

  • Download URL: phase_loop_runtime-0.3.0.tar.gz
  • Upload date:
  • Size: 1.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for phase_loop_runtime-0.3.0.tar.gz
Algorithm Hash digest
SHA256 5e867c7e557d87a4bf04cbf58821c944d0ab65288b65888f1631aa05d5b320b8
MD5 ca2e91ab3a134c545982fbadc82c739a
BLAKE2b-256 8f2dab347740699d9cd34fac313cfa95e6ad975284287bbce59bcdb181199597

See more details on using hashes here.

Provenance

The following attestation bundles were made for phase_loop_runtime-0.3.0.tar.gz:

Publisher: publish-pypi.yml on ViperJuice/agent-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file phase_loop_runtime-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for phase_loop_runtime-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4995d5f0d36acad0c1e2214a2f00432b096b3cddafd432ad8c076833a33f6258
MD5 b619c2eb76da16bb945b311bae7fb1e6
BLAKE2b-256 c0750acae96084f6c51a7a248428e0a4dc58e04ebd329b6825ab7bb4a6d1314d

See more details on using hashes here.

Provenance

The following attestation bundles were made for phase_loop_runtime-0.3.0-py3-none-any.whl:

Publisher: publish-pypi.yml on ViperJuice/agent-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page