<?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: Erkan DOGAN</title>
    <description>The latest articles on DEV Community by Erkan DOGAN (@erkandogan).</description>
    <link>https://dev.to/erkandogan</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%2F3878898%2F23a5c83e-dd51-4d50-b525-dbb42d054e55.png</url>
      <title>DEV Community: Erkan DOGAN</title>
      <link>https://dev.to/erkandogan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/erkandogan"/>
    <language>en</language>
    <item>
      <title>Claude Code's channel system is limited to one bot, one terminal — here's how I fixed it</title>
      <dc:creator>Erkan DOGAN</dc:creator>
      <pubDate>Tue, 14 Apr 2026 15:56:11 +0000</pubDate>
      <link>https://dev.to/erkandogan/claude-codes-channel-system-is-limited-to-one-bot-one-terminal-heres-how-i-fixed-it-1dj4</link>
      <guid>https://dev.to/erkandogan/claude-codes-channel-system-is-limited-to-one-bot-one-terminal-heres-how-i-fixed-it-1dj4</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbmx2h96lrsyyrh5yt5p3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbmx2h96lrsyyrh5yt5p3.gif" alt="Claude Code Agent Team working example with Oh My Team agents" width="800" height="505"&gt;&lt;/a&gt;&lt;br&gt;
Claude Code shipped an experimental channel system. The idea is great and we are familiar from other tools like OpenClaw — connect a messaging bot to your terminal so you can talk to Claude from your phone. But in practice, it's one bot connected to one terminal. Close the terminal, session dies. Want two projects? Two bots. There's no session management, no routing, no persistence.&lt;/p&gt;

&lt;p&gt;I've been using Claude Code as my primary dev tool for months. I wanted to manage multiple projects from my phone without setting up separate bots for each one. So I built a router on top of Claude Code's channel protocol.&lt;/p&gt;
&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Claude Code's channel feature gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One bot ↔ one terminal session&lt;/li&gt;
&lt;li&gt;Close the terminal, lose the session&lt;/li&gt;
&lt;li&gt;No way to run multiple projects through the same bot&lt;/li&gt;
&lt;li&gt;No session management (start, stop, list, switch)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're working on one thing at a time and sitting at your desk, it works fine. But I'm usually juggling 3-5 projects and I want to check on them from my couch, from my phone, from wherever.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Oh My Team&lt;/strong&gt; is a Claude Code plugin that adds three things:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. A session router
&lt;/h3&gt;

&lt;p&gt;A lightweight router sits between your messaging platform and Claude Code sessions. One bot, multiple sessions, each isolated in its own thread/topic.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Telegram Group: "Oh My Team Hub"
+-- General topic     ← Hub: start/stop/list sessions
+-- Topic: frontend   ← Bridge → Claude (frontend project)
+-- Topic: backend    ← Bridge → Claude (backend project)
+-- Topic: mobile     ← Bridge → Claude (mobile project)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbs37szqsb4k6e9pe2hn.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbs37szqsb4k6e9pe2hn.webp" alt="Oh My Team Telegram Group topic and subject showcase" width="800" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or with Slack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Slack Channel: #omt
+-- Root messages      ← Hub: manage sessions
+-- Thread: "my-app"   ← Bridge → Claude (my-app)
+-- Thread: "backend"  ← Bridge → Claude (backend)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each project gets its own MCP bridge. Messages go directly from your chat thread to that Claude session — the hub never sees project messages, so there's zero extra token cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Persistent sessions via tmux
&lt;/h3&gt;

&lt;p&gt;Every session runs inside tmux. Close your laptop, sessions keep running. Come back, reattach. The hub manages the lifecycle — starting sessions, registering them with the router, tearing them down.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;omt hub add ~/projects/my-app   &lt;span class="c"&gt;# starts a session in tmux&lt;/span&gt;
omt hub attach my-app            &lt;span class="c"&gt;# jump in&lt;/span&gt;
&lt;span class="c"&gt;# Ctrl+B, D to detach&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or just type &lt;code&gt;start ~/projects/my-app&lt;/code&gt; in the Telegram General topic.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Multi-agent teams
&lt;/h3&gt;

&lt;p&gt;This part came from frustration with single-agent workflows. One agent doing research, planning, coding, and reviewing its own work is like one person doing all the roles on a team.&lt;/p&gt;

&lt;p&gt;Oh My Team has 12 specialized agent definitions. When you invoke &lt;code&gt;/oh-my-team:team&lt;/code&gt;, it spawns the right combination into tmux panes — you can watch each agent working in parallel.&lt;/p&gt;

