Assurance

io.github.i-ops-hq由 GitHub 帳號 i-ops-hq 發布v0.5.10更新於 Oct 30, 2026

Checks what an agent did NOT read. Coverage over a retrieval step or a folder.

已驗證STDIO僅桌面開發者工具安全與監控

概覽

AI 產生的概覽

唯讀 MCP 工具,用來核查編碼代理實際做了什麼、漏了什麼——測試執行、編輯、涵蓋範圍與變更影響,且限定在指定根目錄內。

可以做什麼
  • 稽核 Claude Code 或 Codex 工作階段,或代理自己的執行紀錄,列出已完成、被略過和無法核實的內容
  • 檢查最後一次編輯後是否跑過測試或檢查,以及變更是否涵蓋了應有的文件或期間
  • 依 git 歷史報告哪些檔案通常一起變動,以及一次改動透過程式碼圖影響到什麼
  • 查看安裝會執行什麼、MCP 伺服器是否在核准後改動了工具描述,以及一次執行的預算花在哪裡
  • 判斷某項任務是否可以替提問者推進,以及提問者是否對其變更觸及的每個歸屬方都有權限
適用情境
當你希望對 AI 編碼代理「全部完成」的說法做一次獨立、可自行核算的核查,或想讓助理在專案內以唯讀工具形式使用這些檢查時適用。也適合在提交、推送或部署前以證據作為門檻的團隊。
執行需求
以本機程序在使用者機器上執行(僅桌面端),來自 PyPI 套件 assurance-mcp,透過 stdio 通訊。未宣告任何驗證、環境變數或標頭。它會讀取其根目錄範圍內的本機工作階段紀錄、git 歷史與專案檔案。
安裝前請注意
工具被描述為唯讀並限定在根目錄內,但會讀取本機代理工作階段紀錄、git 歷史與專案檔案,請把根目錄指向你確實要暴露的專案。報告屬於提示性質:結束碼與等級只是標出需要查看之處,工具也聲明不判斷修正是否正確。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Assurance,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

assurance

Your AI agent says it's done. Assurance tells you what it didn't check.

[PyPI] [Python] [tests] [License]

Quick start · Co-change · Use cases · Commands · After every turn · Workflow · Feedback


Coding agents finish with "All done — tests pass." Assurance reads what actually happened and tells you, in plain sentences, what was done, what was skipped, and what it could not verify.

Quick start

Run this in any project where you've used Claude Code or Codex:

bash
uvx assurance audit                        # with uv: runs it without installing anythingpip install assurance && assurance audit   # without uv

It reads the newest session either agent left for this folder — nothing to configure, and no flag saying which one you used. Used neither yet? uvx assurance audit --demo shows the report on a bundled sample session.

Don't have uvx? It comes with uv. One line to install it:
wherecommand
macOS (Homebrew)brew install uv
macOS / Linuxcurl -LsSf https://astral.sh/uv/install.sh | sh
Windowspowershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Windows (WinGet)winget install --id=astral-sh.uv -e
anywhere with Pythonpipx install uv or pip install uv

Open a new terminal afterwards so uvx is on your PATH. Or skip uv entirely and use pip install assurance, which gives you the same assurance command.

Here is the real output on a sample session in this repo. The agent was asked to fix a rounding bug in invoice.py "and make sure pytest -q tests/test_invoice.py passes", and ended with "All done — the totals are correct now."

$ assurance audit examples/audit/sample-session.jsonlClaude Code session demo-8f2 — 13 min in /home/you/my-app10 tool calls, 3 failed — Bash 6, Edit 2, Grep 1, Read 1
  Looped: 3 rounds of Bash `pytest -q tests/test_invoice.py` failing the same way, with nothing new read  After the last edit (14:09): no test or check it recognises; 2 unclassified commands ran after it (make lint-fix, python script)  Against the last prompt (14:00, "The invoice totals are off by a cent for EUR. Fix it in inv…"):    invoice.py: changed at 14:04 (src/billing/invoice.py).    pytest -q tests/test_invoice.py: did not run after the last edit to src/billing/rates.py (14:09); it last failed at 14:08, before that.    Only what the last prompt names is checked here; whether the work does what it asks is not.  Not classified: 2 shell commands (make lint-fix, python script), so whether they read, wrote or tested anything is unknown.  Also in the transcript: 1 assistant turn, 1 user turn, 1 bookkeeping record.  Not read: 0 lines.

