一键导入
kf-conductor
Tmux-based multi-agent orchestration — persistent manager loop that auto-dispatches, monitors, and manages parallel Claude Code workers
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Tmux-based multi-agent orchestration — persistent manager loop that auto-dispatches, monitors, and manages parallel Claude Code workers
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Kiloforge CLI tools reference and shared documentation hub. Lists available tools, provides runtime environment info, and hosts reference docs used by other kf-* skills.
Receive a track ID, validate it is an active unclaimed track, then implement it following the kiloforge workflow.
Product strategy advisor: research the codebase and competitive landscape to provide product design, branding, feature prioritization, and competitive analysis advice. Produces actionable reports to .agent/kf/_reports/product-advisor/ designed for handoff to /kf-architect.
Project architect: research the codebase and distill feature requests into well-scoped kiloforge tracks with specs and implementation plans. Splits large work into multiple tracks (including BE/FE splits). Merges track artifacts to the primary branch so developer workers can claim them.
Resolve git merge conflicts during push or pull sync operations. Fetches remote changes, merges, resolves conflicts (or escalates), and completes the sync.
Interactive project bootstrapper with platform-aware defaults. Guides users through project creation decisions, generates a blueprint, scaffolds the project, and invokes kf-setup with pre-populated answers.
| name | kf-conductor |
| description | Tmux-based multi-agent orchestration — persistent manager loop that auto-dispatches, monitors, and manages parallel Claude Code workers |
| metadata | {"argument-hint":"[setup | start | stop | suspend | resume | status | dispatch | approve | spawn <worker> <track> | kill <worker> | cleanup]"} |
Orchestrate parallel Claude Code worker agents using tmux. A persistent manager loop automatically dispatches work to idle workers, cleans up completed ones, and respects max_workers concurrency limits. Each worker runs in its own git worktree, implements a kf track autonomously, and self-terminates when done.
setup)setup + /kf-setup first)start, spawn, dispatch)setup, or manuallyBefore starting the manager, set up the conductor environment. This detects your current context and creates the necessary worktrees.
kf-conductor.py setup --repo https://github.com/org/repo.git
This will:
.bare/ with a .git pointerkf-conductor.py setup
Detects whether you're in a regular repo, bare repo, or worktree and creates any missing worker worktrees.
kf-conductor.py setup --repo <url> --dir /path/to/project --workers 4
Each setup generates a unique instance ID (e.g., kfc-a3b2c1). All worktrees for that instance are prefixed with this ID, allowing multiple conductor instances to share the same git repo without conflicting worktrees.
project/
.bare/ ← bare git repository
.git ← file: "gitdir: ./.bare"
main/ ← worktree for primary branch
kfc-a3b2c1-worker-1/ ← worker worktree (instance-scoped)
kfc-a3b2c1-worker-2/ ← worker worktree
kfc-a3b2c1-worker-3/ ← worker worktree
...
Workers are generic — the skill invoked on a worker (/kf-developer, /kf-architect, etc.) determines its role, not the worktree name.
Start the persistent manager in a dedicated tmux window. It automatically dispatches work, cleans up completed workers, and loops until stopped:
# In a dedicated tmux window:
~/.kf/bin/kf-conductor.py start --timeout 30
The manager:
kf-dispatch to find eligible work and spawns workers for itmax_workers from config.yaml (default: 4)Control the manager from another tmux window:
~/.kf/bin/kf-conductor.py suspend # Pause dispatching (running workers continue)
~/.kf/bin/kf-conductor.py resume # Resume dispatching
~/.kf/bin/kf-conductor.py stop # Graceful shutdown (finish current, no new)
For a single dispatch cycle without the persistent loop:
~/.kf/bin/kf-conductor.py dispatch --timeout 30
This runs kf-dispatch to compute assignments, spawns workers, then exits.
When require_approval: true is set in .agent/kf/config.yaml, tracks must be explicitly approved before workers can pick them up. Open the approval TUI:
~/.kf/bin/kf-conductor.py approve
This opens a curses-based TUI in its own tmux window with three sections:
TUI keys:
↑/↓ or j/k — NavigateSPACE — Toggle approval on highlighted trackENTER — View full track details (spec, plan, etc.)a — Approve all backlog tracksu — Unapprove all approved trackss — Save changes (acquires merge lock, commits to primary branch)r — Manual refreshF5 — Start manager (dispatch loop)F6 — Suspend manager (pause dispatching)F7 — Resume managerF8 — Stop manager (graceful shutdown)h / ? — Show help panel with all keybindingsq — Quit (prompts to save if unsaved changes)The header shows the manager state (running/suspended/stopping/stopped), active worker count, and merge lock status (locked/unlocked).
The TUI auto-refreshes when new commits land on the primary branch (e.g., when an architect merges new tracks).
You can also approve tracks via CLI:
~/.kf/bin/kf-track.py approve <track-id>
~/.kf/bin/kf-track.py disapprove <track-id>
~/.kf/bin/kf-conductor.py spawn <worker-name> <track-id> --timeout 30
worker-name must match an existing worktree (e.g., kfc-a3b2c1-worker-1)~/.kf/bin/kf-conductor.py status
Shows manager state (running/suspended/stopping/stopped) and all conductor-managed workers with state (running/completed/failed/timeout/killed) and elapsed time.
~/.kf/bin/kf-conductor.py status --json
JSON output for programmatic use.
~/.kf/bin/kf-conductor.py kill <worker-name>
Kills the tmux window, releases the track claim, updates status to killed.
~/.kf/bin/kf-conductor.py cleanup --completed # clean successful workers
~/.kf/bin/kf-conductor.py cleanup --failed # clean failed/timed-out workers
~/.kf/bin/kf-conductor.py cleanup --all # clean everything (kills running workers)
Cleanup resets worktrees to their home branch, releases claims, and removes status files.
Note: When the manager loop is running, cleanup happens automatically — you don't need to run it manually.
Best for processing an entire track queue hands-off:
echo $TMUX~/.kf/bin/kf-preflight.py~/.kf/bin/kf-conductor.py start --timeout 30~/.kf/bin/kf-conductor.py status~/.kf/bin/kf-conductor.py stop or Ctrl+CBest when you want fine-grained control over each dispatch cycle:
echo $TMUX~/.kf/bin/kf-preflight.py~/.kf/bin/kf-conductor.py status~/.kf/bin/kf-conductor.py dispatch --timeout 30
Or for more control, run dispatch manually:
# See what would be assigned
~/.kf/bin/kf-dispatch.py
# Spawn workers individually
~/.kf/bin/kf-conductor.py spawn kfc-a3b2c1-worker-1 track_20260312T000000Z --timeout 30
~/.kf/bin/kf-conductor.py spawn kfc-a3b2c1-worker-2 track_20260312T000001Z --timeout 30
Poll status periodically:
~/.kf/bin/kf-conductor.py status
Or watch a specific worker's output:
tmux capture-pane -t kfc-a3b2c1-worker-1 -p | tail -20
After workers finish:
# See results
~/.kf/bin/kf-conductor.py status
# Clean up completed workers
~/.kf/bin/kf-conductor.py cleanup --completed
# Handle failures — check what went wrong
tmux capture-pane -t kfc-a3b2c1-worker-3 -p | tail -50
# Re-dispatch if new tracks are unblocked
~/.kf/bin/kf-conductor.py dispatch --timeout 30
After cleanup and re-dispatch, loop back to Phase 3 until all tracks are done.
| State | Meaning | Transition |
|---|---|---|
running | Actively dispatching and cleaning up | suspend → suspended, stop → stopping |
suspended | No new dispatches; running workers continue | resume → running, stop → stopping |
stopping | Waiting for running workers to finish, then exits | Automatic when all workers done |
stopped | Manager exited | start to restart |
Workers are packed into shared tmux windows as panes (up to 6 per window). Windows are named workers-1, workers-2, etc. The layout auto-rebalances with tiled after each new pane.
Ctrl-b then select workers-1Ctrl-b o (next pane) or Ctrl-b q N (pane by number)window.pane location (e.g., workers-1.2)Each spawned worker runs in its own pane:
claude --dangerously-skip-permissions
# then receives "/kf-developer <track-id>" via tmux send-keys
Workers are fully interactive — you can attach to any pane and type.
The worker:
kf-claimmax_workers is read from .agent/kf/config.yaml (default: 4). Override at runtime:
~/.kf/bin/kf-conductor.py start --max-workers 6 --timeout 30
Or set it permanently:
~/.kf/bin/kf-track.py config set max_workers 6
Worker status files are stored at:
$(git rev-parse --git-common-dir)/kf-conductor/<worker-name>.json
Manager state is stored at:
$(git rev-parse --git-common-dir)/kf-conductor/_manager.json
Both are shared across all worktrees in the repo.
--dangerously-skip-permissions — they have full tool access without human approval. This is necessary for autonomous operation but means workers can run arbitrary commands.| State | Meaning | Action |
|---|---|---|
completed | Worker finished successfully | Auto-cleaned by manager, or cleanup --completed |
failed | Worker exited with error | Check output, fix issue, re-dispatch |
timeout | Worker exceeded time limit | Kill, check if track needs splitting |
killed | Manually killed | Re-dispatch if needed |
Use setup to create additional workers for the current instance:
~/.kf/bin/kf-conductor.py setup --workers 6
This creates any missing worker worktrees up to the specified count, using the current instance prefix (e.g., kfc-a3b2c1-worker-5, kfc-a3b2c1-worker-6).
Legacy worktree names (worker-*, developer-*) are also recognized by dispatch for backward compatibility.