&lt;p&gt;The one I actually use most: &lt;code&gt;/oh-my-team:review-work&lt;/code&gt;. It spawns 5 independent agents that review the code from different angles — goal verification, QA, code quality, security, and context mining. All 5 must pass. It catches things a single agent won't catch about its own output.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/oh-my-team:team Build OAuth with RBAC

&lt;span class="c"&gt;# 5 tmux panes open:&lt;/span&gt;
&lt;span class="c"&gt;# explorer-1: researching existing auth patterns&lt;/span&gt;
&lt;span class="c"&gt;# librarian-1: checking OAuth best practices&lt;/span&gt;
&lt;span class="c"&gt;# hephaestus-1: implementing the feature&lt;/span&gt;
&lt;span class="c"&gt;# hephaestus-2: writing tests&lt;/span&gt;
&lt;span class="c"&gt;# reviewer: reviewing output&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How the router works
&lt;/h2&gt;

&lt;p&gt;The architecture is intentionally simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Router&lt;/strong&gt; (TypeScript, runs on Bun) — HTTP server on port 8800. Maintains a session registry. Receives messages from the platform adapter, looks up which session owns that thread, forwards to the right bridge.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Platform adapter&lt;/strong&gt; — implements a &lt;code&gt;ChannelAdapter&lt;/code&gt; interface (~150 lines). Currently Telegram (Forum Topics) and Slack (Socket Mode). Adding Discord would be one more adapter file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bridge&lt;/strong&gt; (one per session) — MCP channel server that Claude Code connects to. Translates between the router's HTTP calls and Claude Code's channel protocol.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hub session&lt;/strong&gt; — a Claude Code session running the Hub agent. Listens on the General topic/channel root. It manages sessions via the &lt;code&gt;omt&lt;/code&gt; CLI — it's just Claude running bash commands.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Phone → Telegram/Slack → Adapter → Router → Bridge → Claude Code
                                                ↑
                                          MCP channel protocol
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key insight: each bridge is an independent MCP server. The router just routes. Project sessions never share context. The hub session only handles management — "start X", "stop Y", "what's running".&lt;/p&gt;

&lt;h2&gt;
  
  
  Permission prompts
&lt;/h2&gt;

&lt;p&gt;This was the tricky part. Claude Code asks for permission before risky operations (file writes, bash commands). In a terminal, it's a prompt. Through channels, it needs to work asynchronously.&lt;/p&gt;

&lt;p&gt;When Claude asks for permission, the bridge forwards it to your chat thread with a code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude wants to: Run bash command "npm install express"
Reply: yes abc123 / no abc123
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You reply from your phone, the bridge relays back, Claude continues. Works across all platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; oh-my-team          &lt;span class="c"&gt;# install&lt;/span&gt;
omt hub init                  &lt;span class="c"&gt;# interactive wizard: pick Telegram or Slack, paste tokens&lt;/span&gt;
omt hub start                 &lt;span class="c"&gt;# starts router + hub&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Slack, there's a one-click app manifest that pre-configures all the scopes and Socket Mode settings.&lt;/p&gt;

&lt;p&gt;For local use without any messaging platform:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;omt &lt;span class="nt"&gt;-d&lt;/span&gt;                        &lt;span class="c"&gt;# start with auto-permissions&lt;/span&gt;
/oh-my-team:team &lt;span class="k"&gt;do &lt;/span&gt;the thing &lt;span class="c"&gt;# spawn agents&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What I learned building this
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Claude Code's channel protocol is actually well-designed.&lt;/strong&gt; The MCP-based approach made it straightforward to build bridges. The limitation is the 1:1 mapping, not the protocol itself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agents reviewing other agents' work produces genuinely better output.&lt;/strong&gt; One agent can't objectively evaluate its own code. Five independent reviewers catch real issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;tmux is underrated for AI agent management.&lt;/strong&gt; Split panes give you visibility into what each agent is doing. It's not a black box.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Token cost doesn't multiply with agents.&lt;/strong&gt; Each agent gets its own context. The hub only processes management commands. Project sessions are independent. You're not paying for a mega-context that includes everything.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/erkandogan/oh-my-team" rel="noopener noreferrer"&gt;github.com/erkandogan/oh-my-team&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Website: &lt;a href="https://ohmyteam.cc" rel="noopener noreferrer"&gt;ohmyteam.cc&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;npm: &lt;a href="https://www.npmjs.com/package/oh-my-team" rel="noopener noreferrer"&gt;npmjs.com/package/oh-my-team&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's MIT licensed. The whole thing is Markdown files for agents/skills + a small TypeScript channel system. PRs welcome — especially if anyone wants to build the Discord adapter.&lt;/p&gt;

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