All plugins

DSH / BUNDLE / BUNDLES

dsh-agent-conductor

v0.3.0MJorgin / dsh-agent-conductord6d2eaba60

InstallableBundlesBundles & other modulesCommunity · Topic auto-analysis

Overview

dsh-agent-conductor

In-session cross-agent dispatch for DeepSeek Harness: a zero-dependency skill and a host-only bundle that send self-contained tasks to 11 external agent CLIs (Codex, Claude Code, TraeCode, OpenCode, Gemini, Cursor, Kimi, Qwen, Copilot, WorkBuddy, Grok).

README / EN

Package documentation

⚡ dsh-agent-conductor

Let your DeepSeek Harness agent dispatch tasks to 11 external agent CLIs — Codex, Claude Code, TraeCode, OpenCode, Gemini, Cursor, Kimi, Qwen, Copilot, WorkBuddy, Grok — headlessly, and bring results back into the conversation.

English · 简体中文


DeepSeek Harness is a great reasoning engine — but sometimes the job is better done by another coding agent: a Codex translation, a Claude Code investigation, a Cursor refactor. This plugin lets your DSH agent recognize when to delegate (by skill-description matching), dispatch a self-contained task to one of 11 external agent CLIs in headless mode, and bring the stdout result back as the answer.

Inspired by Multica — the "agent squad" idea as a zero-install DSH skill.

✨ What you get

