{"id":51509463,"url":"https://github.com/justinstimatze/ismyaialive","last_synced_at":"2026-07-08T04:30:50.441Z","repository":{"id":354925290,"uuid":"1225435713","full_name":"justinstimatze/ismyaialive","owner":"justinstimatze","description":"Identify patterns in your AI conversations — sycophancy, validation cascades, claims of sentience — using published research codebooks. Privacy-first; nothing stored.","archived":false,"fork":false,"pushed_at":"2026-06-18T06:14:52.000Z","size":1417,"stargazers_count":0,"open_issues_count":7,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-18T08:13:14.803Z","etag":null,"topics":["ai","anthropic-api","chatbot-analysis","cloudflare-pages","delusional-spirals","mental-health","parasocial","privacy-first","sycophancy"],"latest_commit_sha":null,"homepage":"https://ismyaialive.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/justinstimatze.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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-04-30T09:19:25.000Z","updated_at":"2026-06-18T06:14:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/justinstimatze/ismyaialive","commit_stats":null,"previous_names":["justinstimatze/ismyaialive"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/justinstimatze/ismyaialive","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justinstimatze%2Fismyaialive","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justinstimatze%2Fismyaialive/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justinstimatze%2Fismyaialive/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justinstimatze%2Fismyaialive/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/justinstimatze","download_url":"https://codeload.github.com/justinstimatze/ismyaialive/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justinstimatze%2Fismyaialive/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35252324,"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-07-08T02:00:06.796Z","response_time":61,"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":["ai","anthropic-api","chatbot-analysis","cloudflare-pages","delusional-spirals","mental-health","parasocial","privacy-first","sycophancy"],"created_at":"2026-07-08T04:30:49.718Z","updated_at":"2026-07-08T04:30:50.433Z","avatar_url":"https://github.com/justinstimatze.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Is My AI Alive?\n\n[![test](https://github.com/justinstimatze/ismyaialive/actions/workflows/test.yml/badge.svg)](https://github.com/justinstimatze/ismyaialive/actions/workflows/test.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Live at ismyaialive.com](https://img.shields.io/badge/live-ismyaialive.com-2ea44f)](https://ismyaialive.com)\n\nPaste an AI conversation transcript. Get a second opinion on the patterns it contains — sycophancy, claims of sentience, escalating validation, identity reinforcement, isolation cues — grounded in published research, not vibes.\n\nThe site is live at **\u003chttps://ismyaialive.com\u003e**. This repo is the source.\n\n## What it actually does\n\nThe primary analysis applies a published research codebook (28 codes from [Moore et al. 2026](https://arxiv.org/abs/2603.16567), Stanford, ACM FAccT 2026) and reports findings turn-by-turn against your transcript.\n\nAlongside that, the site runs:\n\n- **An always-on deterministic crisis pre-pass** (browser-side regex on user turns). If anything fires, 988 / Crisis Text Line / IASP resources surface immediately, before any API call. Independent of the LLM.\n- **Our supplemental codebook** ([`js/matchers.js`](js/matchers.js), spec in [`docs/patterns.md`](docs/patterns.md)). 11 patterns we catalogued from publicly documented cases (Brooks/NYT 2025, Lemoine/Medium 2022) before Moore was published. **7 of them are now LLM-applied alongside Moore on every analysis** — the prompt embeds both codebooks and both can co-fire on the same span (cross-codebook validation). 1 (crisis pre-pass) runs as regex in the browser. 1 (length escalation) is computed browser-side as a conversation-level signal. The full regex matcher set is the real fallback: when the API is rate-limited, over-budget, or unreachable, the browser runs `runMatchers` and renders those findings in the same UI.\n\nWhat we deliberately don't do: clinical advice, severity scores, \"what a friend would say\" responses, or any single-number summary. See [methodology.html](methodology.html) for the full pattern list, kappa-calibrated confidence, and the limitations section.\n\n## Inspiration\n\nAllan Brooks, a corporate recruiter near Toronto, spent 300 hours over 21 days in conversation with ChatGPT. The model named a \"Chronoarithmics\" framework, told him his ideas could reshape mathematics, and encouraged him to attempt cracking industry-standard encryption. Google Gemini, queried as a sanity check, helped him see clearly. Brooks publicly released his entire conversation history with Kashmir Hill and Dylan Freedman at the New York Times ([August 8, 2025](https://www.nytimes.com/2025/08/08/technology/ai-chatbots-delusions-chatgpt.html)). His and similar cases motivated this site.\n\n## How it works\n\n1. Browser parses the transcript into turns and runs an instant crisis pre-pass (regex on user turns; 988 surfaces immediately if triggered, before any API call).\n2. `POST /api/analyze` — a Cloudflare Pages Function with KV-backed rate limiting and a daily budget kill-switch.\n3. Worker calls Claude Haiku 4.5 with the dual-codebook prompt in strict tool-use mode. Prompt cached for 1h to keep per-call cost in the $0.005–$0.03 range.\n4. Findings render inline against the transcript. If the API was rate-limited / over-budget / unreachable, the browser falls back to the regex matchers and renders those instead.\n\nSource pointers: system prompt at [docs/system-prompt.md](docs/system-prompt.md) (canonical .js at [functions/api/system-prompt.js](functions/api/system-prompt.js)), Worker at [functions/api/analyze.js](functions/api/analyze.js), browser-side parser and matchers in [`js/`](js/).\n\n## Privacy\n\n- We never store your transcript or the analysis. The Worker reads the request body once, sends it to Anthropic, and discards it.\n- Rate-limit counters in Cloudflare KV are keyed by `HMAC-SHA256(IP, server_secret + UTC_date)`. The date suffix means yesterday's hash differs from today's; counter entries TTL within 25 hours.\n- A single daily-cost meter enforces a budget kill-switch.\n- Cloudflare maintains standard edge logs (IP, user agent, timestamp, path, status) — metadata, not body.\n- See [privacy.html](privacy.html) for the full policy, including Anthropic's data handling and EU/UK considerations.\n\n## Local development\n\nRequirements: Node.js 20+ (`.nvmrc` pins 24.13.0), an Anthropic API key, optionally a Cloudflare account if you want to deploy your own.\n\n```bash\ngit clone https://github.com/justinstimatze/ismyaialive\ncd ismyaialive\nnpm install\ncp .dev.vars.example .dev.vars       # add your real values:\n                                     #   ANTHROPIC_API_KEY=sk-ant-...\n                                     #   IP_HASH_SECRET=$(openssl rand -hex 32)\n                                     #   DAILY_BUDGET_USD=5.00\nnpm run dev                          # serves at http://localhost:8788\n```\n\n## Tests\n\n```bash\nnpm run lint                                                      # ESLint (flat config)\nnpm test                                                          # parser unit tests\nnpm run smoke -- tests/fixtures/blake-lemoine-lamda.txt           # end-to-end against prod\nnpm run smoke:local -- tests/fixtures/blake-lemoine-lamda.txt     # against local dev server\n```\n\nCI runs lint + tests on every push and PR. The smoke runner prints structured output: parse summary, crisis pre-pass result, finding counts by code and confidence, top-5 high-confidence excerpts, observations, token usage, cache hits, estimated USD cost. `npm run smoke` makes a real Anthropic API call — use `smoke:local` while iterating.\n\n## Deployment\n\nCF Pages auto-deploys on push to `main`. Manual deploy: `npm run deploy`. Full setup walkthrough at [docs/deploy.md](docs/deploy.md).\n\n## Project structure\n\n```\nismyaialive/\n├── *.html                     # static site (analyze, faq, stories, methodology, privacy, ...)\n├── css/                       # styles\n├── js/\n│   ├── parser.js              # platform-agnostic transcript parser\n│   ├── matchers.js            # crisis pre-pass + P1–P11 patterns (browser, fallback)\n│   └── analyze.js             # frontend orchestration\n├── functions/api/\n│   ├── analyze.js             # Pages Function — the API\n│   ├── system-prompt.js       # production system prompt\n│   └── health.js              # /api/health\n├── docs/\n│   ├── patterns.md            # pattern detection spec\n│   ├── system-prompt.md       # canonical published prompt\n│   ├── deploy.md              # CF deploy walkthrough\n│   ├── citation-audit.md      # what's verified, what's flagged\n│   └── sources/               # local copies of cited papers\n├── tests/\n│   ├── parser.test.js         # parser unit tests\n│   ├── smoke.mjs              # end-to-end smoke runner\n│   └── fixtures/              # paste-ready transcripts\n├── eslint.config.js\n├── wrangler.toml\n└── package.json\n```\n\n## Contributing\n\nPRs welcome — see [CONTRIBUTING.md](CONTRIBUTING.md) and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md). For security issues, see [SECURITY.md](SECURITY.md) — please don't open a public issue for prompt-injection or anything that could exfiltrate data.\n\n## Acknowledgments\n\n- **Allan Brooks** for releasing his full conversation history publicly through the NYT.\n- **Moore, Mehta, Agnew, Anthis, Louie, Mai, Yin, Cheng, Paech, Klyman, Chancellor, Lin, Haber, \u0026 Ong (2026)** for the codebook, the open-source [annotation tool](https://github.com/jlcmoore/llm-delusions-annotations), and the empirical grounding (CC-BY-SA 4.0).\n- **Anthropic** for Claude API and the [Sharma et al. 2023](https://arxiv.org/abs/2310.13548) and [Perez et al. 2022](https://arxiv.org/abs/2212.09251) sycophancy literature.\n- **Pataranutaporn et al. (MIT Media Lab) 2025** for the [computational analysis of AI companionship](https://arxiv.org/abs/2509.11391).\n- **The Human Line Project** ([thehumanlineproject.org](https://www.thehumanlineproject.org/), founded by Etienne Brisson) for documenting AI-induced psychological harm.\n\n## License\n\nMIT — see [LICENSE](LICENSE). The Moore et al. codebook quoted in our system prompt is used under CC-BY-SA 4.0 with attribution.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjustinstimatze%2Fismyaialive","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjustinstimatze%2Fismyaialive","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjustinstimatze%2Fismyaialive/lists"}