macOS · Linux · Windows — v0.2.0

散落的仓库,
收成一个舰队

Moo Fleet 是本地优先的多仓库 Git 工作台。它把一台电脑里的 Git 仓库和本机 Claude / Codex 会话收进同一张清单,日常操作按安全边界执行:不托管代码,不替代 IDE, 也不替你做冲突决策。

  • 本地服务只监听 127.0.0.1
  • Pull 仅 fast-forward · Push 永不 force
  • macOS 签名 + 公证 + 装订
  • 五套深色主题
Moo Fleet 仓库工作台:左侧仓库清单,显示每个仓库的分支、改动、领先落后、Stash 与最近提交

界面截图由隔离夹具生成,仓库名与提交均为虚构数据。

25ms

暂存一批文件(0.1.51 为 46–64 ms)

17ms

取消暂存(原 37–39 ms)

10ms

读取文件清单(原约 20 ms)

95ms

仪表盘全量扫描(1.5 s 内复用 0.7–1.3 ms)

0.2.0 发版实测 · 20 仓合成舰队 · 本机 macOS · 数字为端到端请求耗时

Why another Git UI

它回答的不是「这个仓库怎么操作」

常规客户端服务单个仓库。Fleet 先回答另一个问题:这台电脑上,还有哪些仓库需要处理。

清单优先,不是窗口优先

一次看到全部仓库的分支、Dirty、Staged、Ahead / Behind、Stash、最近 Tag 与提交。冲突、进行中操作、分叉、有改动、有远端差异的仓库默认排在最前。

安全边界写在代码里

Pull 只允许 fast-forward;Push 先 Fetch、复核远端并用明确 refspec,永不 force。每次写操作前重新取状态,防止过期快照落到真实的索引和工作区。

AI 会话也在这张清单里

自动发现本机 Claude / Codex 会话,用自己的私有 Git 仓跨电脑备份。本机 JSONL 是真相源,只有真正分叉或跨机删除时才需要你决定。

Fleet

一台电脑,一张可处理清单

扫描、分组、批量执行,都围绕「今天要先动哪个仓库」展开。

仓库工作台,包含筛选、批量操作与仓库状态列

先看清状态,再决定动作

  • 从受信任根目录扫描并添加 Git worktree,也可预览导入根目录内的 PACKAGES.md;从列表移出仓库只改本机配置,不删磁盘目录。
  • 置顶、搜索、分组,以及「今日待处理 / 需要关注 / 工作区改动 / 待推送 / 待拉取 / 久未 Fetch」等筛选与多种排序。
  • 单仓或批量 Fetch / Pull / Push:范围可手选,也可直接采用当前筛选结果;单仓失败不会中断其他仓库。
  • 缺失路径仍留在列表但不计入仓库总数,确认目录消失后才由你手动移出。
  • 顶栏常驻「检查更新」,按上游 Release 跳转的 tag 比较主次修订号,不跟着页面轮询。

Workbench

三栏详情:看清再动手

文件、Diff、分支和提交在同一个视图里对齐,不需要来回切窗口。

勾选即暂存,精确到 Hunk

  • 左侧导航与本地 / 远端分支,中间文件清单,右侧 Diff;分栏可拖动,打开详情自动预览首个变化文件。
  • 勾选文件直接纳入提交,半选保留部分暂存;也能按 Hunk 把改动块加入或移出暂存区。
  • 未跟踪文件同样有完整的「全新增」预览;双行号与 Git 红绿语义保持不变。
  • 冲突时预览基线与双方固定内容,采用前复核 index、HEAD 与操作快照,过期预览会被拒绝。
  • 丢弃改动前重新校验文件身份:仍存在的已跟踪文件先进入系统废纸篓,再恢复 Git 版本。
  • 0.2.0:勾选一批从未提交的新文件后可整批删除,取消暂存 + 移入废纸篓一次完成;勾选里混入已跟踪文件时不给这个入口。
⌘ K搜索当前页 R刷新 H操作记录 JK仓库行 Enter打开详情 Esc关闭 ?快捷键帮助 ⌘ 0显示主窗口
仓库详情三栏工作台:左栏分支、中栏变化文件、右栏带语法染色的 Diff

History & Inspection

历史和分支,都能当场对账

只读的部分做到能查清,会改变仓库状态的动作才需要确认。

全仓历史

汇集本地分支、远端跟踪分支、Tag 与 HEAD 可达提交,也能单独浏览某个分支。分页固定读取起点,翻页不会漂移。

服务端搜索

按提交消息、作者姓名 / 邮箱和 SHA 前缀搜索完整范围,而不是只过滤当前页。

分支对比与待拉取

两个本地或远端跟踪分支对比来源独有提交、累计端点差异与单条提交;待拉取清单基于最近 Fetch 的本地引用,不自动 Pull。

文件历史与 Blame

从工作区或提交进入单文件历史,跨重命名查看当时路径与 Diff;Blame 显示行归属,点击作者或 SHA 可追溯。

合并与冲突

预览来源、目标与待合入提交后确认;默认快进,也可始终生成合并提交。冲突回到工作区处理,不自动切换、Push 或删除来源。

Reflog、Tag 与 Stash

Reflog 阅读 HEAD 或本地分支的引用移动,仅只读不回滚;Tag 可建轻量 / 附注并推送或删除远端;Stash 支持查看、应用、pop 与永久删除。

AI Sessions

Claude / Codex 会话,也有异地副本

不是云端同步:用你自己管理的私有 Git 仓库,把本机会话备份到另一台电脑。

AI 会话页面:左侧会话列表,右侧会话消息与恢复命令

本机 JSONL 是真相,备份是派生物

  • 自动发现本机 Claude / Codex JSONL 会话,可搜索、筛选、排序,查看最近 200 条可读消息;多选后可移入系统废纸篓。
  • 内容相同或只有严格前后延伸时自动采用更完整的一方;真正分叉或遇到跨机删除时才要求你选择。
  • 只读取你所选备份仓自己的 origin,不保存你填写的 Git 地址;远端不可用不会阻塞本机备份。
  • 只同步完整、换行结束的 JSONL 行,不复制源码、凭据、缓存、SQLite sidecar、锁文件或机器配置。
  • 详情可生成并复制 claude --resume 或 codex resume 命令,可选附加跳过权限确认参数;只生成命令,不替你启动。

Appearance

五套深色主题,语义不变

红 = 冲突或失败,黄 = 待处理,蓝 = 远端差异,绿 = 同步。换主题只改配色,不改意思。

Moo Fleet 在 Mooeen 主题下的仓库工作台:纯黑背景与青柠品牌色
  • Fleet Blue 默认
  • Mooeen 母品牌配色
  • Dark Modern 中性灰
  • Monokai 暖底
  • Dark High Contrast 高对比
  • 界面字体默认 Inter,也可切到系统字体、IBM Plex Sans、冬青黑体、黑体、宋体或五款等宽字体。
  • 字号 12–16 px 可选,默认 14 px;偏好即时生效并写入本机配置。

Boundaries

能自动化的自动化,不能替你决定的停下来

这些不是设置项,是产品默认行为。用户工作区是最高价值数据,普通 Git 功能不允许用破坏性捷径实现。

Git 写操作

  • Pull 仅允许 fast-forward;Push 先 Fetch、复核远端并用明确 refspec,永不 force;没有 upstream 时先关联或确认首次 Push。
  • 批量操作按配置限制并发,单仓失败不中断其他仓库;被安全阻止的条目可重新预检后重试。
  • 删除本地分支前先预览会失去哪些引用,只有该分支独有的提交才要求勾选强制删除;删除远端分支用远端当前 sha 做租约复核。
  • 备份仓只接受空目录、无提交的空仓或 Fleet 自己管理的仓;其他有内容仓库始终拒绝。
  • 写操作前重新获取状态并核对仓库、分支、HEAD、upstream,防止界面快照过期。

本机与凭据

  • 本地服务只监听 loopback;写接口需要当前进程生成的 session token,并校验可信 Origin、Host 与受信任根目录。
  • Git 凭据交给 SSH Agent、系统钥匙串或 Git Credential Manager;Fleet 禁止交互式提示,也不保存平台账号、密码、Token 或私钥。
  • DeepSeek Key 只存在本机文件或进程环境;每个仓库可选择「禁用 AI / 仅发送 Diff 统计 / 发送脱敏 Patch」,敏感路径始终留在本机。
  • 源码模式设置 GIT_FLEET_HOME 后,配置、操作记录、凭据与备份绑定统一落在该目录,便于隔离验证。

Analytics

顺带回答「最近到底在忙什么」

按时间段和仓库范围统计提交热力图、代码量、非上班时间、活跃度与排行。仓库范围支持搜索、多选、全选与清空,应用后整页重算,并写入本机配置。

提交热力图

按天聚合,跨时区的提交按作者当时那一天归属;窗口结束日是未来日期时,只画已经发生的日子。

代码量与非上班时间

按仓库与时间段统计增删行数,单独看非上班时段的提交占比,不会把「深夜提交」混进总量里。

活跃度与排行

跨仓库看提交分布,找出真正活跃的仓库;结果带缓存与增量窗口,重新统计不会每次跑满全量。

Download

下载 Moo Fleet 0.2.0

安装包托管在 Gitee 与 GitHub Release,不在本站转存。macOS 两个 DMG 已签名、公证并装订票据;Windows 两件未做代码签名。

0.2.0 这一版:勾选的新文件可整批删除;暂存 25 ms、取消暂存 17 ms、文件列表 10 ms(20 仓合成舰队实测)。

macOS

WKWebView 原生壳 · 内置官方 Node 运行时

Developer ID 签名 + Apple 公证 + 票据已 staple:双击挂载、拖进「应用程序」即可,不需要右键打开或清除隔离属性。

校验 SHA-256
arm64
f80b4e29f29c9ec23253010ff0ad495685c912781f2c76184adb94595224a3df
x64
f3cbb65dcbc19d4f402c6cf06e6607da0bc1cb9fb821ce7af876c61cf7a05650

Linux

Electron 外壳 · x86_64

AppImage 先 chmod +x。部分发行版默认禁用非特权 user namespaces,需要启用或加 --no-sandbox;deb 安装会正确设置 chrome-sandbox 权限。

校验 SHA-256
deb
4a608a7130f7fce97db05794c7f7dfb9acd47d01c9ca8cf2d253364d606c4d60
AppImage
64084714d579b566ed6e9681e65223f650b7099276f0d4553bafe4cf3b9fd0ad

Windows

Electron 外壳 · x64

  • 安装版(NSIS)x64 · 107.6 MiB

    Moo-Fleet-0.2.0-windows-x64-setup.exe

  • 免安装x64 · 97.6 MiB

    Moo-Fleet-0.2.0-windows-x64.exe

两件均未做 Authenticode 签名,首次运行 SmartScreen 会提示「未知发布者」:点「更多信息 → 仍要运行」。安装版约 107.6 MiB,超过 Gitee 单文件 100 MiB 上限,所以只在 GitHub 发布。

校验 SHA-256
setup
184fb2408c3cf502dc1a7d00d495d0bbf33eecb8d4d14ee6b811e73789300796
免安装
7d1d4a0a02d374d569e81d5f35be7b46982b44fe5bd4eab2986bcf59b1b1c69d

系统要求

macOS
13.5 或更高 · arm64 / x64 两个独立包(不提供 Universal 2)
Windows
64 位 · 安装版或免安装单文件
Linux
x86_64 · deb 或 AppImage
运行依赖
安装包自带 Node 运行时;日常使用需要 Git 命令行
源码构建
Node.js 20+

数据目录

macOS
~/Library/Application Support/Moo Fleet
Windows
%APPDATA%\Moo Fleet
Linux
$XDG_DATA_HOME/moo-fleet
源码模式
GIT_FLEET_HOME
Release
Gitee · GitHub

macOS

下载对应芯片的 DMG,双击挂载,把「Moo Fleet」拖进「应用程序」,再双击打开。

Linux

deb 直接安装;AppImage 赋予执行权限后运行。

sudo apt install ./Moo-Fleet-0.2.0-linux-amd64.deb
chmod +x Moo-Fleet-0.2.0-linux-x86_64.AppImage
./Moo-Fleet-0.2.0-linux-x86_64.AppImage

Windows

运行安装版选择安装目录,或直接打开免安装单文件;SmartScreen 提示时选择「仍要运行」。

FAQ

常见问题

还有别的想问,去仓库开 issue。

它和常规 Git 客户端有什么不同?

定位不同。常规客户端围绕「当前打开的仓库」组织界面;Fleet 围绕「这台电脑上所有仓库的状态」组织清单,并把本机 Claude / Codex 会话备份放进同一个应用。它也提供分支、Diff、Hunk、合并、冲突、Tag、Stash、Blame、Reflog 这些日常能力,但不会托管代码、不会替代 IDE,也不会替你决定冲突怎么解。

Pull / Push 会不会覆盖我的东西?

Pull 只允许 fast-forward,推永远不 force。Push 前会先 Fetch、复核远端状态并使用明确 refspec;每次写操作前都会重新核对仓库、分支、HEAD 和 upstream。不能安全执行时会停下并说明原因,不会自动用 reset / clean 之类的捷径绕过。

「丢弃改动」会直接删文件吗?

已跟踪文件如果仍存在,当前内容先移入系统废纸篓,再恢复 Git 版本;已删除的跟踪文件直接恢复;未跟踪文件进废纸篓。已暂存、冲突、复杂重命名等高风险状态会被拒绝,交给你在外部处理。

AI 会话备份是怎么工作的?

你自己准备一个私有 Git 仓库作为备份位置,Fleet 只读取它自己的 origin,不保存你填写的地址。本机 JSONL 是真相源,备份仓是 Fleet 管理的派生副本:内容相同或只有严格前后延伸时自动对齐,真正分叉或跨机删除时才让你选择。远端不可用不会阻塞本机备份,未推送的提交会在后续同步时继续上传。

需要注册账号或联网吗?

不需要账号。除了 Fetch / Push / 克隆 / 检查更新这些本来就需要网络的动作,其余功能都在本机完成。本地服务只监听 127.0.0.1,写接口还要求 session token 并校验可信 Origin、Host 与受信任根目录。

我的 API Key 和 Git 凭据存在哪?

DeepSeek Key 只保存在本机 GIT_FLEET_HOME/deepseek_token 或进程环境里。Git 凭据交给 SSH Agent、系统钥匙串或 Git Credential Manager;Fleet 禁止交互式凭据提示,也不保存托管平台账号、密码、Token 或 SSH 私钥。

Apple Silicon 和 Intel 要下哪个?

两个独立安装包,不提供 Universal 2。M 系列芯片下 arm64 的 DMG,Intel 机器下 x64 的 DMG。两者都是 Developer ID 签名并通过 Apple 公证,票据已装订在 App 与 DMG 上。

Windows 为什么提示「未知发布者」?

Windows 两个包目前没有做 Authenticode 代码签名,这不是下载损坏。首次运行时会遇到 SmartScreen,点「更多信息 → 仍要运行」即可。macOS 版不受影响。

Linux 上 AppImage 打不开怎么办?

先确认已经 chmod +x。部分发行版默认禁用非特权用户命名空间,Electron 的沙箱会因此启动失败,可以启用 user namespaces,或在命令后加 --no-sandbox。用 deb 安装则不需要这一步。

怎么卸载?数据会留下什么?

macOS 把「应用程序」里的 Moo Fleet 拖进废纸篓;Windows 走应用卸载或直接删除程序目录;Linux 用包管理器卸载或删除 AppImage。配置、操作记录、会话备份绑定留在上面「数据目录」里,需要彻底清理时手动删除该目录即可。