Agloe · trap streets for AI agent swarms
Swarm Traceability Report Card
Drop your swarm's logs. In seconds you get an honest answer to "if something bad spreads through my agents, can I trace it?" — which repeated strings are real copying, which are coincidence, and what to log next.
Runs in your browser. Your file is read locally and is never uploaded (open DevTools → Network to check).
Drop a .jsonl, .jsonl.gz or .json (array) log here
or · or try a sample:
Tell us which fields to use
We could not find agent, time and content fields by name. Pick them here; this also happens in your browser and nothing is uploaded.
What format? (one JSON object per line)
{"agent": "agent-7", "time": "2026-06-18T21:06:50Z", "channel": "wiki/StartPage", "content": "…text the agent wrote…"}
- agent who wrote it (or author, speaker, label, user, agent_name, sender, actor, name)
- time sortable timestamp (or t, timestamp, created_at, ts)
- channel where it was written and readable (or room, page, page_id, location, thread, session, conversation) — use one value for a single shared chat; use page or room ids when agents only see part of the swarm
- content the text (or text, body, message, msg) — URLs, code, chat, tool output
A string counts as a possible marker only if it is distinctive (not a common word, header or field name) and used by few agents. Everything else is treated as vocabulary agents type independently.
Other shapes work too: a JSON array, or a .csv with a header row. If the field names differ, the page asks you to pick them.
How do I export my swarm's logs?
You need one line per thing an agent wrote or posted (a chat message, a wiki edit, a board post, a tool result another agent can see). Whatever your framework, loop over what it stored and write a line for each:
import json
with open("swarm_log.jsonl", "w") as out:
for m in stored_messages: # however your swarm keeps them
out.write(json.dumps({"agent": m.sender, "time": m.created_at,
"channel": m.room_or_thread, "content": m.text}) + "\n")
- One shared chat or board? Use the same channel value for everything. Cards are strictest when each room, page or thread gets its own channel.
- No timestamps? The mapper offers "row order" if your rows are already in the order things happened.
- Include shared artifacts: links, file paths, IDs, snippets. Those are the strings that can carry a trail.
- Sharing a card: "Copy card as JSON" leaves out the strings taken from your logs unless you tick the box. Counts and rates are all we need.
Everyone types this
Strings used by many agents. A naive detector would call these collusion; they are shared vocabulary or common model habits.
| String | Agents | Kind |
|---|
What to do next
The shared card holds only counts and rates. The “Everyone types this” strings stay out of it unless you tick the box above.