<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Pedro</title>
    <description>The latest articles on DEV Community by Pedro (@gitpcl).</description>
    <link>https://dev.to/gitpcl</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F571231%2F986f243e-ef17-48e8-9049-e62b8c6ee6f1.jpeg</url>
      <title>DEV Community: Pedro</title>
      <link>https://dev.to/gitpcl</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gitpcl"/>
    <language>en</language>
    <item>
      <title>I Got Tired of Switching Between AI Coding Sessions, So I Built Open Orchestrator</title>
      <dc:creator>Pedro</dc:creator>
      <pubDate>Mon, 02 Feb 2026 02:43:04 +0000</pubDate>
      <link>https://dev.to/gitpcl/i-got-tired-of-switching-between-ai-coding-sessions-so-i-built-open-orchestrator-4p4n</link>
      <guid>https://dev.to/gitpcl/i-got-tired-of-switching-between-ai-coding-sessions-so-i-built-open-orchestrator-4p4n</guid>
      <description>&lt;p&gt;If you've ever used Claude Code, Droid, or OpenCode on a real project, you know the pain: you're deep into a feature branch, your AI agent has full context, and then you need to fix a bug on another branch. Or test an API change. Or review a PR.&lt;/p&gt;

&lt;p&gt;So you stop everything. Stash your work. Switch branches. Lose all your AI context. Start over.&lt;/p&gt;

&lt;p&gt;I did this dozens of times a week before I snapped and decided to fix it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;I run strategy at a software dev shop, but I'm in the code every day. We build systems for manufacturing and aerospace clients, and juggling multiple workstreams is just the reality. One afternoon I had three things going at once: a frontend auth flow, an backend refactor, and a hotfix for production. Each needed its own branch, its own context, its own AI session.&lt;/p&gt;

&lt;p&gt;I kept bouncing between terminal tabs, re-explaining context to Claude Code every time I switched. It felt absurd. I was spending more time &lt;em&gt;managing&lt;/em&gt; my AI sessions than actually building.&lt;/p&gt;

&lt;p&gt;That's when it clicked: git worktrees already solve the branch-switching problem for code. What if I could solve it for AI sessions too?&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/gitpcl/openorchestrator" rel="noopener noreferrer"&gt;Open Orchestrator&lt;/a&gt; is a Python CLI (&lt;code&gt;owt&lt;/code&gt;) that combines git worktrees, tmux, and AI coding tools into a single orchestration layer. The core idea is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One command creates an isolated workspace with its own branch, its own tmux session, and its own AI agent — all running in parallel.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create three parallel workstreams in seconds&lt;/span&gt;
owt create feature/auth-flow
owt create fix/api-bug
owt create feature/dashboard-redesign
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Each of those commands:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Creates a git worktree (isolated copy of your repo on its own branch)&lt;/li&gt;
&lt;li&gt;Spins up a tmux session with customizable pane layouts&lt;/li&gt;
&lt;li&gt;Auto-detects your project type and installs dependencies&lt;/li&gt;
&lt;li&gt;Copies over &lt;code&gt;.env&lt;/code&gt; files and configuration&lt;/li&gt;
&lt;li&gt;Launches your AI tool of choice (Claude Code, OpenCode, or Droid)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And here's the part that changed everything for me: &lt;strong&gt;you can send commands to any of those sessions without leaving your current terminal.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# You're working on auth. Fire off a task to the API worktree.&lt;/span&gt;
owt send api-bug &lt;span class="s2"&gt;"Review the rate limiting logic and suggest improvements"&lt;/span&gt;

&lt;span class="c"&gt;# Keep working. Check on everyone later.&lt;/span&gt;
owt status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  The Architecture Decisions That Mattered
&lt;/h2&gt;

