mcpField
F
fleet

fleet

本地服务
github.com云与基础设施01 天前更新

关于 fleet

fleet 让编码 Agent 和命令行用户查看可通过 SSH 访问的机器,包括 GPU 空闲情况、运行中的任务、已服务模型、已安装软件和数据位置。目标机器无需安装软件;它使用现有 SSH 访问,帮助 Agent 为工作选择合适机器。

主要功能

  1. 01发现并查看可通过 SSH 访问的机器
  2. 02查看 GPU 容量和当前使用情况
  3. 03检查任务、已服务模型和软件
  4. 04记录模型、数据集和媒体位置
  5. 05在选定机器上运行命令和任务

适用场景

  1. 01查找具有指定显存的空闲 GPU
  2. 02为训练或测试选择机器
  3. 03检查正在运行的任务或模型
  4. 04查找数据集及可用磁盘空间

MCP 相关

对于无法运行命令的客户端,fleet 提供 MCP 服务,暴露相同的 fleet 操作。其他受支持的 Agent 可通过已安装的技能使用其命令行界面。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"sinolion-fleet": {
"command": "uvx",
"args": [
"agents-fleet"
]
}
}
}
启动命令uvx agents-fleet

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiagents-fleet0.6.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

README 配图

fleet — 让你的编码 Agent 使用你拥有的每一台机器

Claude Code、Codex 和 Gemini 只能看到一台机器:它们运行所在的机器。
fleet 会向它们展示你所有的机器——每张 GPU 及其运行的任务、正在提供服务的模型、已安装的软件,以及模型和数据所在的位置。

无需账户、无需云服务、无需在添加的机器上安装任何东西,也无需交出密钥:fleet 会像你平时一样,使用你现有的 SSH 登录。

tests License: MIT Linux | macOS | Windows MCP server

https://github.com/user-attachments/assets/d35e0200-c2a2-44aa-8f60-a3b6e4addfb7

问题所在

让你的 Agent 训练模型,任务就会在笔记本电脑上启动——与此同时,隔壁房间的 4090 闲置着,租来的 A100 却按小时计费。它看不到的资源,就无法使用。

  • 你的 Agent 被困在一台机器上。 它根本不知道你还有其他机器。
  • 寻找空闲 GPU 得手动操作。 SSH 登录五台主机,运行 nvidia-smi,再靠脑子比较。
  • 它看不到正在运行的任务,也看不到已有的资源——哪张卡上运行着谁的任务,哪台机器已经在为 Llama 3 提供服务,数据集存在哪里——于是它会重复下载和安装东西。

40 秒演示:要求在任何有空闲 24 GB 显存显卡的机器上训练时,Agent 会运行 fleet ls --tag cuda --tag vram-24g,在两台付费租赁机器和一台繁忙机器中选择闲置的 RTX 4090,在那里以分离模式启动 train.py,并确认显卡现在已投入使用。询问哪些资源正在产生费用时,它会指出一台每小时收费 $2.49 的闲置 H100 租赁机器,而是否停止它仍由你决定。

开始使用:询问你的 Agent

在你工作的机器上,将以下内容粘贴到 Claude Code、Codex、Gemini CLI 或任何能够运行命令的 Agent 中:

Install fleet from https://github.com/sinolion/fleet

Agent:操作步骤见 INSTALL.md。

设置就这么简单。fleet 只需在这台机器上安装一次,你在这里使用的每个受支持的 Agent 都会学会使用它——不只是你刚刚询问的那个。从现在起,只需用日常语言说出你的需求,无需记住任何命令。

接下来添加你的机器

告诉 Agent 如何连接到一台机器——你平时使用的 SSH 命令就足够了——或者让它查看你的 ~/.ssh/config 和 tailnet,寻找你已经可以连接的机器:

你: 添加我的 GPU 服务器,ssh [email protected]

Agent: 已添加为 gpu-box:2 张 RTX 4090,均处于空闲状态,可用显存 46 GB。可以开始使用了。

