DjangoAILab/dsh-plugins--plugins-manual-dsh-external-agents ↗★ 1

dsh-external-agents

把外部 CLI Agent(Codex / Claude Code)注册成 DSH subagent provider:codex 升级为「单工具 + model 参数」+ 内部 route provider + 原生 ctx.jobs 异步(完成自动通知 / job_output(wait:true) 带上限等待);claude 为自写单工具。彻底移除 dsh-tool-subagent 依赖。v2.2 新增 argsProfiles 权限档位;v2.3 固化后台收数最佳实践文案(不新增 sleep 工具,见 DESIGN.md §8)。v2.4 新增 codex session 连续性:--json 强制捕获 session id(成功必有 id,否则按失败上报)+ session_id 参数续接历史会话(resume argv 从零构建,resumeArgs 为唯一旗标旋钮)。v2.5 claude 同样支持 session 连续性(--session-id 新会话/--resume 续接,工具层预生成 UUID)。 适合已用 Codex 或 Claude Code 并想接入为子智能体的用户。

Package
dsh-external-agents
Compatibility
Unverified
Harness peer range
0.1.0-rc.7
Cordis peer range
4.0.1
Version
0.5.1
License
MIT
Last updated
Sep 1, 2026

Other repositories with this package name

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:DjangoAILab/dsh-plugins#18ae7e5df085d28e7a573d1e3ef0286bda1ea793&path:plugins/manual/dsh-external-agents

2.2 配置(v2 schema,见 cordis.patch.yml)

codex:
  enabled: true
  command: codex
  args: ['exec', '--skip-git-repo-check', '-s', 'workspace-write']   # normal 基线档(刻意不内置 bypass)
  defaultModel: fast
  providers:
    builtin: { type: builtin }            # codex 内置 OpenAI(走 codex 自身 auth)
    gateway:                              # OpenAI-compatible provider
      baseUrl: 'https://api.example.com/v1'
      wireApi: responses
      envKey: THIRD_PARTY_API_KEY
      apiKey: '${ENV:THIRD_PARTY_API_KEY}'
      models: ['provider-model-fast', 'provider-model-pro']
  models:                                 # 模型可见别名 -> { provider, model }
    fast:          { provider: gateway, model: provider-model-fast }
    pro:           { provider: gateway, model: provider-model-pro }
    gpt-5.6-sol:   { provider: builtin, model: gpt-5.6-sol }
    gpt-5.6-terra: { provider: builtin, model: gpt-5.6-terra }
claude:
  enabled: true
  command: claude
  args: ['--print', '--output-format', 'text']
  # model: 'provider-model-fast'           # 置空=默认;置串=--model
  # provider: gateway                     # 自定义 Anthropic 端点(ANTHROPIC_BASE_URL/AUTH_TOKEN)

每 agent 可选 cwd / env;claude 默认走 scrubbedParentEnv() 时靠 ~/.claude/settings.json 自加载 env, 或在此显式转发。全局 graceMs(取消 SIGTERM→SIGKILL 宽限)与 maxOutputBytes(缓冲上限)同 v1。

2.4 使用

  • codex(prompt=..., model=? ) 同步阻塞;codex(prompt=..., model=?, run_in_background=true) 返回 jobId (省略 model 用默认)。后台收数最佳实践(同样适用于 claude_code):

    1. 拿到 jobId 后优先继续做与该任务无关的独立工作——job 完成时父会话会自动收到 completion notice(不用轮询,通知会找你)。
    2. 确实没有独立工作、下一步又强依赖结果时,才 job_output(job_id, wait: true, timeout_ms: N) 阻塞等待: 完成即提前返回;到时返回 [status: running],job 继续存活,可再次等待。timeout_ms 默认 30s、 上限 600s(tool-jobs 的 waitTimeoutMs/maxWaitTimeoutMs 配置可调;若需要 1 小时上限, 可使用本仓库的示例 preset——注意 web 面该配置只能落在 agent preset 的行上, 见 plugins/manual/code-longwait-preset;用户补丁层的宿主面 tool-jobs 行被 web-app disabled,写在那里不生效)。
    3. 不要 sleep、不要定时轮询——等待语义 wait:true 已内置,空转轮询只会白烧上下文与轮次。
    4. 废弃不用的 job 用 job_kill 回收。
  • codex_models 拉当前有效模型集合;claude_code(prompt=...) 同理(其 description 会带出当前权限档位)。