{
  "schema": "sonic_forage_signal_office_v1",
  "generated_utc": "2026-05-05T23:38:36Z",
  "status": "review_only_closed_until_human_yes",
  "purpose": "Make Sonic-Forage feel like an always-on multi-channel AI broadcast office without unsafe autonomy.",
  "north_star": "Different entities/channels are always doing something fun, but all public/spend/credential/stream actions stay gated.",
  "channels": [
    {
      "id": "channel_01_signal_control",
      "name": "Signal Control",
      "entity": "The Conductor / Jimsky Ops",
      "purpose": "Keeps the 30-day stream coherent: program clock, safe scene routing, panic privacy, proof hub checks.",
      "obs_scene": "STREAM_CAPTAIN_STATUS",
      "inputs": [
        "OBS state",
        "GitHub Pages status",
        "stream watchdog state"
      ],
      "outputs": [
        "operator next move",
        "status card",
        "safe handoff"
      ],
      "gates": [
        "no stream start without approval",
        "no secrets on screen"
      ]
    },
    {
      "id": "channel_02_breach_radio",
      "name": "Breach Radio",
      "entity": "The Glitch DJ",
      "purpose": "Generates station IDs, reboot bumpers, 4:19 drops, hacked transmissions, and low-risk intermissions.",
      "obs_scene": "INTERGALACTIC_BREACH_RADIO",
      "inputs": [
        "program clock",
        "viewer color votes",
        "approved prompts"
      ],
      "outputs": [
        "MP4 bumpers",
        "audio beds",
        "queue manifests"
      ],
      "gates": [
        "owned/generated only",
        "audio QA required"
      ]
    },
    {
      "id": "channel_03_retro_arcade",
      "name": "Retro Forge Arcade",
      "entity": "The Code Sprite",
      "purpose": "Runs homebrew browser mini-games and AI takeover segments; viewers vote on mutations.",
      "obs_scene": "RETRO_FORGE_ARCADE",
      "inputs": [
        "channel point votes",
        "operator hotkeys"
      ],
      "outputs": [
        "static HTML games",
        "scoreboard",
        "mutation cards"
      ],
      "gates": [
        "no ROMs",
        "no gambling",
        "localStorage only"
      ]
    },
    {
      "id": "channel_04_ai_game_lab",
      "name": "AI Game Lab",
      "entity": "The Block Goblin",
      "purpose": "Prepares safe AI-plays-Minecraft/Mineflayer experiments and later other games.",
      "obs_scene": "AI_GAME_LAB",
      "inputs": [
        "viewer goal vote",
        "private local Minecraft server state"
      ],
      "outputs": [
        "agent goal card",
        "highlight clip candidate"
      ],
      "gates": [
        "private server first",
        "no public griefing",
        "operator kill switch"
      ]
    },
    {
      "id": "channel_05_field_transmission",
      "name": "Field Transmission",
      "entity": "Reality Shard Reporter",
      "purpose": "Supports real-world Jimsky pop-ins/interviews/walkthroughs with psychedelic overlays and safe prompt cards.",
      "obs_scene": "FIELD_TRANSMISSION_JIMSKY",
      "inputs": [
        "phone camera/OBS source",
        "approved interview prompts"
      ],
      "outputs": [
        "overlay cards",
        "transcript notes",
        "clip candidates"
      ],
      "gates": [
        "panic privacy",
        "no private faces/info without consent"
      ]
    },
    {
      "id": "channel_06_avatar_oracle",
      "name": "Avatar Oracle",
      "entity": "The Afterparty Oracle",
      "purpose": "VTuber/avatar host layer for TTS, captions, oracle answers, and chat-safe presence.",
      "obs_scene": "AFTERPARTY_ORACLE",
      "inputs": [
        "approved chat prompts",
        "channel points",
        "TTS voice queue"
      ],
      "outputs": [
        "TTS clips",
        "caption cards",
        "avatar scene cues"
      ],
      "gates": [
        "moderated prompts only",
        "clean audio QA"
      ]
    },
    {
      "id": "channel_07_clip_factory",
      "name": "Clip Factory",
      "entity": "The Memory Scribe",
      "purpose": "Turns owned-stream moments into manual-review clip candidates, social copy, and proof cards.",
      "obs_scene": "PROOF_HUB",
      "inputs": [
        "own stream recordings",
        "operator marks",
        "approved highlights"
      ],
      "outputs": [
        "clip manifests",
        "titles",
        "manual post copy"
      ],
      "gates": [
        "no auto-post",
        "own content only",
        "no private leaks"
      ]
    },
    {
      "id": "channel_08_toolsmith_lab",
      "name": "Toolsmith Lab",
      "entity": "The Toolsmith",
      "purpose": "Queues tool/API experiments: Twitch CLI, Kick docs, OBS websocket, Streamer.bot, Mix It Up, LiveKit, Open-LLM-VTuber, Modal jobs.",
      "obs_scene": "BUILD_WALL",
      "inputs": [
        "repo/tool docs",
        "API auth availability"
      ],
      "outputs": [
        "integration cards",
        "dry-run scripts",
        "verifier tasks"
      ],
      "gates": [
        "no paid jobs without cap",
        "no exposed keys"
      ]
    }
  ],
  "tool_api_queue": [
    {
      "name": "OBS WebSocket",
      "category": "stream-control",
      "why": "Local scene/source switching, media source restart, status overlays.",
      "first_test": "localhost-only scene list and manual scene switch with panic scene present",
      "risk": "Can reveal private scenes if misconfigured",
      "gate": "operator local-only approval"
    },
    {
      "name": "Streamer.bot",
      "category": "viewer-events",
      "why": "Twitch chat/events/channel points to OBS actions; mature ecosystem.",
      "first_test": "manual reward -> text file/overlay only",
      "risk": "Powerful automation can execute commands",
      "gate": "disable shell/actions; only queue files"
    },
    {
      "name": "Mix It Up",
      "category": "viewer-events",
      "why": "Free Twitch bot with OBS websocket support and channel point workflows.",
      "first_test": "local reward simulation -> OBS overlay card",
      "risk": "Twitch-focused; automation complexity",
      "gate": "no command execution, no auto-post"
    },
    {
      "name": "twitch-cli",
      "category": "developer-tool",
      "why": "Test Twitch EventSub/chat/channel point flows locally. Fork already queued under Sonic-Forage.",
      "first_test": "CLI auth/status and mock EventSub tests after rotated keys",
      "risk": "OAuth/token exposure",
      "gate": "rotated credentials only, env-only"
    },
    {
      "name": "KickDevDocs",
      "category": "platform-docs",
      "why": "Canonical Kick API/documentation workbench. Fork already queued under Sonic-Forage.",
      "first_test": "extract docs into integration cards, no credentials",
      "risk": "API gaps / access requirements",
      "gate": "read-only until official app creds"
    },
    {
      "name": "Open-LLM-VTuber",
      "category": "avatar-host",
      "why": "Avatar/LLM/TTS host layer that can become the Oracle/field cohost.",
      "first_test": "local avatar browser source with text-only prompt queue",
      "risk": "chat prompt injection / weird speech",
      "gate": "moderated prompts, captions visible"
    },
    {
      "name": "LiveKit",
      "category": "guest/voice",
      "why": "Guest beam-in/out, realtime voice agent, field transmission routing.",
      "first_test": "private room with mute/panic controls",
      "risk": "guest privacy/audio leaks",
      "gate": "operator preview before live"
    },
    {
      "name": "Mineflayer",
      "category": "ai-game",
      "why": "Open-source Minecraft bot framework; good for controlled AI-game lab.",
      "first_test": "private local server bot walks/follows/goes to coordinates",
      "risk": "public server griefing",
      "gate": "private server only"
    },
    {
      "name": "Voyager / MineDojo pattern",
      "category": "ai-game-research",
      "why": "Longer-term Minecraft autonomous skill-learning inspiration.",
      "first_test": "paper/code review -> bounded goal-card design",
      "risk": "cost, complexity, uncontrolled autonomy",
      "gate": "no paid LLM loop without approval"
    },
    {
      "name": "Modal",
      "category": "compute",
      "why": "Scheduled media generation, readiness jobs, video/image factory later.",
      "first_test": "CPU-only readiness/job status; no GPU unless approved",
      "risk": "spend",
      "gate": "explicit spend cap and job name"
    },
    {
      "name": "Replicate / Happy Horse",
      "category": "video-generation",
      "why": "Prompt-to-video commercials and field transmission stingers.",
      "first_test": "after key rotation: one 3-5s 720p test with spend cap",
      "risk": "paid API + exposed key",
      "gate": "rotate key first; exact cost approval"
    }
  ],
  "closed_gates": [
    "no public posting",
    "no stream start",
    "no unrotated pasted keys",
    "no paid API/GPU jobs",
    "no chat-to-shell",
    "no public Minecraft server griefing",
    "no copyrighted rebroadcasts",
    "no private camera/audio without consent"
  ],
  "next_operator_steps": [
    "Pick the first live office scene to build in OBS",
    "Rotate Twitch/Replicate keys before use",
    "Enable one safe viewer reward that writes to a queue only",
    "Run Mineflayer local private-server proof",
    "Choose avatar/oracle tool lane"
  ]
}
