Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Before accepting an agent's 'done / shipped / fixed' claim, verify it against ground truth (git ancestry + the commit's own diff) using the DOS kernel's `dos verify` and `dos commit-audit` — never the agent's own narration.
.claude/skills/sickn33-dos-verify-done-claims/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 84% | 39 |
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | -17% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 27% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 102% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 30% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 115% | 0% |
When an AI agent says "done", "shipped", or "fixed", that is a claim, not a fact — and a claim the agent checks by re-reading its own work is consistency, not grounding. This skill replaces that self-report with a verdict from a witness the agent did not author: it shells the DOS kernel (dos verify, dos commit-audit) to confirm the claimed effect from git ancestry and the commit's actual diff. DOS is deterministic — no API key, no LLM. The verdict is git-only and offline as used here; the one exception is dos verify in a workspace that wires a CI oracle, which --no-ci suppresses (see Security & Safety Notes).
This skill adapts the DOS reference "witness-claim" pattern (anthony-chaudhary/dos-kernel) into a host-agnostic screenplay.
that "done" confirmed from evidence before building on it.
(catch a fix: that only touched a README, or a "tests pass" that deleted the assertions).
of trusting the return string.
suite is for. This skill checks did-the-claimed-thing-actually-ship.
bashpython3 -m venv .dos-venv . .dos-venv/bin/activate python -m pip install 'dos-kernel==<reviewed-version>' # provides the `dos` CLI
A commit subject is forgeable (whoever wrote the message authored it); the files it touched are not (git did). dos commit-audit grades the subject against the actual diff:
bashdos commit-audit --workspace . HEAD --json
commit-audit --json prints a JSON array of audited commits (one element even for a single HEAD), so read verdict from the first element — e.g. dos commit-audit --workspace . HEAD --json | jq -r '.[0].verdict'. (Without --json the same verdict prints as a one-line text row: · OK …, ⚑ UNWITNESSED …, or · abstain ….) The verdicts are: OK (the diff backs the claim's kind), CLAIM_UNWITNESSED (the subject's claim is not evidenced by the diff — treat the "done" as unproven), or ABSTAIN. This judges the kind of change, never correctness — run the tests for that.
If the agent claims a specific plan/phase landed, confirm it from git history rather than the transcript:
bashdos verify --workspace . PLAN PHASE --json --no-ci
--no-ci keeps the verdict git-only (see the Security note below). With --json you get the shipped and source fields. (The default text form prints SHIPPED PLAN PHASE (via grep) or NOT_SHIPPED PLAN PHASE (via none) — the same verdict, and the process exit code is non-zero when not shipped.)
Grade shipped: true by the source, because git fallback grades itself by forgeability — and forgeable evidence is exactly what this skill exists to distrust:
registry or grep-artifact — non-forgeable (a registry row, or anartefact/diff rung). This closes the claim.
grep-subject (or bare grep) — forgeable: a commit subject or bodycarried the phase token, which an agent can write without doing the work (even on an empty commit). Treat this as shipped-per-the-subject, not confirmed — corroborate it (run dos commit-audit on that commit, below) before you close.
none — no positive evidence; accept as "not shipped", not as a tool failure.Accept the agent's "done" only when Step 2/3 corroborate it. If CLAIM_UNWITNESSED or shipped: false, the work is not done regardless of how confidently the agent narrated it — send it back.
bash# The agent committed and said it's fixed. Check the diff backs the claim. # commit-audit --json returns an array, so read the first element's verdict: dos commit-audit --workspace . HEAD --json | jq -r '.[0].verdict' # OK -> the change is of the claimed kind; now run the tests # CLAIM_UNWITNESSED -> the commit doesn't do what it says; reject
bashdos verify --workspace . AUTH AUTH2 --json --no-ci # shipped: true, source: registry|grep-artifact -> non-forgeable; safe to close # shipped: true, source: grep-subject|grep -> forgeable subject/body match; # shipped-per-the-subject only -> corroborate with commit-audit before closing # shipped: false, source: none -> no evidence; keep the ticket open
dos commit-audit HEAD immediately after every agent commit.source: none / CLAIM_UNWITNESSED as "not done", not as a tool error.source (registry, grep-artifact).Treat grep-subject / bare grep as forgeable (an agent can write the subject text) — corroborate before closing.
dos verify reads git history; in a repo with no commits there is nothing to witness (it will honestly report source: none).dos CLI) are missing.dos-kernel into an isolatedvirtualenv and the read-only dos verbs (dos commit-audit, dos verify). These verbs never mutate the repo or push. dos commit-audit only reads git history and the working tree (no network). dos verify is also git-only unless the workspace has wired a CI oracle ([verify] non_git_oracle in its dos.toml), in which case it may shell a network check (e.g. gh api) for the verdict — pass --no-ci (as the examples above do) to force the git-only path and guarantee no network.
pip install dos-kernel installs from PyPI. The distribution name isdos-kernel (the bare dos on PyPI is an unrelated package — do not install it). Pin a reviewed version; do not install an unpinned latest release into a global Python environment.
--workspace . argumentscopes every verdict to that repo.
dos verify returns source: none and it looks like a failure.Solution: That is the honest "no evidence" verdict — it means the phase has no ship commit, so the claim is unproven. Re-stamp the real commit or keep the task open.
Solution: The PyPI name is dos-kernel, not dos.
dos-witness-claim, dos-goal-gate)in anthony-chaudhary/dos-kernel cover the multi-agent fan-out and self-stopping-agent variants of this same witness discipline.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 13,709 | 4,625 | -66% | 1 | 1 | 0% | 2,291 | 2,272 | -1% | 0 | 0 | — |
case-02 | fail→fail | 8,809 | 8,433 | -4% | 1 | 1 | 0% | 212 | 2,300 | +985% | 0 | 0 | — |
case-03 | fail→fail | 6,813 | 4,788 | -30% | 1 | 1 | 0% | 1,214 | 2,308 | +90% | 0 | 0 | — |
case-04 | fail→pass | 16,485 | 5,065 | -69% | 1 | 1 | 0% | 3,100 | 2,566 | -17% | 0 | 0 | — |
case-05 | fail→pass | 10,116 | 2,232 | -78% | 1 | 1 | 0% | 1,922 | 2,438 | +27% | 0 | 0 | — |
case-06 | fail→pass | 8,084 | 4,778 | -41% | 1 | 1 | 0% | 1,423 | 2,870 | +102% | 0 | 0 | — |
case-07 | pass→pass | 8,518 | 4,455 | -48% | 1 | 1 | 0% | 1,350 | 2,862 | +112% | 0 | 0 | — |
case-08 | fail→pass | 11,893 | 2,876 | -76% | 1 | 1 | 0% | 1,940 | 2,530 | +30% | 0 | 0 | — |
case-09 | fail→pass | 7,378 | 3,891 | -47% | 1 | 1 | 0% | 1,311 | 2,814 | +115% | 0 | 0 | — |
case-10 | pass→pass | 9,291 | 6,502 | -30% | 1 | 1 | 0% | 1,556 | 3,030 | +95% | 0 | 0 | — |
case-11 | pass→pass | 7,364 | 3,260 | -56% | 1 | 1 | 0% | 1,194 | 2,616 | +119% | 0 | 0 | — |
case-12 | fail→pass | 8,636 | 3,013 | -65% | 1 | 1 | 0% | 1,469 | 2,568 | +75% | 0 | 0 | — |
case-13 | pass→pass | 4,792 | 1,971 | -59% | 1 | 1 | 0% | 829 | 2,390 | +188% | 0 | 0 | — |
case-14 | pass→pass | 11,252 | 5,872 | -48% | 1 | 1 | 0% | 1,783 | 2,987 | +68% | 0 | 0 | — |
case-20 | fail→fail | 2,367 | 3,864 | +63% | 1 | 1 | 0% | 338 | 2,610 | +672% | 0 | 0 | — |
case-15 | fail→pass | 9,043 | 2,692 | -70% | 1 | 1 | 0% | 1,591 | 2,418 | +52% | 0 | 0 | — |
case-16 | fail→pass | 12,540 | 3,928 | -69% | 1 | 1 | 0% | 1,657 | 2,677 | +62% | 0 | 0 | — |
case-17 | fail→pass | 12,495 | 2,834 | -77% | 1 | 1 | 0% | 1,990 | 2,395 | +20% | 0 | 0 | — |
case-18 | fail→pass | 10,962 | 4,797 | -56% | 1 | 1 | 0% | 1,621 | 2,861 | +76% | 0 | 0 | — |
case-19 | pass→fail | 7,572 | 4,835 | -36% | 1 | 1 | 0% | 1,224 | 2,252 | +84% | 0 | 0 | — |
case-21 | pass→pass | 6,480 | 5,142 | -21% | 1 | 1 | 0% | 1,121 | 2,881 | +157% | 0 | 0 | — |
case-22 | fail→pass | 7,798 | 3,833 | -51% | 1 | 1 | 0% | 1,157 | 2,686 | +132% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +45 percentage points is the difference between those two pass rates over the 18 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.