v1.1.0  ·  Claude Code plugin

Claude types.
You hear it.

Chappie plays realistic Blue Switch mechanical keyboard sounds while Claude Code generates and runs tools — then a gentle alert ding the moment it pauses for your approval.

$ claude --plugin-url https://github.com/Mic-360/chappie
Read how it works
CHAPPIE · LIVE PREVIEW
claude ›
start
typing
alert
idle
Tap any keycap — sound is synthesized live with the Web Audio API
// what's inside

Everything Chappie does

A complete tactile audio layer for Claude Code — engineered to feel like a real keyboard, not a metronome.

01

Workaholic Rhythm

A flow-state typing model — sprint / cruise / deliberate bursts, fast finger-rolls, in-word acceleration, and sentence-length cadence.

02

Permission Alert

A gentle notification ding when Claude halts for your approval. Typing pauses instantly so the ding cuts through clean.

03

Zero-Config Audio

Six WAV assets download on first run via curl/wget and cache in ~/.claude/sounds/. Nothing is embedded or shipped.

04
🦀

Rust-Powered Daemon

A cross-platform audio engine on rodio (WASAPI / CoreAudio / ALSA). Just two crates: rodio and rand.

05
🔋

Windows EcoQoS

The daemon opts into Windows efficiency mode and below-normal priority to stay light on battery and CPU.

06

Native Hooks

Driven entirely by Claude Code lifecycle hooks — UserPromptSubmit, PreToolUse, Notification, Stop and more.

07

Plugin Skills

Built-in /chappie:setup to repair or reinstall the daemon, and /chappie:status to check its health.

08

Fully Tunable

Rhythm constants live at the top of main.rs — typo chance, pitch range, word length, idle shutdown. Tweak and rebuild.

09
📦

Zero-Build Install

On first session a prebuilt daemon downloads itself for your OS — Windows, macOS or Linux, Intel or ARM. No Rust toolchain, no build step.

// architecture

How it works

Claude Code hooks fire a one-shot binary that writes a nonce-tagged signal file. A long-running Rust daemon polls it and reacts to every signal exactly once.

Claude Code
Lifecycle Hooks
hooks.json fires on every event
signal mode
.chappie_state/signal
writes "<nonce> <signal>"
Rust daemon
chappie-daemon
polls, plays, single-instance lock
Claude Code Event Signal Daemon Behavior
UserPromptSubmitstartBegin playing typing sounds
PreToolUsetypingContinue / resume typing sounds
PostToolUsetypingContinue / resume typing sounds
NotificationalertPause typing → play alert ding → idle
StopstopReturn to idle, silence
SessionEndquitShut the daemon down immediately

Each write carries a unique nonce, so concurrent hook invocations can never clobber an alert or stop — the daemon reacts to every signal exactly once.

// the typing engine

A workaholic, not a metronome

The daemon models a fast, fluent typist. It drifts between three flow states — re-rolled every 10–30 words and weighted heavily toward speed.

Sprint
45 – 78 ms / key

Peak velocity. Fingers fly — short bursts of pure momentum.

Cruise
62 – 112 ms / key

The comfortable default — steady, fluent, sustainable pace.

Deliberate
95 – 175 ms / key

Slower, considered keystrokes — the rhythm of thinking it through.

Finger rollsWords occasionally open with a 2–4 key burst at ~30 ms.
In-word accelerationSlow on the first key, fastest mid-word, easing off at the end.
Typo corrections~6% of words trigger a fast backspace rattle and retype.
CadenceShort word gaps, longer sentence breaths every 8–16 words.
// tuning

Tune it to your taste

Edit the constants at the top of src/main.rs and rebuild.

ConstantDefaultDescription
ROLL_CHANCE0.22Chance a word opens with a finger-roll
TYPO_CHANCE0.06Chance of a typo + correction per word
WORD_LEN_MIN / MAX2 / 9Word-length range (skewed short)
MIN_PITCH / MAX_PITCH0.92 / 1.08Pitch randomization range
MIN_VOLUME / MAX_VOLUME0.62 / 1.0Volume randomization range
IDLE_SHUTDOWN_MS15000Idle time before the daemon self-exits
// get started

Install in one move

Add the plugin — the Rust audio daemon downloads itself as a prebuilt binary on your next session. No build step, no Rust toolchain required.

1

Add the plugin

Install straight from GitHub, or from this repository's marketplace.

# straight from GitHub claude --plugin-url https://github.com/Mic-360/chappie # or via the marketplace /plugin marketplace add Mic-360/chappie /plugin install chappie@chappie-marketplace
2

Start a session — that's it

On the next session, Chappie's SessionStart hook downloads the prebuilt daemon for your platform and caches it. No build, no Rust.

# nothing to run — just start typing with Claude

Check health or repair

Inspect the daemon any time — or force a fresh reinstall if it ever stays silent.

/chappie:status # daemon · sound cache · signal state · log /chappie:setup # repair / reinstall the daemon
// sound sources & credits

Built on open audio

Six WAV assets, downloaded once and cached locally. Each is used under its respective license.

Key clicks ×4 + spacebar

OpenClickSound

Free, live-recorded mechanical key tones.  ·  CC BY-NC 4.0

Nigh/OpenClickSound ↗
Alert ding

Notifications

Hand-crafted notification tones.  ·  CC0 / CC BY 3.0

akx/Notifications ↗
Audio engine

rodio

Cross-platform Rust audio playback by the RustAudio team.

RustAudio/rodio ↗
// ready?

Give Claude a keyboard.

Open-source, MIT-licensed, and lighter than a single browser tab. Your terminal has never sounded this good.

★  Star on GitHub