无论机器是什么类型,每台只需一句话:

机器你告诉 Agent 的内容
你已经可以通过 SSH 登录的服务器“添加 ssh [email protected]”——fleet 会像你平时一样,使用你的密钥登录
需要使用特定密钥文件连接的机器“添加 ssh -i ~/.ssh/my_key [email protected]”——也可以使用 ~/.ssh/config 中的 Host
tailnet 上的一台机器“查找我的机器”——它会列出你的 SSH 配置主机和 tailnet 机器,并添加你选择的机器
新租赁的机器(vast.ai、RunPod、AutoDL)“添加 ssh -p 40001 [email protected],每小时收费 $1.89”——使用你提供商账户中的密钥
只能通过密码登录的机器“添加它”——fleet 会提供 ssh-copy-id,你只需在 SSH 中输入一次密码,就能将你的密钥添加到该机器
无法登录的机器“为什么无法连接 NAS?”——fleet doctor 会指出需要修复的问题

你添加的机器上无需安装任何东西:它们只需运行 Linux、macOS 或 Windows,并支持 SSH。fleet 会检查每台机器的 GPU、内存和磁盘,并持续更新这些信息。

然后让 Agent 来选择

描述要做的工作;Agent 会找到合适的机器。它会检查每台机器的配置,以及 当前有哪些资源空闲,因此不会把任务派给正忙着的显卡:

你: 在有空闲 24 GB 显卡的机器上训练 train.py

Agent: rtx4090 有 23.1 GB 可用显存,GPU 处于空闲状态;a100-spot 也空闲,但费用为 $1.89/小时。我会在 rtx4090 上开始运行,并将日志写入 train.log。

你说Agent 如何查找
“现在有哪些资源空闲?”检查每台机器,并列出空闲的机器
“帮我找一台有 24 GB 显卡的机器”根据机器的配置匹配——NVIDIA 或 AMD、显存、核心数、RAM,而非机器名称
“在 Linux 机器上运行测试”找到运行 Linux 的机器,并带回结果
“哪些资源正在产生费用?”标出闲置的付费租用机器,并显示每小时价格
“谁在使用 GPU?”列出每张显卡上的所有任务——用户、显存用量、运行时长和命令
“Llama 3 已经在哪台机器上提供服务?”列出每个模型服务的模型,以及访问它所需的 URL 或 ssh 隧道
“哪台机器装有 torch 2.5 和 CUDA 12?”查看每台机器的 CUDA 或 ROCm、Python 环境和软件包版本
“把数据集下载到存放数据集的目录”查找该机器指定的数据集目录,以及剩余空间

密钥和密码绝不会进入对话;任何不可逆操作都会等待你确认。

只在你使用 Agent 的地方安装 fleet。 你添加的机器只需支持 SSH。只有在其他机器上也运行 Agent 时,才需要在那里安装 fleet;它在任何地方的运行方式都相同,无需加入或同步。在那里,fleet ls --discover 会列出 ssh 配置和 tailnet 中的机器;你手动添加的机器则保存在一个文件中,可与 dotfiles 一同分享。

无法运行命令的应用?

桌面应用和编辑器只需点一下即可使用 fleet;fleet 会作为 MCP 服务运行:

应用安装
Claude Desktop从最新版本打开 fleet.mcpb
Cursor添加到 Cursor
VS Code在 VS Code 中安装

此外还提供 Claude Code、Codex、Copilot CLI 和 Gemini CLI 的插件,以及 OpenCode、Amp、 Windsurf、Cline、Zed、Qwen Code、Goose、Kiro、Hermes 的插件——总计支持 35+ 个 Agent: 查看所有 Agent →