&lt;p&gt;Building this taught me a few things worth sharing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Git worktrees over containers.&lt;/strong&gt; My first instinct was Docker. But worktrees are lightweight, share the same &lt;code&gt;.git&lt;/code&gt; directory, and don't need any daemon running. They're the perfect abstraction for parallel branches — you get full isolation with almost zero overhead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;tmux as the session layer.&lt;/strong&gt; I considered building a custom process manager, but tmux already handles everything: pane layouts, session persistence, send-keys for remote command injection. Why reinvent it? I added a &lt;code&gt;--no-tmux&lt;/code&gt; mode later for people who prefer simpler setups, but tmux remains the power-user path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project detection that actually works.&lt;/strong&gt; Open Orchestrator scans for &lt;code&gt;pyproject.toml&lt;/code&gt;, &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;Cargo.toml&lt;/code&gt;, &lt;code&gt;go.mod&lt;/code&gt;, and &lt;code&gt;composer.json&lt;/code&gt; — then picks the right package manager. Python project with &lt;code&gt;uv.lock&lt;/code&gt;? It uses &lt;code&gt;uv&lt;/code&gt;. Node project with &lt;code&gt;bun.lockb&lt;/code&gt;? It uses &lt;code&gt;bun&lt;/code&gt;. No config needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Status tracking with hooks.&lt;/strong&gt; Every worktree has a status (&lt;code&gt;idle&lt;/code&gt;, &lt;code&gt;working&lt;/code&gt;, &lt;code&gt;blocked&lt;/code&gt;, &lt;code&gt;completed&lt;/code&gt;, &lt;code&gt;error&lt;/code&gt;) that gets tracked in a local JSON store. You can wire up hooks to get desktop notifications, Slack webhooks, or custom scripts triggered on status changes. The live TUI dashboard pulls all of this together.&lt;/p&gt;
&lt;h2&gt;
  
  
  Then Claude Code's Creator Posted the Same Workflow
&lt;/h2&gt;

&lt;p&gt;While I was building this, Boris Cherny — the creator of Claude Code — &lt;a href="https://x.com/bcherny/status/2017742741636321619" rel="noopener noreferrer"&gt;dropped a thread&lt;/a&gt; with tips from the Claude Code team. I almost fell out of my chair.&lt;/p&gt;

&lt;p&gt;Tip #1: the biggest productivity unlock is &lt;strong&gt;running multiple Claude sessions in parallel using git worktrees&lt;/strong&gt;. He described setting up isolated checkouts so each session works without conflicts — one tab per task. His earlier thread revealed he personally runs 5 Claudes in parallel in his terminal, numbered 1-5, plus 5-10 more on claude.ai.&lt;/p&gt;

&lt;p&gt;That was the exact architecture I'd been building toward. But more than that, several of his other tips mapped directly to features I'd already shipped:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Invest in your CLAUDE.md"&lt;/strong&gt; — &lt;code&gt;owt create&lt;/code&gt; automatically copies your &lt;code&gt;CLAUDE.md&lt;/code&gt; into each new worktree with path adjustments. Your accumulated AI context travels with every workspace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Create your own skills and commit them to git"&lt;/strong&gt; — Open Orchestrator ships as a Claude Code skill. Run &lt;code&gt;owt skill install&lt;/code&gt; and Claude itself can manage worktrees through slash commands:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/worktree create feature/something-cool
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;"One tab per task/worktree"&lt;/strong&gt; — This is the exact mental model. Each &lt;code&gt;owt create&lt;/code&gt; gives you a dedicated tmux session for that task, with system notifications when an agent needs input.&lt;/p&gt;

&lt;p&gt;Seeing the creator of Claude Code recommend the same patterns I'd independently arrived at was the validation I didn't know I needed. It told me this wasn't just my workflow — it's how parallel AI development &lt;em&gt;should&lt;/em&gt; work.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Workflow That Sold Me
&lt;/h2&gt;

&lt;p&gt;Here's my actual day-to-day now:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Morning: set up the day's work&lt;/span&gt;
owt create feature/user-permissions
owt create fix/memory-leak &lt;span class="nt"&gt;--plan-mode&lt;/span&gt;
owt create feature/reporting-api &lt;span class="nt"&gt;--ai-tool&lt;/span&gt; opencode

&lt;span class="c"&gt;# Fire off tasks&lt;/span&gt;
owt send user-permissions &lt;span class="s2"&gt;"Implement role-based access control for the admin panel"&lt;/span&gt;
owt send memory-leak &lt;span class="s2"&gt;"Investigate the memory leak in the WebSocket handler, plan only"&lt;/span&gt;
owt send reporting-api &lt;span class="s2"&gt;"Build the quarterly revenue endpoint with proper pagination"&lt;/span&gt;

&lt;span class="c"&gt;# Monitor everything from one terminal&lt;/span&gt;
owt dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The dashboard gives me a real-time view of all three agents: what they're working on, token usage, estimated costs, and how long since their last activity.&lt;/p&gt;

&lt;p&gt;When an agent finishes, I switch into its session to review:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;owt switch user-permissions &lt;span class="nt"&gt;--tmux&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;No context loss. No re-explaining. The full conversation history is right there.&lt;/p&gt;
&lt;h2&gt;
  
  
  GitHub PR Integration
&lt;/h2&gt;

&lt;p&gt;One feature I didn't plan but couldn't live without: PR linking.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;owt &lt;span class="nb"&gt;pr link &lt;/span&gt;user-permissions &lt;span class="nt"&gt;--pr&lt;/span&gt; 47
owt &lt;span class="nb"&gt;pr &lt;/span&gt;status
owt &lt;span class="nb"&gt;pr &lt;/span&gt;cleanup  &lt;span class="c"&gt;# auto-delete worktrees for merged PRs&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;When a PR gets merged, &lt;code&gt;owt pr cleanup&lt;/code&gt; handles the teardown. No more orphaned worktrees accumulating on disk.&lt;/p&gt;
&lt;h2&gt;
  
  
  What's Under the Hood
&lt;/h2&gt;

&lt;p&gt;The stack is intentionally minimal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.10+&lt;/strong&gt; with Click for the CLI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rich&lt;/strong&gt; for the TUI dashboard and formatted output&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git&lt;/strong&gt; and &lt;strong&gt;tmux&lt;/strong&gt; as the core infrastructure&lt;/li&gt;
&lt;li&gt;No database — just JSON files in &lt;code&gt;~/.open-orchestrator/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;MIT licensed, fully open source&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The codebase follows clean architecture principles with separate layers for core logic, models, and CLI. Everything is typed and tested with pytest.&lt;/p&gt;
&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/gitpcl/openorchestrator.git
&lt;span class="nb"&gt;cd &lt;/span&gt;openorchestrator
uv pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# Create your first parallel worktree&lt;/span&gt;
owt create feature/try-it-out
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You'll need Python 3.10+, git, and tmux. If you use Claude Code, it works out of the box — just make sure the CLI is installed.&lt;/p&gt;

&lt;p&gt;The repo also ships with Claude Code slash commands and a context-injection hook, so Claude itself can manage worktrees for you:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/worktree create feature/something-cool
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;I'm actively working on a few things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Session sharing&lt;/strong&gt; — copy AI context between worktrees so agents can build on each other's work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost budgets&lt;/strong&gt; — set per-worktree token limits and auto-pause when exceeded&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team mode&lt;/strong&gt; — shared dashboard for teams running parallel AI workstreams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built Open Orchestrator to scratch my own itch. The fact that Claude Code's creator independently arrived at the same patterns just tells me the problem is real and the solution is right.&lt;/p&gt;

&lt;p&gt;If you're juggling multiple branches and AI coding tools, give &lt;a href="https://github.com/gitpcl/openorchestrator" rel="noopener noreferrer"&gt;Open Orchestrator&lt;/a&gt; a try. Stars, issues, and PRs are all welcome.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Open Orchestrator is open source under the MIT license. Built because managing AI sessions shouldn't be harder than the actual coding.&lt;/em&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/gitpcl" rel="noopener noreferrer"&gt;
        gitpcl
      &lt;/a&gt; / &lt;a href="https://github.com/gitpcl/openorchestrator" rel="noopener noreferrer"&gt;
        openorchestrator
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Open source git worktree + tmux orchestration for parallel AI-assisted development.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Open Orchestrator&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;A Git Worktree + AI coding tool orchestration tool combining a Python CLI with plugin integration for managing parallel development workflows. Supports Claude Code, OpenCode, and Droid.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Overview&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Open Orchestrator enables developers to work on multiple tasks simultaneously by creating isolated worktrees, each with its own Claude Code session and tmux pane. Perfect for parallel development workflows where you need to context-switch between features without losing your place.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;


&lt;ul&gt;

&lt;li&gt;

&lt;strong&gt;Git Worktree Management&lt;/strong&gt;: Create, list, switch, and delete worktrees with automatic branch management&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;tmux Integration&lt;/strong&gt;: Auto-create tmux sessions with customizable layouts for each worktree&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Multi-AI Tool Support&lt;/strong&gt;: Auto-launch Claude Code, OpenCode, or Droid in new sessions&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Project Detection&lt;/strong&gt;: Automatically detect project type (Python, Node.js, Rust, Go, PHP) and package manager&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Dependency Installation&lt;/strong&gt;: Auto-install dependencies when creating new worktrees&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Environment Setup&lt;/strong&gt;: Copy &lt;code&gt;.env&lt;/code&gt; files and &lt;code&gt;CLAUDE.md&lt;/code&gt; with path adjustments&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Cleanup Service&lt;/strong&gt;: Detect and…&lt;/li&gt;

&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/gitpcl/openorchestrator" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


</description>
      <category>ai</category>
      <category>productivity</category>
      <category>opensource</category>
      <category>claudecode</category>
    </item>
  </channel>
</rss>
