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

编码代理控制台 dat-lequoc/codesk

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

集中运行监控并远程控制本地或服务器上的编码代理

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

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

该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dat-lequoc/codesk
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · ui
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 69 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包codesk(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/24 17:57:37

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令发起外部网络请求
查看扫描证据(共 42 处,展示前 18 条)
  • 发起网络请求
    bin/codesk.mjs:17
    const response = await fetch(`${url}/api/health`, { signal: AbortSignal.timeout(600) })
  • 执行外部命令来自配置/变量
    bin/codesk.mjs:29
    const child = spawn(pnpm, ['run', 'start:web'], {
  • 发起网络请求
    server/drafts.mjs:5
    const run = await gateway.request(draft.hostId, '/v1/runs', { method: 'POST', body: JSON.stringify(input), timeout: 30000 })
  • 执行外部命令来自配置/变量
    server/gateway.mjs:104
    const child = spawn(binary, [], { cwd: process.cwd(), env: { ...process.env, CODESK_PORT: String(host.daemonPort), CODESK_OWNER_PID: String(process.pi
  • 发起网络请求
    server/gateway.mjs:139
    const response = await fetch(`${this.endpoint(host)}/v1/health`, { signal: AbortSignal.timeout(2500) })
  • 执行外部命令固定命令
    server/gateway.mjs:270
    const child = spawn('ssh', args, { stdio: ['ignore', 'ignore', 'pipe'] })
  • 发起网络请求
    server/gateway.mjs:531
    const response = await fetch(`${this.endpoint(host)}${daemonPath}`, { ...options, headers: { 'content-type': 'application/json', ...this.authHeaders(h
  • 发起网络请求
    server/routes.mjs:38
    app.post('/api/projects', async (req, res) => { try { const project = await gateway.request(req.body.hostId, '/v1/projects', { method: 'POST', body: J
  • 发起网络请求
    server/routes.mjs:39
    app.delete('/api/projects/:hostId/:projectId', async (req, res) => { try { const result = await gateway.request(req.params.hostId, `/v1/projects/${enc
  • 发起网络请求
    server/routes.mjs:63
    app.get('/api/hosts/:hostId/files', async (req,res)=>{try{res.json(await gateway.request(req.params.hostId,`/v1/files?path=${encodeURIComponent(req.qu
  • 发起网络请求
    server/routes.mjs:64
    app.get('/api/hosts/:hostId/file', async (req,res)=>{try{res.json(await gateway.request(req.params.hostId,`/v1/file?path=${encodeURIComponent(req.quer
  • 发起网络请求
    server/routes.mjs:65
    app.post('/api/hosts/:hostId/projects/discover', async (req,res)=>{try{res.json(await gateway.request(req.params.hostId,'/v1/projects/discover',{metho
  • 发起网络请求
    server/routes.mjs:66
    app.get('/api/hosts/:hostId/agents', async (req,res)=>{try{res.json((await gateway.request(req.params.hostId,'/v1/agents/discover')).map((item)=>mapAg
  • 执行外部命令来自配置/变量
    server/routes.mjs:94
    app.post('/api/open-path', async (req,res)=>{try{const host=store.state.hosts.find((item)=>item.id===req.body.hostId);if(!host)throw new Error('Host n
  • 发起网络请求
    server/state-cache.mjs:18
    const [hostProjects, hostRuns, capabilities, discoveredAgents] = await Promise.all([gateway.request(host.id, '/v1/projects'), gateway.request(host.id,
  • 发起网络请求
    server/state-cache.mjs:21
    try { return await gateway.request(host.id, `/v1/projects/${project.id}/sessions?limit=${SESSION_PAGE_SIZE}`, { timeout: 12000 }) }
  • 发起网络请求
    server/state-cache.mjs:133
    const hostRuns = await gateway.request(hostId, '/v1/runs')
  • 发起网络请求
    src/api.ts:24
    const response = await fetch(`${gatewayOrigin}${path}`, {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

1 张 · 点击查看大图

功能亮点

  • 集中运行监控
  • 远程控制编码代理
  • 管理本地或远程智能体

开源控制平面,管理本地或远程的编码智能体。

README

由 DeepSeek 最新模型翻译生成
Codesk 面向编码代理的开源控制平面,支持本地或远程。 Codesk 是一款桌面应用,用于在一个地方运行、监控、检查和控制编码代理框架。代理保留在项目所在的机器上——你的笔记本电脑、工作站或 VPS——而 Codesk 通过本地或 SSH 进行连接。 平台支持 Web UI 模式(Linux、VPS、Tailscale、macOS) 直接从你的服务器、VPS 或本地机器运行 Web UI 模式: git clone https://github.com/dat-lequoc/codesk.git cd codesk pnpm install pnpm run build pnpm run start:web 或通过 CLI 二进制文件运行: codesk web 然后打开 http://127.0.0.1:4000。 网关绑定到回环地址,且自身没有身份验证——它持有守护进程令牌并代理到守护进程,因此任何能访问该端口的东西都可以启动代理。 要从另一台机器访问它,请在前面放置一个进行身份验证的东西。 Tailscale 是预期的选择: tailscale serve --bg 4000 这会将 UI 通过 HTTPS 发布到你的 tailnet,而不会发布给其他任何人。
展开完整文档(README 剩余 1 节)
Codesk

面向编码代理的开源控制平面,支持本地或远程。

Codesk 是一款桌面应用,用于在一个地方运行、监控、检查和控制编码代理框架。代理保留在项目所在的机器上——你的笔记本电脑、工作站或 VPS——而 Codesk 通过本地或 SSH 进行连接。

平台支持

Web UI 模式(Linux、VPS、Tailscale、macOS)

直接从你的服务器、VPS 或本地机器运行 Web UI 模式:

git clone https://github.com/dat-lequoc/codesk.git
cd codesk
pnpm install
pnpm run build
pnpm run start:web

或通过 CLI 二进制文件运行:

codesk web

然后打开 http://127.0.0.1:4000。

网关绑定到回环地址,且自身没有身份验证——它持有守护进程令牌并代理到守护进程,因此任何能访问该端口的东西都可以启动代理。
要从另一台机器访问它,请在前面放置一个进行身份验证的东西。
Tailscale 是预期的选择:

tailscale serve --bg 4000

这会将 UI 通过 HTTPS 发布到你的 tailnet,而不会发布给其他任何人。浏览器还会被限制在页面所服务的来源上;如果你用一个 tailnet 之外的名字作为前端,请设置 CODESK_WEB_ORIGINS=host[,host]。HOST=0.0.0.0 会绑定所有网络接口,只有在防火墙后面才是安全的。

macOS — 桌面应用

从源码构建并运行桌面应用:

git clone https://github.com/dat-lequoc/codesk.git
cd codesk
pnpm install
pnpm run desktop:build -- --debug --bundles app
open target/debug/bundle/macos/Codesk.app

Linux — 执行主机守护进程

Linux 支持作为本地或远程执行主机。将守护进程构建并安装为用户服务:

git clone https://github.com/dat-lequoc/codesk.git
cd codesk
cargo build --release -p codeskd
./target/release/codeskd install 4243

桌面客户端或 Web 网关通过本地或 SSH 连接到守护进程。

Windows

Windows 桌面和执行主机打包尚不支持。Codesk 目前依赖 macOS/Linux 的服务和进程管理原语。

支持的框架

Codesk 将 Codex、Claude Code、OpenCode、Kiro CLI、Pi、Antigravity、DeepSeek Harness 以及通用命令行代理整合到一个界面中。

Codex 通过其应用服务器获得一等支持:持久会话、实时控制、排队轮次、审批和输入请求、中断、恢复、分叉以及对话回溯。

你可以做什么

- 在一个地方监控每个框架。 无需切换终端即可跟踪运行中、空闲和历史会话。
- 查看智能体轨迹。 按时间顺序检查推理过程、命令、工具调用、文件变更、结果、用量以及原始提供方事件。
- 简洁的对话视图。 为运行时上下文注入、生成的文件、工具/bash 输出、结构化任务清单(todo_write)以及进行中的目标提供紧凑、可折叠的卡片。
- 即时尾页分页历史。 在毫秒内打开庞大的会话日志,并支持平滑分页以查看更早的历史记录,以及一个浮动的滚动到底部操作。
- 附件与媒体。 通过 + 按钮、拖放或剪贴板粘贴直接添加图片和文本文件。
- 在智能体工作时进行交互。 启动或恢复会话、引导当前轮次、排队下一条指令、响应请求,以及中断或终止运行。
- 通过 SSH 工作。 远程项目通过 codeskd 在其自己的主机上执行;Codesk 通过自动重建的 SSH 隧道进行连接,因此工具和文件始终靠近项目。
- 保持工作隔离。 在当前检出中运行,或使用可在应用中检查和清理的托管 Git 工作树。

核心规则很简单:执行跟随项目。Codesk 是查看器和控制器;智能体在代码所在之处运行。

为什么 Codesk 使用 tmux

交互式编码工具是终端应用程序,只有一个实时输入流。它们的记录文件非常适合渲染对话,但并不是发送新输入的安全方式。针对同一会话启动另一个 CLI 进程还可能产生相互竞争的写入者、提供方锁,或者出现对话看似已连接而输入却流向别处的情况。

因此,Codesk 使用 tmux 作为交互式会话的控制传输通道:

- 单一稳定的终端写入者。 工具在 tmux 内拥有一个伪终端,Codesk 将 Steer 和 Queue 输入发送到该终端,而不是启动第二个提供方进程。
- 在 UI 和 SSH 重连后仍能存活。 当桌面应用、网关或 SSH 隧道重新连接时,工具会在执行主机上继续运行。
- 本地和远程均可工作。 同一模型既适用于笔记本电脑,也适用于 SSH 服务器;执行和 tmux 始终位于项目旁边。
- 保持对话解析为提供方原生方式。 Codesk 仍从 Codex、Claude、Kiro、Pi 及其他会话的真实提供方记录中渲染它们。tmux 仅用于进程生命周期和终端输入。
- 明确的所有权。 新的 Codesk 运行使用 Codesk 拥有的隔离 tmux 套接字。现有用户 tmux 会话仅在选择 Enable control 后才会被控制,而普通终端会话仅在当前轮次空闲后才会迁移到 tmux。
- 可恢复的访问。 Environment 面板会显示 tmux 会话名称以及确切的本地或 SSH 附加命令,因此同一工具仍可直接从终端访问。
这让 Codesk 获得持久控制权,而无需替换 harness、发明并行的对话协议,或隐藏进程实际运行的位置。Enter 发送 Steer,Tab 添加一个持久的 Queue 项,Shift+Enter 插入换行。

Codesk 发送的每条提示都会保存在 shell 风格的历史记录中。在任何输入框中按 Up 可回溯已提交的内容,按 Down 可再次前进,包括回到输入框中原本的草稿。被 steer 的提示会进入一个可能将其丢弃的 harness TUI,因此这是将其找回的方式。

Kiro CLI 命令

Codesk 直接从 ACP 读取 Kiro 的命令目录,并在输入框中提供键盘优先的补全。输入 / 浏览命令,使用方向键选择一条命令,然后按 Tab 或 Enter 补全。/model 使用 Kiro 的实时模型列表,而 /effort 提供 low、medium、high、xhigh 和 max。当活动的 Kiro 对话足够大时,/compact 会对其进行压缩。

/usage 需要特殊处理,因为 Kiro 将其绘制为一个全屏终端面板,永远不会进入会话记录。在 tmux 控制的会话中,Codesk 读取该面板,将其作为使用情况快照报告到对话中(计划、已用额度与计划的对比,以及重置日期),然后关闭该面板,以便下一次 Enter 仍然 steer 同一个窗格。通过 ACP 驱动的会话则改为从 Kiro 的计费响应中报告相同的快照。

实时回归检查覆盖 Kiro 的 ACP 命令协议(pnpm run test:kiro-live)和真实的 tmux 终端路径(pnpm run test:kiro-tmux-live)。tmux 检查断言完整的 /usage 契约:一轮完成后会话仍保持连接到其窗格,使用情况快照携带真实额度数据到达,并且之后正常的 steer 仍然生效。

状态

桌面客户端目前在 macOS 上开发和测试。执行主机可以是 macOS 或 Linux,包括通过 SSH 访问的远程主机。

开发

pnpm install
cargo build -p codeskd
pnpm run dev

运行前端测试套件:

pnpm test # vitest
pnpm run check # tsc --noEmit && eslint src

运行守护进程和网关集成套件:

pnpm run test:backend

重新构建、安全替换并重新启动本地安装的应用:

pnpm run desktop:redeploy

远程守护进程

在已构建的 macOS 或 Linux 执行主机上:

codeskd install 4243

守护进程绑定到回环地址,并通过 SSH 转发访问。除 /v1/health 外的每条路由都需要它写入其数据目录、权限模式为 0600 的令牌,因此 API 访问权限取决于能否读取该文件——参见安全。

更多

- 架构
- 需求
- 路线图
- 性能基准
- 贡献
- 安全策略
- 许可证
预览分享卡片长什么样 ↓dat-lequoc/codesk
分享 · DeepSeek Harness Hub
dat-lequoc/codesk

集中运行监控并远程控制本地或服务器上的编码代理

这是你的仓库?认领条目

回到顶部