A native macOS app for managing your shell configuration through a GUI. No more hunting through dotfiles — edit your aliases, PATH, SSH keys, Git config, and more from a single window.
ShellCraft reads your actual config files (.zshrc, .gitconfig, SSH configs, etc.), lets you edit them through a structured UI, and writes changes back safely — preserving comments, formatting, and anything it doesn't understand.
| Section | What It Manages |
|---|---|
| Aliases | Shell aliases from .zshrc |
| Functions | Shell functions from .zshrc |
| PATH | $PATH entries with drag-to-reorder |
| Environment | Environment variables from .zshrc |
| Oh My Zsh | Themes, plugins, and settings |
| Git | .gitconfig and global .gitignore |
| SSH | SSH config hosts, key generation, key management |
| Secrets | macOS Keychain secrets with encrypted export/import |
| Homebrew | Installed packages and casks |
| Claude Code | settings.json, permissions, hooks, plugins, MCP servers |
| Tools | Custom CLI tools |
Every section supports import/export and shows a save bar when you have unsaved changes.
ShellCraft manages these tools when they're installed. Each section shows a helpful empty state if the tool is missing — nothing is required.
| Tool | Sections It Unlocks | Install |
|---|---|---|
| Oh My Zsh | Themes, plugins, Oh My Zsh settings | sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" |
| Homebrew | Package and cask management | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
| Claude Code | Settings, permissions, hooks, plugins, MCP servers | npm install -g @anthropic-ai/claude-code |
| Git | Git config and gitignore | Included with Xcode Command Line Tools |
The core sections (Aliases, Functions, PATH, Environment, SSH, Secrets) work with just a default macOS install.
- macOS 26.0 (Tahoe) or later
- Xcode 17+
- XcodeGen (
brew install xcodegen)
xcodegen generate
xcodebuild -project ShellCraft.xcodeproj -scheme ShellCraft -configuration Debug \
-derivedDataPath ~/Library/Developer/Xcode/DerivedData/ShellCraft build
open ~/Library/Developer/Xcode/DerivedData/ShellCraft/Build/Products/Debug/ShellCraft.appImportant: After running xcodegen generate, apply the icon fix:
sed -i '' 's|lastKnownFileType = folder; name = ShellCraft.icon; path = ShellCraft/ShellCraft.icon; sourceTree = SOURCE_ROOT;|lastKnownFileType = folder.iconcomposer.icon; path = ShellCraft.icon; sourceTree = "<group>";|' ShellCraft.xcodeproj/project.pbxprojXcodeGen doesn't understand .icon bundles (Icon Composer format), so this sed command fixes the file type in the generated project.
- MVVM with
@MainActor @ObservableViewModels - Pure SwiftUI + AppKit — no third-party dependencies
- Round-trip safe writes — config files are parsed into memory; only targeted lines are modified on save
- XcodeGen —
project.ymlis the source of truth, never edit.xcodeprojdirectly
See CLAUDE.md for detailed architecture docs, conventions, and contributor instructions.
Why not just edit the files directly? You can, and ShellCraft will pick up external changes. But a GUI makes it easier to discover what's configured, avoid syntax errors, and manage things like SSH keys and Keychain secrets that are awkward from the terminal.
Why no SPM dependencies? Everything ShellCraft needs is in the platform SDKs. No dependency management, no version conflicts, no supply chain risk.
Why XcodeGen? The .xcodeproj format is hostile to version control. project.yml is human-readable and merge-friendly.
MIT — see LICENSE for details.