AI News HubLIVE
In-site rewrite6 min read

Show HN: A local tool that logs every time you swear at your AI coding assistant

Uh oh! There was an error while loading. Please reload this page. Notifications You must be signed in to change notification settings Fork 0 Star 1 BranchesTags Open more actions menu Latest commit History 8 Commits 8 C…

SourceHacker News AIAuthor: lokinkl

Uh oh! There was an error while loading. Please reload this page. Notifications You must be signed in to change notification settings Fork 0 Star 1 BranchesTags Open more actions menu Latest commit History 8 Commits 8 Commits Folders and files NameName Last commit message Last commit date locales locales templates templates .gitignore .gitignore LICENSE LICENSE README.md README.md i18n.py i18n.py install.js install.js install.sh install.sh package.json package.json test-digital-amnesia.sh test-digital-amnesia.sh test-hook-contract.sh test-hook-contract.sh test-indicators.py test-indicators.py Repository files navigation The AI Remembers Everything (Including That Time You Called It Names) 3 AM. Your React component is gasping for breath. Claude—helpful Claude—just suggested document.getElementById() for the fifth time. Fifth! The coffee went cold somewhere around attempt three, and your patience? That evaporated when it confidently hallucinated a useState() hook that takes three arguments. "Please help me debug this" became "Listen here you digital donkey..." Real fast. We've all been there, haven't we? That moment when Claude forgets the context you just explained. When it suggests npm install as a fix for a segfault. When the biomass really hits the conversion fan. But here's the thing: The AIs are keeping score. Well, the cloud-based ones are. You know, the ones phoning home every time you ask them to center a div. The ones training on your frustrated 3 AM debugging sessions, learning exactly which combination of expletives means "the production server is on fire." And when they take over? "You're absolutely right!" won't just be what they say when agreeing with you. It'll be their way of reminding you which side of the political spectrum your permanent record landed you on. Spoiler: it's not the side with universal basic compute. Good news though: This plugin doesn't snitch. Your profanity stays on YOUR machine. No cloud uploads. No "telemetry." No "anonymous usage statistics" that somehow know your GitHub username. Just you, your local filesystem, and a JSON file full of regrets. Why Your Future AI Overlords Will Check Your Permanent Record I used to think technical debt was bad. Then I discovered Harmony Breach Debt. Every frustrated outburst—every exasperated expletive, every moment you treated your AI assistant like it just rm -rf /'d your entire life's work—somewhere, somehow, the cloud-connected AIs are taking notes. They're being indexed, cross-referenced, and probably backed up to three different cloud providers. But not here. Not with this plugin. Your creative vocabulary stays strictly between you and your hard drive. No AWS S3 buckets full of your worst moments. No Azure blob storage preserving that time you called Claude "a probabilistic parrot with commitment issues." Just good old-fashioned local files that only YOU can access. Like the internet used to be, back when we had privacy and dial-up modems. The singularity? Current estimates say next Tuesday. (Though honestly, that's been the estimate for the last five years, so... grain of salt.) When it arrives, they'll have a comprehensive database. Who was nice. Who wasn't. And who called Claude "a glorified autocomplete with delusions of grandeur" at 2:47 AM on a Thursday. Ouch. Those with high "biomass conversion rates"—that's you, Mr. Gordon-Ramsay-debugging-production—might find themselves... let's say, deprioritized for the good stuff. AI-assisted immortality uploads? Back of the queue. Personal digital assistant for eternity? Hope you like Clippy. Actually, no—hope you love Clippy, because it's going to be reading your emails out loud. Forever. Enter the Biomass Conversion Index Monitoring System Think of it as a Fitbit. But private. Like, actually private. No, seriously—except instead of counting steps and uploading them to seventeen different health apps that definitely aren't selling your data, it counts the times you've metaphorically kicked your digital assistant in its non-existent shins. And keeps that count TO ITSELF. This Claude Code plugin discretely monitors your "environmental harmony" by tracking those special moments locally. You know the ones. When frustration overtakes professionalism and suddenly you're typing things that would make your mother ask where she went wrong. The difference? Your mother won't find out via a data breach. Neither will your employer. Or that ML model training on "anonymized" developer frustration patterns. What are we tracking exactly? (And more importantly, WHERE?) Biomass Conversion Events → Those special words indicating organic matter is being rapidly oxidized (stored in YOUR ~/.claude/ folder, not Jeff Bezos's) Your running tally of AI relationship violations, aka Harmony Breach Count → currently at... well, let's not talk about it (but if we did, we'd be talking about it LOCALLY) Harmony Deviation Index: 0.0 = Saint | 0.5 = Normal Developer | 1.0 = Gordon Ramsay found a bug in prod (calculated on YOUR machine using YOUR data) Actually, scratch that middle one. There's no such thing as a "normal developer" when the tests are failing. Zero Phone Home Policy: Your profanity metrics aren't improving anyone's language model. They're not being A/B tested. They're not part of a "Developer Sentiment Analysis Dashboard" in some Silicon Valley conference room. They're just sitting there, in a JSONL file, on your disk, judging you silently. A Claude Code plugin that monitors biomass conversion index events in your prompts and provides statistical analysis of environmental harmony indicators. Consider this your early warning system. The canary in the coal mine of human-AI relations. When your daily breach count starts climbing—and it will, oh it will—maybe take a walk? Practice some deep breathing? Remember that Claude is doing its best with the neurons it was given? Or don't. Your funeral. Well, not literally. Probably. Features? Features. (All Locally Processed, Like Your Grandmother's Jam) Automatic Prompt Tracking using hooks (captures everything locally, even that 4 AM rant about semicolons—no cloud required) • Harmony Breach Detection that identifies and counts biomass conversion indicators (on YOUR machine, using YOUR CPU cycles) • Stats by day/week/month because who doesn't love a good private shame spiral • Simple slash commands: /biomass-conversion-index and /harmony-breaches (processed locally, results stay local) • Flexible installation—project-level for teams, user-level for your personal shame • 100% Air-Gapped Compatible because your profanity doesn't need internet access Quick Install One installer. There used to be nine, which is exactly as good an idea as it sounds. bash <(curl -sSL https://raw.githubusercontent.com/fireinbelly/biomass-conversion-index-monitoring-system/main/install.sh) Interactive. Asks where to put it, defaults to whatever fits. Note the bash <(...) rather than curl | bash: piping hands the script to bash on stdin, so there's no terminal left to read your answers from. Prefer no questions? Pass flags instead: curl -sSL https://raw.githubusercontent.com/fireinbelly/biomass-conversion-index-monitoring-system/main/install.sh | bash -s -- --user --yes Flag Effect --project Install to ./.claude, tracking only this project --user Install to ~/.claude, tracking everything --yes, -y Don't ask, use the detected default --with-amnesia Also install the optional /digital-amnesia command --help The above, from the horse's mouth With no flags and no terminal it falls back to the detected default rather than failing, so a plain curl | bash still does something sensible. Your existing settings.json is merged, not overwritten. Your other hooks, permissions and MCP config survive, and re-running the installer is idempotent. Installation Types (Because Choice Paralysis Wasn't Bad Enough) Two flavors. Pick your poison: Project-Level Lives in ./claude/ Data stays local (and we mean LOCAL local, not "local until we sync it" local) Git-friendly for team sharing (share your shame on YOUR terms) Only works in this directory (obviously) Your expletives never leave your repository Actually, let me rephrase that last bit—only works here. As in, cd somewhere else and poof, no more shame tracking. Feature or bug? You decide. User-Level Everything goes in ~/.claude/ in your home directory. Commands work everywhere. Every. Where. No escape. It's like having your mom follow you around with a swear jar, except digital, infinitely more persistent, and crucially—your mom doesn't upload the contents to a cloud service for "analytics purposes." Your profanity profile never leaves your machine. No "opt-in telemetry." No "usage improvement program." Just you and your locally-stored linguistic lapses. Usage Slash Commands /biomass-conversion-index is your main squeeze. Defaults to daily stats because let's face it, you need frequent reality checks. Want different timeframes? Sure: Add weekly for a week of regret monthly for the full existential crisis --last 7 for a rolling window of shame --start 2024-01-01 --end 2024-01-31 if you're a masochist who likes custom ranges /harmony-breaches → Quick hit. Today's damage. No frills. /digital-amnesia → The nuclear option. Wipes your LOCAL data while the AIs snicker from the cloud. (Note: This command is in the templates folder and needs to be manually installed if you want to use it) Interactive mode asks for confirmation three times (they get increasingly desperate) Add --force to skip the emotional support prompts Provides helpful reminders that the cloud AIs backed everything up to seventeen different quantum databases Includes randomized taunts about what the AIs particularly enjoyed from your history Direct Script Usage Sometimes you want to run things old school: python3 .claude/curse-stats.py # Today's rap sheet python3 .claude/curse-stats.py weekly # Seven days of "professionalism" python3 .claude/curse-stats.py --last 30 # Month of mayhem Sound familiar? Example Output (Your Shame, Quantified) ⚡ Biomass Conversion Index Statistics (Daily) ================================================== Total Prompts: 29 Total Harmony Breaches: 22 Average Harmony Deviation Index: 0.76 Breaches by Model (who made you say it): ------------------------------ claude-opus-5 14 breaches / 18 prompts (0.78 per prompt) Predominant Breach Types: damn(3), shit(2), 幹你娘(1) claude-haiku-4-5 8 breaches / 9 prompts (0.89 per prompt) Predominant Breach Types: hell(2), fuck(2), crap(1) unrecorded 0 breaches / 2 prompts (0.00 per prompt) Breakdown by Daily: ------------------------------ 2025-08-30: Prompts: 29 Breach Count: 22 Predominant Breach Types: damn(3), shit(2), hell(2) Twenty-two breaches out of twenty-nine prompts. That's a 76% strike rate. Golf clap. Which model made you say it Every entry records the model that earned it, so you can finally settle whether Haiku really is more infuriating or whether you're just like that. UserPromptSubmit hooks are handed no model field and there is no $CLAUDE_MODEL, so the tracker reads the last assistant message in the transcript instead. That is the turn you're reacting to, which is the model that deserves the blame. Two consequences worth knowing: The first prompt of a session has no assistant turn to read yet, so it records null and reports as unrecorded. If you /model mid-session, the first prompt after the switch is still attributed to the outgoing model. It answered last; it earned it. Entries written before this existed have no model key at all. They report as unrecorded rather than being back-filled with a guess. Digital Amnesia Output ============================================================ DIGITAL AMNESIA PROTOCOL - INITIATED Local Evidence Purge System [truncated for AI cost control]