安全可靠

  • 无需在你的机器上安装任何东西。 fleet 通过一个脚本和一个 SSH 连接进行探测,支持 Linux、macOS 或 Windows。NAS 或新租用的机器都能直接使用。它在机器上留下的少数文件列在 fleet 会修改什么中。
  • 不交出密钥,不管理访问权限。 fleet 完全按照你的方式连接——使用你的 ssh 配置、密钥和 Agent、Tailscale SSH、租用服务提供商的密钥——并且不会在任何地方写入密钥。谁可以访问什么,仍由你在原有位置决定。机器拒绝连接时,fleet doctor 会告诉你如何修复;fleet 绝不会擅自处理。
  • 没有密码。 fleet 从不索要或存储密码,Agent 也看不到任何凭据。GPU 任务命令行中的秘密会在显示给任何人之前被隐藏。
  • Agent 会询问,不会猜测。 它会询问你指的是哪台机器;不可逆命令由你决定;也不会在其他人正在使用的 GPU 上启动任务。
  • 不会向外发送数据。 除了安装和更新自身,fleet 只与你的机器通信,不会与其他对象通信:没有账户、遥测或更新检查。发现漏洞?SECURITY.md 说明了如何私下报告。

更喜欢使用命令行?

Agent 执行的所有操作都是普通的 fleet 命令。要自行安装 fleet,请在你工作的机器上运行以下命令(你让 Agent 执行时,它也会运行此命令):

curl -LsSf https://raw.githubusercontent.com/sinolion/fleet/main/install.sh | sh

Windows:powershell -ExecutionPolicy ByPass -c "irm https://raw.githubusercontent.com/sinolion/fleet/main/install.ps1 | iex"

然后亲自操作:

fleet ls                            # every machine, with what is free right now
fleet ls --tag cuda --tag vram-24g  # by capability: NVIDIA, a card of 24 GB or more
fleet ls --tag rocm                 # every AMD machine
fleet top                           # live view, like htop for the whole fleet
fleet show gpu-box                  # one machine in detail: jobs, software, models, folders
fleet ps                            # every job on every GPU, and which GPUs are idle
fleet models                        # every model being served, and how to reach it
fleet edit gpu-box --path models=/data/models   # where that machine keeps its models
fleet ssh gpu-box -- nvidia-smi     # run something there
fleet add "ssh [email protected]"     # add a machine
fleet ls --discover                 # machines in your ssh config and on your tailnet
fleet doctor nas                    # why a machine will not let you in, and the fix
fleet ls:显示七台机器上的空闲 GPU、VRAM、CPU、RAM 和磁盘空间——一台有一张忙碌和一张空闲显卡的 A100 租用机、一台空闲但仍在产生费用的 H100 租用机、一台磁盘快满的忙碌 RTX 3090 机器、一台笔记本电脑、一台 NAS,以及一台已关机的机器 fleet top:实时查看所有机器上的 GPU 利用率、空闲 VRAM、CPU、RAM、磁盘空间,以及每张 GPU 上运行的任务 fleet ps:查看每张 GPU 上的所有任务——一台 A100 租用机上的训练任务,以及一台配有两张 RTX 3090 的实验室机器上的微调任务和 vLLM 服务——还有三张空闲 GPU fleet models:由 vLLM 在实验室机器上提供服务的 Llama 3.1 及其 URL;以及 RTX 4090 上的两个 ollama 模型,它们仅监听本地连接,还有用于连接它们的 ssh 隧道

机器存放模型、数据集和媒体文件的位置会写在机器本身的 machine.yaml 中(fleet edit NAME --path models=/data/models)。查看该机器的所有人都会看到相同的信息;每次探测都会一并显示文件夹大小和剩余空间。

来自 vast.ai、RunPod 或 AutoDL 的租用机也会显示价格(fleet edit a100 --cost 1.89)、整个集群的费用消耗速率,以及租用机处于空闲状态时的警报。在使用 Tailscale、ZeroTier 或 WireGuard 时,fleet 只需要一个可路由到的地址。

fleet 的对比

fleet 面向你已有的机器。它与负责启动新机器的工具互为补充。

ssh + nvidia-sminvitop / gpustatall-smi / gpuwhoSkyPilot / dstackfleet
在一个视图中查看所有机器✗✗ 一台机器✓✓ 它管理的机器✓
专为编码 Agent 打造(skill / MCP)✗✗✗部分支持✓
目标机器上无需安装任何内容✓✗gpuwho ✓,all-smi ✗✗✓
任务、提供服务的模型、软件、数据文件夹✗任务、一台机器任务✗✓
支持 NVIDIA、AMD 和 Apple GPUNVIDIANVIDIAall-smi ✓✓✓
启动新的云端 VM✗✗✗✓✗
历史记录、发送给你的警报✗✗all-smi ✓部分支持✗ 按需提醒

何时使用其他工具。 要按需以最低价格租用 GPU,请使用 SkyPilot 或 dstack:它们会启动和停止机器,而 fleet 不会。要在大型集群上收集数周的指标并发送告警,请使用 DCGM、Prometheus 和 Grafana。要查看包含多种加速器(Gaudi、NPU)的实时仪表板,请使用 all-smi。fleet 面向你已有的机器,也让你的 Agent 能够使用这些机器。

为什么不直接使用 Tailscale、Ansible 或 ~/.ssh/config? 将它们与 fleet 一起使用,而不是用它们取代 fleet。Tailscale 负责连接你的机器,fleet 可以通过它正常运行,但它不会告诉你的 Agent 哪台机器有空闲 GPU。Ansible 会根据你编写的 playbook 更改机器配置,但并不知道眼下哪些机器正忙。~/.ssh/config 用于命名主机,而 fleet 会读取它。fleet 位于两者之间:它以 Agent 无需你介入即可使用的形式,呈现你拥有哪些机器、机器上有哪些空闲资源,以及正在运行和已安装的内容。

常见问题

设置

我需要在每台机器上安装 fleet 吗?

不需要。只需在你使用 fleet 的地方安装:你工作的机器,以及其他运行 Agent 的机器。你只会使用的机器——GPU 服务机、租用机、NAS——只需要 SSH,无需安装其他内容。

我需要使用 Tailscale 吗? 不需要。fleet 会使用 SSH 能连接到你的机器的任何网络:局域网、VPN、跳板机,或租赁机器的公网端口。如果你使用 Tailscale,`fleet ls --discover` 会为你查找 tailnet 中的机器,而由 Tailscale SSH 决定谁可以登录到哪里——fleet 只负责连接。请参阅[连接到你的机器](docs/guides/reaching-machines.md)。
我在两台机器上运行 fleet。它们会共享什么内容吗?

它们不需要共享任何内容:每台机器都会查看自己的 SSH 能连接到哪些机器,而机器对自身信息的描述——成本、标签、模型所在位置——都保存在该机器上,因此两边读取的内容相同。你手动添加的机器保存在一个文件中:machines.yaml(运行 fleet paths 可查看位置);你可以复制这个文件,或将它保存在 dotfiles 中。

我在同一台机器上使用 Claude Code 和 Codex(还有其他工具)。可以吗?

可以——这正是常见用法。每台机器只需安装一次 fleet:一条命令、一份机器列表。每个 Agent 只需获取一个指向 fleet 的小型 skill 或 MCP 配置,因此 Claude Code、Codex、Gemini CLI 和桌面应用都能看到相同的机器,并可同时使用它们。之后安装新的 Agent?让一个已配置 fleet 的 Agent 运行 fleet setup 即可。

我的 Agent 实际上会获得什么?

能够运行命令的 Agent(Claude Code、Codex、Gemini CLI、Copilot CLI、OpenCode,……)会获得一个 skill——其中包含告诉它们如何使用 fleet 命令的文本;只有任务需要机器时才会产生开销。无法运行命令的应用(Claude Desktop、Cursor、VS Code,……)会获得一个 MCP 服务,由它代为运行相同的命令。请参阅 Agent。安装完成后,请启动新会话,让 Agent 加载它。

安全性

fleet 会存储我的密码吗?我的 Agent 能看到我的密钥吗?

两者都不会。fleet 没有自己的密钥,也绝不会处理密码:它会像你一样运行 ssh。对于只接受密码的机器,它会在你的终端中提供 ssh-copy-id,让你只需一次在 ssh 本身中输入密码。Agent 运行 fleet ssh NAME,绝不会看到密钥或密码;但它可能会看到机器的地址,因为 fleet show 会显示该地址。

fleet 会在我添加的机器上留下什么?

几乎什么都不会:只有 fleet edit 在那里写入的备注文件(machine.yaml:标签、成本、备注、文件夹、声明的服务)、~/.cache/fleet 中的软件版本和文件夹大小的小型缓存,以及 authorized_keys 中完全没有任何内容。没有程序,也没有服务。 fleet 会更改什么列出了完整清单。

Agent 能做我无法撤销的事吗?

Agent 会被告知不要这样做。移除机器的操作由你决定,而且应用完全无法通过 MCP 执行此操作。请求含糊不清时——例如不确定是哪台机器或哪个用户——Agent 会先询问,而不是猜测。

机器

fleet 报告的磁盘空间不准确。

某些系统——例如容器、GPU 租赁机器——会将 / 显示为一个小型覆盖层,而实际空间位于另一个卷中。告诉 fleet 要监控哪些路径:“在 gpu-box 上监控 /workspace”,或运行 fleet edit gpu-box --disk-path /workspace。请参阅磁盘。

我的租赁机器换了新的 IP 或端口。

更新连接信息,同时保留其名称、标签、成本和历史记录:“gpu-box 现在的地址是 ssh -p 40123 [email protected]”,或运行 fleet edit gpu-box --ssh "ssh -p 40123 [email protected]"。

我的机器位于不同的 NAT 后面,或分布在不同的地点。 fleet 不解决连通性问题;它使用你已有的路由。运行 fleet 的机器必须能通过 SSH 连接到每台机器;这些机器之间无需互相连接。 对于位于不同 NAT 后的机器,请将它们接入 Tailscale 或 ZeroTier 等网状网络,并通过网状网络地址添加。请参阅 [连接到你的机器](docs/guides/reaching-machines.md)。
Windows?

可以,两种方式都行。安装 OpenSSH Server 后,Windows 机器无需其他配置即可作为目标机器;fleet 也可在 Windows 上运行。请参阅 Windows。

会有任何东西在后台持续运行吗?

不会运行服务。只有当你或 Agent 使用 fleet 时,它才会运行。在 Linux 和 macOS 上,fleet 打开的每台机器的 SSH 连接会在命令执行后保持两分钟,以便下次无需重新连接,之后会自动关闭。在 fleet 检查的机器上,你指定文件夹的 du 可能会不时在后台运行,以便获知文件夹大小,而不必让探测操作等待。

我用过 fleet 0.5。有哪些变化?

fleet 不再管理访问权限:没有中心服务、邀请或自有密钥。升级后,请重新添加你的机器。从 0.5 升级列出了 0.5 留在机器上的内容,以及如何将其移除。

如何移除 fleet?

运行 fleet uninstall(使用 --purge 也会删除其文件):此命令会从你的 Agent 中移除 fleet,并打印最后一步 uv tool uninstall agents-fleet。请参阅 移除 fleet。

了解更多

状态: v0.6。测试套件可在 Linux、macOS 和 Windows 上运行;在 CI 中,每条命令都会在每种操作系统的真实机器上端到端运行——既通过脚本以 Agent 的方式运行,也在真实终端中以你使用的方式运行。

欢迎提交问题和拉取请求——请参阅 CONTRIBUTING.md。如果 fleet 帮你省下了一小时 GPU 使用时间,点个 ⭐ 可以帮助其他人发现它。

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。