在手机和网页远程管理各设备上的 AI 智能体会话
30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lxfebd/AgentPilot该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · tool
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 92 处,展示前 60 条)
- 读取本地文件desktop-next/electron/main.cjs:132
if (!fs.existsSync(legacyDir)) return canonicalDir; - 写入本地文件desktop-next/electron/main.cjs:133
fs.mkdirSync(canonicalDir, { recursive: true, mode: 0o700 }); - 读取本地文件desktop-next/electron/main.cjs:134
for (const name of fs.readdirSync(legacyDir)) { - 删除本地文件desktop-next/electron/main.cjs:137
fs.rmSync(source, { force: true }); - 读取本地文件desktop-next/electron/main.cjs:141
for (let index = 1; fs.existsSync(target); index += 1) { - 写入本地文件desktop-next/electron/main.cjs:144
fs.renameSync(source, target); - 删除本地文件desktop-next/electron/main.cjs:146
fs.rmdirSync(legacyDir); - 读取本地文件desktop-next/electron/main.cjs:161
return JSON.parse(fs.readFileSync(filePath, "utf8")); - 读取本地文件desktop-next/electron/main.cjs:168
return JSON.parse(fs.readFileSync(filePath, "utf8")); - 写入本地文件desktop-next/electron/main.cjs:172
fs.mkdirSync(path.dirname(filePath), { recursive: true }); - 写入本地文件desktop-next/electron/main.cjs:173
fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`, "utf8"); - 删除本地文件desktop-next/electron/main.cjs:179
fs.rmSync(targetPath, { recursive: true, force: true }); - 发起网络请求desktop-next/electron/main.cjs:212
return net.fetch(pathToFileURL(filePath).toString()); - 读取本地文件desktop-next/electron/main.cjs:267
if (fs.existsSync(trimmed)) return trimmed; - 执行外部命令来自配置/变量desktop-next/electron/main.cjs:400
const child = spawn(executable, args, { windowsHide: true, stdio: ["ignore", "pipe", "ignore"] }); - 写入本地文件desktop-next/electron/main.cjs:586
fs.mkdirSync(logDir(), { recursive: true }); - 写入本地文件desktop-next/electron/main.cjs:603
fs.appendFileSync(activeLogChunkPath(), `${JSON.stringify(log)}\n`, "utf8"); - 删除本地文件desktop-next/electron/main.cjs:626
fs.unlinkSync(file); - 删除本地文件desktop-next/electron/main.cjs:683
fs.unlinkSync(file); - 删除本地文件desktop-next/electron/main.cjs:705
fs.rmSync(file, { force: true }); - 执行外部命令来自配置/变量desktop-next/electron/main.cjs:876
rpcProcess = spawn(uvPath, args, { - 执行外部命令固定命令desktop-next/electron/main.cjs:908
spawn("taskkill.exe", ["/pid", String(rpcProcess.pid), "/t", "/f"], { windowsHide: true }); - 执行外部命令来自配置/变量desktop-workbench/electron/backend-client.ts:97
const child = fork(entry, [payload], { - 删除本地文件desktop-workbench/electron/connector-supervisor.test.ts:34
t.after(() => fs.rmSync(root, { recursive: true, force: true })); - 写入本地文件desktop-workbench/electron/connector-supervisor.test.ts:35
fs.writeFileSync(path.join(root, "pyproject.toml"), ""); - 写入本地文件desktop-workbench/electron/connector-supervisor.test.ts:38
fs.writeFileSync(script, runtime); - 读取本地文件desktop-workbench/electron/connector-supervisor.test.ts:70
assert.deepEqual(JSON.parse(fs.readFileSync(captured, "utf8")), { - 删除本地文件desktop-workbench/electron/connector-supervisor.test.ts:80
t.after(() => fs.rmSync(root, { recursive: true, force: true })); - 写入本地文件desktop-workbench/electron/connector-supervisor.test.ts:81
fs.writeFileSync(path.join(root, "pyproject.toml"), ""); - 写入本地文件desktop-workbench/electron/connector-supervisor.test.ts:84
fs.writeFileSync(script, ` - 写入本地文件desktop-workbench/electron/connector-supervisor.test.ts:97
fs.writeFileSync(configPath, JSON.stringify(credentials)); - 读取本地文件desktop-workbench/electron/connector-supervisor.test.ts:126
assert.deepEqual(JSON.parse(fs.readFileSync(configPath, "utf8")), credentials); - 写入本地文件desktop-workbench/electron/connector-supervisor.test.ts:129
fs.writeFileSync(ready, ""); - 删除本地文件desktop-workbench/electron/connector-supervisor.test.ts:143
t.after(() => fs.rmSync(root, { recursive: true, force: true })); - 删除本地文件desktop-workbench/electron/connector-supervisor.test.ts:188
t.after(() => fs.rmSync(root, { recursive: true, force: true })); - 删除本地文件desktop-workbench/electron/connector-supervisor.test.ts:228
fs.rmSync(environment, { recursive: true, force: true }); - 发起网络请求desktop-workbench/electron/connector-supervisor.ts:146
const runtimeState = await this.request("connector.getState", undefined, { - 发起网络请求desktop-workbench/electron/connector-supervisor.ts:160
const runtimeState = await this.request("connector.acquireOwnership", undefined, { - 发起网络请求desktop-workbench/electron/connector-supervisor.ts:171
await this.request("connector.acquireOwnership", undefined, { requiresConfig: false, timeoutMs }); - 发起网络请求desktop-workbench/electron/connector-supervisor.ts:220
const result = await this.request("connector.saveConfig", normalized, { - 发起网络请求desktop-workbench/electron/connector-supervisor.ts:251
const result = await this.request("connector.start", undefined, { - 发起网络请求desktop-workbench/electron/connector-supervisor.ts:263
const result = await this.request("connector.stop", undefined, { - 执行外部命令来自配置/变量desktop-workbench/electron/connector-supervisor.ts:358
const child = spawn(launcher.executable, launcher.args, { - 执行外部命令固定命令desktop-workbench/electron/connector-supervisor.ts:513
spawn("taskkill.exe", ["/pid", String(child.pid), "/t", "/f"], { - 发起网络请求desktop-workbench/electron/desktop-device-service.ts:274
return parseCredentialResponse(await this.request(serverUrl, path, userToken, "POST", body)); - 发起网络请求desktop-workbench/electron/desktop-device-service.ts:279
const devices = parseConnectorList(await this.request(serverUrl, "/connectors", userToken, "GET")); - 写入本地文件desktop-workbench/electron/machine-state-lock.ts:13
await mkdir(path.dirname(filePath), { recursive: true, mode: 0o700 }); - 读取本地文件desktop-workbench/electron/machine-state-lock.ts:14
const directory = await realpath(path.dirname(filePath)); - 发起网络请求desktop-workbench/electron/main.ts:155
await backend.request("/server", { - 发起网络请求desktop-workbench/electron/main.ts:247
const tokens = await exchangeDesktopOAuthCode(code, pending.verifier, pending.server, (url, init) => net.fetch(String(url), init)); - 发起网络请求desktop-workbench/electron/main.ts:289
(input, init) => net.fetch(String(input), init), - 发起网络请求desktop-workbench/electron/main.ts:295
if (filePath) return net.fetch(pathToFileURL(filePath).toString()); - 发起网络请求desktop-workbench/electron/main.ts:595
void backend.request("/logs/append", { method: "POST", body: JSON.stringify(payload) }).catch(() => undefined); - 发起网络请求desktop-workbench/electron/main.ts:687
return backend.request("/onboarding/complete", { method: "POST", body: JSON.stringify({ source }) }); - 发起网络请求desktop-workbench/electron/preload.ts:65
const response = await fetch(`${target.base}${route}`, { ...init, headers }); - 发起网络请求desktop-workbench/electron/preload.ts:98
const response = await fetch(`${target.base}/events`, { headers, signal: controller.signal }); - 执行外部命令来自配置/变量desktop-workbench/electron/shell-environment.ts:38
const child = spawn(executable, args, { - 执行外部命令来自配置/变量desktop-workbench/electron/system-device-name.ts:20
execFile( - 读取本地文件dsh-bridge/src/bridge-service.ts:1080
if (existsSync(join(candidate, 'pyproject.toml'))) return candidate - 写入剪贴板packages/ui-core/src/lib/clipboard.ts:4
await navigator.clipboard.writeText(text)
扫描于 2026/11/3(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
AgentPilot:跨设备智能体工作台(Connector/Server/客户端)
README
由 DeepSeek 最新模型翻译生成AgentPilot:跨设备的开源 Agent 工作台连接工作设备,在桌面、手机和 Web 管理 AI Agent。
开源 · 多种 Agent · 会话与工作区 · 自托管
下载客户端 ·部署并打开 Web ·
AgentPilot 是跨设备的开源 Agent 工作台。连接运行 Codex、Claude Code 或 DeepSeek Harness 的工作设备,在桌面、手机和 Web 查看会话、回复请求、管理文件与终端。Agent 在连接的工作设备上执行任务。
下载与入口
在工作设备上安装桌面客户端,再通过手机、平板或 Web 访问。Linux 和无图形界面的服务器可使用 Connector CLI 接入。各客户端连接你自己部署的服务实例。
展开完整文档(README 剩余 1 节)
AgentPilot:跨设备的开源 Agent 工作台连接工作设备,在桌面、手机和 Web 管理 AI Agent。 开源 · 多种 Agent · 会话与工作区 · 自托管 下载客户端 ·部署并打开 Web · AgentPilot 是跨设备的开源 Agent 工作台。连接运行 Codex、Claude Code 或 DeepSeek Harness 的工作设备,在桌面、手机和 Web 查看会话、回复请求、管理文件与终端。Agent 在连接的工作设备上执行任务。 下载与入口 在工作设备上安装桌面客户端,再通过手机、平板或 Web 访问。Linux 和无图形界面的服务器可使用 Connector CLI 接入。各客户端连接你自己部署的服务实例。 | 平台 | 获取客户端 | | macOS | GitHub Releases · Universal DMG | | Windows | GitHub Releases · x64 安装包 | | Android | GitHub Releases · APK | | iOS / iPadOS | App Store · TestFlight | | Web | 部署自己的服务后打开对应地址(见自托管快速开始) | | Linux / headless | 运行 Connector CLI | 正式发布后,上面的安装包链接会指向对应 Release;当前 main 是开发主线,源码中的新修复不一定已进入安装包。 平台要求、安装包与更新说明 - macOS:Apple Silicon / Intel 通用,已签名、公证;需要 macOS 12 及以上。 - Windows:x64 桌面工作台,含本机 Connector;当前安装包未做代码签名。 - Android:Android 8.0 及以上。 - iOS / iPadOS:在 App Store 下载安装;也可以通过 TestFlight 安装测试版,以邀请页显示的可用状态为准。 - Linux / headless:运行 Connector 接入工作设备,通过其他客户端操作。 各端 PATCH 版本独立发布,数据库 schema revision 单独编号。 Agent 与工作区管理 | 你想做的事 | 在 AgentPilot 中 | | 管理项目与会话 | 在设备、项目和会话之间切换,通过时间线(Timeline)查看运行进度。 | | 审批操作与回复请求 | 响应工具审批和输入请求;按 Runtime 能力打断或继续任务。 | | 查看文件与使用终端 | 浏览与预览文件、上传下载附件,打开远程 shell 和交互式终端。 | | 配置 Agent | 配置 Codex、Claude Code 和 DSH;根据对应 Runtime 支持的能力选择模型、权限与操作。 | Runtime 是工作设备上运行和连接 Agent 的组件。模型账号和调用费用遵循所使用 Agent 的规则。各 Runtime 的能力存在差异,具体操作以客户端显示为准。DSH 接入说明 → 桌面、移动端与 Web 用手机查看进展、回复 Agent,在平板上打开工作区,回到电脑后继续处理。同一服务、同一账号下,自己的设备和会话可以从不同客户端访问。 手机负责控制,工作设备负责执行。 远程使用时,工作设备需要保持开机、联网,并让 Connector 与对应 Runtime 正常运行。 首次使用 1. 登录服务。 安装客户端或打开 Web,填写你的服务地址并登录。 2. 连接工作设备。 Desktop 集成本机 Connector;服务器与无图形环境使用 Connector CLI。 3. 准备 Agent 和项目。 在工作设备上配置 Runtime、账号与工作目录,创建或打开会话。 4. 从其他设备访问。 在手机、平板或另一台电脑登录同一服务和账号,访问自己的设备与任务。 执行位置与自托管 Agent 使用 Connector 所在机器的工作区与权限。服务部署在你自己的服务器上,客户端填入该地址即可。 flowchart LR Clients["桌面 · 手机 · Web"] <-->|"访问与控制"| Server["AgentPilot Server"] Server <-->|"Connector RPC"| Connector["工作设备上的 Connector"] Connector <--> Agents["Codex · Claude Code · DSH"] Connector <--> Workspace["工作区 · 文件 · 终端"] 会话内容、Timeline 和上传附件等数据会按功能经过或存储在 Server。自托管时,这些服务端数据由你部署的实例处理。 使用 Docker 部署 克隆仓库后,在根目录运行以下命令,先替换示例密码和密钥: POSTGRES_PASSWORD=replace-with-a-strong-password \ AGENT_SERVER_SECRET=replace-with-a-long-random-secret \ docker compose -f docker/docker-compose.postgres.yml up --build 打开 http://127.0.0.1:5174,从 Server 日志取得 setup token,完成首位管理员设置。Compose 包含 PostgreSQL、Redis、迁移任务以及托管 Web 的 Server。 完整部署步骤 · Server 文档 开发与贡献 开发环境使用 Python 3.12+ / uv / Node.js 22 / Corepack + Yarn。 | 想了解什么 | 从这里开始 | | Agent 接入与本机执行 | Connector | | Web 与桌面客户端 | Web 源码 · Desktop Workbench | | 原生移动客户端 | Android · iOS 源码 | | DSH 集成 | DSH Bridge Next | 欢迎通过 Issues 反馈问题,或通过 Pull Requests 参与改进。报告问题时,请附上客户端版本、系统、Runtime 类型和复现步骤,并移除日志中的凭据。 交流与反馈 欢迎通过 Issues 反馈问题、通过 Pull Requests 参与改进。如果项目对你有用,欢迎在 GitHub 点个 Star。 开源许可 MIT。本项目的品牌、下载入口与社区以本项目仓库为准。 致谢:AgentPilot 基于 Agents Anywhere(MIT License)二次开发并更名。感谢原作者的开源工作。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
lxfebd/AgentPilot
在手机和网页远程管理各设备上的 AI 智能体会话
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,330已汉化DeepSeek 客户端
74.5
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,349已汉化DSH
71.6
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,311已汉化DSH
71.4
智能体运行框架路由HarnessRouter/harnessrouter
智能体 harness 的统一接口。
★ 3,984已汉化DSH
71.3
这是你的仓库?认领条目