Lumi is an AI-powered personal desktop assistant for macOS. It combines LLM chat, an agent with tool use, a code editor, a terminal, and a broad set of system and developer utilities in a plugin-driven application.
📖 English | 中文版
- Multi-provider LLM chat — 20+ built-in provider integrations, including OpenAI, Anthropic, DeepSeek, Zhipu, MiniMax, Kimi Code, Aliyun, StepFun, Xiaomi, OpenRouter, Codex, and local MLX models. Several integrations expose more than one provider implementation.
- Agent with tool use — read and edit files, run shell commands, fetch and search the web, use browser and computer-control tools, inspect images, and request user input during a task.
- Built-in code editor — project file tree, syntax highlighting, fuzzy file search, outline, references, call hierarchy, problems, language services, and Markdown preview.
- Developer tools — native terminal, Git/GitHub integration, SQLite/MySQL/PostgreSQL/Redis database tools, Docker, Homebrew, ports and hosts management, and project diagnostics.
- System utilities — clipboard history, disk and network monitoring, screen recording, OCR, display control, anti-sleep, downloads, and more.
- Project intelligence — project-scoped agent rules, skills, memory, project file search, and local vector-based RAG for code-oriented questions.
- Themes and customization — more than 100 default plugins, runtime plugin enable/disable support, and 22 built-in themes.
- Local HTTP API — the built-in web server listens on the local loopback interface and aggregates routes contributed by enabled plugins.
MCP client support is not currently shipped in the default application. The repository contains MCP-related compatibility comments, but no MCP package or stdio/SSE transport implementation yet.
Download the latest DMG from the Releases page. Release automation produces architecture-specific arm64 and x86_64 DMGs. The direct-distribution build uses Sparkle for updates; Debug builds disable app updates.
The Mac App Store distribution and the direct-distribution build can differ in entitlements and update integration. Check the release notes for the exact contents of each build.
graph TB
APP[LumiApp<br/>App entry]
FL[FactoryLumi<br/>Composition root]
K[KernelCore<br/>Provider registry + plugin lifecycle]
PF[Provider* packages<br/>Shared capability contracts]
PL[Plugin* packages<br/>Features and integrations]
UI[LumiUI<br/>Design system and themes]
APP --> FL
FL --> K
FL --> PF
FL --> PL
K --> PF
K --> PL
FL --> UI
PL --> UI
- LumiApp is the application entry point. It creates the shared kernel and hosts the main, settings, onboarding, and menu-bar surfaces.
- FactoryLumi is the composition root.
KernelFactoryassembles providers, starts the default plugin catalog, and builds the main and settings views. - KernelCore is the small generic kernel. It provides typed provider registration/resolution and plugin lifecycle management without knowing concrete application services.
- Provider packages define shared capability contracts such as conversations, LLMs, tools, projects, storage, web routes, and UI contributions.
- Plugin packages implement product features and integrations. The default catalog is defined by
DefaultPluginFactory. - LumiUI contains shared SwiftUI components and theme rendering.
Plugins conform to SuperPlugin. A plugin can participate in registration, boot, ready, enable/disable, shutdown, and unregister phases, and can contribute providers, tools, commands, views, settings, editor extensions, menus, web routes, and other application surfaces.
The main implementation layers are:
FactoryLumi— composition and dependency wiring.PluginAgentLoop— agent-loop integration.PluginToolManager— tool registration, authorization, execution, and records.KitLLMand theProviderLLMVendorspackage — shared LLM models, adapters, and provider contracts.PluginProjectRAG— project indexing and local vector search.PluginWebServer— plugin route registration for the local web server.
sequenceDiagram
participant U as User
participant S as MessageSendingProviding
participant R as AgentLoopProviding
participant L as SuperLLMProvider
participant T as ToolManagerProviding
U->>S: Send message
S->>R: Start agent turn
R->>L: Streaming request
L-->>R: Streaming response
alt Tool call requested
R->>T: Authorization and execution
T-->>R: Tool result
R->>L: Next request with tool result
L-->>R: Final response
end
R-->>U: Persist and display result
The concrete provider contracts live under Packages/Provider*; the feature implementations live under Packages/Plugin*. This keeps the agent loop, tool execution, persistence, and UI responsibilities separate.
- macOS 14.0 or later
- Xcode 26.x (the release workflow currently uses Xcode 26.3)
- Swift 6.0 or later
Some features require additional macOS permissions. For example, Computer Use and screen capture require the corresponding Accessibility, Automation, or Screen Recording permissions.
git clone https://github.com/CofficLab/Lumi.git
cd Lumi
open Lumi.xcodeprojSelect the Lumi scheme, then build and run with ⌘B / ⌘R. On first launch, configure an LLM provider and its API key in Settings.
For a reproducible local Debug build using the checked-in package resolutions:
xcodebuild \
-project Lumi.xcodeproj \
-scheme Lumi \
-configuration Debug \
-sdk macosx \
-disableAutomaticPackageResolution \
-onlyUsePackageVersionsFromResolvedFile \
buildPackage tests are run from their individual package directories, for example:
swift test --package-path Packages/FactoryLumi
swift test --package-path Packages/PluginAgentLoopThere is no root Package.swift; the application is built through Lumi.xcodeproj, while the reusable components are Swift packages under Packages/.
Issues and pull requests are welcome at CofficLab/Lumi. New features are generally implemented as Plugin* packages and composed in DefaultPluginFactory. Start with SuperPlugin, an existing plugin, and the relevant Provider* contract.
This project is licensed under the GNU General Public License v3.0. See LICENSE for details.
