
Code changes every day, but the documents that say what it should do (specs, API contracts, READMEs, tests) rarely keep up. Linters check syntax and tests check what someone remembered to test. Nothing checks that a change still matches the intent, until it becomes an incident. Kairos is a CLI, a pre-push hook and a GitHub Action built on IBM Bob. `kairos check` takes the diff, selects the matching sections of the project's intent sources, and runs Bob Shell headless in a dedicated `kairos` custom mode. Bob reads the code it needs and returns a Drift Report: spec violations, stale docs, undocumented behaviour, missing tests, each with file:line evidence on both sides, a severity and a proposed resolution. Drift at or above the threshold blocks the push or fails the PR check, and the report is posted as a PR comment. Kairos does not assume the code is right. `kairos fix` asks which side is the truth: when the code is, Bob updates the docs and adds the missing tests (a docs-and-tests-only mode); when the spec is, Bob puts the code back in line (only with `--allow-code`). You confirm the diff, Kairos commits, logs the decision and re-checks. `kairos report --html` shows every drift moment on a timeline. Kairos is for development teams whose services are described by specs, API contracts and READMEs that several people and AI agents edit: backend developers see drift before they push, reviewers see it on the pull request, and tech leads get a history of every decision. Kairos treats drift between code and intent as a checkable, fixable event rather than a review-time hunch. Kairos also keeps the docs themselves alive. `kairos init` gives a project living docs (SPEC, PLAN, PROGRESS, DECISIONS, per-task files and a HANDOFF note) plus pointers that make Bob, Claude Code and Codex read the handoff first, so a new chat continues from "continue". Kairos itself was built this way. Measured on the demo with real IBM Bob: 3/3 seeded drifts caught, 0 false positives on a control commit, 20–35 s and 0.03–0.18 Bobcoins per check (0 for a cached rerun), each fix in 11–28 s, the whole loop from detection to a passing check in 5.5 minutes for 1.12 Bobcoins. The whole hackathon used 6.26 of 40 Bobcoins.
27 Sep 2026