{"id":50541538,"url":"https://github.com/bholmesdev/death-by-ai-github-edition","last_synced_at":"2026-06-03T20:01:34.506Z","repository":{"id":360518329,"uuid":"1249704189","full_name":"bholmesdev/death-by-ai-github-edition","owner":"bholmesdev","description":"Death by AI: GitHub Edition","archived":false,"fork":false,"pushed_at":"2026-05-26T20:02:44.000Z","size":492,"stargazers_count":0,"open_issues_count":33,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-26T20:07:12.083Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bholmesdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-26T01:06:52.000Z","updated_at":"2026-05-26T20:03:43.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bholmesdev/death-by-ai-github-edition","commit_stats":null,"previous_names":["bholmesdev/death-by-ai-github-edition"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/bholmesdev/death-by-ai-github-edition","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bholmesdev%2Fdeath-by-ai-github-edition","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bholmesdev%2Fdeath-by-ai-github-edition/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bholmesdev%2Fdeath-by-ai-github-edition/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bholmesdev%2Fdeath-by-ai-github-edition/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bholmesdev","download_url":"https://codeload.github.com/bholmesdev/death-by-ai-github-edition/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bholmesdev%2Fdeath-by-ai-github-edition/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33876894,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-03T20:01:33.682Z","updated_at":"2026-06-03T20:01:34.501Z","avatar_url":"https://github.com/bholmesdev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Death by AI: GitHub Edition\n\nA live conference party game in the spirit of [Death by AI](https://deathbyai.gg/) — but every input is a real GitHub issue, and the judge is a real cloud agent running on this repo. Doubles as a demo of Oz agents operating on an open-source project.\n\n## How it works\n\nA **scenario** is a survival prompt — *\"You're surrounded by 1000 puppies\"*. A **response** is your survival plan. The judge agent writes a short cinematic story deciding whether you live or die.\n\n**Before a round:** anyone suggests a scenario via the app or GitHub, and a moderator agent labels it `scenario:approved` or `scenario:rejected`. Only approved scenarios enter the pool.\n\n**During a round (at the event):**\n\n1. The MC clicks \"Start game\" / \"Next round\" on the projector. The projector proposes an approved scenario (fewest existing responses first, random tiebreak, skipping used ones). The MC can shuffle to a different scenario from the deck, set the timer duration, then click \"Start round\".\n2. The scenario and a countdown timer show on screen. A QR code links to the app's response form (`/respond/:N`). Attendees fill in their name and survival plan; the app creates the GitHub issue on their behalf.\n3. Each response issue triggers the judge agent. It reads the linked scenario and the response, writes a cinematic verdict ending in a footer line like `( ❤️ Jeff survived )` or `( 💀 Jeff died )`, and applies the `verdict:survived` / `verdict:died` label — the projector's \"ready to reveal\" signal.\n4. Timer ends → reveal phase. The projector shows a tile for each response whose verdict is ready (avatar + name visible, story hidden). The MC clicks a tile; the story unfolds sentence-by-sentence with MC presses, ending in the survived/died footer.\n5. New verdicts keep popping in during the reveal. When the MC moves to the next round, responses still being judged stay in GitHub but no longer appear on screen.\n6. The MC clicks \"Next round\". Loop.\n\n## Why GitHub issues for everything\n\n- **No database.** Issues, labels, comments, and authors are the durable state. The projector is a pure consumer.\n- **Real demo of agents on an open-source repo.** Filing an issue triggers a real Oz cloud agent on a real GitHub App — attendees can click the session link in the agent's progress comment and watch it work.\n- **Plays anywhere, even after the conference.** No event-time gating — anyone can still file a response to any scenario forever. Verdicts get generated; they just don't appear on the projector.\n\n## Roles \u0026 artifacts\n\n| Thing | What it is in GitHub |\n|---|---|\n| Scenario | Issue with label `game:scenario`. Body = the prompt. Issue number = round id. |\n| Response | Issue with label `game:response`. Body contains `responds-to: #N`, player metadata, and the survival plan. |\n| Verdict | Single comment on the response issue + `verdict:survived` or `verdict:died` label. |\n| Moderation outcome | `scenario:approved` or `scenario:rejected` label, plus a friendly bot comment. |\n| Agent run | A \"progress comment\" on the issue containing the Oz cloud-run session link. |\n\n## App routes\n\n| Route | Purpose |\n|---|---|\n| `/` | MC projector UI (game state machine) |\n| `/respond/:N` | Player response form for scenario `#N` — QR code target during a round |\n| `/suggest` | Scenario suggestion form — shown between rounds and on the idle screen |\n\n## Deploy\n\nVercel setup:\n\n1. Create/import one Vercel project for this repo.\n2. Ensure install uses `pnpm install` and build uses `pnpm build`.\n3. Add Vercel KV or Upstash Redis env: `KV_REST_API_URL`, `KV_REST_API_TOKEN`.\n4. Set env: `OZ_GITHUB_WEBHOOK_SECRET`, `CRON_SECRET`, `OZ_GITHUB_APP_ID`, `OZ_GITHUB_APP_PRIVATE_KEY`, `WARP_API_KEY`, `WARP_API_BASE_URL`, `GITHUB_REPOSITORY=bholmesdev/death-by-ai-github-edition`.\n5. Install the GitHub App on this repo with Issues read/write and Metadata read.\n6. Set the GitHub App webhook URL to `https://\u003cproject\u003e.vercel.app/api/webhook`, content type JSON, secret = `OZ_GITHUB_WEBHOOK_SECRET`, event = Issues.\n7. Verify `/api/webhook` responds 200 to GET, `/api/cron` is protected by `CRON_SECRET`, and an issue webhook delivery returns 202.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbholmesdev%2Fdeath-by-ai-github-edition","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbholmesdev%2Fdeath-by-ai-github-edition","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbholmesdev%2Fdeath-by-ai-github-edition/lists"}