"Don't speak I know just what you're sayin' So please stop explainin' Don't tell me 'cause it hurts Don't speak I know what you're thinkin' I don't need your reasons Don't tell me 'cause it hurts" — No Doubt
Why: autonomous LLM agents assert claims they never grounded — hallucinated facts compound silently across a session. dont forces epistemic discipline: claims must be flagged, grounded, and concluded before the agent may act on them, enforced as a hard gate in its own and other tools' CI. Status: beta · check/define/flag/conclude shipped · Motivation & design · charly-vibes Tool Ecosystem
dontis a Rust CLI for forcing epistemic discipline in autonomous LLM workflows.
It gives agents an explicit state machine for claims and terms so ungrounded assertions do not quietly become accepted project truth.
- records claims with
dont conclude - records project vocabulary with
dont define - registers doubt with
dont trust - verifies with evidence via
dont flag - supports lifecycle and inspection commands like
ground,show,list,why,trace,lock, andprime
Prompting a model to “be more careful” is weaker than forcing it through an external workflow.
dont makes that workflow explicit: claims, evidence, status transitions, refusals, and remediation all become machine-checkable.
This repository contains both:
- a working Rust implementation
- OpenSpec source-of-truth specs in
openspec/ - user-facing docs in
docs/src/ - workflow context in
.wai/
V=$(basename "$(curl -fsSLI -o /dev/null -w '%{url_effective}' \
https://github.com/charly-vibes/dont/releases/latest)" | sed 's/^v//')
TGT="$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/^x86_64$/amd64/; s/^aarch64$/arm64/')"
curl -fsSL "https://github.com/charly-vibes/dont/releases/download/v${V}/dont_${V}_${TGT}.tar.gz" | tar xz
chmod +x dont && sudo mv dont /usr/local/bin/cargo install dont-cliInstalls the dont and dt binaries.
brew tap charly-vibes/charly
brew install dontscoop bucket add charly https://github.com/charly-vibes/scoop-charly.git
scoop install dontgit clone https://github.com/charly-vibes/dont.git
cd dont
cargo build --releasedont primeCommon local commands:
just test
just lint
just ci- Book intro:
docs/src/introduction.md - Tutorial:
docs/src/tutorial.md - Purpose:
docs/src/purpose.md - Grounding workflow:
docs/src/grounding-workflow.md - OpenSpec project context:
openspec/project.md - Contributing guide:
CONTRIBUTING.md
dont survives in a project only when wired into a failing gate. Without one,
usage decays to zero — nothing breaks when claims go ungrounded, so the habit
dies.
pre-push:
parallel: true
commands:
check-claims:
run: dont check
skip: merge- name: Check grounded claims
run: dont checkNo jq or python required — dont check exits 1 when any claim is unverified or doubted, 0 otherwise.
All the code in this repository was generated by a large language model. This is not a confession, nor an apology. It's a fact, like the one that says water boils at a hundred degrees at sea level: neutral, technical, and with consequences one discovers later.
What the human did is what tends to happen before and after things come into existence: thinking. Reviewing requirements, arguing about edge cases, understanding what needs to be built and why, deciding how the system should behave when reality —which is capricious and does not read documentation— confronts it with situations nobody anticipated. The hours of planning, of design, of reading specifications until exhaustion dissolves the boundary between understanding and hallucination.
The LLM writes. The human knows what it should say.
There is a distinction, even if looking at the commit history makes it hard to find. The distinction is that a machine can produce correct code without understanding anything, the same way a calculator can solve an integral without knowing what time is. Understanding what that integral is for, whether it actually solves the problem, whether the problem was the right problem to begin with — that remains human territory. For now.
Rendered docs are generated artifacts; the repository sources are authoritative — edit the repo sources, not the rendered output.