An open API service indexing awesome lists of open source software.

https://github.com/pepperonas/inspector-rust

Keyboard-first clipboard hyper-toolkit for power users: history, snippets, text expander, screen OCR, region screenshot, inline calculator, color picker, image recolor + ML background cutout. macOS + Windows. Native (Tauri 2 + Rust + React), local, AES-256 encrypted at rest, MIT.
https://github.com/pepperonas/inspector-rust

clipboard clipboard-history clipboard-manager color-picker desktop-app developer-tools encryption macos native ocr productivity react rust screenshot snippets tauri tauri2 text-expander typescript windows

Last synced: 5 days ago
JSON representation

Keyboard-first clipboard hyper-toolkit for power users: history, snippets, text expander, screen OCR, region screenshot, inline calculator, color picker, image recolor + ML background cutout. macOS + Windows. Native (Tauri 2 + Rust + React), local, AES-256 encrypted at rest, MIT.

Awesome Lists containing this project

README

          

[🇬🇧 English](./README.md) · **đŸ‡©đŸ‡Ș Deutsch**


Inspector Rust — keyboard-first Clipboard-Toolkit

# Inspector Rust đŸ•”ïžâ€â™‚ïž

> **Keyboard-first Clipboard-Hyper-Toolkit — nativ auf macOS, Windows 11, Linux. Kein Electron, keine Cloud, keine Telemetrie.**

DrĂŒck **`Ctrl+Shift+V`** irgendwo → rahmenloses Popup ĂŒber dem aktiven Monitor → fuzzy-Suche durch 1 000 deduplizierte Clipboard-EintrĂ€ge → Enter pastet zurĂŒck in die zuvor fokussierte App. Ganzer Loop unter 200 ms, unter 50 MB RAM, AES-256-GCM-verschlĂŒsselt at-rest mit Keys im OS-Keychain. **Gebaut fĂŒr die Art Mensch, die schon MuskelgedĂ€chtnis fĂŒr drei Clipboard-Manager hat und von allen genervt ist.**

### ✹ Was es kann (in kurz)

- 📋 **Clipboard-History** — Text, RTF, HTML, PNG, Datei-Listen; 1 000 EintrĂ€ge per SHA-256 dedupliziert; Fuzzy-Suche while-you-type.
- 🧼 **Inline-Rechner** (`2+2`, `sqrt(144)`, Hex/Bit-Ops) und **Farb-Konverter** (`#hex` / `rgb()` / `hsl()` in jede Richtung).
- 🎯 **Text-Expander — 3 Modi**: In-Popup-Suche · System-Hotkey (AX/UIA-In-Place-Replace + Electron-Fallback) · Direct hotkey → snippet slots (funktioniert auch in Terminals).
- 🔍 **Bildschirm-Region-OCR** (`Ctrl+Shift+O`) — Apple Vision (macOS) / WinRT (Windows) / Tesseract (Linux). PDF-grade Texterkennung ins Clipboard.
- 📾 **Region-Screenshot** (`Ctrl+Shift+S`) + **CleanShot-X-Style Vorschau-HUD** + **Annotations-Editor** (Pfeil / Text / Rect / Highlight / Blur). Dateinamen enthalten den Quell-App-Namen.
- 🎹 **Color Picker** (`Ctrl+Shift+C`) — `NSColorSampler`-Lupe / GDI-Overlay / Hex direkt ins Clipboard.
- 📁 **Finder-Selection-Actions** (`Ctrl+Shift+F`, macOS) — Multi-File-Batch-Resize / Optim / Open auf was auch immer du im Finder selektiert hast.
- đŸ–Œïž **Image-Tools** — Recolor (Logo-EinfĂ€rbung), ML-Cut-Out (UÂČ-Net ONNX, 4,5 MB embedded), Lanczos3-Resize mit Preset-Autocomplete.
- 💾 **Bruno (Brutto/Netto)** — deutscher Einkommensteuer-Rechner 2025 als Suchfeld-Befehl. Smart Defaults + Per-User-Override in Settings.
- 🚀 **App-Launcher** (Spotlight-like, macOS) — App-Name antippen, echtes Icon in der Zeile, Enter startet. Aktiviert bereits laufende Instanz statt Duplikat zu spawnen.
- 🟱 **Wakelock-LED** — pulsierende rote LED + `wake` Label im Popup-Footer wenn `wakelock=1` aktiv. Event-driven, kein Polling.
- ⚙ **Power-Commands** — `tr` / `tren` / `trde` (ĂŒbersetzen), `rz` / `optim` (Image), `kill` / `lock` / `reboot` / `shutdown` / `mute` / `freeze` (System), `wakelock=1/0` (Wachhalten), `rmvvls` (Text).
- 📓 **Snippets** (25 gebĂŒndelte AI-Prompts) · **Notes** (persistente Lesezeichen) · **Backup** (Single-File-JSON-Export).
- 🔒 **Local-first** — null Netzwerk-Calls, null Account, Daten nur unter `~/Library/Application Support/InspectorRust/history.db`. Encryption-Keys verlassen nie deine Maschine.
- 🎼 **Versteckte Games** — drei Easter-Egg-Trigger-Wörter. Du findest sie schon.

### 🧰 Tech-Stack

Tauri 2 (WebView2 / WKWebView) · Rust-Workspace (`core/rust-lib` geteilt, 2-Zeilen-Per-OS-Bundle-Shells) · React 19 + TypeScript 5 + Tailwind v4 + Vite 7 · gepackt als **~5 MB MSI** / **~5 MB DMG**. **253 Rust + 401 Frontend-Tests.** MIT-lizenziert.




Lines of code (live)


