按任务成本自动分派并治理高开销技能调用
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
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 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。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
jeremy9682/agent-skill-advisor-layer
按任务成本自动分派并治理高开销技能调用
相关插件 · 技能 / 提示词
人设统管ZiChuanLan/agent-purge
一份人设,统一管理多个 coding agent。
★ 1,141已汉化DSH
74.1
人物画像蒸馏titanwings/distilly
Distilly — 把他们的思考方式提炼成可复用的技能,供任何智能体或机器人使用。原名 Colleague Skill(原同事 Skill)。
★ 25,659已汉化DSH
71.3
推理工作空间套件Tiger3807861189/J-Space-Cognition-Suite
J-Space 是面向复杂推理、大型仓库工程、子代理协作与授权安全分析的推理时工作空间和控制套件。
★ 2,957已汉化DSH
70.5
两阶段工具锚定预设xiaobright/dsh-anchored-standard
实验性 DeepSeek Harness agent preset…
★ 3,742已汉化DSH
70.1
智能体工作流编排nrslib/takt
不再日夜盯着 AI 编码智能体。
★ 1,402已汉化DSH
70
Agent 运行时手册Electricitysheep/dsh-handbook
DeepSeek Harness dsh 从 0 到 1 深度手册:安装/插件开发/性能调优/实测案例/同模型多…
★ 827已汉化DSH
68.7
这是你的仓库?认领条目