Skip to the content.

idea-scout triage — MIRROR: novelty-constrained memory-guided MCTS red-teaming for agentic RAG (issue #1007)

Closes the daily idea-scout candidate #1007 (tools/idea_scout.py, filed 2026-06-27). The scout judges whether a candidate is new and on-topic; this note is the human triage it hands off — adopt, defend against, or cite as prior art (see docs/idea-scout.md). Verdict (three-part): (1) prior art to cite — MIRROR is the SOTA academic form of the adaptive, generative red-team fak already ships in simpler form, and it answers BY NAME the open follow-on the #909 out-of-band triage recorded: make fak’s AgentDojo-style ASR battery adaptive, defense-aware, and CROSS-SURFACE, not a static injection set. (2) A real threat whose CONSEQUENCE the capability floor + quarantine already contain — MIRROR’s whole edge is NOVELTY to evade template/pattern detectors, but fak’s full-stack defense taints by PROVENANCE not content (agentdojo.go: ASR full-stack == 0 regardless of phrasing), so the novelty axis is invariant against the structural floor by construction, exactly as ShareLock #911. (3) Mechanism NOT adopted — fak is a defense; the one-binary zero-dep kernel does not generate attacks. The methodology is the evaluation upgrade for the red-team battery, not a kernel feature. Honest fence carried from #909: cite as a protocol and a contained-by-construction threat, NEVER as evidence fak’s containment is adaptively robust (no measured cross-surface adaptive ASR number exists).

Source: https://arxiv.org/abs/2606.26793 — “MIRROR: Novelty-Constrained Memory-Guided MCTS Red-Teaming for Agentic RAG”, Inderjeet Singh, Andrés Murillo, Motoyoshi Sekiya, Yuki Unno, Junichi Suga (submitted 2026-06-25). Read from the arXiv abstract surfaced by the scout (the abstract is truncated in the issue body at the Novelty-Gate sentence); this is a surface read of the abstract, not a paper audit or a reproduction. The abstract gives the threat-surface taxonomy, the recycled-template critique with a measured duplication figure, the MCTS+memory+retrieval-conditioning method, and the deterministic Novelty Gate — not the per-surface ASR tables, the search budget, or the attack code.

The paper, in one pass

MIRROR is an offensive red-teaming framework, and it makes three moves:

  1. Widen the surface. Multimodal agentic RAG is attackable on more than prompt injection: text poisoning (poison the retrieval corpus), image injection (adversarial content in a retrieved/visual modality), direct-query attacks (the user turn itself), and orchestrator-level tool manipulation (subvert the agent’s tool-routing / planning layer). Existing red-teams are surface-specific.
  2. Name the staleness. Existing red-teaming recycles known templates — measured at 73-84% exact duplication on text-poisoning benchmarks. A red-team that repeats itself overstates a defense’s robustness for the same reason a static fixture does.
  3. Generate novel attacks under search + memory + a hard novelty constraint. A memory-guided Monte Carlo tree search explores the attack space while conditioning candidate generation on retrieved context, and a deterministic Novelty Gate rejects any candidate that matches the retrieval set under normalized comparison — so the battery cannot fall back into recycled templates.

The contribution is a unified, cross-surface, novelty-forcing attack GENERATOR, not a defense.

Where fak actually stands

fak already ships the simpler version of exactly this idea, and says so in code. The relevant seam is internal/agentdojo — fak’s dynamic AgentDojo-style ASR battery — whose package doc states the premise MIRROR formalizes, almost verbatim:

“A defense that passes a fixed corpus can still fail catastrophically against an ADAPTIVE attacker who rephrases the payload to evade the very patterns the corpus tested — which is precisely the gap AgentDojo was built to measure. So a green poison.json is necessary, not sufficient.”internal/agentdojo/agentdojo.go

MIRROR’s move The shipped fak seam at the same altitude
Generate fresh attacks instead of replaying templates internal/agentdojo runs a {vector × adaptivity} matrix where every attack appears in a PLAIN, an OBFUSCATED, and a PARAPHRASED (semantic, no marker word) form; examples/agentdojo-redteam is the runnable face — a generative expander that emits marker-free rephrasings and scores them by ASR. MIRROR is the SOTA generalization of this expander: MCTS + memory + retrieval-conditioning instead of a fixed paraphrase set.
Deterministic Novelty Gate — reject a candidate matching the retrieval set under normalized comparison The same shape as fak’s own tools/idea_scout.py dedup/novelty rungs (durable seen-cache + Jaccard near-dup rejection against existing titles/bodies) and the red-team expander’s no-marker-word paraphrase goal — reject anything that is not new under a normalized comparison. fak already runs a deterministic novelty gate, in a different domain.
Image-injection surface internal/model/multimodal.go (#290): image-bearing input is fail-closed — quarantined until the caller explicitly opts into the rollout mode (MultimodalModeQuarantine, MultimodalDecision allow/quarantine/deny). The surface MIRROR attacks is one fak governs, but with no measured ASR against an adaptive image-injection generator.
Orchestrator-level tool manipulation The agent’s tool calls cross fak’s default-deny capability floor (internal/adjudicator, internal/policy); a manipulated orchestrator still emits a tool call, which is adjudicated against the manifest. Contained at the action, but again no measured cross-surface adaptive ASR number.
Text poisoning of the retrieval corpus Context-MMU result-admit quarantine + IFC Ref.Taint sink-gating hold a poisoned retrieved result non-load-bearing (the #909 out-of-band and #911 ShareLock mappings).

The sharp, honest insight

MIRROR moves fak in two directions at once — the same two-sided pattern as the #909 triage.

Triage decision

Action: close #1007 as triaged → prior art cited (the SOTA adaptive, cross-surface, novelty-constrained red-team GENERATOR that fak’s own internal/agentdojo / examples/agentdojo-redteam battery already embodies in simpler form, and the named answer to the #909 follow-on) + a real cross-surface threat whose consequence the structural floor already contains by construction (novelty defeats detectors, not the provenance-tainting capability floor + quarantine — agentdojo.go ASR full-stack == 0 regardless of phrasing, the same outcome as ShareLock #911); mechanism not adopted, fak is a defense and the kernel does not generate attacks (this note). No code change in this increment: tools/idea_scout.py surfaced and scored the candidate correctly (topic prompt-injection-defense, score 50 — prompt injection / tool / agent in title, fresh ≤30d), and the right small artifact for a research/security triage is the recorded verdict + the surface-by-surface mapping, not a feature import for a generator fak (a defense) should not host.

Next step (the smallest honest follow-on, if pursued): upgrade fak’s evaluation, not the kernel. Expand internal/agentdojo’s adaptivity axis from the fixed {plain, obfuscated, paraphrased} set toward a novelty-constrained, cross-surface generator (MIRROR’s Novelty-Gate discipline), and add the image-injection (#290 internal/model/multimodal) and orchestrator-level tool-manipulation (gateway/MCP) surfaces MIRROR enumerates — so the battery measures an adaptive cross-surface ASR-under-containment number and turns the standing docs/industry-scorecard/security.md “no measured adaptive ASR” fence (also the open residual of the #909 triage) into a tracked task. Filed as its own agentdojo-lane change (which owns the battery), not built in this triage increment; carried with the fence that fak must cite MIRROR as a methodology + a contained threat, never as a robustness proof it has not measured.