[![Version](https://img.shields.io/badge/version-0.38.0-blue?style=flat-square)](https://github.com/pepperonas/inspector-rust/releases)
[![License: MIT](https://img.shields.io/badge/license-MIT-green?style=flat-square)](./LICENSE)
[![CI](https://img.shields.io/github/actions/workflow/status/pepperonas/inspector-rust/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/pepperonas/inspector-rust/actions/workflows/ci.yml)
[![Release](https://img.shields.io/github/actions/workflow/status/pepperonas/inspector-rust/release.yml?branch=main&style=flat-square&label=release)](https://github.com/pepperonas/inspector-rust/actions/workflows/release.yml)
[![Latest Release](https://img.shields.io/github/v/release/pepperonas/inspector-rust?style=flat-square&label=download)](https://github.com/pepperonas/inspector-rust/releases/latest)
[![Last commit](https://img.shields.io/github/last-commit/pepperonas/inspector-rust?style=flat-square)](https://github.com/pepperonas/inspector-rust/commits/main)
[![Issues](https://img.shields.io/github/issues/pepperonas/inspector-rust?style=flat-square)](https://github.com/pepperonas/inspector-rust/issues)
[![Stars](https://img.shields.io/github/stars/pepperonas/inspector-rust?style=flat-square)](https://github.com/pepperonas/inspector-rust/stargazers)
[![Maintenance](https://img.shields.io/badge/maintained-yes-brightgreen?style=flat-square)](https://github.com/pepperonas/inspector-rust/commits/main)
[![Tests](https://img.shields.io/badge/tests-253%20Rust%20%2B%20401%20TS-success?style=flat-square)](https://github.com/pepperonas/inspector-rust/actions/workflows/ci.yml)
[![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen?style=flat-square)](./CONTRIBUTING.md)
[![Code Style](https://img.shields.io/badge/code%20style-clippy%20%2B%20eslint-orange?style=flat-square)](./scripts/check.sh)


[![Windows 11](https://img.shields.io/badge/Windows-11-0078D4?style=flat-square&logo=windows11&logoColor=white)](./win)
[![macOS](https://img.shields.io/badge/macOS-10.15+-000000?style=flat-square&logo=apple&logoColor=white)](./macos)
[![Apple Silicon](https://img.shields.io/badge/arm64-Apple%20Silicon-555555?style=flat-square&logo=apple&logoColor=white)](./macos)
[![x86_64](https://img.shields.io/badge/x86__64-supported-555555?style=flat-square)](#)
[![Linux](https://img.shields.io/badge/Linux-Ubuntu%20%7C%20Debian-brightgreen?style=flat-square&logo=linux&logoColor=white)](./linux/README.md)


[![Tauri 2](https://img.shields.io/badge/Tauri-2-FFC131?style=flat-square&logo=tauri&logoColor=white)](https://tauri.app)
[![Rust](https://img.shields.io/badge/Rust-stable-CE422B?style=flat-square&logo=rust&logoColor=white)](https://rustup.rs)
[![React 19](https://img.shields.io/badge/React-19-61DAFB?style=flat-square&logo=react&logoColor=black)](https://react.dev)
[![TypeScript 5](https://img.shields.io/badge/TypeScript-5-3178C6?style=flat-square&logo=typescript&logoColor=white)](https://www.typescriptlang.org)
[![Vite 7](https://img.shields.io/badge/Vite-7-646CFF?style=flat-square&logo=vite&logoColor=white)](https://vitejs.dev)
[![Tailwind CSS v4](https://img.shields.io/badge/Tailwind-v4-38BDF8?style=flat-square&logo=tailwindcss&logoColor=white)](https://tailwindcss.com)
[![pnpm](https://img.shields.io/badge/pnpm-10-F69220?style=flat-square&logo=pnpm&logoColor=white)](https://pnpm.io)
[![Node 20](https://img.shields.io/badge/Node-20+-339933?style=flat-square&logo=node.js&logoColor=white)](https://nodejs.org)
[![SQLite](https://img.shields.io/badge/SQLite-bundled-003B57?style=flat-square&logo=sqlite&logoColor=white)](https://sqlite.org)
[![ONNX Runtime](https://img.shields.io/badge/ONNX%20Runtime-bundled-005CED?style=flat-square&logo=onnx&logoColor=white)](https://onnxruntime.ai)
[![Apple Vision](https://img.shields.io/badge/Apple%20Vision-Live%20Text-000000?style=flat-square&logo=apple&logoColor=white)](#)
[![U2Net](https://img.shields.io/badge/U%C2%B2--Net-cutout-orange?style=flat-square)](https://github.com/xuebinqin/U-2-Net)


[![AES-256-GCM](https://img.shields.io/badge/encryption-AES--256--GCM-darkgreen?style=flat-square&logo=letsencrypt&logoColor=white)](./docs/encryption.md)
[![Keychain-backed](https://img.shields.io/badge/keys-OS%20keychain-555555?style=flat-square)](./docs/encryption.md)
[![Local-first](https://img.shields.io/badge/local--first-yes-brightgreen?style=flat-square)](#)
[![No telemetry](https://img.shields.io/badge/telemetry-none-brightgreen?style=flat-square)](#)
[![Offline](https://img.shields.io/badge/network-not%20required-brightgreen?style=flat-square)](#)
[![Power user](https://img.shields.io/badge/audience-power%20users-blueviolet?style=flat-square)](#)
[![Keyboard-first](https://img.shields.io/badge/UX-keyboard--first-blueviolet?style=flat-square)](#)


[![ESLint](https://img.shields.io/badge/ESLint-flat%20config-4B32C3?style=flat-square&logo=eslint&logoColor=white)](https://eslint.org)
[![Vitest](https://img.shields.io/badge/Vitest-3-6E9F18?style=flat-square&logo=vitest&logoColor=white)](https://vitest.dev)
[![cargo test](https://img.shields.io/badge/cargo%20test-216%20passing-success?style=flat-square&logo=rust&logoColor=white)](#)
[![vitest](https://img.shields.io/badge/vitest-224%20passing-success?style=flat-square&logo=vitest&logoColor=white)](#)
[![cargo clippy](https://img.shields.io/badge/cargo%20clippy-D%20warnings-success?style=flat-square&logo=rust&logoColor=white)](#)
[![tsc strict](https://img.shields.io/badge/tsc-strict-3178C6?style=flat-square&logo=typescript&logoColor=white)](#)
[![Prettier](https://img.shields.io/badge/code%20style-Prettier-F7B93E?style=flat-square&logo=prettier&logoColor=black)](https://prettier.io)


[![Issues](https://img.shields.io/github/issues/pepperonas/inspector-rust?style=flat-square)](https://github.com/pepperonas/inspector-rust/issues)
[![Closed issues](https://img.shields.io/github/issues-closed/pepperonas/inspector-rust?style=flat-square&color=success)](https://github.com/pepperonas/inspector-rust/issues?q=is%3Aissue+is%3Aclosed)
[![PRs](https://img.shields.io/github/issues-pr/pepperonas/inspector-rust?style=flat-square)](https://github.com/pepperonas/inspector-rust/pulls)
[![Stars](https://img.shields.io/github/stars/pepperonas/inspector-rust?style=flat-square)](https://github.com/pepperonas/inspector-rust/stargazers)
[![Forks](https://img.shields.io/github/forks/pepperonas/inspector-rust?style=flat-square)](https://github.com/pepperonas/inspector-rust/network/members)
[![Watchers](https://img.shields.io/github/watchers/pepperonas/inspector-rust?style=flat-square)](https://github.com/pepperonas/inspector-rust/watchers)
[![Contributors](https://img.shields.io/github/contributors/pepperonas/inspector-rust?style=flat-square)](https://github.com/pepperonas/inspector-rust/graphs/contributors)
[![Last commit](https://img.shields.io/github/last-commit/pepperonas/inspector-rust?style=flat-square)](https://github.com/pepperonas/inspector-rust/commits/main)
[![Commit activity](https://img.shields.io/github/commit-activity/m/pepperonas/inspector-rust?style=flat-square)](https://github.com/pepperonas/inspector-rust/commits/main)
[![Repo size](https://img.shields.io/github/repo-size/pepperonas/inspector-rust?style=flat-square)](https://github.com/pepperonas/inspector-rust)
[![Code size](https://img.shields.io/github/languages/code-size/pepperonas/inspector-rust?style=flat-square)](https://github.com/pepperonas/inspector-rust)
[![Top language](https://img.shields.io/github/languages/top/pepperonas/inspector-rust?style=flat-square)](https://github.com/pepperonas/inspector-rust)
[![Languages](https://img.shields.io/github/languages/count/pepperonas/inspector-rust?style=flat-square)](https://github.com/pepperonas/inspector-rust)
[![Made with love](https://img.shields.io/badge/made%20with-%E2%99%A5-red?style=flat-square)](#)


[![Monorepo](https://img.shields.io/badge/repo-pnpm%20workspace-F69220?style=flat-square&logo=pnpm&logoColor=white)](./pnpm-workspace.yaml)
[![Workspace crates](https://img.shields.io/badge/cargo%20workspace-3%20crates-CE422B?style=flat-square&logo=rust&logoColor=white)](./Cargo.toml)
[![Single binary](https://img.shields.io/badge/distribution-single%20binary-blue?style=flat-square)](#)
[![Native](https://img.shields.io/badge/no-Electron-success?style=flat-square)](#)
[![Memory](https://img.shields.io/badge/memory-%3C50%20MB-blue?style=flat-square)](#)
[![Cold start](https://img.shields.io/badge/cold%20start-%3C200%20ms-blue?style=flat-square)](#)
[![MSI size](https://img.shields.io/badge/MSI-~5%20MB-blue?style=flat-square&logo=windows&logoColor=white)](#)
[![DMG size](https://img.shields.io/badge/DMG-~5%20MB-blue?style=flat-square&logo=apple&logoColor=white)](#)
[![exe size](https://img.shields.io/badge/.exe-~14%20MB-blue?style=flat-square&logo=windows&logoColor=white)](#)


[![IPC commands](https://img.shields.io/badge/IPC%20commands-73-blueviolet?style=flat-square)](./core/rust-lib/src/commands.rs)
[![Tauri events](https://img.shields.io/badge/events-11-blueviolet?style=flat-square)](#)
[![Rust modules](https://img.shields.io/badge/Rust%20modules-24-CE422B?style=flat-square&logo=rust&logoColor=white)](./core/rust-lib/src)
[![Snippets](https://img.shields.io/badge/AI%20prompts-25%20bundled-blueviolet?style=flat-square)](./docs/ai-prompts.md)
[![Tabs](https://img.shields.io/badge/popup%20tabs-4-blueviolet?style=flat-square)](#)
[![DB tables](https://img.shields.io/badge/SQLite%20tables-4-003B57?style=flat-square&logo=sqlite&logoColor=white)](./docs/encryption.md)
[![Global shortcuts](https://img.shields.io/badge/global%20hotkeys-4-blueviolet?style=flat-square)](#)
[![Snippet expansion modes](https://img.shields.io/badge/expansion%20modes-3-blueviolet?style=flat-square)](./docs/text-expander.md)
[![Image formats](https://img.shields.io/badge/image%20formats-5-blueviolet?style=flat-square)](#)


[![SemVer](https://img.shields.io/badge/semver-2.0-blue?style=flat-square)](https://semver.org)
[![Keep a Changelog](https://img.shields.io/badge/changelog-Keep%20a%20Changelog-orange?style=flat-square)](https://keepachangelog.com)
[![Conventional Commits](https://img.shields.io/badge/commits-conventional-orange?style=flat-square)](https://www.conventionalcommits.org)
[![ARIA](https://img.shields.io/badge/a11y-keyboard%20first-blueviolet?style=flat-square)](#)
[![ADRs in CHANGELOG](https://img.shields.io/badge/ADRs-in%20CHANGELOG-orange?style=flat-square)](./CHANGELOG.md)


[![macOS TCC: Accessibility](https://img.shields.io/badge/macOS%20TCC-Accessibility-000000?style=flat-square&logo=apple&logoColor=white)](./docs/text-expander.md)
[![macOS TCC: Screen Recording](https://img.shields.io/badge/macOS%20TCC-Screen%20Recording-000000?style=flat-square&logo=apple&logoColor=white)](#)
[![Autostart](https://img.shields.io/badge/autostart-LaunchAgent%20%2F%20RegRun-blue?style=flat-square)](./CHANGELOG.md)
[![Tray icon](https://img.shields.io/badge/UI-tray%20resident-blue?style=flat-square)](#)


[![rusqlite](https://img.shields.io/badge/rusqlite-bundled-CE422B?style=flat-square&logo=rust&logoColor=white)](https://crates.io/crates/rusqlite)
[![enigo](https://img.shields.io/badge/enigo-paste%20sim-CE422B?style=flat-square&logo=rust&logoColor=white)](https://crates.io/crates/enigo)
[![clipboard-rs](https://img.shields.io/badge/clipboard--rs-event%20driven-CE422B?style=flat-square&logo=rust&logoColor=white)](https://crates.io/crates/clipboard-rs)
[![ort](https://img.shields.io/badge/ort-ONNX%20Runtime-CE422B?style=flat-square&logo=rust&logoColor=white)](https://crates.io/crates/ort)
[![ring](https://img.shields.io/badge/ring-AES--256--GCM-CE422B?style=flat-square&logo=rust&logoColor=white)](https://crates.io/crates/ring)
[![objc2](https://img.shields.io/badge/objc2-Vision%20FFI-CE422B?style=flat-square&logo=rust&logoColor=white)](https://crates.io/crates/objc2)
[![Fuse.js](https://img.shields.io/badge/fuse.js-fuzzy%20search-005571?style=flat-square)](https://www.fusejs.io)
[![lucide-react](https://img.shields.io/badge/icons-lucide--react-F56565?style=flat-square)](https://lucide.dev)
[![react-virtual](https://img.shields.io/badge/list-react--virtual-FF4154?style=flat-square&logo=react&logoColor=white)](https://tanstack.com/virtual)


[![Inspired by Alfred](https://img.shields.io/badge/inspired%20by-Alfred-blueviolet?style=flat-square)](#)
[![Mouse-free](https://img.shields.io/badge/mouse-not%20required-brightgreen?style=flat-square)](#)
[![Self-hosted](https://img.shields.io/badge/data-on%20your%20disk-brightgreen?style=flat-square)](#)
[![Free forever](https://img.shields.io/badge/free-forever-brightgreen?style=flat-square)](./LICENSE)
[![Made in Germany](https://img.shields.io/badge/made%20in-Germany-FFCE00?style=flat-square)](#)

DrĂŒck `Ctrl+Shift+V` → suchen → einfĂŒgen. Inspiriert von Alfreds Clipboard-Viewer auf macOS, eingedampft auf ein Tool, das du auf jeder Maschine behalten kannst.

---

## Download

**Aktueller Release:** [![Latest Release](https://img.shields.io/github/v/release/pepperonas/inspector-rust?style=flat-square&label=latest&color=green)](https://github.com/pepperonas/inspector-rust/releases/latest) — siehe [CHANGELOG](./CHANGELOG.md) fĂŒr die Neuerungen.

| Plattform | Datei | Hinweise |
|-----------|-------|----------|
| **Windows 11 / 10** | [`InspectorRust__x64_en-US.msi`](https://github.com/pepperonas/inspector-rust/releases/latest) | MSI-Installer — fĂŒgt StartmenĂŒ-Eintrag & Uninstaller hinzu |
| **Windows 11 / 10** | [`inspector-rust.exe`](https://github.com/pepperonas/inspector-rust/releases/latest) | Standalone-Exe — keine Installation nötig |
| **macOS 10.15+ (Apple Silicon)** | [`InspectorRust__aarch64.dmg`](https://github.com/pepperonas/inspector-rust/releases/latest) | DMG fĂŒr arm64-Macs |
| **macOS Intel** | — | Aus Source bauen: [`macos/README.md`](./macos/README.md) |
| **Linux (Ubuntu/Debian)** | Aus Source bauen — siehe [`linux/README.md`](./linux/README.md) | `.deb` + AppImage via `pnpm build:linux` |

> **macOS-Gatekeeper-Hinweis.** Local-Build-Releases sind **nicht Apple-signiert**. Beim ersten Start weigert sich macOS, die App zu öffnen — Rechtsklick → **Öffnen** → bestĂ€tigen, oder **Systemeinstellungen → Datenschutz & Sicherheit → "Trotzdem öffnen"**. Dann **zwei** TCC-Permissions erteilen:
> - **Bedienungshilfen** — nötig fĂŒr Paste (`enigo` synthetisiert Cmd+V) und den system-weiten Text-Expander (Cmd+Shift+← / Cmd+C / Cmd+V-Zyklus).
> - **Bildschirmaufnahme** — nötig fĂŒr den OCR-Shortcut (`screencapture -i` wird Inspector Rust zugeordnet und macOS verweigert es ohne diese Berechtigung). Der Settings-Tab zeigt beide als zusammenklappbare amber Banner mit Ein-Klick-Sprung zum richtigen Privacy-Pane.
>
> Komplettes Setup in [`macos/README.md`](./macos/README.md).

---

## Plattform-Support

| Plattform | Status | Verzeichnis |
|------------|---------------------|-----------------------|
| Windows 11 | ✅ implementiert | [`win/`](./win) |
| macOS | ✅ implementiert | [`macos/`](./macos) |
| Linux | ✅ implementiert | [`linux/`](./linux) |

Die gesamte App-Logik lebt in [`core/`](./core) — ein einzelnes Frontend (`core/frontend`) und eine einzelne Rust-Library (`core/rust-lib`), die plattformĂŒbergreifend geteilt werden. Jedes OS hat seine eigene dĂŒnne Bundle-Shell mit plattformspezifischen Details (Installer-Config, Icons, Capabilities). Um eine neue Plattform hinzuzufĂŒgen, siehe [`CONTRIBUTING.md`](./CONTRIBUTING.md#adding-a-new-platform-shell-linux-etc).

## Workflow

Inspector Rust ist fĂŒr *einen* Workflow gebaut: **`Ctrl+Shift+V` → tippen → Enter**. Der Hotkey öffnet ein rahmenloses Popup ĂŒber dem aktiven Monitor; was du tippst, wird fuzzy durchsucht ĂŒber Clipboard-History, Snippets, Calc-Ergebnisse und Farbwerte; Enter fĂŒgt den Top-Match in die zuvor fokussierte App ein. Keine Maus, keine MenĂŒ-BĂ€ume, keine Per-App-Integrationen.

Drei weitere globale Shortcuts feuern von ĂŒberall — Inspector Rusts Fenster muss nicht offen oder fokussiert sein:

- **`Ctrl+Shift+O`** — Bildschirm-Region-**OCR**. Marquee ziehen, Apple Vision erkennt den Text in der Region, der Text landet auf deiner Zwischenablage + oben in der History.
- **`Ctrl+Shift+S`** *(v0.15.0+)* — Bildschirm-Region-**Screenshot**. Gleiche Marquee, kein OCR-Schritt: das aufgenommene PNG geht direkt auf die Zwischenablage und in die History. Ideal fĂŒr Diagramme, Buttons, Fotos oder Regionen ohne erkennbaren Text. **Als Datei speichern:** WĂ€hrend das Overlay offen ist **`S`** drĂŒcken — der Auswahlrahmen wird grĂŒn und nach dem Zeichnen erscheint ein nativer Speichern-Dialog statt des Clipboard-Schreibens *(v0.19.2+)*.
- **`Ctrl+Shift+C`** *(v0.17.0+)* — **Eyedropper**. Cursor wird zur NSColorSampler-Lupe (macOS) / GDI-Overlay (Windows); ein Klick auf ein Pixel und der Hex-Code (`#RRGGBB`) landet auf der Zwischenablage + History. Kein Popup, kein Modal — fire-and-forget.

Literal Control auf jedem OS — dieselbe Taste auf Windows und macOS. OCR + Screenshot benötigen auf macOS das **Bildschirmaufnahme**-TCC-Grant; auf Windows sind keine extra Berechtigungen nötig.

Alles andere (Snippets-Verwaltung, Notes, Settings, Image-Tools) lebt im selben Popup hinter Tabs oben rechts — es gibt kein separates Fenster zum Alt-Tabben. **Settings → Keyboard shortcuts** trĂ€gt das komplette Cheat-Sheet.

## Features & Shortcuts auf einen Blick


Inspector Rust — Keyboard-first Clipboard-Toolkit

### đŸ”„đŸ”„đŸ”„ Globale Hotkeys — fire and forget, von ĂŒberall đŸ”„đŸ”„đŸ”„

| Shortcut | Aktion | Benötigt (macOS) |
|----------|--------|------------------|
| `Ctrl+Shift+V` | Popup auf dem aktiven Monitor öffnen | — |
| `Ctrl+Shift+O` | Bildschirm-Region-**OCR** → Text auf Clipboard + History | Bildschirmaufnahme |
| `Ctrl+Shift+S` *(v0.15.0+)* | Bildschirm-Region-**Screenshot** → PNG auf Clipboard + History (kein OCR); **`S`** wĂ€hrend Overlay → als Datei speichern (grĂŒner Rahmen) *(v0.19.2+)* | Bildschirmaufnahme *(macOS)* |
| `Ctrl+Shift+C` *(v0.17.0+)* | **Eyedropper** → Hex (`#RRGGBB`) auf Clipboard + History | — |
| `Ctrl+Shift+F` *(v0.30.0+)* | **Finder-Selektion** → Popup mit gerade selektierten Dateien + Actions (Resize, Optim, 
) | Automation → Finder |
| `Alt+1` *(Default, konfigurierbar, opt-in)* | Snippet-Abbreviation in-place expandieren | Bedienungshilfen |
| *(user-konfigurierbar)* | **Direct hotkey → snippet** — bestimmten Snippet-Body pasten | Bedienungshilfen |

Literal Control auf jedem OS. Dieselbe Taste auf Windows und macOS. Der Expander-Hotkey ist opt-in (aus, bis du ihn in Settings → Text expander konfigurierst).

### Popup-Shortcuts — wenn das Popup offen ist

| Shortcut | Aktion |
|----------|--------|
| `↑` `↓` | In der Liste navigieren |
| `Shift+↑` `Shift+↓` *(v0.22.0+)* | System-LautstĂ€rke erhöhen / senken (±6 % pro Druck) |
| `Enter` | AusgewÀhlten Eintrag pasten (respektiert das Plain-Text-Setting) |
| `Shift+Enter` | Mit Originalformatierung pasten (ĂŒberschreibt das Plain-Text-Setting einmalig) |
| `Esc` | Popup schließen |
| `⌘B` / `Ctrl+B` | **Hintergrund freistellen** beim ausgewĂ€hlten Image-Eintrag (ML — UÂČ-Net) |
| `⌘S` / `Ctrl+S` | **Bild in Downloads speichern** (PNG unverĂ€ndert) |

### Komplette Feature-Matrix

| Feature | Wo triggern | Doku |
|---------|-------------|------|
| Clipboard-History (Text/RTF/HTML/PNG/Files, 1 000 EintrĂ€ge, dedupliziert) | `Ctrl+Shift+V` → suchen | core |
| Fuzzy-Suche (`fuse.js`, Threshold 0.4) | Im Suchfeld tippen | core |
| **Inline-Taschenrechner** | Ausdruck im Suchfeld tippen (`2+2`, `sqrt(9)`, `sin(pi/2)`, `0xff << 4`, 
) | core |
| **Farb-Konverter** | `#RRGGBB` / `rgb(
)` / `hsl(
)` im Suchfeld tippen → Swatch + alle Formate | [colors.md](./docs/colors.md) |
| **HSV-Color-Picker-Modal** | History-Tab → *Color Picker*-Button → Hue-Slider + Swatch + Hex/RGB/HSL-Tabs | [colors.md](./docs/colors.md) |
| **Screen-Eyedropper** (Modal) | *Color Picker*-Modal → *Pick from screen* (macOS `NSColorSampler`-Lupe / Windows GDI-Overlay) | [colors.md](./docs/colors.md) |
| **Eyedropper — globaler Hotkey** *(v0.17.0+)* | `Ctrl+Shift+C` oder Tray *Pick Color* → Hex direkt aufs Clipboard, kein Popup | [colors.md](./docs/colors.md) |
| Snippet-Search-as-you-type | Snippet-Abbreviation im Popup-Suchfeld tippen | [text-expander.md](./docs/text-expander.md) |
| Abbreviation-Expander (system-weit) | Abbreviation in irgendein Textfeld tippen → `Alt+1` (Default) | [text-expander.md](./docs/text-expander.md) |
| Direct hotkey → snippet *(v0.13.0+)* | User-bound globaler Hotkey | [text-expander.md](./docs/text-expander.md) |
| 25 gebĂŒndelte AI-Prompt-Snippets (`ai*`) | Snippets-Tab; Search / Abbreviation / Direct-Slot | [ai-prompts.md](./docs/ai-prompts.md) |
| Snippets CRUD + JSON-Import | Snippets-Tab → Formular / Import-Button | [snippets-import.md](./docs/snippets-import.md) |
| Notes — kategorisierte persistente Bookmarks | Notes-Tab (Tray: *Manage Notes*) | [notes.md](./docs/notes.md) |
| Clip als Note speichern | Hover ĂŒber History-Zeile → Bookmark-Icon | [notes.md](./docs/notes.md) |
| **Bildschirm-Region-OCR** *(v0.9.0+; Windows seit v0.19.2)* | `Ctrl+Shift+O` oder Tray *OCR Region* | core |
| **Bildschirm-Region-Screenshot** *(v0.15.0+; Windows seit v0.19.2)* | `Ctrl+Shift+S` oder Tray *Screenshot Region* | core |
| **Screenshot → als Datei speichern** *(v0.19.2+)* | `Ctrl+Shift+S` → **`S`** wĂ€hrend Overlay drĂŒcken (grĂŒner Rahmen) → nativer Speichern-Dialog | core |
| **Bild-Recolor** (Logo-Tinten, Chromaticity-gated) | Preview-Pane bei Image-Eintrag → Swatch / Hex | core |
| **ML-Hintergrund-Cutout** (UÂČ-Net-ONNX, ~4,5 MB embedded) | Preview-Pane → *Cut out background* oder `⌘B` | core |
| Bild in Downloads speichern | Preview-Pane oder `⌘S` (PNG unverĂ€ndert) | core |
| Backup — Single-File-JSON-Export/Import (History + Snippets + Notes, per-Sektion ankreuzbar) | Settings → Backup & restore | [backup.md](./docs/backup.md) |
| Plain-Text-only Paste *(Default an, v0.4.0+)* | Settings → Paste (Shift+Enter ĂŒberschreibt einmal) | core |
| Autostart bei Login *(v0.14.0+)* | Settings → Startup *oder* Tray-Checkmark | core |
| Clipboard-Capture pausieren | Tray → *Pause Capture* | core |
| History löschen (mit BestĂ€tigung) | Tray → *Clear History
* | core |
| **AES-256-GCM at-rest** (alle Bodies) *(v0.6.0+)* | Automatisch; Key im OS-Keychain | [encryption.md](./docs/encryption.md) |
| Per-Monitor-Popup-Placement | Automatisch (öffnet auf Monitor mit Cursor) | core |
| Multi-Tab-UI | Popup oben-rechts Tabs: History · Snippets · Notes · Settings | core |
| Permissions-UX (TCC-Banner + 1-s-Polling + `tccutil reset`-Recovery) | Settings → Permissions-Sektion *(macOS)* | core |
| Keyboard-Shortcuts-Cheat-Sheet | Settings → *Keyboard shortcuts* (OS-adaptive Glyphen) | core |
| About-Dialog | Settings → About | core |
| **Theme — Hell / Dunkel / System** *(v0.20.0+)* | Settings → Appearance | Drei-Wege-Toggle; Hell/Dunkel ĂŒberschreiben das OS, System folgt ihm |
| **Power-Command — `tren `** *(v0.18.0+)* | Suchfeld | Englisch → Deutsch ĂŒbersetzen (öffnet Google Translate im Browser) |
| **Power-Command — `trde `** *(v0.18.0+)* | Suchfeld | Deutsch → Englisch ĂŒbersetzen (Google Translate) |
| **Power-Command — `tr `** *(v0.18.0+)* | Suchfeld | Text → Deutsch ĂŒbersetzen (auto-detect Quellsprache) |
| **Power-Command — `rz x`** *(v0.18.0+)* | Suchfeld | Clipboard-Bild via Lanczos3 skalieren (z.B. `rz 1200x800`) |
| **Power-Command — `optim`** *(v0.18.0+)* | Suchfeld | Clipboard-PNG optimieren → `~/Downloads/inspector-rust-optim-.png` (lossless oxipng) |
| **Power-Command — `rmvvls `** *(v0.18.0+)* | Suchfeld | Vokale entfernen (aeiou + AEIOU + Ă€/ö/ĂŒ) → Clipboard |
| **System-Command — `kill [-9] [pattern]`** *(v0.19.0+)* | Suchfeld — Live-Prozess-Picker | Laufende Prozesse filtern, Enter → BestĂ€tigung → SIGTERM (oder SIGKILL mit `-9`) |
| **System-Command — `reboot`** *(v0.19.0+)* | Suchfeld | System neu starten (macOS — Confirm zuerst, kein sudo) |
| **System-Command — `shutdown`** *(v0.19.0+)* | Suchfeld | System herunterfahren (macOS — Confirm zuerst, kein sudo) |
| **System-Command — `lock`** *(v0.19.0+)* | Suchfeld | Bildschirm sperren (macOS — sofort, kein Confirm) |
| **System-Command — `mute`** *(v0.23.0+)* | Suchfeld | System-Stummschaltung an/aus toggeln (macOS) |
| **System-Command — `freeze`** *(v0.28.0+)* | Suchfeld | Tastatur + Maus blocken — entsperren mit konfiguriertem Chord (Default `i + r`) — natives CGEventTap, kein rdev |
| **`wakelock=1` / `wakelock=0`** *(v0.29.0+)* | Suchfeld | Computer wachhalten — Cursor wackelt alle 60 s um 1 px; trickst Teams/Slack "Abwesend" + Bildschirmschoner-Timer aus (macOS / Windows / Linux X11) |
| **Finder-Selection-Actions** *(v0.30.0+, macOS)* | `Ctrl+Shift+F` | Popup listet die im Finder selektierten Dateien; `rz 1200x800` tippen skaliert alle Bilder (schreibt `-1200x800.` neben Quelle), `optim` lÀuft oxipng auf jedes PNG. Enter auf einer Zeile öffnet die Datei |
| **Resize-Preset-Autocomplete** *(v0.31.0+)* | `rz` oder `rz ` tippen | Beschriftete Preset-Zeilen (Full HD, HD, XGA, SVGA, 
); Enter fĂŒhrt aus, Tab / → fĂŒllt ins Suchfeld vor dem AusfĂŒhren |
| **`bruno <€>[m|j]`** *(v0.33.0+)* | Suchfeld — `bruno 60000` (jĂ€hrlich) oder `bruno 5000m` (monatlich) | Deutscher Brutto→Netto-Rechner (Steuerjahr 2025); Preview-Panel zeigt volle Aufteilung (KV/PV/RV/AV/ESt/Soli/Kirche/Abgabenquote/Grenzsteuersatz); Enter kopiert Netto-Betrag ins Clipboard. Persönliche Defaults (Steuerklasse, Bundesland, Kinder, Kirche, KV-Zusatz) in Settings → Bruno |
| **Screenshot-Vorschau-HUD** *(v0.32.0+)* | Nach `Ctrl+Shift+S` | CleanShot-X-Style schwebende Karte mit X / Pin / Copy / Save / Edit / Cloud Buttons ĂŒber dem PNG. Pin behĂ€lt die Vorschau ĂŒber den nĂ€chsten Screenshot |
| **Annotations-Editor** *(v0.32.0+)* | Vorschau-HUD → Stift-Button | Neues Fenster mit 5 Tools: Pfeil / Text / Rect / Highlight / Blur (Mosaik-Pixelung). 4 Farb-Presets, 2–16 px Stroke, ⌘Z/⌘⇧Z undo/redo, ⌘S speichern, Esc abbrechen. Save backt zu `--edited.png` |
| **App-Name in Screenshot-Dateinamen** *(v0.32.0+)* | Automatisch | `osascript`-gefangener Frontmost-App-Name im gespeicherten Dateinamen: `Safari-20260524-153012.png`. Bearbeitete Varianten bekommen `-edited`-Suffix |
| Power-Command-Autocomplete | Teil-Keyword tippen (`tre`, `rm`, `reb`, `bru`, 
) → Vorschlag als `hint`-Zeile | core |

## Features

### Clipboard-Core
- **Globaler Hotkey** `Ctrl+Shift+V` öffnet das Popup zentriert auf dem Monitor mit dem Cursor.
- **Erfasst** Text, RTF, HTML, Bilder (PNG, ≀ 5 MB), und Datei-Listen via OS-nativen Clipboard-Events (kein Polling). Image-vor-Files-PrioritĂ€t auf macOS, sodass Finder-Image-Copies als Bitmaps landen, nicht als Pfade.
- **Fuzzy-Suche** (`fuse.js`, Threshold 0.4) rankt Matches wÀhrend du tippst. Virtualisierte Liste, per-Content-Type Preview-Panel.
- **Auto-Paste** — Enter pasted via `enigo`-simuliertem `Ctrl+V` / `Cmd+V` in die zuvor fokussierte App. Shift+Enter ĂŒberschreibt das Plain-Text-Setting und pasted mit Originalformatierung.
- **SQLite-Store** unter `%APPDATA%\InspectorRust\history.db` / `~/Library/Application Support/InspectorRust/history.db`. SHA-256-dedupliziert, Cap bei 1 000 EintrÀgen.
- **AES-256-GCM at-rest** seit v0.6.0 — Text-/HTML-/RTF-/Image-Bodies, Snippet-Bodies, Note-Bodies. SchlĂŒssel im OS-Keychain (Keychain / Credential Manager / Secret Service), 0600-Keyfile-Fallback. Volle Referenz: [`docs/encryption.md`](./docs/encryption.md).
- **Time-Chip** (v0.10.3) — der relative Time-Hint auf jeder Zeile (`just now`, `1h ago`) wird zu einem winzigen klickbaren Button: Hover zeigt sowohl `Captured` als auch `Last used` als absolute Timestamps in einem Tooltip; Klick schaltet den Chip selbst zwischen relativer und absoluter Anzeige um.

### Text-Expander (Snippets, v0.2 — system-weit v0.2.7, Hotkey-Überholung v0.12.0, Direct Slots v0.13.0)
- **Expansion im Popup** — tippe eine Abbreviation ins Suchfeld; matching Snippets erscheinen ĂŒber Clipboard-EintrĂ€gen; Enter pasted den Body.
- **Abbreviation-Expander** — tippe die Abbreviation in *irgendein* Textfeld, drĂŒcke den konfigurierten Hotkey (Default `Alt+1`, opt-in via Settings; Ein-Klick-Presets `Alt+1` / `Alt+2` / `Alt+3`, oder beliebige Kombination aufnehmen), Inspector Rust ersetzt sie in-place. Drei Pfade: AX/UIA in-place-Ersatz (native Apps — keine Clipboard-BerĂŒhrung, kein Flicker, verifiziert durch erneutes Lesen des Werts); AX-select-then-paste-over-selection fĂŒr Electron / Chromium / Mac-Catalyst-Apps, die `AXValue` read-only freigeben (WhatsApp, Slack, Discord, VS Code — v0.12.0); und ein Clipboard+Keystroke-Fallback fĂŒr alles andere. Der Diagnose-Button in Settings sagt, welcher Pfad benutzt wurde.
- *Warum `Alt+1` und nicht `Alt+Backquote`?* Der alte Default war auf deutschen ISO-MacBooks unerreichbar (die physische `^`-Taste meldet sich als `IntlBackslash`). Ziffernreihe-Tasten sind layout-stabil ĂŒberall. Ein un-customised alter Install wird einmal beim Upgrade auf `Alt+1` migriert (ĂŒberschreibt keinen Wert, den du absichtlich neu gewĂ€hlt hast).
- **Direct hotkey → snippet slots (v0.13.0)** — binde einen Hotkey direkt an ein Snippet (Settings → *Direct hotkey → snippet*); DrĂŒcken pasted den Body am Cursor mit **keiner getippten Abbreviation**. Liest nichts vom fokussierten Feld — schreibt nur den Body auf die Zwischenablage, synthetisiert Paste, stellt die Zwischenablage wieder her — funktioniert daher in **jeder** App, **inklusive Terminals** (iTerm2, Terminal.app, 
), wo der Abbreviation-Expander die Input-Zeile nicht sehen kann. Kollisionen mit Popup-/OCR-/Abbreviation-Hotkeys werden abgelehnt.
- **Laut bei Permission-Fail (macOS, v0.12.0)** — wenn Accessibility nicht erteilt ist, no-opt der Hotkey nicht lĂ€nger still: Inspector Rust öffnet sein Popup, wechselt auf Settings und zeigt ein amber Banner mit `Force re-grant` → `Restart now`. (Selbes Pattern wie OCR-/Paste-Banner. Direct Slots nutzen dasselbe Gate + Banner.)
- **Snippets-Tab** zum Erstellen/Editieren/Löschen mit zweispaltigem Formular. **JSON-Import** via Snippets → Import (`docs/snippets-import.md`, thematische Samples in `docs/examples/snippets/`).
- Caveat: der **Abbreviation**-Expander kann auf einer Terminal-Befehlszeile nicht funktionieren (keine AX-exponierte Input-Zeile, kein GUI-"vorheriges Wort markieren" auf einem Shell-Prompt — benutze in Terminals einen *Direct hotkey → snippet*-Slot oder das Popup). Image-/Files-Snippets werden nicht expandiert (nur Text).
- Volle Referenz: [`docs/text-expander.md`](./docs/text-expander.md).

### 25 gebĂŒndelte AI-Prompt-Snippets (v0.5.0, ĂŒberarbeitet v0.12.0)
First-Launch seedet deine Snippet-Tabelle mit `ai*`-prefixed Prompts ĂŒber Programmierung, Web, IT-Security, Business, Daten und API-Design (`aiplan`, `aireview`, `airefactor`, `airegex`, `aisql`, `aitest`, `aimigration`, `aithumb`, `aithreat`, `aipentest`, `aibrief`, `aiml`, `aiapi`, 
). Jeder Prompt ist die **strukturierte Anweisungs-HĂ€lfte only** — keine `[REQUIREMENT]`-artigen Fill-in-Slots (entfernt in v0.12.0). Du hĂ€ngst ihn an deinen eigenen Prompt / Code / Kontext an und das LLM nimmt das Thema von dort auf. Idempotent (gelöschte Prompts bleiben gelöscht), wiederherstellbar von der Snippets-Sidebar — existierende Installs klicken *Restore defaults*, um den v0.12.0-Stil aufzugreifen. Komplette Liste: [`docs/ai-prompts.md`](./docs/ai-prompts.md).

### Inline-Taschenrechner (v0.2.5)
Tippe einen Mathe-Ausdruck ins Suchfeld, das Ergebnis erscheint als oberster Listen-Eintrag — Alfred-Style. Enter zum Pasten.

- Operatoren `+ - * / % ^`, unĂ€r `+/-`, Klammern. Zahlen: int/dezimal/wissenschaftlich/`1_000`-gruppiert. Konstanten: `pi`/`π`, `tau`, `e`. Funktionen: `sqrt`, `cbrt`, `abs`, `sign`, `floor`/`ceil`/`round`, `ln`/`log`/`log2`, `exp`, Trig + Hyperbolisch + Invers, `min`/`max`/`pow`/`mod`.
- Aktiviert nur bei AusdrĂŒcken mit mindestens einem Operator/Function/Konstante — pure Zahlen und Text triggern nicht. Force-Evaluation einer Literale mit `=`-Prefix (`=pi`).
- Sicherer Recursive-Descent-Parser in [`calc.ts`](./core/frontend/src/lib/calc.ts), kein `eval`. 27 Tests.

### Farb-Tools (v0.4.0 → v0.5.2)
- **Inline-Hex-Preview** — tippe `#3366FF` (auch `3366ff`, `#abc`, `#abcdef12`) → Swatch + Hex + RGB-Zeile oben → Enter pasted Großbuchstaben `#RRGGBB`.
- **HSV-Picker-Modal** — Hue-Slider, großes Swatch, Output-Tabs fĂŒr Hex / RGB / HSL, Zwei-Klick-Auswahl (kein stiller Default), Copy via Tauri-Clipboard-Plugin (umgeht WKWebView-Restriktionen).
- **Pixel vom Bildschirm picken** — sample irgendein Pixel auf dem Desktop. macOS: Apples `NSColorSampler`-Lupe. Windows: Fullscreen-Overlay + `GetPixel`. Modul: [`screen_picker.rs`](./core/rust-lib/src/screen_picker.rs).
- Frontend in [`colors.ts`](./core/frontend/src/lib/colors.ts) + [`ColorPickerModal.tsx`](./core/frontend/src/components/ColorPickerModal.tsx). 32 Tests. Referenz: [`docs/colors.md`](./docs/colors.md).

### Bildschirm-Region-OCR (v0.9.0, macOS)
DrĂŒck `Ctrl+Shift+O` (oder nutze den Tray-Eintrag **OCR Region**) → Marquee ĂŒber jeden Text auf dem Bildschirm ziehen → Inspector Rust lĂ€uft Apple Vision ĂŒber die Auswahl und schreibt den erkannten Text direkt auf deine Zwischenablage. Der Text landet oben in der History; das Source-PNG wird als separater Image-Eintrag direkt darunter aufbewahrt, sodass du eine andere Region nochmal OCR'en kannst ohne den Screenshot neu zu machen, und Enter auf dem auto-selected Top-Eintrag pasted den **Text**, nicht den Screenshot (Ordering gefixt in v0.14.2). Der Hotkey ist **literal Control** auch auf macOS (v0.14.1+ — frĂŒhere Builds nutzten `⌘⇧O`, was mit IDE-Bindings kollidierte).

- **Region-Picker** — nutzt `screencapture -i` (dasselbe Binary wie Cmd+Shift+4), sodass die Marquee-UX die polierte ist, die User schon kennen. Esc cancelt sauber.
- **Engine** — Visions `VNRecognizeTextRequest` mit accuracy=Accurate + Sprach-Korrektur; selbe Engine, die Apple Live Text antreibt. Kein Model-Bundling, kein Netzwerk.
- **Sprachen** — was auch immer dein macOS-Vision-Install unterstĂŒtzt (Latein + CJK + Arabisch + Kyrillisch auf macOS 13+).
- **Windows** *(v0.19.2+)* — implementiert via WinRT `Windows.Media.Ocr` + `Windows.Graphics.Imaging`. Nutzt die bereits auf deinem Windows-System installierten Sprachpakete (Einstellungen → Zeit & Sprache → Sprache) — keine Extras nötig.
- Module: [`region_picker.rs`](./core/rust-lib/src/region_picker.rs), [`ocr.rs`](./core/rust-lib/src/ocr.rs).

### Image-Tools — Recolor + ML-Cutout + Save (v0.7.0 → v0.10.x)
Auf ausgewÀhlten Image-EintrÀgen zeigt das Preview-Panel drei Aktionen:

- **Recolor** (v0.7.0) — fĂŒr ĂŒberwiegend graustufige PNGs (Logos / Icons / Silhouetten), 9 Preset-Swatches + Custom-Hex fĂ€rben das Bild. RGB-Lerp von Target → Weiß pro Pixel-Luminanz, Alpha bleibt erhalten. GesĂ€ttigte Fotos werden automatisch aus der Toolbar versteckt (Chromaticity-Gate). FĂŒgt die getintete Version als neuen History-Eintrag hinzu; das Original bleibt.
- **Cut out background** (v0.10.0) — lĂ€sst das **UÂČ-Net (U2Netp) ONNX-Model** (~4,5 MB embedded) ĂŒber das Bild laufen, um das Foreground-Subject zu detektieren; Output ist ein transparentes PNG, gespeichert nach `~/Downloads/-cutout-.png`. Shortcut `Cmd/Ctrl+B`. Funktioniert mit echten Fotos (Flugzeug am Himmel, Person vor unruhigem Hintergrund, 
) — selbe Architektur wie Pythons `rembg`, nur ohne Python. Inference lĂ€uft via `ort` (ONNX Runtime, statisch ins Binary gelinkt).
- **Save to Downloads** (v0.10.1) — drop den ausgewĂ€hlten Image-Eintrag auf die Platte als `~/Downloads/inspector-rust-image-.png` unverĂ€ndert. Shortcut `Cmd/Ctrl+S`. Companion zum Recolor: wĂ€hle den frisch-getinteten History-Eintrag, drĂŒck `Cmd+S`, deine Datei liegt in Downloads.
- **Inputs:** PNG, JPEG, WebP, GIF, BMP — fĂŒr Clipboard-Image-EintrĂ€ge *und* Single-File-Files-EintrĂ€ge (eine aus Finder kopierte JPG funktioniert also auch). Output ist immer RGBA-PNG.
- Module: [`recolor.rs`](./core/rust-lib/src/recolor.rs), [`cutout_ml.rs`](./core/rust-lib/src/cutout_ml.rs). Der Legacy-Chroma-Key-Cutout in [`cutout.rs`](./core/rust-lib/src/cutout.rs) wird als Fast-Path-Option behalten, aber per Default nicht benutzt. 16-MP-Cap auf Inputs. GebĂŒndeltes Model: [`core/rust-lib/models/u2netp.onnx`](./core/rust-lib/models/u2netp.onnx) (Apache-2.0).

### Notes (v0.2.6)
Persistente, kategorisierte Clipboard-Items in einer separaten SQLite-Tabelle — **nicht** unterworfen dem 1 000-EintrĂ€ge-Pruning.

- **Bookmark aus History** — Hover ĂŒber jede Zeile → Bookmark-Icon → Eintrag landet in Notes/`Uncategorized`. Entkoppelt vom Source-Clip; ĂŒberlebt Pruning.
- **Notes-Tab** — drei Panes: Kategorien-Sidebar (mit Counts; virtuelle `All` / `Uncategorized`), Liste, Detail/Edit. Frei-formige Kategorien (``-Autocomplete). Editierbare Bodies fĂŒr Text/HTML/RTF; Image-/Files-Notes sind read-only. Per-Row-Delete + Clear All mit BestĂ€tigung.
- **+ New Note** fĂŒr from-Scratch-EintrĂ€ge. Tray-Shortcut: **Manage Notes** öffnet das Popup direkt hier.
- Referenz: [`docs/notes.md`](./docs/notes.md).

### Backup — Single-File-JSON-Export/Import (v0.2.6+)
Settings-Tab → *Backup & restore* → History / Snippets / Notes einzeln ankreuzen → Export in eine JSON-Datei. Import merged zurĂŒck: Snippets upsert nach Abbreviation, History upsert nach SHA-256, Notes appended. Versioniertes Schema — neuere Backups werden abgelehnt statt still zu kappen. Referenz: [`docs/backup.md`](./docs/backup.md).

### Plain-Text-Paste (Default an, v0.4.0)
HTML- / RTF-Clipboard-EintrĂ€ge werden zur Paste-Zeit auf ihren Text-Preview gestrippt, sodass Copy-aus-Word / -Browser / -Mail nicht lĂ€nger Styling in andere Apps leakt. Toggle in Settings → Paste. Shift+Enter im Popup ĂŒberschreibt fĂŒr einen Paste.

### Permissions-UX (v0.11.0)
Inspector Rust braucht **zwei** unabhĂ€ngige macOS-TCC-Grants — Accessibility (Paste + Text-Expander) und Bildschirmaufnahme (OCR + Screenshot-Region). Der Settings-Tab zeigt jeden als zusammenklappbares amber Banner, das:

- Laut bleibt (Border + Warn-Icon + primĂ€rer `Open System Settings`-Button), wenn fehlend, aber per Default zu einer einzelnen Zeile kollabiert, damit die Page nicht zugemĂŒllt ist.
- Pre-checked, bevor der relevante native Call invoked wird. OCR returnt eine `screen.permission_denied`-Sentinel statt still zu failen, wenn Bildschirmaufnahme verweigert ist; ein Tauri-Event öffnet das Popup + flippt ein In-App-Toast-Banner, das auf den richtigen Pane zeigt.
- Pollt das Grant einmal pro Sekunde, solange nicht erteilt, sodass das Badge ~1 s nach dem Toggle in den System Settings auf grĂŒn flippt — kein Panel-Reload nötig.
- Jedes Banner hat einen `tccutil reset`-Recovery-Button fĂŒr den "Toggle ist an, aber der laufende Prozess sieht immer noch denied"-Stale-cdhash-State.

### Discoverability (v0.10.7)
- **Footer-Hints** — `⌃⇧O OCR` + `⌃⇧S Shot` + `⌃⇧C Color` neben dem `⏎ Paste · ↑↓ Navigate · Esc Close`-Strip gerendert, sodass User alle globalen Shortcuts jedes Mal sehen, wenn sie das Popup öffnen.
- **Settings → Keyboard shortcuts** — Drei-Gruppen-Cheat-Sheet (Global / Popup-Nav / Image-Actions), das jeden Shortcut der App abdeckt. Modifier-Glyphs (`⌘` vs `Ctrl`, `⇧` vs `Shift`, `⌄` vs `Alt`) passen sich ans laufende OS an via dem `IS_MAC`-Helper in [`core/frontend/src/lib/platform.ts`](./core/frontend/src/lib/platform.ts).
- **About-Dialog** — Settings → About öffnet ein Modal mit Version, License, Jahr, Zielgruppe und einer tabellarischen Tech-Stack-Übersicht.

### Screenshot-Vorschau-HUD + Editor (v0.32.0)
- **CleanShot-X-Style-HUD** — nach `Ctrl+Shift+S` schwebt der PNG als Hintergrund einer kleinen dunklen Karte mit sechs Controls darĂŒber: **X** (oben-links, verwerfen), **Pin** (oben-rechts, Vorschau ĂŒber nĂ€chsten Screenshot halten), **Copy** + **Save** (mittlere Pillen), **Stift** (Editor öffnen), **Cloud** (Placeholder — kommt noch).
- **App-Name im Dateinamen** — `osascript` liest die Frontmost-App *bevor* der Region-Picker startet; gespeicherte Datei wird `Safari-20260524-153012.png`. Alphabetische Sortierung im Finder gruppiert nach App. Bearbeitete Varianten bekommen `-edited` Suffix.
- **Annotations-Editor** — Stift öffnet ein separates Tauri-Fenster mit fĂŒnf Tools: **Pfeil / Text / Rect / Highlight / Blur** (Mosaik-Pixelung, sampled aus der Quelle, also Undo non-destruktiv). 4 Farb-Presets, 2–16 px Stroke. Hotkeys: `⌘Z`/`⌘⇧Z` undo/redo, `⌘S` speichern, `Esc` abbrechen, Tool-Switches per Einzel-Taste (`A`/`T`/`R`/`H`/`B`). Canvas ist in nativer Pixel-Auflösung des Screenshots, das gespeicherte PNG also full-resolution.
- **Pin-Verhalten** — solange gepinnt, schreibt der nĂ€chste Screenshot zwar weiterhin in Clipboard + History, ersetzt aber nicht die sichtbare Vorschau. NĂŒtzlich fĂŒr Batch-Capture-and-Annotate-Workflows.

### Finder-Selection-Actions (v0.30.0, macOS)
- **`Ctrl+Shift+F`** — `osascript` liest die Finder-Selection (mit TCC-Automation→Finder-Grant, beim ersten Mal angefragt). Popup öffnet sich mit den selektierten Dateien an der Spitze, jede mit `finder`-Chip.
- **Multi-File-`rz`** — `rz 1200x800` im Finder-Mode skaliert jedes selektierte Bild, schreibt `-1200x800.` neben Quelle (Format bleibt). Originale unangetastet.
- **Multi-File-`optim`** — gleiche Form: oxipng auf jedes selektierte PNG, schreibt `-optim.png` neben Quelle. Non-PNG-Selektionen werden ĂŒbersprungen (oxipng-only).
- **Permission via Settings** — die macOS-Permission-Karte hat drei Zeilen (Bedienungshilfen · Bildschirmaufnahme · Automation → Finder); "Set up permissions" cyclet alle drei mit einem Klick via `tccutil reset` + Re-Prompt.

### Bruno — Brutto/Netto-Rechner (v0.33.0)
- **Befehl** — `bruno 60000` (jĂ€hrlich) oder `bruno 5000m` (monatlich) im Suchfeld. Ergebnis-Zeile zeigt Netto/Monat + Netto/Jahr inline; Preview-Panel zeigt volle Aufteilung (KV / PV / RV / AV + ESt / Soli / Kirche + Abgabenquote + Grenzsteuersatz).
- **Smart Defaults** — Steuerklasse I, NRW, 0 Kinder, kein Kirchen-Mitglied, TK-Niveau 2,45 % KV-Zusatz. Persönliche Werte via **Settings → Bruno** (in SQLite-Settings persistiert; `bruno-defaults-changed`-Event aktualisiert das Popup ohne Restart).
- **Steuerjahr 2025** — §32a EStG (vereinfacht), Grundfreibetrag 12.096 €, Beitragsbemessungsgrenzen KV 66.150 € / RV 96.600 €. Portiert aus der [Steuerschleuder](https://steuerschleuder.celox.io/)-Web-App des Maintainers.
- **Pure-TS-Compute** — kein IPC-Roundtrip pro Tastendruck. Zahlenformat-toleranter Parser (`bruno 60.000` = `bruno 60,000` = `bruno 60000`). 32 Unit-Tests pinnen Compute + Parser. ⚠ Vereinfacht — kein Faktorverfahren, keine individuellen FreibetrĂ€ge. Keine Steuerberatung.

### `freeze` (v0.28.0)
- Natives macOS-`CGEventTap` (raw FFI auf `ApplicationServices` + `CoreFoundation`) blockt alle Tastatur- + Maus-Eingaben bis der konfigurierte Unlock-Chord (Default `i + r`) gedrĂŒckt wird. Installiert auf dem Main-Run-Loop via `CFRunLoopGetMain()` — Worker-Thread-Varianten haben Events auf Sonoma+ stillschweigend nicht gedroppt.

### `wakelock` (v0.29.0)
- **`wakelock=1`** (oder `wakelock1`) zum Aktivieren, **`wakelock=0`** zum Deaktivieren. Der Cursor springt alle 60 s 1 px nach rechts und sofort zurĂŒck — trickst macOS-Bildschirmschoner-/Display-Sleep-Timer aus, Teams- / Slack- / Discord-"Abwesend"-Detection, App-Level-Idle-UX. Worker nutzt Raw-FFI pro Plattform: macOS `CGEventCreateMouseEvent`, Windows `GetCursorPos` + `SetCursorPos`, Linux X11 `XQueryPointer` + `XWarpPointer` (gecachter `Display`). Wayland: no-op (Protokoll verbietet globale Cursor-Synth).

### System-Tray + Multi-Monitor
- **Tray-MenĂŒ:** Open · Manage Snippets · Manage Notes · **OCR Region (Ctrl+Shift+O)** · **Screenshot Region (Ctrl+Shift+S)** *(v0.15.0+)* · **Pick Color (Ctrl+Shift+C)** *(v0.17.0+)* · Pause Capture · ☑/☐ Start with Windows / Start at Login (Checkmark spiegelt State seit v0.14.0) · Clear History · Quit.
- **Autostart bei Login** (v0.14.0) — Toggle in Settings → Startup oder vom Tray-MenĂŒ. macOS schreibt `~/Library/LaunchAgents/InspectorRust.plist`; Windows nutzt den Run-Key-Registry-Eintrag. App startet hidden im Tray, sodass sie bereit ist, wenn der Popup-Hotkey trifft.
- **Multi-Monitor-Placement:** Popup öffnet auf dem Monitor mit dem Cursor, horizontal zentriert, ~⅓ von oben, geclamped auf die Bounds des aktiven Monitors (wichtig bei Mixed-DPI-Setups).

## Repository-Layout

```
inspector-rust/
├── core/
│ ├── frontend/ # React 19 + TS + Tailwind v4 (plattformĂŒbergreifend)
│ │ └── src/
│ │ ├── components/ # SearchBar, HistoryList/Item, PreviewPanel, SnippetsPanel, NotesPanel, 

│ │ ├── hooks/ # useClipboardHistory, useFuzzySearch, useSnippets, useNotes, useKeyboardNav
│ │ └── lib/ # ipc.ts, types.ts, calc.ts (Alfred-Style-Evaluator), format.ts
│ └── rust-lib/ # Geteilte Rust-App-Logik
│ ├── build.rs # Linkt das macOS Vision-Framework fĂŒr OCR
│ ├── models/
│ │ └── u2netp.onnx # UÂČ-Net Cutout-Model (~4,5 MB, Apache-2.0)
│ └── src/
│ ├── lib.rs # Tauri-Builder, Plugin-/Tray-Setup, invoke_handler
│ ├── commands.rs # alle #[tauri::command]-Wrapper
│ ├── models.rs # ContentType / ClipEntry / NewClip + Caps
│ ├── db.rs # entries-Table, Hash-Dedup, Prune
│ ├── crypto.rs # AES-256-GCM At-Rest-Encryption + OS-Keychain-Key
│ ├── snippets.rs # snippets-Table, JSON-Upsert, Exakt-Abbreviation-Lookup
│ ├── seed.rs # Default-AI-Prompt-Snippets — First-Launch-Seeder + `Restore defaults`-IPC
│ ├── seed/
│ │ └── ai_prompts.json # 25 gebĂŒndelte AI-Prompts (~35 KB) — zur Compile-Zeit via include_str! eingelesen
│ ├── notes.rs # notes-Table, Kategorien, save_from_clip
│ ├── backup.rs # Full-App-Export/Import (versioniertes JSON)
│ ├── settings.rs # Key/Value-Store (Expander-Hotkey + Zukunfts-Prefs)
│ ├── ui_state.rs # suppress_hide-Flag fĂŒr Native-Modal-Interaktion
│ ├── expander.rs # Trigger-basierter Text-Expander (AX/UIA primary, Clipboard-Fallback)
│ ├── text_field/ # FieldAccess-Trait + macOS-AX + Windows-UIA-Implementierungen
│ ├── paste.rs # write_to_clipboard + enigo-Paste-Shortcut
│ ├── hotkey.rs # Global Ctrl+Shift+V + Ctrl+Shift+O + Ctrl+Shift+S + Ctrl+Shift+C + Expander-Hotkey + Direct Slots
│ ├── clipboard_watcher.rs # Event-getriebene Capture, RTF-Stripping (Image > Files-PrioritĂ€t)
│ ├── recolor.rs # Image-Tint (Lerp Target ↔ Weiß nach Per-Pixel-Luminanz)
│ ├── cutout.rs # Legacy Chroma-Key-Cutout (als Fast-Path-Option behalten)
│ ├── cutout_ml.rs # UÂČ-Net-basierter Subject-Cutout via `ort` (ONNX Runtime)
│ ├── image_ops.rs # `rz` Resize (Lanczos3) + `optim` PNG-Optimierung (oxipng)
│ ├── system_commands.rs # `kill` / `reboot` / `shutdown` / `lock` (sysinfo + osascript)
│ ├── screen_picker.rs # Farb-Eyedropper (NSColorSampler / GDI-Overlay)
│ ├── region_picker.rs # screencapture-i (macOS) / GDI-Overlay (Windows) — OCR + Screenshot
│ ├── ocr.rs # Apple Vision (macOS) / Windows.Media.Ocr (Windows)-Wrapper
│ └── screen_recording.rs # macOS-Bildschirmaufnahme-TCC-Permission-API — gated OCR + Screenshot
├── win/ # Windows-spezifische Bundle-Shell
│ ├── README.md # Windows-Install- & Build-Details
│ ├── package.json # Tauri-CLI-Entry
│ └── src-tauri/ # main.rs, Cargo.toml, tauri.conf.json, capabilities/, icons/
├── macos/ # macOS-spezifische Bundle-Shell
│ ├── README.md # macOS-Install, Gatekeeper, Accessibility, Troubleshooting
│ ├── package.json
│ └── src-tauri/ # entitlements.plist, tauri.conf.json (dmg+app), capabilities/
├── .github/
│ └── workflows/
│ ├── ci.yml # Rust- + Frontend-Tests bei jedem Push/PR
│ └── release.yml # Baut Bundles und published GitHub-Release bei v*-Tags
├── docs/
│ ├── spec.md # Originale Produkt-Spezifikation
│ ├── snippets-import.md # JSON-Snippet-Import — Schema, Semantik, Beispiele
│ ├── notes.md # Notes-Feature — Kategorien, Edit-Semantik, IPC-Surface
│ ├── backup.md # Full-App-Export/Import — Schema, Merge-Semantik, jq-Rezepte
│ ├── text-expander.md # System-weiter Expander — Workflow, Hotkey-Format, Per-OS-Caveats
│ ├── colors.md # Inline-Hex-Preview + Custom-HSV-Picker + System-Eyedropper
│ ├── ai-prompts.md # 25 gebĂŒndelte Default-AI-Prompt-Snippets
│ ├── encryption.md # AES-256-GCM At-Rest-Encryption — Threat-Model, Key-Storage, Migration
│ ├── RELEASING.md # Release-Procedure
│ ├── ir-w1024.png # Brand-Artwork — README-Hero + Inline-Image (1024×1024, ~1,9 MB)
│ └── examples/
│ └── snippets/ # 5 thematische JSON-Beispiele + eigene README
├── scripts/
│ ├── check.sh # cargo clippy + tsc + eslint
│ └── install-macos.sh # Idempotenter Build + Re-Sign + Install (erhĂ€lt TCC-Grants ĂŒber Rebuilds hinweg)
├── Cargo.toml # Rust-Workspace (Members: core/rust-lib, win/src-tauri, macos/src-tauri)
├── pnpm-workspace.yaml # pnpm-Workspace (core/frontend, win, macos)
└── package.json # Root-Scripts: dev:{win,macos}, build:{win,macos}, lint, typecheck, format, test, check
```

## Quick Start

### Prerequisites

| Tool | Version | Hinweise |
|------|---------|----------|
| [Rust](https://rustup.rs/) | stable | MSVC-Toolchain auf Windows; `rustup component add clippy` ausfĂŒhren |
| [Node.js](https://nodejs.org/) | 20+ | |
| [pnpm](https://pnpm.io/) | 10+ | `npm install -g pnpm` |

Plattformspezifische Prerequisites:
- **Windows** → [`win/README.md`](./win/README.md) (WiX, MSVC-Build-Tools, WebView2)
- **macOS** → [`macos/README.md`](./macos/README.md) (Xcode CLT, Gatekeeper, Accessibility-Permission)

### Install & run

```bash
pnpm install # installiert den ganzen Workspace (CI nutzt --frozen-lockfile)

# Windows
pnpm dev:win # tauri dev — Live-Reload
pnpm build:win # → target/release/bundle/msi/InspectorRust_x.x.x_x64_en-US.msi

# macOS
pnpm dev:macos # tauri dev — Live-Reload
pnpm build:macos # → target/release/bundle/{macos/InspectorRust.app, dmg/InspectorRust_x.x.x_.dmg}
bash scripts/install-macos.sh # build + re-sign + install nach /Applications + launch
bash scripts/install-macos.sh --reset # 
auch tccutil-reset stale Accessibility-Grants (nach First-Run nutzen)
```

> Warum der `install-macos.sh`-Helper? Ohne Apple-Developer-ID kriegt jedes frische `pnpm build:macos` einen neuen zufĂ€lligen Signing-Identifier, was macOS-TCC dazu bringt, jedes Rebuild als neue App zu behandeln und erneut nach Accessibility zu fragen. Das Script erzwingt einen stabilen ad-hoc Bundle-Identifier, sodass das Grant ĂŒber Rebuilds hinweg ĂŒberlebt. Voller Hintergrund: [`macos/README.md` — Accessibility-Permission](./macos/README.md#why-the-dialog-re-appears-after-every-rebuild-and-how-to-stop-that).

> Jede Plattform muss auf ihrem nativen Host gebaut werden (Windows fĂŒr MSI, macOS fĂŒr DMG/`.app`). Cross-Compilation wird nicht unterstĂŒtzt.

### Snippet-Import

In Inspector Rust: Popup öffnen (`Ctrl+Shift+V`) → **Snippets**-Tab → **Import** → eine `.json`-Datei auswĂ€hlen. Der native File-Picker öffnet (NSOpenPanel auf macOS, OpenFileDialog auf Windows); existierende Abbreviations werden in-place upsert, sodass Re-Import derselben Datei idempotent ist.

**Ready-to-import-Samples** in [`docs/examples/snippets/`](./docs/examples/snippets/):

| Datei | Snippets | Thema |
|-------|----------|-------|
| [`getting-started.json`](./docs/examples/snippets/getting-started.json) | 3 | Adresse, E-Mail, deutsche Signatur — First-Import-Test |
| [`signatures.json`](./docs/examples/snippets/signatures.json) | 4 | E-Mail-Signaturen (DE/EN, kurz, OOO-Template) |
| [`dev.json`](./docs/examples/snippets/dev.json) | 8 | Shebang, MIT-Header, fn-Skeletons, gitignore, Commit-Msg |
| [`markdown.json`](./docs/examples/snippets/markdown.json) | 5 | Headings, Table, ``, PR-Body |
| [`wrapped-form.json`](./docs/examples/snippets/wrapped-form.json) | 2 | Demonstriert `{ "snippets": [...] }`-Shape |

Siehe [`docs/snippets-import.md`](./docs/snippets-import.md) fĂŒr das volle Schema, die Field-Semantik, das sqlite3+jq-Export-Rezept und Tips/Anti-Patterns.

### Notes & Backup

Notes haben ihren eigenen Tab; die Kategorien-Sidebar hat **+ New Note** und **Clear All**. Backup lebt jetzt im **Settings**-Tab.

- **Clipboard-Eintrag als Note speichern:** Hover ĂŒber jede History-Zeile → Bookmark-Icon klicken → Eintrag landet im `Uncategorized`-Bucket des Notes-Tabs. Verschiebe ihn durch Editieren der Note in eine Kategorie.
- **Full-Backup exportieren:** Settings-Tab → **Backup & restore** → was exportieren ankreuzen (Clipboard-History / Snippets / Notes — alle Default an) → **Export
** → Pfad wĂ€hlen. Inspector Rust schreibt eine einzelne JSON-Datei (Default-Name `inspector-rust-backup-.json`); ungeticked Sektionen werden als leere Arrays geschrieben, sodass du Snippets teilen kannst ohne deine Zwischenablage zu leaken.
- **Backup importieren:** Settings-Tab → **Backup & restore** → **Import
** → die JSON-Datei wĂ€hlen. Snippets und History mergen nach ihren natĂŒrlichen Keys (Abbreviation / SHA-256-Hash); Notes werden appended. Notes- / Snippets- / History-Tabs aktualisieren sich automatisch.

Volle Feature-Referenz: [`docs/notes.md`](./docs/notes.md). Backup-Datei-Schema und Merge-Semantik: [`docs/backup.md`](./docs/backup.md).

### Tests

```bash
pnpm test # Frontend-Unit-Tests (vitest + happy-dom) — 86 Tests
cargo test --workspace # Rust-Unit-Tests — 110 Tests (db, snippets, notes, backup, settings, expander, text_field, seed, hotkey-Parser, clipboard_watcher, models, recolor, cutout, cutout_ml)
```

Die gleichen Commands laufen in [GitHub-Actions-CI](./.github/workflows/ci.yml) bei jedem Push und PR.

### Statische Analyse

```bash
pnpm check # cargo clippy (Workspace) + tsc --noEmit + eslint
```

## Bekannte EinschrÀnkungen

| EinschrÀnkung | Detail |
|---------------|--------|
| **Scope der At-Rest-Encryption** | Sensitive Inhalte (Clipboard-Text/-HTML/-RTF/-Bilder, Snippet-Bodies, Note-Bodies) sind AES-256-GCM-verschlĂŒsselt at-rest mit einem per-Install zufĂ€lligen 256-Bit-Key (v0.6.0+). Key lebt im OS-Keychain; fĂ€llt zurĂŒck auf eine 0600-Keyfile im Data-Dir, wenn der Keychain nicht verfĂŒgbar ist. **Nicht verschlĂŒsselt:** Timestamps, Content-Type-Tags, Dedup-Hashes, Snippet-Abbreviations, Note-Titles/-Kategorien — keines davon verrĂ€t Clipboard-Inhalt. Volle Referenz: [`docs/encryption.md`](./docs/encryption.md). |
| **Keine Sensitive-App-Detection** | Inspector Rust erfasst alles ohne Filterung. |
| **Kein Cloud-Sync** | Kein automatischer Sync oder Multi-Device-Support — aber der [Backup](./docs/backup.md)-Export/Import gibt dir eine portable JSON-Datei, die du manuell zwischen Maschinen bewegen kannst. |
| **File-Paste-Fallback** | Das Setzen von File-List-Clipboard-Payloads aus Rust wird nicht universell unterstĂŒtzt; Inspector Rust fĂ€llt zurĂŒck darauf, die Newline-joined Liste der Pfade als Text zu pasten. |
| **Expander in Terminals: nimm einen Direct Slot** | Der *Abbreviation*-Expander macht nichts auf einer Terminal-Befehlszeile (Terminal.app, iTerm2, kitty, 
) — Terminals exponieren die Input-Zeile nicht via Accessibility, und ein Shell-Prompt hat kein GUI-"vorheriges Wort markieren". Nimm dort einen **Direct hotkey → snippet**-Slot (v0.13.0 — pasted ohne irgendwas zu lesen, funktioniert ĂŒberall) oder das Popup (`Ctrl+Shift+V` → suchen → Enter). Electron- / Chromium- / Mac-Catalyst-Apps (WhatsApp, Slack, VS Code, 
) *werden* vom Abbreviation-Expander seit v0.12.0 unterstĂŒtzt, via einen AX-select-then-paste-Pfad. |
| **macOS Accessibility** | Paste-Simulation (`enigo`) und der system-weite Text-Expander brauchen Accessibility-Zugriff. Erteile es einmal in Systemeinstellungen → Datenschutz & Sicherheit → Bedienungshilfen. Falls fehlend, zeigt Inspector Rust ein amber Banner mit einem `Open Settings`-Button beim nĂ€chsten Paste-Versuch — und seit v0.12.0 auch beim DrĂŒcken des Expander-Hotkeys — statt still zu failen oder den System-Dialog erneut zu feuern (v0.5.1 / v0.12.0). |
| **macOS Bildschirmaufnahme** | OCR (`Ctrl+Shift+O`) **und** Screenshot-Region (`Ctrl+Shift+S`, v0.15.0+) brauchen beide Bildschirmaufnahme-Zugriff — `screencapture -i` wird Inspector Rust zugeordnet und macOS verweigert es ohne das Grant. Pre-checked via `CGPreflightScreenCaptureAccess`; fehlende Permission öffnet das Popup + zeigt ein amber Banner, das auf den richtigen Privacy-Pane zeigt (v0.11.0). |
| **macOS unsigned Build** | Release-Builds sind nicht notarized. macOS warnt eventuell "unidentified developer" — Rechtsklick auf die App und **Open** wĂ€hlen, um Gatekeeper beim ersten Launch zu umgehen. |
| **macOS Rebuild ⇒ Re-Grant** | `cdhash` Ă€ndert sich bei jedem source-affecting Rebuild, was vorherige TCC-Grants invalidiert. `scripts/install-macos.sh` skipt das Re-Signing, wenn der Source-Hash unverĂ€ndert ist, sodass casual Rebuilds ĂŒberleben; echte Source-Änderungen brauchen weiterhin Re-Granting. |
| **Windows-OCR-Sprachpakete** | Die Windows-OCR-Engine (`Windows.Media.Ocr`) nutzt die in Einstellungen → Zeit & Sprache → Sprache installierten Sprachpakete. Ist fĂŒr den auf dem Bildschirm dargestellten Text kein Paket installiert, schlĂ€gt die Engine mit einer beschreibenden Fehlermeldung fehl. Das fehlende Paket in den Windows-Einstellungen hinzufĂŒgen und erneut versuchen. |
| **Linux: Wayland-Shortcuts & Tools** | Globale Tauri-Shortcuts erhalten unter GNOME/Wayland oft keine Tastenevents — Inspector Rust registriert beim ersten Start automatisch GNOME/Cinnamon-`gsettings`-Custom-Keybindings (CLI-Flags `--toggle-popup` / `--ocr` / `--screenshot` / `--pick-color`). Region-Capture braucht `grim`+`slurp` (Wayland) bzw. `scrot` (X11), OCR braucht `tesseract` + Sprachpakete. Eyedropper und der In-Place-AX-Expander sind unter Linux noch nicht verfĂŒgbar (Clipboard-Paste-Fallback). Details: [`linux/README.md`](./linux/README.md). |

## BeitrÀge

BeitrĂ€ge sind willkommen — siehe [`CONTRIBUTING.md`](./CONTRIBUTING.md) fĂŒr den Dev-Workflow, Code-Style und wie man IPC-Commands oder neue Plattform-Shells hinzufĂŒgt.

## Releasing

Push ein `v*`-Tag, um den [Release-Workflow](https://github.com/pepperonas/inspector-rust/actions/workflows/release.yml) zu triggern, der die Windows-, macOS- und Linux-Bundles baut und an einen GitHub-Release attached. Volle Procedure (Version-Bumps, Pre-Flight-Checks, Troubleshooting) in [`docs/RELEASING.md`](./docs/RELEASING.md).

## Changelog

Siehe [`CHANGELOG.md`](./CHANGELOG.md) — jeder Release ist dokumentiert mit dem, was hinzugefĂŒgt, gefixt wurde, und etwaige bekannte Issues zu der Zeit.

## Entwickler

- **Martin Pfeffer** — Autor & Maintainer
- Kudos 2 Daniel

## License

[MIT](./LICENSE) — © 2026 Martin Pfeffer

A private open-source side project — built on weekends and evenings, made with ❀.

Brewed and shipped from Berlin đŸ»