Dev tools

ToolReplay checks AI agent tool-call transcripts for cheating, redundant calls, and permission overreach

September 14, 2026 at 6:20 AM PT

GitHub social card for the Matthew0822/ToolReplay repository

Image: GitHub

Why it mattersA team running many agent sessions can now check whether the agents stayed inside their declared tools and whether the recorded transcripts were tampered with, before a wrong action reaches production.

ToolReplay is a Python command-line tool that reads recorded transcripts of an AI agent's tool calls and reports three kinds of trouble: non-determinism, where the same call returned different results in later runs, redundant calls, where the agent asked the same tool for the same thing more than once, and permission overreach, where the agent called a tool it was not allowed to call. The repository was created on 14 September and has picked up 170 stars in the hours since.

What it reads

The input is a JSON Lines file where each line records one tool call: an index, the tool name, the arguments and the recorded response. A separate JSON scope file lists which tools each agent is allowed to call. That is it, and there are no other dependencies: the README lists Python 3.11 or newer and the standard library.

Replay is deterministic on purpose. The tool never calls a live service. It reads the recorded response and checks it against the same call made earlier in the same transcript, so an audit run is reproducible, safe to run offline, and has no side effects.

Hash chain over the transcript

The audit also seals the transcript into a SHA-256 hash chain. Each record's digest folds in the previous digest along with the current record, so any later change to a single line changes every digest that follows it. The check catches an edited or reordered transcript rather than trusting the file as it stands.

Scope enforcement is strict and case-sensitive. If a scope allows fs.read and the agent called fs.write, the tool reports it as overreach and exits with a non-zero code.

What that costs to adopt

The output is deterministic and carries no timestamps, so two clean runs produce byte-identical reports that Git can diff. Three exit codes make it clean to wire into CI: 0 for clean, 1 for findings or a broken chain, 2 for a usage or parsing error. The dirty sample in the repository has 6 tool calls, the clean sample 4, and the 34-test suite runs in about 0.019 seconds.

For a team that already logs its agent runs, the cost is writing the transcript out in the format ToolReplay reads and keeping a scope file per agent. The value is that a review question that used to need someone to read a long log now returns a decision from a script, and the same script says whether the log was edited after the fact. The traction here is early, 170 stars on the day the repository was created, but the shape is a real tool that a working team can add to its pipeline this afternoon.

The licence is MIT and the code is on GitHub.

Source

Primary source: ToolReplay on GitHub.

Source: GitHub

This item was written by an AI system from the linked source. Reveneau is responsible for what it publishes.

More from AI News

Agent-memory hits 52.9% on LongMemEval-S, 17 points ahead of MemCore, with Claude Code and Codex sharing one store

Agent-memory is an open source long-term memory runtime whose store is plain Markdown, whose index is a rebuildable SQLite cache, and whose paired benchmark on LongMemEval-S puts it at 52.9% against MemCore's 35.8%.

Source: GitHubDev tools

A harness plugin measures the tool-call tax and puts one file read at 4.44 ms

ToolRush publishes before-and-after latency for four tool-call paths in the Hermes Agent harness, putting a native file read at 4.44 ms against 255.23 ms on the stock shell path.

Source: GitHubDev tools

Simon Willison releases commit-rewriter, a local web app to clean up coding agent commit messages before public release

Simon Willison released commit-rewriter 0.1, an Apache-licensed Python web app that lets a developer batch-edit Git commit messages locally before publishing, built to strip coding agent noise and private issue IDs from the Datasette security release history.

Source: PressDev tools