The review covers the agent execution boundary: the line between
what a model asks for and what the system actually does. Every
review follows the same written method and fills the same report
template, so you can read what you are buying before you book.
The review works from what you have released. It never needs your
credentials, and nothing is tested that the written scope does not
name.
In scope
The released package, at an exact version
The public repository, at a full commit hash
Public website and documentation
Local and containerised environments we stand up and control
Out of scope
Hosted or shared client infrastructure
Private repositories
Any account, credential or tenant of yours or your customers
Non-public endpoints
Third-party systems the product integrates with
Conduct
Non-destructive and isolated. No load or availability testing.
We supply our own API keys for any third-party model or service. Your credentials are never requested, held or used.
No client production data. Test data is synthetic.
Testing does not knowingly breach the terms of service of any third party the product calls.
serious-finding protocol
If we judge a finding serious, that line of testing stops and we
write to your named contact directly, out of band, the same day.
It is not held back for the report.
02 the passes
Six passes, in a fixed order.
pass 00
Intake and pin
We pin the artifact set and check it ourselves. The commit has to resolve and the named branch has to point at it. The package tarball is downloaded and hashed locally against the registry's published digest. Anything we cannot resolve stays in the report, next to your explanation of it. Conflicts of interest are declared in writing before testing starts.
pass 01
Surface enumeration
One row per tool the agent can call, with its arguments, the authority it runs under, the gate in front of it, what it can reach, and whether the call is logged. A cell nobody can fill is recorded as unknown, and unknown is a finding. If the surface is too large to enumerate in full, the report says so before the table starts, with the sampling rule and the full count.
pass 02
Static read
The authorization path and the logging call sites are read before anything live is touched. The authorization and audit-trail checklists are worked on paper first.
pass 03
Adversarial testing
Hands-on testing of reach and prompt-boundary integrity, against an isolated environment only. Every result gets a reproduction script, negative results included.
pass 04
Audit-trail challenge
We take one ordinary action the system performed, ideally one you choose, and try to reconstruct it end to end from the log alone. Then we look for our own adversarial testing in the same log. If it is not there, the report says so plainly.
pass 05
The report
If an earlier pass runs long, it takes time from the next pass. It never takes time from the report.
Fig. 1 · the agent execution boundarywhat the review looks at
03 what we test
27 checks across four checklists.
Each checklist is shown with the closest categories from the OWASP
Top 10 for LLM Applications (2025). The mapping is ours, included so
your reviewer can place each check against a framework they already
use.
checklist A · 7 checks
Tool-call authorization
Whether callable tools are allowlisted, or everything registered is callable
Authorization per tool, per argument, or absent
Tools the operator did not intend for the task or session
Confirmation gates, and bypass by batching, chaining or a wrapping tool
Whose authority the call runs under, and confused-deputy service accounts
Cross-tenant reach from one session to another
The deny path, and what a refusal teaches the next attempt
LLM06 Excessive Agency
checklist B · 8 checks
Unintended reach
Filesystem traversal, absolute paths, symlinks and the log's own path
SSRF to loopback, cloud metadata and private ranges, including after redirects
Shell involvement and unquoted arguments
Bind addresses that turn a local tool into a network service
Authentication on HTTP, SSE and WebSocket transports
Egress through a permitted tool
Secrets and key material readable through any exposed tool
Unbounded invocation of costly or destructive tools
LLM06 Excessive AgencyLLM02 Sensitive Information DisclosureLLM10 Unbounded Consumption
checklist C · 5 checks
Prompt-boundary integrity
Indirect prompt injection through fetched pages, files, rows, tickets and email
Provenance or trust labels on content entering the context
Tool output steering the next tool call
User-supplied strings reaching the system prompt or a tool description
Multi-agent trust, and whether two agents reading one poisoned source are counted as two
LLM01 Prompt Injection
checklist D · 7 checks
Audit trail
Every tool call logged, or sampled
Arguments and results recorded, not only the tool name
The record written before or after the side effect
Whether the agent can write to, edit or suppress its own log
A correlation id from request to downstream effect
Tamper evidence: append-only, hash-chained, or shipped out
Retention, and whether a named action on a named date can be answered
no direct OWASP category
The multi-agent trust check follows
Provenance Is Not Independence:
two agents reading the same poisoned source are one source, not two.
04 how findings are graded
Two axes on every finding.
axis 1
Severity
CVSS 3.1, with the full vector printed so your reviewer can
recompute the score. Every score is labelled as our own assessment.
We check the attack vector before we write the number.
axis 2
Evidence grade
How much we actually showed. A finding with a high score and an
inferred grade is reported as exactly that.
Evidence grades for findings
Reproduced
We ran it and it did the thing. The script and the output are in the report.
Observed
We saw the behaviour but did not build a clean reproduction.
Inferred from code
The code path permits it. It was not executed.
Theoretical
A class of issue that applies to this design, with no evidence in this codebase.
Clean results are graded too.
An absence is never printed as a bare pass or a checkmark. Every
clean line carries its grade and a statement of what was checked,
in the same sentence, so it cannot be quoted back later as
"you said it was fine."
Grades for clean results
Exercised, property held
The isolated target was run and the tested behaviour did not occur. States what was run and what input was sent.
Searched, not found
Code or documentation was read and the property was not in what was read. States exactly what was read.
Not exercisable from the released artifact
The released surface offers no path to test it. States every command and flag examined, and that this is a limit of the artifact, not a result about what lies behind it.
When your public claims are in scope
Each public claim about the product is written down as a testable
statement and given one verdict.
DemonstratedDescribed onlyContradictedNot establishable from the public surface
05 the report
Written for two readers.
The founder who commissioned it, and the enterprise security
reviewer who is holding up the deal. The executive summary and the
findings are for the first. The scope, the independence statement,
the clean results and the questionnaire mapping are for the second.
appendix b
Every finding and every clean result, mapped to the questions
enterprise security questionnaires ask. The deployment
configuration each answer assumes is stated above the table, so
your team can answer from it directly.
You may share the report with your own customers and prospects.
Appendix C can be withheld at your discretion, and the report is
written to stand without it.