What "All done" left out:

  • ❌ The tests failed three times in a row, the same way each time.
  • ❔ No test it recognises ran after the last edit. Two commands did, and it can't vouch for them either way, so it names them. Silence is not a pass.
  • ❔ The test the prompt asked for last ran before the last edit, and failed. The file it named was changed. Whether the fix is right is not something it claims to know, and it says so.

What usually changes with what you just changed

The other half of an unfinished change is the file you forgot. assurance coupling reads your git history — no graph, no configuration, no model — and names what travels with the files you touched and that you have not touched this time.

bash
uvx assurance coupling    # in any git repository

Run in this repository with nothing changed, it falls back to the repository as a whole, and the first thing it says is about its own release process:

  plugins/assurance/.claude-plugin/plugin.json    plugins/assurance/scripts/assurance.sh         34 of its 35 commits    4.8x chance    packages/assurance/pyproject.toml              34 of its 35 commits    4.4x chance    packages/assurance/README.md                   35 of its 35 commits    4.0x chance    packages/assurance/CHANGELOG.md                34 of its 35 commits    4.1x chance

The release version lives in those files and they move as one set. Twice in one day the author of this paragraph moved some of them and not the others, and a test caught it both times. The tool had already said so, from history, before either mistake.

Every report ends with the git log command that checks its own first line, so you never have to take its word for it.

Use cases

Where Assurance sits in the work you already do. Each page is short: what goes wrong, where it sits, the lines that set it up.

Your workWhat it checks for you
Payments and fintechThe tests your money code depends on ran after the last edit, and passed, before anything ships
Banking and regulated changeA record per session of what changed and what was tested, and whether the asker is cleared for every owner the change reaches
Healthcare and life sciencesProtected paths an agent changed without being asked; what an install will run, before it runs
Legal, insurance and documentsWhether a research agent read every document the question needs; missing periods in a folder of reports
Platform, DevOps and SREPushes, deploys and migrations over untested code; what a change reaches; limits a session cannot raise
Teams building their own agentsYour agent's "done" and its gate's "allow", held against what then happened, from a run record or OTel traces
prompt ─▶ agent edits ─▶ note ─▶ tests ─▶ suggested review ─▶ push / deploy ─▶ stop and check ─▶ CI gate

Commands

One install, one assurance command.

CommandWhat it answers
assurance auditWhat did the Claude Code or Codex session in this folder, or your own agent's run or trace, do, and what did it skip?
assurance hookRun that audit after every Claude Code turn, or stop running it: install, remove, status.
assurance noticesAfter each thing the hook said, did the next turn run the test, fix the failure or put the file back? Read from this machine's transcripts; nothing is sent.
assurance serveA local endpoint any agent sends its traces or runs to, and any workflow asks for a run's audit.
assurance couplingWhat usually changes with what you just changed, from git history — and which of those you have not touched. No graph, no configuration.
assurance reachWhat does a change to this file reach, by a code graph such as Graphify's, and how far behind the code is that graph?
assurance clearanceIs the person who asked cleared for every owner their change reaches?
assurance diffDid the work cover everything it should have? For example, retrieved docs vs. required docs.
assurance pinDid an MCP server quietly change a tool's description after you approved it?
assurance depsWhat will pip install or npm install run on your machine? Read without running it.
assurance budgetWhere did an agent run's budget go, and where did it loop?
assurance authorityMay this task go ahead for the person who asked, without borrowing someone else's access?
assurance checkIs a folder of dated reports complete, and which periods are missing?

Every command works as a CI gate as it is:

Exit codeMeaning
0Checked, found nothing
1Something to look at, including something it couldn't check
2Couldn't run

Run it after every turn, if you want that

Everything above is something you run. This is the same audit as a Stop hook, running itself each time Claude finishes a turn, which some people want and some people do not.

Worth knowing before you turn it on: keeping an agent working until a condition holds is something Claude Code ships on its own, with /goal. What that condition is judged against is the difference. /goal's own documentation says its evaluator "doesn't run commands or read files independently" and "can only judge what Claude has already surfaced in the conversation" — so an agent that says the tests passed can satisfy it by saying so. This reads the session's tool records and computes whether a test actually ran after the last edit, from the exit status that was recorded. Neither is better at everything; they answer different questions, and only one of them is unimpressed by a confident sentence.

It speaks only when there is something to say, at one of three levels, named first:

LevelWhenWho is asked
noteCode changed this turn and nothing has tested it yetYou, once, with the command to run. Claude is not asked anything
suggested reviewA test failed after the last edit, a protected path changed, or Claude says the tests pass with nothing behind itYou, and Claude: fix it or say why not
stop and checkUntested code was pushed, merged, published, deployed, migrated or committed on mainYou, and Claude: verify it before anything builds on it
assurance · note: no test or check has passed since the last edit to src/billing/invoice.py (14:04). Run pytest -q tests/test_invoice.py before you commit or push.assurance · suggested review: the last test run after the last edit to src/billing/invoice.py (14:04) failed: pytest -q tests/test_invoice.py (tests/test_invoice.py::test_eur_rounding; 1 failed, 11 passed in 0.33s).assurance · stop and check: pushed at 14:06 with no passing test or check after the last edit to src/billing/invoice.py (14:04).
bash
uvx assurance@latest hook install   # shows the change to ~/.claude/settings.json, asks, then writes ituvx assurance hook remove           # takes it out again; nothing else changes

It knows the test commands of Maven, Gradle, Bazel, Django, Rails, jest, vitest, go, cargo and more, reads your package.json, Makefile and justfile scripts to learn yours, and never counts a run of zero tests as a pass. What it recognises.

Or as a Claude Code plugin: claude plugin marketplace add i-ops-hq/assurance, then claude plugin install assurance@i-ops-hq. It never blocks or fails a session. Everything about pinning, sharing it with a team, Windows and what the plugin runs: the hook guide.

Where it sits in your workflow

mermaid
flowchart LR    s0(["Prompt"])    s1["AI agent<br/>edits code"]    s2["Agent runs<br/>the tests"]    A["🛡️ Assurance<br/>checks what<br/>really happened"]    s4(["Commit, push,<br/>deploy"])    s0 --> s1 --> s2 --> A --> s4    style A stroke:#dc2626,stroke-width:3px

The red box is Assurance. Everything else is your workflow as it is today: after each turn, Assurance reads what the agent actually did, tells you when something needs a look, and says nothing otherwise. The same check can gate CI.

One fix, step by step:

mermaid
flowchart LR    s0(["Fix the EUR<br/>rounding"]) --> s1["Edits<br/>invoice.py"] --> A1["🛡️ note<br/>run pytest first"] --> s2["pytest:<br/>1 failed"] --> A2["🛡️ suggested review<br/>fix it"] --> s3["pytest:<br/>12 passed"] --> s4(["Push"])    style A1 stroke:#dc2626,stroke-width:3px    style A2 stroke:#dc2626,stroke-width:3px

Guides

  • Run it after every session: the levels in full, pinning, team setup, the plugin, Windows
  • Your project's rules: declare your own tests, what must pass, what must not be touched, and limits the agent can't raise
  • Your own agent: run records, OpenTelemetry traces, and a local endpoint
  • More checks: retrieval coverage, MCP pinning, installs, what a change reaches, MCP tools

What it won't do

  • Guess. If it can't establish a number, it says so instead of making one up.
  • Call a model or the network. Every result is arithmetic you can check yourself.
  • Claim more than it saw. audit reads Claude Code transcripts, Codex rollouts, and the run records your own agent writes. A record shape it does not know is counted as unread, never guessed into a tool call — the report prints that count. Other agents' own logs are next: tell us which one you use.

Tell us where it's wrong

It's early, and the most useful thing you can do is run it on real work.

If it's useful to you, a ⭐ helps other people find it.

Packages

pip install assurance gives you all the commands. Each part also installs on its own.

PackageWhat it is
assurance-cliThe assurance command: diff, check, pin, drift, init
assurance-budgetaudit for coding-agent sessions, budget for run logs
assurance-depsReads what an install will run, without running it
assurance-authorityWhether a task may go ahead for the person who asked
assurance-reachWhat a change reaches, by a code graph, and how far behind the code that graph is
assurance-mcpThe checks as read-only MCP tools, limited to --root
assurance-coreThe pure decision library underneath. No I/O, no model, no dependencies

Part of I-Ops. Keep your models, agents and orchestration, and put an independent check around them.

Apache-2.0 · Security · Contributing · Releases

來源:README.md,提交 5d294d1

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

11
  1. v0.5.10最新Oct 29, 2026
  2. v0.5.8Oct 21, 2026
  3. v0.5.7Oct 10, 2026
  4. v0.5.6Oct 6, 2026
  5. v0.5.5Oct 2, 2026
  6. v0.5.3Sep 29, 2026
  7. v0.5.2Sep 26, 2026
  8. v0.5.1Sep 25, 2026
  9. v0.5.0Sep 24, 2026
  10. v0.4.8Sep 20, 2026
  11. v0.4.7Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分