HyoDo
Local evidence verification for AI-assisted work. See what ran, what the evidence supports, and what remains unknown.
HyoDo is an open-source Python tool that runs on your computer. It reuses the
tests and linters your project already has, reports their results, and marks
missing evidence UNOBSERVED. That means there is not enough evidence to say
whether a check passed or failed. HyoDo helps people review work. HyoDo does
not run or authorize agents. It does not approve merges or deployments.
Why HyoDo exists
HyoDo helps you inspect AI-assisted work: which project checks ran, what they found, and what remains unknown. Its guiding idea, Hyo (孝), is that technology should respect people's time and choices, and carry its share of the burden instead of passing it back to them. HyoDo records evidence; people decide what to do with it.
AI coding tools can move quickly, but a normal green check does not always answer:
- Did the check actually run?
- Did the agent touch only approved tools and paths?
- Was missing or unreadable evidence treated as a pass?
HyoDo makes those boundaries explicit with local evidence, policy-evaluation results, and fail-closed verification status.
30-second start
pipx install hyodo
cd your-project
hyodo safe --strict
hyodo init
hyodo check
safe works immediately in any repository. init is optional: it detects
tools you already use and writes .hyodo/gates.toml; check then runs those
gates. No detected tooling means no invented green check. See
docs/GATES_SYNTAX.md for every gates.toml field.
Commit .hyodo/gates.toml and .hyodo/policy.toml (team-shared policy); keep
the rest of .hyodo/ out of version control — see
what to commit for the .gitignore split.
What it does
| Need | HyoDo surface |
|---|---|
| Early-warning safety scan | hyodo safe |
| Reuse existing project checks | hyodo init → hyodo check |
| Local agent evidence log | hyodo event record |
| Tool / path / step policy | hyodo policy check |
| Schema / eval / evidence report | hyodo schema, eval, report |
| Local evidence panel | hyodo dashboard --open |
| Optional MCP adapter | hyodo mcp stdio / serve |
Boundaries and current status
HyoDo provides local checks and evidence contracts; it does not grant execution
authority or turn missing evidence into a pass. hyodo safe is an early-warning
scan, not a full security audit, and callers must enforce DENY decisions. By
default, HyoDo stores evidence digests and receipts; raw prompt and tool bodies
are retained only when an operator explicitly opts into full-body storage. See the
product boundary, measured state snapshot,
and security model for the authoritative details.
The legacy HyoDo Integrity Score command is advisory only. It retains a
five-input geometric-mean method for compatibility.
HyoDo's replacement evaluation model is being updated; it does not define the
six reference values as one canonical score. The current package does not yet
provide a general per-axis evaluator. Current source status may differ from
the latest published package.
Use your existing CI
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install hyodo
- run: hyodo safe --strict --json
- uses: lofibrainwav/HyoDo/.github/actions/hyodo@vX.Y.Z
init detects existing test and lint tooling. Empty or malformed gate
configuration exits 2, not 0. See the gate configuration reference.
Hooks and SARIF
Pin a signed release containing the hooks (v4.11.0 predates them):
- repo: https://github.com/lofibrainwav/HyoDo
rev: vX.Y.Z
hooks: [{id: hyodo-check}, {id: hyodo-safe-strict}]
hyodo report --format sarif writes a SARIF 2.1.0 visibility report.
Measured DENY and unreadable-ledger conditions become alerts; hyodo check
remains the fail-closed gate for missing or unmeasured quality evidence.
Optional agent evidence
hyodo event validate --file step.json
hyodo event record --file step.json --root . --policy .hyodo/policy.toml
hyodo policy check --file step.json --config .hyodo/policy.toml
hyodo schema check --schema agent.schema.json --payload step.json --json
Default event storage is digest-only. See
examples/fde-evidence-spine/ for a demo
event and examples/host-policies/ for a
dual-host allowed_tools list (not a Cursor hook). Policy trust:
docs/POLICY_TRUST.md. For an unattended feature queue
that calls these gates from a host loop, see
examples/factory-loop/.
Optional MCP
pip install 'hyodo[mcp]' # pipx: pipx install --force 'hyodo[mcp]'
hyodo mcp stdio --root . # local stdio
hyodo mcp serve --bind tailscale --bind-ip 100.99.88.77 \
--token "$HYODO_MCP_TOKEN" --root . # private-network connector
The extra has to land in the same environment that runs hyodo; a pipx
install is isolated, so pip install 'hyodo[mcp]' after pipx install hyodo
installs into a different interpreter and the SDK stays missing.
The MCP adapter uses the same CLI contracts rather than a second engine. It is
not an MCP gateway, traffic proxy, or central authorization layer, and
mcp.hyodo.app is contract-only, not this path.
Install and support
Python 3.10+: pipx install hyodo or pip install -U hyodo.
- Docs index:
docs/README.md - Command contracts and first-run steps:
QUICK_START.md - Node.js:
docs/onboarding-nodejs.md - Security:
SECURITY.md; Issues: GitHub Issues - Contributing:
CONTRIBUTING.md; Changelog:CHANGELOG.md
License
MIT. See LICENSE.
Release files for hyodo 4.21.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hyodo-4.21.0.tar.gz | 349.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hyodo-4.21.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 694.6 kB
Release files / hyodo-4.21.0.tar.gz
| Download URL | hyodo-4.21.0.tar.gz |
|---|---|
| Size | 349.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
756b31ad8a4c6e5dd4f6fa39adc7aba0d4ab98bb90e6b61587e81f840e76253c
|
|
BLAKE2b-256 checksum How to use checksums |
9c52def3a7d354a44a00513be84affed16413bc2bb6b4994380e2ce2ff62fa79
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / hyodo-4.21.0-py3-none-any.whl
| Download URL | hyodo-4.21.0-py3-none-any.whl |
|---|---|
| Size | 344.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
02ab91213e83f533c95cd2d25630cd5511e9a0edf48d9d56df3a325cfa57553b
|
|
BLAKE2b-256 checksum How to use checksums |
d0de7194ebfd9146d2c2b88ed5bb99c13eaa79e44eff64c0c72d9b496199dd4b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency log