A powerful native LLM client for iOS & Apple Watch. Supports OpenAI/Claude/Gemini, featuring local RAG memory, Model Context Protocol (MCP) tools, Siri Shortcuts, and cross-device sync. Built with Swift.
# Add to your Claude Code skills
git clone https://github.com/Eric-Terminal/ETOS-LLM-StudioGuides for using ai agents skills like ETOS-LLM-Studio.
一个运行在 iOS 和 Apple Watch 上的原生 AI 客户端。支持 OpenAI、Anthropic Claude、Google Gemini 等多个模型提供商,内置 MCP 工具调用、本地 RAG 记忆、世界书、每日脉冲、Siri 快捷指令与双端同步。
English | 繁體中文 | 日本語 | Русский
| | | |:---:|:---:| | | |
在学校的日子挺无聊的,平时又总会冒出很多想问 AI 的问题。当时我嫌 App Store 上的 AI 应用要么贵得离谱,要么功能太残废(尤其是手表端),索性就自己动手搓了一个。
从最初那个只有 1,800 行代码、API Key 还要硬编码的简陋版本,到现在 547 个 Swift 源文件、145,284 行 Swift 代码(按 cloc . --timeout=0 统计,仅计算 Swift,不把 VitePress 文档站依赖算进来)的工程,它确实已经长大了不少。虽然名字叫 “ETOS LLM Studio” 听着有点唬人,但它本质上还是我拿来探索大模型应用边界的试验场。
现在它已经不只是一个手表端 App 了:我把 iOS 端也一点点补成了完整版本,方便在手机上管理模型、工具、记忆、世界书和每日脉冲;两端数据还能通过内置同步引擎自动互通。
因为我平时主要还是用 Mac 和 Watch,iPhone 端偶尔会有一些还在继续打磨的边角,不过我会继续慢慢补齐。
No comments yet. Be the first to share your thoughts!
SFSpeechRecognizer 流式识别,录音面板支持实时转写并可直接回填输入框。character_book 等常见世界书格式。说实话,我最开始是想做免费软件的。 但 Apple Developer Program 每年 $99 的费用,对我一个学生来说确实有点吃力。
后来有位投资人帮我垫付了这笔钱,代价是我需要通过软件收费来偿还这笔投资(而且还要分成给他)。所以 App Store 版本象征性地收了一点费用,这就当是大家众筹帮我还债,顺便买个“不用每七天重签一次”的便利服务。
但是,开源是我的底线。
所以现在的规则很简单:
技术本该共享,我不希望因为几十块钱的门槛,挡住了同样对代码感兴趣的你。
GRDB.swift、swift-markdown-ui、SwiftMath、ZIPFoundation,并包含其传递依赖 networkimage、swift-cmark)项目采用双层结构:平台无关的 Shared 框架 + 各平台独立的视图层。最近一轮重构已经把原先几个超大 Swift 文件拆成按职责分组的目录;当前最大 Swift 文件约 766 行,Shared / iOS / watchOS / 测试代码都更容易局部维护。
Shared/Shared/ ← 平台无关业务逻辑(240 个 Swift 源文件)
├── AppTool/ ← 本地工具、ask_user_input、SQLite 与沙盒文件工具
├── Attachments/ ← 文件附件文本抽取
├── Chat/ ← 聊天模型、消息版本、导出、渲染状态
│ └── Service/ ← ChatService 请求编排、响应解析、重试、工具、记忆与世界书注入
├── ConfigLoader/ ← Provider 配置、SQLite 存储、背景与一次性下载状态
├── Core/ ← 核心模型、JSONValue、请求体控制与共享基础设施
├── DailyPulse/ ← 每日脉冲生成、筛选、投递、反馈与任务数据
├── Feedback/ ← 应用内反馈助手、环境采集、DTO 与本地存储
├── Font/ ← 自定义字体库、字体路由与回退范围
├── LocalDebugServer/ ← 局域网调试客户端、Web 控制台、文件命令与请求捕获
├── MCP/ ← MCP 客户端、服务器存储、JSON-RPC、Streamable HTTP / SSE 传输
├── Memory/ + SimilaritySearch/ ← 本地 RAG、嵌入、分块、SQLite 向量检索
├── Persistence/ ← GRDB 主库/辅助库、迁移、启动备份、媒体与文件存储
├── Providers/ ← Provider 模型、代理配置与 OpenAI / Anthropic / Gemini 适配器
├── Shortcuts/ ← Siri Shortcuts、URL Router、导入与执行中继
├── Storage/ ← 沙盒文件浏览、存储统计、缓存清理
├── Sync/ ← WatchConnectivity / CloudKit / Manifest / Delta / ETOS 包与第三方导入
├── System/ ← 全局提示词、通知、公告、日志、语音识别、OCR
├── TTS/ ← 系统 / 云端朗读、队列播放、配置与预设
├── UsageAnalytics/ ← 用量事件、统计仪表盘与缓存命中率
└── Worldbook/ ← 世界书模型、导入导出、SQLite 存储与触发引擎
ETOS LLM Studio/ETOS LLM Studio iOS App/ ← iOS 视图层(120 个 Swift 源文件)
ETOS LLM Studio/ETOS LLM Studio Watch App/ ← watchOS 视图层(99 个 Swift 源文件)
Shared/SharedTests/ ← Shared 层测试(86 个 Swift 源文件)
数据流:View → ChatViewModel → ChatService.shared → Provider Adapter → LLM API,会话、工具、记忆、世界书、用量统计与同步数据经由 Shared 层服务和 GRDB/SQLite 存储统一治理。
如果你决定自己动手:
git clone https://github.com/Eric-Terminal/ETOS-LLM-Studio.git
ETOS LLM Studio.xcworkspace(注意是 workspace 不是 xcodeproj)。
首次打开会自动解析并拉取 Swift Package 依赖。ETOS LLM Studio Watch App 或 ETOS LLM Studio iOS App Target,连上设备(或模拟器),Command + R 即可。Documents/Providers/ 目录下(真的有人会想在 Apple Watch 上面戳 API Key 进去吗)。本次 README 修订于 2026 年 5 月 5 日(参考 16d70fcc..0b42e817 提交范围)。项目更新频率比较高,如果你发现 README 跟不上代码,欢迎直接翻提交记录。