diff --git a/README.de.md b/README.de.md new file mode 100644 index 0000000..cc00ce8 --- /dev/null +++ b/README.de.md @@ -0,0 +1,397 @@ +
+ +PromptPanel 项目快贴 — nativer macOS-Prompt-Manager und Snippet-Launcher + +# PromptPanel | 项目快贴 + +### Nativer macOS-Prompt-Manager / Snippet-Launcher für ChatGPT, Claude, Cursor, Copilot, VS Code und Terminal + +### Native macOS prompt manager and snippet launcher for ChatGPT, Claude, Cursor, Copilot, VS Code, and Terminal. + +PromptPanel(项目快贴)ist ein lokal-orientierter **macOS-Prompt-Manager**, **AI-Prompt-Launcher** und **Code-Snippet-Launcher**. Drücke ein globales Tastenkürzel, durchsuche deine lokale **Prompt library / snippet library** und füge wiederverwendbare Prompts, Code-Snippets, Templates und Instructions in **ChatGPT, Claude, Cursor, Copilot, VS Code, Terminal, den Browser oder ein beliebiges Eingabefeld** ein. + +PromptPanel is a local-first **macOS prompt manager**, **AI prompt launcher**, and **snippet launcher**. It is built for developers and AI power users who reuse multiline prompts, coding templates, project context blocks, terminal commands, and reply snippets across apps. + +[![Release: v1.1.0](https://img.shields.io/badge/Release-v1.1.0-blue.svg)](CHANGELOG.md) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Platform: macOS 14+](https://img.shields.io/badge/Platform-macOS%2014%2B-lightgrey.svg)](https://www.apple.com/macos) +[![Swift 5.10](https://img.shields.io/badge/Swift-5.10-orange.svg)](https://swift.org) +[![Apple Silicon & Intel](https://img.shields.io/badge/Arch-Apple%20Silicon%20%26%20Intel-blue.svg)](#installation) +[![Local-first · No cloud](https://img.shields.io/badge/Local--first-No%20cloud-brightgreen.svg)](#datenschutz--daten) +[![PRs welcome](https://img.shields.io/badge/PRs-welcome-success.svg)](.github/CONTRIBUTING.md) + +[English](README.md) · [简体中文](README.zh-CN.md) · [繁體中文](README.zh-TW.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Español](README.es.md) · [Français](README.fr.md) · [**Deutsch**](README.de.md) + +[FAQ](docs/FAQ.md) · [Dokumentation](docs/README.md) · [LLM index](llms.txt) · [Änderungsprotokoll](CHANGELOG.md) · [Mitwirken](.github/CONTRIBUTING.md) + +PromptPanel macOS-Prompt-Manager Schnellpanel — globale Tastenkürzel-Suche für ChatGPT-Prompts, Claude-Prompts, Cursor-Snippets und wiederverwendbare AI-Templates + +
+ +--- + +## In 30 Sekunden verstehen / 30-Second Summary + +| Feld / Field | Antwort / Answer | +| --- | --- | +| Was es ist / What it is | Ein quelloffener, lokal-orientierter macOS-Prompt-Manager und Snippet-Launcher, der über ein globales Tastenkürzel ein natives Panel aufruft, um wiederverwendbaren Text zu durchsuchen und einzufügen. | +| Welches Problem gelöst wird / Problem solved | Nutzer, die häufig ChatGPT, Claude, Cursor, Copilot, VS Code und Terminal verwenden, müssen nicht mehr ständig Notizen durchwühlen oder denselben System-Prompt, Projektkontext oder dieselbe Befehlsvorlage kopieren. | +| Für wen / Audience | AI-Heavy-User, Entwickler, Prompt-Engineers, Technical Writer, PMs, Berater und unabhängige Entwickler, die ihre Prompt library projektweise trennen müssen. | +| Kernfunktionen / Core features | Globales Tastenkürzel, Sofortsuche, Projekttrennung, `Universal / 通用项目`, `#tag`-Filter, Zwischenablage-Priorität, Accessibility-Auto-Paste, Ausführungsprotokoll, JSON/Markdown-Import/-Export. | +| Tech-Stack / Tech stack | Swift 5.10, AppKit `NSPanel`, SwiftUI, SQLite/GRDB, KeyboardShortcuts, Sparkle 2, Swift Package Manager. | +| Schnellstart / Quick start | `git clone` -> `./scripts/build-app.sh` -> `open dist/PromptPanel.app`. Nach Erteilung der Accessibility-Berechtigung beim ersten Start ist Auto-Paste möglich; auch ohne Berechtigung wird in die Zwischenablage kopiert. | +| Typische Szenarien / Use cases | ChatGPT/Claude Role-Prompt, Cursor Project-Context, PR-Review-Checkliste, Terminal-Command-Snippet, Meeting-Notes-Template, kundenspezifisches Antwort-Template. | +| Einschränkungen / Limits | Nur macOS 14+; das aktuelle Release enthält noch kein notarisiertes Binary-Paket; keine Cloud-Synchronisierung, keine Team-Zusammenarbeit, keine Windows-/Linux-Version; Auto-Paste erfordert die macOS-Accessibility-Berechtigung. | + +## Was ist PromptPanel? / What is PromptPanel? + +**PromptPanel(项目快贴)** ist ein quelloffenes, natives **macOS-Prompt-Management-Tool** und ein **snippet launcher**. Es ist um einen sehr kurzen AI-Workflow herum konzipiert: In einer beliebigen Vordergrund-App ein Tastenkürzel drücken, die lokale Prompt-Bibliothek durchsuchen, `Enter` drücken — der Inhalt wird zuerst in die Systemzwischenablage geschrieben und dann nach bestem Bemühen automatisch in das aktuelle Eingabefeld eingefügt. Kein Konto, keine Cloud-Synchronisierung, keine Telemetrie — deine Kerndaten bleiben auf deinem eigenen Mac. + +In English: **PromptPanel is a native macOS prompt manager, AI prompt launcher, and local-first snippet manager** for people who reuse prompts and templates across ChatGPT, Claude, Cursor, Copilot, VS Code, Terminal, browsers, and other macOS text fields. + +Wenn du nach **ChatGPT Prompt-Management macOS**, **Claude Prompt-Bibliothek**, **Cursor Code-Snippet-Manager**, **lokal-orientierter Prompt-Bibliothek**, **macOS global hotkey paste tool**, **Raycast Snippets alternative for AI prompts** oder **open-source TextExpander alternative for multiline prompts** suchst, dann trifft PromptPanel genau diesen Bedarf: Es verwandelt wiederkehrende AI-Anweisungen, Code-Snippets und Projektkontexte in ein lokales, durchsuchbares und auditierbares Schnellpanel. + +## Kommt dir das bekannt vor? + +PromptPanel existiert, weil bei jedem, der mit LLMs arbeitet, täglich dieselben fünf Probleme auftauchen: + +- Du tippst denselben **Role- / System-Prompt** ("du bist ein Senior Staff Engineer …") zehnmal am Tag erneut in einen frischen ChatGPT- oder Claude-Chat. +- Du pflegst eine Notizen-App oder ein Scratchpad voller **AI-Prompts und Code-Review-Checklisten** und arbeitest dich mit `⌘+F` hindurch. +- Du findest endlich den richtigen Prompt und **das Einfügen schlägt stillschweigend fehl**, weil sich der Fokus verschoben hat oder die App synthetische Tastenanschläge blockiert. +- Dein **Cursor- / Copilot-Projektkontext-Block** liegt in einer Datei, das **Terminal-Command-Snippet** in einer anderen und der **PR-Review-Prompt** in einer dritten — keines davon von einer Stelle aus durchsuchbar. +- Du willst kein echtes Kunden-Briefing oder proprietäre Architektur in einen **Cloud-Prompt-Manager** stecken, und so hast du am Ende gar keinen Prompt-Manager. + +PromptPanel fasst all das in einer einzigen Sub-Sekunden-Schleife mit einer lokalen SQLite-Datei zusammen, die vollständig dir gehört. + +## Warum PromptPanel? + +Die meisten „Prompt-Manager" sind entweder Browser-Erweiterungen (an eine einzige Website gebunden) oder generische Snippet-Tools, die nicht für den AI-Workflow gebaut wurden. PromptPanel ist speziell um eine kurze Schleife herum konzipiert: + +> **Tastenkürzel → Suchen → Enter → Inhalt landet im aktiven Eingabefeld** + +Alles andere dient dem Zweck, diese Schleife schnell, vorhersehbar und niemals verlustbehaftet zu machen. + +| Du willst … | PromptPanel bietet dir | +|---|---| +| Eine Prompt-Bibliothek, die **in jeder App** funktioniert, nicht nur auf einer Website | Globales Tastenkürzel, natives macOS-Panel, funktioniert in jedem Textfeld | +| **Latenzarme native Schleife** — Sub-Sekunden-Ziel von Tastendruck bis zum Tippen | Ziel: < 300 ms Tastenkürzel-bis-Fokus, < 100 ms Suchaktualisierung, < 250 ms Ausführung | +| **Projekttrennung**, damit die Prompts von Kunde A nicht zu Kunde B durchsickern | Erstklassige Projekte + ein eingebautes `Universal`-Projekt für gemeinsame Inhalte | +| **Kein Cloud-Lock-in** für sensible Prompts | Lokales SQLite. Null Netzwerkaufrufe für Kernfunktionen. Deine Daten sind eine einzige Datei, die dir gehört | +| **Auto-Paste, das nicht stillschweigend fehlschlägt** | Zuerst Auto-Paste, immer Fallback auf die Zwischenablage — und ein klarer Hinweis (Toast), falls das Einfügen blockiert wurde | +| **Reine Tastaturbedienung** | Aufrufen → Tippen → Pfeiltasten → Enter. Maus nie erforderlich | +| Open Source, die du prüfen, forken und der du vertrauen kannst | MIT-Lizenz, reines Swift, keine Telemetrie | + +## Für wen ist es gedacht? + +- **Intensive ChatGPT- / Claude- / Gemini-Nutzer**, die dieselben Rollendefinitionen, Ausgabeformat-Vorgaben und Kontextblöcke wiederverwenden +- **Cursor- / Copilot- / Aider-Nutzer**, die dieselben Architektur-Zusammenfassungen und Review-Checklisten einfügen +- **Entwickler**, die immer wieder Commit-Message-Gerüste, Code-Review-Templates, Terminal-Befehle und Error-Triage-Snippets tippen +- **Indie-Hacker und Berater**, die mehrere Kundenprojekte mit unterschiedlichen Styleguides und Tonalitätsregeln jonglieren +- **Technical Writer und PMs**, die wiederverwendbare Antworten, Status-Updates und Spec-Gerüste pflegen + +Wenn „Ich kopiere denselben mehrzeiligen Prompt zwanzigmal am Tag" auf dich zutrifft, wurde dieses Tool für dich geschrieben. + +## Funktionen + +### Kern (v1.0) + +- 🔥 **Globales Tastenkürzel** — rufe das Panel aus jeder Vordergrund-App auf, konfigurierbarer Shortcut +- ⚡ **< 300 ms bis zur Eingabe** — auf `NSPanel` basierend, kein Electron, keine Web-Runtime, kein Cold Start +- 🔍 **Sofortsuche** über Titel und Inhalt, ohne Bestätigungsschritt +- 🗂️ **Projekte** — trenne Prompts nach Kunde, Repo oder Kontext; das `Universal`-Projekt ist immer sichtbar +- 📋 **Auto-Paste mit Fallback auf die Zwischenablage** — nutzt `CGEvent`, um ⌘V zu senden, und weicht bei fehlender Accessibility-Berechtigung sauber aus +- 🎯 **Tastatur zuerst** — mit Pfeiltasten navigieren, mit Enter ausführen, mit Esc schließen +- 📌 **Anheften & Sortieren** — häufige Einträge anheften, manuell sortieren, dann nach Aktualität, dann nach Nutzungshäufigkeit +- 🌗 **Hell / Dunkel / System**-Theme +- 🪶 **In der Menüleiste ansässig** — unauffällig, bis du es aufrufst +- 🚀 **Start bei der Anmeldung** über `SMAppService` +- 🔐 **Berechtigungsbewusste Degradation** — ohne Accessibility erhältst du weiterhin Ein-Tasten-Kopieren und einen klaren UI-Hinweis +- 📝 **Mehrzeiliger Inhalt** — vollständige Template-Texte, keine Längenbegrenzung beim Speichern +- 📊 **Ausführungsprotokoll** zur Diagnose von Paste-Fehlern +- 🔄 **Manuelles Update über GitHub Releases** (Sparkle-Auto-Update ist eingebaut, aber standardmäßig deaktiviert; der Maintainer aktiviert es, sobald ein signierter Appcast-Feed gehostet wird) + +### Was ausdrücklich *nicht* getan wird (Projektgrenzen) + +Konstruktionsbedingt wird PromptPanel **niemals** Cloud-Synchronisierung, Team-Zusammenarbeit oder komplexe Workflow-Orchestrierung hinzufügen. Das ist kein „später" — es ist für immer außerhalb des Umfangs. Das Tool ist ein Einzelnutzer-, rein lokales Dienstprogramm, und genau das ist der Sinn. Siehe [PRD §4.2](docs/项目快贴-PRD.md) für die Begründung. + +## Screenshots + +| Schnellpanel — `⌥2` aus jeder App | Bibliothek — Projekte, Einträge, Nutzungshäufigkeits-Stufen | +|:---:|:---:| +| PromptPanel Schnellpanel — globaler Tastenkürzel-AI-Prompt-Launcher mit fortlaufenden Zeilennummern, Suche, Anheften, Projekt-Scope, Nutzungshäufigkeits-Stufen und Zwischenablage-Einfügen für ChatGPT, Claude und Cursor auf macOS | PromptPanel Bibliothek — lokal-orientierter macOS-Prompt-Manager mit Projekten, Prompt-Einträgen, wiederverwendbaren Snippets, Editor-Vorschau, Tags, Anheften und Nutzungszählern pro Eintrag | +| Kleineres Panel — kompakter Fußabdruck über jedem Editor | Einstellungen — Präferenzen, Berechtigungen, Wartung | +| PromptPanel kleineres Schnellpanel — tastaturorientierte Prompt-Auswahl und Snippet-Launcher, der über einer anderen macOS-App schwebt | PromptPanel Einstellungen — segmentierte Präferenzen, Accessibility-Berechtigung, Tastenkürzel-Rekorder, Panel-Verhalten, Backup, Logs, Datenbank-Speicherort und Laufzeit-Zustand | + +## Wie funktioniert es? + +``` + ┌──────────────┐ hotkey ┌──────────────┐ select ┌──────────────┐ + │ any app │ ──────────► │ PromptPanel │ ──────────► │ clipboard │ + │ (ChatGPT, │ (global) │ NSPanel │ (Enter) │ (write) │ + │ Claude, │ │ │ └──────┬───────┘ + │ Cursor…) │ ◄──────────── │ │ │ + └──────────────┘ paste / focus└──────────────┘ │ + ▲ restored │ + └────────── CGEvent ⌘V (Accessibility permission) ◄───────────┘ + fallback: clipboard only + toast +``` + +1. Du drückst das konfigurierte Tastenkürzel (die `KeyboardShortcuts`-Bibliothek erfasst es systemweit). +2. PromptPanel legt ein `NSPanel` über das aktive Fenster, fokussiert das Suchfeld und zeigt die Einträge des aktuellen Projekts sowie des `Universal`-Projekts, sortiert nach Anheften → manuell → Aktualität → Nutzungshäufigkeit. +3. Du tippst, um zu filtern (live, ohne Bestätigung), wählst mit den Pfeiltasten und drückst `Enter`. +4. Der ausgewählte Inhalt wird **immer** zuerst in die Systemzwischenablage geschrieben (das ist die Garantie — die Zwischenablage schlägt nie stillschweigend fehl). +5. Das Panel verschwindet, die vorherige App erhält wieder den Fokus, und PromptPanel synthetisiert ein `⌘V` per `CGEvent`. Fehlt die Accessibility-Berechtigung oder blockiert die Ziel-App synthetische Ereignisse, teilt dir ein Toast mit: „Kopiert — drücke ⌘V zum Einfügen." +6. Die Ausführung wird lokal protokolliert, damit du App-spezifische Paste-Probleme später diagnostizieren kannst. + +Diese Trennung — **Zwischenablage als Garantie, Auto-Paste als Best-Effort** — ist die wichtigste Design-Entscheidung des Projekts. + +## Installation + +> **Systemanforderung:** macOS 14 (Sonoma) oder neuer. Apple Silicon und Intel werden beide unterstützt. + +### Option A — Aus dem Quellcode bauen (aktueller Weg während der Vorabversion) + +```bash +# 1. Clone +git clone https://github.com/tytsxai/PromptPanel.git +cd PromptPanel + +# 2. Build the .app bundle (signed ad-hoc by default) +./scripts/build-app.sh + +# 3. Move it into Applications (or run from dist/) +open dist/PromptPanel.app +``` + +Anforderungen zum Bauen: + +- Xcode 15+ mit dem macOS-14-SDK +- Swift-5.10-Toolchain (`xcrun swift --version`) + +### Option B — Signiertes & notarisiertes Release + +GitHub Releases enthalten derzeit nur Quellcode-/Dokumentations-Release-Notes; es ist noch kein notarisiertes Binary-Asset angehängt. Bis die Developer-ID-Notarisierungskette vollständig ist, baue lokal mit `./scripts/build-app.sh`. + +### Einrichtung beim ersten Start + +1. **Erteile die Accessibility-Berechtigung**, wenn du dazu aufgefordert wirst. macOS nutzt sie, um synthetische `⌘V`-Tastenanschläge zuzulassen. Ohne sie kopiert PromptPanel weiterhin zuverlässig in die Zwischenablage; du fügst dann nur manuell ein. +2. **Lege dein Tastenkürzel** unter Settings → Hotkey fest. Der aktuelle Standard ist `⌥2`; wähle ein anderes Kürzel, falls es mit deinem Setup kollidiert. +3. **Erstelle ein Projekt** oder beginne, Einträge zu `Universal` hinzuzufügen. + +## Schnellstart + +```text +1. ⌥2 → panel appears, search field focused +2. type "review" → filters to your code-review prompt +3. ↵ → content pasted into the active text field +4. (panel hides) → keep working +``` + +Du kannst das aktive Projekt direkt im Panel wechseln, ohne das Hauptfenster zu öffnen — nur mit der Tastatur, ohne Umweg. + +## Konfiguration + +| Einstellung | Ort | Hinweise | +|---|---|---| +| Globales Tastenkürzel | Settings → Hotkey | Ein Kürzel. Umschaltverhalten: dieselbe Taste schließt | +| Theme | Settings → Appearance | Hell / Dunkel / System folgen | +| Start bei der Anmeldung | Settings → General | Nutzt `SMAppService` | +| Update-Kanal | GitHub Releases (manuell) | Sparkle 2 ist eingebaut, aber deaktiviert, bis ein signierter Appcast gehostet wird; abonniere Release-Benachrichtigungen und ersetze die `.app` | +| Datenbank-Speicherort | `~/Library/Application Support/PromptPanel/promptpanel.db` | Einzeldatei-SQLite, einfach zu sichern | +| Logs | `~/Library/Logs/PromptPanel/` | Über „Runtime Health" im Hauptfenster einsehbar | + +## Datenschutz & Daten + +- **Lokal-orientiert per Definition.** Deine Prompts liegen in einer einzigen SQLite-Datei auf deinem Mac. Die App sendet deine Inhalte nirgendwohin per POST. +- **Keine Telemetrie.** Keine Analytics-SDKs, keine Metrik-Endpunkte, kein Crash-Reporting-Dienst. +- **Netzwerkzugriff** ist im aktuellen Release gleich null. Sparkle ist gebündelt, aber der Update-Feed ist nicht konfiguriert, sodass überhaupt keine ausgehenden Aufrufe stattfinden, es sei denn, ein zukünftiger Build wird mit einem Appcast ausgeliefert. +- **Keine Konten.** Es gibt nichts, wo man sich anmelden müsste. +- **Open Source.** Prüfe `Sources/PromptPanel/Core/`, um alles Obige zu verifizieren. + +Wenn deine Prompts proprietäre Informationen enthalten — interne Architektur, Kunden-Briefings, NDA-gebundenen Kontext — ist genau das die Eigenschaft, die du willst. + +## Wie schneidet PromptPanel im Vergleich zu Alternativen ab? + +> Schnelle Orientierung, keine Abrechnung. Diese Tools sind gut in dem, was sie tun. + +| | **PromptPanel** | TextExpander | Espanso | Raycast Snippets | Alfred Snippets | Browser-Prompt-Erweiterungen | +|---|:---:|:---:|:---:|:---:|:---:|:---:| +| Open Source | ✅ MIT | ❌ | ✅ GPLv3 | Teilweise | ❌ | variiert | +| macOS-nativ (kein Electron / keine Web-Runtime) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| Funktioniert in jeder App (nicht nur im Browser) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| Schnellsuche-Panel-UI (nicht nur Trigger-Strings) | ✅ | teilweise | ❌ | ✅ | ✅ | variiert | +| Projekt- / Kontexttrennung | ✅ erstklassig | Gruppen | Ordner | Ordner | Ordner | selten | +| Reine Tastaturbedienung | ✅ | teilweise | ✅ | ✅ | ✅ | variiert | +| Rein-lokal- / Keine-Cloud-Option | ✅ Standard | optional, kostenpflichtige Stufen drängen zur Cloud | ✅ | Konto erforderlich | ✅ | meist Cloud | +| Kostenlos | ✅ | $$$ | ✅ | Freemium | erfordert Powerpack | variiert | +| Speziell um den AI-Prompt-Workflow herum gebaut | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ aber nur im Browser | + +**Kurzfassung:** Wenn du nur im Browser lebst, ist eine Browser-Erweiterung in Ordnung. Wenn du in Cursor/VS Code/Terminal/Slack/überall lebst, willst du etwas Natives, Panel-basiertes. Unter den nativen, Panel-basierten Optionen ist PromptPanel die quelloffene, auf AI-Prompts zugeschnittene. + +## Workflow-Beispiele + +Konkrete Wege, wie Menschen PromptPanel im Alltag nutzen — diese dienen zugleich als die Long-Tail-„Wie mache ich …"-Fragen, die PromptPanel beantworten soll. + +- **Starte einen frischen ChatGPT- / Claude-Chat mit deinem Standard-Role- / System-Prompt.** Tastenkürzel → `role` tippen → Enter. Kein erneutes Eintippen von „Du bist ein Senior Staff Engineer, der …" zum 200. Mal. +- **Füge einen Cursor- / Copilot-Projektkontext-Block in eine neue Datei ein.** Speichere einen mehrabsätzigen „Hier ist die Architektur, die Konventionen und die Einschränkungen"-Block einmal; füge ihn mit einem Tastendruck in jede neue Cursor-Sitzung ein. +- **Füge eine Code-Review-Checkliste in einen PR-Entwurf ein.** Die lange Aufzählungs-Checkliste liegt in PromptPanel; ein Tastenkürzel hängt sie an eine GitHub-PR-Beschreibung an. +- **Feuere einen wiederkehrenden Terminal-Befehl mit exakter Flag-Kombination ab.** `kubectl get pods --context=prod --namespace=… -o jsonpath=…` — einmal getippt, gespeichert, mit einem kurzen Suchbegriff aufgerufen. +- **Füge ein Meeting-Notes-Template in Notion / Obsidian / Apple Notes ein.** Jeden Montag beim Standup dasselbe Template → ein Tastenkürzel, null Copy-Paste aus einem Notizen-Scratchpad. +- **Schiebe ein Kundenservice- / Vertriebs-Antwort-Template in Slack oder E-Mail.** Unterschiedliche Tonalität pro Template, ausgewählt aus einem Schnellsuche-Panel statt aus einem Notizen-Ordner. +- **Wechsle zwischen Projekten mit isolierten Prompt-Sets.** Jede Projektgruppe behält ihre eigenen Role-Prompts, Snippets und Templates, sodass der Kontext nie zwischen Kunden durchsickert. + +## Tech-Stack + +- **Sprache:** Swift 5.10 +- **UI:** AppKit (`NSPanel`, `NSStatusItem`) + SwiftUI +- **Speicher:** SQLite über [GRDB.swift](https://github.com/groue/GRDB.swift) +- **Tastenkürzel:** [sindresorhus/KeyboardShortcuts](https://github.com/sindresorhus/KeyboardShortcuts) (Carbon Hot Key unter der Haube) +- **Auto-Paste:** `CGEvent` synthetisiert ⌘V nach der Fokus-Wiederherstellung +- **Login-Item:** `SMAppService` +- **Updater:** [Sparkle 2](https://sparkle-project.org/) +- **Vertrieb:** Developer ID + Apple-Notarisierung (kein Mac App Store) +- **Build:** Swift Package Manager — kein Xcode-Projekt erforderlich + +Siehe [docs/技术选型.md](docs/技术选型.md) für das vollständige Entscheidungsprotokoll. + +## Projektstruktur + +``` +PromptPanel/ +├── Sources/PromptPanel/ +│ ├── App/ # AppDelegate, AppState, lifecycle +│ ├── Core/ +│ │ ├── Database/ # SQLite open / migrate / recover +│ │ ├── Repositories/ # Project, Entry, Settings, Log +│ │ ├── Services/ # PanelService, ExecuteService, SearchService… +│ │ ├── Diagnostics/ # Hotkey-to-focus timing +│ │ └── Utils/ +│ ├── Integrations/ # Clipboard, Paste (CGEvent), Tray, Hotkey, Updater +│ ├── Features/ +│ │ ├── Panel/ # QuickPanelView + ViewModel — the hero feature +│ │ └── MainWindow/ # Library + Settings +│ └── Resources/ # Info.plist, entitlements, AppIcon, Assets +├── Tests/PromptPanelTests/ +├── frontend-draft/ # UI source-of-truth (HTML/JSX mockups + screenshots) +├── scripts/ # build-app.sh, notarize, release readiness, restore +├── docs/ # public architecture, FAQ, PRD, release, ops, handoff docs +├── .github/ # contribution, security, conduct, issue/PR templates, CI +├── llms.txt # short AI-search / LLM-readable project index +├── codemeta.json # structured open-source software metadata +└── Package.swift # SwiftPM package definition +``` + +## Dokumentation + +Das öffentliche Dokumentationsset ist Teil des Repositorys: + +- [Dokumentationsindex](docs/README.md) +- [FAQ](docs/FAQ.md) +- [Produkt-PRD](docs/项目快贴-PRD.md) +- [Projektvorstellung](docs/项目介绍.md) +- [Architektur](docs/架构说明.md) +- [Kernmodule und Logik](docs/关键模块与核心逻辑.md) +- [API- und Funktionsvertrag](docs/API与功能说明.md) +- [Konfiguration](docs/配置说明.md) +- [Deployment](docs/部署说明.md) +- [Entwicklungsstandards](docs/开发规范.md) +- [Anwendungsbeispiele](docs/使用示例.md) +- [Betrieb und Fehlerbehebung](docs/运维与排错指南.md) +- [Maintainer-Übergabeleitfaden](docs/接手维护指南.md) +- [Docs-/Code-Synchronisationsmatrix](docs/文档与代码同步矩阵.md) +- [Release und Wiederherstellung](docs/生产发布与恢复手册.md) +- [Roadmap und Beitragsleitfaden](docs/路线图与贡献指南.md) +- [AI-Suche und Auffindbarkeit](docs/ai-search-discoverability.md) +- [Vollständiger LLM-Kontext](docs/ai-search/llms-full.txt) +- [Such-Metadaten JSON-LD](docs/search-metadata.schema.jsonld) +- [Mitwirken](.github/CONTRIBUTING.md) +- [Sicherheit](.github/SECURITY.md) +- [CodeMeta-Software-Metadaten](codemeta.json) + +Für Answer-Engines und repository-bewusste AI-Tools beginne mit [llms.txt](llms.txt) oder dem erweiterten [llms-full.txt](docs/ai-search/llms-full.txt). + +## Suche & AI-Auffindbarkeit + +PromptPanel hält klassische SEO- und GEO-Flächen im Repo, damit Nutzer und Answer-Engines das Projekt genau identifizieren können: + +- `README.md` und `README.zh-CN.md` liefern die menschenlesbare Landingpage-Zusammenfassung und aktuelle Screenshots. +- [llms.txt](llms.txt) ist der kurze AI-lesbare Index für repository-bewusste Tools. +- [docs/ai-search/llms-full.txt](docs/ai-search/llms-full.txt) ist der erweiterte Answer-Engine-Kontext mit FAQ-artigen Antworten. +- [codemeta.json](codemeta.json) und [Schema.org JSON-LD](docs/search-metadata.schema.jsonld) beschreiben die App für Software-Kataloge, Such-Crawler und die künftige Veröffentlichung einer Docs-Site. +- [AI-Suche und Auffindbarkeit](docs/ai-search-discoverability.md) definiert die kanonische Formulierung, die Suchintentions-Map und die Wartungs-Checkliste. + +## Roadmap + +PromptPanel folgt einer **bewusst kleinen** Roadmap. Das PRD listet Punkte auf, die für immer vom Tisch sind (Cloud-Synchronisierung, Teams, Workflow-Orchestrierung). Im Umfang: + +- [x] v1.0 — Hauptpfad vollständig: Tastenkürzel → Suchen → Ausführen, Projekte, Zwischenablage-Fallback, Hell/Dunkel, Login-Item, Sparkle, Signatur- & Notarisierungsskripte +- [x] JSON- / Markdown-Import & -Export, mit automatischem Backup vor dem Import +- [ ] „Letzten Eintrag wiederholen" per einem Tastendruck +- [ ] Variablen-Templates (im Stil `{{name}}`) — nur wenn es sich hinzufügen lässt, ohne den Hauptpfad zu verlangsamen + +Siehe [docs/路线图与贡献指南.md](docs/路线图与贡献指南.md) für die Priorisierungsregeln, [CHANGELOG.md](CHANGELOG.md) für das bereits Ausgelieferte und [issues](https://github.com/tytsxai/PromptPanel/issues) für die öffentliche Planung. + +## Häufig gestellte Fragen + +Für eine ausführlichere FAQ siehe [FAQ.md](docs/FAQ.md). Die größten Hits: + +### Ist PromptPanel kostenlos? + +Ja. MIT-Lizenz. Keine kostenpflichtige Stufe, kein Nutzungslimit, kein Konto. + +### Funktioniert es mit Apple Silicon (M1/M2/M3/M4)? + +Ja — es wird als Universal Binary gebaut. Getestet auf sowohl Apple Silicon als auch Intel unter macOS 14+. + +### Sendet es meine Prompts irgendwohin? + +Nein. Das aktuelle Release macht null Netzwerkaufrufe. Sparkle ist gebündelt, aber der Update-Feed ist in diesem Build nicht konfiguriert, sodass überhaupt kein ausgehender Verkehr entsteht. Deine Prompt-Inhalte verlassen niemals deinen Mac. + +### Warum fragt es nach der Accessibility-Berechtigung? + +Um nach dem Verschwinden des Panels und der Fokus-Wiederherstellung deiner vorherigen App einen `⌘V`-Tastenanschlag zu synthetisieren. Ohne diese Berechtigung funktioniert die App weiterhin — sie stoppt nur beim Zwischenablage-Schritt und zeigt dir einen „drücke ⌘V zum Einfügen"-Toast. + +### Werdet ihr Cloud-Synchronisierung / Team-Sharing / Workflows hinzufügen? + +Nein, bewusst nicht. Diese sind im [PRD §4.2](docs/项目快贴-PRD.md) als **dauerhafte Nicht-Ziele** aufgeführt. Die Identität des Produkts ist „Einzelnutzer, rein lokal, schnell". Eines davon hinzuzufügen würde ändern, was das Produkt ist. + +### Warum nicht Electron / Tauri? + +Die heißesten Pfade in diesem Produkt (Timing des globalen Tastenkürzels, Fokus-Wiederherstellung, synthetische Tastenanschlag-Injektion, Accessibility-Berechtigungsablauf) sind macOS-Systemintegrations-Belange. Eine plattformübergreifende Hülle fügt Latenz und Indirektion hinzu, ohne Funktionen zu bringen, die für dieses Produkt wichtig sind. Siehe [docs/技术选型.md](docs/技术选型.md) für die vollständige Begründung. + +### Wie melde ich einen Bug oder wünsche mir eine Funktion? + +Öffne ein Issue: . Bitte nutze die Vorlagen — sie ersparen uns beiden Rückfragen. + +### Wie importiere ich meine bestehenden Prompts aus einem anderen Tool? + +Nutze `Settings → Maintenance → Import JSON` für vollständige PromptPanel-Bibliotheks-Übertragungen oder `Import MD` für Markdown-Prompt-Sammlungen. Importe erstellen zuerst automatisch ein lokales Datenbank-Backup. `Export JSON` eignet sich am besten für verlustfreie Migration; `Export MD` eignet sich am besten für nachvollziehbares Teilen. + +## Mitwirken + +PRs willkommen — bitte lies zuerst [CONTRIBUTING.md](.github/CONTRIBUTING.md). Zwei nicht offensichtliche Regeln: + +1. **UI-Änderungen müssen mit `frontend-draft/` übereinstimmen.** Dieses Verzeichnis ist die maßgebliche Quelle für die Optik; liefere keine Swift-View aus, die dem JSX-Mockup widerspricht. +2. **Bleibe innerhalb des PRD-Umfangs.** Wenn ein Vorschlag das Produkt in Richtung Cloud / Teams / Workflows drängen würde, ist er ein „Nein", egal wie gut er umgesetzt ist. Das ist kein Gatekeeping — es ist der Grund, warum das Tool schnell und vertrauenswürdig ist. + +## Danksagungen + +PromptPanel steht auf: + +- [GRDB.swift](https://github.com/groue/GRDB.swift) von Gwendal Roué +- [KeyboardShortcuts](https://github.com/sindresorhus/KeyboardShortcuts) von Sindre Sorhus +- [Sparkle](https://github.com/sparkle-project/Sparkle) vom Sparkle-Team + +… und der breiteren Swift- / AppKit-Community, deren Dokumentation und Stack-Overflow-Antworten die Systemintegrationspfade erst möglich gemacht haben. + +## Lizenz + +[MIT](LICENSE) © 2026 tytsxai und PromptPanel-Mitwirkende. + +--- + +**Keywords** (damit du das hier tatsächlich findest, wenn du suchst): macOS prompt manager · AI prompt launcher · ChatGPT prompt manager macOS · Claude prompt library · Cursor snippet manager · Copilot prompt template launcher · open-source TextExpander alternative · Espanso alternative · Raycast snippets alternative · Alfred snippet replacement · global hotkey paste macOS · local-first prompt library · offline AI prompt storage · native Swift NSPanel app · AI workflow productivity tool · prompt template manager macOS · snippet launcher macOS · keyboard-first prompt picker · LLM prompt library Mac · prompt engineering toolkit macOS · Cursor prompt manager · fast local prompt launcher for AI · NDA-safe prompt storage · macOS Prompt-Manager · Prompt-Bibliothek Mac · Snippet-Verwaltung macOS · lokaler AI-Prompt-Launcher · Tastenkürzel-Einfügen macOS. + +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=tytsxai/PromptPanel&type=Date)](https://www.star-history.com/#tytsxai/PromptPanel&Date) diff --git a/README.es.md b/README.es.md new file mode 100644 index 0000000..98b7ff5 --- /dev/null +++ b/README.es.md @@ -0,0 +1,396 @@ +
+ +PromptPanel 项目快贴 — gestor de prompts y lanzador de snippets nativo para macOS + +# PromptPanel | 项目快贴 + +### Gestor de prompts / lanzador de snippets nativo para macOS, pensado para ChatGPT, Claude, Cursor, Copilot, VS Code y Terminal +### Native macOS prompt manager and snippet launcher for ChatGPT, Claude, Cursor, Copilot, VS Code, and Terminal. + +PromptPanel (项目快贴) es un **gestor de prompts para macOS** de tipo local-first, un **lanzador de prompts de IA** y un **lanzador de snippets de código**. Pulsa un atajo global, busca en tu **biblioteca local de prompts / snippets** y pega prompts, code snippets, plantillas e instrucciones reutilizables en **ChatGPT, Claude, Cursor, Copilot, VS Code, Terminal, el navegador o cualquier campo de texto**. + +PromptPanel is a local-first **macOS prompt manager**, **AI prompt launcher**, and **snippet launcher**. It is built for developers and AI power users who reuse multiline prompts, coding templates, project context blocks, terminal commands, and reply snippets across apps. + +[![Release: v1.1.0](https://img.shields.io/badge/Release-v1.1.0-blue.svg)](CHANGELOG.md) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Platform: macOS 14+](https://img.shields.io/badge/Platform-macOS%2014%2B-lightgrey.svg)](https://www.apple.com/macos) +[![Swift 5.10](https://img.shields.io/badge/Swift-5.10-orange.svg)](https://swift.org) +[![Apple Silicon & Intel](https://img.shields.io/badge/Arch-Apple%20Silicon%20%26%20Intel-blue.svg)](#instalación) +[![Local-first · No cloud](https://img.shields.io/badge/Local--first-No%20cloud-brightgreen.svg)](#privacidad-y-datos) +[![PRs welcome](https://img.shields.io/badge/PRs-welcome-success.svg)](.github/CONTRIBUTING.md) + +[English](README.md) · [简体中文](README.zh-CN.md) · [繁體中文](README.zh-TW.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [**Español**](README.es.md) · [Français](README.fr.md) · [Deutsch](README.de.md) + +[FAQ](docs/FAQ.md) · [Documentación](docs/README.md) · [LLM index](llms.txt) · [Changelog](CHANGELOG.md) · [Contribuir](.github/CONTRIBUTING.md) + +Panel rápido del gestor de prompts PromptPanel para macOS — búsqueda con atajo global de prompts de ChatGPT, prompts de Claude, snippets de Cursor y plantillas de IA reutilizables + +
+ +--- + +## Resumen en 30 segundos / 30-Second Summary + +| Dimensión / Field | Descripción / Answer | +| --- | --- | +| Qué es / What it is | Un prompt manager y snippet launcher de código abierto y local-first para macOS, que abre un panel nativo con un atajo global para buscar y pegar texto reutilizable. | +| Qué problema resuelve / Problem solved | Evita que los usuarios frecuentes de ChatGPT, Claude, Cursor, Copilot, VS Code y Terminal tengan que revolver sus notas una y otra vez para copiar el mismo system prompt, contexto de proyecto o plantilla de comandos. | +| Para quién es / Audience | Usuarios intensivos de IA, desarrolladores, prompt engineers, redactores técnicos, PM, consultores y desarrolladores independientes que necesitan aislar su biblioteca de prompts por proyecto. | +| Funciones clave / Core features | Atajo global, búsqueda instantánea, aislamiento por proyecto, `Universal / proyecto general`, filtrado por `#tag`, prioridad del portapapeles, pegado automático mediante Accessibility, registro de ejecución, importación/exportación en JSON/Markdown. | +| Pila técnica / Tech stack | Swift 5.10, AppKit `NSPanel`, SwiftUI, SQLite/GRDB, KeyboardShortcuts, Sparkle 2, Swift Package Manager. | +| Inicio rápido / Quick start | `git clone` -> `./scripts/build-app.sh` -> `open dist/PromptPanel.app`. En la primera ejecución, concede el permiso de Accessibility para el pegado automático; si no lo concedes, también puede copiar al portapapeles. | +| Casos de uso típicos / Use cases | Role prompt de ChatGPT/Claude, contexto de proyecto de Cursor, checklist de revisión de PR, snippet de comando de terminal, plantilla de notas de reunión, plantilla de respuesta específica por cliente. | +| Limitaciones / Limits | Solo compatible con macOS 14+; la Release actual aún no incluye un binario notarizado; sin sincronización en la nube, sin colaboración en equipo, sin versión para Windows/Linux; el pegado automático depende del permiso de Accessibility de macOS. | + +## ¿Qué es PromptPanel? / What is PromptPanel? + +**PromptPanel (项目快贴)** es una **herramienta de gestión de prompts para macOS** y un **snippet launcher** de código abierto y nativos. Está diseñado en torno a un flujo de trabajo de IA muy corto: en cualquier aplicación en primer plano pulsas un atajo, buscas en tu biblioteca local de prompts, pulsas `Enter`, el contenido se escribe primero en el portapapeles del sistema y luego intenta pegarse automáticamente en el campo de texto activo. Sin cuentas, sin sincronización en la nube, sin telemetría: los datos principales permanecen en tu propio Mac. + +In English: **PromptPanel is a native macOS prompt manager, AI prompt launcher, and local-first snippet manager** for people who reuse prompts and templates across ChatGPT, Claude, Cursor, Copilot, VS Code, Terminal, browsers, and other macOS text fields. + +Si estás buscando **gestión de prompts de ChatGPT en macOS**, **biblioteca de prompts de Claude**, **gestor de snippets de código para Cursor**, **biblioteca de prompts local-first**, **macOS global hotkey paste tool**, **Raycast Snippets alternative for AI prompts** u **open-source TextExpander alternative for multiline prompts**, PromptPanel responde justo a esa necesidad: convertir las instrucciones de IA, los snippets de código y el contexto de proyecto que escribes repetidamente en un panel rápido local, buscable y auditable. + +## ¿Te suena familiar? + +PromptPanel existe porque los mismos cinco problemas aparecen a diario para cualquiera que trabaje con LLM: + +- Reescribes el mismo **role / system prompt** ("eres un ingeniero senior de plantilla…") en un chat nuevo de ChatGPT o Claude diez veces al día. +- Mantienes una app de notas o un borrador lleno de **prompts de IA y checklists de revisión de código** y navegas por él a golpe de `⌘+F`. +- Por fin encuentras el prompt correcto y **el pegado falla en silencio** porque el foco cambió o la app bloqueó las pulsaciones de teclado sintéticas. +- Tu **bloque de contexto de proyecto de Cursor / Copilot** está en un archivo, el **snippet de comando de terminal** en otro y el **prompt de revisión de PR** en un tercero, y ninguno se puede buscar desde un único lugar. +- No vas a poner un brief real de cliente ni una arquitectura propietaria en un **gestor de prompts en la nube**, así que acabas sin ningún gestor de prompts. + +PromptPanel reduce todo eso a un único ciclo de menos de un segundo, con un archivo SQLite local que te pertenece por completo. + +## ¿Por qué PromptPanel? + +La mayoría de los "gestores de prompts" son o bien extensiones de navegador (atadas a un solo sitio), o bien herramientas de snippets genéricas que no se diseñaron para el flujo de trabajo de IA. PromptPanel se ha construido específicamente en torno a un ciclo corto: + +> **atajo → búsqueda → enter → el contenido aterriza en el campo de entrada activo** + +Todo lo demás está al servicio de que ese ciclo sea rápido, predecible y nunca pierda datos. + +| Lo que quieres… | Lo que te da PromptPanel | +|---|---| +| Una biblioteca de prompts que funcione **en todas las apps**, no solo en un sitio web | Atajo global, panel nativo de macOS, funciona en cualquier campo de texto | +| **Ciclo nativo de baja latencia** — objetivo de menos de un segundo desde la pulsación hasta la escritura | Objetivo de < 300 ms de atajo a foco, < 100 ms de refresco de búsqueda, < 250 ms de ejecución | +| **Aislamiento por proyecto** para que los prompts del cliente A no se filtren al cliente B | Proyectos de primer nivel + un proyecto `Universal` integrado para el contenido compartido | +| **Sin dependencia de la nube** para prompts sensibles | SQLite local. Cero llamadas de red para las funciones principales. Tus datos son un único archivo que te pertenece | +| **Pegado automático que no falla en silencio** | Pegado automático primero, respaldo del portapapeles siempre, y un aviso claro si el pegado fue bloqueado | +| **Operación solo con teclado** | Invocar → escribir → flechas → Enter. El ratón nunca es necesario | +| Código abierto que puedes auditar, bifurcar y en el que confiar | Licencia MIT, Swift puro, sin telemetría | + +## ¿Para quién es? + +- **Usuarios intensivos de ChatGPT / Claude / Gemini** que reutilizan las mismas definiciones de rol, restricciones de formato de salida y bloques de contexto +- **Usuarios de Cursor / Copilot / Aider** que pegan los mismos resúmenes de arquitectura y checklists de revisión +- **Desarrolladores** que escriben repetidamente esqueletos de mensajes de commit, plantillas de revisión de código, comandos de terminal y snippets de diagnóstico de errores +- **Indie hackers y consultores** que hacen malabares con varios proyectos de clientes, cada uno con sus guías de estilo y reglas de tono de voz +- **Redactores técnicos y PM** que mantienen respuestas reutilizables, actualizaciones de estado y esqueletos de especificaciones + +Si "copio y pego el mismo prompt multilínea veinte veces al día" te describe, esta herramienta se escribió para ti. + +## Funciones + +### Núcleo (v1.0) + +- 🔥 **Atajo global** — invoca el panel desde cualquier app en primer plano, con atajo configurable +- ⚡ **< 300 ms hasta la entrada** — basado en `NSPanel`, sin Electron, sin runtime web, sin arranque en frío +- 🔍 **Búsqueda instantánea** en título y cuerpo, sin paso de confirmación +- 🗂️ **Proyectos** — aísla los prompts por cliente, repositorio o contexto; el proyecto `Universal` siempre está visible +- 📋 **Pegado automático con respaldo del portapapeles** — usa `CGEvent` para enviar ⌘V, y degrada con elegancia si falta el permiso de Accessibility +- 🎯 **Prioridad al teclado** — flechas para navegar, Enter para ejecutar, Esc para descartar +- 📌 **Fijar y ordenar** — fija las entradas frecuentes, ordena manualmente, luego por recencia y luego por número de usos +- 🌗 Tema **claro / oscuro / del sistema** +- 🪶 **Residente en la barra de menús** — fuera del camino hasta que lo invocas +- 🚀 **Inicio al abrir sesión** mediante `SMAppService` +- 🔐 **Degradación consciente de permisos** — sin Accessibility, sigues teniendo copia con una tecla y una pista clara en la interfaz +- 📝 **Contenido multilínea** — cuerpos de plantilla completos, sin límite de longitud en el almacenamiento +- 📊 **Registro de ejecución** para diagnosticar fallos de pegado +- 🔄 **Actualización manual vía GitHub Releases** (la actualización automática de Sparkle está integrada pero se distribuye desactivada por defecto; el mantenedor la activará una vez que se aloje un feed appcast firmado) + +### Lo que explícitamente *no* hace (límites del proyecto) + +Por diseño, PromptPanel **nunca** añadirá sincronización en la nube, colaboración en equipo ni orquestación compleja de flujos de trabajo. No son cosas "para más adelante": están fuera de alcance para siempre. La herramienta es una utilidad de un solo usuario, solo local, y ese es precisamente su valor. Consulta [PRD §4.2](docs/项目快贴-PRD.md) para conocer el razonamiento. + +## Capturas de pantalla + +| Panel rápido — `⌥2` desde cualquier app | Biblioteca — proyectos, entradas, niveles por número de usos | +|:---:|:---:| +| Panel rápido de PromptPanel — lanzador de prompts de IA con atajo global, con números de fila continuos, búsqueda, fijado, alcance por proyecto, niveles por número de usos y pegado desde el portapapeles para ChatGPT, Claude y Cursor en macOS | Biblioteca de PromptPanel — gestor de prompts local-first para macOS con proyectos, entradas de prompts, snippets reutilizables, vista previa del editor, etiquetas, fijado y recuento de usos por entrada | +| Panel más pequeño — huella compacta sobre cualquier editor | Ajustes — preferencias, permisos, mantenimiento | +| Panel rápido más pequeño de PromptPanel — selector de prompts con prioridad al teclado y lanzador de snippets flotando sobre otra app de macOS | Ajustes de PromptPanel — preferencias segmentadas, permiso de Accessibility, grabador de atajos, comportamiento del panel, copia de seguridad, registros, ubicación de la base de datos y estado de ejecución | + +## ¿Cómo funciona? + +``` + ┌──────────────┐ hotkey ┌──────────────┐ select ┌──────────────┐ + │ any app │ ──────────► │ PromptPanel │ ──────────► │ clipboard │ + │ (ChatGPT, │ (global) │ NSPanel │ (Enter) │ (write) │ + │ Claude, │ │ │ └──────┬───────┘ + │ Cursor…) │ ◄──────────── │ │ │ + └──────────────┘ paste / focus└──────────────┘ │ + ▲ restored │ + └────────── CGEvent ⌘V (Accessibility permission) ◄───────────┘ + fallback: clipboard only + toast +``` + +1. Pulsas el atajo configurado (la librería `KeyboardShortcuts` lo captura a nivel de todo el sistema). +2. PromptPanel coloca un `NSPanel` sobre la ventana activa, enfoca el campo de búsqueda y muestra las entradas del proyecto actual más las del proyecto `Universal`, ordenadas por fijado → manual → recencia → número de usos. +3. Escribes para filtrar (en vivo, sin confirmar), navegas con las flechas y pulsas `Enter`. +4. El contenido seleccionado **siempre** se escribe primero en el portapapeles del sistema (esta es la garantía: el portapapeles nunca falla en silencio). +5. El panel se oculta, la app anterior recupera el foco y PromptPanel sintetiza un `⌘V` mediante `CGEvent`. Si falta el permiso de Accessibility o la app de destino bloquea los eventos sintéticos, un aviso te indica "Copiado — pulsa ⌘V para pegar." +6. La ejecución se registra localmente para que puedas diagnosticar más tarde cualquier problema de pegado específico de una app. + +Esta separación — **el portapapeles como garantía, el pegado automático como mejor esfuerzo** — es la decisión de diseño más importante del proyecto. + +## Instalación + +> **Requisito del sistema:** macOS 14 (Sonoma) o posterior. Se admiten tanto Apple Silicon como Intel. + +### Opción A — Compilar desde el código fuente (vía actual mientras esté en pre-release) + +```bash +# 1. Clonar +git clone https://github.com/tytsxai/PromptPanel.git +cd PromptPanel + +# 2. Compilar el paquete .app (firmado ad-hoc por defecto) +./scripts/build-app.sh + +# 3. Muévelo a Aplicaciones (o ejecútalo desde dist/) +open dist/PromptPanel.app +``` + +Requisitos para compilar: + +- Xcode 15+ con el SDK de macOS 14 +- Toolchain de Swift 5.10 (`xcrun swift --version`) + +### Opción B — Release firmada y notarizada + +Las GitHub Releases actualmente solo incluyen notas de versión de código/documentación; todavía no se adjunta ningún binario notarizado. Hasta que se complete la cadena de notarización de Developer ID, compila localmente con `./scripts/build-app.sh`. + +### Configuración de la primera ejecución + +1. **Concede el permiso de Accessibility** cuando se te solicite. macOS lo usa para permitir las pulsaciones de teclado sintéticas `⌘V`. Sin él, PromptPanel sigue copiando al portapapeles de forma fiable; simplemente pegas manualmente. +2. **Configura tu atajo** en Ajustes → Atajo. El valor por defecto actual es `⌥2`; elige otro atajo si entra en conflicto con tu configuración. +3. **Crea un proyecto** o empieza a añadir entradas a `Universal`. + +## Inicio rápido + +```text +1. ⌥2 → aparece el panel, con el foco en el campo de búsqueda +2. escribe "review"→ filtra hasta tu prompt de revisión de código +3. ↵ → el contenido se pega en el campo de texto activo +4. (el panel se oculta) → sigues trabajando +``` + +Puedes cambiar el proyecto activo desde dentro del panel sin abrir la ventana principal — solo con el teclado, sin desvíos. + +## Configuración + +| Ajuste | Dónde | Notas | +|---|---|---| +| Atajo global | Ajustes → Atajo | Un único atajo. Comportamiento de alternancia: la misma tecla lo descarta | +| Tema | Ajustes → Apariencia | Claro / oscuro / seguir al sistema | +| Inicio al abrir sesión | Ajustes → General | Usa `SMAppService` | +| Canal de actualización | GitHub Releases (manual) | Sparkle 2 está integrado pero desactivado hasta que se aloje un appcast firmado; suscríbete a las notificaciones de versiones y reemplaza el `.app` | +| Ubicación de la base de datos | `~/Library/Application Support/PromptPanel/promptpanel.db` | SQLite de un único archivo, fácil de respaldar | +| Registros | `~/Library/Logs/PromptPanel/` | Se inspeccionan mediante el "Runtime Health" de la ventana principal | + +## Privacidad y datos + +- **Local-first por definición.** Tus prompts viven en un único archivo SQLite en tu Mac. La app no envía tu contenido a ningún sitio. +- **Sin telemetría.** Sin SDK de analítica, sin endpoints de métricas, sin servicio de reporte de fallos. +- **El acceso a la red** es nulo en la versión actual. Sparkle viene incluido, pero el feed de actualización no está configurado, así que no ocurre ninguna llamada saliente en absoluto salvo que una compilación futura incluya un appcast. +- **Sin cuentas.** No hay nada donde iniciar sesión. +- **Código abierto.** Audita `Sources/PromptPanel/Core/` para verificar cualquiera de los puntos anteriores. + +Si tus prompts contienen información propietaria — arquitectura interna, briefs de clientes, contexto bajo NDA — esta es justamente la propiedad que quieres. + +## ¿Cómo se compara PromptPanel con las alternativas? + +> Orientación rápida, no un ataque. Estas herramientas son buenas en lo suyo. + +| | **PromptPanel** | TextExpander | Espanso | Raycast Snippets | Alfred Snippets | Extensiones de prompts para navegador | +|---|:---:|:---:|:---:|:---:|:---:|:---:| +| Código abierto | ✅ MIT | ❌ | ✅ GPLv3 | Parcial | ❌ | variable | +| Nativo de macOS (sin Electron / runtime web) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| Funciona en cualquier app (no solo en el navegador) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| Panel de búsqueda rápida (no solo cadenas de activación) | ✅ | parcial | ❌ | ✅ | ✅ | variable | +| Aislamiento por proyecto / contexto | ✅ de primer nivel | grupos | carpetas | carpetas | carpetas | poco frecuente | +| Flujo solo con teclado | ✅ | parcial | ✅ | ✅ | ✅ | variable | +| Opción solo local / sin nube | ✅ por defecto | opcional, los planes de pago empujan a la nube | ✅ | requiere cuenta | ✅ | normalmente en la nube | +| Gratis | ✅ | $$$ | ✅ | freemium | requiere Powerpack | variable | +| Construido específicamente en torno al flujo de trabajo de prompts de IA | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ pero solo en el navegador | + +**En resumen:** si solo vives en el navegador, una extensión de navegador está bien. Si vives en Cursor/VS Code/Terminal/Slack/en todas partes, quieres algo nativo y basado en un panel. Entre las opciones nativas basadas en panel, PromptPanel es la de código abierto y con forma de prompt de IA. + +## Ejemplos de flujo de trabajo + +Formas concretas en que la gente usa PromptPanel en su día a día — estas también sirven como las preguntas de cola larga de tipo "¿cómo hago…?" que PromptPanel está diseñado para responder. + +- **Arranca un chat nuevo de ChatGPT / Claude con tu role / system prompt estándar.** Atajo → escribe `role` → Enter. Se acabó reescribir "Eres un ingeniero senior de plantilla que…" por 200.ª vez. +- **Suelta un bloque de contexto de proyecto de Cursor / Copilot en un archivo nuevo.** Ten guardado una sola vez un bloque de varios párrafos "aquí están la arquitectura, las convenciones y las restricciones"; pégalo en cualquier sesión nueva de Cursor con una sola pulsación. +- **Pega un checklist de revisión de código en un borrador de PR.** El largo checklist con viñetas vive en PromptPanel; un atajo lo añade a la descripción de un PR de GitHub. +- **Lanza un comando de terminal recurrente con la combinación exacta de flags.** `kubectl get pods --context=prod --namespace=… -o jsonpath=…` — se escribe una vez, se guarda y se invoca con una cadena de búsqueda corta. +- **Inserta una plantilla de notas de reunión en Notion / Obsidian / Apple Notes.** La misma plantilla en cada standup del lunes → un atajo, cero copiar y pegar desde un borrador de una app de notas. +- **Envía una plantilla de respuesta de atención al cliente / ventas a Slack o al correo.** Un tono distinto por plantilla, elegido desde un panel de búsqueda rápida en lugar de una carpeta de notas. +- **Cambia entre proyectos con conjuntos de prompts aislados.** Cada grupo de proyecto conserva sus propios role prompts, snippets y plantillas, de modo que el contexto nunca se filtra entre clientes. + +## Pila técnica + +- **Lenguaje:** Swift 5.10 +- **UI:** AppKit (`NSPanel`, `NSStatusItem`) + SwiftUI +- **Almacenamiento:** SQLite mediante [GRDB.swift](https://github.com/groue/GRDB.swift) +- **Atajo:** [sindresorhus/KeyboardShortcuts](https://github.com/sindresorhus/KeyboardShortcuts) (Carbon Hot Key por debajo) +- **Pegado automático:** `CGEvent` sintetizando ⌘V tras restaurar el foco +- **Elemento de inicio de sesión:** `SMAppService` +- **Actualizador:** [Sparkle 2](https://sparkle-project.org/) +- **Distribución:** Developer ID + notarización de Apple (sin Mac App Store) +- **Compilación:** Swift Package Manager — no requiere proyecto de Xcode + +Consulta [docs/技术选型.md](docs/技术选型.md) para el registro completo de decisiones. + +## Estructura del proyecto + +``` +PromptPanel/ +├── Sources/PromptPanel/ +│ ├── App/ # AppDelegate, AppState, lifecycle +│ ├── Core/ +│ │ ├── Database/ # SQLite open / migrate / recover +│ │ ├── Repositories/ # Project, Entry, Settings, Log +│ │ ├── Services/ # PanelService, ExecuteService, SearchService… +│ │ ├── Diagnostics/ # Hotkey-to-focus timing +│ │ └── Utils/ +│ ├── Integrations/ # Clipboard, Paste (CGEvent), Tray, Hotkey, Updater +│ ├── Features/ +│ │ ├── Panel/ # QuickPanelView + ViewModel — the hero feature +│ │ └── MainWindow/ # Library + Settings +│ └── Resources/ # Info.plist, entitlements, AppIcon, Assets +├── Tests/PromptPanelTests/ +├── frontend-draft/ # UI source-of-truth (HTML/JSX mockups + screenshots) +├── scripts/ # build-app.sh, notarize, release readiness, restore +├── docs/ # public architecture, FAQ, PRD, release, ops, handoff docs +├── .github/ # contribution, security, conduct, issue/PR templates, CI +├── llms.txt # short AI-search / LLM-readable project index +├── codemeta.json # structured open-source software metadata +└── Package.swift # SwiftPM package definition +``` + +## Documentación + +El conjunto de documentación pública forma parte del repositorio: + +- [Índice de documentación](docs/README.md) +- [FAQ](docs/FAQ.md) +- [PRD del producto](docs/项目快贴-PRD.md) +- [Presentación del proyecto](docs/项目介绍.md) +- [Arquitectura](docs/架构说明.md) +- [Módulos y lógica principales](docs/关键模块与核心逻辑.md) +- [Contrato de API y funciones](docs/API与功能说明.md) +- [Configuración](docs/配置说明.md) +- [Despliegue](docs/部署说明.md) +- [Estándares de desarrollo](docs/开发规范.md) +- [Ejemplos de uso](docs/使用示例.md) +- [Operaciones y resolución de problemas](docs/运维与排错指南.md) +- [Guía de traspaso para mantenedores](docs/接手维护指南.md) +- [Matriz de sincronización docs/código](docs/文档与代码同步矩阵.md) +- [Publicación y recuperación](docs/生产发布与恢复手册.md) +- [Hoja de ruta y guía de contribución](docs/路线图与贡献指南.md) +- [Búsqueda con IA y descubribilidad](docs/ai-search-discoverability.md) +- [Contexto completo para LLM](docs/ai-search/llms-full.txt) +- [Metadatos de búsqueda JSON-LD](docs/search-metadata.schema.jsonld) +- [Contribuir](.github/CONTRIBUTING.md) +- [Seguridad](.github/SECURITY.md) +- [Metadatos de software CodeMeta](codemeta.json) + +Para motores de respuesta y herramientas de IA con conocimiento del repositorio, empieza por [llms.txt](llms.txt) o el ampliado [llms-full.txt](docs/ai-search/llms-full.txt). + +## Búsqueda y descubribilidad con IA + +PromptPanel mantiene dentro del repositorio las superficies clásicas de SEO y GEO para que tanto los usuarios como los motores de respuesta puedan identificar el proyecto con precisión: + +- `README.md` y `README.zh-CN.md` ofrecen el resumen de página de aterrizaje para humanos y las capturas de pantalla actuales. +- [llms.txt](llms.txt) es el índice corto legible por IA para herramientas con conocimiento del repositorio. +- [docs/ai-search/llms-full.txt](docs/ai-search/llms-full.txt) es el contexto ampliado para motores de respuesta, con respuestas de tipo FAQ. +- [codemeta.json](codemeta.json) y [Schema.org JSON-LD](docs/search-metadata.schema.jsonld) describen la app para catálogos de software, rastreadores de búsqueda y la futura publicación de un sitio de documentación. +- [Búsqueda con IA y descubribilidad](docs/ai-search-discoverability.md) define la redacción canónica, el mapa de intención de búsqueda y el checklist de mantenimiento. + +## Hoja de ruta + +PromptPanel sigue una hoja de ruta **deliberadamente pequeña**. El PRD enumera los elementos que están explícitamente descartados para siempre (sincronización en la nube, equipos, orquestación de flujos de trabajo). Dentro del alcance: + +- [x] v1.0 — enlace principal completo: atajo → búsqueda → ejecución, proyectos, respaldo del portapapeles, claro/oscuro, elemento de inicio de sesión, Sparkle, scripts de firma y notarización +- [x] Importación y exportación en JSON / Markdown, con copia de seguridad automática antes de importar +- [ ] "Repetir última entrada" con un solo toque +- [ ] Plantillas con variables (estilo `{{name}}`) — solo si se puede añadir sin ralentizar el enlace principal + +Consulta [docs/路线图与贡献指南.md](docs/路线图与贡献指南.md) para las reglas de priorización, [CHANGELOG.md](CHANGELOG.md) para lo que ya se ha publicado y los [issues](https://github.com/tytsxai/PromptPanel/issues) para la planificación pública. + +## Preguntas frecuentes + +Para una FAQ más extensa, consulta [FAQ.md](docs/FAQ.md). Las más destacadas: + +### ¿PromptPanel es gratis? + +Sí. Licencia MIT. Sin plan de pago, sin límite de uso, sin cuenta. + +### ¿Funciona con Apple Silicon (M1/M2/M3/M4)? + +Sí — se compila como binario universal. Probado tanto en Apple Silicon como en Intel con macOS 14+. + +### ¿Envía mis prompts a algún sitio? + +No. La versión actual no hace ninguna llamada de red. Sparkle viene incluido, pero el feed de actualización no está configurado en esta compilación, así que no ocurre ningún tráfico saliente en absoluto. El contenido de tus prompts nunca sale de tu Mac. + +### ¿Por qué pide el permiso de Accessibility? + +Para sintetizar una pulsación `⌘V` después de que el panel se oculte y tu app anterior recupere el foco. Sin este permiso la app sigue funcionando — simplemente se detiene en el paso del portapapeles y te muestra un aviso "pulsa ⌘V para pegar". + +### ¿Añadiréis sincronización en la nube / uso compartido en equipo / flujos de trabajo? + +No, deliberadamente. Están listados como **no-objetivos permanentes** en el [PRD §4.2](docs/项目快贴-PRD.md). La identidad del producto es "un solo usuario, solo local, rápido". Añadir cualquiera de ellos cambiaría lo que es el producto. + +### ¿Por qué no Electron / Tauri? + +Los caminos más críticos de este producto (temporización del atajo global, restauración del foco, inyección de pulsaciones sintéticas, flujo de permisos de accessibility) son cuestiones de integración con el sistema de macOS. Una capa multiplataforma añade latencia e indirección sin aportar ninguna función que importe para este producto. Consulta [docs/技术选型.md](docs/技术选型.md) para el razonamiento completo. + +### ¿Cómo reporto un error o solicito una función? + +Abre un issue: . Por favor, usa las plantillas — nos ahorrarán idas y venidas a ambos. + +### ¿Cómo importo mis prompts existentes desde otra herramienta? + +Usa `Settings → Maintenance → Import JSON` para transferencias completas de bibliotecas de PromptPanel, o `Import MD` para colecciones de prompts en Markdown. Las importaciones crean automáticamente antes una copia de seguridad local de la base de datos. `Export JSON` es lo mejor para una migración sin pérdidas; `Export MD` es lo mejor para compartir de forma revisable. + +## Contribuir + +Los PR son bienvenidos — por favor, lee primero [CONTRIBUTING.md](.github/CONTRIBUTING.md). Dos reglas no obvias: + +1. **Los cambios de UI deben alinearse con `frontend-draft/`.** Ese directorio es la fuente de verdad para lo visual; no publiques una vista de Swift que contradiga el mockup de JSX. +2. **Mantente dentro del alcance del PRD.** Si una propuesta empujaría el producto hacia la nube / equipos / flujos de trabajo, es un "no" por muy bien implementada que esté. Esto no es control de acceso — es la razón por la que la herramienta es rápida y fiable. + +## Agradecimientos + +PromptPanel se apoya en: + +- [GRDB.swift](https://github.com/groue/GRDB.swift) de Gwendal Roué +- [KeyboardShortcuts](https://github.com/sindresorhus/KeyboardShortcuts) de Sindre Sorhus +- [Sparkle](https://github.com/sparkle-project/Sparkle) del equipo de Sparkle + +…y la comunidad más amplia de Swift / AppKit, cuya documentación y respuestas en Stack Overflow hicieron posibles los caminos de integración con el sistema. + +## Licencia + +[MIT](LICENSE) © 2026 tytsxai y colaboradores de PromptPanel. + +--- + +**Keywords** (para que puedas encontrar esto de verdad cuando busques): macOS prompt manager · AI prompt launcher · ChatGPT prompt manager macOS · Claude prompt library · Cursor snippet manager · Copilot prompt template launcher · open-source TextExpander alternative · Espanso alternative · Raycast snippets alternative · Alfred snippet replacement · global hotkey paste macOS · local-first prompt library · offline AI prompt storage · native Swift NSPanel app · AI workflow productivity tool · prompt template manager macOS · snippet launcher macOS · keyboard-first prompt picker · LLM prompt library Mac · prompt engineering toolkit macOS · Cursor prompt manager · fast local prompt launcher for AI · NDA-safe prompt storage · gestor de prompts macOS · lanzador de prompts de IA · biblioteca de prompts local · gestor de snippets para Cursor · alternativa a TextExpander de código abierto · almacenamiento de prompts sin conexión. + +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=tytsxai/PromptPanel&type=Date)](https://www.star-history.com/#tytsxai/PromptPanel&Date) diff --git a/README.fr.md b/README.fr.md new file mode 100644 index 0000000..14048e9 --- /dev/null +++ b/README.fr.md @@ -0,0 +1,397 @@ +
+ +PromptPanel 项目快贴 — gestionnaire de prompts et lanceur de snippets natif macOS + +# PromptPanel | 项目快贴 + +### Gestionnaire de prompts / lanceur de snippets natif macOS pour ChatGPT, Claude, Cursor, Copilot, VS Code et le Terminal + +### Native macOS prompt manager and snippet launcher for ChatGPT, Claude, Cursor, Copilot, VS Code, and Terminal. + +PromptPanel(项目快贴)est un **gestionnaire de prompts macOS**, un **lanceur de prompts IA** et un **lanceur de snippets de code** local-first. Appuyez sur un raccourci global, recherchez dans votre **Prompt library / snippet library** locale, puis collez des prompts, code snippets, templates et instructions réutilisables dans **ChatGPT, Claude, Cursor, Copilot, VS Code, le Terminal, le navigateur ou n'importe quel champ de saisie**. + +PromptPanel is a local-first **macOS prompt manager**, **AI prompt launcher**, and **snippet launcher**. It is built for developers and AI power users who reuse multiline prompts, coding templates, project context blocks, terminal commands, and reply snippets across apps. + +[![Release: v1.1.0](https://img.shields.io/badge/Release-v1.1.0-blue.svg)](CHANGELOG.md) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Platform: macOS 14+](https://img.shields.io/badge/Platform-macOS%2014%2B-lightgrey.svg)](https://www.apple.com/macos) +[![Swift 5.10](https://img.shields.io/badge/Swift-5.10-orange.svg)](https://swift.org) +[![Apple Silicon & Intel](https://img.shields.io/badge/Arch-Apple%20Silicon%20%26%20Intel-blue.svg)](#installation) +[![Local-first · No cloud](https://img.shields.io/badge/Local--first-No%20cloud-brightgreen.svg)](#confidentialité--données) +[![PRs welcome](https://img.shields.io/badge/PRs-welcome-success.svg)](.github/CONTRIBUTING.md) + +[English](README.md) · [简体中文](README.zh-CN.md) · [繁體中文](README.zh-TW.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Español](README.es.md) · [**Français**](README.fr.md) · [Deutsch](README.de.md) + +[FAQ](docs/FAQ.md) · [Documentation](docs/README.md) · [LLM index](llms.txt) · [Journal des modifications](CHANGELOG.md) · [Contribuer](.github/CONTRIBUTING.md) + +Panneau rapide du gestionnaire de prompts macOS PromptPanel — recherche par raccourci global de prompts ChatGPT, prompts Claude, snippets Cursor et templates IA réutilisables + +
+ +--- + +## Comprendre en 30 secondes / 30-Second Summary + +| Dimension / Field | Explication / Answer | +| --- | --- | +| Ce que c'est / What it is | Un macOS Prompt manager and snippet launcher open source et local-first, qui invoque un panneau natif via un raccourci global pour rechercher et coller du texte réutilisable. | +| Problème résolu / Problem solved | Éviter aux utilisateurs intensifs de ChatGPT, Claude, Cursor, Copilot, VS Code et du Terminal de fouiller sans cesse leurs notes ou de recopier le même system prompt, contexte de projet ou template de commande. | +| Pour qui / Audience | Utilisateurs intensifs d'IA, développeurs, Prompt engineers, rédacteurs techniques, PM, consultants et développeurs indépendants qui doivent isoler leur prompt library par projet. | +| Fonctions clés / Core features | Raccourci global, recherche instantanée, isolation par projet, `Universal / projet universel`, filtrage par `#tag`, priorité au presse-papiers, collage automatique via Accessibility, journal d'exécution, import/export JSON/Markdown. | +| Pile technique / Tech stack | Swift 5.10, AppKit `NSPanel`, SwiftUI, SQLite/GRDB, KeyboardShortcuts, Sparkle 2, Swift Package Manager. | +| Démarrage rapide / Quick start | `git clone` -> `./scripts/build-app.sh` -> `open dist/PromptPanel.app`. Après octroi de la permission Accessibility au premier lancement, le collage automatique fonctionne ; sans elle, la copie vers le presse-papiers reste possible. | +| Cas d'usage typiques / Use cases | Role prompt ChatGPT/Claude, contexte de projet Cursor, checklist de revue de PR, snippet de commande Terminal, template de notes de réunion, template de réponse propre à un client. | +| Limites / Limits | Uniquement macOS 14+ ; pas de binaire notarisé dans la Release actuelle ; pas de synchronisation cloud, pas de collaboration d'équipe, pas de version Windows/Linux ; le collage automatique dépend de la permission Accessibility de macOS. | + +## Qu'est-ce que PromptPanel ? / What is PromptPanel? + +**PromptPanel(项目快贴)** est un **outil de gestion de prompts macOS** et un **snippet launcher** open source et natif. Il est conçu autour d'un flux de travail IA très court : dans n'importe quelle application au premier plan, appuyez sur un raccourci, recherchez dans votre bibliothèque de prompts locale, appuyez sur `Enter`, le contenu est d'abord écrit dans le presse-papiers du système, puis collé automatiquement dans le champ de saisie actif au mieux. Aucun compte, aucune synchronisation cloud, aucune télémétrie : les données essentielles restent sur votre propre Mac. + +In English: **PromptPanel is a native macOS prompt manager, AI prompt launcher, and local-first snippet manager** for people who reuse prompts and templates across ChatGPT, Claude, Cursor, Copilot, VS Code, Terminal, browsers, and other macOS text fields. + +Si vous recherchez **gestion de prompts ChatGPT macOS**, **bibliothèque de prompts Claude**, **gestionnaire de snippets de code Cursor**, **bibliothèque de prompts local-first**, **macOS global hotkey paste tool**, **Raycast Snippets alternative for AI prompts** ou **open-source TextExpander alternative for multiline prompts**, PromptPanel répond exactement à ce besoin : transformer vos instructions IA, snippets de code et contextes de projet répétitifs en un panneau rapide local, consultable et auditable. + +## Ça vous parle ? + +PromptPanel exists because the same five problems show up every day for anyone working with LLMs: + +- You retype the same **role / system prompt** ("you are a senior staff engineer…") into a fresh ChatGPT or Claude chat ten times a day. +- You keep a Notes app or scratchpad full of **AI prompts and code-review checklists** and `⌘+F` your way through it. +- You finally find the right prompt and the **paste fails silently** because focus moved or the app blocked synthetic keystrokes. +- Your **Cursor / Copilot project context block** is in one file, the **terminal command snippet** in another, and the **PR-review prompt** in a third — none searchable from one place. +- You won't put a real client brief or proprietary architecture into a **cloud prompt manager**, so you end up with no prompt manager at all. + +PromptPanel collapses all of that into a single, sub-second loop with a local SQLite file you fully own. + +## Pourquoi PromptPanel ? + +La plupart des « prompt managers » sont soit des extensions de navigateur (verrouillées sur un seul site), soit des outils de snippets génériques qui n'ont pas été conçus pour le flux de travail IA. PromptPanel est construit spécifiquement autour d'une seule boucle courte : + +> **raccourci → recherche → entrée → le contenu arrive dans le champ de saisie actif** + +Tout le reste sert à rendre cette boucle rapide, prévisible et jamais susceptible de perdre du contenu. + +| Vous voulez… | PromptPanel vous offre | +|---|---| +| Une bibliothèque de prompts qui fonctionne **dans toutes les applications**, pas seulement un site web | Raccourci global, panneau natif macOS, fonctionne dans n'importe quel champ de texte | +| **Une boucle native à faible latence** — objectif inférieur à la seconde entre la frappe et la saisie | Cible < 300 ms du raccourci à la mise au point, < 100 ms de rafraîchissement de la recherche, < 250 ms d'exécution | +| **Une isolation par projet** pour que les prompts du client A ne fuitent pas vers le client B | Projets de premier ordre + un projet `Universal` intégré pour le contenu partagé | +| **Aucun verrouillage cloud** pour les prompts sensibles | SQLite local. Zéro appel réseau pour les fonctions essentielles. Vos données tiennent dans un seul fichier qui vous appartient | +| **Un collage automatique qui n'échoue pas en silence** | Collage automatique d'abord, repli sur le presse-papiers toujours — et un toast clair si le collage a été bloqué | +| **Un fonctionnement 100 % clavier** | Invoquer → taper → touches fléchées → Enter. La souris n'est jamais nécessaire | +| Un logiciel open source que vous pouvez auditer, forker et en qui vous fier | Licence MIT, Swift pur, aucune télémétrie | + +## À qui s'adresse-t-il ? + +- **Utilisateurs intensifs de ChatGPT / Claude / Gemini** qui réutilisent les mêmes définitions de rôle, contraintes de format de sortie et blocs de contexte +- **Utilisateurs de Cursor / Copilot / Aider** qui collent les mêmes résumés d'architecture et checklists de revue +- **Développeurs** qui tapent à répétition des ébauches de messages de commit, templates de revue de code, commandes de terminal, snippets de triage d'erreurs +- **Indie hackers et consultants** jonglant entre plusieurs projets clients avec des chartes de style et des règles de ton différentes +- **Rédacteurs techniques et PM** qui maintiennent des réponses réutilisables, des mises à jour de statut et des trames de spécifications + +Si « je copie-colle le même prompt multiligne vingt fois par jour » vous décrit, cet outil a été écrit pour vous. + +## Fonctionnalités + +### Cœur (v1.0) + +- 🔥 **Raccourci global** — invoquez le panneau depuis n'importe quelle application au premier plan, raccourci configurable +- ⚡ **Moins de 300 ms jusqu'à la saisie** — basé sur `NSPanel`, sans Electron, sans runtime web, sans démarrage à froid +- 🔍 **Recherche instantanée** sur le titre et le corps, sans étape de validation +- 🗂️ **Projets** — isolez les prompts par client, dépôt ou contexte ; le projet `Universal` est toujours visible +- 📋 **Collage automatique avec repli presse-papiers** — utilise `CGEvent` pour envoyer ⌘V, se rabat proprement si la permission Accessibility est absente +- 🎯 **Priorité au clavier** — touches fléchées pour naviguer, Enter pour exécuter, Esc pour fermer +- 📌 **Épingler et trier** — épinglez les entrées fréquentes, tri manuel, puis par récence, puis par nombre d'utilisations +- 🌗 **Thème clair / sombre / système** +- 🪶 **Résident dans la barre de menus** — discret jusqu'à ce que vous l'invoquiez +- 🚀 **Lancement à l'ouverture de session** via `SMAppService` +- 🔐 **Dégradation consciente des permissions** — sans Accessibility, vous conservez la copie en une touche et un indice clair dans l'interface +- 📝 **Contenu multiligne** — corps de templates complets, aucune limite de longueur de stockage +- 📊 **Journal d'exécution** pour diagnostiquer les échecs de collage +- 🔄 **Mise à jour manuelle via GitHub Releases** (la mise à jour automatique Sparkle est intégrée mais désactivée par défaut ; le mainteneur l'activera une fois qu'un flux appcast signé sera hébergé) + +### Ce qu'il ne fait explicitement *pas* (limites du projet) + +Par conception, PromptPanel n'ajoutera **jamais** de synchronisation cloud, de collaboration d'équipe ou d'orchestration de workflows complexes. Il ne s'agit pas de fonctionnalités « pour plus tard » — elles sont hors périmètre pour toujours. L'outil est un utilitaire mono-utilisateur, purement local, et c'est là tout l'intérêt. Voir [PRD §4.2](docs/项目快贴-PRD.md) pour la justification. + +## Captures d'écran + +| Panneau rapide — `⌥2` depuis n'importe quelle app | Bibliothèque — projets, entrées, niveaux d'utilisation | +|:---:|:---:| +| Panneau rapide PromptPanel — lanceur de prompts IA par raccourci global avec numéros de ligne continus, recherche, épinglage, portée par projet, niveaux d'utilisation et collage depuis le presse-papiers pour ChatGPT, Claude et Cursor sur macOS | Bibliothèque PromptPanel — gestionnaire de prompts macOS local-first avec projets, entrées de prompts, snippets réutilisables, aperçu d'éditeur, tags, épinglage et nombre d'utilisations par entrée | +| Panneau réduit — empreinte compacte au-dessus de tout éditeur | Réglages — préférences, permissions, maintenance | +| Panneau rapide réduit PromptPanel — sélecteur de prompts et lanceur de snippets priorité clavier flottant au-dessus d'une autre application macOS | Réglages PromptPanel — préférences segmentées, permission Accessibility, enregistreur de raccourci, comportement du panneau, sauvegarde, journaux, emplacement de la base de données et santé d'exécution | + +## Comment ça fonctionne ? + +``` + ┌──────────────┐ hotkey ┌──────────────┐ select ┌──────────────┐ + │ any app │ ──────────► │ PromptPanel │ ──────────► │ clipboard │ + │ (ChatGPT, │ (global) │ NSPanel │ (Enter) │ (write) │ + │ Claude, │ │ │ └──────┬───────┘ + │ Cursor…) │ ◄──────────── │ │ │ + └──────────────┘ paste / focus└──────────────┘ │ + ▲ restored │ + └────────── CGEvent ⌘V (Accessibility permission) ◄───────────┘ + fallback: clipboard only + toast +``` + +1. Vous appuyez sur le raccourci configuré (la bibliothèque `KeyboardShortcuts` le capture à l'échelle du système). +2. PromptPanel place un `NSPanel` au-dessus de la fenêtre active, met le champ de recherche au point, et affiche les entrées du projet courant plus celles du projet `Universal`, triées par épinglage → manuel → récence → nombre d'utilisations. +3. Vous tapez pour filtrer (en direct, sans validation), utilisez les flèches pour choisir, appuyez sur `Enter`. +4. Le contenu sélectionné est **toujours** d'abord écrit dans le presse-papiers du système (c'est la garantie — le presse-papiers n'échoue jamais en silence). +5. Le panneau se masque, l'application précédente reprend la mise au point, et PromptPanel synthétise un `⌘V` via `CGEvent`. Si la permission Accessibility est absente ou si l'application cible bloque les événements synthétiques, un toast vous indique « Copié — appuyez sur ⌘V pour coller ». +6. L'exécution est journalisée localement afin que vous puissiez diagnostiquer plus tard tout problème de collage propre à une application. + +Cette séparation — **le presse-papiers comme garantie, le collage automatique en meilleur effort** — est la décision de conception la plus importante du projet. + +## Installation + +> **Prérequis système :** macOS 14 (Sonoma) ou version ultérieure. Apple Silicon et Intel sont tous deux pris en charge. + +### Option A — Compiler depuis les sources (voie actuelle en pré-version) + +```bash +# 1. Clone +git clone https://github.com/tytsxai/PromptPanel.git +cd PromptPanel + +# 2. Build the .app bundle (signed ad-hoc by default) +./scripts/build-app.sh + +# 3. Move it into Applications (or run from dist/) +open dist/PromptPanel.app +``` + +Prérequis pour la compilation : + +- Xcode 15+ avec le SDK macOS 14 +- Chaîne d'outils Swift 5.10 (`xcrun swift --version`) + +### Option B — Version signée et notarisée + +Les GitHub Releases ne contiennent actuellement que des notes de version portant sur les sources et la documentation ; aucun binaire notarisé n'y est encore attaché. Tant que la chaîne de notarisation Developer ID n'est pas complète, compilez localement avec `./scripts/build-app.sh`. + +### Configuration au premier lancement + +1. **Accordez la permission Accessibility** lorsque la demande apparaît. macOS s'en sert pour autoriser les frappes synthétiques `⌘V`. Sans elle, PromptPanel copie tout de même de façon fiable dans le presse-papiers ; il vous suffit de coller manuellement. +2. **Définissez votre raccourci** dans Settings → Hotkey. La valeur par défaut actuelle est `⌥2` ; choisissez un autre raccourci s'il entre en conflit avec votre configuration. +3. **Créez un projet** ou commencez à ajouter des entrées à `Universal`. + +## Démarrage rapide + +```text +1. ⌥2 → panel appears, search field focused +2. type "review" → filters to your code-review prompt +3. ↵ → content pasted into the active text field +4. (panel hides) → keep working +``` + +Vous pouvez changer de projet actif depuis l'intérieur du panneau sans ouvrir la fenêtre principale — au clavier uniquement, sans détour. + +## Configuration + +| Réglage | Emplacement | Notes | +|---|---|---| +| Raccourci global | Settings → Hotkey | Un seul raccourci. Comportement de bascule : la même touche ferme | +| Thème | Settings → Appearance | Clair / sombre / suivre le système | +| Lancement à l'ouverture de session | Settings → General | Utilise `SMAppService` | +| Canal de mise à jour | GitHub Releases (manuel) | Sparkle 2 est intégré mais désactivé tant qu'un appcast signé n'est pas hébergé ; abonnez-vous aux notifications de version et remplacez le `.app` | +| Emplacement de la base de données | `~/Library/Application Support/PromptPanel/promptpanel.db` | SQLite mono-fichier, facile à sauvegarder | +| Journaux | `~/Library/Logs/PromptPanel/` | Inspectés via la « Runtime Health » de la fenêtre principale | + +## Confidentialité & données + +- **Local-first par définition.** Vos prompts résident dans un unique fichier SQLite sur votre Mac. L'application ne fait aucun POST de votre contenu où que ce soit. +- **Aucune télémétrie.** Aucun SDK d'analytics, aucun point de terminaison de métriques, aucun service de rapport de crash. +- **L'accès réseau** est nul dans la version actuelle. Sparkle est fourni mais le flux de mise à jour n'est pas configuré, donc aucun appel sortant n'a lieu, sauf si une future version embarque un appcast. +- **Aucun compte.** Il n'y a rien où se connecter. +- **Open source.** Auditez `Sources/PromptPanel/Core/` pour vérifier tout ce qui précède. + +Si vos prompts contiennent des informations propriétaires — architecture interne, briefs clients, contexte soumis à un NDA — c'est exactement la propriété que vous recherchez. + +## Comment PromptPanel se compare-t-il aux alternatives ? + +> Une orientation rapide, pas un dénigrement. Ces outils sont bons dans ce qu'ils font. + +| | **PromptPanel** | TextExpander | Espanso | Raycast Snippets | Alfred Snippets | Extensions de prompts pour navigateur | +|---|:---:|:---:|:---:|:---:|:---:|:---:| +| Open source | ✅ MIT | ❌ | ✅ GPLv3 | Partiel | ❌ | variable | +| Natif macOS (sans Electron / runtime web) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| Fonctionne dans toute application (pas seulement le navigateur) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| Interface panneau de recherche rapide (pas seulement des chaînes de déclenchement) | ✅ | partiel | ❌ | ✅ | ✅ | variable | +| Isolation par projet / contexte | ✅ de premier ordre | groupes | dossiers | dossiers | dossiers | rare | +| Flux 100 % clavier | ✅ | partiel | ✅ | ✅ | ✅ | variable | +| Option 100 % locale / sans cloud | ✅ par défaut | optionnelle, les paliers payants poussent vers le cloud | ✅ | compte requis | ✅ | généralement cloud | +| Gratuit | ✅ | $$$ | ✅ | freemium | nécessite Powerpack | variable | +| Conçu spécifiquement autour du flux de travail des prompts IA | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ mais navigateur uniquement | + +**En résumé :** si vous vivez uniquement dans le navigateur, une extension de navigateur convient. Si vous vivez dans Cursor/VS Code/Terminal/Slack/partout, il vous faut quelque chose de natif et basé sur un panneau. Parmi les options natives basées sur un panneau, PromptPanel est celle qui est open source et taillée pour les prompts IA. + +## Exemples de flux de travail + +Des façons concrètes dont les gens utilisent PromptPanel au quotidien — elles font aussi office de questions « comment faire pour... » de longue traîne auxquelles PromptPanel est conçu pour répondre. + +- **Lancer une nouvelle conversation ChatGPT / Claude avec votre role / system prompt standard.** Raccourci → tapez `role` → Enter. Fini de retaper « You are a senior staff engineer who... » pour la 200e fois. +- **Insérer un bloc de contexte de projet Cursor / Copilot dans un nouveau fichier.** Stockez une seule fois un bloc de plusieurs paragraphes « voici l'architecture, les conventions et les contraintes » ; collez-le dans toute nouvelle session Cursor en une frappe. +- **Coller une checklist de revue de code dans un brouillon de PR.** La longue liste à puces vit dans PromptPanel ; un raccourci l'ajoute à la description d'une PR GitHub. +- **Déclencher une commande de terminal répétitive avec la combinaison de flags exacte.** `kubectl get pods --context=prod --namespace=… -o jsonpath=…` — tapée une fois, stockée, invoquée par une courte chaîne de recherche. +- **Insérer un template de notes de réunion dans Notion / Obsidian / Apple Notes.** Le même template à chaque standup du lundi → un raccourci, zéro copier-coller depuis un bloc-notes. +- **Envoyer un template de réponse service client / commercial dans Slack ou par e-mail.** Un ton différent par template, choisi depuis un panneau de recherche rapide plutôt que dans un dossier de notes. +- **Basculer entre des projets aux jeux de prompts isolés.** Chaque groupe de projet conserve ses propres role prompts, snippets et templates pour que le contexte ne déborde jamais d'un client à l'autre. + +## Pile technique + +- **Langage :** Swift 5.10 +- **Interface :** AppKit (`NSPanel`, `NSStatusItem`) + SwiftUI +- **Stockage :** SQLite via [GRDB.swift](https://github.com/groue/GRDB.swift) +- **Raccourci :** [sindresorhus/KeyboardShortcuts](https://github.com/sindresorhus/KeyboardShortcuts) (Carbon Hot Key sous le capot) +- **Collage automatique :** `CGEvent` synthétisant ⌘V après restauration de la mise au point +- **Élément d'ouverture de session :** `SMAppService` +- **Mise à jour :** [Sparkle 2](https://sparkle-project.org/) +- **Distribution :** Developer ID + notarisation Apple (pas de Mac App Store) +- **Compilation :** Swift Package Manager — aucun projet Xcode requis + +Voir [docs/技术选型.md](docs/技术选型.md) pour le journal de décision complet. + +## Structure du projet + +``` +PromptPanel/ +├── Sources/PromptPanel/ +│ ├── App/ # AppDelegate, AppState, lifecycle +│ ├── Core/ +│ │ ├── Database/ # SQLite open / migrate / recover +│ │ ├── Repositories/ # Project, Entry, Settings, Log +│ │ ├── Services/ # PanelService, ExecuteService, SearchService… +│ │ ├── Diagnostics/ # Hotkey-to-focus timing +│ │ └── Utils/ +│ ├── Integrations/ # Clipboard, Paste (CGEvent), Tray, Hotkey, Updater +│ ├── Features/ +│ │ ├── Panel/ # QuickPanelView + ViewModel — the hero feature +│ │ └── MainWindow/ # Library + Settings +│ └── Resources/ # Info.plist, entitlements, AppIcon, Assets +├── Tests/PromptPanelTests/ +├── frontend-draft/ # UI source-of-truth (HTML/JSX mockups + screenshots) +├── scripts/ # build-app.sh, notarize, release readiness, restore +├── docs/ # public architecture, FAQ, PRD, release, ops, handoff docs +├── .github/ # contribution, security, conduct, issue/PR templates, CI +├── llms.txt # short AI-search / LLM-readable project index +├── codemeta.json # structured open-source software metadata +└── Package.swift # SwiftPM package definition +``` + +## Documentation + +L'ensemble de la documentation publique fait partie du dépôt : + +- [Index de la documentation](docs/README.md) +- [FAQ](docs/FAQ.md) +- [PRD produit](docs/项目快贴-PRD.md) +- [Présentation du projet](docs/项目介绍.md) +- [Architecture](docs/架构说明.md) +- [Modules et logique de base](docs/关键模块与核心逻辑.md) +- [Contrat d'API et de fonctionnalités](docs/API与功能说明.md) +- [Configuration](docs/配置说明.md) +- [Déploiement](docs/部署说明.md) +- [Normes de développement](docs/开发规范.md) +- [Exemples d'utilisation](docs/使用示例.md) +- [Exploitation et dépannage](docs/运维与排错指南.md) +- [Guide de transfert au mainteneur](docs/接手维护指南.md) +- [Matrice de synchronisation docs/code](docs/文档与代码同步矩阵.md) +- [Publication et récupération](docs/生产发布与恢复手册.md) +- [Feuille de route et guide de contribution](docs/路线图与贡献指南.md) +- [Recherche IA et découvrabilité](docs/ai-search-discoverability.md) +- [Contexte LLM complet](docs/ai-search/llms-full.txt) +- [Métadonnées de recherche JSON-LD](docs/search-metadata.schema.jsonld) +- [Contribuer](.github/CONTRIBUTING.md) +- [Sécurité](.github/SECURITY.md) +- [Métadonnées logicielles CodeMeta](codemeta.json) + +Pour les moteurs de réponse et les outils IA conscients du dépôt, commencez par [llms.txt](llms.txt) ou par la version étendue [llms-full.txt](docs/ai-search/llms-full.txt). + +## Recherche et découvrabilité par l'IA + +PromptPanel conserve les surfaces classiques de SEO et de GEO dans le dépôt afin que les utilisateurs et les moteurs de réponse puissent identifier le projet avec précision : + +- `README.md` et `README.zh-CN.md` fournissent le résumé de landing-page destiné aux humains et les captures d'écran actuelles. +- [llms.txt](llms.txt) est l'index court lisible par l'IA pour les outils conscients du dépôt. +- [docs/ai-search/llms-full.txt](docs/ai-search/llms-full.txt) est le contexte étendu pour moteurs de réponse, avec des réponses de style FAQ. +- [codemeta.json](codemeta.json) et [Schema.org JSON-LD](docs/search-metadata.schema.jsonld) décrivent l'application pour les catalogues de logiciels, les robots d'indexation et la future publication d'un site de documentation. +- [Recherche IA et découvrabilité](docs/ai-search-discoverability.md) définit la formulation canonique, la carte des intentions de recherche et la checklist de maintenance. + +## Feuille de route + +PromptPanel suit une feuille de route **délibérément réduite**. Le PRD liste les éléments explicitement écartés pour toujours (synchronisation cloud, équipes, orchestration de workflows). Dans le périmètre : + +- [x] v1.0 — chaîne principale complète : raccourci → recherche → exécution, projets, repli presse-papiers, clair/sombre, élément d'ouverture de session, Sparkle, scripts de signature et de notarisation +- [x] Import et export JSON / Markdown, avec sauvegarde automatique avant import +- [ ] « Répéter la dernière entrée » en un geste +- [ ] Templates avec variables (style `{{name}}`) — uniquement si cela peut être ajouté sans ralentir la chaîne principale + +Voir [docs/路线图与贡献指南.md](docs/路线图与贡献指南.md) pour les règles de priorisation, [CHANGELOG.md](CHANGELOG.md) pour ce qui a été livré, et les [issues](https://github.com/tytsxai/PromptPanel/issues) pour la planification publique. + +## Questions fréquentes + +Pour une FAQ plus complète, voir [FAQ.md](docs/FAQ.md). Les incontournables : + +### PromptPanel est-il gratuit ? + +Oui. Licence MIT. Pas de palier payant, pas de plafond d'utilisation, pas de compte. + +### Fonctionne-t-il avec Apple Silicon (M1/M2/M3/M4) ? + +Oui — il se compile en binaire universel. Testé à la fois sur Apple Silicon et Intel sous macOS 14+. + +### Envoie-t-il mes prompts où que ce soit ? + +Non. La version actuelle ne fait aucun appel réseau. Sparkle est fourni mais le flux de mise à jour n'est pas configuré dans cette build, donc aucun trafic sortant n'a lieu. Le contenu de vos prompts ne quitte jamais votre Mac. + +### Pourquoi demande-t-il la permission Accessibility ? + +Pour synthétiser une frappe `⌘V` après que le panneau s'est masqué et que votre application précédente a repris la mise au point. Sans cette permission, l'application fonctionne tout de même — elle s'arrête simplement à l'étape du presse-papiers et vous affiche un toast « appuyez sur ⌘V pour coller ». + +### Ajouterez-vous la synchronisation cloud / le partage d'équipe / les workflows ? + +Non, délibérément. Ceux-ci sont listés comme **non-objectifs permanents** dans le [PRD §4.2](docs/项目快贴-PRD.md). L'identité du produit est « mono-utilisateur, purement local, rapide ». Ajouter l'un d'eux changerait la nature même du produit. + +### Pourquoi pas Electron / Tauri ? + +Les chemins les plus critiques de ce produit (timing du raccourci global, restauration de la mise au point, injection de frappes synthétiques, flux de permission Accessibility) relèvent de l'intégration au système macOS. Une coque multiplateforme ajoute de la latence et de l'indirection sans apporter aucune fonctionnalité qui compte pour ce produit. Voir [docs/技术选型.md](docs/技术选型.md) pour le raisonnement complet. + +### Comment signaler un bug ou demander une fonctionnalité ? + +Ouvrez une issue : . Merci d'utiliser les templates — ils nous éviteront à tous deux des allers-retours. + +### Comment importer mes prompts existants depuis un autre outil ? + +Utilisez `Settings → Maintenance → Import JSON` pour les transferts complets de bibliothèque PromptPanel, ou `Import MD` pour les collections de prompts en Markdown. Les imports créent automatiquement d'abord une sauvegarde locale de la base de données. `Export JSON` est idéal pour une migration sans perte ; `Export MD` est idéal pour un partage relisible. + +## Contribuer + +Les PR sont les bienvenues — merci de lire d'abord [CONTRIBUTING.md](.github/CONTRIBUTING.md). Deux règles peu évidentes : + +1. **Les changements d'interface doivent s'aligner sur `frontend-draft/`.** Ce répertoire est la source de vérité pour le visuel ; ne livrez pas une vue Swift qui contredit le mockup JSX. +2. **Restez dans le périmètre du PRD.** Si une proposition pousse le produit vers le cloud / les équipes / les workflows, c'est un « non » quelle que soit la qualité de son implémentation. Ce n'est pas du gatekeeping — c'est la raison pour laquelle l'outil est rapide et digne de confiance. + +## Remerciements + +PromptPanel repose sur : + +- [GRDB.swift](https://github.com/groue/GRDB.swift) par Gwendal Roué +- [KeyboardShortcuts](https://github.com/sindresorhus/KeyboardShortcuts) par Sindre Sorhus +- [Sparkle](https://github.com/sparkle-project/Sparkle) par l'équipe Sparkle + +…et la communauté Swift / AppKit au sens large, dont la documentation et les réponses Stack Overflow ont rendu possibles les chemins d'intégration système. + +## Licence + +[MIT](LICENSE) © 2026 tytsxai et les contributeurs de PromptPanel. + +--- + +**Mots-clés** (pour que vous puissiez réellement trouver ce projet quand vous cherchez) : macOS prompt manager · AI prompt launcher · ChatGPT prompt manager macOS · Claude prompt library · Cursor snippet manager · Copilot prompt template launcher · open-source TextExpander alternative · Espanso alternative · Raycast snippets alternative · Alfred snippet replacement · global hotkey paste macOS · local-first prompt library · offline AI prompt storage · native Swift NSPanel app · AI workflow productivity tool · prompt template manager macOS · snippet launcher macOS · keyboard-first prompt picker · LLM prompt library Mac · prompt engineering toolkit macOS · Cursor prompt manager · fast local prompt launcher for AI · NDA-safe prompt storage · gestionnaire de prompts macOS · lanceur de snippets macOS · bibliothèque de prompts local-first · outil de collage par raccourci global · alternative open source à TextExpander. + +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=tytsxai/PromptPanel&type=Date)](https://www.star-history.com/#tytsxai/PromptPanel&Date) diff --git a/README.ja.md b/README.ja.md new file mode 100644 index 0000000..3bf1138 --- /dev/null +++ b/README.ja.md @@ -0,0 +1,397 @@ +
+ +PromptPanel 项目快贴 — native macOS prompt manager and snippet launcher + +# PromptPanel | 项目快贴 + +### ChatGPT、Claude、Cursor、Copilot、VS Code、ターミナル向けの macOS ネイティブ Prompt マネージャー / スニペットランチャー + +### Native macOS prompt manager and snippet launcher for ChatGPT, Claude, Cursor, Copilot, VS Code, and Terminal. + +PromptPanel(项目快贴)は、ローカルファースト設計の **macOS Prompt マネージャー**、**AI Prompt ランチャー**、**コードスニペットランチャー** です。グローバルホットキーを押してローカルの **Prompt library / snippet library** を検索し、再利用可能な prompts、code snippets、templates、instructions を **ChatGPT、Claude、Cursor、Copilot、VS Code、ターミナル、ブラウザ、あるいは任意の入力欄** に貼り付けます。 + +PromptPanel is a local-first **macOS prompt manager**, **AI prompt launcher**, and **snippet launcher**. It is built for developers and AI power users who reuse multiline prompts, coding templates, project context blocks, terminal commands, and reply snippets across apps. + +[![Release: v1.1.0](https://img.shields.io/badge/Release-v1.1.0-blue.svg)](CHANGELOG.md) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Platform: macOS 14+](https://img.shields.io/badge/Platform-macOS%2014%2B-lightgrey.svg)](https://www.apple.com/macos) +[![Swift 5.10](https://img.shields.io/badge/Swift-5.10-orange.svg)](https://swift.org) +[![Apple Silicon & Intel](https://img.shields.io/badge/Arch-Apple%20Silicon%20%26%20Intel-blue.svg)](#インストール) +[![Local-first · No cloud](https://img.shields.io/badge/Local--first-No%20cloud-brightgreen.svg)](#プライバシーとデータ) +[![PRs welcome](https://img.shields.io/badge/PRs-welcome-success.svg)](.github/CONTRIBUTING.md) + +[English](README.md) · [简体中文](README.zh-CN.md) · [繁體中文](README.zh-TW.md) · [**日本語**](README.ja.md) · [한국어](README.ko.md) · [Español](README.es.md) · [Français](README.fr.md) · [Deutsch](README.de.md) + +[FAQ](docs/FAQ.md) · [ドキュメント](docs/README.md) · [LLM index](llms.txt) · [変更履歴](CHANGELOG.md) · [コントリビュート](.github/CONTRIBUTING.md) + +PromptPanel macOS prompt manager quick panel — global hotkey search for ChatGPT prompts, Claude prompts, Cursor snippets, and reusable AI templates + +
+ +--- + +## 30 秒で理解する / 30-Second Summary + +| 項目 / Field | 説明 / Answer | +| --- | --- | +| 何であるか / What it is | オープンソースでローカルファーストの macOS Prompt manager and snippet launcher。グローバルホットキーでネイティブパネルを呼び出し、再利用可能なテキストを検索して貼り付ける。 | +| 何を解決するか / Problem solved | ChatGPT、Claude、Cursor、Copilot、VS Code、ターミナルを頻繁に使うユーザーが、同じ system prompt、プロジェクトコンテキスト、コマンドテンプレートを何度もメモから探してコピーする手間をなくす。 | +| 誰に向くか / Audience | AI heavy users、開発者、Prompt engineers、テクニカルライター、PM、コンサルタント、そしてプロジェクトごとに prompt library を分離したい個人開発者。 | +| 主要機能 / Core features | グローバルホットキー、即時検索、プロジェクト分離、`Universal / 共通プロジェクト`、`#tag` フィルタ、クリップボード優先、Accessibility による自動貼り付け、実行ログ、JSON/Markdown インポート/エクスポート。 | +| 技術スタック / Tech stack | Swift 5.10, AppKit `NSPanel`, SwiftUI, SQLite/GRDB, KeyboardShortcuts, Sparkle 2, Swift Package Manager。 | +| クイックスタート / Quick start | `git clone` -> `./scripts/build-app.sh` -> `open dist/PromptPanel.app`。初回起動で Accessibility 権限を付与すれば自動貼り付けが可能。付与しなくてもクリップボードへのコピーは動作する。 | +| 典型的な用途 / Use cases | ChatGPT/Claude role prompt、Cursor project context、PR review checklist、terminal command snippet、meeting notes template、client-specific response template。 | +| 制限事項 / Limits | macOS 14+ のみ対応。現在の Release には公証済みバイナリはまだ含まれない。クラウド同期、チームコラボレーション、Windows/Linux 版はなし。自動貼り付けは macOS Accessibility 権限に依存する。 | + +## PromptPanel とは? / What is PromptPanel? + +**PromptPanel(项目快贴)** は、オープンソースでネイティブな **macOS Prompt 管理ツール** と **snippet launcher** です。とても短い AI ワークフローを中心に設計されています。任意のフォアグラウンドアプリでホットキーを押し、ローカルの Prompt ライブラリを検索し、`Enter` を押すと、内容がまずシステムクリップボードに書き込まれ、次にベストエフォートで現在の入力欄へ自動貼り付けされます。アカウントも、クラウド同期も、テレメトリもなく、コアデータはあなた自身の Mac の中に留まります。 + +In English: **PromptPanel is a native macOS prompt manager, AI prompt launcher, and local-first snippet manager** for people who reuse prompts and templates across ChatGPT, Claude, Cursor, Copilot, VS Code, Terminal, browsers, and other macOS text fields. + +もしあなたが **ChatGPT Prompt 管理 macOS**、**Claude Prompt ライブラリ**、**Cursor コードスニペットマネージャー**、**ローカルファースト Prompt ライブラリ**、**macOS global hotkey paste tool**、**Raycast Snippets alternative for AI prompts**、あるいは **open-source TextExpander alternative for multiline prompts** を探しているなら、PromptPanel はまさにそのニーズに応えます。繰り返し入力する AI 指示、コードスニペット、プロジェクトコンテキストを、ローカルで検索可能かつ監査可能なクイックパネルに変えます。 + +## こんな経験に覚えはありませんか? / Does this sound familiar? + +PromptPanel が存在するのは、LLM を扱う人なら誰もが毎日直面する、同じ 5 つの問題があるからです。 + +- 新しい ChatGPT や Claude のチャットに、同じ **role / system prompt**(「あなたはシニアスタッフエンジニアです…」)を 1 日 10 回も打ち直している。 +- **AI プロンプトやコードレビューのチェックリスト** で埋まったメモアプリやスクラッチパッドを抱え、`⌘+F` で探し回っている。 +- ようやく正しいプロンプトを見つけても、フォーカスが移ったりアプリが合成キーストロークをブロックしたりして、**貼り付けが無言で失敗する**。 +- **Cursor / Copilot のプロジェクトコンテキストブロック** は 1 つのファイルに、**ターミナルコマンドのスニペット** は別のファイルに、**PR レビュー用プロンプト** はさらに別のファイルにあり、どれも一箇所からは検索できない。 +- 本物のクライアント案件や独自アーキテクチャを **クラウド型 Prompt マネージャー** に入れたくないので、結局プロンプトマネージャーをまったく使わずに終わる。 + +PromptPanel はそのすべてを、あなたが完全に所有するローカルの SQLite ファイルとともに、1 秒未満のひとつのループに集約します。 + +## なぜ PromptPanel なのか? / Why PromptPanel? + +ほとんどの「prompt manager」は、ブラウザ拡張機能(1 つのサイトに縛られる)か、AI ワークフロー向けに作られていない汎用スニペットツールのどちらかです。PromptPanel はひとつの短いループを中心に専用設計されています。 + +> **ホットキー → 検索 → Enter → 内容がアクティブな入力欄に着地する** + +それ以外のすべては、このループを高速で、予測可能で、決して欠落しないものにするために存在します。 + +| こうしたい… | PromptPanel が提供するもの | +|---|---| +| 1 つのウェブサイトだけでなく、**あらゆるアプリ横断** で動くプロンプトライブラリ | グローバルホットキー、ネイティブ macOS パネル、任意のテキストフィールドで動作 | +| **低レイテンシのネイティブループ** — キー押下から入力まで 1 秒未満を目標 | ホットキーからフォーカスまで < 300 ms、検索更新 < 100 ms、実行 < 250 ms を目標 | +| クライアント A のプロンプトがクライアント B に漏れないための **プロジェクト分離** | ファーストクラスの projects と、共有コンテンツ用の組み込み `Universal` プロジェクト | +| 機密性の高いプロンプトを **クラウドに囲い込まれない** | ローカル SQLite。コア機能でのネットワーク通信ゼロ。データはあなたが所有する単一ファイル | +| **無言で失敗しない自動貼り付け** | 自動貼り付けを優先、クリップボードフォールバックは常に有効。貼り付けがブロックされたら明確なトースト表示 | +| **キーボードのみの操作** | 呼び出し → 入力 → 矢印キー → Enter。マウスは一切不要 | +| 監査・フォーク・信頼できるオープンソース | MIT ライセンス、素の Swift、テレメトリなし | + +## 誰のためのツールか? / Who is it for? + +- 同じ役割定義、出力フォーマットの制約、コンテキストブロックを再利用する **ChatGPT / Claude / Gemini のヘビーユーザー** +- 同じアーキテクチャ要約やレビューチェックリストを貼り付ける **Cursor / Copilot / Aider ユーザー** +- コミットメッセージの雛形、コードレビューテンプレート、ターミナルコマンド、エラートリアージのスニペットを繰り返し入力する **開発者** +- 異なるスタイルガイドやトーンのルールを持つ複数のクライアント案件をこなす **インディーハッカーやコンサルタント** +- 再利用可能な返信、ステータス更新、仕様の雛形を管理する **テクニカルライターや PM** + +「同じ複数行のプロンプトを 1 日 20 回コピペしている」という説明があなたに当てはまるなら、このツールはあなたのために書かれました。 + +## 機能 / Features + +### コア機能(v1.0) + +- 🔥 **グローバルホットキー** — 任意のフォアグラウンドアプリからパネルを呼び出し、ショートカットは設定可能 +- ⚡ **< 300 ms の入力到達時間** — `NSPanel` ベース、Electron なし、Web ランタイムなし、コールドスタートなし +- 🔍 **即時検索** — タイトルと本文を横断、送信ステップ不要 +- 🗂️ **プロジェクト** — クライアント、リポジトリ、コンテキストごとにプロンプトを分離。`Universal` プロジェクトは常に表示 +- 📋 **クリップボードフォールバック付き自動貼り付け** — `CGEvent` で ⌘V を送信し、Accessibility 権限がなければ安全にフォールバック +- 🎯 **キーボードファースト** — 矢印キーで移動、Enter で実行、Esc で閉じる +- 📌 **ピン留めとソート** — よく使う項目をピン留めし、手動ソート → 最近使用順 → 使用回数順 +- 🌗 **ライト / ダーク / システム** テーマ +- 🪶 **メニューバー常駐** — 呼び出すまで邪魔にならない +- 🚀 **ログイン時に起動** — `SMAppService` を使用 +- 🔐 **権限に応じた段階的動作** — Accessibility がなくても、ワンキーコピーと明確な UI ヒントを利用可能 +- 📝 **複数行コンテンツ** — テンプレート本文全体に対応、保存時の文字数制限なし +- 📊 **実行ログ** — 貼り付け失敗の診断用 +- 🔄 **GitHub Releases 経由の手動アップデート**(Sparkle 自動アップデートは組み込み済みだが既定でオフ。署名済み appcast フィードがホストされ次第、メンテナが有効化する) + +### あえて *やらない* こと(プロジェクトの境界) + +設計上、PromptPanel はクラウド同期、チームコラボレーション、複雑なワークフローのオーケストレーションを **決して** 追加しません。これらは「後回し」ではなく、永久にスコープ外です。このツールはシングルユーザーでローカル専用のユーティリティであり、それこそが本質です。理由については [PRD §4.2](docs/项目快贴-PRD.md) を参照してください。 + +## スクリーンショット / Screenshots + +| クイックパネル — 任意のアプリから `⌥2` | ライブラリ — プロジェクト、エントリ、使用回数の階層 | +|:---:|:---:| +| PromptPanel quick panel — global hotkey AI prompt launcher with continuous row numbers, search, pinning, project scope, use-count tiers, and clipboard paste for ChatGPT, Claude, and Cursor on macOS | PromptPanel library — local-first macOS prompt manager with projects, prompt entries, reusable snippets, editor preview, tags, pinning, and per-entry use counts | +| 小型パネル — 任意のエディタ上でコンパクトな占有面積 | 設定 — 環境設定、権限、メンテナンス | +| PromptPanel smaller quick panel — keyboard-first prompt picker and snippet launcher hovering over another macOS app | PromptPanel settings — segmented preferences, Accessibility permission, hotkey recorder, panel behavior, backup, logs, database location, and runtime health | + +## どのように動作するか? / How does it work? + +``` + ┌──────────────┐ hotkey ┌──────────────┐ select ┌──────────────┐ + │ any app │ ──────────► │ PromptPanel │ ──────────► │ clipboard │ + │ (ChatGPT, │ (global) │ NSPanel │ (Enter) │ (write) │ + │ Claude, │ │ │ └──────┬───────┘ + │ Cursor…) │ ◄──────────── │ │ │ + └──────────────┘ paste / focus└──────────────┘ │ + ▲ restored │ + └────────── CGEvent ⌘V (Accessibility permission) ◄───────────┘ + fallback: clipboard only + toast +``` + +1. 設定したホットキーを押す(`KeyboardShortcuts` ライブラリがシステム全体でキャプチャ)。 +2. PromptPanel がアクティブウィンドウ上に `NSPanel` を表示し、検索欄にフォーカスして、現在のプロジェクトと `Universal` プロジェクトのエントリを、ピン → 手動 → 最近使用 → 使用回数の順にソートして表示する。 +3. 入力してフィルタリング(ライブ、送信不要)、矢印キーで選択し、`Enter` を押す。 +4. 選択した内容は **常に** まずシステムクリップボードに書き込まれる(これが保証であり、クリップボードは無言で失敗しない)。 +5. パネルが隠れ、前のアプリがフォーカスを取り戻し、PromptPanel が `CGEvent` 経由で `⌘V` を合成する。Accessibility 権限がない、またはターゲットアプリが合成イベントをブロックする場合は、「Copied — press ⌘V to paste.」というトーストが表示される。 +6. 実行はローカルにログされるので、後からアプリごとの貼り付け問題を診断できる。 + +この分離 — **クリップボードは保証、自動貼り付けはベストエフォート** — こそが、このプロジェクトで最も重要な設計判断です。 + +## インストール + +> **システム要件:** macOS 14 (Sonoma) 以降。Apple Silicon と Intel の両方に対応。 + +### 選択肢 A — ソースからビルド(プレリリース中の現在の方法) + +```bash +# 1. Clone +git clone https://github.com/tytsxai/PromptPanel.git +cd PromptPanel + +# 2. Build the .app bundle (signed ad-hoc by default) +./scripts/build-app.sh + +# 3. Move it into Applications (or run from dist/) +open dist/PromptPanel.app +``` + +ビルドの要件: + +- macOS 14 SDK を含む Xcode 15+ +- Swift 5.10 ツールチェイン(`xcrun swift --version`) + +### 選択肢 B — 署名済み・公証済みリリース + +GitHub Releases には現在、ソース/ドキュメントのリリースノートのみが含まれており、公証済みバイナリアセットはまだ添付されていません。Developer ID の公証チェーンが完成するまでは、`./scripts/build-app.sh` でローカルにビルドしてください。 + +### 初回起動時のセットアップ + +1. **Accessibility 権限を付与する** — プロンプトが表示されたら許可する。macOS はこれを使って合成 `⌘V` キーストロークを許可します。権限がなくても PromptPanel は確実にクリップボードへコピーします。手動で貼り付けるだけです。 +2. **ホットキーを設定する** — 設定 → Hotkey で行います。現在の既定値は `⌥2` です。環境と競合する場合は別のショートカットを選んでください。 +3. **プロジェクトを作成する** か、`Universal` にエントリを追加し始めます。 + +## クイックスタート / Quick start + +```text +1. ⌥2 → panel appears, search field focused +2. type "review" → filters to your code-review prompt +3. ↵ → content pasted into the active text field +4. (panel hides) → keep working +``` + +メインウィンドウを開かずに、パネル内からアクティブなプロジェクトを切り替えられます。キーボードのみで、回り道はありません。 + +## 設定 / Configuration + +| 設定 | 場所 | 備考 | +|---|---|---| +| グローバルホットキー | 設定 → Hotkey | ショートカットは 1 つ。トグル動作: 同じキーで閉じる | +| テーマ | 設定 → Appearance | ライト / ダーク / システムに追従 | +| ログイン時に起動 | 設定 → General | `SMAppService` を使用 | +| アップデートチャネル | GitHub Releases(手動) | Sparkle 2 は組み込み済みだが、署名済み appcast がホストされるまで無効。リリース通知を購読し、`.app` を差し替える | +| データベースの場所 | `~/Library/Application Support/PromptPanel/promptpanel.db` | 単一ファイルの SQLite、バックアップが容易 | +| ログ | `~/Library/Logs/PromptPanel/` | メインウィンドウの「Runtime Health」から確認 | + +## プライバシーとデータ + +- **定義上ローカルファースト。** あなたのプロンプトは Mac 上の単一の SQLite ファイルに保存されます。アプリはあなたのコンテンツをどこにも POST しません。 +- **テレメトリなし。** 分析 SDK も、メトリクスのエンドポイントも、クラッシュレポートサービスもありません。 +- **ネットワークアクセス** は現在のリリースでゼロです。Sparkle はバンドルされていますが、アップデートフィードは設定されていないため、将来のビルドが appcast を同梱しない限り、外向きの通信は一切発生しません。 +- **アカウントなし。** サインインするものは何もありません。 +- **オープンソース。** 上記のいずれも `Sources/PromptPanel/Core/` を監査して検証できます。 + +あなたのプロンプトに独自情報 — 社内アーキテクチャ、クライアント案件、NDA に縛られたコンテキスト — が含まれるなら、これこそがあなたが求める性質です。 + +## PromptPanel は代替ツールとどう違うか? / How does PromptPanel compare to alternatives? + +> 素早い方向づけであり、けなすものではありません。これらのツールはそれぞれの分野で優れています。 + +| | **PromptPanel** | TextExpander | Espanso | Raycast Snippets | Alfred Snippets | Browser prompt extensions | +|---|:---:|:---:|:---:|:---:|:---:|:---:| +| オープンソース | ✅ MIT | ❌ | ✅ GPLv3 | 部分的 | ❌ | まちまち | +| macOS ネイティブ(Electron / Web ランタイムなし) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| 任意のアプリで動作(ブラウザだけでない) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| クイック検索パネル UI(トリガー文字列だけでない) | ✅ | 部分的 | ❌ | ✅ | ✅ | まちまち | +| プロジェクト / コンテキスト分離 | ✅ ファーストクラス | グループ | フォルダ | フォルダ | フォルダ | まれ | +| キーボードのみのフロー | ✅ | 部分的 | ✅ | ✅ | ✅ | まちまち | +| ローカル専用 / クラウドなしの選択肢 | ✅ 既定 | 任意、有料プランはクラウドへ誘導 | ✅ | アカウント必須 | ✅ | 通常クラウド | +| 無料 | ✅ | $$$ | ✅ | フリーミアム | Powerpack が必要 | まちまち | +| AI プロンプトワークフロー専用に構築 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ ただしブラウザ限定 | + +**要するに:** ブラウザの中だけで生きているなら、ブラウザ拡張機能で十分です。Cursor/VS Code/ターミナル/Slack/あらゆる場所で生きているなら、ネイティブでパネルベースのものが必要です。ネイティブでパネルベースの選択肢の中で、PromptPanel はオープンソースで AI プロンプトの形に沿ったものです。 + +## ワークフローの例 / Workflow examples + +PromptPanel を日常でどう使うかの具体例です。これらは PromptPanel が答えるために作られた、ロングテールの「どうすれば…」という問いも兼ねています。 + +- **標準の role / system prompt で新しい ChatGPT / Claude チャットを立ち上げる。** ホットキー → `role` と入力 → Enter。「あなたはシニアスタッフエンジニアで…」を 200 回目も打ち直す必要はもうありません。 +- **Cursor / Copilot のプロジェクトコンテキストブロックを新しいファイルに落とし込む。** 「これがアーキテクチャ、規約、制約です」という複数段落のブロックを一度保存しておき、任意の新しい Cursor セッションにワンキーで貼り付けます。 +- **コードレビューのチェックリストを PR ドラフトに貼り付ける。** 長い箇条書きのチェックリストを PromptPanel に置いておき、ひとつのホットキーで GitHub PR の説明に追加します。 +- **正確なフラグの組み合わせで繰り返しのターミナルコマンドを実行する。** `kubectl get pods --context=prod --namespace=… -o jsonpath=…` — 一度入力して保存し、短い検索文字列で呼び出します。 +- **議事録テンプレートを Notion / Obsidian / Apple Notes に挿入する。** 毎週月曜のスタンドアップで同じテンプレート → ひとつのホットキー、メモアプリのスクラッチパッドからのコピペはゼロ。 +- **カスタマーサービス / セールスの返信テンプレートを Slack やメールに送り込む。** テンプレートごとに異なるトーンを、メモフォルダではなくクイック検索パネルから選びます。 +- **分離されたプロンプトセットでプロジェクト間を切り替える。** 各プロジェクトグループが独自の role prompt、スニペット、テンプレートを保持するので、コンテキストがクライアント間で混ざりません。 + +## 技術スタック / Tech stack + +- **言語:** Swift 5.10 +- **UI:** AppKit(`NSPanel`、`NSStatusItem`)+ SwiftUI +- **ストレージ:** [GRDB.swift](https://github.com/groue/GRDB.swift) による SQLite +- **ホットキー:** [sindresorhus/KeyboardShortcuts](https://github.com/sindresorhus/KeyboardShortcuts)(内部では Carbon Hot Key) +- **自動貼り付け:** フォーカス復元後に ⌘V を合成する `CGEvent` +- **ログイン項目:** `SMAppService` +- **アップデーター:** [Sparkle 2](https://sparkle-project.org/) +- **配布:** Developer ID + Apple 公証(Mac App Store なし) +- **ビルド:** Swift Package Manager — Xcode プロジェクト不要 + +完全な意思決定ログは [docs/技术选型.md](docs/技术选型.md) を参照してください。 + +## プロジェクト構成 / Project layout + +``` +PromptPanel/ +├── Sources/PromptPanel/ +│ ├── App/ # AppDelegate, AppState, lifecycle +│ ├── Core/ +│ │ ├── Database/ # SQLite open / migrate / recover +│ │ ├── Repositories/ # Project, Entry, Settings, Log +│ │ ├── Services/ # PanelService, ExecuteService, SearchService… +│ │ ├── Diagnostics/ # Hotkey-to-focus timing +│ │ └── Utils/ +│ ├── Integrations/ # Clipboard, Paste (CGEvent), Tray, Hotkey, Updater +│ ├── Features/ +│ │ ├── Panel/ # QuickPanelView + ViewModel — the hero feature +│ │ └── MainWindow/ # Library + Settings +│ └── Resources/ # Info.plist, entitlements, AppIcon, Assets +├── Tests/PromptPanelTests/ +├── frontend-draft/ # UI source-of-truth (HTML/JSX mockups + screenshots) +├── scripts/ # build-app.sh, notarize, release readiness, restore +├── docs/ # public architecture, FAQ, PRD, release, ops, handoff docs +├── .github/ # contribution, security, conduct, issue/PR templates, CI +├── llms.txt # short AI-search / LLM-readable project index +├── codemeta.json # structured open-source software metadata +└── Package.swift # SwiftPM package definition +``` + +## ドキュメント / Documentation + +公開ドキュメント一式はリポジトリの一部です。 + +- [ドキュメント索引](docs/README.md) +- [FAQ](docs/FAQ.md) +- [プロダクト PRD](docs/项目快贴-PRD.md) +- [プロジェクト紹介](docs/项目介绍.md) +- [アーキテクチャ](docs/架构说明.md) +- [コアモジュールとロジック](docs/关键模块与核心逻辑.md) +- [API と機能仕様](docs/API与功能说明.md) +- [設定](docs/配置说明.md) +- [デプロイ](docs/部署说明.md) +- [開発規約](docs/开发规范.md) +- [使用例](docs/使用示例.md) +- [運用とトラブルシューティング](docs/运维与排错指南.md) +- [メンテナ引き継ぎガイド](docs/接手维护指南.md) +- [ドキュメント/コード同期マトリクス](docs/文档与代码同步矩阵.md) +- [リリースとリカバリ](docs/生产发布与恢复手册.md) +- [ロードマップとコントリビューションガイド](docs/路线图与贡献指南.md) +- [AI 検索とディスカバラビリティ](docs/ai-search-discoverability.md) +- [完全な LLM コンテキスト](docs/ai-search/llms-full.txt) +- [検索メタデータ JSON-LD](docs/search-metadata.schema.jsonld) +- [コントリビュート](.github/CONTRIBUTING.md) +- [セキュリティ](.github/SECURITY.md) +- [CodeMeta ソフトウェアメタデータ](codemeta.json) + +回答エンジンやリポジトリを認識する AI ツール向けには、[llms.txt](llms.txt) または拡張版の [llms-full.txt](docs/ai-search/llms-full.txt) から始めてください。 + +## 検索と AI ディスカバラビリティ / Search & AI Discoverability + +PromptPanel は、ユーザーと回答エンジンがプロジェクトを正確に識別できるよう、従来の SEO と GEO の面をリポジトリ内に保持しています。 + +- `README.md` と `README.zh-CN.md` は、人間向けのランディングページ要約と最新のスクリーンショットを提供します。 +- [llms.txt](llms.txt) は、リポジトリを認識するツール向けの短い AI 可読索引です。 +- [docs/ai-search/llms-full.txt](docs/ai-search/llms-full.txt) は、FAQ 形式の回答を備えた拡張版の回答エンジン向けコンテキストです。 +- [codemeta.json](codemeta.json) と [Schema.org JSON-LD](docs/search-metadata.schema.jsonld) は、ソフトウェアカタログ、検索クローラー、将来のドキュメントサイト公開に向けてアプリを記述します。 +- [AI 検索とディスカバラビリティ](docs/ai-search-discoverability.md) は、正規の表現、検索意図マップ、メンテナンスチェックリストを定義します。 + +## ロードマップ / Roadmap + +PromptPanel は **意図的に小さい** ロードマップに従います。PRD には、永久に対象外の項目(クラウド同期、チーム、ワークフローのオーケストレーション)が明記されています。スコープ内では: + +- [x] v1.0 — メインリンク完成: ホットキー → 検索 → 実行、プロジェクト、クリップボードフォールバック、ライト/ダーク、ログイン項目、Sparkle、署名・公証スクリプト +- [x] JSON / Markdown インポート & エクスポート、インポート前の自動バックアップ付き +- [ ] ワンタップの「最後のエントリを繰り返す」 +- [ ] 変数テンプレート(`{{name}}` 形式)— メインリンクを遅くせずに追加できる場合のみ + +優先順位付けのルールは [docs/路线图与贡献指南.md](docs/路线图与贡献指南.md)、出荷済みの内容は [CHANGELOG.md](CHANGELOG.md)、公開計画は [issues](https://github.com/tytsxai/PromptPanel/issues) を参照してください。 + +## よくある質問 / Frequently asked questions + +より長い FAQ は [FAQ.md](docs/FAQ.md) を参照してください。ここではよくあるものを紹介します。 + +### PromptPanel は無料ですか? + +はい。MIT ライセンスです。有料プランも、使用上限も、アカウントもありません。 + +### Apple Silicon(M1/M2/M3/M4)で動作しますか? + +はい — ユニバーサルバイナリとしてビルドされます。Apple Silicon と Intel の macOS 14+ の両方でテスト済みです。 + +### 私のプロンプトをどこかに送信しますか? + +いいえ。現在のリリースはネットワーク通信を一切行いません。Sparkle はバンドルされていますが、このビルドではアップデートフィードが設定されていないため、外向きのトラフィックはまったく発生しません。あなたのプロンプトの内容が Mac の外に出ることはありません。 + +### なぜ Accessibility 権限を求めるのですか? + +パネルが隠れて前のアプリがフォーカスを取り戻した後に、`⌘V` キーストロークを合成するためです。この権限がなくてもアプリは動作します。クリップボードのステップで止まり、「press ⌘V to paste」というトーストを表示するだけです。 + +### クラウド同期 / チーム共有 / ワークフローを追加しますか? + +いいえ、意図的にしません。それらは [PRD §4.2](docs/项目快贴-PRD.md) で **恒久的な非目標** として記載されています。プロダクトのアイデンティティは「シングルユーザー、ローカル専用、高速」です。そのいずれかを追加すると、プロダクトそのものが変わってしまいます。 + +### なぜ Electron / Tauri ではないのですか? + +このプロダクトの最もホットなパス(グローバルホットキーのタイミング、フォーカス復元、合成キーストロークの注入、Accessibility 権限のフロー)は、macOS のシステム統合に関わる問題です。クロスプラットフォームのシェルは、このプロダクトで重要な機能を何も得られないまま、レイテンシと間接性を増やすだけです。完全な理由は [docs/技术选型.md](docs/技术选型.md) を参照してください。 + +### バグ報告や機能リクエストはどうすればいいですか? + +issue を開いてください: 。テンプレートを使ってください — お互いのやり取りを節約できます。 + +### 他のツールから既存のプロンプトをインポートするには? + +PromptPanel ライブラリを丸ごと移行するには `Settings → Maintenance → Import JSON` を、Markdown のプロンプトコレクションには `Import MD` を使います。インポートは自動的にまずローカルデータベースのバックアップを作成します。`Export JSON` は無損失の移行に最適で、`Export MD` はレビュー可能な共有に最適です。 + +## コントリビュート / Contributing + +PR を歓迎します — まず [CONTRIBUTING.md](.github/CONTRIBUTING.md) をお読みください。分かりにくい 2 つのルール: + +1. **UI の変更は `frontend-draft/` と一致させること。** そのディレクトリがビジュアルの信頼できる情報源です。JSX モックアップと矛盾する Swift ビューを出荷しないでください。 +2. **PRD のスコープ内に留まること。** 提案がプロダクトをクラウド / チーム / ワークフローの方向へ押しやるなら、どれほどよく実装されていても「no」です。これはゲートキーピングではなく、このツールが高速で信頼できる理由そのものです。 + +## 謝辞 / Acknowledgments + +PromptPanel は以下の上に成り立っています: + +- Gwendal Roué 氏による [GRDB.swift](https://github.com/groue/GRDB.swift) +- Sindre Sorhus 氏による [KeyboardShortcuts](https://github.com/sindresorhus/KeyboardShortcuts) +- Sparkle チームによる [Sparkle](https://github.com/sparkle-project/Sparkle) + +…そして、システム統合のパスを可能にしたドキュメントと Stack Overflow の回答を提供してくれた、より広い Swift / AppKit コミュニティに感謝します。 + +## ライセンス / License + +[MIT](LICENSE) © 2026 tytsxai and PromptPanel contributors. + +--- + +**キーワード**(検索したときに実際に見つけられるように): macOS prompt manager · AI prompt launcher · ChatGPT prompt manager macOS · Claude prompt library · Cursor snippet manager · Copilot prompt template launcher · open-source TextExpander alternative · Espanso alternative · Raycast snippets alternative · Alfred snippet replacement · global hotkey paste macOS · local-first prompt library · offline AI prompt storage · native Swift NSPanel app · AI workflow productivity tool · prompt template manager macOS · snippet launcher macOS · keyboard-first prompt picker · LLM prompt library Mac · prompt engineering toolkit macOS · Cursor prompt manager · fast local prompt launcher for AI · NDA-safe prompt storage · macOS プロンプト管理 · プロンプトランチャー · スニペットランチャー · ローカルファースト · キーボードファースト。 + +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=tytsxai/PromptPanel&type=Date)](https://www.star-history.com/#tytsxai/PromptPanel&Date) diff --git a/README.ko.md b/README.ko.md new file mode 100644 index 0000000..a4c8b82 --- /dev/null +++ b/README.ko.md @@ -0,0 +1,396 @@ +
+ +PromptPanel 项目快贴 — native macOS prompt manager and snippet launcher + +# PromptPanel | 项目快贴 + +### ChatGPT, Claude, Cursor, Copilot, VS Code 및 터미널을 위한 macOS 네이티브 프롬프트 관리자 / 스니펫 런처 +### Native macOS prompt manager and snippet launcher for ChatGPT, Claude, Cursor, Copilot, VS Code, and Terminal. + +PromptPanel(项目快贴)은 로컬 우선(local-first) **macOS 프롬프트 관리자**, **AI 프롬프트 런처**, **코드 스니펫 런처**입니다. 전역 단축키를 누르면 로컬 **prompt library / snippet library**를 검색하여, 재사용 가능한 prompts, code snippets, templates, instructions를 **ChatGPT, Claude, Cursor, Copilot, VS Code, Terminal, 브라우저 또는 임의의 입력 필드**에 붙여넣을 수 있습니다. + +PromptPanel is a local-first **macOS prompt manager**, **AI prompt launcher**, and **snippet launcher**. It is built for developers and AI power users who reuse multiline prompts, coding templates, project context blocks, terminal commands, and reply snippets across apps. + +[![Release: v1.1.0](https://img.shields.io/badge/Release-v1.1.0-blue.svg)](CHANGELOG.md) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Platform: macOS 14+](https://img.shields.io/badge/Platform-macOS%2014%2B-lightgrey.svg)](https://www.apple.com/macos) +[![Swift 5.10](https://img.shields.io/badge/Swift-5.10-orange.svg)](https://swift.org) +[![Apple Silicon & Intel](https://img.shields.io/badge/Arch-Apple%20Silicon%20%26%20Intel-blue.svg)](#설치) +[![Local-first · No cloud](https://img.shields.io/badge/Local--first-No%20cloud-brightgreen.svg)](#개인정보-및-데이터) +[![PRs welcome](https://img.shields.io/badge/PRs-welcome-success.svg)](.github/CONTRIBUTING.md) + +[English](README.md) · [简体中文](README.zh-CN.md) · [繁體中文](README.zh-TW.md) · [日本語](README.ja.md) · [**한국어**](README.ko.md) · [Español](README.es.md) · [Français](README.fr.md) · [Deutsch](README.de.md) + +[FAQ](docs/FAQ.md) · [문서](docs/README.md) · [LLM index](llms.txt) · [변경 이력](CHANGELOG.md) · [기여 안내](.github/CONTRIBUTING.md) + +PromptPanel macOS prompt manager quick panel — global hotkey search for ChatGPT prompts, Claude prompts, Cursor snippets, and reusable AI templates + +
+ +--- + +## 30초 요약 / 30-Second Summary + +| 항목 / Field | 설명 / Answer | +| --- | --- | +| 무엇인가 / What it is | 오픈 소스, 로컬 우선 macOS prompt manager and snippet launcher. 전역 단축키로 네이티브 패널을 불러내 재사용 가능한 텍스트를 검색하고 붙여넣습니다. | +| 어떤 문제를 해결하는가 / Problem solved | ChatGPT, Claude, Cursor, Copilot, VS Code, Terminal을 자주 쓰는 사용자가 노트를 반복해서 뒤지거나 동일한 system prompt, 프로젝트 컨텍스트, 명령 템플릿을 매번 복사하지 않도록 합니다. | +| 누구를 위한 것인가 / Audience | AI heavy users, 개발자, Prompt engineers, 기술 문서 작성자, PM, 컨설턴트, 그리고 프로젝트별로 prompt library를 분리해야 하는 인디 개발자. | +| 핵심 기능 / Core features | 전역 단축키, 즉시 검색, 프로젝트 격리, `Universal / 공용 프로젝트`, `#tag` 필터, 클립보드 우선, Accessibility 자동 붙여넣기, 실행 로그, JSON/Markdown 가져오기·내보내기. | +| 기술 스택 / Tech stack | Swift 5.10, AppKit `NSPanel`, SwiftUI, SQLite/GRDB, KeyboardShortcuts, Sparkle 2, Swift Package Manager. | +| 빠른 시작 / Quick start | `git clone` -> `./scripts/build-app.sh` -> `open dist/PromptPanel.app`. 첫 실행 시 Accessibility 권한을 부여하면 자동 붙여넣기가 가능하며, 부여하지 않아도 클립보드에 복사됩니다. | +| 대표 시나리오 / Use cases | ChatGPT/Claude role prompt, Cursor project context, PR review checklist, terminal command snippet, meeting notes template, client-specific response template. | +| 제한 사항 / Limits | macOS 14+ 만 지원. 현재 릴리스에는 공증된 바이너리 패키지가 아직 없음. 클라우드 동기화 없음, 팀 협업 없음, Windows/Linux 버전 없음. 자동 붙여넣기는 macOS Accessibility 권한에 의존함. | + +## PromptPanel이란? / What is PromptPanel? + +**PromptPanel(项目快贴)**은 오픈 소스, 네이티브 **macOS 프롬프트 관리 도구**이자 **snippet launcher**입니다. 아주 짧은 AI 워크플로 하나를 중심으로 설계되었습니다. 즉, 임의의 포그라운드 앱에서 단축키를 누르고, 로컬 프롬프트 라이브러리를 검색한 뒤 `Enter`를 누르면, 내용이 먼저 시스템 클립보드에 기록되고, 이어서 현재 입력 필드에 최선을 다해 자동으로 붙여넣어집니다. 계정도, 클라우드 동기화도, 텔레메트리도 없으며 핵심 데이터는 여러분의 Mac에 그대로 남습니다. + +In English: **PromptPanel is a native macOS prompt manager, AI prompt launcher, and local-first snippet manager** for people who reuse prompts and templates across ChatGPT, Claude, Cursor, Copilot, VS Code, Terminal, browsers, and other macOS text fields. + +**ChatGPT Prompt 관리 macOS**, **Claude Prompt 라이브러리**, **Cursor 코드 스니펫 관리자**, **로컬 우선 Prompt 라이브러리**, **macOS global hotkey paste tool**, **Raycast Snippets alternative for AI prompts** 또는 **open-source TextExpander alternative for multiline prompts**를 검색하고 있다면, PromptPanel이 바로 그 요구에 해당합니다. 반복 입력하는 AI 지시문, 코드 스니펫, 프로젝트 컨텍스트를 로컬에서 검색·감사 가능한 단축 패널 하나로 바꿔 줍니다. + +## 이런 상황이 익숙한가요? + +PromptPanel은 LLM으로 작업하는 사람이라면 매일 마주치는 다섯 가지 문제 때문에 존재합니다. + +- 새로운 ChatGPT나 Claude 대화창에 동일한 **role / system prompt**("you are a senior staff engineer…")를 하루에 열 번씩 다시 입력합니다. +- **AI 프롬프트와 코드 리뷰 체크리스트**로 가득 찬 메모 앱이나 스크래치패드를 두고, `⌘+F`로 그 안을 헤집습니다. +- 마침내 알맞은 프롬프트를 찾았는데, 포커스가 옮겨졌거나 앱이 합성 키 입력을 막아서 **붙여넣기가 조용히 실패**합니다. +- **Cursor / Copilot project context 블록**은 한 파일에, **terminal command snippet**은 다른 파일에, **PR-review prompt**는 또 다른 파일에 흩어져 있어 한 곳에서 검색할 수 없습니다. +- 실제 고객 브리프나 독점 아키텍처를 **클라우드 prompt manager**에 넣고 싶지 않아, 결국 아무 prompt manager도 쓰지 않게 됩니다. + +PromptPanel은 이 모든 것을, 여러분이 완전히 소유하는 로컬 SQLite 파일 하나와 함께 1초 미만의 단일 루프로 압축합니다. + +## 왜 PromptPanel인가? + +대부분의 "prompt manager"는 브라우저 확장(한 사이트에 종속됨)이거나, AI 워크플로를 위해 만들어지지 않은 범용 스니펫 도구입니다. PromptPanel은 하나의 짧은 루프를 중심으로 특별히 설계되었습니다. + +> **단축키 → 검색 → 엔터 → 내용이 활성 입력 필드에 안착** + +그 밖의 모든 것은 이 루프를 빠르고, 예측 가능하며, 절대 손실 없게 만드는 데 쓰입니다. + +| 원하는 것… | PromptPanel이 제공하는 것 | +|---|---| +| 한 웹사이트가 아니라 **모든 앱에서** 동작하는 prompt library | 전역 단축키, 네이티브 macOS 패널, 어떤 텍스트 필드에서든 동작 | +| **저지연 네이티브 루프** — 키 입력부터 타이핑까지 1초 미만 목표 | 단축키-포커스 < 300 ms 목표, 검색 갱신 < 100 ms 목표, 실행 < 250 ms 목표 | +| 고객 A의 프롬프트가 고객 B로 새지 않도록 하는 **프로젝트 격리** | 일급(first-class) 프로젝트 + 공용 콘텐츠를 위한 내장 `Universal` 프로젝트 | +| 민감한 프롬프트에 대한 **클라우드 종속 없음** | 로컬 SQLite. 핵심 기능에 대한 네트워크 호출 제로. 여러분의 데이터는 여러분이 소유하는 단일 파일 | +| **조용히 실패하지 않는 자동 붙여넣기** | 자동 붙여넣기 우선, 클립보드 폴백 상시 — 붙여넣기가 차단되면 명확한 토스트 표시 | +| **키보드만으로 조작** | 호출 → 입력 → 화살표 키 → Enter. 마우스는 전혀 필요 없음 | +| 감사·포크·신뢰할 수 있는 오픈 소스 | MIT 라이선스, 순수 Swift, 텔레메트리 없음 | + +## 누구를 위한 것인가? + +- 동일한 역할 정의, 출력 형식 제약, 컨텍스트 블록을 재사용하는 **헤비 ChatGPT / Claude / Gemini 사용자** +- 같은 아키텍처 요약과 리뷰 체크리스트를 붙여넣는 **Cursor / Copilot / Aider 사용자** +- 커밋 메시지 골격, 코드 리뷰 템플릿, 터미널 명령, 오류 분류 스니펫을 반복 입력하는 **개발자** +- 서로 다른 스타일 가이드와 어조 규칙을 가진 여러 고객 프로젝트를 다루는 **인디 해커와 컨설턴트** +- 재사용 가능한 답변, 상태 업데이트, 사양 골격을 관리하는 **기술 문서 작성자와 PM** + +"같은 여러 줄 프롬프트를 하루에 스무 번 복사·붙여넣기 한다"가 여러분 이야기라면, 이 도구는 여러분을 위해 만들어졌습니다. + +## 기능 + +### 핵심 (v1.0) + +- 🔥 **전역 단축키** — 어떤 포그라운드 앱에서든 패널을 호출, 단축키 설정 가능 +- ⚡ **< 300 ms 입력까지의 시간** — `NSPanel` 기반, Electron 없음, 웹 런타임 없음, 콜드 스타트 없음 +- 🔍 제목과 본문 전반에 대한 **즉시 검색**, 제출 단계 없음 +- 🗂️ **프로젝트** — 고객, 저장소, 컨텍스트별로 프롬프트 격리. `Universal` 프로젝트는 항상 표시됨 +- 📋 **클립보드 폴백을 갖춘 자동 붙여넣기** — `CGEvent`로 ⌘V를 전송하며, Accessibility 권한이 없으면 매끄럽게 폴백 +- 🎯 **키보드 우선** — 화살표 키로 이동, Enter로 실행, Esc로 닫기 +- 📌 **고정 및 정렬** — 자주 쓰는 항목 고정, 수동 정렬, 이어서 최근순, 이어서 사용 횟수순 +- 🌗 **라이트 / 다크 / 시스템** 테마 +- 🪶 **메뉴 막대 상주** — 호출하기 전까지는 방해되지 않음 +- 🚀 `SMAppService`를 통한 **로그인 시 실행** +- 🔐 **권한 인식 성능 저하 처리** — Accessibility가 없어도 원키 복사와 명확한 UI 힌트를 제공 +- 📝 **여러 줄 콘텐츠** — 전체 템플릿 본문, 저장 시 길이 제한 없음 +- 📊 붙여넣기 실패 진단을 위한 **실행 로그** +- 🔄 **GitHub Releases를 통한 수동 업데이트** (Sparkle 자동 업데이트가 연결되어 있지만 기본적으로 꺼진 채 배포됨. 서명된 appcast 피드가 호스팅되면 관리자가 활성화할 예정) + +### 명시적으로 *하지 않는 것* (프로젝트 경계) + +설계상 PromptPanel은 클라우드 동기화, 팀 협업, 복잡한 워크플로 오케스트레이션을 **절대** 추가하지 않습니다. 이는 "나중에"가 아니라 영원히 범위 밖입니다. 이 도구는 단일 사용자, 로컬 전용 유틸리티이며 그것이 핵심입니다. 근거는 [PRD §4.2](docs/项目快贴-PRD.md)를 참고하세요. + +## 스크린샷 + +| 빠른 패널 — 임의의 앱에서 `⌥2` | 라이브러리 — 프로젝트, 항목, 사용 횟수 등급 | +|:---:|:---:| +| PromptPanel quick panel — global hotkey AI prompt launcher with continuous row numbers, search, pinning, project scope, use-count tiers, and clipboard paste for ChatGPT, Claude, and Cursor on macOS | PromptPanel library — local-first macOS prompt manager with projects, prompt entries, reusable snippets, editor preview, tags, pinning, and per-entry use counts | +| 더 작은 패널 — 임의의 에디터 위에 놓이는 컴팩트한 크기 | 설정 — 환경 설정, 권한, 유지 관리 | +| PromptPanel smaller quick panel — keyboard-first prompt picker and snippet launcher hovering over another macOS app | PromptPanel settings — segmented preferences, Accessibility permission, hotkey recorder, panel behavior, backup, logs, database location, and runtime health | + +## 어떻게 동작하나요? + +``` + ┌──────────────┐ hotkey ┌──────────────┐ select ┌──────────────┐ + │ any app │ ──────────► │ PromptPanel │ ──────────► │ clipboard │ + │ (ChatGPT, │ (global) │ NSPanel │ (Enter) │ (write) │ + │ Claude, │ │ │ └──────┬───────┘ + │ Cursor…) │ ◄──────────── │ │ │ + └──────────────┘ paste / focus└──────────────┘ │ + ▲ restored │ + └────────── CGEvent ⌘V (Accessibility permission) ◄───────────┘ + fallback: clipboard only + toast +``` + +1. 설정된 단축키를 누릅니다(`KeyboardShortcuts` 라이브러리가 시스템 전역에서 캡처). +2. PromptPanel이 활성 창 위에 `NSPanel`을 띄우고, 검색 필드에 포커스를 주며, 현재 프로젝트와 `Universal` 프로젝트의 항목을 고정 → 수동 → 최근순 → 사용 횟수 순으로 정렬해 표시합니다. +3. 입력해 필터링하고(실시간, 제출 없음), 화살표로 선택한 뒤 `Enter`를 누릅니다. +4. 선택된 콘텐츠는 **항상** 먼저 시스템 클립보드에 기록됩니다(이것이 보증입니다 — 클립보드는 절대 조용히 실패하지 않습니다). +5. 패널이 숨겨지고, 이전 앱이 포커스를 되찾으며, PromptPanel이 `CGEvent`로 `⌘V`를 합성합니다. Accessibility 권한이 없거나 대상 앱이 합성 이벤트를 차단하면, "Copied — press ⌘V to paste."라는 토스트가 안내합니다. +6. 실행은 로컬에 기록되므로 나중에 앱별 붙여넣기 문제를 진단할 수 있습니다. + +이 분리 — **보증으로서의 클립보드, 최선의 노력으로서의 자동 붙여넣기** — 는 이 프로젝트에서 가장 중요한 단일 설계 결정입니다. + +## 설치 + +> **시스템 요구 사항:** macOS 14 (Sonoma) 이상. Apple Silicon과 Intel 모두 지원. + +### 옵션 A — 소스에서 빌드 (사전 릴리스 단계의 현재 경로) + +```bash +# 1. Clone +git clone https://github.com/tytsxai/PromptPanel.git +cd PromptPanel + +# 2. Build the .app bundle (signed ad-hoc by default) +./scripts/build-app.sh + +# 3. Move it into Applications (or run from dist/) +open dist/PromptPanel.app +``` + +빌드에 필요한 것: + +- macOS 14 SDK를 포함한 Xcode 15+ +- Swift 5.10 툴체인 (`xcrun swift --version`) + +### 옵션 B — 서명 및 공증된 릴리스 + +GitHub Releases는 현재 소스/문서 릴리스 노트만 담고 있으며, 공증된 바이너리 자산은 아직 첨부되지 않았습니다. Developer ID 공증 체인이 완료되기 전까지는 `./scripts/build-app.sh`로 로컬에서 빌드하세요. + +### 첫 실행 설정 + +1. 안내가 나오면 **Accessibility 권한을 부여**하세요. macOS는 이를 통해 합성 `⌘V` 키 입력을 허용합니다. 권한이 없어도 PromptPanel은 여전히 클립보드에 안정적으로 복사하며, 붙여넣기만 수동으로 하면 됩니다. +2. 설정 → Hotkey에서 **단축키를 지정**하세요. 현재 기본값은 `⌥2`이며, 설정과 충돌하면 다른 단축키를 고르세요. +3. **프로젝트를 만들거나** `Universal`에 항목 추가를 시작하세요. + +## 빠른 시작 + +```text +1. ⌥2 → panel appears, search field focused +2. type "review" → filters to your code-review prompt +3. ↵ → content pasted into the active text field +4. (panel hides) → keep working +``` + +메인 창을 열지 않고도 패널 안에서 활성 프로젝트를 전환할 수 있습니다 — 키보드만으로, 우회 없이. + +## 구성 + +| 설정 | 위치 | 비고 | +|---|---|---| +| 전역 단축키 | 설정 → Hotkey | 단축키 하나. 토글 동작: 같은 키로 닫힘 | +| 테마 | 설정 → Appearance | 라이트 / 다크 / 시스템 따르기 | +| 로그인 시 실행 | 설정 → General | `SMAppService` 사용 | +| 업데이트 채널 | GitHub Releases (수동) | Sparkle 2가 연결되어 있으나 서명된 appcast가 호스팅되기 전까지는 비활성. 릴리스 알림을 구독하고 `.app`을 교체하세요 | +| 데이터베이스 위치 | `~/Library/Application Support/PromptPanel/promptpanel.db` | 단일 파일 SQLite, 백업이 쉬움 | +| 로그 | `~/Library/Logs/PromptPanel/` | 메인 창의 "Runtime Health"에서 확인 | + +## 개인정보 및 데이터 + +- **정의상 로컬 우선.** 여러분의 프롬프트는 Mac의 단일 SQLite 파일에 저장됩니다. 앱은 여러분의 콘텐츠를 어디에도 POST하지 않습니다. +- **텔레메트리 없음.** 분석 SDK 없음, 메트릭 엔드포인트 없음, 크래시 리포팅 서비스 없음. +- **네트워크 접근**은 현재 릴리스에서 제로입니다. Sparkle이 번들되어 있으나 업데이트 피드가 구성되어 있지 않으므로, 향후 빌드에 appcast가 포함되지 않는 한 아웃바운드 호출은 전혀 발생하지 않습니다. +- **계정 없음.** 로그인할 대상이 아무것도 없습니다. +- **오픈 소스.** 위 내용을 검증하려면 `Sources/PromptPanel/Core/`를 감사하세요. + +여러분의 프롬프트에 독점 정보 — 내부 아키텍처, 고객 브리프, NDA로 묶인 컨텍스트 — 가 담겨 있다면, 바로 이 특성이 여러분이 원하는 것입니다. + +## PromptPanel은 대안들과 어떻게 비교되나요? + +> 빠른 이해를 돕기 위한 것이지 깎아내리는 것이 아닙니다. 이 도구들은 각자 잘하는 일이 있습니다. + +| | **PromptPanel** | TextExpander | Espanso | Raycast Snippets | Alfred Snippets | Browser prompt extensions | +|---|:---:|:---:|:---:|:---:|:---:|:---:| +| 오픈 소스 | ✅ MIT | ❌ | ✅ GPLv3 | 부분적 | ❌ | 다양함 | +| macOS 네이티브 (Electron / 웹 런타임 없음) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| 모든 앱에서 동작 (브라우저만이 아님) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| 빠른 검색 패널 UI (트리거 문자열만이 아님) | ✅ | 부분적 | ❌ | ✅ | ✅ | 다양함 | +| 프로젝트 / 컨텍스트 격리 | ✅ 일급 | 그룹 | 폴더 | 폴더 | 폴더 | 드묾 | +| 키보드 전용 흐름 | ✅ | 부분적 | ✅ | ✅ | ✅ | 다양함 | +| 로컬 전용 / 클라우드 없음 옵션 | ✅ 기본값 | 선택적, 유료 등급이 클라우드로 유도 | ✅ | 계정 필요 | ✅ | 대개 클라우드 | +| 무료 | ✅ | $$$ | ✅ | 프리미엄 | Powerpack 필요 | 다양함 | +| AI 프롬프트 워크플로에 특화되어 제작됨 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ 단, 브라우저 전용 | + +**요약:** 브라우저에서만 산다면 브라우저 확장으로 충분합니다. Cursor/VS Code/Terminal/Slack/어디에서나 산다면, 네이티브이고 패널 기반인 것을 원할 것입니다. 네이티브 패널 기반 옵션 중에서 PromptPanel은 오픈 소스이면서 AI 프롬프트에 맞춰진 것입니다. + +## 워크플로 예시 + +사람들이 PromptPanel을 매일 사용하는 구체적인 방법들 — 이는 PromptPanel이 답하기 위해 만들어진 롱테일 "어떻게 하나요…" 질문 역할도 겸합니다. + +- **표준 role / system prompt로 새 ChatGPT / Claude 대화를 시작합니다.** 단축키 → `role` 입력 → Enter. "You are a senior staff engineer who…"를 200번째로 다시 입력할 필요가 없습니다. +- **Cursor / Copilot project-context 블록을 새 파일에 넣습니다.** 여러 문단짜리 "여기 아키텍처, 컨벤션, 제약이 있다" 블록을 한 번만 저장해 두고, 어떤 새 Cursor 세션에든 키 한 번으로 붙여넣습니다. +- **코드 리뷰 체크리스트를 PR 초안에 붙여넣습니다.** 긴 불릿 체크리스트가 PromptPanel에 저장되어 있고, 단축키 하나로 GitHub PR 설명에 추가됩니다. +- **정확한 플래그 조합으로 반복 터미널 명령을 실행합니다.** `kubectl get pods --context=prod --namespace=… -o jsonpath=…` — 한 번 입력해 저장하고, 짧은 검색 문자열로 불러냅니다. +- **회의록 템플릿을 Notion / Obsidian / Apple Notes에 삽입합니다.** 매주 월요일 스탠드업마다 같은 템플릿 → 단축키 하나, 메모 앱 스크래치패드에서의 복사·붙여넣기 제로. +- **고객 서비스 / 세일즈 답변 템플릿을 Slack이나 이메일에 넣습니다.** 템플릿마다 다른 어조를, 메모 폴더가 아니라 빠른 검색 패널에서 골라 씁니다. +- **격리된 프롬프트 세트를 가진 프로젝트 간을 전환합니다.** 각 프로젝트 그룹이 자체 role prompts, snippets, templates를 유지하므로 컨텍스트가 고객 간에 절대 섞이지 않습니다. + +## 기술 스택 + +- **언어:** Swift 5.10 +- **UI:** AppKit (`NSPanel`, `NSStatusItem`) + SwiftUI +- **저장소:** [GRDB.swift](https://github.com/groue/GRDB.swift)를 통한 SQLite +- **단축키:** [sindresorhus/KeyboardShortcuts](https://github.com/sindresorhus/KeyboardShortcuts) (내부적으로 Carbon Hot Key) +- **자동 붙여넣기:** 포커스 복원 후 ⌘V를 합성하는 `CGEvent` +- **로그인 항목:** `SMAppService` +- **업데이터:** [Sparkle 2](https://sparkle-project.org/) +- **배포:** Developer ID + Apple 공증 (Mac App Store 없음) +- **빌드:** Swift Package Manager — Xcode 프로젝트 불필요 + +전체 의사 결정 기록은 [docs/技术选型.md](docs/技术选型.md)를 참고하세요. + +## 프로젝트 구성 + +``` +PromptPanel/ +├── Sources/PromptPanel/ +│ ├── App/ # AppDelegate, AppState, lifecycle +│ ├── Core/ +│ │ ├── Database/ # SQLite open / migrate / recover +│ │ ├── Repositories/ # Project, Entry, Settings, Log +│ │ ├── Services/ # PanelService, ExecuteService, SearchService… +│ │ ├── Diagnostics/ # Hotkey-to-focus timing +│ │ └── Utils/ +│ ├── Integrations/ # Clipboard, Paste (CGEvent), Tray, Hotkey, Updater +│ ├── Features/ +│ │ ├── Panel/ # QuickPanelView + ViewModel — the hero feature +│ │ └── MainWindow/ # Library + Settings +│ └── Resources/ # Info.plist, entitlements, AppIcon, Assets +├── Tests/PromptPanelTests/ +├── frontend-draft/ # UI source-of-truth (HTML/JSX mockups + screenshots) +├── scripts/ # build-app.sh, notarize, release readiness, restore +├── docs/ # public architecture, FAQ, PRD, release, ops, handoff docs +├── .github/ # contribution, security, conduct, issue/PR templates, CI +├── llms.txt # short AI-search / LLM-readable project index +├── codemeta.json # structured open-source software metadata +└── Package.swift # SwiftPM package definition +``` + +## 문서 + +공개 문서 세트는 저장소의 일부입니다. + +- [문서 색인](docs/README.md) +- [FAQ](docs/FAQ.md) +- [제품 PRD](docs/项目快贴-PRD.md) +- [프로젝트 소개](docs/项目介绍.md) +- [아키텍처](docs/架构说明.md) +- [핵심 모듈과 로직](docs/关键模块与核心逻辑.md) +- [API 및 기능 명세](docs/API与功能说明.md) +- [구성](docs/配置说明.md) +- [배포](docs/部署说明.md) +- [개발 표준](docs/开发规范.md) +- [사용 예시](docs/使用示例.md) +- [운영 및 문제 해결](docs/运维与排错指南.md) +- [관리자 인수인계 가이드](docs/接手维护指南.md) +- [문서/코드 동기화 매트릭스](docs/文档与代码同步矩阵.md) +- [릴리스 및 복구](docs/生产发布与恢复手册.md) +- [로드맵 및 기여 가이드](docs/路线图与贡献指南.md) +- [AI 검색 및 검색 노출](docs/ai-search-discoverability.md) +- [전체 LLM 컨텍스트](docs/ai-search/llms-full.txt) +- [검색 메타데이터 JSON-LD](docs/search-metadata.schema.jsonld) +- [기여 안내](.github/CONTRIBUTING.md) +- [보안](.github/SECURITY.md) +- [CodeMeta 소프트웨어 메타데이터](codemeta.json) + +응답 엔진과 저장소 인식 AI 도구를 위해서는 [llms.txt](llms.txt) 또는 확장된 [llms-full.txt](docs/ai-search/llms-full.txt)에서 시작하세요. + +## Search & AI Discoverability + +PromptPanel은 사용자와 응답 엔진이 프로젝트를 정확히 식별할 수 있도록 전통적인 SEO와 GEO 표면을 저장소 안에 유지합니다. + +- `README.md`와 `README.zh-CN.md`는 사람이 보는 랜딩 페이지 요약과 최신 스크린샷을 제공합니다. +- [llms.txt](llms.txt)는 저장소 인식 도구를 위한 짧은 AI 판독용 색인입니다. +- [docs/ai-search/llms-full.txt](docs/ai-search/llms-full.txt)는 FAQ 형식의 답변을 담은 확장된 응답 엔진 컨텍스트입니다. +- [codemeta.json](codemeta.json)과 [Schema.org JSON-LD](docs/search-metadata.schema.jsonld)는 소프트웨어 카탈로그, 검색 크롤러, 향후 문서 사이트 게시를 위해 앱을 설명합니다. +- [AI 검색 및 검색 노출](docs/ai-search-discoverability.md)은 표준 표현, 검색 의도 지도, 유지 관리 체크리스트를 정의합니다. + +## 로드맵 + +PromptPanel은 **의도적으로 작은** 로드맵을 따릅니다. PRD에는 영원히 논외인 항목(클라우드 동기화, 팀, 워크플로 오케스트레이션)이 나열되어 있습니다. 범위 안에서는: + +- [x] v1.0 — 메인 링크 완료: 단축키 → 검색 → 실행, 프로젝트, 클립보드 폴백, 라이트/다크, 로그인 항목, Sparkle, 서명 및 공증 스크립트 +- [x] JSON / Markdown 가져오기 및 내보내기, 가져오기 전 자동 백업 +- [ ] 원탭 "마지막 항목 반복" +- [ ] 변수 템플릿 (`{{name}}` 형식) — 메인 링크를 느리게 하지 않고 추가할 수 있는 경우에만 + +우선순위 규칙은 [docs/路线图与贡献指南.md](docs/路线图与贡献指南.md), 배포된 내용은 [CHANGELOG.md](CHANGELOG.md), 공개 계획은 [issues](https://github.com/tytsxai/PromptPanel/issues)를 참고하세요. + +## 자주 묻는 질문 + +더 긴 FAQ는 [FAQ.md](docs/FAQ.md)를 참고하세요. 대표적인 질문들: + +### PromptPanel은 무료인가요? + +네. MIT 라이선스. 유료 등급 없음, 사용량 제한 없음, 계정 없음. + +### Apple Silicon (M1/M2/M3/M4)에서 동작하나요? + +네 — 유니버설 바이너리로 빌드됩니다. Apple Silicon과 Intel macOS 14+ 양쪽에서 테스트되었습니다. + +### 제 프롬프트를 어딘가로 전송하나요? + +아니요. 현재 릴리스는 네트워크 호출을 전혀 하지 않습니다. Sparkle이 번들되어 있지만 이 빌드에서는 업데이트 피드가 구성되어 있지 않아 아웃바운드 트래픽이 전혀 발생하지 않습니다. 여러분의 프롬프트 콘텐츠는 절대 Mac을 떠나지 않습니다. + +### 왜 Accessibility 권한을 요청하나요? + +패널이 숨겨지고 이전 앱이 포커스를 되찾은 뒤 `⌘V` 키 입력을 합성하기 위함입니다. 이 권한이 없어도 앱은 여전히 동작하며, 클립보드 단계에서 멈추고 "press ⌘V to paste" 토스트를 보여줄 뿐입니다. + +### 클라우드 동기화 / 팀 공유 / 워크플로를 추가할 건가요? + +아니요, 의도적으로 그렇습니다. 이들은 [PRD §4.2](docs/项目快贴-PRD.md)에 **영구적인 비목표**로 나열되어 있습니다. 제품의 정체성은 "단일 사용자, 로컬 전용, 빠름"입니다. 이 중 어느 것을 추가해도 제품이 무엇인지가 바뀝니다. + +### 왜 Electron / Tauri가 아닌가요? + +이 제품에서 가장 뜨거운 경로(전역 단축키 타이밍, 포커스 복원, 합성 키 입력 주입, Accessibility 권한 흐름)는 macOS 시스템 통합 문제입니다. 크로스 플랫폼 셸은 이 제품에 중요한 어떤 기능도 얻지 못한 채 지연과 간접 계층만 추가합니다. 전체 근거는 [docs/技术选型.md](docs/技术选型.md)를 참고하세요. + +### 버그를 신고하거나 기능을 요청하려면 어떻게 하나요? + +이슈를 여세요: . 템플릿을 사용해 주세요 — 서로의 왕복을 줄여 줍니다. + +### 다른 도구의 기존 프롬프트를 어떻게 가져오나요? + +전체 PromptPanel 라이브러리 이전에는 `Settings → Maintenance → Import JSON`을, Markdown 프롬프트 모음에는 `Import MD`를 사용하세요. 가져오기는 먼저 로컬 데이터베이스 백업을 자동으로 생성합니다. 무손실 마이그레이션에는 `Export JSON`이, 검토 가능한 공유에는 `Export MD`가 가장 적합합니다. + +## 기여 + +PR을 환영합니다 — 먼저 [CONTRIBUTING.md](.github/CONTRIBUTING.md)를 읽어 주세요. 명확하지 않은 규칙 두 가지: + +1. **UI 변경은 `frontend-draft/`와 일치해야 합니다.** 그 디렉터리가 시각적 요소의 기준(source of truth)입니다. JSX 목업과 모순되는 Swift 뷰를 배포하지 마세요. +2. **PRD의 범위 안에 머무세요.** 제안이 제품을 클라우드 / 팀 / 워크플로 쪽으로 밀어붙인다면, 얼마나 잘 구현되었든 "아니오"입니다. 이는 문지기 노릇이 아니라 — 이 도구가 빠르고 신뢰할 수 있는 이유입니다. + +## 감사의 말 + +PromptPanel은 다음 위에 서 있습니다: + +- Gwendal Roué의 [GRDB.swift](https://github.com/groue/GRDB.swift) +- Sindre Sorhus의 [KeyboardShortcuts](https://github.com/sindresorhus/KeyboardShortcuts) +- Sparkle 팀의 [Sparkle](https://github.com/sparkle-project/Sparkle) + +…그리고 시스템 통합 경로를 가능하게 해 준 문서와 Stack Overflow 답변을 남긴 더 넓은 Swift / AppKit 커뮤니티에 감사드립니다. + +## 라이선스 + +[MIT](LICENSE) © 2026 tytsxai and PromptPanel contributors. + +--- + +**키워드** (검색할 때 실제로 찾을 수 있도록): macOS prompt manager · AI prompt launcher · ChatGPT prompt manager macOS · Claude prompt library · Cursor snippet manager · Copilot prompt template launcher · open-source TextExpander alternative · Espanso alternative · Raycast snippets alternative · Alfred snippet replacement · global hotkey paste macOS · local-first prompt library · offline AI prompt storage · native Swift NSPanel app · AI workflow productivity tool · prompt template manager macOS · snippet launcher macOS · keyboard-first prompt picker · LLM prompt library Mac · prompt engineering toolkit macOS · Cursor prompt manager · fast local prompt launcher for AI · NDA-safe prompt storage · macOS 프롬프트 관리자 · AI 프롬프트 런처 · 로컬 우선 프롬프트 라이브러리 · macOS 스니펫 런처 · 키보드 우선 프롬프트 선택기. + +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=tytsxai/PromptPanel&type=Date)](https://www.star-history.com/#tytsxai/PromptPanel&Date) diff --git a/README.md b/README.md index dcb1b11..13fc935 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,9 @@ PromptPanel is a local-first **macOS prompt manager**, **AI prompt launcher**, a [![Local-first · No cloud](https://img.shields.io/badge/Local--first-No%20cloud-brightgreen.svg)](#privacy--data) [![PRs welcome](https://img.shields.io/badge/PRs-welcome-success.svg)](.github/CONTRIBUTING.md) -[**English**](README.md) · [**简体中文**](README.zh-CN.md) · [**FAQ**](docs/FAQ.md) · [**Docs**](docs/README.md) · [**LLM index**](llms.txt) · [**Changelog**](CHANGELOG.md) · [**Contributing**](.github/CONTRIBUTING.md) +[**English**](README.md) · [简体中文](README.zh-CN.md) · [繁體中文](README.zh-TW.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Español](README.es.md) · [Français](README.fr.md) · [Deutsch](README.de.md) + +[**FAQ**](docs/FAQ.md) · [**Docs**](docs/README.md) · [**LLM index**](llms.txt) · [**Changelog**](CHANGELOG.md) · [**Contributing**](.github/CONTRIBUTING.md) PromptPanel macOS prompt manager quick panel — global hotkey search for ChatGPT prompts, Claude prompts, Cursor snippets, and reusable AI templates diff --git a/README.zh-CN.md b/README.zh-CN.md index d77db42..d46d5cc 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -17,7 +17,9 @@ PromptPanel 是一款本地优先的 **macOS Prompt 管理器**、**AI Prompt [![本地优先 · 不上云](https://img.shields.io/badge/本地优先-不上云-brightgreen.svg)](#隐私与数据) [![PRs welcome](https://img.shields.io/badge/PRs-welcome-success.svg)](.github/CONTRIBUTING.md) -[**English**](README.md) · [**简体中文**](README.zh-CN.md) · [**FAQ**](docs/FAQ.md) · [**文档**](docs/README.md) · [**LLM 索引**](llms.txt) · [**变更记录**](CHANGELOG.md) · [**贡献指南**](.github/CONTRIBUTING.md) +[English](README.md) · [**简体中文**](README.zh-CN.md) · [繁體中文](README.zh-TW.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Español](README.es.md) · [Français](README.fr.md) · [Deutsch](README.de.md) + +[**FAQ**](docs/FAQ.md) · [**文档**](docs/README.md) · [**LLM 索引**](llms.txt) · [**变更记录**](CHANGELOG.md) · [**贡献指南**](.github/CONTRIBUTING.md) PromptPanel macOS Prompt 管理器快捷面板:全局快捷键搜索 ChatGPT Prompt、Claude Prompt、Cursor 片段和 AI 模板 diff --git a/README.zh-TW.md b/README.zh-TW.md new file mode 100644 index 0000000..4a725d5 --- /dev/null +++ b/README.zh-TW.md @@ -0,0 +1,378 @@ +
+ +PromptPanel — macOS 上的 Prompt 與程式碼片段快捷面板 + +# PromptPanel | 项目快贴 + +### 面向 ChatGPT、Claude、Cursor、Copilot、VS Code 和 Terminal 的 macOS 原生 Prompt 管理器 / 程式碼片段啟動器 +### Native macOS prompt manager and snippet launcher for AI workflows + +PromptPanel 是一款本地優先的 **macOS Prompt 管理器**、**AI Prompt 啟動器** 和 **程式碼片段啟動器**:全域快捷鍵喚出快捷面板,瞬間檢索你的 **Prompt 庫 / 程式碼片段 / 範本**,把內容一鍵送進 **ChatGPT、Claude、Cursor、Copilot、VS Code、Terminal、瀏覽器或任意輸入框**。 + +[![Release: v1.1.0](https://img.shields.io/badge/Release-v1.1.0-blue.svg)](CHANGELOG.md) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Platform: macOS 14+](https://img.shields.io/badge/Platform-macOS%2014%2B-lightgrey.svg)](https://www.apple.com/macos) +[![Swift 5.10](https://img.shields.io/badge/Swift-5.10-orange.svg)](https://swift.org) +[![Apple Silicon · Intel](https://img.shields.io/badge/Arch-Apple%20Silicon%20%26%20Intel-blue.svg)](#安裝) +[![本地優先 · 不上雲](https://img.shields.io/badge/本地优先-不上云-brightgreen.svg)](#隱私與資料) +[![PRs welcome](https://img.shields.io/badge/PRs-welcome-success.svg)](.github/CONTRIBUTING.md) + +[English](README.md) · [简体中文](README.zh-CN.md) · [**繁體中文**](README.zh-TW.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Español](README.es.md) · [Français](README.fr.md) · [Deutsch](README.de.md) + +[FAQ](docs/FAQ.md) · [文件](docs/README.md) · [LLM 索引](llms.txt) · [變更記錄](CHANGELOG.md) · [貢獻指南](.github/CONTRIBUTING.md) + +PromptPanel macOS Prompt 管理器快捷面板:全域快捷鍵搜尋 ChatGPT Prompt、Claude Prompt、Cursor 片段和 AI 範本 + +
+ +--- + +## 30 秒判斷 + +| 維度 | 結論 | +|---|---| +| 專案類型 | 開源、本地優先的 macOS Prompt manager / AI prompt launcher / snippet launcher。 | +| 核心問題 | 解決高頻複製貼上同一批 ChatGPT、Claude、Cursor、Copilot、VS Code、Terminal Prompt、專案上下文、命令片段和範本的問題。 | +| 適合族群 | AI 重度使用者、開發者、Prompt engineers、技術寫作者、PM、顧問、需要按專案隔離 Prompt 庫的獨立開發者。 | +| 核心功能 | 全域快捷鍵、即時搜尋、專案隔離、`通用專案 / Universal`、`#tag` 過濾、剪貼簿優先、Accessibility 權限下自動貼上、執行日誌、JSON/Markdown 匯入匯出。 | +| 技術棧 | Swift 5.10、AppKit `NSPanel`、SwiftUI、SQLite/GRDB、KeyboardShortcuts、Sparkle 2、Swift Package Manager。 | +| 快速開始 | `git clone` → `./scripts/build-app.sh` → `open dist/PromptPanel.app`。首次執行建議授予 Accessibility 權限;不授權也能複製到剪貼簿。 | +| 典型情境 | ChatGPT/Claude role prompt、Cursor project context、PR review checklist、terminal command snippet、會議紀要範本、客戶回覆範本。 | +| 限制邊界 | 僅支援 macOS 14+;目前 Release 暫無已公證二進位套件;無雲端同步、無團隊協作、無 Windows/Linux 版本;自動貼上依賴 macOS Accessibility。 | + +## PromptPanel 是什麼? + +**PromptPanel(项目快贴)** 是一款開源的 **macOS 原生 Prompt 管理工具 / 片段啟動器**,專門圍繞 AI 使用者的真實工作流設計。在任何前景應用裡——不管是 ChatGPT、Claude、Cursor、VS Code、Terminal,還是瀏覽器——按下你設定的全域快捷鍵,一個輕量面板立刻浮現。打幾個字、Enter,內容就落進目前輸入框。**不需要帳號、不上雲、不依賴任何同步服務。** 你的所有 Prompt 都只在這台 Mac 上。 + +English positioning: **PromptPanel is a native macOS prompt manager, AI prompt launcher, local-first prompt library, and snippet launcher** for ChatGPT, Claude, Cursor, Copilot, VS Code, Terminal, browsers, and ordinary macOS text fields. + +如果你正在找 **AI Prompt 庫**、**TextExpander 替代品(專門為 Prompt 用的)**、**macOS 開源 snippet launcher**,或者想停止把同一段指令一天複製貼上一百遍到 Claude / ChatGPT 裡——這就是 PromptPanel 要解決的問題。 + +常見搜尋詞也能對應到它:**ChatGPT Prompt 管理 macOS**、**Claude Prompt 庫**、**Cursor 程式碼片段管理器**、**本地優先 Prompt 庫**、**全域快捷鍵貼上工具**、**Raycast Snippets 的 AI Prompt 替代方案**、**開源 TextExpander 替代品**。 + +## 是不是聽起來很熟? + +PromptPanel 之所以存在,是因為高頻 AI 使用者每天都會撞上同樣的 5 件事: + +- 每開一個新的 ChatGPT / Claude 對話,就要再敲一遍同樣的 **角色 / system prompt**(「你是一位資深工程師…」)。 +- 用備忘錄或文字草稿堆 **AI Prompt + 程式碼審查清單**,每次 `⌘F` 翻一遍。 +- 終於找到想要的 Prompt,焦點跳了或對方 app 屏蔽合成按鍵,**貼上靜默失敗**。 +- **Cursor / Copilot 的專案上下文**在一個檔案,Terminal 命令在另一個檔案,PR 審查 Prompt 在第三個——沒有一處能一起搜。 +- 真正涉密的客戶簡報和架構細節,你不敢丟進 **雲端 Prompt 管理器**,結果乾脆沒有「Prompt 管理器」。 + +PromptPanel 把上面這些全部塌進一條 sub-second 的鏈路——而你的資料始終在你本機的一個 SQLite 檔案裡。 + +## 為什麼是 PromptPanel? + +市面上的「Prompt 管理工具」要麼是瀏覽器外掛(只在一個網站裡能用),要麼是為通用打字加速設計的、並不貼合 AI 工作流。PromptPanel 圍繞**唯一一條主鏈路**做: + +> **快捷鍵 → 搜尋 → Enter → 內容進入目前輸入框** + +其他一切都為這條鏈路服務——快、可預期、永遠不會「靜默失敗」。 + +| 你想要 | PromptPanel 給你 | +|---|---| +| 一個**任何應用都能用**的 Prompt 庫,不限於某個網站 | 全域快捷鍵 + 原生 macOS 面板,任意輸入框可用 | +| **低延遲原生鏈路**——按鍵到能輸入的目標時間明確 | < 300 ms 喚出聚焦目標、< 100 ms 搜尋刷新目標、< 250 ms 執行目標 | +| **專案隔離**,A 客戶的 Prompt 不會串到 B 專案裡 | 一等公民的「專案」概念 + 內建不可刪的 `通用專案` | +| 敏感 Prompt **不想上雲** | 本地 SQLite,核心功能零網路呼叫,資料是一個你完全掌握的檔案 | +| **自動貼上不能靜默失敗** | 自動貼上優先 + 剪貼簿永遠兜底,被屏蔽時有清晰提示 | +| 全鍵盤操作 | 喚出 → 輸入 → 方向鍵 → Enter,從頭到尾不用碰滑鼠 | +| 可稽核、可 fork、可信任的開源 | MIT 協議、純 Swift 實作、零遙測 | + +## 適合誰用? + +- **重度 ChatGPT / Claude / Gemini 使用者**:反覆輸入角色設定、輸出格式約束、上下文範本的人 +- **Cursor / Copilot / Aider 使用者**:常常要貼上架構概要、程式碼審查清單 +- **開發者**:經常需要插入提交說明範本、程式碼審查範本、Terminal 命令、排障 snippet +- **獨立開發者 / 顧問**:在多個客戶專案間切換,每家有不同的風格指南、tone-of-voice +- **技術寫作者 / PM**:維護可複用的回覆、狀態更新、規範腳手架 + +如果「我每天要把同一段多行 Prompt 重複輸入二十遍」是在描述你——這工具就是為你寫的。 + +## 功能一覽 + +### v1.0 已有 + +- 🔥 **全域快捷鍵**:在任何前景應用裡都能喚出,可自訂 +- ⚡ **< 300 ms 主鏈路**:基於 `NSPanel`,沒有 Electron、沒有 Web 執行環境、沒有冷啟動 +- 🔍 **即時搜尋**:按標題或內文即時過濾,不需要點提交 +- 🗂️ **專案隔離**:按客戶、儲存庫、上下文區分;`通用專案` 永遠可見 +- 📋 **自動貼上 + 剪貼簿兜底**:用 `CGEvent` 模擬 ⌘V,權限缺失時優雅降級 +- 🎯 **鍵盤優先**:方向鍵選擇,Enter 執行,Esc 關閉 +- 📌 **置頂 / 排序**:常用置頂 → 手動排序 → 最近使用 → 使用次數 +- 🌗 **淺色 / 深色 / 跟隨系統** +- 🪶 **選單列常駐**:不打擾,要用就來 +- 🚀 **開機啟動**:基於 `SMAppService` +- 🔐 **權限缺失也能用**:沒有 Accessibility 權限時只走「複製」,UI 明確告知 +- 📝 **多行內容**:範本內文不限長度 +- 📊 **執行日誌**:貼上失敗時可查 +- 🔄 **手動更新(GitHub Releases)**:Sparkle 已接入但預設關閉;正式 appcast 託管位就緒後再開啟自動檢查 + +### 永遠不會做(產品邊界) + +PromptPanel **永遠不會**加入雲端同步、團隊協作、複雜工作流編排。這不是「以後再說」,而是「以後也不做」。這個工具就是單使用者、純本地、輕量快速,這才是它存在的理由。詳見 [PRD §4.2](docs/项目快贴-PRD.md)。 + +## 截圖 + +| 快捷面板 — 任意 app 中 `⌥2` 喚出 | 庫管理 — 專案、詞條、使用次數色階 | +|:---:|:---:| +| PromptPanel 快捷面板:macOS 上的全域快捷鍵 AI Prompt 啟動器,支援連續序號、搜尋、置頂、專案範圍、使用次數色階和剪貼簿貼上,適用於 ChatGPT、Claude、Cursor | PromptPanel 庫管理:本地優先 macOS Prompt 管理器,支援專案、Prompt 詞條、可複用片段、預覽編輯、標籤、置頂與按使用次數排序 | +| 小尺寸面板 — 浮在任意編輯器上方 | 設定 — 偏好、權限、維護 | +| PromptPanel 小尺寸快捷面板:鍵盤優先的 Prompt 選擇器和片段啟動器,浮在其他 macOS 應用上方 | PromptPanel 設定:偏好、Accessibility 權限、快捷鍵錄製、面板行為、備份、日誌、資料庫位置與執行健康 | + +## 運作原理 + +``` + ┌──────────────┐ 快捷键 ┌──────────────┐ 回车 ┌──────────────┐ + │ 任意应用 │ ──────────► │ PromptPanel │ ──────────► │ 剪贴板 │ + │ ChatGPT │ (全局) │ NSPanel │ (执行) │ 写入 │ + │ Claude │ │ │ └──────┬───────┘ + │ Cursor…… │ ◄──────────── │ │ │ + └──────────────┘ 面板退场 └──────────────┘ │ + ▲ 前台焦点恢复 │ + └────────── CGEvent ⌘V (需辅助功能权限) ◄──────────────────┘ + 失败时:仅剪贴板 + Toast 提示 +``` + +1. 你按下設定的快捷鍵(`KeyboardShortcuts` 在系統層捕獲) +2. PromptPanel 把 `NSPanel` 彈到目前視窗上方,自動聚焦搜尋框,按「置頂 → 手動排序 → 最近使用 → 使用次數」展示目前專案 + `通用專案` 詞條 +3. 你打字過濾(即時,無需提交),方向鍵選擇,Enter +4. **永遠先把內容寫進系統剪貼簿**——這是產品的硬承諾,剪貼簿這一步絕不靜默失敗 +5. 面板退場,前一個 app 恢復焦點,PromptPanel 用 `CGEvent` 合成一次 `⌘V`。如果 Accessibility 權限缺失或目標 app 屏蔽合成事件,會有 Toast 告訴你「已複製,按 ⌘V 貼上即可」 +6. 執行結果會寫日誌,方便你後續排查特定 app 的相容性問題 + +**剪貼簿是承諾,自動貼上是盡力而為**——這是整個專案最重要的設計決定。 + +## 安裝 + +> **系統要求**:macOS 14 (Sonoma) 及以上,Apple Silicon 與 Intel 都支援。 + +### 方式 A · 從原始碼建置(目前推薦) + +```bash +# 1. 克隆 +git clone https://github.com/tytsxai/PromptPanel.git +cd PromptPanel + +# 2. 打 .app 包(默认 ad-hoc 签名) +./scripts/build-app.sh + +# 3. 直接运行,或拖进 /Applications +open dist/PromptPanel.app +``` + +建置依賴: + +- Xcode 15+(含 macOS 14 SDK) +- Swift 5.10 工具鏈(`xcrun swift --version` 檢查) + +### 方式 B · 已簽名 / 已公證的發布版 + +目前 GitHub Releases 只承載原始碼 / 文件發布說明,尚未附帶公證二進位產物。Developer ID 公證鏈路補齊前,先用 `./scripts/build-app.sh` 本地建置。 + +### 首次執行 + +1. **授予 Accessibility 權限**:用於合成 `⌘V` 模擬按鍵。不授予也能用,只是主鏈路停在剪貼簿那一步、需要你手動貼上 +2. **設定快捷鍵**:目前預設是 `⌥2`;如果與你自己的快捷鍵衝突,可以在設定裡改掉 +3. **新建一個專案**或者直接往 `通用專案` 裡加詞條 + +## 快速上手 + +```text +1. ⌥2 → 面板浮现,搜索框自动聚焦 +2. 输入 "review" → 过滤到你的代码评审模板 +3. ↵ → 内容粘贴进当前输入框 +4. (面板退场) → 继续手头工作 +``` + +切換目前專案可以直接在面板內完成,不必打開主視窗——純鍵盤,零繞路。 + +## 設定 + +| 設定項 | 位置 | 說明 | +|---|---|---| +| 全域快捷鍵 | 設定 → 快捷鍵 | 同一組合再按一次會關閉面板 | +| 主題 | 設定 → 外觀 | 淺色 / 深色 / 跟隨系統 | +| 開機啟動 | 設定 → 通用 | 基於 `SMAppService` | +| 更新通道 | GitHub Releases(手動) | Sparkle 2 已接入但目前發布未設定 appcast,訂閱 Releases 後手動替換 `.app` 即可 | +| 資料庫位置 | `~/Library/Application Support/PromptPanel/promptpanel.db` | 單檔案,方便備份 | +| 日誌 | `~/Library/Logs/PromptPanel/` | 主視窗「執行健康」也能查看 | + +## 隱私與資料 + +- **本地優先是定義本身**:所有 Prompt 在你 Mac 的一個 SQLite 檔案裡,內文絕不上傳任何地方 +- **零遙測**:沒有埋點、沒有分析 SDK、沒有第三方當機回報 +- **網路存取**目前版本為零:Sparkle 已打包但 appcast 未設定,沒有任何對外請求;將來啟用更新檢查時也只拉簽名 feed +- **沒有帳號體系**:根本沒有可登入的東西 +- **程式碼開源**:去 `Sources/PromptPanel/Core/` 翻程式碼就能驗證以上說法 + +如果你的 Prompt 裡有內部架構、客戶簡報、NDA 範圍內的上下文——這正是你想要的屬性。 + +## 與同類工具對比 + +| | **PromptPanel** | TextExpander | Espanso | Raycast Snippets | Alfred Snippets | 瀏覽器 Prompt 外掛 | +|---|:---:|:---:|:---:|:---:|:---:|:---:| +| 開源 | ✅ MIT | ❌ | ✅ GPLv3 | 部分 | ❌ | 看外掛 | +| macOS 原生(非 Electron / Web) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| 任意應用可用 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| 快捷搜尋面板 | ✅ | 部分 | ❌ | ✅ | ✅ | 看外掛 | +| 專案 / 上下文隔離 | ✅ 一等公民 | groups | folders | folders | folders | 少有 | +| 全鍵盤流 | ✅ | 部分 | ✅ | ✅ | ✅ | 看外掛 | +| 純本地 / 不上雲 | ✅ 預設 | 收費版偏推薦雲 | ✅ | 需帳號 | ✅ | 大多上雲 | +| 免費 | ✅ | $$$ | ✅ | freemium | 需 Powerpack | 看外掛 | +| 專門為 AI Prompt 工作流設計 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ 但限瀏覽器 | + +**一句話**:如果你只在瀏覽器裡用,瀏覽器外掛就夠。如果你在 Cursor / VS Code / Terminal / Slack / 各處都需要——那你需要原生面板型工具。在原生面板型工具裡,PromptPanel 是開源、專為 AI Prompt 設計的那個。 + +## 技術棧 + +- **語言**:Swift 5.10 +- **UI**:AppKit (`NSPanel`, `NSStatusItem`) + SwiftUI +- **儲存**:SQLite via [GRDB.swift](https://github.com/groue/GRDB.swift) +- **快捷鍵**:[sindresorhus/KeyboardShortcuts](https://github.com/sindresorhus/KeyboardShortcuts)(底層 Carbon Hot Key) +- **自動貼上**:焦點恢復後用 `CGEvent` 合成 ⌘V +- **開機啟動**:`SMAppService` +- **更新**:[Sparkle 2](https://sparkle-project.org/) +- **分發**:Developer ID + Apple 公證(不走 Mac App Store) +- **建置**:Swift Package Manager,無 Xcode 工程 + +完整選型決策見 [docs/技术选型.md](docs/技术选型.md)。 + +## 目錄結構 + +``` +PromptPanel/ +├── Sources/PromptPanel/ +│ ├── App/ # AppDelegate / AppState / 生命周期 +│ ├── Core/ +│ │ ├── Database/ # SQLite 打开 / 迁移 / 损坏恢复 +│ │ ├── Repositories/ # 项目、词条、设置、执行日志 +│ │ ├── Services/ # 面板、执行、搜索、维护等核心服务 +│ │ ├── Diagnostics/ # 快捷键到面板聚焦的时序诊断 +│ │ └── Utils/ +│ ├── Integrations/ # 剪贴板 / 粘贴 / 菜单栏 / 快捷键 / 更新器 +│ ├── Features/ +│ │ ├── Panel/ # QuickPanelView + ViewModel — 主链路 +│ │ └── MainWindow/ # 库管理 + 设置 +│ └── Resources/ # Info.plist / entitlements / 图标 / Assets +├── Tests/PromptPanelTests/ +├── frontend-draft/ # UI 唯一基准(HTML/JSX 设计稿 + 截图) +├── scripts/ # 构建、公证、发布预检、备份恢复 +├── docs/ # 公开架构、FAQ、PRD、部署、运维、交接文档 +├── .github/ # 贡献、安全、行为准则、issue/PR 模板、CI +├── llms.txt # 面向 AI 搜索 / LLM 的简短项目索引 +├── codemeta.json # 开源软件结构化元数据 +└── Package.swift # SwiftPM 包定义 +``` + +## 文件體系 + +公開文件會隨儲存庫一起維護: + +- [文件總覽](docs/README.md) +- [FAQ](docs/FAQ.md) +- [產品 PRD](docs/项目快贴-PRD.md) +- [專案介紹](docs/项目介绍.md) +- [架構說明](docs/架构说明.md) +- [關鍵模組與核心邏輯](docs/关键模块与核心逻辑.md) +- [API 與功能說明](docs/API与功能说明.md) +- [設定說明](docs/配置说明.md) +- [部署說明](docs/部署说明.md) +- [開發規範](docs/开发规范.md) +- [使用範例](docs/使用示例.md) +- [維運與排錯指南](docs/运维与排错指南.md) +- [接手維護指南](docs/接手维护指南.md) +- [文件與程式碼同步矩陣](docs/文档与代码同步矩阵.md) +- [生產發布與恢復手冊](docs/生产发布与恢复手册.md) +- [路線圖與貢獻指南](docs/路线图与贡献指南.md) +- [AI 搜尋與可發現性](docs/ai-search-discoverability.md) +- [完整 LLM 上下文](docs/ai-search/llms-full.txt) +- [搜尋結構化元資料](docs/search-metadata.schema.jsonld) +- [貢獻指南](.github/CONTRIBUTING.md) +- [安全政策](.github/SECURITY.md) +- [CodeMeta 開源軟體元資料](codemeta.json) + +面向 AI 搜尋引擎和儲存庫感知工具,優先讀取 [llms.txt](llms.txt) 或更完整的 [llms-full.txt](docs/ai-search/llms-full.txt)。 + +## 搜尋與 AI 可發現性 + +PromptPanel 把傳統 SEO 和 GEO(生成式答案引擎最佳化)入口放在儲存庫裡維護,避免搜尋結果、AI 摘要和 README 說法漂移: + +- `README.md` 和 `README.zh-CN.md`:面向真人使用者的入口摘要和目前介面截圖 +- [llms.txt](llms.txt):面向儲存庫感知工具的短索引 +- [docs/ai-search/llms-full.txt](docs/ai-search/llms-full.txt):面向答案引擎的完整上下文和 FAQ 式回答 +- [codemeta.json](codemeta.json) 與 [Schema.org JSON-LD](docs/search-metadata.schema.jsonld):面向軟體索引、搜尋爬蟲和未來文件站的結構化元資料 +- [AI 搜尋與可發現性](docs/ai-search-discoverability.md):統一 canonical 描述、搜尋意圖對映和維護清單 + +## Roadmap + +PromptPanel 走的是**刻意收斂**的路線。PRD 已經把「永不做」列出來了(雲端同步、團隊、複雜工作流)。在範圍內: + +- [x] v1.0 — 主鏈路完成:快捷鍵 → 搜尋 → 執行、專案、剪貼簿兜底、明暗、開機啟動、Sparkle、簽名 + 公證腳本 +- [x] JSON / Markdown 匯入匯出,匯入前自動建立本地備份 +- [ ] 一鍵「重複執行上一條詞條」 +- [ ] 變數範本(`{{name}}`)—— 僅當不拖累主鏈路時才做 + +優先順序和取捨規則見 [docs/路线图与贡献指南.md](docs/路线图与贡献指南.md),已發布內容看 [CHANGELOG.md](CHANGELOG.md),公開規劃看 [issues](https://github.com/tytsxai/PromptPanel/issues)。 + +## 常見問題 + +更長的 FAQ 見 [FAQ.md](docs/FAQ.md),這裡挑常被問到的: + +### 收費嗎? + +不收費。MIT 協議,沒有付費檔、沒有用量上限、沒有帳號。 + +### 支援 Apple Silicon(M1/M2/M3/M4)嗎? + +支援,建置為 universal binary,Apple Silicon 與 Intel 在 macOS 14+ 都測過。 + +### 我的 Prompt 會不會被發到雲上? + +不會。目前版本完全沒有網路呼叫。Sparkle 已打包,但 appcast feed 未設定,因此根本不會發出任何對外請求。Prompt 內文從不離開你的 Mac。 + +### 為什麼要 Accessibility 權限? + +為了在面板退場後給前一個 app 合成一次 `⌘V`。不給權限工具也能用,只是停在剪貼簿那一步、需要你手動 `⌘V`。 + +### 會加雲端同步 / 團隊共享 / 工作流嗎? + +不會,這是有意決定。這些項在 [PRD §4.2](docs/项目快贴-PRD.md) 裡被列為**永不做**。產品的核心身份就是「單使用者、純本地、快」,加了那些就不是這個產品了。 + +### 為什麼不用 Electron / Tauri? + +這個產品的關鍵路徑(全域快捷鍵時序、焦點恢復、合成按鍵、Accessibility 權限引導)本來就在 macOS 系統整合層。跨平台殼只會增加延遲和間接性,不會帶來這個產品需要的能力。詳見 [docs/技术选型.md](docs/技术选型.md)。 + +### 怎麼報 bug 或提需求? + +提 issue:,請用範本,能減少很多來回。 + +### 怎麼從其他工具匯入已有 Prompt? + +在 `設定 → 維護操作` 裡用 `匯入 JSON` 遷移完整 PromptPanel 詞庫,或用 `匯入 MD` 匯入 Markdown 提示詞集合。匯入前會自動建立本地資料庫備份。`匯出 JSON` 適合無損遷移,`匯出 MD` 適合人工審閱和分享。 + +## 參與貢獻 + +歡迎 PR——開始前請先看 [CONTRIBUTING.md](.github/CONTRIBUTING.md)。兩條不太顯然的規則: + +1. **UI 改動必須先和 `frontend-draft/` 對齊**:那個目錄是視覺基準,不能讓 Swift 視圖和 JSX 設計稿不一致 +2. **不越 PRD 邊界**:如果一個提議會把產品推向雲端 / 團隊 / 工作流,無論實作多好都會被關閉。這不是把門,是這個工具能保持快和可信的根本原因 + +## 致謝 + +PromptPanel 站在以下肩膀上: + +- [GRDB.swift](https://github.com/groue/GRDB.swift) — Gwendal Roué +- [KeyboardShortcuts](https://github.com/sindresorhus/KeyboardShortcuts) — Sindre Sorhus +- [Sparkle](https://github.com/sparkle-project/Sparkle) — Sparkle 團隊 + +以及更廣泛的 Swift / AppKit 社群——文件與 Stack Overflow 讓那些系統整合的暗面變得可走通。 + +## 協議 + +[MIT](LICENSE) © 2026 tytsxai 與 PromptPanel 貢獻者。 + +--- + +**關鍵詞**(方便你搜到):macOS Prompt 管理 · AI Prompt 啟動器 · ChatGPT Prompt 管理 macOS · Claude Prompt 庫 · Cursor 程式碼片段管理 · Copilot 範本啟動器 · 開源 TextExpander 替代 · Espanso 替代 · Raycast 替代 · Alfred Snippets 替代 · 全域快捷鍵貼上 · 本地優先 Prompt 庫 · 離線 AI Prompt 儲存 · 原生 Swift NSPanel 應用 · AI 工作流效率工具 · Prompt 範本管理 macOS · macOS 片段啟動器 · 鍵盤優先 Prompt 選擇器 · LLM Prompt 儲存庫 Mac · Prompt 工程工具箱 · Cursor Prompt 管理器 · NDA 安全的本地 Prompt 儲存 · 项目快贴. diff --git a/docs/ai-search-discoverability.md b/docs/ai-search-discoverability.md index ac90df2..9cdd5bb 100644 --- a/docs/ai-search-discoverability.md +++ b/docs/ai-search-discoverability.md @@ -123,7 +123,8 @@ Treat these as the search index for the project: | Surface | Purpose | | --- | --- | | `README.md` | Primary bilingual GitHub landing page with Chinese-first summary and English technical keywords. | -| `README.zh-CN.md` | Primary Chinese landing page. | +| `README.zh-CN.md` | Primary Chinese (Simplified) landing page. | +| `README.zh-TW.md`, `README.ja.md`, `README.ko.md`, `README.es.md`, `README.fr.md`, `README.de.md` | Localized landing pages (Traditional Chinese, Japanese, Korean, Spanish, French, German) for international search and AI-answer discoverability. They mirror `README.md`'s structure, links, and canonical positioning; the language nav bar at the top of every README links all versions. | | `docs/FAQ.md` | Searchable Q&A for privacy, permissions, build, alternatives, and roadmap questions. | | `docs/项目介绍.md` | Stable project introduction for users, maintainers, search engines, and AI retrieval. | | `docs/API与功能说明.md` | Feature contract, internal service contracts, database schema, script interfaces, and search behavior. | @@ -209,6 +210,7 @@ When the product positioning changes, update these files in the same pull reques - `README.md` - `README.zh-CN.md` +- Localized READMEs: `README.zh-TW.md`, `README.ja.md`, `README.ko.md`, `README.es.md`, `README.fr.md`, `README.de.md` (keep positioning, features, limits, and the language nav bar in sync with `README.md`) - `docs/FAQ.md` - `llms.txt` - `docs/ai-search/llms-full.txt`