{"slug": "i-built-agentcheck-because-the-coding-agent-said-done-wasnt-enough", "title": "I Built AgentCheck Because “The Coding Agent Said Done” Wasn’t Enough", "summary": "A developer built AgentCheck, a deterministic tool that verifies coding agents' changes by comparing the Git repository state before and after the agent runs, without relying on an LLM for analysis. The tool creates a checkpoint using a temporary Git index, then reports changes, findings, risk score, and a verdict to guide human review before committing.", "body_md": "AI coding agents are getting surprisingly good at writing code.\n\nI use them regularly, and they can handle increasingly large tasks: refactoring code, adding features, updating dependencies, modifying configuration, creating migrations, and touching files across an entire repository.\n\nBut I kept running into the same problem after the agent finished:\n\nHow do I independently verify what it actually changed?\n\nThe agent usually gives me a perfectly reasonable summary.\n\nSomething like:\n\nDone.\n\nImplemented the requested changes, updated the tests, and cleaned up the affected code.\n\nUseful?\n\nAbsolutely.\n\nEnough for me to commit without checking?\n\nNot really.\n\nSo I built **AgentCheck**.\n\nAfter a coding agent finishes a task, I still find myself manually checking things like:\n\nOf course, Git already gives us the raw information.\n\nI can run:\n\n```\ngit status\ngit diff\ngit diff --stat\n```\n\nThen inspect individual files.\n\nAnd I still do that.\n\nBut once coding agents become part of your normal workflow, repeating the same verification process after every task starts to feel like something that should be structured.\n\nThat was the idea behind AgentCheck.\n\nAgentCheck creates a trusted checkpoint **before** your coding agent starts working.\n\nThen, after the agent finishes, it compares the current Git-visible repository state with that checkpoint.\n\nThe basic workflow is deliberately small:\n\n```\nagentcheck start\n```\n\nThen let your coding agent work.\n\nThat can be:\n\nWhen the work is finished:\n\n```\nagentcheck\n```\n\nAgentCheck then produces four sections:\n\n```\nChanges\nFindings\nRisk\nVerdict\n```\n\nFor example:\n\n```\nAgentCheck\n\nChanges\n────────────────────────────\n2 modified\n1 created\n0 deleted\n0 renamed\n\nA  packages/example/new-file.ts\nM  package.json\nM  src/example.ts\n\nFindings\n────────────────────────────\n⚠ Dependency change detected.\n\nRisk\n────────────────────────────\nScore: 3 — MEDIUM\n\nVerdict\n────────────────────────────\nREVIEW RECOMMENDED\n```\n\nThe important part is that this result comes from the repository state itself — not from the coding agent's explanation of what it believes it changed.\n\nThis was one of the main design decisions.\n\nThere are already many AI code-review tools, and some of them are very capable.\n\nBut that wasn't the problem I wanted AgentCheck to solve.\n\nIf one LLM changes my repository, I didn't necessarily want the verification layer to be:\n\n```\nLLM changes code\n      ↓\nanother LLM reviews the first LLM\n```\n\nI wanted a smaller and more predictable layer:\n\n```\nCoding agent\n      ↓\nActual Git-visible changes\n      ↓\nDeterministic checks\n      ↓\nHuman review\n      ↓\nCommit\n```\n\nSo AgentCheck does **not** use an LLM for its analysis.\n\nThe checks are deterministic.\n\nGiven the same repository state, AgentCheck should produce the same result.\n\nThe first public version intentionally keeps the scope limited.\n\nAgentCheck can currently highlight things such as:\n\nThese signals feed into a transparent risk score and a restrained verdict.\n\nFor example:\n\n```\n0–2   → LOW\n3–6   → MEDIUM\n7+    → HIGH\n```\n\nThe goal is not to say:\n\nThis code is correct.\n\nAgentCheck cannot know that.\n\nThe goal is closer to:\n\nThese are the parts of this change set that probably deserve your attention before you commit.\n\nOne technical requirement was particularly important to me:\n\n**AgentCheck should not modify the developer's actual Git index, working tree, or history.**\n\nThe checkpoint implementation uses Git's tree/index model with a temporary alternate index.\n\nConceptually:\n\n```\nCurrent repository state\n        ↓\ntemporary Git index\n        ↓\ngit write-tree\n        ↓\ncheckpoint tree\n```\n\nLater, AgentCheck creates another representation of the current state and compares:\n\n```\ncheckpoint tree\n        ↓\n       diff\n        ↑\ncurrent tree\n```\n\nThis means the developer can already have:\n\nwhen the checkpoint is created.\n\nThose pre-existing changes become part of the baseline rather than being incorrectly attributed to the coding agent.\n\nThe real Git index remains untouched.\n\nAgentCheck currently has:\n\nThe verification happens locally.\n\nThat also keeps the workflow simple:\n\n```\nnpm install -g @agentcheck/cli\n\nagentcheck start\n\n# coding agent works\n\nagentcheck\n```\n\nThere is also a VS Code extension if you prefer reviewing the result inside the editor.\n\nI developed AgentCheck primarily using **Codex**, but I intentionally avoided coupling AgentCheck to any specific coding-agent product.\n\nIt doesn't need to understand the agent session.\n\nIt doesn't need an agent plugin.\n\nIt doesn't need the agent to tell AgentCheck when it is finished.\n\nAgentCheck only cares about the resulting repository changes.\n\nSo the same workflow can sit after:\n\n```\nClaude Code\nCodex\nCursor\nanother coding agent\n```\n\nThat separation is important to me.\n\nCoding agents will change.\n\nThe Git repository remains the source of truth.\n\nAgentCheck is currently available as both a CLI and a VS Code extension.\n\nInstall:\n\n```\nnpm install -g @agentcheck/cli\n```\n\nThen:\n\n```\nagentcheck start\n```\n\nand later:\n\n```\nagentcheck\n```\n\nThe extension exposes the same review model inside VS Code:\n\n```\nCHANGES\nFINDINGS\nRISK\nVERDICT\n```\n\nThe VS Code extension is intentionally a thin UI over the same deterministic core rather than a separate analysis engine.\n\nAgentCheck is open source under the **Apache License 2.0**.\n\nGitHub:\n\n[https://github.com/emreordu/agentcheck](https://github.com/emreordu/agentcheck)\n\nnpm CLI:\n\n[https://www.npmjs.com/package/@agentcheck/cli](https://www.npmjs.com/package/@agentcheck/cli)\n\nnpm Core:\n\n[https://www.npmjs.com/package/@agentcheck/core](https://www.npmjs.com/package/@agentcheck/core)\n\nVS Code Marketplace:\n\n[https://marketplace.visualstudio.com/items?itemName=agentcheck.agentcheck-vscode](https://marketplace.visualstudio.com/items?itemName=agentcheck.agentcheck-vscode)\n\nThe first release was mainly about proving the checkpoint and deterministic verification model.\n\nFor the next version, I'm currently exploring things such as:\n\nOne thing I'm deliberately trying to avoid is turning AgentCheck into a giant AI code-review platform.\n\nI want the core idea to remain simple:\n\nIndependent verification of what actually changed.\n\nAgentCheck is still early.\n\nThe most useful feedback for me right now isn't:\n\nAdd more features.\n\nIt's things like:\n\nIf you use Claude Code, Codex, Cursor, or another coding agent in real repositories, I'd love to hear how this approach fits into your workflow.\n\nTry it.\n\nBreak it.\n\nTell me what it gets wrong.\n\n**Don’t trust “done”. Verify the result.**", "url": "https://wpnews.pro/news/i-built-agentcheck-because-the-coding-agent-said-done-wasnt-enough", "canonical_source": "https://dev.to/emre_ordu/i-built-agentcheck-because-the-coding-agent-said-done-wasnt-enough-2c1p", "published_at": "2026-08-23 21:08:42+00:00", "updated_at": "2026-08-23 21:43:29.252925+00:00", "lang": "en", "topics": ["developer-tools", "ai-agents"], "entities": ["AgentCheck"], "alternates": {"html": "https://wpnews.pro/news/i-built-agentcheck-because-the-coding-agent-said-done-wasnt-enough", "markdown": "https://wpnews.pro/news/i-built-agentcheck-because-the-coding-agent-said-done-wasnt-enough.md", "text": "https://wpnews.pro/news/i-built-agentcheck-because-the-coding-agent-said-done-wasnt-enough.txt", "jsonld": "https://wpnews.pro/news/i-built-agentcheck-because-the-coding-agent-said-done-wasnt-enough.jsonld"}}