Releases: tytsxai/PromptPanel
Release list
PromptPanel v1.1.2 — valid signature, real universal binary, live update channel
Distribution-correctness release. Nothing changes in how the app is used day to day; what changes is that a build produced from this source is now actually installable and updatable. Two defects that would have surfaced on the first public binary are fixed, the Sparkle update channel is finalized end to end, and the public positioning surfaces now state only what the evidence supports.
This release ships source only — there is no binary asset yet. The notarized universal build will be attached once the EdDSA signing key is in place; see docs/生产发布与恢复手册.md.
Fixed
- The packaged
.apphad an invalid code signature.build-app.shadded three app-root symlinks toContents/Resources/*.bundleafter signing, to satisfy the SwiftPMBundle.moduleaccessor. Content at the bundle root cannot be sealed, socodesign --verifyexited 1 (unsealed contents present in the bundle root) — not a warning: a quarantined download would be blocked by Gatekeeper on first launch and Sparkle would refuse to install the update. The symlinks are gone andrelease-readiness.shnow verifies signatures with no exemptions. - The release archive was arm64-only while the README and FAQ promised a universal binary — an Intel download would simply not run, and the defect was invisible on an Apple Silicon build machine. Release builds now produce
arm64 + x86_64, and the release gate fails if either slice is missing. - The seeded
release/appcast.xmlwas not well-formed XML (a double hyphen inside an XML comment), so Sparkle's parser would have rejected the whole feed and update checks would have failed silently forever — HTTP 200, plausible file, no updates ever offered. Bothgenerate-appcast.shand the publish workflow now validate the feed before writing or deploying it. - The appcast XML check broke the publish workflow:
xmllintis no longer preinstalled onubuntu-latest(exit 127). Validation now uses the preinstalledpython3.
Added
- Sparkle update channel finalized. Feed pinned to
https://tytsxai.github.io/PromptPanel/appcast.xml, published fromrelease/appcast.xml; installers ship as Release assets. BecauseSUFeedURL/SUPublicEDKeyare baked into each installed app and cannot be corrected afterwards,release-readiness.sh --public-distributionnow fills in the canonical feed URL, requires an EdDSA public key, and asserts both keys are present in the packagedInfo.plist.generate-appcast.shgained--tag, seed merging, a guard against rewriting already-published enclosure URLs, and a hard failure when no signing key is available. HotkeyRecorderField, a self-drawn shortcut recorder built only on public non-UI API, replacingKeyboardShortcuts.Recorder— this removed the last runtime dependency onBundle.module. Existing hotkeys are disabled while recording; Esc cancels and Delete clears as before. Trade-off: the library's "shortcut already taken" popup is gone; the Settings hint and FAQ cover the workaround.
Changed
Package.resolvedis now version-controlled — release builds were not reproducible before. Locked at GRDB 7.8.0 / KeyboardShortcuts 1.10.0 / Sparkle 2.9.4.- README architecture claims state build facts only. The x86_64 slice has only been exercised through Rosetta, so "tested on Apple Silicon and Intel" is now "built as a universal binary that runs natively on both".
- The Simplified-Chinese-only app interface is disclosed across all eight READMEs and every metadata surface;
check-docs.shasserts it. The docs ship in eight languages and readers would otherwise assume the UI does too.
Removed
- 10 UI-QA and draft screenshots (~5.9 MiB) deleted from the repository — regenerable output of
capture-ui-qa.sh, now git-ignored.
Full changelog: v1.1.1...v1.1.2
PromptPanel v1.1.1 — reliability, security-hardening, docs, and auto-update channel
Reliability, security-hardening, and documentation release. No end-user feature changes and no new default network paths: the app stays local-first, and the auto-update channel added here remains dormant unless a feed URL and signing key are configured at build time.
Added
- Auto-update release channel wired up:
scripts/generate-appcast.shgenerates and EdDSA-signs anappcast.xmlfrom a directory of notarized release archives, completing the Sparkle update path. Daily automatic update checks are enabled (24 h interval) while installs still prompt first — no silent install. The channel stays inert in default and source builds because noSUFeedURL/SUPublicEDKeyis baked in unless passed tobuild-app.shat package time. - Localized READMEs for Japanese, Korean, Traditional Chinese, Spanish, French, and German (in addition to English and Simplified Chinese).
Security
- Hardened-runtime library validation kept enabled: removed
com.apple.security.cs.disable-library-validationfrom the shipped entitlements;build-app.shre-signsSparkle.frameworkand every embedded helper with the hardened runtime and the app's identity, so all loaded code shares one Team ID — closing an unnecessary dylib-injection surface.release-readiness.shnow asserts the entitlement is absent and verifies the bundle signature. - HTTPS-only Sparkle feed enforced in both
build-app.shandrelease-readiness.sh. - Data directory permissions tightened: app-support and logs directories are now created with
0700, so no other local account can read PromptPanel storage.
Fixed
- Diagnostics export and accessibility reset could hang when a subprocess filled its stderr pipe (~64 KB) before
waitUntilExit(); the pipes are now drained before waiting. - Two crash-prone force-unwraps removed (FTS search arguments now use typed
StatementArguments;LogRepository.cleanuphas a fallback cutoff date). - Keyboard-shortcut recorder no longer crashes on first use — resource-bundle symlinks are added after signing so
Bundle.moduleresolves.
Full Changelog: v1.1.0...v1.1.1
PromptPanel v1.1.0 — library import/export, diagnostics export, atomic data safety
PromptPanel v1.1.0 — Library import/export, diagnostics export, atomic data safety
First stable feature release after 1.0. Focus areas: lossless library migration, on-device diagnostics, and storage self-maintenance — all still local-first with no new network paths.
中文摘要:1.0 之后的第一个功能正式版。核心新增:词库 JSON/Markdown 导入导出(导入前自动本地备份、单事务原子回滚)、一键本地诊断包导出、恢复产物自动清理。所有数据仍然只存在本机,没有任何新增网络路径。
✨ Added
- Library import/export (
Settings → Maintenance/设置 → 维护操作)Export JSON: lossless full-library transfer between Macs or PromptPanel installs.Export MD: human-reviewable Markdown export for sharing.Import JSON/Import MD: migrate from another install or a Markdown prompt collection.- Every import automatically creates a local database backup first, and all import writes run in a single SQLite transaction — a failed import rolls back completely instead of leaving a half-written library.
- Diagnostics export: one click produces a local diagnostics bundle (app/system info, settings snapshot, recent logs, database health) for troubleshooting and bug reports. Nothing is uploaded.
- Recovery pruning: stale recovery/backup artifacts are cleaned automatically, keeping the data directory bounded.
- Regression coverage for import rollback and quick-panel manual ordering.
🔧 Changed
- Quick-panel window-origin persistence is debounced — fewer redundant settings writes while dragging the panel.
- Settings window polish: clearer maintenance section and runtime-health presentation.
- Hardened distribution path: entitlements aligned for release signing; update messaging matches the actually-disabled Sparkle state.
🐛 Fixed
- Library import is now atomic — a mid-import failure no longer leaves partially imported projects or entries.
- Quick-panel local ranking now matches repository ordering for manual
sortOrder, so panel and library always show the same order. - Repository consistency edge cases in entry and settings persistence.
🔒 Security & privacy
- No accounts, no telemetry, no cloud sync. Import/export and diagnostics export operate purely on local files.
- Sparkle remains bundled but disabled (no feed configured), so this build makes zero outbound network calls.
📦 Install (build from source)
git clone https://github.com/tytsxai/PromptPanel.git
cd PromptPanel
./scripts/build-app.sh
open dist/PromptPanel.appRequires macOS 14 Sonoma or later (Apple Silicon & Intel), Xcode 15+, Swift 5.10.
Full changelog: https://github.com/tytsxai/PromptPanel/blob/main/CHANGELOG.md
Compare: v1.0.1...v1.1.0
v1.0.1 — Workflow examples + version surfaces
📝 Documentation release
Documentation-only release on top of v1.0.0. The app binary, hotkey path, paste behavior, and storage format are unchanged.
What's new in the docs
- README — Workflow examples section capturing concrete use cases people actually search for:
- "Spin up a fresh ChatGPT / Claude chat with my standard role / system prompt"
- "Drop a Cursor / Copilot project-context block into a new file"
- "Paste a code-review checklist into a PR draft"
- "Fire a repeating terminal command with the exact flag combo"
- "Insert a meeting-notes template into Notion / Obsidian / Apple Notes"
- "Push a customer-service / sales reply template into Slack or email"
- "Switch between projects with isolated prompt sets"
These double as long-tail SEO/GEO surfaces — the kinds of "how do I…" questions that route discovery from ChatGPT/Claude/Perplexity/Gemini back to PromptPanel.
Version surfaces aligned
- `codemeta.json` → 1.0.1 / 2026-05-19
- `Info.plist` → CFBundleShortVersionString 1.0.1, CFBundleVersion 2
- `docs/search-metadata.schema.jsonld` → softwareVersion 1.0.1
- `llms.txt` → version line + answer-engine summary
- README badges (EN + zh-CN)
Full changelog
See CHANGELOG.md.
PromptPanel v1.0.0 — local-first macOS AI prompt launcher
PromptPanel v1.0.0 — first public release.
An open-source, local-first macOS prompt manager and snippet launcher for AI power users. Press a global hotkey from any app, search your local prompt library, hit Enter, and the entry lands in the active text field — ChatGPT, Claude, Cursor, Copilot, VS Code, Terminal, browsers, or anywhere else.
Highlights
- 🔥 Global hotkey quick panel (
KeyboardShortcuts), targeting <300 ms hotkey-to-focus. - 🗂️ Project-scoped prompts plus a built-in
Universalproject. - 🔍 SQLite FTS5 search across title and body, with
#tagfiltering. - 📋 Clipboard-first execution guarantee; best-effort auto-paste via macOS Accessibility.
- 📌 Pin, manual sort, recency, and use-count tiers in both the library and the quick panel.
- 🌗 Light / dark / system theme, Launch at Login (
SMAppService), Sparkle 2 auto-update. - 🔐 No accounts, no telemetry, no cloud sync — prompt content stays in a single local SQLite file.
Pain points it removes
- Retyping the same role / system prompt into every new ChatGPT, Claude, or Gemini chat.
- Hunting through a Notes app or scratchpad for a reusable AI prompt mid-conversation.
- Pasting Cursor / Copilot project context blocks before every coding session.
- Auto-paste tools that silently fail when focus moves.
- Cloud prompt managers that cannot safely hold NDA-bound or proprietary prompts.
System requirements
- macOS 14 (Sonoma) or later, Apple Silicon and Intel.
Install
Pre-built binaries are not attached to this tag yet. Build from source:
git clone https://github.com/tytsxai/PromptPanel.git
cd PromptPanel
./scripts/build-app.sh
open dist/PromptPanel.appOn first run, grant Accessibility permission for automatic paste, set a hotkey in Settings (default ⌥2), and start adding entries to the Universal project.
Privacy
Local SQLite at ~/Library/Application Support/PromptPanel/promptpanel.db. No accounts, no analytics. The only outbound traffic is the optional Sparkle update check.
Full notes
See CHANGELOG.md.