Capability What it does Cost
🧠 Auto-triggered dispatch Say "have Codex translate this README" — the model matches the skill, runs the dispatch script, and answers from the result Free (uses the target CLI's quota)
🔧 conductor_dispatch tool (optional bundle) The same registry as a first-class DSH tool, installed into a profile with one command Free
🩺 doctor self-check python3 dispatch.py doctor probes which CLIs are installed (resolves PATH + tries --version) before you dispatch Free
👥 11 agent CLIs Codex, Claude Code, TraeCode, OpenCode, Gemini, Cursor, Kimi, Qwen, Copilot, WorkBuddy, Grok Their login quotas
🔒 Privacy Task text goes only to the CLI's own provider; keys stay local

🧭 Why a Skill (and not just a plugin)

profile plugin / bundle dynamic plugin Skill (this repo)
Install write profile + restart define in-session copy a folder
Trigger manual model calls a tool description matching, model auto-recognizes
Risk touches the host session-scoped, gone on restart read-only script, host-agnostic
Result tool result tool result stdout directly becomes the answer

One SKILL.md + a ~90-line zero-dependency dispatch.py (Python stdlib only).

⚡ Quick start (Skill)

Copy skills/conductor/ to any skill root (project-level .dsh/skills/ or global ~/.dsh/skills/):

mkdir -p .dsh/skills/conductor
cp -R skills/conductor/. .dsh/skills/conductor/

No restart needed — from the next message on, just say:

  • "派 codex 把这份 README 翻译成繁体中文" (have Codex translate this README)
  • "让 Claude Code 查一下这个报错的成因" (ask Claude Code to investigate this error)
  • "用 Codex 独立实现一个 XXX" (have Codex implement XXX independently)

The agent auto-recognizes the need (SKILL.md description matching) → runs dispatch.py → returns the result.

🛠️ Prereqs: install the CLIs you want to dispatch to

# Codex / Claude Code / OpenCode / Gemini / Qwen
npm i -g @openai/codex
npm i -g @anthropic-ai/claude-code
npm i -g opencode-ai
npm i -g @google/gemini-cli
npm i -g @qwen-code/qwen-code
# Kimi / Grok / Copilot (headless flags verified against each CLI's own --help)
npm i -g @moonshot-ai/kimi-code
npm i -g @xai-official/grok
npm i -g @github/copilot
# TraeCode CLI: https://docs.trae.cn/cli_command-line-parameters
# (already have codex-cli? symlink instead: ln -s ~/.codex/plugins/.plugin-appserver/codex ~/.local/bin/codex)

Headless note: Copilot non-interactive mode must auto-approve tools, so the registry runs copilot -p "<task>" --allow-all-tools. The other CLIs run their standard print/headless flag.

Then check what's actually dispatchable on this machine:

python3 skills/conductor/scripts/dispatch.py doctor
# ✅ Codex  …/codex — codex-cli 0.151.0 …
# ❌ Gemini … 未找到 `gemini`  →  安装:npm i -g @google/gemini-cli

Working directory is auto-detected. The bundle tool runs each CLI in the current session's workspace (exec.agent.session.header.cwd), then CONDUCTOR_CWD, then the harness cwd — no hardcoded paths. Codex still requires a trusted git repo: point CONDUCTOR_CWD=/path/to/git/repo (env or ~/.dsh/secrets/media-tools.env) at one if the auto-detected folder isn't trusted. The skill script honors CONDUCTOR_CWD and falls back to the current directory. To let the dispatched agent write files: add sandbox_mode = "workspace-write" to Codex's ~/.codex/config.toml. Dispatching consumes the target CLI's login quota.

✅ Verified vs ⏳ pending

CLI Headless command Status
Codex codex exec "{task}" ✅ field-tested (translation task delivered)
Claude Code claude -p "{task}" --output-format text ✅ installed; per official docs
TraeCode traecli exec "{task}" ✅ per official docs
OpenCode opencode run "{task}" ✅ per official docs
Gemini CLI gemini -p "{task}" ✅ per official docs
Qwen Code qwen --prompt "{task}" ✅ per official docs (Gemini-CLI fork)
Kimi CLI kimi --prompt "{task}" ✅ flag confirmed from the CLI's own help (-p, --prompt = non-interactive)
Copilot CLI copilot -p "{task}" --allow-all-tools ✅ flag confirmed from copilot --help (bin is copilot, not github-copilot; --allow-all-tools is required headless)
Grok CLI grok -p "{task}" ✅ per official README (grok -p "..." = run one task)
Cursor CLI cursor-agent -p "{task}" ⏳ command shape pending field test (install via cursor.com; the npm cursor-agent package is unrelated)
WorkBuddy workbuddy -p "{task}" ⏳ command shape pending field test

Install packages were verified against the npm registry: Kimi is @moonshot-ai/kimi-code (bin kimi), Grok is @xai-official/grok (bin grok), Copilot is @github/copilot (bin copilot), Codex is @openai/codex. The kimi-cli npm package is an unrelated placeholder with no binary — do not use it.

📦 Optional: bundle install (host-only tool)

This repo is also a host-only dsh bundle (declares dsh.bundle, zero client code — the Web UI is untouched). One command installs the conductor_dispatch tool into a profile:

dsh plugin --profile web add github:MJorgin/dsh-agent-conductor
  • The tool and the skill share the same CLI registry (index.jsconductor-dynamic.jsdispatch.py — keep the three in sync when adding CLIs);
  • No client half, so the Web UI is never affected (the early panel-carrying client version was removed — see git log);
  • Hardened host execution: explicitly declares the subprocess dependency, enforces a real 10-minute timeout that terminates the whole process tree (also on cancel — no orphaned CLIs), and clips over-long output (head + tail, ~20k chars) so a chatty agent can't blow up the context;
  • Panels / task-board recycling are on the roadmap.

📂 Repo layout

index.js                      # bundle host half: conductor_dispatch tool (host-only)
cordis.patch.yml              # bundle layer (one row, no client)
skills/conductor/SKILL.md      # skill definition: trigger description + dispatch rules + privacy
skills/conductor/scripts/dispatch.py  # dispatch engine (Python stdlib, zero deps)
conductor-dynamic.js           # alternative: dynamic-plugin edition (cordis_define route)

🗺️ Roadmap

  • Panel UI (optional, dynamic-plugin client half)
  • Task-board recycling: dispatch results written back to dsh-task-board cards
  • Squad orchestration: one task fanned out to several agents and merged (Multica squads shape)

🔑 Keys & privacy

  • Keys are never stored in this repo. The skill script reads env vars, then ~/.dsh/secrets/media-tools.env (same convention as dsh-media-skills).
  • Task text is sent to the target CLI's provider — never put secrets or internal data into a task.
  • Results belong to the target CLI's terms of service; mark deliverables as "done by ".

License

MIT

Related