{"slug": "i-replaced-coding-agent-orchestration-with-git-worktrees-and-one-python-file", "title": "I replaced coding-agent orchestration with Git worktrees and one Python file", "summary": "A developer released taskpods, a dependency-free Python CLI that uses Git worktrees to give each coding-agent task its own working directory, branch, and index within a shared repository. The tool wraps any agent command passed after --agent, then handles the lifecycle from start through review to commit, push, and pull request via the GitHub CLI, or abort. The v0.4.0 release has drawn 2,117 cumulative downloads on PePy, which the developer says is enough to test whether the worktree model holds up beyond their own setup.", "body_md": "When I started running more than one coding agent against the same repository, the first problem was not model quality. It was filesystem state.\n\nTwo agents in one checkout can overwrite each other's files, change the same index, switch branches underneath each other, and leave a working tree that no longer explains which task produced which change. The obvious response is to add orchestration: a daemon, a task database, a process manager, or a UI.\n\nI wanted to see how far plain Git could go first.\n\nA Git worktree gives one repository several working directories. Each worktree has its own checked-out branch and index, while the object database is shared.\n\nThat maps cleanly to a coding-agent task:\n\nI turned that mapping into **taskpods**, a small Python CLI with no runtime dependencies.\n\n```\npip install taskpods\n```\n\nFrom inside a Git repository:\n\n```\ntaskpods start tests --agent codex exec --sandbox workspace-write \"add API tests\"\ntaskpods start docs --agent claude -p \"improve the docs\"\n```\n\nThe first command creates .taskpods/tests on pods/tests. The second creates .taskpods/docs on pods/docs. Each agent runs with its worktree as the current directory.\n\nThe agents do not need a taskpods integration. Everything after `--agent` is passed through as the command to execute. That means the same mechanism works with Claude Code, Codex CLI, Gemini CLI, opencode, aider, or a local script.\n\nAn agent process exiting does not delete its worktree. The pod stays in place so I can inspect the actual diff:\n\n```\ntaskpods list\ngit -C .taskpods/tests diff main\ngit -C .taskpods/docs diff main\n```\n\nIf I want the change, I finish the pod:\n\n```\ntaskpods done tests -m \"Add API tests\" --remove\n```\n\n`done` stages and commits the worktree, pushes its branch, and uses the GitHub CLI to open a pull request when gh is available. `--remove` removes the worktree after the branch is safely on the remote.\n\nIf I do not want the change:\n\n```\ntaskpods abort tests\n```\n\nThe abort path checks whether the branch exists on the remote. If it does, taskpods refuses to delete it automatically. That guard matters because \"disposable\" should describe the local environment, not already-pushed work.\n\nThere is also a cleanup command:\n\n```\ntaskpods prune\n```\n\nIt removes pods whose branches have already been merged upstream.\n\nThere are good tools for supervising fleets of agents, managing terminal sessions, assigning tasks, and reviewing results. taskpods is intentionally below that layer.\n\nIt does not schedule agents or coordinate their reasoning. It does not maintain a database. It does not run a daemon. It makes one narrow guarantee: each task gets a separate Git worktree and branch, and the lifecycle from start to review to PR or abort is explicit.\n\nThe current release is one Python file, supports Python 3.9+, and has no runtime package dependencies. Git remains the source of truth.\n\nThat small surface also makes it composable. A shell script, CI job, task runner, or higher-level orchestrator can call taskpods without adopting another state model.\n\nThe current release is **v0.4.0**. PePy reports 2,117 cumulative downloads, which is enough to start seeing whether the worktree model survives use outside my own setup but far too early to declare the interface settled.\n\nThe cases I want to learn more about are:\n\n`main`\nThe code and issue tracker are here:\n\n[https://github.com/yanairon/taskpods](https://github.com/yanairon/taskpods)\n\nIf you use Claude Code specifically, I maintain claude-hookbook separately: reviewed hooks for formatters, guardrails, and notifications. I kept it separate because hooks configure one agent, while taskpods isolates any agent at the Git layer.\n\nIf taskpods saves you time, the repository has optional GitHub Sponsors and Ko-fi links.", "url": "https://wpnews.pro/news/i-replaced-coding-agent-orchestration-with-git-worktrees-and-one-python-file", "canonical_source": "https://dev.to/yanairon/i-replaced-coding-agent-orchestration-with-git-worktrees-and-one-python-file-4gj2", "published_at": "2026-09-16 18:56:51+00:00", "updated_at": "2026-09-16 19:10:52.402358+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-tools", "ai-products"], "entities": ["taskpods", "Git", "GitHub", "Claude Code", "Codex CLI", "Gemini CLI", "opencode", "aider"], "alternates": {"html": "https://wpnews.pro/news/i-replaced-coding-agent-orchestration-with-git-worktrees-and-one-python-file", "markdown": "https://wpnews.pro/news/i-replaced-coding-agent-orchestration-with-git-worktrees-and-one-python-file.md", "text": "https://wpnews.pro/news/i-replaced-coding-agent-orchestration-with-git-worktrees-and-one-python-file.txt", "jsonld": "https://wpnews.pro/news/i-replaced-coding-agent-orchestration-with-git-worktrees-and-one-python-file.jsonld"}}