Keep the why next to your code.
Comments narrate what the code already says, then drift until they lie. koment stores the reasoning outside the source, anchored to the exact lines it explains — and fails a check the moment it stops matching.
// retry 3 times because the API is flaky
for attempt := range 5 {
for attempt := range 5 {
gotcha retry.go:12 ok
Five attempts, not three: the upstream rate limiter
returns 429 for up to four seconds and the fourth
retry is the first that can succeed.
Edit the loop and the annotation reports drifted instead of quietly misleading the next reader.
Git is the record
Annotations are YAML in your repository. No database, no service to keep alive, no account. They review like code because they are.
Checked, not trusted
koment check exits non-zero when an
anchor no longer resolves. Stale reasoning fails CI instead of
misleading someone.
Humans and agents alike
A CLI, an MCP server, a language server and an editor extension all read the same records, so an agent and a person see the same thing.