A floating AI secretary for macOS. Double-tap Control to summon a spotlight-style overlay anywhere, even over fullscreen apps. It runs entirely on your Mac with its own built-in engine: private, with no cloud and no API keys.
Free and open source. Local inference costs you nothing, no per-query fees, ever.
No API keys. No subscriptions. No cloud. No telemetry.
Thuki (thư kí, Vietnamese for secretary) is a lightweight macOS overlay powered by local AI models running entirely on your own machine, built for quick, uninterrupted asks without ever leaving what you're doing.
Double-tap Control ⌃ to summon Thuki from anywhere, even over fullscreen apps. Highlight text first and it opens with your selection pre-filled as a quote. Ask a question, attach your screen with /screen, get an answer, and dismiss without ever leaving what you're doing.
thuki-demo.2026-06-28.at.15.00.52.mp4
Install the app, pick a model during onboarding, and start asking.
curl -fsSL https://thuki.app/install.sh | shThis downloads the latest Thuki.dmg over HTTPS, verifies its RSA-4096 signature with the openssl already on your Mac, and installs it to /Applications. Because the download arrives without a quarantine flag, Thuki opens cleanly: no Gatekeeper "Apple could not verify" prompt and no manual xattr step.
Want to read the script before running it? Visiting thuki.app/install.sh downloads it; open the saved file in a text editor to review it first. Or read it in the terminal without saving anything:
curl -fsSL https://thuki.app/install.sh | lessManual install (download the DMG)
Prefer to download by hand? Grab the DMG and clear the quarantine flag yourself.
-
Download
Thuki.dmgfrom the latest stable release, or grab the bleeding-edge build from thenightlychannel, rebuilt automatically frommain. -
Double-click
Thuki.dmgto open it, then dragThukionto theApplicationsfolder shortcut. -
Eject the disk image (drag it to Trash in the Finder sidebar, or right-click and choose Eject).
-
Before opening Thuki for the first time, run this command in Terminal:
xattr -rd com.apple.quarantine /Applications/Thuki.app
Why is this needed? Thuki is a free, non-profit, open-source app distributed directly and not through the Mac App Store. Apple's Gatekeeper automatically blocks any app downloaded from the internet that has not gone through Apple's paid notarization process. This one-time command removes that block. It is safe and officially documented by Apple. The one-line installer above handles this for you.
-
Open Thuki. It will appear in your menu bar.
Build from source
Prerequisites: Bun, Rust, and optionally Docker
# Clone and install dependencies
git clone https://github.com/quiet-node/thuki.git
cd thuki
bun install
# Launch in development mode (hot-reload frontend)
bun run devSee CONTRIBUTING.md for the full development setup guide.
To produce a standalone app instead of running the dev server, build it and open the bundle directly:
bun run build:all
open src-tauri/target/release/bundle/macos/Thuki.appFirst launch: macOS will ask for two permissions. Accessibility is required for the global keyboard shortcut that lets you summon Thuki from any app. Screen Recording is required for the
/screencommand and the screenshot button. Grant both once; they persist across restarts.
Pick a model: onboarding offers a curated set of starter models sized for different Macs and downloads your pick right inside the app. Model files are large (roughly 2-9 GB), so the first download can take several minutes; you only do it once. Add more models anytime, including any GGUF from Hugging Face, from Settings → Models → Discover.
Most AI tools require accounts, API keys, or subscriptions that bill you per token. Thuki is different:
- It works everywhere. Double-tap Control ⌃ and Thuki appears on your desktop, inside a browser, inside a terminal, and even in fullscreen apps. Your favorite AI chat apps can't do that.
- 100% free local AI. You run the model on your own machine, so there is no per-query cost, ever.
- Private by design. No remote server, no cloud backend, no analytics, no telemetry. Conversations live in a local SQLite database on your machine and nowhere else.
- Works offline. Once your model is downloaded, Thuki runs without an internet connection.
- Always available: double-tap Control ⌃ to summon the overlay from any app, including fullscreen apps.
- Context-aware quotes: highlight any text, then double-tap Control ⌃ to open Thuki with the selection pre-filled as a quote.
- Built-in AI engine and model library: Thuki bundles a llama.cpp inference engine and lets you download curated Staff Picks, or any GGUF straight from Hugging Face, browse your Library, and switch the active model from the ask bar, all from inside the app.
- Instant follow-ups: Thuki can keep your model warm in memory between messages, so replies start right away instead of stalling to reload the model on every ask.
- Image input and screen capture: paste or drag images directly into the chat, or type
/screento capture your entire screen and attach it as context. - Read text in images, on any model: commands like
/extract,/explain,/tldr, and/translatepull the text out of an attached image with on-device macOS Vision OCR, so they work on screenshots and documents even when the active model has no vision capability. They read text, not scenes: describing a textless image (say, a photo of the sky) still needs a vision model. See docs/ocr-commands.md. - Agentic search: type
/searchto run a multi-step, fully local search pipeline with a live trace of every query, fetch, and judgement step. Requires a one-time setup. - Slash commands: built-in shortcuts for search and prompt actions:
/search,/extract,/explain,/translate,/rewrite,/tldr,/refine,/bullets,/todos. - On-demand reasoning: on models that support reasoning (not every model does), add
/thinkto any message to make it work through the problem step by step before answering. It is off by default, so everyday asks stay fast. - Cross-model continuity: swap models mid-conversation and Thuki sanitizes history and filters capabilities (vision, reasoning) to whatever the new model supports.
Thuki runs models through a provider. The built-in engine is the default; Ollama is there if you'd rather bring your own.
A bundled llama.cpp llama-server that Thuki spawns, supervises, and shuts down for you. Download GGUF models such as Llama, Gemma, and Qwen from the Hugging Face Hub right inside the app, then switch between them from the ask bar. No accounts, no API keys, no cost per query.
Thuki can also run inference through an external provider instead of the built-in engine.
- Ollama. Prefer your own Ollama install? Switch to it anytime from Settings.
- Your own OpenAI-compatible server (coming soon). Support for pointing Thuki at any OpenAI-compatible endpoint you run yourself (a local or self-hosted server) is on the roadmap.
See docs/models-and-providers.md for the full model library and provider guide.
The /search command runs a fully local agentic search pipeline backed by two Docker services (SearXNG + a Trafilatura reader). It is not yet bundled with the app: enabling it currently requires cloning this repository to run the local services. Every other Thuki feature works without it. A built-in, zero-setup /search (no Docker to run yourself) is on the roadmap.
See docs/agentic-search.md#setup for the setup steps.
Inference runs on-device, so your prompts, context, and replies never leave your Mac. There is no Thuki account, no API key, no cloud backend, and no telemetry. Conversation history lives in a local SQLite database on your machine; delete a conversation and it is gone. The only outbound requests are ones you start yourself, such as downloading a model.
See docs/privacy.md for exactly what runs locally and the few things that touch the network.
Click to expand
Thuki is a Tauri v2 app: a Rust backend with a React and TypeScript frontend.
| Layer | Technology |
|---|---|
| Shell | Tauri v2 |
| Backend | Rust (stable) |
| Frontend | React 19, TypeScript, Tailwind CSS 4 |
| Engine | Bundled llama.cpp llama-server |
| Storage | SQLite (bundled) |
Two processes, with a narrow boundary between them:
-
App (Tauri/React). The UI runs in a secure system webview with restricted IPC. Streaming uses Tauri's Channel API: the Rust backend sends typed
StreamChunkenum variants, and the frontend hook accumulates tokens into React state. -
Engine. The default engine runs as a separate
llama-serverprocess that Thuki spawns, supervises, and kills on quit, bound to127.0.0.1only with its web UI disabled, so nothing outside your Mac can reach it. The pinned llama.cpp release is sha256-verified at build time, and every model download is checked against a pinned Hugging Face revision before install.
The app starts hidden. The hotkey or tray menu shows it. The window close button hides the window rather than quitting; quit is only available from the tray. ActivationPolicy::Accessory hides the Dock icon, and macOSPrivateApi: true enables the NSPanel that lets Thuki float above fullscreen apps.
For the engine internals (sidecar lifecycle, Keep Warm, the spawn line, model store), see docs/models-and-providers.md. For the full security posture and how to report an issue, see SECURITY.md.
Thuki works on sensible defaults out of the box. Tweak anything from the in-app Settings panel (open it from the menu-bar icon) or by editing the TOML file at ~/Library/Application Support/com.quietnode.thuki/config.toml; both write to the same place.
See docs/configurations.md for the full schema, docs/commands.md for the slash command reference, and docs/troubleshooting.md when something goes wrong.
Contributions are welcome! Read CONTRIBUTING.md to get started. Please follow the Code of Conduct.
Thuki is macOS-only, but the community has been busy bringing it to other platforms. Huge shoutout to these contributors 🎊🚀!
| Platform | Repo | Author |
|---|---|---|
| Windows 10/11 | ThukiWin | @ayzekhdawy |
| Windows 10/11 | Mate | @M31i55a |
Each port is independently maintained by its author. For issues or questions about a specific port, head to that repo directly.
Thuki is just getting started. Here's where it's headed:
- Connect your tools: integrate via MCP with Gmail, Slack, Discord, Calendar, and more, so you can draft a reply, summarize a thread, or schedule a meeting without leaving your current app.
- Type with your voice: press a key, speak, and get clean text in any app.
- Notes from any meeting: live transcripts and summaries of any meeting.
- Automate the routine: teach Thuki multi-step tasks and run them on a word.
- Built-in search:
/searchbundled into the app with no Docker to run yourself. - More providers: bring your own OpenAI-compatible server (a local or self-hosted endpoint) alongside the built-in engine and Ollama.
Whatever comes next, the aim stays the same: a local-first secretary that runs open models on your own machine. Anything that reaches beyond your Mac will always be opt-in.
Have a feature idea? Open an issue and let's talk about it.
Hey, Logan here. I'm building Thuki around how people actually use it, so if you have feedback, an idea, or just want to say hi, reach out on X. Or leave your email and I'll reach out personally. I read everything.
Copyright 2026 Logan Nguyen. Licensed under the Apache License, Version 2.0.
