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

技能分派治理层 jeremy9682/agent-skill-advisor-layer

DeepSeek Harness
jeremy968270 天前有提交已提供中文文档扫描:高危

按任务成本自动分派并治理高开销技能调用

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

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

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

状态速览

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

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0
🔴 扫描:高危尚无人工评估

静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。

命令参数由运行时变量拼接读写/删除本地文件
查看扫描证据(共 74 处,展示前 70 条)
  • 执行外部命令来自配置/变量
    gateway/local-gateway.mjs:102
    const result = spawnSync(args[0], args.slice(1), {
  • 读取本地文件
    gateway/local-gateway.mjs:117
    if (name.includes("/")) return existsSync(name) ? name : null;
  • 读取本地文件
    gateway/local-gateway.mjs:121
    if (existsSync(candidate)) return candidate;
  • 读取本地文件
    gateway/local-gateway.mjs:139
    if (!existsSync(settingsPath)) return null;
  • 读取本地文件
    gateway/local-gateway.mjs:142
    text = readFileSync(settingsPath, "utf8");
  • 读取本地文件
    gateway/local-gateway.mjs:154
    if (!existsSync(manifest)) return false;
  • 读取本地文件
    gateway/local-gateway.mjs:156
    const json = JSON.parse(readFileSync(manifest, "utf8"));
  • 执行外部命令来自配置/变量
    gateway/local-gateway.mjs:252
    const child = spawn(command, args, {
  • 执行外部命令来自配置/变量
    gateway/local-gateway.mjs:354
    const child = spawn(bins.cursorAcp, ["acp"], {
  • 写入本地文件
    gateway/local-gateway.test.mjs:71
    writeFileSync(stub, "#!/bin/sh\necho dsh-stub-0.0.0\n");
  • 写入本地文件
    gateway/local-gateway.test.mjs:72
    chmodSync(stub, 0o755);
  • 写入本地文件
    gateway/local-gateway.test.mjs:99
    mkdirSync(join(dshHome, "profiles", "headless"), { recursive: true });
  • 写入本地文件
    gateway/local-gateway.test.mjs:100
    writeFileSync(
  • 写入本地文件
    gateway/local-gateway.test.mjs:104
    writeFileSync(
  • 写入本地文件
    gateway/local-gateway.test.mjs:122
    mkdirSync(join(dshHome, "profiles", "headless"), { recursive: true });
  • 删除本地文件递归
    plugins/dsh-llm-cursor-acp/dist/adapter.js:342
    await rm(privateRoot, { recursive: true, force: true });
  • 删除本地文件递归
    plugins/dsh-llm-cursor-acp/dist/adapter.js:370
    await rm(bridge.privateRoot, { recursive: true, force: true }).catch(() => { });
  • 删除本地文件递归
    plugins/dsh-llm-cursor-acp/dist/adapter.js:412
    await rm(bridge.privateRoot, { recursive: true, force: true });
  • 写入本地文件
    plugins/dsh-llm-cursor-acp/dist/catalog-store.js:13
    await mkdir(dirname(path), { recursive: true, mode: 0o700 });
  • 写入本地文件
    plugins/dsh-llm-cursor-acp/dist/catalog-store.js:15
    await writeFile(temporary, `${JSON.stringify(value, null, 2)}\n`, { mode: 0o600 });
  • 写入本地文件
    plugins/dsh-llm-cursor-acp/dist/catalog-store.js:16
    await rename(temporary, path);
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/dist/catalog-store.js:63
    const raw = await readFile(this.catalogPath, 'utf8');
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/dist/cli.js:31
    const runtimeBin = existsSync(siblingRuntime)
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/dist/cli.js:81
    && await access('/usr/bin/sandbox-exec').then(() => true, () => false);
  • 写入本地文件
    plugins/dsh-llm-cursor-acp/dist/cursor-probe.js:40
    await mkdir(join(home, 'Library'), { recursive: true, mode: 0o700 });
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/dist/cursor-probe.js:59
    const [confinedRoot, confinedHome] = await Promise.all([realpath(root), realpath(home)]);
  • 写入本地文件
    plugins/dsh-llm-cursor-acp/dist/cursor-probe.js:60
    await writeFile(profilePath, cursorSeatbeltProfile(launch.installRoot, confinedRoot, hostHome, confinedHome), { mode: 0o600 });
  • 删除本地文件递归
    plugins/dsh-llm-cursor-acp/dist/cursor-probe.js:63
    await rm(root, { recursive: true, force: true });
  • 执行外部命令固定命令
    plugins/dsh-llm-cursor-acp/dist/cursor-probe.js:67
    const child = spawn('/usr/bin/sandbox-exec', ['-f', profilePath, launch.command, ...launch.args], {
  • 删除本地文件递归
    plugins/dsh-llm-cursor-acp/dist/cursor-probe.js:146
    await rm(root, { recursive: true, force: true });
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/dist/cursor-runtime.js:34
    for await (const chunk of createReadStream(path))
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/dist/cursor-runtime.js:58
    const launcher = await realpath(command);
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/dist/cursor-runtime.js:59
    const source = await readFile(launcher, 'utf8');
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/dist/cursor-runtime.js:68
    await Promise.all([lstat(node), lstat(indexPath)]);
  • 写入本地文件
    plugins/dsh-llm-cursor-acp/dist/cursor-runtime.js:148
    await mkdir(library, { recursive: true, mode: 0o700 });
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/dist/cursor-runtime.js:177
    const [confinedRoot, confinedHome] = await Promise.all([realpath(privateRoot), realpath(privateHome)]);
  • 写入本地文件
    plugins/dsh-llm-cursor-acp/dist/cursor-runtime.js:179
    await writeFile(profilePath, cursorSeatbeltProfile(launch.installRoot, confinedRoot, options.hostHome, confinedHome), { mode: 0o600 });
  • 执行外部命令来自配置/变量
    plugins/dsh-llm-cursor-acp/dist/cursor-runtime.js:183
    return spawn(command, args, {
  • 写入本地文件
    plugins/dsh-llm-cursor-acp/dist/cursor-runtime.js:274
    await mkdir(join(privateRoot, 'tmp'), { recursive: true, mode: 0o700 });
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/dist/index.js:29
    export const DEFAULT_RUNTIME_BIN = existsSync(siblingRuntimeBin)
  • 删除本地文件递归
    plugins/dsh-llm-cursor-acp/src/adapter.ts:421
    await rm(privateRoot, { recursive: true, force: true })
  • 删除本地文件递归
    plugins/dsh-llm-cursor-acp/src/adapter.ts:440
    await rm(privateRoot, { recursive: true, force: true })
  • 删除本地文件递归
    plugins/dsh-llm-cursor-acp/src/adapter.ts:465
    await rm(bridge.privateRoot, { recursive: true, force: true }).catch(() => {})
  • 删除本地文件递归
    plugins/dsh-llm-cursor-acp/src/adapter.ts:505
    await rm(bridge.privateRoot, { recursive: true, force: true })
  • 写入本地文件
    plugins/dsh-llm-cursor-acp/src/catalog-store.ts:40
    await mkdir(dirname(path), { recursive: true, mode: 0o700 })
  • 写入本地文件
    plugins/dsh-llm-cursor-acp/src/catalog-store.ts:42
    await writeFile(temporary, `${JSON.stringify(value, null, 2)}\n`, { mode: 0o600 })
  • 写入本地文件
    plugins/dsh-llm-cursor-acp/src/catalog-store.ts:43
    await rename(temporary, path)
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/src/catalog-store.ts:87
    const raw = await readFile(this.catalogPath, 'utf8')
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/src/cli.ts:36
    const runtimeBin = existsSync(siblingRuntime)
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/src/cli.ts:90
    && await access('/usr/bin/sandbox-exec').then(() => true, () => false)
  • 写入本地文件
    plugins/dsh-llm-cursor-acp/src/cursor-probe.ts:65
    await mkdir(join(home, 'Library'), { recursive: true, mode: 0o700 })
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/src/cursor-probe.ts:90
    const [confinedRoot, confinedHome] = await Promise.all([realpath(root), realpath(home)])
  • 写入本地文件
    plugins/dsh-llm-cursor-acp/src/cursor-probe.ts:91
    await writeFile(profilePath, cursorSeatbeltProfile(launch.installRoot, confinedRoot, hostHome, confinedHome), { mode: 0o600 })
  • 删除本地文件递归
    plugins/dsh-llm-cursor-acp/src/cursor-probe.ts:93
    await rm(root, { recursive: true, force: true })
  • 执行外部命令固定命令
    plugins/dsh-llm-cursor-acp/src/cursor-probe.ts:97
    const child = spawn('/usr/bin/sandbox-exec', ['-f', profilePath, launch.command, ...launch.args], {
  • 删除本地文件递归
    plugins/dsh-llm-cursor-acp/src/cursor-probe.ts:165
    await rm(root, { recursive: true, force: true })
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/src/cursor-runtime.ts:63
    for await (const chunk of createReadStream(path)) digest.update(chunk)
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/src/cursor-runtime.ts:96
    const launcher = await realpath(command)
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/src/cursor-runtime.ts:97
    const source = await readFile(launcher, 'utf8')
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/src/cursor-runtime.ts:106
    await Promise.all([lstat(node), lstat(indexPath)])
  • 写入本地文件
    plugins/dsh-llm-cursor-acp/src/cursor-runtime.ts:195
    await mkdir(library, { recursive: true, mode: 0o700 })
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/src/cursor-runtime.ts:227
    const [confinedRoot, confinedHome] = await Promise.all([realpath(privateRoot), realpath(privateHome)])
  • 写入本地文件
    plugins/dsh-llm-cursor-acp/src/cursor-runtime.ts:229
    await writeFile(profilePath, cursorSeatbeltProfile(launch.installRoot, confinedRoot, options.hostHome, confinedHome), { mode: 0o600 })
  • 执行外部命令来自配置/变量
    plugins/dsh-llm-cursor-acp/src/cursor-runtime.ts:233
    return spawn(command, args, {
  • 写入本地文件
    plugins/dsh-llm-cursor-acp/src/cursor-runtime.ts:354
    await mkdir(join(privateRoot, 'tmp'), { recursive: true, mode: 0o700 })
  • 读取本地文件
    plugins/dsh-llm-cursor-acp/src/index.ts:40
    export const DEFAULT_RUNTIME_BIN = existsSync(siblingRuntimeBin)
  • 执行外部命令来自配置/变量
    server/dsh-mcp.mjs:40
    const result = spawnSync(args[0], args.slice(1), { encoding: "utf8", timeout: 30000 });
  • 执行外部命令表达式求值
    server/dsh-mcp.mjs:54
    const child = spawn(...dsh.args, ["--profile", PROFILE, task], {
  • 读取本地文件
    server/dsh-mcp.mjs:159
    profile_present: existsSync(profileManifest),
  • 读取本地文件
    server/dsh-mcp.mjs:160
    acp_profile_present: existsSync(join(dshHome, "profiles", "acp", "package.json")),
扫描于 2026/11/3(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

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

功能亮点

  • 按任务成本自动分派
  • 治理高开销技能调用
  • 主动路由与治理

面向高成本智能体技能的主动路由与治理层

README

由 DeepSeek 最新模型翻译生成
Skill Advisor Layer 模型分派 canon + 本机对接套件。 一个公开仓库:clone 之后跑 ./scripts/install.sh,定级策略、agent-run-dispatch、DSH 插件、ZCode/MCP 网关都在这棵树里。不必再 clone 我们其它仓。 English README Quick Start 必装: 已有 Cursor 或 Claude 或 Codex 订阅(以及对应 CLI)。可选:官方 DeepSeek Harness。LiteLLM 不是必装项,不在这条路径上。 git clone https://github.com/jeremy9682/agent-skill-advisor-layer.git cd agent-skill-advisor-layer ./scripts/install.sh install.sh 会: 1. 安装本 clone 的启动器与 ledger。若 ~/.local/bin/agent-run 已被占用(硬失败 wrapper,或历史上的 Beads agent_run_beads_bridge.py),原文件不动,改为安装 ~/.local/bin/agent-run-dispatch。
展开完整文档(README 剩余 1 节)
Skill Advisor Layer

模型分派 canon + 本机对接套件。 一个公开仓库:clone 之后跑 ./scripts/install.sh,定级策略、agent-run-dispatch、DSH 插件、ZCode/MCP 网关都在这棵树里。不必再 clone 我们其它仓。

English README

Quick Start

必装: 已有 Cursor 或 Claude 或 Codex 订阅(以及对应 CLI)。可选:官方 DeepSeek Harness。LiteLLM 不是必装项,不在这条路径上。

git clone https://github.com/jeremy9682/agent-skill-advisor-layer.git
cd agent-skill-advisor-layer
./scripts/install.sh

install.sh 会:

1. 安装本 clone 的启动器与 ledger。若 ~/.local/bin/agent-run 已被占用(硬失败 wrapper,或历史上的 Beads agent_run_beads_bridge.py),原文件不动,改为安装 ~/.local/bin/agent-run-dispatch。ledger 同理:agent-ledger 被占用时装 agent-ledger-dispatch;只有空闲时才链 agent-ledger。
2. 若 PATH 上有 dsh,对 web 和 headless 执行 dsh plugin add:本 clone 的 plugins/dsh-dispatch-pack 与 plugins/dsh-llm-cursor-acp,再从已装 DSH 的 node_modules 把 @deepseek-ai/schemastery、@deepseek-ai/dsh-skill-filesystem 链到本仓 gitignore 的 node_modules。
3. 跑 node gateway/local-gateway.mjs doctor。

日常命令(本 clone)

PATH 上的 agent-run 是硬失败陷阱(exit 2),不要拿它做分派。 旧 Beads 编排用 agent-run-beads。日常分派用 -dispatch 名字:

cd
./scripts/install.sh
agent-run-dispatch routes
agent-run-dispatch doctor --task-shape mechanical
python3 scripts/agent_ledger.py open … # 或 agent-ledger-dispatch
python3 scripts/agent_ledger.py claim …
agent-run-dispatch run auto --task-shape mechanical --checkpoint-event "$EVT" --cwd "$PWD" --timeout-seconds 480 '…read-only…'

node gateway/local-gateway.mjs run --via agent-run 不是日常入口:它不带 checkpoint,而且 PATH agent-run 会硬失败。需要网关打到本 canon 时,设 AGENT_RUN_BIN 指向 agent-run-dispatch(或本 clone 的 scripts/agent_provider_run.py)。旧 Beads 编排用 agent-run-beads。

| 命令 | 典型目标 | Canon |
| agent-run | 硬失败 wrapper(stderr 警告后 exit 2) | 防止误走 Beads / Grok 4.5 |
| agent-run-beads | Beads 桥 → ~/.agent-skill-advisor-layer-governance-clean | Grok 4.5;旧 Beads 编排 |
| agent-run-dispatch | 本 clone scripts/agent_provider_run.py | Grok 4.6 + stage_gate |
| agent-ledger | 常常也是 governance-clean | 被占用就别动 |
| agent-ledger-dispatch | 本 clone scripts/agent_ledger.py | 本 clone 的 ledger |

不要去改 governance-clean 那棵 git 树。

Headless 插件 peer

若 dsh --profile headless 启动失败(Cannot find module '@deepseek-ai/schemastery' 或 @deepseek-ai/dsh-skill-filesystem):

1. 安装官方 DSH:npm i -g @deepseek-ai/dsh
2. 再跑 ./scripts/install.sh(从 DSH 的 node_modules 做 gitignored 链接)
3. 或在本 clone:npm install --no-save @deepseek-ai/schemastery @deepseek-ai/dsh-skill-filesystem

不要把 node_modules 提交进 git。家目录手工 symlink 不是受支持的安装路径。

node gateway/local-gateway.mjs doctor

官方 DSH:npm i -g @deepseek-ai/dsh,见 docs/harness-opt-in.md。不必再 clone dsh-skill-pack、dsh-cursor-codex 或 harness fork。可选额度代理(非必装):docs/litellm-proxy.md / examples/litellm/(配置拷到 git 外;不要提交密钥)。本机 VPN/DNS 可能把 api.commandcode.ai 解析到 198.18.0.123。GET /v1/models 必须带 LiteLLM master key。

本 clone 提供:

routing-policy.yaml 机器 canon(task_shape → 席位/模型) scripts/agent_provider_run.py agent-run-dispatch 启动器 scripts/agent_ledger.py agent-ledger-dispatch 助手 scripts/install.sh 一次安装 skills/dsh-dispatch/ 可移植分派 skill skills/skill-advisor/ 高成本 skill 建议层 skills/zcode-delegate-to-dsh/ ZCode → 本机插座 gateway/ dsh / agent-run / cursor-acp 薄 CLI server/dsh-mcp.mjs MCP stdio(dsh_delegate / dsh_health) plugins/dsh-dispatch-pack/ 给 dsh plugin add 的 Cordis 包 plugins/dsh-llm-cursor-acp/ DSH 的 Cursor ACP adapter(MIT,无 node_modules) templates/zcode/ MCP 配置片段 examples/litellm/ 可选 LiteLLM 示例 docs/model-dispatch-matrix.md 散文矩阵 VENDOR.md 薄层来源

来源说明:VENDOR.md。ZCode / Cloud 边界:docs/zcode-cloud-gateway.md。DSH 入口:docs/dsh.md。

为什么需要 skill advisor

装了很多 skill 后,系统通常会走向两个极端:

- 太被动:有用的 skill 已经安装,但用户不点名就从来不会被建议。
- 太激进:Agent 一次加载或运行太多 skill,浪费上下文,也可能造成副作用。

这个 repo 仍然提供中间层:

1. 识别高成本 skill 的强触发信号。
2. 只主动建议一个最相关的 workflow。
3. 等用户明确批准后才执行。
4. 小任务、紧急任务、无关任务时保持安静。

可跨 Codex、Claude Code 和其他 agent 共享的 skill-first 标准:

- Skill-first workflow standard
- Task routing
- Gate policy
- Intent statement schema
- Solution note schema
- OSS 参考政策 — 调研与原型阶段按技术价值判断;共享正文只保留在这一处。

仓库所有权

本公共仓库是唯一的治理 canon 也是可安装的对接套件:路由策略、provider 绑定、schema、gate、健康检查、orchestrator 薄适配器、本机网关、MCP、以及 DSH 插件。可执行 DAG 调度器及其 package/CI 放在独立的私有 agent-run-orchestrator 仓库;本仓库通过 orchestrator.lock.json 精确固定已审核的私有 commit。

运行证据只留本机。journal、checkpoint ledger、provider session、凭据、临时 worktree、prompt、response 和 review bundle 都不得提交。这样既能公开审查治理规则,又不会暴露 provider/运行时内部信息,也不会产生第二套路由真相源。

升级私有运行时时,应先审核并测试新的私有 commit,再只更新本仓库的 orchestrator.lock.json,并回归公共 adapter 与治理测试。不要把 routing policy 复制进私有 package。

默认覆盖的高成本 Skill

| Skill | 什么时候建议 | 默认动作 |
| huashu-agent-swarm | 大型、多模块、可并行的任务,例如后端、前端、测试、文档、QA 一起推进 | 只建议 |
| gstack-pair-agent | 需要另一个 Agent 共享浏览器、页面或真实 QA 上下文 | 只建议 |
| gstack-retro | 一周、一个 sprint、一次部署或大修复序列结束后复盘 | 只建议 |
| gstack-setup-gbrain | 配置长期项目脑、gbrain 或 MCP-backed memory | 只建议 |
| no-mistakes | safe push、release gate、PR/CI validation 或 no-mistakes validation | 只建议 |
| lfg | 从 plan 到 PR 的 hands-off 自主管线 | 只建议 |
| ship / overnight-execution | 面向生产或长时间自主执行 | 只建议 |

如果你的本地 skill 名称不同,可以改 skills/skill-advisor/SKILL.md。

给 Codex / Claude 的 skill 文件

Codex:

mkdir -p ~/.codex/skills/skill-advisor ~/.codex/skills/dsh-dispatch
cp skills/skill-advisor/SKILL.md ~/.codex/skills/skill-advisor/SKILL.md
cp skills/dsh-dispatch/SKILL.md ~/.codex/skills/dsh-dispatch/SKILL.md

Claude Code:

mkdir -p ~/.claude/skills/skill-advisor ~/.claude/skills/dsh-dispatch
cp skills/skill-advisor/SKILL.md ~/.claude/skills/skill-advisor/SKILL.md
cp skills/dsh-dispatch/SKILL.md ~/.claude/skills/dsh-dispatch/SKILL.md

然后把 examples/AGENTS.codex.snippet.md 加到全局或项目 AGENTS.md。Claude 项目可用 examples/CLAUDE.snippet.md 和 examples/CLAUDE.settings.local.example.json。

使用方式

强信号出现时,Agent 应说:

This looks like a candidate for because . I can run it if you approve.

在用户明确说 run / start / enable / pair / set up / launch 该 workflow 之前,不要执行。

本地审计

python3 scripts/skill_audit.py --write-manifest --report --syntax-check --dry-run-sync

审计在本机运行,不上传文件。生成的 manifest / report 可能含本地路径,发布前请审阅。

QA

python3 -m py_compile scripts/skill_audit.py
python3 -m pytest tests
node --test gateway/local-gateway.test.mjs

黑盒用例见 docs/qa-matrix.md。

License

MIT。vendored 文件保留原版权声明,见 VENDOR.md。
预览分享卡片长什么样 ↓jeremy9682/agent-skill-advisor-layer
分享 · DeepSeek Harness Hub
jeremy9682/agent-skill-advisor-layer

按任务成本自动分派并治理高开销技能调用

这是你的仓库?认领条目

回到顶部