🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

智能体总控台 GZY-SUPER-HACKER/agenest

DeepSeek Harness
GZY-SUPER-HACKER8 天前有提交已提供中文文档扫描:含敏感能力

Agenest 是一个手机优先的 coding agent control plane,以 PWA…

31.5/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/28 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add GZY-SUPER-HACKER/agenest
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
数据截至 2026/10/24·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 8 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(unknown · 2026/10/24) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 22 处,展示前 22 条)
  • 发起网络请求
    frontend/public/sw.js:41
    const shell = await fetch("./", { cache: "reload" });
  • 发起网络请求
    frontend/public/sw.js:88
    const response = await fetch(request);
  • 发起网络请求
    frontend/public/sw.js:101
    const response = await fetch(request);
  • 读取本地文件
    sdk/dsh-csd-plugin/lib/config.js:37
    text = readFileSync(path, 'utf8')
  • 删除本地文件
    sdk/dsh-csd-plugin/lib/index.js:316
    rmSync(file, { force: true })
  • 写入本地文件
    sdk/dsh-csd-plugin/lib/index.js:319
    mkdirSync(dirname(file), { recursive: true })
  • 写入本地文件
    sdk/dsh-csd-plugin/lib/index.js:321
    writeFileSync(tmp, JSON.stringify({ writer: 'dsh', by_cwd: byCwd }, null, 2) + '\n', 'utf8')
  • 写入本地文件
    sdk/dsh-csd-plugin/lib/index.js:322
    renameSync(tmp, file)
  • 发起网络请求
    sdk/dsh-csd-plugin/lib/reporter.js:175
    return this.request('POST', '/api/sessions', body)
  • 发起网络请求
    sdk/dsh-csd-plugin/lib/reporter.js:179
    return this.request('PATCH', `/api/sessions/${encodeURIComponent(sessionId)}`, body)
  • 发起网络请求
    sdk/dsh-csd-plugin/lib/reporter.js:183
    return this.request('POST', `/api/sessions/${encodeURIComponent(sessionId)}/events`, body)
  • 发起网络请求
    sdk/dsh-csd-plugin/lib/reporter.js:187
    return this.request('POST', '/api/hosts', body)
  • 读取本地文件
    sdk/pi-csd-extension/csd-reporter.js:91
    text = readFileSync(path, 'utf8')
  • 发起网络请求
    sdk/pi-csd-extension/csd-reporter.js:368
    return this.request('POST', '/api/sessions', body)
  • 发起网络请求
    sdk/pi-csd-extension/csd-reporter.js:372
    return this.request('PATCH', `/api/sessions/${encodeURIComponent(sessionId)}`, body)
  • 发起网络请求
    sdk/pi-csd-extension/csd-reporter.js:376
    return this.request('POST', `/api/sessions/${encodeURIComponent(sessionId)}/events`, body)
  • 发起网络请求
    sdk/pi-csd-extension/csd-reporter.js:380
    return this.request('POST', '/api/hosts', body)
  • 写入本地文件
    sdk/pi-csd-extension/csd-reporter.js:502
    mkdirSync(dirname(file), { recursive: true })
  • 写入本地文件
    sdk/pi-csd-extension/csd-reporter.js:515
    writeFileSync(tmp, JSON.stringify(payload, null, 2) + '\n', 'utf8')
  • 写入本地文件
    sdk/pi-csd-extension/csd-reporter.js:516
    renameSync(tmp, file)
  • 读取本地文件
    sdk/pi-csd-extension/csd-reporter.js:532
    const data = JSON.parse(readFileSync(file, 'utf8'))
  • 删除本地文件
    sdk/pi-csd-extension/csd-reporter.js:538
    rmSync(file, { force: true })
扫描于 2026/11/3(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

自托管、手机优先的控制台,支持 Claude Code、Codex、DSH 和 Pi——查看每个编码智能体的会话,还能和一个能驱动它们的个人智能体对话。

README

由 DeepSeek 最新模型翻译生成
Agenest English · 简体中文 Agenest Agenest 是一个手机优先的 coding agent control plane,以 PWA 形式安装,体验接近原生 App。 它自带一个 personal agent,用来给你所有的 coding agent 指派任务和汇总进度,也可以接入你已有的 personal agent。 coding agent 跑任务 → cpctl 上报 → 服务端持久化 → SSE 推送 → 手机查看 你在手机上说话 → personal agent → 它写代码,必要时自己 ssh 出去驱动别的机器 前半部分只回答一个问题:我的 agents 现在在干什么,不需要 SSH 到机器上。它刻意不做编排、不发远程命令、不推断 agent 状态。后半部分不是监控,而是一个通往 personal agent 的通道:真正干活的是那个 agent,用的是你的凭据。Agenest 不会主动连接远程机器;它唯一的客户端连接,是同一台机器上、就在它旁边的那个 personal agent。
展开完整文档(README 剩余 1 节)
Agenest

English · 简体中文

Agenest

Agenest 是一个手机优先的 coding agent control plane,以 PWA 形式安装,体验接近原生 App。
它自带一个 personal agent,用来给你所有的 coding agent 指派任务和汇总进度,也可以接入你已有的 personal agent。

coding agent 跑任务 → cpctl 上报 → 服务端持久化 → SSE 推送 → 手机查看

你在手机上说话 → personal agent → 它写代码,必要时自己 ssh 出去驱动别的机器

前半部分只回答一个问题:我的 agents 现在在干什么,不需要 SSH 到机器上。它刻意不做编排、不发远程命令、不推断 agent 状态。后半部分不是监控,而是一个通往 personal agent 的通道:真正干活的是那个 agent,用的是你的凭据。Agenest 不会主动连接远程机器;它唯一的客户端连接,是同一台机器上、就在它旁边的那个 personal agent。

效果图

总览:运行中 / 需要关注 / 已完成 Sessions:按 机器 → harness → 项目 分组

会话详情:outcome、workspace、时间线 Agent 页:和 personal agent 的一次真实协作

为什么做 Agenest

现在很多人日常会驱动好几个 session,甚至好几个 coding agent;这些 agent 可能部署在不同的机器上,这些 session 也可能属于不同的任务。如果用户需要轮询检查它们、坐在电脑面前看进度,那是对注意力很大的消耗。

我认为,coding agent 对项目负责,而多个 coding agent 应该由一个 personal agent 管理; personal agent 对用户负责。 这是两层不同的抽象。用户应该可以随时随地、便捷快速地查看所有 coding agent 的工作状态,并且通过 personal agent 统一指挥调度,而不需要挨个和 coding agent 在 session 里面对面交流。

通常我们会把 personal agent 接入 IM 平台。这对一些协作任务很方便,但对个人的 coding agent 调度和进度检查并不方便,因为 IM 平台不提供足够的定制化界面去查看 coding agent 的状态。

Agenest 提供这样一个机会:把它和你的 personal agent 部署在一起,连接你的 coding agents;通过 Tailscale 或任意你喜欢的方式连接,然后就可以在手机界面里随时随地查看所有 coding agent 的状态。如果你已经在用 personal agent,把它接进来;如果你之前没用过,Agenest 也自带一个 native personal agent(一个本地 Pi 进程),只需要一个 provider key。

目前支持

| 层 | 支持情况 |
| Coding agent(被观察、可被驱动) | Claude Code(sdk/csd-agent 的 hooks)、DeepSeek Harness / dsh 与独立的 pi(同一条 csd-agent install 一并接入)、Codex,以及任何能调用 cpctl 的包装脚本 |
| Personal agent(通道) | native(内置,基于 Pi 构建,@earendil-works/pi-coding-agent)、nanobot、OpenClaw、Hermes Agent |

native 不是一个自研的 agent loop,而是本服务启动的一个 Pi 进程。Pi 负责 agent 循环, Agenest 负责它外面的仪表盘和通道——Agenest 不替代 Pi,也不自己实现一个 agent。

接入新的 coding agent 只需要一个 reporter(cpctl、wrapper、agent 自己的插件,或者由 csd-agent 统一安装——DSH 就是这条路径),不需要改核心。
接入新的 personal agent 是在 backend/app/agent/backends/ 放一个模块,registry 会自动发现它。

快速开始(本机)

需要 Python 3.11+、Node 18+。SDK(cpctl / csd-agent)只需要 Python 3.10+,且没有运行时依赖。

cp .env.example .env # 想用 Agent 页就填一个 provider key
./dev.sh start # 后端 :8780,前端 :5173,热更新

打开 http://127.0.0.1:5173。首次运行会创建 venv、安装依赖,并在 backend/data/ 下生成 dev-token(ingest)和 dev-access-token(页面/Agent)。

常用命令:

./dev.sh status # 是否在跑 ./dev.sh logs # 后端日志 ./dev.sh token # ingest token,给 cpctl ./dev.sh access-token # 页面 token ./dev.sh reset # 清空本地数据(会确认)

上报一个 session

cpctl 只负责上报,从不运行 agent。装好之后:

python -m pip install -e sdk/cpctl

export CSD_BASE_URL=http://127.0.0.1:8780
export CSD_INGEST_TOKEN=$(cat backend/data/dev-token)

cpctl session start --agent claude_code --title "Fix the flaky test" --project demo
cpctl event -m "Reading the code"
cpctl event --type awaiting_user -m "needs approval to run the migration"
cpctl session finish --status completed --summary "12 tests pass" --exit-code 0

session finish 的状态是 completed / failed / interrupted。一旦进入终态就不会被后续事件改回去——这是故意的,否则最终结论会取决于网络到达顺序。awaiting_user 是事件而不是状态,所以下一次任意事件都能把它清掉。

同理,turn_completed 也是事件:它表示 agent 完成了一轮回复,但进程还开着(编辑器里的 Claude Code 就是这种形态)。页面把它显示成 idle,状态仍然是 running——进程确实还在——等你下一条 prompt 上报 progress 时自动清掉。

还有一种 task_completed / task_failed 也是事件,而且必须由知道任务结果的一方上报:agent 正常退出、测试却是红的,这种"跑完了但活没干成"没有任何 runtime 会告诉你。agent 可以用 csd-agent skill install 装好的 bash ~/.csd/bin/csd-cpctl task done|failed -m "..." 自己报(bash 是显式的:launcher 是 shell 脚本,Windows 下 agent 的 shell 可能是 PowerShell);也可以用 run-agent.sh --verdict "pytest -q" 让校验命令的退出码来判定,或者由编排方直接上报。
它可以落在 session 已经 completed 之后,页面照样把这条放进 needs attention;状态列仍然诚实地写着进程是怎么结束的。为了让 agent 报完 verdict 之后紧跟的 turn_completed 不把它盖掉,服务端单独投影了 last_verdict。见 docs/design.md §40。

needs attention 以前只能进不能出:failed / interrupted 的行没有任何可点的动作,而 interrupted 最常见的来源恰恰是 connector 发现进程消失后自己写的。现在详情页可以 Dismiss——它表示"我看到了,这里没有我的事了",记录的是人读过了,而不是任务结果,所以不改变 status、不写事件、也不动 updated_at。行会落到 Finished(仍在跑的回到 Running),并没有消失;而且服务端记的是 "dismiss 时最新的事件 id"这种水印:之后任何更新的报告(比如关闭后才到的 task_failed)都会让它重新回到 needs attention,heartbeat 不会。Dismiss 是单向的——没有单独的撤回接口,因为更新的报告就是回来的路。见 docs/design.md §42。

要接入一个真实在跑的 agent,而不是手写上报:

- Claude Code:用 sdk/csd-agent,一条命令安装 tunnel、存活探针和 hooks,见 sdk/csd-agent/README.md。
- 任意命令:用 run-agent.sh 包一层,它会在 agent 启动前开 session,退出后用真实 exit code 关闭 session,不改变 agent 本身的行为。
- nanobot:只作为 Agent tab 的 personal agent,不作为 coding session 上报——它的角色是"你对话的那个 agent",不是被观测的工作,所以没有对应的 hook。

装到手机上

Agenest 是 PWA:同一个 URL,可安装、独立窗口、下次打开自动更新,不需要应用商店,也不需要为每个平台单独打包。

1. 先部署到 HTTPS 地址。 本地 dev server 不够——service worker 和 Android 的安装提示都要求 secure context。推荐 Tailscale,完整部署见 deploy/README.md,然后在服务器上:
sudo tailscale serve --bg 8780 # 仅 tailnet
或:sudo tailscale funnel --bg 8780 # 公网;先把 CSD_DASHBOARD_TOKEN 设好

2. 手机打开 https://<host>.<tailnet>.ts.net/,输入一次页面 token;也可以直接用 https://<host>.<tailnet>.ts.net/#token=<token>。
3. iOS:Safari → 分享 → 添加到主屏幕。Android:Chrome → ⋮ → 安装应用。
4. 以后部署新版本,关掉 App 再打开就是新界面;/api 从不缓存,看到的永远是服务端最后上报的状态。外壳和 sw.js 走 no-cache(每次重新校验),/assets/* 才是一年 immutable,所以新版本不会卡在手机的 HTTP 缓存里;新 worker 接管时页面会自动重载一次。这次策略生效之前就装好的 App,可能要把 App 彻底关掉一次才会拿到新缓存规则。

安装出来的 App 有自己的存储容器,浏览器标签页里输过的 token 不一定带过去,在 App 里再输一次即可。直接用 http://<局域网IP>:8780 能打开页面,但不能安装、也没有离线外壳。

Agent 页

Agent 页默认连 native:一个由本服务自己启动的 Pi 进程,只需要:

npm i -g @earendil-works/pi-coding-agent

Pi 需要 Node 22.19+(前端本身只要 18+)。然后在 .env 里放一个 provider key(例如 DEEPSEEK_API_KEY)。设置面板可以切换:

| 后端 | 说明 |
| native | 内置 Pi 进程,默认;工作目录默认是空 scratch 目录,用 CSD_PI_WORKSPACE 指向真实代码 |
| nanobot | 连它自己的 websocket channel;可以让 nanobot 自己登记,不需要改配置或重启 |
| openclaw | OpenClaw Gateway WebSocket |
| hermes | Hermes API server(HTTP + SSE) |

Agent 页的行为边界、工具权限和记忆机制都在 docs/design.md §17–§27,这里不再重复。简单说:它是一个通往 personal agent 的通道,不是一个内嵌的 agent 框架。

对话可以收发文件。 输入框左边的 + 可以选图片或文件,发送后图片直接在气泡里显示,其他文件显示成卡片;点卡片会用手机的系统分享面板打开(浏览器不支持时退化为下载),旁边的箭头是直接下载。反方向:agent 把文件写进它的 outbox 目录,一轮结束时服务会把它变成会话里的附件——它只是写在工作目录里的文件不会被发送,因为「agent 写过」不等于「agent 想交给你」。机制和取舍见 docs/design.md §29。

配置

所有配置都走环境变量,没有写死在代码里的地址。完整的带注释列表在 .env.example,常见的几个:

| 变量 | 默认 | 作用 |
| CSD_INGEST_TOKEN | 必填 | 写入凭据;服务没有它会拒绝启动 |
| CSD_HOST / CSD_PORT | 127.0.0.1 / 8780 | 监听地址,默认只绑 loopback |
| CSD_DASHBOARD_TOKEN | 不设 | 页面与 Agent 的访问 token;不设时读开放、会动手的路由 403 |
| CSD_DB_PATH | backend/data/csd.sqlite3 | SQLite 文件,唯一持久状态 |
| CSD_STATIC_DIR | 不设 | 构建后的前端目录;不设则只提供 API |
| CSD_AGENT_BACKEND | native | 默认 personal agent |
| CSD_PI_WORKSPACE | 不设 | native 的工作目录;默认空 scratch 目录 |
| CSD_ATTACHMENTS_DIR | 数据库旁的 attachments/ | 会话收发的文件:上传、agent 的 outbox、已送达文件 |
| CSD_ATTACHMENT_MAX_MB | 25 | 单个文件大小上限,上传时边写边计数 |

部署

服务端只需要 Python 3.11+ 和 systemd,不需要 Node(前端在本地构建后上传)。安装脚本可重复执行,升级就是再跑一次:

cd frontend && npm ci && npm run build && cd ..
tar --exclude='.git' --exclude='.venv' --exclude='node_modules' \
--exclude='__pycache__' --exclude='.env' --exclude='data' \
--exclude='backend/data' -czf /tmp/agenest.tgz -C .. agenest

scp /tmp/agenest.tgz <user>@<host>:/tmp/
ssh <user>@<host> \
'rm -rf /opt/csd && mkdir -p /opt/csd && \
tar -xzf /tmp/agenest.tgz -C /opt/csd --strip-components=1 && \
cd /opt/csd && sudo bash deploy/deploy.sh install'

frontend/dist 必须一起上传:服务器上没有 Node,装不了前端。deploy.sh 会创建 venv 和 csd 服务用户、同步代码、复制静态文件、写 /etc/csd/csd.env(已存在则不覆盖)、安装 systemd unit 并验证,但不会动 SQLite 和历史数据。

完整的服务器要求、Tailscale 配置、Agent 页启用和排错见 deploy/README.md。

文档

| 文件 | 内容 |
| docs/design.md | 所有被拒绝的“显而易见方案”和原因;架构规则的权威来源 |
| docs/design-ui.md | 双主题 token 系统和界面规则 |
| docs/agent-onboarding.md | nanobot / OpenClaw / Hermes 的协议实测记录 |
| sdk/csd-agent/README.md | Claude Code 宿主机侧的安装、探针和凭据 |
| deploy/README.md | 部署、systemd、Tailscale、排错 |

License

MIT,见 LICENSE。
预览分享卡片长什么样 ↓GZY-SUPER-HACKER/agenest
分享 · DeepSeek Harness Hub
GZY-SUPER-HACKER/agenest

Agenest 是一个手机优先的 coding agent control plane,以 PWA…

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部