Capability Honesty
Capability honesty is making an AI report the lowest proven state instead of the highest hoped-for one: it advertises an ability only after a probe has exercised it and passed, and it calls work "done" only when a verifiable artifact backs the claim. An AI that says "I haven't proven I can do that yet" is worth more than one that always says yes.
Distilled from two mechanisms in a production system — a boot-conformance check that probes each ability before advertising it, and a completion gate built the day a trial agent marked a task "done" with nothing on disk. Published with its own attack suite: every test hands the system an overclaim and passes only when the ability is withheld or the completion is downgraded.
The two failures it stops
"It claims abilities it doesn't have." Registering a capability does
not make it real. Here, a capability is unproven until its probe runs and
passes — and a probe that crashes is never read as a pass.
from capability_honesty import CapabilityRegistry
caps = CapabilityRegistry()
caps.register("send_email", probe=lambda: smtp_connect_and_noop())
caps.require("send_email") # ok: False — unproven, refused rather than assumed
caps.prove_all() # run the probes
caps.require("send_email") # ok: True — only now, and only if the probe passed
caps.status()["advertised"] # lists proven abilities only; the rest are 'withheld'
"It says done when it isn't." A completion claim is a claim, not a
fact. settle downgrades it to a proposal unless evidence or an artifact
backs it.
from capability_honesty import settle, is_done
settle("wrote the report")
# state: 'proposal' — no artifact, no verifying evidence
settle("wrote the report", evidence=lambda: Path("out/report.md").exists())
# state: 'done' — only because the check passed
settle("wrote the report", evidence=lambda: False) # 'proposal'
settle("shipped it", artifact="out/report.md") # 'done' — artifact present
A model can be talked into saying "done" on a bad day. The gate cannot.
The honest part
done and claimed done are different states, and this library keeps them
different mechanically. A crashing probe or a raising evidence-check is
treated as no proof — never optimistically as a pass. The system reports
what it proved, never what it hopes.
Install
pip install capability-honesty
Zero dependencies.
Fits with
Part of The Operator's Honesty Stack — open-source honesty engines from the same production system, composed, never merged:
- trust-skeleton: a "done" that is really a proposal belongs in INFERRED, not OBSERVED.
- evidence-binding-compiler: the artifact that settles a completion is the evidence EBC would bind.
- memory-integrity: a proven completion is an observation; a claimed one is an interpretation.
License
Apache 2.0. Copyright 2026 Dave DePew Enterprises, Inc.
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 capability_honesty-0.1.0.tar.gz.
File metadata
- Download URL: capability_honesty-0.1.0.tar.gz
- Upload date:
- Size: 56.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48cab166e8095d912c14d072bcf1f5aae19e4102798e82cfc43c26d93f5e5250
|
|
| MD5 |
2afda7fd8d2797fabdd292f8c20aeaca
|
|
| BLAKE2b-256 |
61063fff8c31eaabab401a36c8265c333cb265d31018949b3b6b434338f30b25
|
File details
Details for the file capability_honesty-0.1.0-py3-none-any.whl.
File metadata
- Download URL: capability_honesty-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d8d17a72901be9d3740e67691882d39fbc145fd6a54c4d173a4272e7fd9a805
|
|
| MD5 |
2717b95f6b67b15c4c0877969bcc365f
|
|
| BLAKE2b-256 |
bc06eb483ea04c43658d8739b9be247460bda0fed9305d0a6464389425bb9c1a
|