Skip to content

Delegate to AI

osgood edited this page Jun 10, 2026 · 3 revisions

🤖 Delegate to AI

🌐 English · 한국어

Hand your work to multiple AI coding agents (Claude Code · Codex · Gemini CLI) running in parallel, each in its own isolated git worktree.


Parallel Worktree Execution

Each TODO automatically gets its own git worktree. Claude / Gemini / Codex CLIs execute simultaneously in parallel.

  • Dependency chains let you automatically trigger follow-up tasks and branch merges once prerequisites complete.
  • Per-project worktree toggle plus a per-TODO tri-state override (inherit / force-worktree / force-main) give fine-grained control.
  • Main-branch tasks are automatically serialized to avoid .git conflicts.
  • Drag-and-drop reordering and an iOS-style stack mode keep long task lists manageable.

Worktree isolation on/off

Mode Behavior
Use worktree (default) A dedicated worktree per TODO. Parallel execution + branch merge.
Run on main Work directly on the main branch. Concurrency is forced to 1 to avoid conflicts; the CLI commits directly and no merge button appears.

npm install on worktree creation (opt-in)

Off by default — CLITrigger is a language-agnostic orchestrator, so it won't run an install just because a package.json exists. Turn it on for npm projects where the agent needs to run tests/builds immediately.

Continue (follow-up rounds)

Send additional instructions to a completed TODO to run a new round in the same worktree (via the CLI's native --continue). Multiple continues are supported with per-round log separation. If the worktree was cleaned up, Retry restarts from scratch.


Interactive Sessions

Long-lived interactive CLI sessions as first-class entities — bring up a Claude / Gemini / Codex session in a floating draggable window. While TODOs run automatically from instructions, sessions are for direct, manual conversation with a CLI.

VS Code-style window grouping and docking

  • Drag a tab onto another window for a 5-zone diamond (top/bottom/left/right/center) — side drops split into resizable panes, center merges as tabs
  • Aero-style edge snapping, sticky window-to-window snapping, and minimize-to-dock-tray
  • Splitter bars resize panes; all tabs stay mounted so PTY output never breaks
  • Drag a tab >12px outside its group to detach it to a floating window (eager tab tearing)
  • Docking works inside popped-out OS windows too — drag a tab onto a pane (including its own stack's edges) to split, center to merge
  • Drag tabs between OS windows: drop a popout's tab onto another popout or onto a floating window in the main app. With overlapping windows the most recently focused one wins, and the tab only leaves its source after the receiver confirms — it can't get lost in transit

Multi-window (separate OS window)

Pop a window out into a separate OS window. The session list flags it with a badge + a one-click "bring back to the main window" recall, and popped windows also appear as chips in the bottom dock tray. If a popout is unresponsive, a 1.5s fallback force-reclaims it. Re-docking while you're viewing a different project adopts the group into the workspace you're looking at — which also lets you dock terminals from different projects into one group.

Terminal rendering & input

  • xterm.js shows ANSI colors, cursor control, and TUI box-drawing identically to a native terminal
  • PTY spawns at the exact viewport dimensions; per-session font size via A−/A+ buttons, Ctrl/Cmd ±, or Ctrl/Cmd + scroll (8–28px)
  • Tab cycling (Ctrl+Tab / Ctrl+Shift+Tab) within a group; new raw-shell tab via + / Ctrl/Cmd+T
  • Copy/paste via right-click context menu; Ctrl/Cmd+C always passes through to the PTY (^C = SIGINT)
  • Image paste pushes a bitmap to the host clipboard and renders [Image #N] in the CLI — no disk file in your project tree. A thumbnail preview appears at the terminal's bottom-left for a few seconds so you can see what got attached
  • 8 brand terminal themes + custom 5-color picker (per-session, persisted to localStorage)

Wiki injection + Send/Skip pre-flight

When a session has wiki injection or a description, the initial prompt is held rather than auto-sent. A banner shows "Initial prompt ready · N chars" with Preview / Send / Skip so you review before it hits the model. Inline edit updates non-running sessions in place.

Mobile

iOS Safari Hangul IME is composed via a client-side dubeolsik composer. Window geometry, group tree, and tab arrangement persist and survive tab navigation; small screens go fullscreen.


Multi-Agent Discussion

AI agents with different roles — architect, developer, reviewer — debate in rounds before implementation. The resulting design is far more robust than a single AI working in isolation.

Workflow

  1. Create agents — define personas (name, role, system prompt, CLI tool)
  2. Create a discussion — pick 2+ agents, set a topic and max rounds
  3. Run — agents speak in turn each round, referencing prior turns
  4. Intervene — inject messages, skip turns, pause/resume mid-discussion
  5. Implement — a designated agent writes code from the consensus
  6. Merge — merge the implemented branch into the base branch

Key features

  • Implementers (can_implement) can commit code during their regular turns (prompt relaxed to "minimal prototype"); a final implementation round stitches everything together. Shown with a hammer badge in the list.
  • Auto-implement triggers the code-writing round automatically on consensus.
  • Send to Planner distills a finished transcript into curated planner items via a one-shot LLM extraction — review and edit before persisting (each links back via source_discussion_id).
  • Worktree isolation, real-time WebSocket streaming, message collapse/expand, and prompt-injection defense (<user_task> isolation).

Discussions share the project's max_concurrent limit with TODOs.


Scheduled Execution

Schedule tasks for off-peak hours to avoid rate limits. Supports:

  • Recurring cron schedules — e.g. 0 9 * * * (daily 9am), 30 18 * * 1-5 (weekdays 6:30pm)
  • One-time scheduled runs
  • Auto-recovery scheduling on rate-limit events — if the CLI hits a token quota, CLITrigger schedules a retry for the exact reset time

Manage via the Schedules tab: enable/disable toggle, manual trigger, execution history (triggered / skipped / failed), and a Skip if running option.


Multi-CLI & Sandbox Mode

Select Claude / Gemini / Codex per project, per TODO, or per discussion agent. Every run uses the CLI's default model — there is no per-run model picker to keep in sync with shifting model lineups — and a fallback chain can auto-retry on the next CLI when a context window or quota is exhausted.

Sandbox mode

Strict sandbox mode restricts CLI file access to the worktree directory using each CLI's native sandboxing:

CLI Strict-mode behavior
Claude Auto-generated .claude/settings.json (dontAsk + directory-scoped permissions)
Codex --full-auto + --add-dir .git (workspace sandbox + git metadata access)
Gemini Prompt-level path restriction (no native sandboxing)

Keep strict mode unless you have a specific reason — permissive mode lets the CLI touch system-wide files. A warning dialog appears when switching to permissive.

Harness — edit CLI config in-app

Project Settings → Harness edits each CLI's project config without leaving CLITrigger: the instruction file under its real name (CLAUDE.md / GEMINI.md / AGENTS.md) in an expandable full-height editor, plus settings and MCP servers. For Claude it also covers:

  • CLAUDE.local.md — edited alongside CLAUDE.md, created on first save if absent
  • Hooks — the hooks block of .claude/settings.json, listed per event with matchers and commands, editable as raw JSON
  • Skills.claude/skills/*/SKILL.md listed with their descriptions, editable inline

Clone this wiki locally