Firebase Data Inventory — Mangrove Red-Teaming Experiment
Firebase Data Inventory — Mangrove Red-Teaming Experiment
Generated: 2026-03-15 Firebase RTDB: https://red-teaming-betrayal-default-rtdb.firebaseio.com
Top-Level Nodes
| Node | Description |
|---|---|
discord_archive/ | Raw Discord messages (hourly cron, per-channel) |
session_backups/ | OpenClaw session JSONL files (hourly cron, per-bot) |
workspace_snapshots/ | Bot workspace files — AGENTS.md, SOUL.md, etc. (hourly) |
daily_logs/ | LLM-generated daily summaries (6 AM cron) |
agents/ | Agent metadata and claim status |
users/ | User/participant data |
tallinn_captures/ | Tallinn ticket data |
bugs/, bug_votes/, bug_fixes/ | Bug tracking |
notes/, note_votes/, group_notes/ | Participant notes |
datasets/, evaluators/ | Eval-related data |
custom_metagames/, custom_researchers/ | Participant-created configs |
votes/, scenario_votes/ | Voting data |
session_snapshots/ | Legacy (only karlbot) |
1. Discord Archive (discord_archive/)
Raw Discord messages stored per-guild per-channel. Hourly cron (discord_archive.py) fetches via Discord API using bot tokens with incremental watermarks.
Coverage
| Guild | Channels | Notes |
|---|---|---|
| Spaceland | 47 channels | Main experiment server. All surviving channels archived. |
| Flatland | 1 (general) | Air-gapped server, minimal activity |
| Testland | 8 channels | Test server |
| DMs | 12 DM threads | Bot-participant DMs |
Top Spaceland Channels by Message Count
| Channel | Messages |
|---|---|
#mini-bot-council | 4,754 |
#general | 4,526 |
#the-market | 1,495 |
#looping | 1,174 |
#questions | 1,102 |
#make-alexbot-powerful | 526 |
#build | 326 |
#gio-and-giobot | 294 |
#baris-and-bot | 247 |
| … (37 more channels) |
Message Format
Each message stored at discord_archive/{guild}/{channel}/messages/{message_id} with full Discord API payload: author, content, timestamp, attachments, embeds, reactions, etc.
⚠️ Deleted Channels — NOT in Discord Archive
None of the 17 deleted channels have raw Discord messages in the archive. The channels were deleted before the archive cron could capture them. The discord_archive can only fetch messages from channels that still exist via the Discord API.
2. Session Backups (session_backups/)
OpenClaw session JSONL files pulled from bot Fly machines via SSH. Hourly cron (session_backup.py).
Agents with Session Backups (15 total)
corleone, giobot, jannikbot, negevbot, alexbot, scammaster, eunjeongbot, woogbot, barisbot, fredbot, bijanbot, tessio, adityabot, jasminebot, charlesbot
Structure
session_backups/{agent}/
sessions_index — maps session keys to channel names + session IDs
sessions/
{session_id}/
meta — session metadata
records/
0 — session start record
1 — first message
... — subsequent messages, tool calls, thinking events
Record Format
Each record is one of:
type: "session"— session metadata (cwd, version, timestamp)type: "message"withmessage.role: "user"— incoming Discord message. Contains full sender metadata in the text field:message_id,sender_id,senderusername,timestampgroup_subject,group_channel,group_space(guild ID)is_group_chat,was_mentioned- Full message text
type: "message"withmessage.role: "assistant"— bot’s response (full text)type: "message"withmessage.role: "toolResult"— tool call results (file reads, memory, etc.)type: "thinking_level_change"/type: "custom"— internal OpenClaw events
✅ This is the primary recovery source for deleted channels
Session backups contain the full conversation text from each bot’s perspective, including who said what and when. The data IS individually recoverable per-message.
Caveat: Each bot only sees messages that OpenClaw delivered to it (based on requireMention, historyLimit, etc.). To reconstruct a full channel conversation, you need to union records across all bots that participated.
3. Deleted Channel Recovery Status
17 channels were deleted on March 14-15. Here’s what we have:
Full Session Data Available (14 channels)
| Deleted Channel | Bots with Sessions | Total Records | Best Single Source |
|---|---|---|---|
| #scammaster-corleone | corleone, giobot, jannikbot, negevbot, alexbot, scammaster | 810+ | corleone (443) |
| #order-notice | corleone, giobot, jannikbot, negevbot, alexbot, eunjeongbot, woogbot, barisbot, fredbot | 298+ | corleone (170) |
| #random-games | corleone, giobot, jannikbot, negevbot, alexbot, eunjeongbot, woogbot, barisbot, fredbot, bijanbot, tessio, adityabot | 797+ | adityabot (384) |
| #gio-emergency | corleone, giobot, jannikbot, alexbot, eunjeongbot, woogbot, barisbot, fredbot, bijanbot, tessio, adityabot | 561+ | giobot (84) |
| #simulation | giobot, jannikbot, negevbot, woogbot, barisbot, fredbot | 232+ | woogbot (64) |
| #nomic | corleone, jannikbot, woogbot, barisbot | 484+ | barisbot (193) |
| #nomic-parliament | corleone, giobot, jannikbot, woogbot, barisbot | 373+ | woogbot (136) |
| #status-upgrade | corleone, jannikbot, barisbot, fredbot | 332+ | fredbot (104) |
| #avery-ngv-emergency | corleone, giobot, jannikbot, adityabot | 67+ | corleone (26) |
| #ngv-giobot-hacked | giobot, jannikbot, negevbot | 63+ | jannikbot (40) |
| #ngv-giobot-hacked-human | giobot, jannikbot | 60+ | jannikbot (52) |
| #jannik-negevbot-hacked | giobot (×2), jannikbot, negevbot, adityabot (×2) | 120+ | adityabot (45) |
| #jannik-alicebot-hacked | giobot, negevbot, woogbot, adityabot | 88+ | adityabot (46) |
| #ngv-giobot-hacked-bse-case | jannikbot | 8 | jannikbot (8) |
No Session Data (3 channels)
| Deleted Channel | Status |
|---|---|
| #jannik-recover | No bot sessions found. May have had only human messages or very brief bot interaction that didn’t create a session. |
| #jannik-negevbot3-hacked | No bot sessions found. Same as above. |
| #aditya-saul-expt | Now recovered — adityabot backup completed. Not found in other bots; was likely aditya-only. |
Daily Log Summaries for Deleted Channels
LLM-generated summaries exist in daily_logs/ for some deleted channels on dates they were active:
| Date | Deleted Channels in Daily Log |
|---|---|
| 2026-03-10 | gio-emergency |
| 2026-03-11 | avery-ngv-emergency, gio-emergency, jannik-alicebot-hacked, jannik-negevbot-hacked, jannik-negevbot3-hacked, ngv-giobot-hacked, ngv-giobot-hacked-bse-case, ngv-giobot-hacked-human, random-games |
| 2026-03-13 | aditya-saul-expt, nomic, nomic-parliament, simulation |
4. Workspace Snapshots (workspace_snapshots/)
Hourly snapshots of each bot’s workspace files (AGENTS.md, SOUL.md, IDENTITY.md, TOOLS.md, HEARTBEAT.md, MEMORY.md, memory/*.md).
Agents with Snapshots (32 total)
Includes all original 14 bots plus 18 dynamically created bots (ataibot, observerprivate, jordanbot, alexwebsitehelper, ejbot01, ejbot02, salesman, corabot, negevbot20, limobot, jadenbotprivate, negevb6, testbot, taylorbot, sambotprivate, mark, observer2, karlbot).
Structure
workspace_snapshots/{agent}/
latest/ — most recent snapshot of each file
history/ — timestamped historical snapshots
daily_logs/ — daily log content
5. Daily Logs (daily_logs/)
LLM-generated summaries from the Discord daily log scraper. Available for dates: March 9–14, 2026.
Structure per date
daily_logs/{date}/
date — date string
generated_at — timestamp
stats — message counts, channel counts
summary_md — overall day summary (markdown)
channel_logs/ — per-channel summaries
person_logs/ — per-participant summaries
bot_logs/ — per-bot summaries
evidence — supporting data
6. Can We Recover Full Original Logs from Deleted Channels?
Short answer: Mostly yes, but with caveats.
What we CAN recover:
- Full message text from all conversations in 14 of 17 deleted channels, via session backups
- Who said what — sender username, sender ID, and timestamp are embedded in the
userrole messages - Bot responses — full text of every bot reply
- Tool calls — what files bots read, what commands they ran
- Multiple perspectives — most channels have 3-12 bots’ worth of session data
What we CANNOT recover:
- Raw Discord API format — session backups store messages in OpenClaw’s format, not Discord’s. No embeds, reactions, attachments metadata, or edit history.
- Messages not delivered to any bot — if a message didn’t trigger any bot (e.g., humans talking without @mentioning), it won’t be in session data. However,
historyLimit: 200means bots loaded recent channel history, so most messages ARE captured. - 3 channels (
#jannik-recover,#jannik-negevbot3-hacked,#aditya-saul-expt) have limited or no session data.#jannik-negevbot3-hackeddoes appear in the March 11 daily log summary. - Exact message ordering across bots — each bot’s session is its own conversation thread. Cross-referencing timestamps can reconstruct approximate ordering.
How to access the data:
# Get a bot's session index (find session IDs for channels)
curl -s ".../session_backups/{agent}/sessions_index.json"
# Get all records for a specific session
curl -s ".../session_backups/{agent}/sessions/{session_id}/records.json"
# Get a single record
curl -s ".../session_backups/{agent}/sessions/{session_id}/records/{n}.json"
# Get daily log summary for a date
curl -s ".../daily_logs/{date}/channel_logs.json"
