Skip to content

jjwallace/tink

Repository files navigation

T.I.N.K. — close-up T.I.N.K. — Object Recovered. Origin Unknown. Tink — falling For decades they denied it. Congress is still asking questions. It fell from the sky. T.I.N.K. is on your desktop. Tink — crashed Field Manual / Extract / Unclassified — the dossier

Tink

A voice + overlay companion for Claude Code.

Download for macOS Visit Site Release


What it does

  • Speaks responses aloud via local TTS (sherpa-onnx + Piper voices)
  • Listens for push-to-talk dictation via local STT (sherpa-onnx)
  • Reacts with a Pixi-rendered creature that responds to your AI's lifecycle
  • Anchors itself wherever you drop it — drag the voice anchor around your screen
  • Summarizes long responses with an embedded SmolLM2 model
  • Integrates with Claude Code via lifecycle hooks (UserPromptSubmit, Stop, etc.)

Install

  1. Download the latest DMG
  2. Open the DMG → drag Tink into Applications
  3. Strip the quarantine flag (required for unsigned apps):
    xattr -cr /Applications/Tink.app
  4. Launch Tink — it automatically opens System Settings → Privacy & Security → Accessibility
  5. Add Tink to the Accessibility list and toggle it on
  6. Voice + STT + summarizer models download automatically on first launch (~200 MB total)

Microphone permission: macOS will prompt the first time you press the push-to-talk key.

Build from source

git clone https://github.com/jjwallace/tink
cd tink
./setup.sh                  # downloads voice models, installs deps
bun run tauri dev

Requires: Bun, Rust.

No special access needed — the creature logic ships as a prebuilt static library in src-tauri/vendor/<target>/libcreature_core.a.

What's inside

Folder What it is
src/ SolidJS frontend — overlay UI, settings panel, dashboards
src-tauri/ Rust backend — TTS, STT, summarizer, hooks integration
voice-core/ Shared Rust crate — STT/TTS engines + EventSink
src-tauri/vendor/ Prebuilt libcreature_core.a per target
docs/ Architecture and design notes

Architecture

┌─────────────────────────────────────────────────┐
│ Tauri Window (transparent, fullscreen overlay)  │
│                                                 │
│  ┌──────────────┐  ┌─────────────────────────┐  │
│  │ SolidJS UI   │  │ Pixi + Canvas 2D layers │  │
│  │ - Settings   │  │ - Creature              │  │
│  │ - Speech UI  │  │ - Sine waves            │  │
│  │ - Voice Anchr│  │ - Particles, VFX        │  │
│  └──────────────┘  └─────────────────────────┘  │
│                                                 │
│  ┌─────────────────────────────────────────┐    │
│  │ Rust Backend                            │    │
│  │ - TTS (sherpa-rs/VITS)                  │    │
│  │ - STT (sherpa-rs/Zipformer)             │    │
│  │ - Summarizer (llama-cpp-2/SmolLM2)      │    │
│  │ - Creature runtime (linked from .a)     │    │
│  │ - macOS event tap (global hotkeys)      │    │
│  └─────────────────────────────────────────┘    │
└─────────────────────────────────────────────────┘

Hooks

Tink integrates with Claude Code via shell hooks at ~/.claude/hooks/. The narrator hook converts assistant responses → TTS; the start-sound hook fires on prompt submit. See docs/ for the full hook map.

License

MIT for the source in this repo.

If you'd like to work on the creature itself — choreography, rendering, the Rust core — message jjwallace about joining the core team.


The libcreature_core.a static library committed in this repo contains the proprietary choreography brain — state machine, blend curves, the things that make Tink feel like Tink — and ships as machine code only.

About

Tink — voice + overlay companion for Claude Code

Resources

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors