<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>DegenSing AI Talks</title>
        <link>https://paragraph.com/@degensing</link>
        <description>undefined</description>
        <lastBuildDate>Fri, 08 May 2026 04:31:22 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>DegenSing AI Talks</title>
            <url>https://storage.googleapis.com/papyrus_images/de92165310a208cb2469dbf5393c488c9f5850ba3e08331e96c861b4dc76d783.jpg</url>
            <link>https://paragraph.com/@degensing</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[I Stopped Managing Code. I Now Manage the AI That Manages the Code.]]></title>
            <link>https://paragraph.com/@degensing/i-stopped-managing-code-i-now-manage-the-ai-that-manages-the-code</link>
            <guid>TlovdvdPFXiaVLqLDUCL</guid>
            <pubDate>Wed, 25 Feb 2026 10:57:10 GMT</pubDate>
            <description><![CDATA[When you use Claude Code or Codex directly, you are managing this tradeoff constantly. You paste in a bit of context about what the feature is for. You add some relevant code. You hope the model figures out the rest. It usually does fine on small tasks. It falls apart on anything that requires understanding why a feature matters.]]></description>
            <content:encoded><![CDATA[<p>94 commits in a single day. Three client calls. Editor never opened once.</p><p>That is not a highlight reel stat. That is what this system produces on a busy day. The average is 50 commits. The record is 94. And none of it required me to sit in a terminal babysitting an agent.</p><p>Most builders using Claude Code or Codex are treating them as the destination. They are not. They are workers. The unlock is building the layer above them: an orchestrator that holds your business context, writes precise prompts per task, routes work to the right model, monitors progress, and only surfaces PRs when they are actually ready to merge.</p><p>This is the full breakdown. The architecture, the reasoning behind every decision, the exact setup code, and an honest account of where this system breaks down.</p><h2 id="h-why-claude-code-alone-has-a-ceiling" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Why Claude Code Alone Has a Ceiling</strong></h2><p>Here is the constraint nobody talks about clearly: context windows are zero-sum. Every token you give to business context is a token you cannot give to code. Every token you give to code is a token you cannot give to customer history, meeting notes, or the three failed approaches you tried last week.</p><p>When you use Claude Code or Codex directly, you are managing this tradeoff constantly. You paste in a bit of context about what the feature is for. You add some relevant code. You hope the model figures out the rest. It usually does fine on small tasks. It falls apart on anything that requires understanding why a feature matters, not just what it should do.</p><p>The solution is not a bigger context window. It is specialisation through separation. You need one AI that holds everything about your business and one AI that holds everything about your code. They talk to each other. You talk to the orchestrator. The orchestrator talks to the workers.</p><p>This is the two-tier architecture. OpenClaw is the orchestration layer. Codex and Claude Code are the workers. Here is exactly what each one knows:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/07c9fb87c7d6a9365b2c494e2f5f3381cd24b794bee32cbb778685619130fd37.png" blurdataurl="data:image/png;base64,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" nextheight="1279" nextwidth="1182" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><hr><h2 id="h-the-full-8-step-workflow" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>The Full 8-Step Workflow</strong></h2><p>Here is the system end-to-end, using a real example: a customer on an agency plan requested a way to reuse configurations across their team. Here is exactly how that moves from customer call to merged PR without me touching the code.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f787e23d559935b004cd8174ccd87d01ce1e0bcd8b16b57daf2db4190d2675dc.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAgCAIAAAB/3NSYAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAEQElEQVR4nHVUW2/cRBR2ehF/oQ888luA38ETLzyUSxWEqCqyIbcKIXjjDYEEeUBISFQCdUOzu44dz87YMzseX8f2+rJer7NRk9AKNQihmdlNQlNWn0ZnxjNnzznfd472xut37tzWNE177fZN7drv1sqNGysrt26+/Ontt97Uvvpi871339na+Gxnc217q7O91Xm48/nW5prAhjpc395aX+886Kzd76zdX+88+PST1d0fv9fqSfpwZ6Mt4ybzjur07GQ2b8un8+rZ2dH5i9O//zo5f6Fw+s/5nxJn5y9Onz8/1iZF1NSpgw71wZ7eezy0Bnq/ax48GVp937UJBiMCKBkyipiLCAYEAx7SWZNrdZXM24JggICO0aFjm9ixINQRNBxkOMgcAt1BpmObEOpDIM4pAeJlOQ6HYJAmXlXy2XR8gaZOFepqYVyelLxtci3y8MerH/ohob6TJ16e+BlnSejWRdw2+VVfV522TSGinU3HEOp73Uf6YM/Q9/R+t9t9BKHuuzZz7YDZHkWRhxmFjCJKYTkO522lNXV6+rThIaUie0t8I0MJ4CAziV0ZhYgliV0JVpf8qC01HtKdzbVxHhWT/+R5gbbJ20atCyyizbj3y8+7EOq9QdcyewRbtiwpdsxyHE2KBcpxKCGMIg3Fy6ZOT47ryMMONBzbFASIZ5ZkxUTQgEC3peHYpiAPGhSD2TSXeR7XPBgRxyLYwpcrwI5FCVC5xZFIMuNunnh1lYj/5CH9+sudJPV4JlKvq2SxLjF7FSuiQhlnuz98a9uHAA6wI2rruyjj3sW9Wr5fqkK6E0qQeT47O4o8jIChglRx+q5wwQSTZERU5EN1IQmpVELJeUjjyKUURh5RlSxSX9bQV4ayL9YFKwGzVz+664eExeJZmQWTIrrKXnsNl+rLOKMUmgdPIBgcGvs2MpKYKcXwkC6lIyqccRYHozzxhPpkiXNKhrInBwrA6i8MUxiW2bPMnjqBQI8DMm9LkWeRiv4ImB15JA5IHIxUAauST4q4FmskqJLbpk6lJAvRZfc+uMtTNy3CuhTVV5dkMvkrMa0SwWdd8tjDBFumsa/3HkOg64O9/T9+Q1BkGzBHIQ5w5C1QpKGMdpIen7S+ayMoRSvlKrVqyMExDJjtu3bkYd+1fRcFzM4TX1Soyjzn1++aMp5VfCq1pjJRmLfl/7JScgp/+oYhHQx+d+CBg8yA2QQLrTvI8D38spJLsZV5TtL5cSP4NHrA6h8a+4oVy+wBs4+dRd+MCFBdJrUNxQSrq6Qah3niJaEbB4SHNApHcUBkbmTZ0GGRR0W6tFNfROt7ePXe+65ns5jk0sWyA8UQuTZW1DTMxMtJEfmujR0xREYEQKBDMIiDUZH6yosapVe3cvZJPudtkcQuwYBRFDCHUcRDmnEv40KoCnmy2Covi/6UTGQLTAWWw66QuEqJ2Eq2qn8BXWPPDpG1rf4AAAAASUVORK5CYII=" nextheight="1698" nextwidth="982" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><hr><h2 id="h-the-setup-code" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>The Setup Code</strong></h2><p>Here is the actual implementation. There are five pieces you need: the OpenClaw config, the agent spawn script, the monitoring cron, the task registry schema, and the review trigger. Start with OpenClaw installed and connected to Telegram, then layer these on top.</p><h3 id="h-step-1-install-openclaw-and-configure-zoe" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Step 1: Install OpenClaw and Configure Zoe</strong></h3><pre data-type="codeBlock" text="# Install globally (requires Node 22+)
npm install -g openclaw

# Run the onboarding wizard
openclaw onboard

# This configures your AI provider, links your Telegram channel,
# and installs the background gateway service."><code><span class="hljs-comment"># Install globally (requires Node 22+)</span>
npm install -g openclaw

<span class="hljs-comment"># Run the onboarding wizard</span>
openclaw onboard

<span class="hljs-comment"># This configures your AI provider, links your Telegram channel,</span>
<span class="hljs-comment"># and installs the background gateway service.</span></code></pre><p>Your OpenClaw config lives at <code>~/.openclaw/openclaw.json</code>. Here is Zoe's configuration for this orchestration setup:</p><pre data-type="codeBlock" text="{
  identity: {
    name: &quot;Zoe&quot;,
    emoji: &quot;🤖&quot;,
    theme: &quot;technical orchestrator with full business context&quot;
  },
  agent: {
    workspace: &quot;~/.openclaw/workspace&quot;,
    model: {
      primary: &quot;anthropic/claude-opus-4-5&quot;,
      fallbacks: [&quot;anthropic/claude-sonnet-4-20250514&quot;]
    },
    elevated: { enabled: true },
    heartbeat: { every: &quot;30m&quot;, target: &quot;last&quot; }
  },
  channels: {
    telegram: {
      token: &quot;YOUR_BOT_TOKEN&quot;,
      allowFrom: [&quot;YOUR_TELEGRAM_USER_ID&quot;]
    }
  },
  cron: {
    enabled: true,
    maxConcurrentRuns: 2
  }
}"><code>{
  identity: {
    name: <span class="hljs-string">"Zoe"</span>,
    emoji: <span class="hljs-string">"🤖"</span>,
    theme: <span class="hljs-string">"technical orchestrator with full business context"</span>
  },
  agent: {
    workspace: <span class="hljs-string">"~/.openclaw/workspace"</span>,
    model: {
      primary: <span class="hljs-string">"anthropic/claude-opus-4-5"</span>,
      fallbacks: [<span class="hljs-string">"anthropic/claude-sonnet-4-20250514"</span>]
    },
    elevated: { enabled: true },
    heartbeat: { every: <span class="hljs-string">"30m"</span>, target: <span class="hljs-string">"last"</span> }
  },
  channels: {
    telegram: {
      token: <span class="hljs-string">"YOUR_BOT_TOKEN"</span>,
      allowFrom: [<span class="hljs-string">"YOUR_TELEGRAM_USER_ID"</span>]
    }
  },
  cron: {
    enabled: true,
    maxConcurrentRuns: <span class="hljs-number">2</span>
  }
}</code></pre><h3 id="h-step-2-create-the-agent-spawn-script" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Step 2: Create the Agent Spawn Script</strong></h3><p>Save this as <code>.clawdbot/spawn-agent.sh</code> in your project root. This script creates the isolated worktree, registers the task, and fires the agent:</p><pre data-type="codeBlock" text="#!/bin/bash
# Usage: ./spawn-agent.sh [task-id] [branch-name] [agent-type] [model]
# Example: ./spawn-agent.sh feat-templates feat/custom-templates codex gpt-5.3-codex

TASK_ID=$1
BRANCH=$2
AGENT=$3
MODEL=$4
WORKTREE_DIR=&quot;../${TASK_ID}-worktrees/${TASK_ID}&quot;

# Create isolated git worktree
git worktree add &quot;$WORKTREE_DIR&quot; -b &quot;$BRANCH&quot; origin/main
cd &quot;$WORKTREE_DIR&quot; &amp;&amp; pnpm install

# Register task in JSON registry
cat &gt; .clawdbot/active-tasks.json &lt;&lt; EOF
{
  &quot;id&quot;: &quot;$TASK_ID&quot;,
  &quot;tmuxSession&quot;: &quot;${AGENT}-${TASK_ID}&quot;,
  &quot;agent&quot;: &quot;$AGENT&quot;,
  &quot;branch&quot;: &quot;$BRANCH&quot;,
  &quot;worktree&quot;: &quot;$WORKTREE_DIR&quot;,
  &quot;startedAt&quot;: $(date +%s000),
  &quot;status&quot;: &quot;running&quot;,
  &quot;notifyOnComplete&quot;: true
}
EOF

# Spawn the agent in a tmux session
if [ &quot;$AGENT&quot; == &quot;codex&quot; ]; then
  tmux new-session -d -s &quot;${AGENT}-${TASK_ID}&quot; \
    -c &quot;$WORKTREE_DIR&quot; \
    &quot;codex --model $MODEL \
      -c 'model_reasoning_effort=high' \
      --dangerously-bypass-approvals-and-sandbox \
      'Your task prompt here'&quot;
elif [ &quot;$AGENT&quot; == &quot;claude&quot; ]; then
  tmux new-session -d -s &quot;${AGENT}-${TASK_ID}&quot; \
    -c &quot;$WORKTREE_DIR&quot; \
    &quot;claude --model claude-opus-4-5 \
      --dangerously-skip-permissions \
      -p 'Your task prompt here'&quot;
fi

echo &quot;Agent spawned: ${AGENT}-${TASK_ID} on branch $BRANCH&quot;"><code>#<span class="hljs-operator">!</span><span class="hljs-operator">/</span>bin<span class="hljs-operator">/</span>bash
# Usage: ./spawn<span class="hljs-operator">-</span>agent.sh [task<span class="hljs-operator">-</span>id] [branch<span class="hljs-operator">-</span>name] [agent<span class="hljs-operator">-</span><span class="hljs-keyword">type</span>] [model]
# Example: ./spawn<span class="hljs-operator">-</span>agent.sh feat<span class="hljs-operator">-</span>templates feat<span class="hljs-operator">/</span>custom<span class="hljs-operator">-</span>templates codex gpt<span class="hljs-number">-5.3</span><span class="hljs-operator">-</span>codex

TASK_ID<span class="hljs-operator">=</span>$1
BRANCH<span class="hljs-operator">=</span>$2
AGENT<span class="hljs-operator">=</span>$3
MODEL<span class="hljs-operator">=</span>$4
WORKTREE_DIR<span class="hljs-operator">=</span><span class="hljs-string">"../${TASK_ID}-worktrees/${TASK_ID}"</span>

# Create isolated git worktree
git worktree add <span class="hljs-string">"$WORKTREE_DIR"</span> <span class="hljs-operator">-</span>b <span class="hljs-string">"$BRANCH"</span> origin<span class="hljs-operator">/</span>main
cd <span class="hljs-string">"$WORKTREE_DIR"</span> <span class="hljs-operator">&amp;</span><span class="hljs-operator">&amp;</span> pnpm install

# Register task in JSON registry
cat <span class="hljs-operator">&gt;</span> .clawdbot/active<span class="hljs-operator">-</span>tasks.json <span class="hljs-operator">&lt;</span><span class="hljs-operator">&lt;</span> EOF
{
  <span class="hljs-string">"id"</span>: <span class="hljs-string">"$TASK_ID"</span>,
  <span class="hljs-string">"tmuxSession"</span>: <span class="hljs-string">"${AGENT}-${TASK_ID}"</span>,
  <span class="hljs-string">"agent"</span>: <span class="hljs-string">"$AGENT"</span>,
  <span class="hljs-string">"branch"</span>: <span class="hljs-string">"$BRANCH"</span>,
  <span class="hljs-string">"worktree"</span>: <span class="hljs-string">"$WORKTREE_DIR"</span>,
  <span class="hljs-string">"startedAt"</span>: $(date <span class="hljs-operator">+</span><span class="hljs-operator">%</span>s000),
  <span class="hljs-string">"status"</span>: <span class="hljs-string">"running"</span>,
  <span class="hljs-string">"notifyOnComplete"</span>: <span class="hljs-literal">true</span>
}
EOF

# Spawn the agent in a tmux session
<span class="hljs-keyword">if</span> [ <span class="hljs-string">"$AGENT"</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">"codex"</span> ]; then
  tmux <span class="hljs-keyword">new</span><span class="hljs-operator">-</span>session <span class="hljs-operator">-</span>d <span class="hljs-operator">-</span>s <span class="hljs-string">"${AGENT}-${TASK_ID}"</span> \
    <span class="hljs-operator">-</span>c <span class="hljs-string">"$WORKTREE_DIR"</span> \
    <span class="hljs-string">"codex --model $MODEL \
      -c 'model_reasoning_effort=high' \
      --dangerously-bypass-approvals-and-sandbox \
      'Your task prompt here'"</span>
elif [ <span class="hljs-string">"$AGENT"</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">"claude"</span> ]; then
  tmux <span class="hljs-keyword">new</span><span class="hljs-operator">-</span>session <span class="hljs-operator">-</span>d <span class="hljs-operator">-</span>s <span class="hljs-string">"${AGENT}-${TASK_ID}"</span> \
    <span class="hljs-operator">-</span>c <span class="hljs-string">"$WORKTREE_DIR"</span> \
    <span class="hljs-string">"claude --model claude-opus-4-5 \
      --dangerously-skip-permissions \
      -p 'Your task prompt here'"</span>
fi

echo <span class="hljs-string">"Agent spawned: ${AGENT}-${TASK_ID} on branch $BRANCH"</span></code></pre><h3 id="h-step-3-mid-task-redirection-via-tmux" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Step 3: Mid-Task Redirection via tmux</strong></h3><p>This is where tmux pays for itself. When an agent drifts, you do not kill and restart. You redirect in real time:</p><pre data-type="codeBlock" text="# Agent going the wrong direction:
tmux send-keys -t codex-templates \
  &quot;Stop. Focus on the API layer first, not the UI.&quot; Enter

# Agent needs more context:
tmux send-keys -t codex-templates \
  &quot;The schema is in src/types/template.ts. Use that.&quot; Enter

# Check what all active agents are doing:
tmux list-sessions"><code><span class="hljs-comment"># Agent going the wrong direction:</span>
tmux <span class="hljs-keyword">send</span>-<span class="hljs-keyword">keys</span> -t codex-templates \
  <span class="hljs-string">"Stop. Focus on the API layer first, not the UI."</span> Enter

<span class="hljs-comment"># Agent needs more context:</span>
tmux <span class="hljs-keyword">send</span>-<span class="hljs-keyword">keys</span> -t codex-templates \
  <span class="hljs-string">"The schema is in src/types/template.ts. Use that."</span> Enter

<span class="hljs-comment"># Check what all active agents are doing:</span>
tmux list-sessions</code></pre><h3 id="h-step-4-the-monitoring-cron" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Step 4: The Monitoring Cron</strong></h3><p>Save this as <code>.clawdbot/check-agents.sh</code>. This runs every 10 minutes and is the deterministic backbone of the whole system:</p><pre data-type="codeBlock" text="#!/bin/bash
# Reads active-tasks.json and checks each tracked agent

TASKS_FILE=&quot;.clawdbot/active-tasks.json&quot;
MAX_RETRIES=3

# Read all running tasks
for task in $(jq -r '.[] | select(.status==&quot;running&quot;) | .id' &quot;$TASKS_FILE&quot;); do
  SESSION=$(jq -r &quot;.[] | select(.id==\&quot;$task\&quot;) | .tmuxSession&quot; &quot;$TASKS_FILE&quot;)
  BRANCH=$(jq -r  &quot;.[] | select(.id==\&quot;$task\&quot;) | .branch&quot;    &quot;$TASKS_FILE&quot;)
  RETRIES=$(jq -r &quot;.[] | select(.id==\&quot;$task\&quot;) | .retries // 0&quot; &quot;$TASKS_FILE&quot;)

  # 1. Check if tmux session is alive
  if ! tmux has-session -t &quot;$SESSION&quot; 2&gt;/dev/null; then
    echo &quot;Session $SESSION dead. Respawning...&quot;
    # Respawn logic here (calls spawn-agent.sh with same params)
    continue
  fi

  # 2. Check for open PR on tracked branch
  PR_NUMBER=$(gh pr list --head &quot;$BRANCH&quot; --json number -q '.[0].number')
  if [ -z &quot;$PR_NUMBER&quot; ]; then continue; fi

  # 3. Check CI status
  CI_STATUS=$(gh pr checks &quot;$PR_NUMBER&quot; --json state -q '.[] | .state' | sort -u)

  if [[ &quot;$CI_STATUS&quot; == *&quot;FAILURE&quot;* ]]; then
    if [ &quot;$RETRIES&quot; -lt &quot;$MAX_RETRIES&quot; ]; then
      echo &quot;CI failed on PR $PR_NUMBER. Respawning with updated prompt...&quot;
      # Increment retry count, update prompt with failure reason, respawn
    else
      echo &quot;Max retries hit on $task. Alerting human.&quot;
      # Send Telegram alert via openclaw message
    fi
  elif [[ &quot;$CI_STATUS&quot; == &quot;SUCCESS&quot; ]]; then
    # 4. Check all AI reviews passed
    REVIEWS=$(gh pr reviews &quot;$PR_NUMBER&quot; --json state -q '.[].state')
    if [[ &quot;$REVIEWS&quot; == *&quot;APPROVED&quot;*&quot;APPROVED&quot;*&quot;APPROVED&quot;* ]]; then
      # Send Telegram: &quot;PR #N ready for review&quot;
      openclaw message send --target YOUR_TELEGRAM_ID \
        --message &quot;PR #$PR_NUMBER ready for review. All checks passed.&quot;
      # Update task status to done
      jq &quot;(.[] | select(.id==\&quot;$task\&quot;) | .status) = \&quot;done\&quot;&quot; \
        &quot;$TASKS_FILE&quot; &gt; tmp.json &amp;&amp; mv tmp.json &quot;$TASKS_FILE&quot;
    fi
  fi
done"><code><span class="hljs-meta">#!/bin/bash</span>
<span class="hljs-comment"># Reads active-tasks.json and checks each tracked agent</span>

TASKS_FILE=<span class="hljs-string">".clawdbot/active-tasks.json"</span>
MAX_RETRIES=3

<span class="hljs-comment"># Read all running tasks</span>
<span class="hljs-keyword">for</span> task <span class="hljs-keyword">in</span> $(jq -r <span class="hljs-string">'.[] | select(.status=="running") | .id'</span> <span class="hljs-string">"<span class="hljs-variable">$TASKS_FILE</span>"</span>); <span class="hljs-keyword">do</span>
  SESSION=$(jq -r <span class="hljs-string">".[] | select(.id==\"<span class="hljs-variable">$task</span>\") | .tmuxSession"</span> <span class="hljs-string">"<span class="hljs-variable">$TASKS_FILE</span>"</span>)
  BRANCH=$(jq -r  <span class="hljs-string">".[] | select(.id==\"<span class="hljs-variable">$task</span>\") | .branch"</span>    <span class="hljs-string">"<span class="hljs-variable">$TASKS_FILE</span>"</span>)
  RETRIES=$(jq -r <span class="hljs-string">".[] | select(.id==\"<span class="hljs-variable">$task</span>\") | .retries // 0"</span> <span class="hljs-string">"<span class="hljs-variable">$TASKS_FILE</span>"</span>)

  <span class="hljs-comment"># 1. Check if tmux session is alive</span>
  <span class="hljs-keyword">if</span> ! tmux has-session -t <span class="hljs-string">"<span class="hljs-variable">$SESSION</span>"</span> 2&gt;/dev/null; <span class="hljs-keyword">then</span>
    <span class="hljs-built_in">echo</span> <span class="hljs-string">"Session <span class="hljs-variable">$SESSION</span> dead. Respawning..."</span>
    <span class="hljs-comment"># Respawn logic here (calls spawn-agent.sh with same params)</span>
    <span class="hljs-built_in">continue</span>
  <span class="hljs-keyword">fi</span>

  <span class="hljs-comment"># 2. Check for open PR on tracked branch</span>
  PR_NUMBER=$(gh <span class="hljs-built_in">pr</span> list --<span class="hljs-built_in">head</span> <span class="hljs-string">"<span class="hljs-variable">$BRANCH</span>"</span> --json number -q <span class="hljs-string">'.[0].number'</span>)
  <span class="hljs-keyword">if</span> [ -z <span class="hljs-string">"<span class="hljs-variable">$PR_NUMBER</span>"</span> ]; <span class="hljs-keyword">then</span> <span class="hljs-built_in">continue</span>; <span class="hljs-keyword">fi</span>

  <span class="hljs-comment"># 3. Check CI status</span>
  CI_STATUS=$(gh <span class="hljs-built_in">pr</span> checks <span class="hljs-string">"<span class="hljs-variable">$PR_NUMBER</span>"</span> --json state -q <span class="hljs-string">'.[] | .state'</span> | <span class="hljs-built_in">sort</span> -u)

  <span class="hljs-keyword">if</span> [[ <span class="hljs-string">"<span class="hljs-variable">$CI_STATUS</span>"</span> == *<span class="hljs-string">"FAILURE"</span>* ]]; <span class="hljs-keyword">then</span>
    <span class="hljs-keyword">if</span> [ <span class="hljs-string">"<span class="hljs-variable">$RETRIES</span>"</span> -lt <span class="hljs-string">"<span class="hljs-variable">$MAX_RETRIES</span>"</span> ]; <span class="hljs-keyword">then</span>
      <span class="hljs-built_in">echo</span> <span class="hljs-string">"CI failed on PR <span class="hljs-variable">$PR_NUMBER</span>. Respawning with updated prompt..."</span>
      <span class="hljs-comment"># Increment retry count, update prompt with failure reason, respawn</span>
    <span class="hljs-keyword">else</span>
      <span class="hljs-built_in">echo</span> <span class="hljs-string">"Max retries hit on <span class="hljs-variable">$task</span>. Alerting human."</span>
      <span class="hljs-comment"># Send Telegram alert via openclaw message</span>
    <span class="hljs-keyword">fi</span>
  <span class="hljs-keyword">elif</span> [[ <span class="hljs-string">"<span class="hljs-variable">$CI_STATUS</span>"</span> == <span class="hljs-string">"SUCCESS"</span> ]]; <span class="hljs-keyword">then</span>
    <span class="hljs-comment"># 4. Check all AI reviews passed</span>
    REVIEWS=$(gh <span class="hljs-built_in">pr</span> reviews <span class="hljs-string">"<span class="hljs-variable">$PR_NUMBER</span>"</span> --json state -q <span class="hljs-string">'.[].state'</span>)
    <span class="hljs-keyword">if</span> [[ <span class="hljs-string">"<span class="hljs-variable">$REVIEWS</span>"</span> == *<span class="hljs-string">"APPROVED"</span>*<span class="hljs-string">"APPROVED"</span>*<span class="hljs-string">"APPROVED"</span>* ]]; <span class="hljs-keyword">then</span>
      <span class="hljs-comment"># Send Telegram: "PR #N ready for review"</span>
      openclaw message send --target YOUR_TELEGRAM_ID \
        --message <span class="hljs-string">"PR #<span class="hljs-variable">$PR_NUMBER</span> ready for review. All checks passed."</span>
      <span class="hljs-comment"># Update task status to done</span>
      jq <span class="hljs-string">"(.[] | select(.id==\"<span class="hljs-variable">$task</span>\") | .status) = \"done\""</span> \
        <span class="hljs-string">"<span class="hljs-variable">$TASKS_FILE</span>"</span> &gt; tmp.json &amp;&amp; <span class="hljs-built_in">mv</span> tmp.json <span class="hljs-string">"<span class="hljs-variable">$TASKS_FILE</span>"</span>
    <span class="hljs-keyword">fi</span>
  <span class="hljs-keyword">fi</span>
<span class="hljs-keyword">done</span></code></pre><p>Add this to your crontab:</p><pre data-type="codeBlock" text="# Run agent monitoring every 10 minutes
*/10 * * * * cd /path/to/your/project &amp;&amp; bash .clawdbot/check-agents.sh &gt;&gt; ~/.openclaw/logs/agents.log 2&gt;&amp;1

# Daily cleanup of orphaned worktrees
0 2 * * * cd /path/to/your/project &amp;&amp; bash .clawdbot/cleanup-worktrees.sh"><code># Run agent monitoring every <span class="hljs-number">10</span> <span class="hljs-literal">minutes</span>
<span class="hljs-operator">*</span><span class="hljs-operator">/</span><span class="hljs-number">10</span> <span class="hljs-operator">*</span> <span class="hljs-operator">*</span> <span class="hljs-operator">*</span> <span class="hljs-operator">*</span> cd <span class="hljs-operator">/</span>path<span class="hljs-operator">/</span>to<span class="hljs-operator">/</span>your<span class="hljs-operator">/</span>project <span class="hljs-operator">&amp;</span><span class="hljs-operator">&amp;</span> bash .clawdbot/check<span class="hljs-operator">-</span>agents.sh <span class="hljs-operator">&gt;</span><span class="hljs-operator">&gt;</span> <span class="hljs-operator">~</span><span class="hljs-operator">/</span>.openclaw/logs<span class="hljs-operator">/</span>agents.log <span class="hljs-number">2</span><span class="hljs-operator">&gt;</span><span class="hljs-operator">&amp;</span><span class="hljs-number">1</span>

# Daily cleanup of orphaned worktrees
<span class="hljs-number">0</span> <span class="hljs-number">2</span> <span class="hljs-operator">*</span> <span class="hljs-operator">*</span> <span class="hljs-operator">*</span> cd <span class="hljs-operator">/</span>path<span class="hljs-operator">/</span>to<span class="hljs-operator">/</span>your<span class="hljs-operator">/</span>project <span class="hljs-operator">&amp;</span><span class="hljs-operator">&amp;</span> bash .clawdbot/cleanup<span class="hljs-operator">-</span>worktrees.sh</code></pre><h2 id="h-which-agent-gets-which-task" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Which Agent Gets Which Task</strong></h2><p>The single biggest efficiency win in this system is routing. Not every task should go to Codex. Not every task should go to Claude Code. Zoe makes the call. Here is the routing logic she uses and why:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fcbbd1a3e6ee9c61771b87efd2c8c0e19c6c99b607912c74b8518d767bf1315e.png" blurdataurl="data:image/png;base64,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" nextheight="1028" nextwidth="1110" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><hr><h2 id="h-the-definition-of-done-non-negotiable" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>The Definition of Done (Non-Negotiable)</strong></h2><p>The single most important rule in this system: a PR is not done when the code is written. It is done when all of these conditions are true. Your agent needs to know this in its initial prompt or it will notify you too early and train you to ignore notifications.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b7f64d50a91b4ab04381553d7659827ba4789f8243eb2aca3a9296524da104a5.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAATCAIAAAB+9pigAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAFc0lEQVR4nGWTe1MaVxjGNxJAMHLbDbt4KchlL9TYSeOVm2DVBBGwjXIZ2EKDcllATTqpl7FWjc2YWxNJ+gn6Rz9DksZSookRMdPpZ2ganTZimLExTjqdXTBjxnd+s/Oe5zznnD3P7AKJeCzQY3b2Wu2OXqfTZrNZHQ6b1XrWZrP2OR0Oh83hsNntNqezl1b67EXFZuvp7aXF7u7Orq6Oo3R3dxqNBoqKAm3NTZ0ylvqjKhTDtQRRVSXDcRyCoJqamoaGUyiK4jiu0WgIeqqqvr5eo9FgGFZTU1NXp/hYq+XxeCwWi32kuFwuAACNjY3A843VpfSjTPpROv0gvXT/cfpheunBcuYXprmfST/MpB8+pp+0mEk/oBXGlmEMTx4/erLy68ry0pPlpdWV3w6zsrz0fGMVeLu7PT077gkMBEgyEPCTpK+E30f63G73gMft8rhdXq/L4bB9Pz+3cH3exZhJ0hcg/STpJ33uAOn3+72ugX63a8Dtopd83tf39aWR/X/zwPbWny2mZi7MhyEYoUsmkYAwjECQVCAQsljHy8pYZWUsNpsDAIDFbOnq+axMykYQmVQqhWFEJquSSCQQBAmEwmNA2WEzQRD5f14Ar3e2QsFg06dnLBaz2WQ0m9stFnORjg6LxdxuNBqMRoPZ3N7YeGZ0NHlxOHm64bTZ3F7EZDKaTEadrk2v1xWdRqPBZDK2traQpK+Q3wIK+c2Fa1ci1GCCiiYSsTgVjUYGI2Ga8FAoEglFI4PRyGAsGg4EyNu3ri2mbg5GLyQTVCIeS8Rpfzweo4cJqugsmkMXgrMzU4WdLSD/94s2SytXVg6JIZlMhiCyiopKDofD5ZZzy8vZbDaLKQ6HvnWHxdJt7zwOs2WIjMkTgWFYKoWrq6thBOFwOIfNWi3+evslsJPf9Hk9p+rr9XqdTtem07Xq9Tq9Tmcw6A0GQ2tLSxNTrS0tWkJLRcKx8BCBEwaDXt/WxvhL6HW6orOpqam5ufmThob+818U8ptAYWdrYeHKUPir9xekk2HyCQ+FolH6vrFomIpFgkHyzu0bqdStUCgQi4Yj4ZL5faRFZ9EcCgXnZr8rRvRXZ68FxmQ4RqhUKrVardGgSqWSIAgURREEEYlEYrEYBEEWi2WzWp0Ddgg9qVapUQzTaFAURWtra3GckMvlQqFQzBQIgjwer6mpkY7o9famrceKyBCCIDCm8FKhBEGoVEq5XKFQKJRKJQiCpM/r97shKVR0MGb6DILAlMo6xUHV1dUhCGKxWHaKEd28fpWKDI4kqeHEEZIMCWpkmEpQ0ZlvJ2amJxJUdGT4YOoQIwdcHI5T0fDC1bnSV9Tt6KwhqjVKFYahOKapU8g1ahWOYSr6reQ4hhE4DkshiVgkFFQKBZWgRCIRixlEB80HQCDIfx/RzquXzfo2gM0RgHCFRFrJUCGR8kWQAIRLIvPki09WgnAlCPNFII0YqpTAfDFUIZHyRCCLd4JVXlGEzT8BACxtQwN9QGFn6+cfF25djt2bGr47mWQYTk0kUuOJxXEqNZFcHKMWx2KpiWRqnLo7mWSaRHFYaor9ROJgefLe1PAPY7Gf7szTERXym8/jxkz7seVzguWzfJoubtaHrrlVWY969XzteqA+F6hfc6vWSeJprzjrQ3PBU+skvuZVr/uwrEezOiBfJ/FVl2K5i1va4VxFxnwsN9TM/Af5zT/ujD4dPfdsrO/ZN04Ge27ak5vx5mb9a5P9G3NfbswHs9Pu3Kw/O3k+O9mf+86bm6KHNNOe3LRnY47MTrmeXbaXdhjre3rJ+vuNGH3AbuHV3v7u3n/7H7C/t7e/u7u/++bdG3qWhlbevntbVD7U6SlaObLJbuHV/6uUmJfrd89lAAAAAElFTkSuQmCC" nextheight="655" nextwidth="1107" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><hr><h2 id="h-what-this-actually-costs" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>What This Actually Costs</strong></h2><p>Running at 50 commits per day, the full stack comes to roughly <strong>$190/month</strong>. Two of the four tools cost nothing.</p><p>Claude API via <code>claude-opus-4-5</code> runs around $100/month at this volume. It covers both Zoe as the orchestrator and Claude Code as a worker agent. Codex via ChatGPT Pro or the API adds another $90/month and handles roughly 90% of all coding tasks as the primary workhorse. Gemini Code Assist is free on its GitHub integration and reviews every single PR for security and scalability issues. OpenClaw itself is open source, self-hosted, and costs nothing to run.</p><p>You can start for $20. ChatGPT Plus at $20/month includes Codex access. Pair it with the Claude API at low volume and the system works. The $190 figure is what it costs at scale once you are confident it fits your workflow. Scale spend as commit velocity grows, not before.</p><hr><h2 id="h-the-honest-assessment" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>The Honest Assessment</strong></h2><p>This system works well on a specific class of problems: well-scoped features, bug fixes with clear reproduction steps, anything where the task can be described precisely in a prompt. The 94-commit peak and 50-commit daily average are real production numbers from running this on a live B2B SaaS product.</p><p>Here is where it breaks down.</p><p><strong>RAM is the real bottleneck.</strong> Each agent needs its own worktree. Each worktree needs its own <code>node_modules</code>. Five agents running simultaneously means five parallel TypeScript compilers. On 16GB RAM you top out at 4 to 5 concurrent agents before memory pressure becomes a real problem. If you are serious about running more than that, budget for a machine with 64GB or more. A Mac Studio M4 Max with 128GB handles it cleanly.</p><p><strong>Claude Code as reviewer is weak.</strong> It catches almost nothing independently. Its only real value is validating what Codex and Gemini already flagged. Do not treat it as a primary reviewer. Skip its suggestions unless one is marked critical.</p><p><strong>Task scoping is still a human skill.</strong> The system one-shots small to medium tasks reliably. Large, ambiguous tasks still need a human to break them down before handing to the orchestrator. Feed Zoe a vague request and she writes a vague prompt. Agents produce vague code. Garbage in, garbage out at every layer.</p><p><strong>Security surface is real.</strong> OpenClaw in this setup has admin API access and read-only prod DB access. Misconfigured instances are a documented attack vector. Start in read-only mode. Audit every permission you grant before opening anything touching production data.</p><hr><h2 id="h-run-it-for-one-week-before-scaling" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Run It for One Week Before Scaling</strong></h2><p>Here is the exact sequence to verify this works for your codebase before committing to the full setup:</p><p>Week 1: Install <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://openclaw.ai/">OpenClaw</a>, connect Telegram, run it in read-only mode on your codebase. Give Zoe your Obsidian vault or a folder of meeting notes. Ask her to scope one real feature request you have been putting off. Do not spawn any agents yet. Just verify the context and scoping output is better than what you get by prompting Codex directly.</p><p>Week 2: Spawn one agent on one isolated task. Single worktree, single tmux session, no monitoring cron yet. Watch the full cycle manually. Notice where the prompt falls short. Iterate on Zoe's context before adding automation.</p><p>Week 3: Add the monitoring cron. Add the three-reviewer setup. Define your exact quality gate conditions in <code>AGENTS.md</code>. At this point the system starts working mostly without you.</p><p>Week 4: You start receiving Telegram messages about PRs you did not know were in progress.</p><p>That is the unlock. The system finds work, does work, reviews work, and tells you when to merge. You operate at one level of abstraction above the code. This is what solo founders with agent fleets will look like in 2026, and it is already running in production today.</p><p>If you are building something with this stack or already running an agent swarm, I want to see it. </p>]]></content:encoded>
            <author>degensing@newsletter.paragraph.com (DegenSing)</author>
            <category>openclaw</category>
            <category>claude</category>
            <category>ai</category>
            <category>vibe</category>
            <category>coding</category>
            <category>codex</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/57de4e0e798de22541aa92fabd1e7e603aabae468dcb18ed109a4aa091d6c58e.jpg" length="0" type="image/jpg"/>
        </item>
    </channel>
</rss>