This release is a pre-release and may not be stable for production use.
PromptCadence
A plan-approved, tier-routed agent loop over LoadCoach in which every step is proposed in a plan, the plan is approved against governance policy and remaining budget before any step executes, and every turn that does execute is fully reconstructable afterwards — which model ran it, on which tier, on what data, at what cost, under whose approval.
Status: Phase 3 (LoadCoach client, bypass loop, events and recovery), unreleased. A
bypassed trajectory executes end to end: promptcadence run "…" --bypass-planning --follow
queues it, the worker claims it under a lease, mints its ExecutionIntent, runs each turn through
LoadCoach's /generate, records the turn with its provenance and every deviation, streams the
events over SSE, and survives a kill -9 mid-turn with no duplicated turn and no orphaned
LoadCoach job. Planning, tools, budget enforcement and egress policy arrive in the phases that
follow; a planned trajectory is claimed and failed with that cause rather than queued forever. See
the development plan for what each phase adds.
Part of the Local AI Suite. Reaches a model only through LoadCoach's HTTP API — it never imports a model provider directly (ADR-0045 in the suite's shared documentation).
Install
pip install promptcadence
promptcadence serve
Starts on 127.0.0.1:8768 with zero configuration. Health reports the loadcoach component
degraded (not unavailable) when no LoadCoach is reachable — PromptCadence requires LoadCoach for
execution, never for startup. See
docs/apps/promptcadence/spec.md §12 for the full configuration
surface and PROMPTCADENCE_* environment variables.
Quickstart
pip install promptcadence
promptcadence serve # starts the API on 127.0.0.1:8768
promptcadence health --json # same health data the API reports, from the CLI
promptcadence run "summarize the files in ./notes" --bypass-planning --follow
promptcadence trajectory list
promptcadence --help
A note on LoadCoach versions: PromptCadence never reads an undeclared finish as success (spec
§11 contract 6), and it reads the provider's declared reason from output.finish_reason, which
LoadCoach renders since its commit 846348b. Against an older LoadCoach (1.0.0,
01170a7), which recorded the reason but rendered it nowhere, a free-text tier halts on its
first turn with that cause on the row, and only a tier whose task profile validates a JSON
Schema completes.
Documentation
| Read this | For |
|---|---|
| docs/apps/promptcadence/spec.md | Purpose, scope, non-goals, public contracts, configuration, acceptance criteria |
| docs/apps/promptcadence/lifecycle.md | The trajectory state machine, deviation categories and estimator |
| docs/apps/promptcadence/development-plan.md | The phased build plan: goals, work, tests, acceptance criteria per phase |
Development
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pre-commit install
pytest -m "not live and not performance"
See SECURITY.md for how to report a vulnerability.
License
Apache-2.0 — see LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file promptcadence-0.9.0b0.tar.gz.
File metadata
- Download URL: promptcadence-0.9.0b0.tar.gz
- Upload date:
- Size: 530.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb2ca5776db8f739f03cd31b0052b07c3b0bb19ee8c6df5e32cfcd2ead796ce1
|
|
| MD5 |
f4be15b06471b07029aa5c36a9a6ba38
|
|
| BLAKE2b-256 |
d694a458011257a63b4ea23483aad4adbadbefda5a87c33de25df0fcf56b8f46
|
Provenance
The following attestation bundles were made for promptcadence-0.9.0b0.tar.gz:
Publisher:
release.yml on JPKell/PromptCadence
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
promptcadence-0.9.0b0.tar.gz -
Subject digest:
cb2ca5776db8f739f03cd31b0052b07c3b0bb19ee8c6df5e32cfcd2ead796ce1 - Sigstore transparency entry: 2720221896
- Sigstore integration time:
-
Permalink:
JPKell/PromptCadence@952af183ec3d533d3be913133a744d0a3c01558c -
Branch / Tag:
refs/tags/v0.9.0b0 - Owner: https://github.com/JPKell
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@952af183ec3d533d3be913133a744d0a3c01558c -
Trigger Event:
push
-
Statement type:
File details
Details for the file promptcadence-0.9.0b0-py3-none-any.whl.
File metadata
- Download URL: promptcadence-0.9.0b0-py3-none-any.whl
- Upload date:
- Size: 335.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2bd5a99e4a1dba2693a9123449d42233ad285e356733a0bc372858dd2a775b58
|
|
| MD5 |
f8e515637b067427250164f5219fda6b
|
|
| BLAKE2b-256 |
a4786b1ed884615a03b43375d5420adb5a76bbba3c32a9a1a3e0222443ddaf84
|
Provenance
The following attestation bundles were made for promptcadence-0.9.0b0-py3-none-any.whl:
Publisher:
release.yml on JPKell/PromptCadence
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
promptcadence-0.9.0b0-py3-none-any.whl -
Subject digest:
2bd5a99e4a1dba2693a9123449d42233ad285e356733a0bc372858dd2a775b58 - Sigstore transparency entry: 2720222535
- Sigstore integration time:
-
Permalink:
JPKell/PromptCadence@952af183ec3d533d3be913133a744d0a3c01558c -
Branch / Tag:
refs/tags/v0.9.0b0 - Owner: https://github.com/JPKell
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@952af183ec3d533d3be913133a744d0a3c01558c -
Trigger Event:
push
-
Statement type: