Skip to content

Not-Happy-Jan

The three-tier Not-Happy-Jan cast: Karren the manager raging up top, Bazza in stressed middle-management, Jan on reception with a headset, ringed by feedback devices

Multi-sensory feedback for AI coding agents. When your coding agent finishes a task, someone picks up the phone and tells you — cheerfully if it went well, furiously if it didn't. It's an Australian call-centre for your build: hold music while the agent works, a cast of cloned voices when it's done, and a pulse on your mouse or a flash on a pixel display to match — all running 100% on your own machine.

"Not happy, Jan — the issue is…"

→ New here and want the full story? What is NHJ?

New here? Three things to know

  • It speaks instantly on a minimal install — the bundled voice bank needs no downloads.
  • The full live experience (cloned voices + a fresh in-character line every time + hold music) wants an Apple-Silicon Mac and a one-off ~5 GB of local models.
  • Everything inference runs on-device; nothing about your code or prompts leaves the machine.

What you'll experience

  • 🎷 Hold music plays while the agent is busy, and pauses the instant it's done — a zero-attention "still working / finished" signal.
  • 👩 Jan (reception) handles the routine "all done". 🧑‍💼 Bazza (middle management) escalates warnings. 📣 Karren (the manager) takes over when it all breaks — she is NOT. HAPPY. JAN.
  • 🎚️ Tune each character — boganism, competence, chaos — just by asking Claude in plain language.
  • 📟 Fan out across devices you already have: a haptic mouse, $60 pixel clocks, a LaMetric, even a physical bell — or nothing but your speakers.

How it works

Four steps: 1, your agent (Claude Code or any MCP agent) finishes and emits a status marker; 2, an NHJ hook or MCP catches it; 3, the right character answers — Jan, Bazza, or Karren, chosen by severity; 4, it reaches your senses across voice, haptic, display, and bell. Hold music plays while the agent is busy and pauses when someone answers.

Severity picks who answers — the worse it gets, the higher you climb the ladder:

A severity ladder rising bottom to top. Jan (reception) handles routine work and all-done — fires on ok, step, celebrate. Bazza (middle management) handles something that needs a look — fires on warn. Karren (the manager) takes over when it broke or is urgent — fires on err and attn.

Install

curl -fsSL https://raw.githubusercontent.com/guruswami-ai/not-happy-jan/main/install.sh | bash

One command, no sudo. The default profile installs the full local experience with on-demand model loading (no resident RAM at idle). The MCP server binds to 127.0.0.1; LAN access is an explicit opt-in.

Requirements & tiers · Install profiles · Quick start

Find your path

Trust

Inference runs locally — the cloned-voice references never leave your machine. Local services bind to 127.0.0.1 by default; reaching them over the LAN is a deliberate opt-in. Install and uninstall run entirely in your user account (no sudo) and are fully reversible.

Code is MIT. Media and voice assets are licensed separately with mixed provenance — see media provenance & licenses.