The productivity layer your Mac deserves — AI-powered, keyboard-first, clutter-free.
- Grammar fix — select text in any app, press
⌃⌥G, Tidy rewrites it via your chosen AI provider. - Ask AI — press
⌃⌥Jfor a Quick AI chat panel with source slots for MCP, llm-wiki, and local folder context. - Clipboard history — automatic history with search, hover-copy, and a quick-access palette (
⌃⌥V). - File Tidy — local folder scanning with preview-first move proposals, duplicate/stale/build-artifact detection, selective approval, and undo logs.
- Developer tools — JSON formatter/validator, JWT decoder, text diff, Unix time converter, CSV ↔ JSON converter, cron parser.
- Light / Dark / System appearance, user-selectable from Settings.
- Multiple AI providers — Gemini Flash, OpenAI, Anthropic, DeepSeek, Ollama (local), OpenCode, LanguageTool.
- API keys stored securely in macOS Keychain.
- macOS 15.3 or newer.
- Xcode 16 or newer.
- Accessibility permission for reading and replacing selected text.
- Network access for cloud grammar providers. Ollama and LanguageTool can be used locally depending on your configuration.
git clone https://github.com/jancuk/tidy.git
cd TidyCreate a Local.xcconfig file in the repo root (it is gitignored):
DEVELOPMENT_TEAM = YOUR_TEAM_ID
Find your Team ID at developer.apple.com/account → Membership Details.
If you just want to run it without code signing, leave it blank — Xcode will prompt you to choose a team on first build.
Open Tidy.xcodeproj in Xcode, select the Tidy scheme with My Mac as destination, and press ⌘R.
From the command line:
xcodebuild -project Tidy.xcodeproj -scheme Tidy -destination 'platform=macOS' buildRun unit tests:
xcodebuild test -project Tidy.xcodeproj -scheme Tidy -destination 'platform=macOS' -only-testing:TidyTestsOpen Settings (gear icon in the sidebar) → Grammar tab → paste your API key and click Save API Keys.
| Provider | Where to get a key |
|---|---|
| Gemini Flash | aistudio.google.com — free tier available |
| OpenAI | platform.openai.com |
| Anthropic | console.anthropic.com |
| DeepSeek | platform.deepseek.com |
| Ollama | No key needed — runs locally |
Gemini also checks the GEMINI_API_KEY environment variable before falling back to the saved Keychain value.
Tidy needs Accessibility access to read selected text and paste the corrected version back. macOS will prompt on first use, or go to System Settings → Privacy & Security → Accessibility.
Tidy's long-term direction is a personal Mac assistant for cleaning up text, files, and daily developer context.
Help developers clean messy folders like Downloads and Desktop with a safe, preview-first workflow.
- Scan a selected folder locally from the File Tidy sidebar item.
- Group files by type, date, project hint, and usage pattern.
- Propose moves such as screenshots to
Pictures/Screenshots, installers toDownloads/Installers, archives toArchives, and documents to useful folders. - Detect duplicate files, large stale files, build artifacts, old logs, and temporary exports.
- Show every proposed move before anything changes.
- Let the user approve selected changes.
- Keep an undo log for moved or renamed files.
The first version is rule-based and local-only. AI suggestions can come later for naming, folder recommendations, and explanations.
Add developer-aware cleanup checks:
- Find old
node_modules,.next,dist,build,.turbo,coverage,DerivedData,.xcarchive,.profraw, and log folders. - Detect abandoned project folders and warn when a Git repo has uncommitted changes.
- Separate "safe to delete", "archive first", and "needs review" recommendations.
- Surface disk usage by project and generated artifact type.
Summarize daily work context across tools, with explicit user permission for each integration.
- Slack summary: unread mentions, decisions, blockers, and threads needing replies.
- Jira summary: assigned issues, stale tickets, due dates, blocked work, and recent changes.
- Pending work summary: combine reminders, open tasks, recent clipboard/context, and user-selected sources into a daily brief.
- Meeting prep: summarize related issues, recent messages, and files before a calendar event.
- End-of-day wrap: list completed work, unresolved questions, and suggested next actions.
These integrations should be opt-in, transparent about what data is read, and avoid storing third-party content unless the user explicitly enables local history.
- API keys are stored in macOS Keychain, not in
UserDefaultsor project files. - Clipboard history is stored locally.
- Clipboard capture skips common password managers and transient pasteboard content.
- Selected text is sent only to the grammar provider you configure. Cloud providers receive the selected text for grammar correction.
- The app requests Accessibility permission so it can read selected text and paste the corrected result.
- The repository intentionally ignores local assistant worktrees, Xcode user state, profiling files, app databases, and
.envfiles.
Before publishing a fork, run a local secret scan and review git status --ignored to make sure local state is not staged.
Do not commit:
.claude/or other local assistant worktrees.xcuserdata/or*.xcuserstate..envfiles or API keys.- Private keys, signing certificates, and provisioning profiles.
- Local SQLite databases or profiling output.
MIT — see LICENSE.

