Replaces the original shannoncoat.sh entirely with in-process Swift. The script stopped earning its keep once the rest went native, and being a persistent process rather than a one-shot CLI is what later makes live window tracking possible at all. - ProfileStore: JSON config at ~/.shannoncoat/<name>.json (was hand-rolled YAML), with ~ expansion, paths relative to the config dir, and name/dir-collision validation in one place. - ProcessInspector: sysctl(KERN_PROC_ALL/KERN_PROCARGS2) enumeration instead of shelling out to pgrep. - ClaudeControl: launch via Process, focus via direct Accessibility calls (unhide, un-minimize, poll-for-window, AXRaise) instead of AppleScript, and a quit that respects Claude's own termination handling rather than unconditionally SIGKILLing after a flat 5s timeout. - LiveState: NSWorkspace notification-driven state with no polling timer, so the menu bar reflects reality within about a second — including changes made outside the app entirely. - ManageWindow: one non-modal window replacing what would otherwise be a string of separate popup alerts, with inline add/remove and directory pickers. - LaunchAtLogin / UpdateChecker: SMAppService login-item toggle, and a minimal VERSION-file update check that alerts on a manual check and posts a quiet notification on the automatic one. Also drops the standalone CLI in favour of GUI-only, and adds a placeholder app icon drawn from vector shapes rather than composited on top of Claude's own icon assets. Claude Desktop is located at runtime rather than assumed: a path the user picked previously, then /Applications, then a per-user ~/Applications install, each accepted only if it actually contains the executable. If none match, launching a profile asks the user to locate it once and remembers the answer — a launch that silently does nothing gives them no way to work out what's wrong.
142 lines
3.0 KiB
Plaintext
142 lines
3.0 KiB
Plaintext
# Icon generation: raw Claude.app icon assets extracted as source material
|
|
# for icon/generate-icon.swift — the derived composite (icon/AppIcon.icns)
|
|
# is committed, but Anthropic's own unmodified icon files aren't.
|
|
icon/claude-src/
|
|
icon/AppIcon.iconset/
|
|
|
|
# Local reference material (e.g. nested checkouts of other projects) — not
|
|
# part of this project, never meant to be committed.
|
|
.scratch/
|
|
|
|
# Xcode
|
|
#
|
|
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
|
|
|
|
## User settings
|
|
xcuserdata/
|
|
|
|
## Obj-C/Swift specific
|
|
*.hmap
|
|
|
|
## App packaging
|
|
*.ipa
|
|
*.dSYM.zip
|
|
*.dSYM
|
|
|
|
## Playgrounds
|
|
timeline.xctimeline
|
|
playground.xcworkspace
|
|
|
|
# Swift Package Manager
|
|
#
|
|
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
|
|
# Packages/
|
|
# Package.pins
|
|
# Package.resolved
|
|
# *.xcodeproj
|
|
#
|
|
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
|
|
# hence it is not needed unless you have added a package configuration file to your project
|
|
# .swiftpm
|
|
|
|
.build/
|
|
|
|
# CocoaPods
|
|
#
|
|
# We recommend against adding the Pods directory to your .gitignore. However
|
|
# you should judge for yourself, the pros and cons are mentioned at:
|
|
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
|
|
#
|
|
# Pods/
|
|
#
|
|
# Add this line if you want to avoid checking in source code from the Xcode workspace
|
|
# *.xcworkspace
|
|
|
|
# Carthage
|
|
#
|
|
# Add this line if you want to avoid checking in source code from Carthage dependencies.
|
|
# Carthage/Checkouts
|
|
|
|
Carthage/Build/
|
|
|
|
# fastlane
|
|
#
|
|
# It is recommended to not store the screenshots in the git repo.
|
|
# Instead, use fastlane to re-generate the screenshots whenever they are needed.
|
|
# For more information about the recommended setup visit:
|
|
# https://docs.fastlane.tools/best-practices/source-control/#source-control
|
|
|
|
fastlane/report.xml
|
|
fastlane/Preview.html
|
|
fastlane/screenshots/**/*.png
|
|
fastlane/test_output
|
|
|
|
# AI agents and assistants
|
|
#
|
|
# Some common agent instruction and project configuration files are listed
|
|
# below as commented-out examples. They are often intentionally committed and
|
|
# shared with a team, so only uncomment them if they are local-only in your
|
|
# project.
|
|
|
|
# GEMINI.md
|
|
# WARP.md
|
|
# CRUSH.md
|
|
# QWEN.md
|
|
|
|
# OpenAI Codex
|
|
# AGENTS.md
|
|
# .codex/
|
|
|
|
# Aider
|
|
# .aider.input.history
|
|
# .aider.chat.history.md
|
|
# .aider.llm.history
|
|
# .aider.tags.cache.v*
|
|
# .aiderignore
|
|
|
|
# Claude Code
|
|
.claude/*.local.json
|
|
.claude/**/*.log
|
|
CLAUDE.local.md
|
|
# .claude/
|
|
|
|
# Gemini CLI
|
|
# gemini-debug.log
|
|
# .gemini-clipboard/
|
|
# .gemini/
|
|
|
|
# Cursor AI
|
|
# .cursorrules
|
|
# .cursor/
|
|
# .cursor.json
|
|
# .cursor-settings.yaml
|
|
|
|
# Continue
|
|
# .continue/
|
|
# .continuerc.json
|
|
|
|
# Cline
|
|
# .cline/
|
|
# .clinerules
|
|
# cline.json
|
|
|
|
# Other agent/editor project config
|
|
# .warp/
|
|
# .crush/
|
|
# .codeium/
|
|
# .deepseek/
|
|
# .amazon-codewhisperer/
|
|
# .tabnineignore
|
|
# .tabnine/
|
|
|
|
# GitHub Copilot
|
|
# .github/copilot-instructions.md
|
|
|
|
# Windsurf Editor
|
|
# .windsurfrules
|
|
# .windsurf/
|
|
|
|
# Replit AI Development
|
|
# .replit
|
|
# replit.nix
|