Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 13 additions & 5 deletions PhoneClawGateway/Sources/PhoneClawGateway/GatewayApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ enum ProviderKind: String, Codable, CaseIterable, Identifiable {
case miniMax
case miMo
case aiHubMix
case atlasCloud
case senseAudio
case lmStudio
case liteLLM
Expand All @@ -160,7 +161,7 @@ enum ProviderKind: String, Codable, CaseIterable, Identifiable {
var id: String { rawValue }

static var catalogCases: [ProviderKind] {
[.codexCLI, .antigravityCLI, .ollama]
[.codexCLI, .antigravityCLI, .ollama, .atlasCloud]
}

static func catalogCases(in category: ProviderCategory) -> [ProviderKind] {
Expand All @@ -178,6 +179,7 @@ enum ProviderKind: String, Codable, CaseIterable, Identifiable {
case .miniMax: return "MiniMax"
case .miMo: return "MiMo"
case .aiHubMix: return "AIHubMix"
case .atlasCloud: return "Atlas Cloud"
case .senseAudio: return "SenseAudio"
case .lmStudio: return "LM Studio"
case .liteLLM: return "LiteLLM"
Expand All @@ -191,7 +193,7 @@ enum ProviderKind: String, Codable, CaseIterable, Identifiable {
switch self {
case .codexCLI, .antigravityCLI, .ollama, .lmStudio, .liteLLM, .vLLM, .echo:
return .cli
case .openai, .openRouter, .deepSeek, .miniMax, .miMo, .aiHubMix, .senseAudio, .openAICompatible:
case .openai, .openRouter, .deepSeek, .miniMax, .miMo, .aiHubMix, .atlasCloud, .senseAudio, .openAICompatible:
return .byok
}
}
Expand All @@ -207,6 +209,7 @@ enum ProviderKind: String, Codable, CaseIterable, Identifiable {
case .miniMax: return "bolt.horizontal"
case .miMo: return "m.circle"
case .aiHubMix: return "square.grid.2x2"
case .atlasCloud: return "cloud"
case .senseAudio: return "waveform"
case .lmStudio: return "desktopcomputer"
case .liteLLM: return "switch.2"
Expand All @@ -227,6 +230,7 @@ enum ProviderKind: String, Codable, CaseIterable, Identifiable {
case .miniMax: return "MiniMax API"
case .miMo: return "小米 MiMo API"
case .aiHubMix: return "AIHubMix 聚合"
case .atlasCloud: return "Atlas Cloud 聚合"
case .senseAudio: return "SenseAudio API"
case .lmStudio: return "本机 LM Studio"
case .liteLLM: return "自托管 LiteLLM"
Expand All @@ -247,6 +251,7 @@ enum ProviderKind: String, Codable, CaseIterable, Identifiable {
case .miniMax: return "minimax"
case .miMo: return "mimo"
case .aiHubMix: return "aihubmix"
case .atlasCloud: return "atlascloud"
case .senseAudio: return "senseaudio"
case .lmStudio: return "lmstudio"
case .liteLLM: return "litellm"
Expand All @@ -267,6 +272,7 @@ enum ProviderKind: String, Codable, CaseIterable, Identifiable {
case .miniMax: return "https://api.minimaxi.com/v1"
case .miMo: return "https://token-plan-cn.xiaomimimo.com/v1"
case .aiHubMix: return "https://aihubmix.com/v1"
case .atlasCloud: return "https://api.atlascloud.ai/v1"
case .senseAudio: return "https://api.senseaudio.cn"
case .lmStudio: return "http://127.0.0.1:1234"
case .liteLLM: return "http://127.0.0.1:4000"
Expand All @@ -278,21 +284,21 @@ enum ProviderKind: String, Codable, CaseIterable, Identifiable {

var needsAPIKey: Bool {
switch self {
case .openai, .openRouter, .deepSeek, .miniMax, .miMo, .aiHubMix, .senseAudio: return true
case .openai, .openRouter, .deepSeek, .miniMax, .miMo, .aiHubMix, .atlasCloud, .senseAudio: return true
case .codexCLI, .antigravityCLI, .ollama, .lmStudio, .liteLLM, .vLLM, .openAICompatible, .echo: return false
}
}

var commonlyUsesAPIKey: Bool {
switch self {
case .openai, .openRouter, .deepSeek, .miniMax, .miMo, .aiHubMix, .senseAudio, .liteLLM, .openAICompatible: return true
case .openai, .openRouter, .deepSeek, .miniMax, .miMo, .aiHubMix, .atlasCloud, .senseAudio, .liteLLM, .openAICompatible: return true
case .codexCLI, .antigravityCLI, .ollama, .lmStudio, .vLLM, .echo: return false
}
}

var isMainRuntimeSource: Bool {
switch self {
case .codexCLI, .antigravityCLI, .ollama: return true
case .codexCLI, .antigravityCLI, .ollama, .atlasCloud: return true
default: return false
}
}
Expand Down Expand Up @@ -328,6 +334,8 @@ enum ProviderKind: String, Codable, CaseIterable, Identifiable {
return "mimo-v2.5-pro"
case .aiHubMix:
return "gpt-5.5, gpt-4o-mini, claude-sonnet-4-5, gemini-2.0-flash, deepseek-chat"
case .atlasCloud:
return "deepseek-ai/deepseek-v4-pro, anthropic/claude-sonnet-4.6, qwen/qwen3-coder-next, openai/gpt-5.5"
case .senseAudio:
return "senseaudio-s2, senseaudio-s2-flash, deepseek-v4-flash"
case .lmStudio, .liteLLM, .vLLM, .openAICompatible:
Expand Down
30 changes: 28 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,31 @@

</div>

<p align="center">
<a href="https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=PhoneClaw">
<img src="./assets/atlas-cloud-logo.png" alt="Atlas Cloud" width="200">
</a>
</p>

> 🎁 **[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=PhoneClaw)** — 当本机模型不够用时,可在 Mac 端 PhoneClaw Gateway 里把 Atlas Cloud 作为云端 LLM 上游:OpenAI 兼容接口,一个 key 接 59 个模型(Claude / GPT / Qwen / DeepSeek …),手机端照常使用。 — [coding plan](https://www.atlascloud.ai/console/coding-plan)

<details>
<summary>All Atlas Cloud LLM models (59)</summary>

- Anthropic: `anthropic/claude-haiku-4.5-20251001`, `anthropic/claude-opus-4.8`, `anthropic/claude-sonnet-4.6`
- OpenAI: `openai/gpt-5.4`, `openai/gpt-5.5`
- Google Gemini: `google/gemini-3.1-flash-lite`, `google/gemini-3.1-pro-preview`, `google/gemini-3.5-flash`
- Qwen: `qwen/qwen2.5-7b-instruct`, `Qwen/Qwen3-235B-A22B-Instruct-2507`, `qwen/qwen3-235b-a22b-thinking-2507`, `qwen/qwen3-30b-a3b`, `Qwen/Qwen3-30B-A3B-Instruct-2507`, `qwen/qwen3-30b-a3b-thinking-2507`, `qwen/qwen3-32b`, `qwen/qwen3-8b`, `Qwen/Qwen3-Coder`, `qwen/qwen3-coder-next`, `qwen/qwen3-max-2026-01-23`, `Qwen/Qwen3-Next-80B-A3B-Instruct`, `Qwen/Qwen3-Next-80B-A3B-Thinking`, `Qwen/Qwen3-VL-235B-A22B-Instruct`, `qwen/qwen3-vl-235b-a22b-thinking`, `qwen/qwen3-vl-30b-a3b-instruct`, `qwen/qwen3-vl-30b-a3b-thinking`, `qwen/qwen3-vl-8b-instruct`, `qwen/qwen3.5-122b-a10b`, `qwen/qwen3.5-27b`, `qwen/qwen3.5-35b-a3b`, `qwen/qwen3.5-397b-a17b`, `qwen/qwen3.6-35b-a3b`, `qwen/qwen3.6-plus`
- DeepSeek: `deepseek-ai/deepseek-ocr`, `deepseek-ai/deepseek-r1-0528`, `deepseek-ai/DeepSeek-V3-0324`, `deepseek-ai/DeepSeek-V3.1`, `deepseek-ai/DeepSeek-V3.1-Terminus`, `deepseek-ai/deepseek-v3.2`, `deepseek-ai/DeepSeek-V3.2-Exp`, `deepseek-ai/deepseek-v4-flash`, `deepseek-ai/deepseek-v4-pro`
- Kimi: `moonshotai/Kimi-K2-Instruct`, `moonshotai/Kimi-K2-Instruct-0905`, `moonshotai/Kimi-K2-Thinking`, `moonshotai/kimi-k2.5`, `moonshotai/kimi-k2.6`
- GLM: `zai-org/GLM-4.6`, `zai-org/glm-4.7`, `zai-org/glm-5`, `zai-org/glm-5-turbo`, `zai-org/glm-5.1`, `zai-org/glm-5v-turbo`
- MiniMax: `MiniMaxAI/MiniMax-M2`, `minimaxai/minimax-m2.1`, `minimaxai/minimax-m2.5`, `minimaxai/minimax-m2.7`
- xAI: `xai/grok-4.3`
- KAT: `kwaipilot/kat-coder-pro-v2`
- Other: `owl`

</details>

<div align="center">

[核心能力](#核心能力) · [内置 Skill](#内置-skill-示例) · [技术文章](#技术文章) · [快速开始](#快速开始) · [Mac 远程](#7-使用-mac-客户端远程推理) · [自定义 Skill](#自定义-skill) · [常见问题](#常见问题) · [后续计划](#后续计划)
Expand Down Expand Up @@ -335,14 +360,15 @@ open PhoneClawGateway.app
**配置 Mac 端运行源**

1. 打开 `PhoneClawGateway.app`
2. 在主窗口里选择运行源:Ollama、Codex CLI 或 Antigravity CLI
2. 在主窗口里选择运行源:Ollama、Codex CLI、Antigravity CLI 或 Atlas Cloud
3. 如果使用 Ollama,先安装并启动 Ollama,再下载一个模型,例如:

```bash
ollama pull gemma3:4b
```

4. 回到 Gateway 点扫描,确认模型出现在列表里
4. 如果使用 **Atlas Cloud**(OpenAI 兼容的云端上游,无需本机大模型):在运行源里选「Atlas Cloud」,API 地址已预填 `https://api.atlascloud.ai/v1`,填入你的 Atlas Cloud API Key([控制台获取](https://www.atlascloud.ai/console)),模型列表已预填 `deepseek-ai/deepseek-v4-pro` 等,可按需增删
5. 回到 Gateway 点扫描,确认模型出现在列表里

**在 iPhone 上配对并使用**

Expand Down
30 changes: 28 additions & 2 deletions README_EN.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,31 @@ A local AI Agent for iPhone. Offline. Private. Native.

</div>

<p align="center">
<a href="https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=PhoneClaw">
<img src="./assets/atlas-cloud-logo.png" alt="Atlas Cloud" width="200">
</a>
</p>

> 🎁 **[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=PhoneClaw)** — when on-device models aren't enough, plug Atlas Cloud into the Mac-side PhoneClaw Gateway as a cloud LLM upstream: OpenAI-compatible, one key for 59 models (Claude / GPT / Qwen / DeepSeek …), while the phone keeps its native experience. — [coding plan](https://www.atlascloud.ai/console/coding-plan)

<details>
<summary>All Atlas Cloud LLM models (59)</summary>

- Anthropic: `anthropic/claude-haiku-4.5-20251001`, `anthropic/claude-opus-4.8`, `anthropic/claude-sonnet-4.6`
- OpenAI: `openai/gpt-5.4`, `openai/gpt-5.5`
- Google Gemini: `google/gemini-3.1-flash-lite`, `google/gemini-3.1-pro-preview`, `google/gemini-3.5-flash`
- Qwen: `qwen/qwen2.5-7b-instruct`, `Qwen/Qwen3-235B-A22B-Instruct-2507`, `qwen/qwen3-235b-a22b-thinking-2507`, `qwen/qwen3-30b-a3b`, `Qwen/Qwen3-30B-A3B-Instruct-2507`, `qwen/qwen3-30b-a3b-thinking-2507`, `qwen/qwen3-32b`, `qwen/qwen3-8b`, `Qwen/Qwen3-Coder`, `qwen/qwen3-coder-next`, `qwen/qwen3-max-2026-01-23`, `Qwen/Qwen3-Next-80B-A3B-Instruct`, `Qwen/Qwen3-Next-80B-A3B-Thinking`, `Qwen/Qwen3-VL-235B-A22B-Instruct`, `qwen/qwen3-vl-235b-a22b-thinking`, `qwen/qwen3-vl-30b-a3b-instruct`, `qwen/qwen3-vl-30b-a3b-thinking`, `qwen/qwen3-vl-8b-instruct`, `qwen/qwen3.5-122b-a10b`, `qwen/qwen3.5-27b`, `qwen/qwen3.5-35b-a3b`, `qwen/qwen3.5-397b-a17b`, `qwen/qwen3.6-35b-a3b`, `qwen/qwen3.6-plus`
- DeepSeek: `deepseek-ai/deepseek-ocr`, `deepseek-ai/deepseek-r1-0528`, `deepseek-ai/DeepSeek-V3-0324`, `deepseek-ai/DeepSeek-V3.1`, `deepseek-ai/DeepSeek-V3.1-Terminus`, `deepseek-ai/deepseek-v3.2`, `deepseek-ai/DeepSeek-V3.2-Exp`, `deepseek-ai/deepseek-v4-flash`, `deepseek-ai/deepseek-v4-pro`
- Kimi: `moonshotai/Kimi-K2-Instruct`, `moonshotai/Kimi-K2-Instruct-0905`, `moonshotai/Kimi-K2-Thinking`, `moonshotai/kimi-k2.5`, `moonshotai/kimi-k2.6`
- GLM: `zai-org/GLM-4.6`, `zai-org/glm-4.7`, `zai-org/glm-5`, `zai-org/glm-5-turbo`, `zai-org/glm-5.1`, `zai-org/glm-5v-turbo`
- MiniMax: `MiniMaxAI/MiniMax-M2`, `minimaxai/minimax-m2.1`, `minimaxai/minimax-m2.5`, `minimaxai/minimax-m2.7`
- xAI: `xai/grok-4.3`
- KAT: `kwaipilot/kat-coder-pro-v2`
- Other: `owl`

</details>

<div align="center">

[Core Features](#core-features) · [Built-in Skills](#built-in-skill-examples) · [Technical Notes](#technical-notes) · [Quick Start](#quick-start) · [Mac Remote](#7-use-the-mac-client-for-remote-inference) · [Custom Skills](#custom-skills) · [FAQ](#faq) · [Roadmap](#roadmap)
Expand Down Expand Up @@ -363,14 +388,15 @@ The source-built app also needs macOS Local Network permission.
**Configure the Mac runtime source**

1. Open `PhoneClawGateway.app`
2. Choose a runtime source in the main window: Ollama, Codex CLI, or Antigravity CLI
2. Choose a runtime source in the main window: Ollama, Codex CLI, Antigravity CLI, or Atlas Cloud
3. If you use Ollama, install and start Ollama first, then pull a model, for example:

```bash
ollama pull gemma3:4b
```

4. Return to Gateway, scan, and confirm that the model appears in the list
4. If you use **Atlas Cloud** (an OpenAI-compatible cloud upstream, no local large model required): pick "Atlas Cloud" as the runtime source — the API URL is prefilled as `https://api.atlascloud.ai/v1`, paste your Atlas Cloud API key ([get one in the console](https://www.atlascloud.ai/console)), and the model list comes prefilled with `deepseek-ai/deepseek-v4-pro` and more, which you can edit as needed
5. Return to Gateway, scan, and confirm that the model appears in the list

**Pair from the iPhone**

Expand Down
Binary file added assets/atlas-cloud-logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.