getCourage is a macOS-native workspace for solo professionals who want a small council of AI advisors instead of a single chat thread.
You create a Cowork Space, hire AI Personas with distinct roles, and bring them into either an always-open Lounge or a structured Meeting Room. In meetings, The Facilitator coordinates who should speak next, keeps the session focused, and tracks cost.
The product is intentionally narrow: macOS first, local-first, BYOK, no cloud account, no engagement mechanics, no social feed, no agent marketplace.
This repository is early alpha software. The app scaffold, onboarding flow, Lounge, Meeting Room UI, local persistence, seed catalogs, provider clients, tool plumbing, memory services, and tests are present, but the product is not yet a polished end-user release.
Use it as a working codebase, not as a stable packaged app.
- Creates persistent Cowork Spaces for different areas of work.
- Seeds a library of advisor archetypes that can become hired Personas.
- Supports Meeting Rooms with up to four attendees and a facilitator-controlled turn order.
- Stores application data locally in SQLite through GRDB.
- Stores API keys in the macOS Keychain.
- Supports per-persona provider and model assignment.
- Includes clients for Anthropic, OpenAI, Ollama, and OpenAI-compatible APIs.
- Tracks token usage and estimated cost.
- Includes local Dossier/memory primitives, rolling summaries, and export services.
- Provides tool plumbing for URL fetch, file read, memory search, and provider-native web search where supported.
- Not a ChatGPT clone.
- Not a cloud collaboration product.
- Not a cross-platform app.
- Not an autonomous agent platform.
- Not a hosted service with synced user data.
- macOS 14.6 or newer for the app target.
- Xcode 16 or newer recommended.
- Swift Package Manager access to fetch dependencies.
- Optional provider credentials for live model calls:
- Anthropic API key
- OpenAI API key
- Ollama running locally at
http://localhost:11434
Open the project in Xcode:
open getCourage.xcodeprojOr build from the command line:
xcodebuild -project getCourage.xcodeproj -scheme getCourage -destination 'platform=macOS' buildRun the test suite from Xcode, or from the command line:
xcodebuild -project getCourage.xcodeproj -scheme getCourage -destination 'platform=macOS' testThe repository includes domain, infrastructure, integration, snapshot, and UI test targets.
getCourage stores its local database at:
~/Library/Application Support/getCourage/courage.sqlite
API keys are stored in the macOS Keychain under the service:
dev.getcourage.api-keys
The app seeds model pricing, model context metadata, and archetypes from JSON files bundled in getCourage/Resources/Seeds/.
The codebase is split into a few explicit layers:
getCourage/Domaincontains core models, values, protocols, and errors.getCourage/Infrastructurecontains persistence, LLM clients, memory, orchestration, governance, tools, prompts, and keychain access.getCourage/Featurescontains SwiftUI product surfaces such as onboarding, Lounge, Meeting Room, Dossier, Persona editor, tools, and settings.getCourage/Designcontains visual tokens, material components, colors, motion, and glyph mapping.getCourageTestsandgetCourageUITestscontain automated coverage for the app layers.
The main app entry point is getCourage/getCourageApp.swift; app routing and service composition live in getCourage/AppState.swift.
The current UI direction is light macOS Liquid Glass: translucent panels, restrained motion, SF Pro for interface text, Source Serif 4 for ritual surfaces, and abstract geometric glyphs instead of faces or avatars.
Design tokens and component rules live in DESIGN.md.
The Xcode project uses Swift Package Manager dependencies including:
- GRDB for SQLite persistence.
- KeychainAccess for secure API key storage.
- SQLiteVec for vector-search infrastructure.
- swift-markdown-ui for Markdown rendering.
- swift-snapshot-testing for snapshot coverage.
This project is still moving quickly. Before changing public behavior, keep the following product constraints intact:
- The product name is always
getCourage. - User data stays local by default.
- API keys are user-owned and stored locally.
- Personas can use different providers and models in the same meeting.
- Cost visibility is part of the product surface, not an implementation detail.
- Memory should be explicit, reviewable, and deletable.
getCourage is licensed under the GNU Affero General Public License v3.0. See LICENSE.