Sakichan

opencode 编码 agent 的秘书前端
原生 Android 应用。手机是遥控器,PC 是工作台,秘书是翻译官。
理解意图 · 派活 · 确认权限 · 总结结果
Kotlin Compose Kanesumi mDNS SSE GPL-3.0

协作链路

用户在手机上与「秘书」对话,秘书理解意图后,通过局域网里的 opencode server 在 PC 上派活、确认权限、总结结果。

用户(手机)
Sakichan SE
秘书 LLM
DeepSeek V4 Flash
opencode server
PC · headless

核心特性

mDNS 自动发现

启动即扫描局域网内 opencode 机器,多机器列表,跨平台标准 mDNS 协议。

机器 · 项目 · session 树

抽屉按「机器 → 项目目录 → session」组织,随时切换、新建会话。

Function calling

秘书调用 run_opencode_task,不依赖脆弱的文本标记。

实时事件流

opencode 的 token 输出、工具调用、权限请求经 SSE 实时上屏。

权限回调

手机上一键 approve / deny / 总是允许,回传 opencode。

加密存储

API key 用 EncryptedSharedPreferences 加密保存。

角色分工

角色 模型 / 引擎 用途
秘书主脑 DeepSeek V4 Flash 理解意图、生成 run_opencode_task 指令、总结 opencode 输出
图像理解 SenseNova Flash-Lite 两阶段管线:Flash-Lite 描述图片 → DeepSeek 回答
编码执行 opencode server 实际编码 agent,读写文件、跑命令、返回 diff
权限批准 用户(手机上) opencode 请求改文件/跑命令时,手机弹出 approve / deny

三代演化 · 死了两次,魂却留了下来

Sakichan 并非一次成型。它死了两次——但每一代留下的"魂"都被下一代吸收,最终熔出一个真正有用的东西。

世代 形态 遗产 结局
初代 Saki Rust CLI · 角色驱动本地编程助手(十阶段工作流 + 五大插槽) 代理编排思想——把模型编排成团队,后来演进为秘书的双层思考 agent ✕ 死于 opencode / Claude Code——它们已经做得更好
二代 Saki Rust 三 crate(core + CLI + GTK4)· 泛化 AI 聊天客户端 确立 Metro 设计语言 + 墨绿主题 #1C5035(思考块折叠 / Markdown / 流式输出的雏形) ✕ 死于定位不明——一个没有杀手锏的聊天客户端
三代 · Sakichan SE Android · Kanesumi UI · opencode 秘书前端 初代的编排之魂 + 二代的 UI 与墨绿之魂,熔进"手机遥控 · PC 工作台"的秘书定位 ● 活着——两个前代留下的东西都在这里有用

技术栈

UI 基于 Kanesumi(includeBuild 组合构建接入),墨绿主题 #1C5035;网络 OkHttp + okhttp-sse;DI Koin;存储 DataStore + EncryptedSharedPreferences;minSdk 26。

AI 应提供用户尚未想到的连接

目标非模仿,而是陪伴与本地优先之实用工具。

AI 应提供用户尚未想到的连接,而非放大用户原有观点。