A voice-powered AI tutor for Windows that watches your screen, answers your questions, and points at what it's talking about.
ClickyWin is a Windows port of Farza's Clicky — the open-source AI companion that lives next to your cursor. Hold Ctrl+Alt to talk, release to get a spoken answer from Claude. The companion cursor flies to UI elements it references, so you always know exactly what it's describing.
Built for Windows developers, creatives, and anyone learning unfamiliar software by doing instead of watching tutorials.
- Launch ClickyWin. A small blue triangle appears near your cursor.
- Open whatever software you're learning — DaVinci Resolve, Blender, Wild Apricot, anything.
- Hold Ctrl+Alt and ask your question out loud.
- Release. ClickyWin screenshots your screen(s), sends them to Claude along with your transcribed speech, and speaks the answer back to you.
- The companion cursor flies to the UI element Claude is describing, so your eyes go right to it.
- Follow up with another question — ClickyWin remembers the conversation.
- Push-to-talk voice input via Ctrl+Alt with live waveform visualization
- Multi-monitor screen capture sent to Claude for visual context
- Text-to-speech responses via ElevenLabs with real-time output waveform
- Cursor guidance — companion flies to UI elements Claude references
- Knowledge base injection — curated markdown docs loaded per-app based on active window, so Claude gives authoritative answers for niche software
- Conversation memory — 20-turn history so follow-up questions have full context
- Interrupt support — press Ctrl+Alt mid-response to cut the audio and ask something new
- History window — optional scrollable transcript accessible from the tray menu
- Windows 10/11
- Python 3.12 — download
- uv package manager — install
- Node.js 18+ — for deploying the Cloudflare Worker
- Cloudflare account (free tier) — sign up
- API keys:
- Anthropic (Claude)
- AssemblyAI (speech-to-text)
- ElevenLabs (text-to-speech)
git clone https://github.com/JaySmith502/clicky-win.git
cd clicky-win/clicky-py
uv syncThe Worker is a tiny proxy that holds your API keys. The app talks to the Worker, the Worker talks to the APIs. Your keys never ship in the app.
cd ../worker
npm install
npx wrangler secret put ANTHROPIC_API_KEY
npx wrangler secret put ASSEMBLYAI_API_KEY
npx wrangler secret put ELEVENLABS_API_KEY
npx wrangler deployCopy the deployed URL (e.g. https://your-worker.your-subdomain.workers.dev).
cd ../clicky-py
uv run python -m clickyOn first run, ClickyWin creates %APPDATA%\ClickyWin\config.toml. Open it and paste your Worker URL:
worker_url = "https://your-worker.your-subdomain.workers.dev"Restart ClickyWin. The blue triangle should appear near your cursor. Hold Ctrl+Alt and start talking.
- Microphone: Windows Settings > Privacy > Microphone — ensure access is enabled
- SmartScreen: If Windows shows a warning on first run, click "More info" then "Run anyway"
cd clicky-py
uv run pyinstaller clicky.specOutput: dist/clicky/ClickyWin.exe — runs without Python installed.
Edit %APPDATA%\ClickyWin\config.toml:
| Field | Default | Description |
|---|---|---|
worker_url |
(required) | Your deployed Cloudflare Worker URL |
hotkey |
ctrl+alt |
Push-to-talk binding. Also supports right_ctrl |
default_model |
claude-sonnet-4-6 |
Claude model for responses |
log_level |
INFO |
DEBUG, INFO, WARNING, or ERROR |
knowledge_dir |
%APPDATA%/ClickyWin/knowledge/ |
Path to knowledge base folder |
ClickyWin can inject curated documentation into Claude's context based on which app is in the foreground. This turns it from a general-purpose assistant into an expert trainer for specific software.
Create a folder per app inside your knowledge directory:
%APPDATA%/ClickyWin/knowledge/
└── wild_apricot/
├── _meta.toml # maps window titles to this KB
├── overview.md # always included — app overview
├── events.md # topic-specific docs
├── membership.md
└── email.md
The _meta.toml file tells ClickyWin when to load this KB:
name = "Wild Apricot"
window_titles = ["Wild Apricot", "wildapricot.org"]When the foreground window title contains any of the window_titles strings, all markdown files in that folder are injected into Claude's system prompt as authoritative reference documentation.
Any source of markdown works. We recommend NotebookLM for distilling large doc sets:
- Upload the software's documentation, help articles, or video transcripts to NotebookLM
- Ask it to produce focused markdown per topic area
- Drop the
.mdfiles into the app's KB folder - Write a
_meta.tomlwith window title matchers
No restart required — ClickyWin loads KB content fresh on every turn.
Python + PySide6 system tray app using asyncio (via qasync). All three APIs are proxied through a shared Cloudflare Worker.
clicky-py/ # Python source
clicky/ # Package
companion_manager.py # Central state machine
ui/companion_widget.py # Cursor-following overlay
clients/ # LLM, transcription, TTS clients
knowledge_base.py # Per-app KB with window title matching
tests/ # 73 tests
clicky.spec # PyInstaller build spec
worker/ # Cloudflare Worker proxy
src/index.ts # Routes: /chat, /tts, /transcribe-token
docs/ # PRDs and implementation plans
State flow: IDLE → LISTENING (Ctrl+Alt held) → PROCESSING (screenshots + Claude) → RESPONDING (TTS + cursor guidance) → IDLE
cd clicky-py
uv run pytest
uv run ruff check .ClickyWin is a community port of Clicky by Farza Majeed. All credit for the original concept, UX design, companion cursor behavior, and the POINT tag protocol goes to Farza. The knowledge base system and Windows-specific adaptations are original to ClickyWin.
MIT — see clicky-py/LICENSE.