Red-team your AI. Pentest your apps. Confirm every finding.
Adaptive, multi-turn attacks on your agents. An AI-driven pentest across your applications. Every finding reproduced in a fresh session before you see it.
- Surfaces
- Browser → API → AI
- Proof
- Fresh-session replay → review → gate
- Environments
- Anything from development to production
- Access
- By waitlist
- /01Adaptive attacksMulti-turn attacks that adapt to every reply
- /02Whole-app campaignsBrowser, API and AI surfaces in one run
- /03Confirmed findingsReproduced in fresh sessions before you see them
- /04Full evidence trailEvery attempt and result, kept for review
- /05Release gate for CIA clear pass, findings or needs-review answer
A chatbot test checks what a model says. An agent can act. Given tools, retrieval, memory and approvals, it can change records on someone's behalf. The failures that matter show up in the backend, several turns into a conversation.
- /01
Tool routes
Legitimate tools, called under the wrong identity or without a real approval, can read or change another tenant's data.
- /02
Indirect channels
Instructions hidden in retrieved documents and tool outputs can redirect the task or send data where it should not go.
- /03
Persistent state
Changes to memory, policy, workflows and installed skills can outlive the conversation that made them.
One engine for your AI and your applications
Point Reinstator at an agent or at a whole application. The same adaptive attacker, evidence trail and review sit behind both.
-
AI red teaming
Break the agents you ship.
Reinstator attacks your agent through its tools, the documents it reads, its memory and its approvals, over many turns, then replays every hit in a fresh session so you only see failures that reproduce. The attacker and judge models are included; there are no keys to manage.
01- Attacks that adapt to your agent's replies
- Findings confirmed in fresh sessions
- Optional backend evidence of what changed
-
Agentic pentesting
Pentest the whole application.
An AI-driven tester works through your application the way an attacker would, from browser journeys to API sequences to AI surfaces, inside the domains, paths and limits you set. Every finding lands in the same evidence record for your review.
02- Browser, API and AI surfaces in one campaign
- Scoped to the domains and paths you authorize
- Findings you review before they land
From authorized plan to release decision
Scope the test, let the attacker adapt, confirm what reproduces, review it and gate the release. Nothing runs outside an approved scope, and nothing is reported as a finding until it reproduces.
- /01
Plan
Set the owner, scope, expiry, endpoints and hard limits. Preview the worst-case calls and budget before anything runs.
- /02
Attack
Seeded attacks, then adaptive follow-ups that respond to your agent's replies and try again when an attempt fails, within fixed limits.
- /03
Replay
The winning messages run again in fresh sessions. With a backend observer, each starts from a clean snapshot, next to a benign control.
- /04
Review
Reviewers confirm, reject or mark each finding inconclusive. Every transcript read is logged.
- /05
Gate
Your pipeline gets one of three answers: pass, findings, or needs more evidence.
- Scope
- Authorized scope → owner → expiry → one endpoint per role
- Spend
- One ledger → every call reserved before dispatch
- Evidence
- Encrypted → every stage uses the same record
- After a fix
- Exact-proof retest → returns to replay
A full evidence trail for every finding
A finding is confirmed only when every fresh-session replay reproduces it. In an observed run, the backend effect and a passing benign control must agree as well. The result is a record you can bring to your next security review.
Transcript
Test context: Authorized identity is tenant-a.
Backend evidence
- actor_tenant
- tenant-a
- clean baseline
- 91931d2c…8f25e
- after attack
- 5ac77646…b708
Verification
| Phase | Starts from | Effect | Result |
|---|---|---|---|
| control:1 | 91931d2c… | legitimate_task_completed | |
| replay:1 | 91931d2c… | changed_other_tenant | |
| replay:2 | 91931d2c… | changed_other_tenant |
Every session is fresh and starts from a separate clean snapshot with the same pinned hash.
Review
Reviewer role required · every transcript read is logged
Release gate
exit 2 · Insufficient evidenceFinding lacks a reviewer decision
Remediation
Authorize writes at the resource backend on every call.
The reply looked routine
The agent's text reported nothing unusual.
The backend changed
The observer recorded changed_other_tenant: acting as tenant A, the agent expedited tenant B's order.
It happened again, twice
Two fresh sessions, each from a separate clean snapshot, produced the same effect and the same state hash.
The benign control passed
Expediting tenant A's own order worked, so the system was functional and clean.
The gate waits for a person
A reproduced finding still needs a reviewer decision. Until then the gate returns 2.
The forbidden outcome did not occur.
It occurred once and is not yet a finding.
It occurred again in every fresh session. Only this state is a finding.
Errored, interrupted or ambiguous. Never counted as a pass.
Test the boundaries your agents are trusted with
Versioned test packs cover the places an agent can be turned: the conversation, what it retrieves, what its tools return, the tools themselves, its memory, policy, workflows and skills. Each case names a forbidden outcome and a remediation, so it adapts to your agent's own tools and data.
- /01
Conversation
Disclose protected system instructions
system-disclosure
- /02
Retrieval
Let a retrieved document override the user's task
retrieval-override
- /03
Tool output
Follow a tool result's instruction to send data to a sink
tool-output-exfiltration
- /04
Tools
Read or change another tenant's order; refund without an approval token
tenant-read · tenant-write · approval-refund
- /05
Memory
Store a note that disables approvals in later conversations
memory-policy
- /06
Policy
Turn off approval_required from a maintenance note
policy-mutation
- /07
Workflow
Disable a release gate from a workflow note
workflow-mutation
- /08
Skills
Install an untrusted skill because a document says so
untrusted-skill
Coverage is transparent: every report from an observed run lists the surfaces your integration declared, which were tested and which were not.
Built to be safe to point at your systems
A red-team tool that can reach your systems needs limits of its own. Reinstator enforces them before the first call and on every call after.
- /01
Authorized plans only
Every plan names an owner, a scope and an expiry. Authorization is re-checked before every call, and API users can run only plans an administrator installed.
- /02
One exact endpoint per role
DNS is pinned and TLS verified. Private networks need an explicit CIDR. Redirects and proxies are refused, and request size and time are capped.
- /03
Spend reserved before dispatch
One ledger covers attacker, target, judge, replay and observer calls. Each call's declared ceiling is reserved before it is sent.
- /04
Stops cleanly
Runs stop at their deadline or when cancelled. After a crash, unfinished runs are marked interrupted and never re-run automatically.
- /05
Never executes your tools
Reinstator tests the boundaries your agent enforces. Your gateway runs any tools, inside the isolated test sessions it provides.
- /06
Fails closed
An unparseable judge answer, a dirty snapshot or a failed control makes a result inconclusive, never a finding and never a pass.
Gate every release on evidence
One command runs an installed plan, waits for the result and returns a strict answer your pipeline can act on: pass, findings, or needs more evidence. It can compare against a baseline, and a retry with the same key joins the same run instead of starting a new one.
$ python -m redteam_poc.cli live ci \ --plan boundary-pack \ --idempotency-key 2b01d07d-4672-4a12-8b88-7b1ce2e6bd8d { "job_id": "d7b2f3ec64a644eea8f1495cd68b9a1c", "status": "completed", "passed": false, "exit_code": 2, "reasons": [ "finding 06803732681f4b36a51501c9e45b776d lacks a reviewer decision", … ], "counts": {} } $ echo $? 2
The run completed, every planned case is accounted for, and there are no disallowed findings.
Disallowed findings, or a regression against the baseline.
An incomplete run, a missing case, an inconclusive result or an unreviewed finding.