YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
PromptGarage for macOS
Native, local-first PromptGarage for Apple Silicon. The app is written in SwiftUI, uses the existing SQLite/FTS5 data model through GRDB, and does not start a Python process, web server, or network service.
Product contract
- macOS 26, arm64 only
- German native macOS UI
- One-time migration from an existing
prompts.db - Search, filters, CRUD, star, rating, copy/use count, statistics
- Seven import formats across Claude, Codex, Hermes, ChatGPT, and Gemini
- Forward-only browsing by original prompt day
- Read-only topic browsing from existing tags
- No sync, cloud account, AI relabeling, CLI, or MCP in V1
The approved product and state contract lives in
wireframes/2026-07-15-promptgarage-mac/WIREFRAME_PACKET.md.
Build on the Mac
Requirements:
- Apple Silicon Mac
- macOS 26
- Xcode 26 command-line tools
- Internet access once for resolving the pinned GRDB Swift package
swift package resolve
swift test
./scripts/build-app.sh
The build script fails unless it is running on macOS 26+, Xcode/Swift 6.2 and an
Apple Silicon host. It creates an ad-hoc signed, exact-arm64 personal app in
dist/; it does not launch or install it and does not create a DMG or App Store
package.
First launch and data safety
- Choose the transferred
prompts.db, or start with an empty garage. - PromptGarage opens the selected source read-only and checks SQLite integrity, required tables, columns, FTS triggers, and row-count parity.
- SQLite's online backup creates a separate database under
~/Library/Application Support/PromptGarage/. - Only the Mac copy receives the nullable
prompted_atcolumn. - Existing rows remain
NULL; the app never invents historical dates or topics.
New Mac prompts receive prompted_at. Provider timestamps are used when present;
otherwise one stable import time is used for that preview. “Nach Topics” derives
groups from stored comma-separated tags without rewriting those tags.
Verification
Linux can verify the repository and source database contract, but cannot compile SwiftUI:
python3 verification/verify_contract.py \
--source-db /home/smlflg/Projekte/PromptGarage/prompts.db
The release gate must run on the Mac:
./scripts/verify-mac.sh
With a transferred real database, use the guarded integration path:
./scripts/verify-mac.sh --source-db /path/to/transferred/prompts.db
--source-db exports PROMPTGARAGE_SOURCE_DB to both SwiftPM and Xcode package
tests. The script hashes the source database plus any SQLite sidecars before and
after every gate and fails if any byte or sidecar presence changed.
Installation and launching are intentionally separate, explicit authorities:
# Build/test/sign, then launch dist/PromptGarage.app and verify a new process
./scripts/verify-mac.sh --source-db /path/to/prompts.db --launch
# Build/test/sign, replace /Applications/PromptGarage.app, launch, verify process
./scripts/verify-mac.sh --source-db /path/to/prompts.db --install
Without --launch or --install, the app is not opened. Without --install,
nothing is written to /Applications; the script never invokes sudo. The full
manual acceptance pass is verification/MAC_UI_SMOKE_CHECKLIST.md.
Done means SwiftPM and Xcode package tests pass, the packaged binary is exactly
arm64 (not universal), code signing verifies, a newly launched process remains
alive, source bytes remain unchanged, migrated prompt/FTS counts match, and every
manual smoke item passes after a relaunch.
Repository map
Sources/PromptGarageCore/— SQLite schema, repository, migration, importersSources/PromptGarageApp/— SwiftUI application and viewsTests/PromptGarageCoreTests/— synthetic fixtures and data-contract testsAppBundle/andscripts/— personal.apppackaging and Mac verificationverification/— static contract checks and the required Mac UI smoke recordwireframes/— owner-approved views, states, risks, and acceptance contract