A deterministic, configurable control policy for agent workflows.
Project description
Agents that know when good enough is enough.
BOUND
Coding agents are good at continuing. They are less good at knowing when to stop.
BOUND adds a deterministic control layer between agent execution and the next decision.
Put BOUND in your agent
Install BOUND:
Open the integration prompt for your agent and paste it into the agent's instructions, skills, rules, or planning context.
Recommended setup flow:
1. Install bound-policy
2. Open the integration prompt for your agent
3. Paste it into the agent
4. Let the agent inspect its own workflow and available hooks
5. Let it wire BOUND into meaningful execution boundaries
6. Run a real task
For the initial setup, use your agent's strongest architecture / planning mode or a stronger model if available.
That first pass should focus on:
current goal
↓
plan and meaningful step boundaries
↓
what success means for each step
↓
what evidence can actually be observed
↓
where BOUND should evaluate
↓
how ACCEPT / RETRY / REPLAN / ROLLBACK affect control flow
Once that integration is in place, normal execution can use the resulting contracts, evidence, and BOUND decisions deterministically.
BOUND does not decide what code the agent should write.
It decides whether the result of the current step is good enough to move on.
What happens inside the agent?
BOUND belongs after a meaningful execution step and before the agent decides whether to keep optimizing the same objective.
result = workflow.evaluate_step(
contract=contract,
evidence=evidence,
criteria=criteria,
)
match result.decision:
case "ACCEPT":
continue_to_next_step()
case "RETRY":
retry_current_approach()
case "REPLAN":
choose_new_strategy()
case "ROLLBACK":
rollback()
The agent still owns:
- planning
- reasoning
- tool use
- code changes
- execution
BOUND owns the control decision.
What BOUND uses
BOUND can evaluate observable evidence such as:
- tests
- lint and type checks
- acceptance checks
- expected and unexpected files
- retries
- tool calls
- tokens
- runtime
- rollback availability
Next steps including more looking into semantic varibles.
Decisions
ACCEPT Good enough. Continue.
RETRY Make one focused correction.
REPLAN Choose a materially different strategy.
ROLLBACK Return to a safe state.
The goal is not to optimize forever.
The goal is to know when the current result is sufficient to continue.
Good enough is enough. Keep progressing.
Why BOUND?
A common agent loop looks like this:
task solved
↓
tests pass
↓
agent keeps refining
↓
more calls and changes
↓
possible regression
BOUND adds an explicit stopping policy:
task solved
↓
evidence collected
↓
BOUND evaluates
↓
ACCEPT
↓
continue
Learn how BOUND works
The scoring model, evidence mapping, thresholds, weights, and decision rules are documented separately:
Current status
BOUND is experimental.
The formula, heuristics, weights, and thresholds still need validation on real agent workloads.
The next milestone is dogfooding BOUND inside real coding agents and measuring whether it reduces unnecessary steps, calls, tokens, retries, and regressions without reducing task success.
License
MIT © Danny de Bree
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
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 bound_policy-0.4.0.tar.gz.
File metadata
- Download URL: bound_policy-0.4.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57064ef878b64ab528c7b516817c73cbd93cc14c443b9c1e9aa5c53bfa44a5d8
|
|
| MD5 |
7c72d509654bb3c75cf16d09ec030b6f
|
|
| BLAKE2b-256 |
dd3f130b8b51c6ed87da85c6a6ecea62cc22add1ed93ab32da3e7685cfb6b5c5
|
Provenance
The following attestation bundles were made for bound_policy-0.4.0.tar.gz:
Publisher:
publish.yml on Danny-de-bree/bound
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bound_policy-0.4.0.tar.gz -
Subject digest:
57064ef878b64ab528c7b516817c73cbd93cc14c443b9c1e9aa5c53bfa44a5d8 - Sigstore transparency entry: 2185794719
- Sigstore integration time:
-
Permalink:
Danny-de-bree/bound@a76fdfe7a3d6551401e8e38282e3adfe3500354f -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/Danny-de-bree
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a76fdfe7a3d6551401e8e38282e3adfe3500354f -
Trigger Event:
push
-
Statement type:
File details
Details for the file bound_policy-0.4.0-py3-none-any.whl.
File metadata
- Download URL: bound_policy-0.4.0-py3-none-any.whl
- Upload date:
- Size: 72.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d57cb66b7d602293769956711106e0076620daa72be573f306ded4d2fbe2cbd
|
|
| MD5 |
10895fd5556fc7fb1e226e8ebe4b4421
|
|
| BLAKE2b-256 |
c3cc3ea62524c5118225fb5c3588b0a7aa40aae6d711ba7b77a2c5467af55bf8
|
Provenance
The following attestation bundles were made for bound_policy-0.4.0-py3-none-any.whl:
Publisher:
publish.yml on Danny-de-bree/bound
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bound_policy-0.4.0-py3-none-any.whl -
Subject digest:
6d57cb66b7d602293769956711106e0076620daa72be573f306ded4d2fbe2cbd - Sigstore transparency entry: 2185794906
- Sigstore integration time:
-
Permalink:
Danny-de-bree/bound@a76fdfe7a3d6551401e8e38282e3adfe3500354f -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/Danny-de-bree
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a76fdfe7a3d6551401e8e38282e3adfe3500354f -
Trigger Event:
push
-
Statement type: