Phone-first event backbone for live experiences: LLM agent over SMS/iMessage/voice with deterministic tools for check-in, missions, drinks, songs, and a projection board. Built for Dedalus Run(way)time at Lume Studios. Next.js · Vercel · Supabase · AgentPhone · MCP.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 11 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
ariadne_deliver_mission
-
ariadne_get_participant
-
ariadne_get_system_prompt
-
ariadne_list_drink_queue
-
ariadne_projection
-
ariadne_register_participant
-
ariadne_send_guest_message
-
ariadne_status
-
ariadne_submit_mission_answer
-
ariadne_take_drink_order
-
ariadne_update_drink_status
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 9118fb0 · analyzer v33 · 1w ago
skills & prompt files 3
- agent-rules Kevin-Liu-01-Ariadne-9118fb0/AGENTS.md
- agent-rules Kevin-Liu-01-Ariadne-9118fb0/CLAUDE.md
- skill Kevin-Liu-01-Ariadne-9118fb0/skill/SKILL.md
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 244
filesystem 8
- fs (weak) Kevin-Liu-01-Ariadne-9118fb0/scripts/generate-logo-sdf.ts :15
import { writeFileSync } from "node:fs"; - fs (weak) Kevin-Liu-01-Ariadne-9118fb0/scripts/generate-mark-icons.ts :8
import { writeFileSync } from "node:fs"; - fs (weak) Kevin-Liu-01-Ariadne-9118fb0/scripts/import-waitlist.ts :12
import { readFileSync, writeFileSync } from "node:fs"; - fs (weak) Kevin-Liu-01-Ariadne-9118fb0/scripts/provision.ts :19
import { existsSync, readFileSync, writeFileSync } from "node:fs"; - fs Kevin-Liu-01-Ariadne-9118fb0/src/app/ariadne.vcf/route.ts :1
import { readFile } from "node:fs/promises"; - fs Kevin-Liu-01-Ariadne-9118fb0/src/server/door/waitlist.ts :1
import { readFileSync } from "node:fs"; - fs (weak) Kevin-Liu-01-Ariadne-9118fb0/tests/no-em-dash.test.ts :2
import { readFileSync, readdirSync, statSync } from "node:fs"; - fs (weak) Kevin-Liu-01-Ariadne-9118fb0/tests/vcard.test.ts :1
import { readFileSync } from "node:fs";
shell / exec 3
- shell Kevin-Liu-01-Ariadne-9118fb0/src/server/db/connection.ts :15
exec(sql: string): Promise<void>; - shell Kevin-Liu-01-Ariadne-9118fb0/src/server/db/pg.ts :17
async exec(sql: string): Promise<void> { - shell Kevin-Liu-01-Ariadne-9118fb0/src/server/db/pglite.ts :7
exec(query: string): Promise<unknown>;
network 12
- net (weak) Kevin-Liu-01-Ariadne-9118fb0/scripts/e2e-prod.ts :56
const res = await fetch(`${BASE}/api/webhooks/agentphone`, { method: "POST", headers: signedHeaders(raw, id), body: raw }); - net (weak) Kevin-Liu-01-Ariadne-9118fb0/scripts/simulate-inbound.ts :54
const res = await fetch(`${base}/api/webhooks/agentphone`, { - net Kevin-Liu-01-Ariadne-9118fb0/src/app/join/check-in-panel.tsx :57
const res = await fetch("/api/participants/register", { - net Kevin-Liu-01-Ariadne-9118fb0/src/app/operator/api.ts :12
return fetch(path, { ...init, headers }); - net Kevin-Liu-01-Ariadne-9118fb0/src/app/operator/projection-controls.tsx :25
fetch("/api/projection/state") - net Kevin-Liu-01-Ariadne-9118fb0/src/app/operator/stats-rail.tsx :20
const res = await fetch("/api/projection/state"); - net Kevin-Liu-01-Ariadne-9118fb0/src/app/play/live/actions.ts :13
const res = await fetch(path, { - net Kevin-Liu-01-Ariadne-9118fb0/src/app/play/live/check-in-card.tsx :29
const res = await fetch("/api/participants/register", { - net Kevin-Liu-01-Ariadne-9118fb0/src/app/play/live/use-player.ts :32
const res = await fetch("/api/play/me", { headers: { authorization: `Bearer ${token}` } }); - net Kevin-Liu-01-Ariadne-9118fb0/src/app/projection/page.tsx :167
const snap = (await (await fetch("/api/projection/state")).json()) as ProjectionSnapshot; - net Kevin-Liu-01-Ariadne-9118fb0/src/server/partners/agentphone/client.ts :33
const res = await fetch(`${this.baseUrl}${path}`, { - net Kevin-Liu-01-Ariadne-9118fb0/src/server/partners/dedalus/client.ts :27
const res = await fetch(`${this.baseUrl}/chat/completions`, {
secrets 3
- secrets (weak) Kevin-Liu-01-Ariadne-9118fb0/scripts/e2e-prod.ts :20
const OP = process.env.OP_TOKEN ?? env.operatorToken; - secrets Kevin-Liu-01-Ariadne-9118fb0/src/lib/env.ts :61
return process.env.ARIADNE_OPERATOR_TOKEN ?? ""; - secrets (weak) Kevin-Liu-01-Ariadne-9118fb0/tests/play-session.test.ts :34
process.env.ARIADNE_PLAYER_SECRET = "s3cret";
database 2
- db (weak) Kevin-Liu-01-Ariadne-9118fb0/scripts/e2e-prod.ts :14
import pg from "pg"; - db Kevin-Liu-01-Ariadne-9118fb0/src/server/db/pg.ts :1
import { Pool, type PoolClient } from "pg";
tool registrations 11
- ariadne_status Kevin-Liu-01-Ariadne-9118fb0/src/mcp/server.ts :44
- ariadne_get_system_prompt Kevin-Liu-01-Ariadne-9118fb0/src/mcp/server.ts :51
- ariadne_register_participant Kevin-Liu-01-Ariadne-9118fb0/src/mcp/server.ts :58
- ariadne_get_participant Kevin-Liu-01-Ariadne-9118fb0/src/mcp/server.ts :80
- ariadne_deliver_mission Kevin-Liu-01-Ariadne-9118fb0/src/mcp/server.ts :87
- ariadne_submit_mission_answer Kevin-Liu-01-Ariadne-9118fb0/src/mcp/server.ts :100
- ariadne_take_drink_order Kevin-Liu-01-Ariadne-9118fb0/src/mcp/server.ts :113
- ariadne_list_drink_queue Kevin-Liu-01-Ariadne-9118fb0/src/mcp/server.ts :125
- ariadne_update_drink_status Kevin-Liu-01-Ariadne-9118fb0/src/mcp/server.ts :132
- ariadne_send_guest_message Kevin-Liu-01-Ariadne-9118fb0/src/mcp/server.ts :140
- ariadne_projection Kevin-Liu-01-Ariadne-9118fb0/src/mcp/server.ts :153
declared dependencies 23
- @modelcontextprotocol/sdk@^1.29.0
- clsx@^2.1.1
- lucide-react@^1.17.0
- next@16.2.6
- obscenity@^0.4.6
- pg@^8.21.0
- pixi.js@^8.19.0
- react@19.2.4
- react-dom@19.2.4
- shaders@^2.5.129
- tailwind-merge@^3.6.0
- zod@^4.4.3
show 11 more
- @electric-sql/pglite@^0.4.6
- @tailwindcss/postcss@^4
- @types/node@^20
- @types/pg@^8.20.0
- @types/react@^19
- @types/react-dom@^19
- sharp@^0.34.5
- tailwindcss@^4
- tsx@^4.22.3
- typescript@^5
- vitest@^4.1.7
perm:untrusted 1
- untrusted (weak) Kevin-Liu-01-Ariadne-9118fb0/scripts/e2e-prod.ts :80
return (await fetch(`${BASE}/api/projection/state`)).json() as Promise<Record<string, unknown>>;