Simpleton is a from-scratch, native AppKit + SwiftUI terminal for macOS. It pairs a GPU-friendly SwiftTerm core with native window tabbing, recursive split panes, first-class SSH, and pluggable AI integrations — with none of the Electron weight.
⚠️ Alpha software. Simpleton is under active development at version0.1.1. Expect rough edges and breaking changes. See Project status before you rely on it.
| 🖥️ Native terminal | SwiftTerm-backed emulator with true-color, mouse reporting, and a configurable scrollback buffer. |
| 🗂️ Tabs & splits | Native macOS window tabbing plus arbitrarily nested split panes (split right / split down, focus by direction, zoom a pane). |
| 🔐 SSH built in | Connection bookmarks with frecency ranking, one-click ~/.ssh/config import, keepalive, and auto-reconnect. |
| 🧭 Connection sidebar | Pinned + recent connections, live search, and SSH-config hosts — one click to connect in the active tab. |
| 🤖 AI integrations | Bring your own provider — Claude, OpenAI, OpenRouter, Groq, Together, Mistral, DeepSeek, or local Ollama — with live model selection, per-tab chat, skills, and MCP tools, gated by a command classifier. |
| 🧩 Panels | Dockable side panels: command history, environment, processes, Docker, notes, SSH tunnels, and more. |
| 🎨 Native theming | Dark / Light / Auto appearance that follows macOS, plus a macOS-integrated accent color picker (Match System + the eight system accents) applied across the whole UI. |
| 🔌 Plugins | A plugin manager with lifecycle events and user scripts (script plugins + HTML side panels). |
| ⚙️ Deep preferences | General, Appearance, Terminal, SSH, Keys, Plugins, AI, Skills, and Profiles — in a resizable window. |
| 🔄 Auto-update | Sparkle-based update channel (disabled in dev builds). |
Simpleton is provider-agnostic — bring your own key, or run fully local. Choose a provider and model right in Preferences → AI, with the model list fetched live from the provider:
| Provider | Notes |
|---|---|
| Anthropic (Claude) | |
| OpenAI (GPT) | |
| OpenRouter | hundreds of models behind one key |
| Groq | very fast inference |
| Together AI · Mistral · DeepSeek | |
| Ollama | fully local — nothing leaves your machine |
| Custom | any OpenAI-compatible endpoint |
Keys are stored in the macOS Keychain, and a command classifier gates destructive actions the assistant proposes.
- macOS 14 (Sonoma) or later
- Swift 5.9+ / Xcode 15+ (to build from source)
-
Download the latest
Simpleton-*.zipfrom the Releases page. -
Unzip and drag
Simpleton.appto/Applications. -
Alpha builds are ad-hoc signed (not notarized), so the first launch needs a nudge past Gatekeeper:
xattr -dr com.apple.quarantine /Applications/Simpleton.app
…or right-click the app → Open → Open.
git clone https://github.com/bbjansen/simpleton.git
cd simpleton
# Build and run the app directly
swift run Simpleton
# …or produce a launchable, self-contained .app bundle
bash scripts/e2e/make-app-bundle.sh release
open .build/Simpleton.appDev signing (optional). Running the bundle repeatedly can trigger Keychain prompts because the code signature changes each build. Create a stable local identity once and sign after each build:
bash scripts/dev/make-dev-cert.sh # one time: creates a "Simpleton Dev" self-signed identity swift build && bash scripts/dev/sign-dev.sh
Simpleton ships a dependency-free test runner (CoreChecks) so the core logic can be verified
without Xcode or a GUI — ideal for CI:
swift run CoreChecksIt exercises config, session state, split-tree, SSH-config parsing, bookmarks, frecency, fuzzy matching, the command classifier, and more (250+ checks). CI runs it on every push and pull request.
Simpleton is a Swift Package with a clean split between reusable logic and the AppKit shell:
Sources/
├── SimpletonCore/ # Pure, testable logic — models, stores, parsers (no AppKit)
└── Simpleton/ # AppKit + SwiftUI app — windows, panes, panels, AI, preferences
Tests/
└── CoreChecks/ # No-Xcode test runner over SimpletonCore
scripts/
├── dev/ # Local dev-signing helpers
└── e2e/ # App-bundle assembly + accessibility-driven UI smoke tests
Keeping the domain logic in SimpletonCore (free of UI frameworks) is what makes the headless
CoreChecks runner — and fast CI — possible.
Settings live at ~/Library/Application Support/Simpleton/config.json and are editable from the
in-app Preferences window (⌘,). Connection bookmarks and plugins live alongside it.
- Re-enable session restore behind a non-blocking prompt
- Custom, user-editable key bindings
- Notarized, signed release builds
- Profiles per connection (theme, shell, environment)
- Richer AI tool/skill catalog
Simpleton is alpha. The core terminal, tabs, splits, SSH, panels, and preferences are usable day-to-day, but APIs, config schema, and UI are still moving. Session restore is temporarily disabled while it is reworked. Feedback and issues are very welcome.
Contributions are welcome! Please read CONTRIBUTING.md for the dev setup, branch/commit conventions, and how to run the checks before opening a pull request.
Released under the MIT License.




