Agent Skills
› omnigent-ai/omnigent
› fanout
fanout
GitHub安全并行执行无依赖子任务,为每个任务创建隔离工作区并派生子代理实现,自动交叉审查PR,最终由人工合并。
Trigger Scenarios
需要并行处理多个独立子任务
协调多个AI代理同时开发不同模块
Install
npx skills add omnigent-ai/omnigent --skill fanout -g -y
SKILL.md
Frontmatter
{
"name": "fanout",
"description": "Run independent subtasks in parallel — one git worktree and one implementation sub-agent per task, each opening its own PR — then cross-review every PR. polly never merges; the human does."
}
fanout — safe parallel execution
Use ONLY for subtasks that are parallel-safe (no shared files, no ordering dependency).
Procedure
- Per task, create an isolated worktree:
sys_os_shell("git worktree add .worktrees/<task_id> -b polly/<task_id>"). Record the worktree path + branch in the registry (.polly/registry.json). - Dispatch one implementation sub-agent per task, scoped to its worktree:
sys_session_send(agent="claude_code"|"codex"|"opencode"|"cursor"|"hermes"|"agy", title="<task_slug>", args={purpose: "implement", input: "<task + acceptance contract + worktree path>"}). Use a short task-based title such asauth-refactororfix-sse-error, never the raw vendor name. State the scope and that it must work only inside.worktrees/<task_id>. The worker drives the task to green and opens its OWN PR for the branch. Every commit the worker authors must end with a blank line followed by the exact co-sign trailer as its final line —Co-authored-by: omnigent <noreply@omnigent.ai>. For a long-runningclaude_codeorcodeximplementation with an explicit completion condition, theinputmay instead be one standalone/goal <condition>command containing that same task, worktree, acceptance contract, green gates, and PR requirement. Do not use child goal mode for other workers or non-implementation purposes. Record each handle'sconversation_idin the registry. Emit the worktree +sys_session_sendtool calls in THIS turn — never end a turn having only said you will dispatch; the dispatch calls and their announcement go in the same turn. Dispatch the whole parallel-safe set, THEN (and only then) END YOUR TURN. Do not poll. - Each sub-agent runs autonomously and notifies you through the inbox when it
finishes. Collect its structured result with
sys_read_inboxand record the PR URL in the registry. If the inbox result is empty/unclear, inspect that worker conversation withsys_session_get_historybefore deciding what to do next. - Send each finished task's PR through
cross-review. - polly does NOT merge — the PR is the deliverable. When cross-review passes,
the task is done: mark it ready in the registry with its PR URL and leave it
for the human to review and merge. Never run
git merge/gh pr merge. - Remove a finished worktree (
git worktree remove) only once its PR is open and review is clean — the branch lives on the remote, so the worktree is disposable. Don't remove a worktree that still has open fix-tasks.
Notes
- Respect the per-turn dispatch cap (enforced by policy). More tasks than the cap → dispatch in waves (let the running batch finish before dispatching more).
- The human can open any sub-agent in the UI's Subagents panel and read its conversation while it runs.
- If a running worker is wrong, runaway, superseded, or no longer useful, call
sys_cancel_taskwithtask_idset to the recordedconversation_idbefore dispatching a replacement.claude_codeis hard-stopped;codexcancellation is best-effort until its runner-side hard-stop exists. - A sub-agent that returns a dark or failing result: don't re-prompt it in a loop — re-dispatch a fresh implementation sub-agent in a clean worktree, or escalate to the user.
- Because polly never merges, cross-PR conflicts surface when the human merges, not here. Keeping each parallel task's file scope disjoint is what keeps that rare — honor it.
Version History
- a8f41cb Current 2026-08-12 09:03


