Menu bar macOS app for generating concise AI provocations from selected text using on-device Apple Foundation Models. Think of it as your personal thought companion.
Beta — under active development
FreeThinker is a local-first AI thought companion. Select text anywhere on your Mac, press the global hotkey, and get AI-generated "provocations" that challenge and extend your thinking — all without sending a single byte off your machine.
Strenghten your thinking. Be a FreeThinker.
- Completely local — AI runs on-device via Apple Foundation Models. No API keys, no cloud, no internet required after install.
- Private by design — all text input, customizations, and AI interactions stay on your Mac. Nothing is transmitted to external services.
- AI provocations — select text to get a short, thought-provoking AI response streamed in real time.
- Customizable provocation styles - Choose from contrarian, socratic, or systems thinking to interrogate selected text.
- Free software — GPLv3.
- macOS 26+
- Apple Silicon
- Xcode 16.0+ to build from source
git clone https://github.com/tannn/freethinker.git
cd freethinker
swift package resolveYou can open Package.swift directly in Xcode, or generate the Xcode project via XcodeGen:
# Generate .xcodeproj from project.yml
xcodegen generateTo build from the command line:
swift build# Via SwiftPM
swift test
# Via xcodebuild (if using .xcodeproj)
xcodebuild test -scheme FreeThinkerAfter cloning, install the git hooks:
bash scripts/setup-hooks.shThis symlinks everything in git-hooks/ into .git/hooks/. It is idempotent — safe to re-run.
All commits must follow Conventional Commits format:
<type>(<scope>): <description>
- type — one of:
feat,fix,docs,chore,refactor,test,style,perf,ci - scope — optional, lowercase alphanumeric (e.g.
ui,model,deps) - description — lowercase imperative phrase, no trailing period, max 72 chars on the subject line
- body — optional; must be separated from the subject by a blank line
Examples:
feat(ui): add dark mode toggle
fix: handle nil pointer in model loader
docs: update contributing guidelines
chore(deps): bump sparkle to 2.6.4
The commit-msg hook (installed by setup-hooks.sh) validates this format automatically.
