多智能体任务编排器:把 prompt 拆给 Claude Code 与 Codex 执行,实时输出思维链/工具调用/交互/审批,支持中途注入
Project description
tasker — 多智能体任务编排器(claude code × codex)
输入一个目标,由 LLM 把它拆成有依赖关系的子任务,分派给 Claude Code 和 Codex 并行/串行执行;在 CLI 里实时流式输出两者的完整思维链、工具调用、交互与审批请求,并且你可以随时打字继续提要求、中途修改、批准/拒绝。
主目标平台:macOS。Windows/Linux 也可运行(headless 采集相同),但 pty 交互 attach 仅 macOS/Linux 原生支持。
特性
| 能力 | 说明 |
|---|---|
| 🧠 完整思维链 | Claude 的 thinking 块、Codex 的 reasoning 逐条实时打印(--think full/head/off) |
| 🔧 工具调用 | tool_use(工具名 + 参数 JSON)与 tool_result(stdout/stderr/是否报错) |
| 🔁 交互事件 | 子代理启动/进度/通知、任务轮次 |
| 🛡️ 审批请求 | 权限拒绝、permission_request/permission_result 实时浮现;approval 策略可 auto/log/ask |
| 💬 中途修改 | 运行中 @claude/@codex/@all <消息> 实时注入(claude 为真·多轮注入;codex 见下方限制) |
| 🎯 依赖编排 | LLM 拆出依赖图 → 分层并发;上游输出自动作为下游上下文 |
| 🧪 零依赖 | 纯 Python 标准库;--mock 无需任何 CLI/API key 即可演示全流程 |
| 📋 报告 | 可选 --report 落一份完整 Markdown 轨迹 |
安装
# 1) 准备两个执行器(macOS)
claude # Claude Code CLI(本工具直接调用)
npm install -g @openai/codex # Codex CLI(可选,未装时 codex 任务会失败/可先用 --mock)
# 2) 安装 tasker(命令名 tasker,PyPI 包名 multicc)
pip install multicc # 从 PyPI(需联网)
# 或离线:源码机 python scripts/build_wheel.py 得到 .whl 后 pip install <whl>
# 或源码直接跑:python tasker_cli.py
tasker verify-config # 检查环境
# 3) 配置(可选项,见下方"配置")
tasker init && $EDITOR config.json
Python ≥ 3.9,无第三方依赖。完整打包 / 发布说明见 RELEASE.md。
快速开始
# 真实运行(LLM 拆分 → claude/codex 执行 → CLI 实时输出)
python -m tasker run "写一个 Python CLI 工具,带子命令,并补上单元测试"
# 规则拆分(不用 LLM 也能跑,适合快速试)
python -m tasker run "实现一个斐波那契脚本" --plan-rules
# 无任何 CLI / API key 的纯演示
python -m tasker run "写一个 python 脚本并测试" --mock --think head
# 只打印计划
python -m tasker plan "重构这个项目" --json
# 附加到交互 TUI(macOS 原生,直接看真实审批弹窗)
python -m tasker attach claude "帮我初始化一个 Go 项目"
运行中随时输入
@all <消息> 发给所有运行中的 agent
@claude <消息> 只发给 claude 执行的任务
@codex <消息> 只发给 codex 执行的任务
@t2 <消息> 发给指定任务
<裸文本> 等同 @all <文本>
:allow [<id>] 批准最近/指定审批请求
:deny [<id>] 拒绝最近/指定审批请求
:done [<taskid>] 手动收尾任务(关闭其 stdin 让进程退出)
:status 各任务进度(思考/工具/审批/注入计数)
:plan 重打计划
:quit 终止全部并退出
claude 子任务是真·实时多轮:注入的消息写入其
stream-jsonstdin,下一轮即被采纳(已实测:任务执行到一半注入"第二行改成 xxx",最终产物按修改后内容产出)。
架构
prompt
│ LLM API(anthropic / openai 兼容)
▼
planner ──► Plan {tasks[], depends_on[], executor: claude|codex}
│ │ (规则拆分 plan_with_rules 作为无 key 回退)
▼
scheduler(按依赖分层,max_parallel 并发)
├─► ClaudeRunner ─► claude -p --output-format stream-json --verbose --input-format stream-json
│ │ stdin 保持打开 → @all/@claude 实时注入
│ ▼
│ 事件流: thinking / tool_use / tool_result / task_* / result / permission_denials
├─► CodexRunner ─► codex exec --json --full-trace
│ │ approval_request / tool_call / reasoning / completed
│ ▼
└─► 每个事件 → LiveTui 实时打印 + 写入 workspaces/<run>/<task>.events.jsonl
│
▼
用户在终端输入 → 输入线程 → 路由给对应 runner
事件模型(tasker/models.py):
thinking text tool_use tool_result permission_request permission_result user_message interaction system error result raw
文件结构:
tasker/
main.py CLI 入口(run / plan / attach / verify-config / init)
scheduler.py 依赖分层、并发、用户输入路由、审批策略接线
planner.py LLM 拆分 + 规则回退 + 依赖校验/环检测
claude_runner.py Claude 事件采集 + stdin 实时注入 + 完成判定
codex_runner.py Codex 事件采集
live.py LiveTui:实时打印 + 后台输入线程 + 指令解析
approvals.py 审批策略(auto / log / ask_console)
ptty.py pty attach(macOS/Linux,真实审批交互)
llm.py / config.py / spawn.py / models.py / console.py / report.py / mock_runner.py
配置(config.json)
| 段 | 键 | 默认 | 说明 |
|---|---|---|---|
llm |
provider |
anthropic |
拆分用 LLM;openai 可接任意 OpenAI 兼容接口(DeepSeek/Ollama/网关) |
llm |
base_url |
"" |
兼容接口地址,如 https://api.deepseek.com/v1 |
llm |
api_key_env |
ANTHROPIC_API_KEY |
从该环境变量取 key |
llm |
model |
claude-sonnet-5 |
拆分模型 |
claude |
permission_mode |
acceptEdits |
headless 下自动允许工作区内编辑;要全自主(含 Bash)改 bypassPermissions |
claude |
allowed_tools |
[] |
预授权工具白名单 |
claude |
completion_idle |
5.0 |
最终 result 后无活动秒数 → 关闭 stdin 收尾 |
codex |
sandbox |
workspace-write |
read-only / workspace-write / danger-full-access |
codex |
auto_approve |
false |
传 --auto-approve 给 codex exec |
approval |
mode |
auto |
auto / log / ask_console |
approval |
default_allow |
true |
auto 模式的默认决定 |
| — | max_parallel |
2 |
同层并发数 |
| — | timeout_per_task |
900 |
单任务超时 |
macOS 行为说明(重点)
- 进程启动:macOS 上
claude/codex是 POSIX 二进制或#!/bin/shshim,spawn.py直接用shutil.which解析后Popen,无需.cmd兼容层(Windows 的.cmd已额外处理)。 - 交互 attach:
python -m tasker attach claude|codex用os.forkpty起交互式 TUI 并原样转发到你终端 —— 你能看到真实的审批弹窗并直接输入y/n回答。这是 headless 拿不到的那部分交互(claude -p / codex exec 无 TTY 不弹窗)。 - 编码:全程 UTF-8;macOS 终端默认 UTF-8,中文/emoji 无碍。
- 权限:headless 下 claude 的写文件/命令会走策略判定,拒绝会以
tool_result拒由 +result.permission_denials呈现(已实测);需要"不问就干"请设permission_mode=bypassPermissions(风险自负)。 - SIGINT:
Ctrl-C触发优雅中断(KeyboardInterrupt路径)。
Codex 的已知限制
codex exec是单轮非交互模式,不支持像 claude 那样中途注入消息。@codex注入会记录到交互日志,并在调度依赖它的下一个子任务时作为上下文携带("下一轮注入")。codex exec --json会发approval_request事件(本工具会实时打印),但非交互下无法经 stdin 回答;真正的审批对话请用attach codex。- 未安装 codex 时,含 codex 的任务会失败并给出清晰报错;可用
--mock或--plan-rules先体验。
常见问题
任务拆分 LLM 报 401 / 网络错?
llm 段用独立 API key。若你的 ANTHROPIC_API_KEY 是 Claude Code 网关专用 key,无法直接访问 api.anthropic.com —— 设 llm.base_url 指向你的网关,或换 provider=openai + DeepSeek/Ollama。任何失败都会自动回退到规则拆分。
headless 下"审批请求"不弹窗?
这是 CLI 行为限制:权限弹窗只在交互 TTY 出现。headless 会直接给出工具执行/拒绝事件。要看并回答真实审批,用 attach 模式。
运行卡住不结束?
claude 发完最终结果不会自己退出(stdin 仍开)。完成判定:最终 result 后 completion_idle 秒无活动 → 关闭 stdin 收尾;可 :done 手动收尾。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file multicc-0.1.0-py3-none-any.whl.
File metadata
- Download URL: multicc-0.1.0-py3-none-any.whl
- Upload date:
- Size: 40.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
551a22e9022b7d5ef095b906450a022c3e957911ff3193f336055a5618959307
|
|
| MD5 |
90ad09cd296320fce08e3a800ce1fcb2
|
|
| BLAKE2b-256 |
bfc3c1c8c59260a17e345ba92fac5c14b79663e9cded82004fc56efbbcee80cb
|