Hotdry.
ai-systems

Shell中代理技能框架的运行时调度循环实现:子代理协调与任务委托

借鉴Superpowers框架,用纯Shell构建运行时dispatch循环,支持子代理手off、任务分解及开发全流程自动化,提供关键参数、阈值与监控清单。

在代理式 AI 系统(agentic systems)中,运行时调度循环(runtime dispatch loops)是实现子代理协调与任务委托的核心机制。通过纯 Shell 脚本,我们可以无外部依赖地构建一个轻量级框架,模拟 Superpowers 项目中 subagent-driven-development 的逻辑,支持从需求分析到代码部署的全开发生命周期自动化。这种方法特别适合资源受限环境或快速原型验证,避免了 Python/Node.js 等运行时的复杂性。

为什么选择 Shell 实现运行时调度?

传统 agent 框架如 LangChain 或 AutoGPT 依赖重型库,引入包管理和版本冲突。Shell 则天然支持进程间通信(pipes/files)、信号处理和超时控制,完美契合 dispatch 需求:主循环解析任务队列,基于启发式规则委托子代理(subagent),收集结果后迭代。Superpowers 框架展示了这种范式的威力,其 subagent-driven-development 技能 “为每个任务启动新鲜子代理,进行 spec 合规审查后代码质量评估”[1],显著提升了自主性。我们在 Shell 中复现此逻辑,使用 curl 调用 LLM API 作为 “代理”,通过 JSON 任务描述实现手 off。

证据在于 Superpowers 的实际 workflow:brainstorming 后生成 plans,每个 2-5 分钟的任务独立 dispatch,避免上下文污染。Shell 版本同样分解任务为原子单元(如 “写测试 - 绿灯 - 重构”),主循环追踪进度,防止漂移。

核心架构:Dispatch Loop 设计

主脚本agent-dispatcher.sh采用 while 循环处理任务队列(tasks.json 数组)。每个迭代:

  1. 解析当前任务(task_id, description, deps, type)。
  2. 应用 dispatch 启发式:如果任务复杂度 > 阈值(词数 > 50 或含 “implement”),委托子代理;否则自执行。
  3. 子代理:fork bash 子进程,curl POST 到 LLM API(e.g. OpenAI/Claude),prompt 模板注入上下文 + 技能(如 TDD)。
  4. 收集:子进程输出到 result.json,主循环验证(grep 成功标记),若失败重试 3 次。
  5. 状态更新:推进队列,记录 metrics(latency, success_rate)。

关键是手 off 协议:任务 JSON 格式统一,含parent_contextexpected_outputreview_criteria。子代理输出必须匹配 schema,避免 hallucination。

#!/bin/bash
# agent-dispatcher.sh
MAX_DEPTH=3
TIMEOUT=300
DELEGATION_THRESHOLD=50  # words
RETRY_MAX=3
TASKS_FILE="tasks.json"
LLM_URL="https://api.openai.com/v1/chat/completions"  # 或Claude
API_KEY="your-key"

dispatch_task() {
  local task_id=$1 desc=$2 depth=$3
  if (( depth > MAX_DEPTH )); then
    echo "{\"status\":\"fail\",\"reason\":\"max_depth\"}" >> results.json
    return 1
  fi

  # Heuristic: delegate if complex
  word_count=$(echo "$desc" | wc -w)
  if (( word_count > DELEGATION_THRESHOLD )); then
    # Subagent call
    prompt="You are subagent $task_id. Context: $parent_context. Task: $desc. Follow TDD: red-green-refactor. Output JSON: {\"code\":\"...\",\"tests\":\"...\",\"status\":\"pass/fail\"}"
    timeout $TIMEOUT bash -c "curl -s -H 'Authorization: Bearer $API_KEY' -d '{\"model\":\"gpt-4o-mini\",\"messages\":[{\"role\":\"user\",\"content\":\"$prompt\"}]}' $LLM_URL | jq -r '.choices[0].message.content'" > sub_output.json || echo "{\"status\":\"timeout\"}" > sub_output.json
    cat sub_output.json >> results.json
  else
    # Self-execute simple tasks, e.g. git commands
    eval "$desc"  # Sanitize in prod!
    echo "{\"status\":\"pass\"}" >> results.json
  fi
}

# Main loop
while IFS= read -r task; do
  task_id=$(echo $task | jq -r '.id')
  desc=$(echo $task | jq -r '.desc')
  depth=$(echo $task | jq -r '.depth // 0')
  dispatch_task $task_id "$desc" $((depth+1))
done < <(jq -c '.[]' $TASKS_FILE)

echo "Dispatch complete. Check results.json"

此脚本≥100 行扩展后支持完整 lifecycle:init 从 user spec 生成 tasks(初 dispatch 到 planner 代理),end 时 merge git branch。

可落地参数与阈值配置

  • MAX_DEPTH=3:防递归爆炸,>3 任务强制 human-in-loop。
  • TIMEOUT=300s:单任务上限,LLM 响应慢时用timeout捕获。
  • DELEGATION_THRESHOLD=50 词:启发式,简单命令自执,复杂委托。调优:日志统计 80% 任务 < 30 词。
  • RETRY_MAX=3:指数退避(sleep 2^retry),fail 后 append error 到 context。
  • QUEUE_TYPE=fifo/lifo:FIFO for sequential dev,LIFO for debug。
  • PARALLELISM=4:用parallel或 xargs 限并发,模拟 dispatching-parallel-agents。

监控清单:

  1. 日志:ts '%Y-%m-%dT%H:%M:%S' >> agent.log,grep "timeout|fail"。
  2. Metrics:JSONL 累积 success_rate>95%,avg_latency<120s 警报。
  3. 回滚:snapshot tasks.json@start,fail 时git checkout
  4. 安全:sanitize eval(whitelist commands),API key env。

全开发生命周期自动化示例

  1. Bootstrapecho '{"tasks":[{"id":"1","desc":"Brainstorm spec for todo app"}]}' > tasks.json; ./agent-dispatcher.sh → planner 子代理输出 design doc。
  2. Plan:task2 "Break into TDD tasks" → tasks.json append 10 原子任务。
  3. Implement:loop dispatch "Write failing test for add_todo" → subagent 生成 test/code。
  4. Review:post-dispatch jq 验证 status,critical fail block。
  5. Finish:all pass → "git worktree merge + PR" task。

风险缓解:context loss 用 file-based state(jq update),无限 loop 用 depth limit。测试:mock LLM 返回,assert queue progress。

此 Shell 框架复现 Superpowers 精髓,轻量(<10KB),跨平台。扩展:集成 git worktrees(git worktree add task-$id)。

资料来源: [1] https://github.com/obra/superpowers#subagent-driven-development [2] https://blog.fsck.com/2025/10/09/superpowers/

(正文字数:1256)

查看归档