Skip to content
Back to skills

Agent Dispatch

ASecurity

User-invoked only: run it when the user explicitly asks to hand work to an external agent CLI, never on your own initiative. On enable it probes the machine first — which agent CLIs are on PATH, and which LLM each one runs, read from that CLI's own --help / --list-models, never from memory or this file — then asks the user, one question at a time, to pick the agents, their model modes, and whether to append. It drives the loop after that: a task brief carrying only checked-in artifact paths p...

  • 3 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added October 25, 2026
ai-agentsshellnodegit

Works with

  • cursor
  • cli

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 25, 2026

npx -y skills add NinjaSln-labs/agent-skills --skill agent-dispatch --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Agent Dispatch?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Agent Dispatch
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ninjasln-labs-agent-dispatch/badge)](https://www.skillsdirectory.com/skills/ninjasln-labs-agent-dispatch)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: agent-dispatch
description: >-
  User-invoked only: run it when the user explicitly asks to hand work to an external agent CLI,
  never on your own initiative. On enable it probes the machine first — which agent CLIs are on
  PATH, and which LLM each one runs, read from that CLI's own --help / --list-models, never from
  memory or this file — then asks the user, one question at a time, to pick the agents, their
  model modes, and whether to append. It drives the loop after that: a task brief carrying only checked-in artifact paths
  plus an output format, an isolated worktree, a background run, and admission only after the
  calling project's own gates pass. Four rules hold whoever is picked: no self-review, outputs gated
  before merge, briefs carry no secrets or handoff stores, and the current driver may do work but
  never audits this session's output. Use for 派给外部 agent / 换个模型来审 / 调遣 agent. NOT for: doing the work
  yourself, or accepting the output (that stays with the caller), or dispatching where no gates
  were declared — ask first.
slug: agent-dispatch
version: 1.5.6
displayName: agent-dispatch
disable-model-invocation: true
---

# Agent Dispatch(异构 agent 调遣)

外部 agent 是**被调遣的,不是裁定者**:合并权与闸责任始终在主会话。
本仓若另有约束本机制的决策记录(ADR 一类)⇒ **以该仓的决策记录为准**;与本件正文冲突时报用户裁决,不自行取舍。

## 第 0 步:探测本机可支配的 agent(启用即跑)

**每次启用都重探,不缓存上一轮结论**——工具升级会让旗标和模型都变,而规则 12 要求判据输入是当场落盘的命令输出,不是「谁记得」。

1. 探测起点(是搜索名单,不是事实清单):
   `mcode` `command-code` `pi` `qodercn` `claude` `codex` `gemini` `cursor-agent` `aider`。
2. 逐个 `command -v <cli>`;对存在者跑 `<cli> --help`(或 `-h`)。模型面按这个梯子往下试,**试到底再判「未知」**:
   `--list-models`/`--models` → 模型或 provider 子命令(`models`/`provider list`,能出 JSON 的加 `--json`)→
   该 CLI 自己在用户目录下的**缓存目录文件**(如 `~/.<tool>/cache/*models*.json`,看它的 `source` 与 `updatedAt`)。
   只试一条就下「未知」结论=探测偷懒(2026-10-05 实测:`mcode` 两条旗标都不支持,但它的缓存 catalog 里模型齐全)。
3. **模型归属只认该 CLI 自己打印出来的**。打印不出、或打印的是别名而不是模型名 ⇒ 表里写「模型未知,须问用户」,
   不得凭记忆、不得拿本文件或其他仓的记录当证据(那正是「二手摘要当依据」的形状)。
4. 非交互调用形同样现场复核:`-p` / `--print` / `exec` 一类,外加限轮、免落盘、结构化输出这些关键开关。
5. 判存活与判死要分清楚:无头模式常以 `node` 为进程名,按进程名 `pgrep -c` 匹配不到,须 `pgrep -f '<cli> -p'`。
6. 探测表**默认不打印**——它是过程产物,不是结论。命令必须真跑、输出真看过,
   但只把结论用于 Q1 候选与注入文本;用户要核、或探测出现自相矛盾时才把表摊开。
   摆出来等点将时:

   | agent | LLM 模型 | 模型来源 | 非交互调用形 | 已知限制 |
   |---|---|---|---|---|

   「模型来源」只允许四种值:**现场打印**(`--help`/`--list-models`/子命令 JSON/该 CLI 的缓存目录文件,四者都算现场)/
   **用户口述**(须这样标,不得冒充现场输出)/ `未知` / `清单≠默认`——**清单里有某个模型 ≠ 该 CLI 默认跑它**;
   填 `auto` 或宣称默认值,必须有 current/default 标记作据,否则只能 `固定`(有名)或 `现选`。
   凭记忆、凭上一轮、凭别的仓的记录填模型,仍然一律禁止。
   **表里不设「可用性/能不能审计」这类列**:那是 Q1 选完 agent、Q2 定完模型**之后**才做的判断(见第 1 步末),
   探测阶段只能报事实(有旗标吗、模型自报了吗、清单里有没有默认标记)。提前下结论=替用户裁决。

7. 探测阶段**不判审计资格**。资格在 Q2 之后判(第 1 步末)。

## 第 1 步:三问定池(一问一答,不合并成一屏),Q2 之后判资格

探测**结论**先出(默认不打印全表,见第 0 步第 6 条),再问。三问各是一次独立询问——合在一屏里问,用户答完第二问就忘了第一问挑了谁。

1. **Q1 选 agent**:多选,候选=探测命中的那些(每项括号里带上模型与非交互形是否已验)。本技能不替用户挑,也不因为某个「通常更强」就预选它。
2. **Q2 定模型**:对 Q1 选中的每一个 agent 问一次口径,答案空间**三档**(答完直接落成注入文本的模式位 `固定`/`auto`/`现选`)——
   - **固定某模型**:绑死一个;
   - **该 CLI 自己 auto**:由工具内部路由(它 `--list-models` 里标了 current default 才算得);
   - **多模型皆支持、派单时按任务现选**:列出支持的几个,本件不替它挑,**每次派单前现定**。
   该 CLI 自报过默认值或可列清单 ⇒ 把真实候选写进选项,不要凭空列;答「固定」的模型若 CLI 自己不披露,来源记 **用户口述**,不冒充 CLI 输出。
3. **Q2 末了判资格**:agent+模型都定了,才对每个说得出「可派活」还是「可当审计者」——
   审计资格两条:① 模型够强(按用户当场认的算,未知即不合格);② **不审自己那份产出**——含「当前主不审本会话亲笔的产出」
   (同源偏见),但这只关掉「审主会话写的东西」一路,当前主仍可审其他 agent 的产出。
   判完若池里没有够格的审计者,先明说,再问是否收回主会话自做——不悄悄降级去审。判定结果按「谁能审谁」给出,不是一刀切名单。
4. **Q3 定追加**:**先把前缀原样展示给用户**(就是第 2 步那行,尖括号已按实测填好),再问「方括号里要追加什么,还是不追加」。不追加 ⇒ 输出的那行**删掉整个方括号**,不留 `[<用户追加位>]` 空壳。

## 四条硬约束(选谁都成立)

1. **不自审**:干活者与审其产出者必须是不同 agent。合法链示例:A 实现 → B 审计;C 定位 → D 修复 → A 审计。
2. **产出过闸才入库**:
   - 代码类:在隔离 worktree/分支生成(`git worktree add`),主会话复核 diff + 跑**调用方自己声明的门禁命令**,绿了才合入;
   - 报告类:落调用方的草稿位或审计位(见「落点与记账」),主会话署名采纳后才算数;
   - 任何产出**不得由外部 agent 直接 commit 到工作分支**。
   - 调用方没声明过门禁命令 ⇒ **问,不猜**;问不到就把「无法验」当成不收的理由,而不是当成通过。
3. **审计须强模型**:「强」按用户当场认的算,未知即不当审计者。同源风险另计:
   不派「与主会话同一模型/同一渠道」的 agent 来审主会话亲笔的产出(同源偏见)。
   审计已派出后才发现该 agent 不合资格 ⇒ 产出作废不入账,换合格者重派。
4. **同源不审亲笔**:当前主可以接普通产出/定位/扫描任务,也可以审别的 agent 的产出,**唯一不做的是审主会话
   亲笔写出的东西**(同源偏见,硬约束 1 的延伸)。为此起后台前须知道两件事:`currentTool`(当前 CLI)与
   `currentModel`(其模型);调用方未传 ⇒ 起跑前必问「当前主是?」,未答不得起。


## 任务书格式(=冻结工件+产出格式,不给会话上下文)

```
角色:<实现者|定位者|修复者|审计者|扫描员|调研员>
仓库:<仓库根路径,派单时现场填>(分支/worktree:<路径>)
当前主:currentTool=<X> / currentModel=<Y>   # 让接单的 agent 知道自己的角色边界
输入工件(只读这些,全部已入库):
  - <路径1>(作用:<一句话>)
  - <路径2>
任务:<一段话,单一目标>
产出要求:<文件路径+格式;定位/审计类=发现清单(位置/证据/影响/建议),不改码>
禁止:改输入工件;引用未列出的文件作依据;commit/push。
```

长任务书一律先写入临时文件再引用/传入,防 shell 引号与反引号被吃掉。

## 落点与记账(照调用方仓的约定,不自造)

草稿位/审计位/记账位三处:调用方有约定就照它,没有就问一句。
不自建目录、不把「本仓恰好这么用」当成通用规范、不静默不落账。

## 安全约定

- 只给已入库或本可公开的工件路径;交接存储、暂存区、凭据文件(含其配置项)一律不给。
- 任务书本身过脱敏心检:不写凭据值、内网地址、带用户名的绝对路径。

## 第 2 步:产出一行「会话注入文本」(三问完成后,去向由用户定)

三问完成后,**照下面模板逐字产出一行**交给用户,让「本会话用哪些 agent」在会话里可见:

```
外部 agent 调遣见技能 agent-dispatch(工具池:<cli>@<model>(<模式>)、<cli>@<model>(<模式>)…;当前主:<cli>@<model>;不自审(审计者≠产出者,当前主不审本会话产出))[<用户追加位>]
```

- **尖括号由本技能生成**:`<cli>` 取第 0 步 `command -v` 命中的;`<model>` 取该 CLI 自己 `--help`/`--list-models` 打印的;打印不出就写 `模型未知`——**不许填空、不许凭记忆补**。
- **`<模式>` 只有三个取值**,来自 Q2 的答案,一一对应:`固定`(绑死一个模型)/ `auto`(该 CLI 自报的 current default,由工具内部路由)/
  `现选`(多模型皆支持,**每次派单前先定用哪个**)。模式位不是旁注,它有两处实际作用:
  ① `现选` 的 agent 派单前须先定模型,否则会被默默取列表第一个;
  ② 硬约束 3 判「够不够格当审计者」要有具体模型名——`现选` 未定之前,它不接审计任务。
- **工具池只列 Q1 里用户选中的 agent**:探到但没被选的**不写**——探测表是候选清单,注入文本是本会话的生效池。把没选的一起列进去,下一个读者就分不清哪些真可用(还会让人误以为没选的也能直接派)。
- **「当前主」是硬约束 4 的输入**:写进注入文本后,本会话后续派单不必再问一遍。
- **前缀固定带「不自审(审计者≠产出者,当前主不审本会话产出)」**:这条每次派单都要守,写进来就不会随对话变长而被忘掉。另外三条(产出过闸才入库/审计须强模型/同源不审亲笔)不塞进这行——它们各有自己的触发点(过闸在主会话、强模型看模式位、当前主已在行内),重复一遍只会让这行变长。
- **注入文本不带来源旁注**:`〔用户口述〕`、`〔现场打印〕` 这类标注留在第 0 步的探测表里(那才是可核的地方),这行只给结论——它是给会话读的,不是给审计读的。
- **`[<用户追加位>]` 是占位不是内容**:用户没写就**整块删掉(含方括号)**,不留空壳;他写了什么,本技能不校核、不改写、不代他决定内容。
- **去向由用户定**:本件**不写任何仓内文件**(`AGENTS.md`、项目配置都不写)。他要把这行长期留下,得他自己搬;只在本会话用,留在对话里就够。
- **换会话即失效**:新会话重新探测、重新产出这行——工具与模型会变(规则 12:判据输入是当场命令输出,不是上一轮记录)。

## 首派流程

1. 探测(第 0 步)→ 摆表。
2. 三问定池(第 1 步):选 agent → 定模型 → 定追加。
3. 产出注入文本(第 2 步)交用户,去向他自己定。
4. 核 currentTool/currentModel(注入文本里有就直接用,没有先问)。
5. 写任务书到临时文件,含「currentTool=X / currentModel=Y」声明。
6. 后台运行(长任务用 `run_in_background`),按第 0 步第 5 条的姿势判存活。
7. 收产出 → 按类型过闸(代码类:diff 复核+调用方门禁;报告类:主会话署名采纳)。
8. 结果与闸判定按调用方约定记账。
9. 清理 worktree/临时文件。

## 失败兜底

- 非交互旗标失效(工具升级):`--help` 现场复核,本次改用复核到的调用形,并记坑(若本仓有坑账)。
- 产出不合格:同一 agent 同一任务不重派超过 2 次;第 3 次换一个或收回主会话自做,记坑。
- 外部 agent 越权改动(碰了禁止项):丢弃产出、复原工作区、记坑。
- 池空(全被排除/全不合资格):收回主会话自做,并说明为什么没有可用 agent——不得为凑池放宽硬约束。

## 已验证实例

各仓的实际接线形态(工具池、门禁命令、落点)外挂于 `references/verified-instance.md`,按需读、非必需路径。
**只作形状参考**:启用时仍以第 0 步现场探测为准,模型与旗标都不从那里抄。

Files in this skill

  • SKILL.md13.1 KB
  • references/verified-instance.md585 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.