[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74694":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":16,"starSnapshotCount":16,"syncStatus":37,"lastSyncTime":38,"discoverSource":39},74694,"agtx","fynnfluegge\u002Fagtx","fynnfluegge","🏄🏼‍♂️ The blackboard for coding agents - multi-agent session-toolbox for claude code, cursor, codex, gemini","",null,"Rust",1075,99,8,11,0,6,15,39,18,19,"Apache License 2.0",false,"main",[26,27,28,29,30,31,32,33],"claude","claude-code","codex","cursor","gemini","opencode","spec-driven-development","vibe-coding","2026-06-12 02:03:27","\u003Cdiv align=\"center\">\n\n[\u002F\u002F]: \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F54ac039b-085e-490b-aacc-36c8e244e313\" width=\"428\" \u002F>\n\n# 🏄🏼‍♂️ agtx\n\n\u003Cdiv align=\"left\">\n    \n> **The blackboard for coding agents** - Add tasks. Press one key. An orchestrator agent picks it up, plans, and delegates to multiple coding agents running in parallel. Come back to changes ready to merge.\n>\n> **Let different AI coding agents collaborate** autonomously on the same task with automatic session switching and context awareness - e.g. **Gemini** → research | **Claude** → implement | **Codex** → review\n>\n> **Capture ideas without leaving your agent session** — `\u002Fagtx:brainstorm` to explore freely, `\u002Fagtx:sweep` to push the conversation to the board as tasks in one step.\n\n\u003C\u002Fdiv>\n\n[![CI](https:\u002F\u002Fgithub.com\u002Ffynnfluegge\u002Fagtx\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Ffynnfluegge\u002Fagtx\u002Factions\u002Fworkflows\u002Fci.yml)\n[![Release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Ffynnfluegge\u002Fagtx)](https:\u002F\u002Fgithub.com\u002Ffynnfluegge\u002Fagtx\u002Freleases)\n[![PRs Welcome](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPRs-welcome-brightgreen.svg)](CONTRIBUTING.md)\n[![License: Apache-2.0](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-Apache_2.0-blue.svg)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FApache-2.0)\n\n\u003Ca href=\"https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F23889\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Ftrendshift.io\u002Fapi\u002Fbadge\u002Frepositories\u002F23889\" alt=\"fynnfluegge%2Fagtx | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"\u002F>\u003C\u002Fa>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"#quick-start\">Quick Start\u003C\u002Fa> •\n  \u003Ca href=\"#features\">Features\u003C\u002Fa> •\n  \u003Ca href=\"#usage\">Usage\u003C\u002Fa> •\n  \u003Ca href=\"#brainstorm--sweep-skills\">Skills\u003C\u002Fa> •\n  \u003Ca href=\"#mcp-server\">MCP Server\u003C\u002Fa> •\n  \u003Ca href=\"#plugins\">Plugins\u003C\u002Fa> •\n  \u003Ca href=\"#orchestrator-agent-experimental\">Orchestrator\u003C\u002Fa> •\n  \u003Ca href=\"#configuration\">Configuration\u003C\u002Fa> •\n  \u003Ca href=\"#benchmark\">Benchmark\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n\u003Cimg width=\"840\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F45858e09-ab61-422b-b708-db060c73a900\" \u002F>\n\n[\u002F\u002F]:  \u003Cimg width=\"840\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F42f71a6c-424c-4cc4-80fc-dc9bb8ba1467\" \u002F>\n\n\u003Cbr\u002F>\n\n[\u002F\u002F]: \u003Cimg width=\"1486\" height=\"680\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F45858e09-ab61-422b-b708-db060c73a900\" \u002F>\n\n[\u002F\u002F]: \u003C![Xnapper-2026-02-14-09 36 33 (1)](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Ffce21a9c-2fe1-4b14-8f24-55e058531370)>\n\n\u003C\u002Fdiv>\n\n## Why agtx?\n\nAI coding tools give you one agent, one task, one terminal. agtx gives you a **kanban board where multiple coding agents work in parallel** — each in its own git worktree, each in its own tmux window, running autonomously through a spec-driven workflow managed by an orchestrator agent.\n\nWhen ideas come up mid-session, `\u002Fagtx:brainstorm` keeps your agent in exploration mode — then `\u002Fagtx:sweep` turns the conversation into board tasks with a single confirmation step. **No context switching, no copy-pasting — ideas flow directly into work.**\n\nWith the orchestrator, you don't even manage the board yourself. **An AI agent picks up tasks, delegates work, and ensures getting things done** through planning, implementation, review and resolving conflicts — while you focus on what matters: research, defining tasks, and merging changes.\n\n> [!TIP]\n> Check out the [Contributing](#contributing) section or have a look at [`good first issues`](https:\u002F\u002Fgithub.com\u002Ffynnfluegge\u002Fagtx\u002Fissues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) to get involved and become a contributor ⭐️ \n\n## Features\n\n- **Orchestrator agent**: A dedicated AI agent that autonomously manages your kanban board via [MCP](https:\u002F\u002Fmodelcontextprotocol.io) — delegates to coding agents, advances phases, checks for merge conflicts ([experimental](#orchestrator-agent-experimental))\n- **Brainstorm & Sweep skills**: Capture ideas and push them to the board from any coding agent session — `\u002Fagtx:brainstorm` to explore freely, `\u002Fagtx:sweep` to decompose and create tasks with one confirmation step ([details](#brainstorm--sweep-skills))\n- **Multi-agent task lifecycle**: Configure different agents per workflow phase — e.g. Gemini for research, Claude for implementation, Codex for review — with automatic agent switching\n- **Parallel execution**: Every task gets its own git worktree and tmux window — run as many agents as needed, simultaneously\n- **Spec-driven plugins**: Plug in [GSD](https:\u002F\u002Fgithub.com\u002Ffynnfluegge\u002Fget-shit-done-cc), [Spec-kit](https:\u002F\u002Fgithub.com\u002Fgithub\u002Fspec-kit), [OpenSpec](https:\u002F\u002Fgithub.com\u002FFission-AI\u002FOpenSpec), [BMAD](https:\u002F\u002Fgithub.com\u002Fbmad-code-org\u002FBMAD-METHOD), [Superpowers](https:\u002F\u002Fgithub.com\u002Fobra\u002Fsuperpowers) — or define your own with a single TOML file\n- **Multi-project dashboard**: Manage agent sessions across all projects via a single TUI\n- **Works with**: [Claude Code](https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-code) | [Codex](https:\u002F\u002Fgithub.com\u002Fopenai\u002Fcodex) | [Gemini CLI](https:\u002F\u002Fgithub.com\u002Fgoogle-gemini\u002Fgemini-cli) | [OpenCode](https:\u002F\u002Fgithub.com\u002Fsst\u002Fopencode)  | [Cursor Agent](https:\u002F\u002Fcursor.com\u002Fdocs\u002Fcli\u002Foverview) | [Copilot](https:\u002F\u002Fgithub.com\u002Fgithub\u002Fcopilot-cli)\n\n> [!NOTE]\n> Just need a plain coding agent session manager with **full human-in-the-loop control** and **no automatic spec-driven skill execution and orchestration** on advancing tasks?\n>\n> Choose the **`void` plugin** and enjoy the kanban coding agent board - with full human control.\n\n## Quick Start\n\n```bash\n# Install\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Ffynnfluegge\u002Fagtx\u002Fmain\u002Finstall.sh | bash\n\n# Run in any git repository\ncd your-project && agtx\n```\n\n```bash\n# Dashboard mode — manage all projects\nagtx -g\n\n# Orchestrator mode — let an AI manage the board for you\nagtx --experimental\n```\n\n> [!NOTE]\n> Add `.agtx\u002F` to your project's `.gitignore` to avoid committing worktrees and local task data.\n\n```bash\n# Install from source\ncargo build --release\ncp target\u002Frelease\u002Fagtx ~\u002F.local\u002Fbin\u002F\n```\n\n### Requirements\n\n- **tmux** — agent sessions run in a dedicated tmux server\n- **gh** (optional) — GitHub CLI for PR operations\n\n## Usage\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Keyboard Shortcuts\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| Key | Action |\n|-----|--------|\n| `h\u002Fl` or `←\u002F→` | Move between columns |\n| `j\u002Fk` or `↑\u002F↓` | Move between tasks |\n| `o` | Create new task |\n| `R` | Enter research mode |\n| `↩` | Open task (view agent session) |\n| `Ctrl+f` | Fullscreen attach to task's tmux session |\n| `m` | Move task forward in workflow |\n| `r` | Resume task (Review → Running) \u002F Move back (Running → Planning) |\n| `p` | Next phase (Review → Planning, cyclic plugins only) |\n| `d` | Show git diff |\n| `x` | Delete task |\n| `\u002F` | Search tasks |\n| `P` | Select spec-driven workflow plugin |\n| `O` | Toggle orchestrator agent (`--experimental`) |\n| `e` | Toggle project sidebar |\n| `q` | Quit |\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Task Creation Wizard\u003C\u002Fstrong>\u003C\u002Fsummary>\n\nPress `o` to create a new task. The wizard guides you through:\n1. **Title** — enter a short task name\n2. **Plugin** — select a workflow plugin (auto-skipped if only one option)\n3. **Prompt** — write a detailed task description with inline references\n\nThe agent is configured at the project level via `config.toml` (not per-task).\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Task Description Editor\u003C\u002Fstrong>\u003C\u002Fsummary>\n\nWhen writing a task description, you can reference files, skills, and other tasks inline:\n\n| Key | Action |\n|-----|--------|\n| `#` or `@` | Fuzzy search and insert a file path |\n| `\u002F` | Fuzzy search and insert an agent skill\u002Fcommand (at line start or after space) |\n| `!` | Fuzzy search and insert a task reference (at line start or after space) |\n\n\u003C\u002Fdetails>\n\n### Agent Sessions\n\nEach task runs in its own tmux window with a dedicated coding agent. The session persists across the entire task lifecycle — you can open the task popup at any time to see live agent output, or press `Ctrl+f` to attach fullscreen.\n\n- **Persistent context**: The agent's full conversation history is preserved across Planning → Running → Review\n- **Resume from Review**: Moving a task back to Running simply reconnects to the existing session — no re-initialization needed\n- **Inline view**: Press `↩` on any active task to open a scrollable tmux view inside the TUI\n- **Fullscreen**: Press `Ctrl+f` to attach directly to the agent's tmux window\n- **Auto merge-conflict resolution**: When a Review task becomes idle, agtx checks for merge conflicts with the default branch using a non-destructive virtual merge (`git merge-tree`). If conflicts are detected, the agent is automatically sent the `\u002Fagtx:merge-conflicts` skill to resolve them and re-commit\n\n## Brainstorm & Sweep Skills\n\nTwo companion skills for capturing ideas in any coding agent session and turning them into tasks in the agtx board.\n\n| Skill | Command | When to use |\n|-------|---------|-------------|\n| **Brainstorm** | `\u002Fagtx:brainstorm` | Explore a feature idea — discussion only, no planning or implementation |\n| **Sweep** | `\u002Fagtx:sweep` | Push conversation outcomes to the agtx board as tasks |\n\n**Typical flow:**\n```\n\u002Fagtx:brainstorm   ← explore the idea freely\n      ↓\n\u002Fagtx:sweep        ← extract tasks, confirm, push to board\n      ↓\nagtx board         ← tasks appear in Backlog, ready to advance\n```\n\nThe brainstorm skill keeps the agent in discussion mode — asking questions, surfacing trade-offs, no code or plans. When the conversation feels complete, run `\u002Fagtx:sweep` to decompose outcomes into feature-level tasks and push them to the board with a single confirmation step.\n\n### Install\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Claude Code\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n```bash\nclaude plugin marketplace add fynnfluegge\u002Fagtx\nclaude plugin install agtx@agtx-marketplace\nclaude mcp add --scope user agtx -- agtx mcp-serve\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Codex\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n```bash\ncodex mcp add agtx -- agtx mcp-serve\n```\n\nAdd to your project's `.agents\u002Fplugins\u002Fmarketplace.json`:\n```json\n{\n  \"name\": \"local-repo\",\n  \"plugins\": [\n    {\n      \"name\": \"agtx\",\n      \"source\": {\n        \"source\": \"local\",\n        \"path\": \".\u002Fplugins\u002Fagtx\"\n      },\n      \"policy\": {\n        \"installation\": \"AVAILABLE\",\n        \"authentication\": \"ON_INSTALL\"\n      },\n      \"category\": \"Productivity\"\n    }\n  ]\n}\n```\n\nThen in any Codex session: `@agtx:sweep` \u002F `@agtx:brainstorm`\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Gemini CLI\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n```bash\ngemini mcp add agtx -- agtx mcp-serve\necho \"@skills\u002Fsweep\u002FSKILL.md\" >> ~\u002FGEMINI.md\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Cursor\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n```bash\ncursor mcp add agtx -- agtx mcp-serve\ncp skills\u002Fsweep\u002FSKILL.md ~\u002F.cursor\u002Frules\u002Fagtx-sweep.md\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Other\u003C\u002Fstrong>\u003C\u002Fsummary>\n\nRegister `agtx mcp-serve` as an MCP server, then copy `skills\u002Fsweep\u002FSKILL.md` into your agent's context.\n\n\u003C\u002Fdetails>\n\n> [!NOTE]\n> The project must have been opened in agtx at least once to appear in `list_projects`. Run `agtx` in your project directory first.\n\n## Configuration\n\nConfig file location: `~\u002F.config\u002Fagtx\u002Fconfig.toml`\n\n### Worktree Base Branch\n\nagtx creates a new git worktree for each task. By default it auto-detects the base branch in this\norder: `main`, then `master`, then the current branch. You can override this to force a specific\nbase branch (for example `dev` or `develop`).\n\nGlobal worktree defaults can be set here:\n\n```toml\n# ~\u002F.config\u002Fagtx\u002Fconfig.toml\n[worktree]\nbase_branch = \"dev\"\nworktree_dir = \".worktrees\"  # default: \".agtx\u002Fworktrees\"\n```\n\n`worktree_dir` is the directory (relative to project root) where task worktrees are created. Defaults\nto `.agtx\u002Fworktrees` if not set.\n\n### Project Configuration\n\nPer-project settings can be placed in `.agtx\u002Fconfig.toml` at the project root:\n\n```toml\n# Base branch used when creating new task worktrees (optional)\nbase_branch = \"dev\"\n\n# Directory where worktrees are created (optional, default: \".agtx\u002Fworktrees\")\nworktree_dir = \".worktrees\"\n\n# Files to copy from project root into each new worktree (comma-separated)\n# Paths are relative and preserve directory structure\ncopy_files = \".env, .env.local, web\u002F.env.local\"\n\n# Shell command to run inside the worktree after creation and file copying\ninit_script = \"scripts\u002Finit_worktree.sh\"\n\n# Shell command to run inside the worktree before removal\ncleanup_script = \"scripts\u002Fcleanup_worktree.sh\"\n```\n\n`base_branch` controls which branch new task worktrees are created from. If omitted or empty, agtx\nauto-detects `main`, `master`, or falls back to the current branch.\n\n### Per-Phase Agent Configuration\n\nBy default, all phases use `default_agent`. You can override the agent for specific phases globally or per project:\n\n```toml\n# ~\u002F.config\u002Fagtx\u002Fconfig.toml\ndefault_agent = \"claude\"\n\n[agents]\nresearch = \"gemini\"\nplanning = \"claude\"\nrunning = \"claude\"\nreview = \"codex\"\n```\n\n```toml\n# .agtx\u002Fconfig.toml (project override — takes precedence over global)\n[agents]\nrunning = \"codex\"\n```\n\n## Plugins\n\nPlug any spec-driven framework into the task lifecycle. Define commands, prompts, and artifacts — agtx handles phase gating, artifact polling, worktree sync, agent switching, and autonomous execution.\n\nPress `P` to switch plugins. Ships with 10 built-in:\n\n| Plugin | Description |\n|--------|-------------|\n| **void** | Plain agent session - no prompting or skills, task description prefilled in input |\n| **agtx** (default) | Built-in workflow with skills and prompts for each phase |\n| **agtx-terse** | Token-efficient workflow - same workflow with compressed output and minimal tokens |\n| **gsd** | [Get Shit Done](https:\u002F\u002Fgithub.com\u002Ffynnfluegge\u002Fget-shit-done-cc) - structured spec-driven development with interactive planning |\n| **spec-kit** | [Spec-Driven Development](https:\u002F\u002Fgithub.com\u002Fgithub\u002Fspec-kit) by GitHub - specifications become executable artifacts |\n| **openspec** | [OpenSpec](https:\u002F\u002Fgithub.com\u002FFission-AI\u002FOpenSpec) - lightweight AI-guided specification framework |\n| **bmad** | [BMAD Method](https:\u002F\u002Fgithub.com\u002Fbmad-code-org\u002FBMAD-METHOD) - AI-driven agile development with structured phases |\n| **superpowers** | [Superpowers](https:\u002F\u002Fgithub.com\u002Fobra\u002Fsuperpowers) - brainstorming, plans, TDD, subagent-driven development |\n| **oh-my-claudecode** | [oh-my-claudecode](https:\u002F\u002Fgithub.com\u002FYeachan-Heo\u002Foh-my-claudecode) - multi-agent orchestration with 37 skills and 22 specialized agents |\n| **agent-skills** | [Agent Skills](https:\u002F\u002Fgithub.com\u002Faddyosmani\u002Fagent-skills) - production-grade engineering skills covering the full spec-to-ship lifecycle |\n\n### Agent Compatibility\n\nCommands are written once in canonical format and automatically translated per agent:\n\n| Canonical (plugin.toml) | Claude \u002F Gemini | Codex | OpenCode | Cursor |\n|--------------------------|-----------------|-------|----------|--------|\n| `\u002Fagtx:plan` | `\u002Fagtx:plan` | `$agtx-plan` | `\u002Fagtx-plan` | `\u002Fagtx-plan` |\n\n|  | Claude | Codex | Gemini | OpenCode | Cursor | Copilot |\n|--|:------:|:-----:|:------:|:--------:|:------:|:-------:|\n| **agtx** | ✅ | ✅ | ✅ | ✅ | ✅ | 🟡 |\n| **gsd** | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |\n| **spec-kit** | ✅ | ✅ | ✅ | ✅ | ✅ | 🟡 |\n| **openspec** | ✅ | ✅ | ✅ | ✅ | ✅ | 🟡 |\n| **bmad** | ✅ | ✅ | ✅ | ✅ | ✅ | 🟡 |\n| **superpowers** | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| **oh-my-claudecode** | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| **agent-skills** | ✅ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |\n| **void** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |\n\n✅ Skills, commands, and prompts fully supported · 🟡 Prompt only, no interactive skill support · ❌ Not supported\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Creating a Plugin\u003C\u002Fb>\u003C\u002Fsummary>\n\n> [!TIP]\n> If you have the agtx repo open in Claude Code, run `\u002Fadd-plugin \u003Cgithub-url>` to automatically generate a bundled `plugin.toml` from any spec-driven framework repo — including wiring up `src\u002Fskills.rs` and the README tables.\n\nPlace your plugin at `.agtx\u002Fplugins\u002F\u003Cname>\u002Fplugin.toml` in your project root (or `~\u002F.config\u002Fagtx\u002Fplugins\u002F\u003Cname>\u002Fplugin.toml` for global use). It will appear in the plugin selector automatically.\n\n**Minimal example** — a plugin that uses custom slash commands:\n\n```toml\nname = \"my-plugin\"\ndescription = \"My custom workflow\"\n\n[commands]\nresearch = \"\u002Fmy-plugin:research {task}\"\nplanning = \"\u002Fmy-plugin:plan\"\nrunning = \"\u002Fmy-plugin:execute\"\nreview = \"\u002Fmy-plugin:review\"\n\n[prompts]\nplanning = \"Task: {task}\"\n```\n\n**Full reference** with all available fields:\n\n```toml\nname = \"my-plugin\"\ndescription = \"My custom workflow\"\n\n# Shell command to run in the worktree after creation, before the agent starts.\n# {agent} is replaced with the agent name (claude, codex, gemini, etc.)\ninit_script = \"npm install --prefix .my-plugin --{agent}\"\n\n# Restrict to specific agents (empty or omitted = all agents supported)\nsupported_agents = [\"claude\", \"codex\", \"gemini\", \"opencode\"]\n\n# Extra directories to copy from project root into each worktree.\n# Agent config dirs (.claude, .gemini, .codex, .github\u002Fagents, .config\u002Fopencode)\n# are always copied automatically.\ncopy_dirs = [\".my-plugin\"]\n\n# Individual files to copy from project root into each worktree.\n# Merged with project-level copy_files from .agtx\u002Fconfig.toml.\ncopy_files = [\"PROJECT.md\", \"REQUIREMENTS.md\"]\n\n# When true, enables Review → Planning transition via the `p` key.\n# Each cycle increments the phase counter ({phase} placeholder).\n# Use this for multi-milestone workflows (e.g. plan → execute → review → next milestone).\ncyclic = false\n\n# Artifact files that signal phase completion.\n# When detected, the task shows a checkmark instead of the spinner.\n# Supports * wildcard for one directory level (e.g. \"specs\u002F*\u002Fplan.md\").\n# Use {phase} for cycle-aware paths (replaced with the current cycle number).\n# Omitted phases show no completion indicator.\n[artifacts]\nresearch = \".my-plugin\u002Fresearch.md\"\nplanning = \".my-plugin\u002F{phase}\u002Fplan.md\"\nrunning = \".my-plugin\u002F{phase}\u002Fsummary.md\"\nreview = \".my-plugin\u002F{phase}\u002Freview.md\"\n\n# Slash commands sent to the agent via tmux for each phase.\n# Written in canonical format (Claude\u002FGemini style): \u002Fnamespace:command\n# Automatically transformed per agent:\n#   Claude\u002FGemini: \u002Fmy-plugin:plan (unchanged)\n#   OpenCode:      \u002Fmy-plugin-plan (colon -> hyphen)\n#   Codex:         $my-plugin-plan (slash -> dollar, colon -> hyphen)\n# Omitted phases fall back to agent-native agtx skill invocation\n# (e.g. \u002Fagtx:plan for Claude, $agtx-plan for Codex).\n# Set to \"\" to skip sending a command for that phase.\n# Use {phase} for cycle-aware commands (replaced with the current cycle number).\n# Use {task} to inline the task description.\n[commands]\npreresearch = \"\u002Fmy-plugin:research {task}\"  # Used only when no research artifacts exist yet\nresearch = \"\u002Fmy-plugin:discuss {phase}\"\nplanning = \"\u002Fmy-plugin:plan {phase}\"\nrunning = \"\u002Fmy-plugin:execute {phase}\"\nreview = \"\u002Fmy-plugin:review {phase}\"\n\n# Prompt templates sent as task content after the command.\n# {task} = task title + description, {task_id} = unique task ID, {phase} = cycle number.\n# Omitted phases send no prompt (the skill\u002Fcommand handles instructions).\n[prompts]\nresearch = \"Task: {task}\"\n\n# Text patterns to wait for in the tmux pane before sending the prompt.\n# Useful when a command triggers an interactive prompt that must appear first.\n# Polls every 500ms, times out after 5 minutes.\n[prompt_triggers]\nresearch = \"What do you want to build?\"\n\n# Files\u002Fdirs to copy from worktree back to project root after a phase completes.\n# Triggered automatically when the phase artifact is detected (spinner → checkmark).\n# Useful for sharing research artifacts (specs, plans) across worktrees.\n[copy_back]\nresearch = [\"PROJECT.md\", \"REQUIREMENTS.md\", \".my-plugin\"]\n\n# Auto-dismiss interactive prompts that appear before the prompt trigger.\n# Each rule fires when ALL detect patterns are present and the pane is stable.\n# Response is newline-separated keystrokes (e.g. \"2\\nEnter\" sends \"2\" then Enter).\n[[auto_dismiss]]\ndetect = [\"Map codebase\", \"Skip mapping\", \"Enter to select\"]\nresponse = \"2\\nEnter\"\n```\n\n**What happens at each phase transition:**\n\n1. The **command** is sent to the agent via tmux (e.g., `\u002Fmy-plugin:plan`)\n2. If a **prompt_trigger** is set, agtx waits for that prompt trigger to appear in the tmux pane\n3. The **prompt** is sent with `{task}`, `{task_id}`, and `{phase}` replaced\n4. agtx polls for the **artifact** file — when found, the spinner becomes a checkmark\n5. If **copy_back** is configured, artifacts are copied from worktree to project root on completion\n6. If the agent appears idle (no output for 15s), the spinner becomes a pause icon\n\n**Phase gating:** Whether a phase can be entered directly from Backlog is derived from the plugin config. If a phase's command or prompt contains `{task}`, it can receive task context and is accessible from Backlog. If neither has `{task}`, the phase depends on a prior phase and is blocked until that artifact exists. For example, OpenSpec's `\u002Fopsx:propose {task}` allows direct Backlog → Planning, but `\u002Fopsx:apply` (no `{task}`) blocks Backlog → Running until proposal artifacts exist.\n\n**Preresearch fallback:** When pressing `R` on a task, if `preresearch` is configured and no research artifacts from `copy_back` exist in the project root yet, the `preresearch` command is used instead of `research`. This lets plugins run a one-time project setup (e.g. `\u002Fgsd:new-project`) before switching to the regular research command for subsequent tasks. If the plugin has no research command at all (e.g. OpenSpec), pressing `R` shows a warning.\n\n**Cyclic workflows:** When `cyclic = true`, pressing `p` in Review moves the task back to Planning with an incremented phase counter. This enables multi-milestone workflows where each cycle (plan → execute → review) produces artifacts in a separate `{phase}` directory.\n\n**Custom skills:** If your plugin provides its own skill files, place them in the plugin directory:\n\n```\n.agtx\u002Fplugins\u002Fmy-plugin\u002F\n├── plugin.toml\n└── skills\u002F\n    ├── agtx-plan\u002FSKILL.md\n    ├── agtx-execute\u002FSKILL.md\n    └── agtx-review\u002FSKILL.md\n```\n\nThese override the built-in agtx skills and are automatically deployed to each agent's native discovery path (`.claude\u002Fcommands\u002F`, `.codex\u002Fskills\u002F`, `.gemini\u002Fcommands\u002F`, etc.) in every worktree.\n\n\u003C\u002Fdetails>\n\n## How It Works\n\n### Architecture\n\n```\n┌─────────────────────────────────────────────────────────┐\n│                      agtx TUI                           │\n├─────────────────────────────────────────────────────────┤\n│  Backlog  │  Planning  │  Running  │  Review  │  Done   │\n│  ┌─────┐  │  ┌─────┐   │  ┌─────┐  │  ┌─────┐ │         │\n│  │Task1│  │  │Task2│   │  │Task3│  │  │Task4│ │         │\n│  └─────┘  │  └─────┘   │  └─────┘  │  └─────┘ │         │\n└─────────────────────────────────────────────────────────┘\n                    │           │\n                    ▼           ▼\n┌─────────────────────────────────────────────────────────┐\n│                 tmux server \"agtx\"                      │\n│  ┌────────────────────────────────────────────────────┐ │\n│  │ Session: \"my-project\"                              │ │\n│  │  ┌────────┐  ┌────────┐  ┌────────┐                │ │\n│  │  │Window: │  │Window: │  │Window: │                │ │\n│  │  │task2   │  │task3   │  │task4   │                │ │\n│  │  │(Claude)│  │(Claude)│  │(Claude)│                │ │\n│  │  └────────┘  └────────┘  └────────┘                │ │\n│  └────────────────────────────────────────────────────┘ │\n│  ┌────────────────────────────────────────────────────┐ │\n│  │ Session: \"other-project\"                           │ │\n│  │  ┌───────────────────┐                             │ │\n│  │  │ Window:           │                             │ │\n│  │  │ some_other_task   │                             │ │\n│  │  └───────────────────┘                             │ │\n│  └────────────────────────────────────────────────────┘ │\n└─────────────────────────────────────────────────────────┘\n                    │           │\n                    ▼           ▼\n            ┌───────────────────────────┐\n            │   Git Worktrees           │\n            │  .agtx\u002Fworktrees\u002Ftask2\u002F   │\n            │  .agtx\u002Fworktrees\u002Ftask3\u002F   │\n            │  .agtx\u002Fworktrees\u002Ftask4\u002F   │\n            └───────────────────────────┘\n```\n\n### Tmux Structure\n\n- **Server**: All sessions run on a dedicated tmux server named `agtx`\n- **Sessions**: Each project gets its own tmux session (named after the project)\n- **Windows**: Each task gets its own window within the project's session\n\n```bash\n# List all sessions\ntmux -L agtx list-sessions\n\n# List all windows across sessions\ntmux -L agtx list-windows -a\n\n# Attach to the agtx server\ntmux -L agtx attach\n```\n\n### Data Storage\n\n- **Database**: `~\u002FLibrary\u002FApplication Support\u002Fagtx\u002F` (macOS) or `~\u002F.config\u002Fagtx\u002F` (Linux)\n- Config: `~\u002F.config\u002Fagtx\u002Fconfig.toml`\n- **Worktrees**: `.agtx\u002Fworktrees\u002F` in each project\n- **Tmux**: Dedicated server `agtx` with per-project sessions\n\n## Docker Sandbox\n\nRun agtx in an isolated Docker container so agents can only touch the project you pass in — no access to the rest of your home directory, credentials are read-only, and any files the agent creates in the project are owned by your host user.\n\n```bash\n# Run agtx on a project\n.\u002Fdocker\u002Fsandbox.sh path\u002Fto\u002Fyour-project\n\n# Or from inside the project directory\n.\u002Fdocker\u002Fsandbox.sh\n```\n\nThe sandbox:\n- Mounts only the target project as writable; everything else on the host is inaccessible\n- Copies `~\u002F.claude` credentials read-only at startup so they are never written back to the host\n- Runs as a non-root user whose UID\u002FGID matches your host user (files created inside the container appear correctly owned on the host)\n- Stores agtx state in named Docker volumes (persists across runs, isolated from your host's agtx data)\n- Pre-accepts the bypass permissions prompt, which is appropriate in an isolated container\n\n> [!NOTE]\n> Requires [Docker Engine](https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F) (Linux) or [Docker Desktop](https:\u002F\u002Fdocs.docker.com\u002Fdesktop\u002F) (macOS\u002FWindows). The image is built automatically on first run and cached for subsequent runs.\n\n## MCP Server\n\nThe agtx MCP server (`agtx mcp-serve`) exposes the board to any coding agent session via the [Model Context Protocol](https:\u002F\u002Fmodelcontextprotocol.io). Used by the orchestrator agent and the brainstorm & sweep skills.\n\n### Modes\n\n| Mode | Command | Used by |\n|------|---------|---------|\n| **Global** | `agtx mcp-serve` | Sweep\u002Fbrainstorm skills — works across all projects |\n| **Project-scoped** | `agtx mcp-serve \u003Cpath>` | Orchestrator — bound to one project at startup |\n\nIn global mode all tools require a `project_id` parameter. Call `list_projects` first to resolve it.\n\n### Tools\n\n| Tool | Description |\n|------|-------------|\n| `list_projects` | List all projects indexed in agtx |\n| `list_tasks` | List tasks, optionally filtered by status |\n| `get_task` | Get task details + `allowed_actions` for valid transitions |\n| `create_task` | Create a single backlog task |\n| `create_tasks_batch` | Batch-create tasks with index-based dependencies |\n| `update_task` | Modify a backlog task (title, description, deps) |\n| `delete_task` | Delete a backlog task |\n| `move_task` | Queue a phase transition |\n| `get_transition_status` | Check if a queued transition completed or errored |\n| `check_conflicts` | Non-destructive merge conflict check against default branch |\n| `get_notifications` | Fetch pending orchestrator notifications |\n| `read_pane_content` | Read the last N lines of a task's tmux pane |\n| `send_to_task` | Send a message to a task's agent pane |\n\n## Orchestrator Agent (Experimental)\n\n> Press `O` and walk away. Come back to changes ready to merge.\n\nThe orchestrator is an AI agent that **drives other AI agents to completion**. You triage tasks into Planning or Running — the orchestrator takes over from there, advancing each task through its phases until it lands in Review, ready for you to merge.\n\n```bash\nagtx --experimental   # then press O\n```\n\n**What it does:**\n- Monitors tasks in Planning and Running\n- Advances tasks automatically as phases complete (Planning → Running → Review)\n- Respects plugin phase rules — checks `allowed_actions` before each transition\n- Detects stuck tasks (idle for 1+ minute without a phase artifact) and reads the agent pane to diagnose the cause\n- Nudges stuck agents, answers CLI prompts automatically, or escalates to you with a reason when human input is needed\n\n**You triage. It executes.** Move tasks from Backlog into Planning or Running — the orchestrator handles the rest. Merging is your call.\n\n### MCP Integration\n\nThe orchestrator communicates with agtx through the [Model Context Protocol (MCP)](https:\u002F\u002Fmodelcontextprotocol.io). agtx ships with a built-in MCP server (`agtx serve`) that exposes the kanban board as a set of tools over JSON-RPC via stdio.\n\n```\n┌─────────────-┐     MCP (stdio)     ┌──────────────┐     SQLite     ┌─────┐\n│ Orchestrator │ ←─────────────────→ │  MCP Server  │ ←────────────→ │ DB  │\n│ (Claude Code)│                     │ (agtx serve) │                └──┬──┘\n└──────┬───────┘                     └──────────────┘                   │\n       │  push-when-idle notifications                                  │\n┌──────┴───────┐                                                        │\n│   TUI (agtx) │ ←───────────────────────────────────────────────────--─┘\n└──────────────┘\n```\n\n**How it works:**\n1. When you press `O`, the TUI registers the MCP server with the orchestrator agent via `claude mcp add-json --scope local`\n2. The orchestrator receives phase completion notifications pushed to its tmux pane when idle\n3. It reacts by calling `get_task` to check `allowed_actions`, then `move_task` to advance the task\n4. The TUI processes the transition request, executes all side effects (agent switching, skill deployment, prompt sending), and updates the database\n5. If a task has been idle for 1+ minute without a phase artifact, the orchestrator is notified — it reads the pane with `read_pane_content`, then either nudges the agent with `send_to_task` or calls `move_task` with `escalate_to_user` to flag it for your attention\n6. Escalated tasks show a `⚠` badge on the kanban board; opening the task popup shows the reason and dismisses the flag\n7. MCP registration is cleaned up when the orchestrator is stopped\n\n## Benchmark\n\nagtx includes a [SWE-bench Lite](https:\u002F\u002Fwww.swebench.com) benchmark runner that uses agtx itself as the agent orchestration layer — driving coding agent workflows against 300 real GitHub bug-fix tasks via the MCP server.\n\nSee **[benchmark\u002FREADME.md](benchmark\u002FREADME.md)** for setup, usage, bundled configs, and evaluation instructions.\n\n## Contributing\n\nContributions are welcome! Whether it's a bug fix, new plugin, agent integration, or documentation improvement.\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the full guide. Here's the short version:\n\n```bash\n# Fork & clone\ngit clone https:\u002F\u002Fgithub.com\u002F\u003Cyou>\u002Fagtx && cd agtx\n\n# Build & test\ncargo build && cargo test --features test-mocks\n```\n\n### Good First Contributions\n\nNot sure where to start? Here are some ideas:\n\n- **Write a plugin** — A single `plugin.toml` is all you need. See [Creating a Plugin](#plugins) for the full reference\n- **Add a new agent** — Integrate your favorite AI coding CLI. See the [architecture docs](CLAUDE.md) for how agents are structured\n- **Improve documentation** — Found something unclear? Help others by improving it\n- **Report bugs** — Open an [issue](https:\u002F\u002Fgithub.com\u002Ffynnfluegge\u002Fagtx\u002Fissues). Reproduction steps are always appreciated\n- **Browse open issues** — Check the [`good first issue`](https:\u002F\u002Fgithub.com\u002Ffynnfluegge\u002Fagtx\u002Fissues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) label for beginner-friendly tasks\n\n## Development\n\nSee [CLAUDE.md](CLAUDE.md) for full architecture docs and development patterns.\n\n```bash\n# Build\ncargo build\n\n# Run tests (includes mock-based tests)\ncargo test --features test-mocks\n\n# Build release\ncargo build --release\n```\n","agtx 是一个用于编码代理的看板工具，通过它用户可以添加任务并一键启动，由协调器代理自动规划和分配给多个并行运行的编码代理。其核心功能包括支持不同AI编码代理在同一任务上自主协作、自动会话切换与上下文感知，以及在不离开当前会话的情况下捕捉想法并通过简单命令将其转化为任务。项目采用Rust语言开发，具有良好的性能表现。适用于需要高效管理多个AI编码代理协同工作的场景，如软件开发中的代码编写、审查与研究等环节。",2,"2026-06-11 03:50:28","high_star"]