Skip to main content

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

capability_honesty-0.1.0.tar.gz (56.5 kB view details)

Uploaded Source

Built Distribution

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

capability_honesty-0.1.0-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

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

Hashes for capability_honesty-0.1.0.tar.gz
Algorithm Hash digest
SHA256 48cab166e8095d912c14d072bcf1f5aae19e4102798e82cfc43c26d93f5e5250
MD5 2afda7fd8d2797fabdd292f8c20aeaca
BLAKE2b-256 61063fff8c31eaabab401a36c8265c333cb265d31018949b3b6b434338f30b25

See more details on using hashes here.

File details

Details for the file capability_honesty-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for capability_honesty-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7d8d17a72901be9d3740e67691882d39fbc145fd6a54c4d173a4272e7fd9a805
MD5 2717b95f6b67b15c4c0877969bcc365f
BLAKE2b-256 bc06eb483ea04c43658d8739b9be247460bda0fed9305d0a6464389425bb9c1a

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Supported by

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