<?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: Aaron W</title>
    <description>The latest articles on DEV Community by Aaron W (@aaron_w_ef987250d3531be6d).</description>
    <link>https://dev.to/aaron_w_ef987250d3531be6d</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4198150%2F967306af-e40f-415c-9759-1dc9f55b271b.png</url>
      <title>DEV Community: Aaron W</title>
      <link>https://dev.to/aaron_w_ef987250d3531be6d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aaron_w_ef987250d3531be6d"/>
    <language>en</language>
    <item>
      <title>How Claude Code and Codex store sessions, and how to hand a task from one to the other</title>
      <dc:creator>Aaron W</dc:creator>
      <pubDate>Fri, 23 Oct 2026 09:12:51 +0000</pubDate>
      <link>https://dev.to/aaron_w_ef987250d3531be6d/how-claude-code-and-codex-store-sessions-and-how-to-hand-a-task-from-one-to-the-other-m2m</link>
      <guid>https://dev.to/aaron_w_ef987250d3531be6d/how-claude-code-and-codex-store-sessions-and-how-to-hand-a-task-from-one-to-the-other-m2m</guid>
      <description>&lt;p&gt;I pay for both Claude Pro and ChatGPT Plus and switch between Claude Code and Codex every day. Switching is easy. The handoff is the hard part: when Codex opens, it knows nothing about the project, how far you got, or which approaches already failed.&lt;/p&gt;

&lt;p&gt;Here's how I made that handoff automatic, and what each side's sessions actually look like.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Claude Code sessions are local JSONL files
&lt;/h2&gt;

&lt;p&gt;Every Claude Code session is a JSONL file under &lt;code&gt;~/.claude/projects/&amp;lt;escaped-project-path&amp;gt;/&amp;lt;session-id&amp;gt;.jsonl&lt;/code&gt;. One line per event: user messages, assistant replies, tool calls, tool results, todo updates.&lt;/p&gt;

&lt;p&gt;So you can read a whole session without any API. The hard part is deciding how much to read:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tool results can be huge (a full file read, a full test run). Paste them into another agent and you blow its context.&lt;/li&gt;
&lt;li&gt;So you condense: keep messages verbatim, reduce each tool call to what was called, on what, and roughly what came back, then add the current todo list and git status.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Codex: use its own app-server
&lt;/h2&gt;

&lt;p&gt;Codex keeps local session records too, but I don't parse them. I only use the app-server that ships with Codex: create a thread, send a message to it, read it back. That way a Codex update that changes the file format doesn't break anything, and writes go through the official path.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Two-way sync with cursors
&lt;/h2&gt;

&lt;p&gt;My first version was a one-shot export: Claude writes HANDOFF.md, Codex reads it. But when you switch back, Claude has no idea what Codex did, so you export again.&lt;/p&gt;

&lt;p&gt;What works now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One Claude session is paired with one Codex thread.&lt;/li&gt;
&lt;li&gt;Each side keeps a cursor: the last event already synced.&lt;/li&gt;
&lt;li&gt;When you switch, only the condensed progress after the cursor is sent.&lt;/li&gt;
&lt;li&gt;On the Claude side, a &lt;code&gt;UserPromptSubmit&lt;/code&gt; hook prepends Codex's new progress to your next message. Each update is delivered once, usually a few thousand tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The two sides end up working on one task instead of running two unrelated chats.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. When to switch: watch the limits
&lt;/h2&gt;

&lt;p&gt;Most of my switches happen because Claude's 5-hour window ran out, so there's also a heads-up when either side passes 90%.&lt;/p&gt;

&lt;p&gt;I don't scrape usage myself. I read what tools you may already run write out: CodexBar, ccusage, abtop, claude-hud, ccstatusline and a few others. Whichever is installed gets used, with no setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The tool
&lt;/h2&gt;

&lt;p&gt;I packaged all of this as ccx, an open-source macOS menu bar app. Click ⇄ to hand off. Everything runs locally, with no account and no server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/aaronwong1999/ccx" rel="noopener noreferrer"&gt;https://github.com/aaronwong1999/ccx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even if you never use it, the approach is easy to copy: read Claude's JSONL, condense tool output, keep cursors, send only the delta. The point is to make the handoff cheap. If it isn't, you won't bother switching, and you'll be back to waiting out the limit.&lt;/p&gt;

&lt;p&gt;I'm &lt;a href="https://x.com/aaron0x10" rel="noopener noreferrer"&gt;@aaron0x10&lt;/a&gt; on X if you want to compare setups.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>automation</category>
      <category>claude</category>
      <category>llm</category>
    </item>
    <item>
      <title>How to see your Claude Code and Codex usage limits before you hit them (6 open-source tools)</title>
      <dc:creator>Aaron W</dc:creator>
      <pubDate>Thu, 22 Oct 2026 07:58:15 +0000</pubDate>
      <link>https://dev.to/aaron_w_ef987250d3531be6d/how-to-see-your-claude-code-and-codex-usage-limits-before-you-hit-them-6-open-source-tools-5gl9</link>
      <guid>https://dev.to/aaron_w_ef987250d3531be6d/how-to-see-your-claude-code-and-codex-usage-limits-before-you-hit-them-6-open-source-tools-5gl9</guid>
      <description>&lt;p&gt;Hitting the Claude Code 5-hour limit mid-task hurts most when you didn't see it coming. These open-source tools show your Claude Code and Codex usage while you work, so you can plan a handoff instead of getting cut off.&lt;/p&gt;

&lt;h2&gt;
  
  
  Statusline tools (inside Claude Code)
&lt;/h2&gt;

&lt;p&gt;These live in Claude Code's status line, right under your prompt.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/jarrodwatts/claude-hud" rel="noopener noreferrer"&gt;claude-hud&lt;/a&gt;&lt;/strong&gt;: a Claude Code plugin that shows context usage, active tools, running agents and todo progress. Install with &lt;code&gt;/plugin install claude-hud&lt;/code&gt;. It can also write a usage snapshot to a file for other tools to read.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/sirmalloc/ccstatusline" rel="noopener noreferrer"&gt;ccstatusline&lt;/a&gt;&lt;/strong&gt;: a highly customizable statusline with powerline support and themes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/Haleclipse/CCometixLine" rel="noopener noreferrer"&gt;CCometixLine&lt;/a&gt;&lt;/strong&gt;: a fast statusline written in Rust, installable via npm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/leeguooooo/claude-code-usage-bar" rel="noopener noreferrer"&gt;claude-code-usage-bar&lt;/a&gt;&lt;/strong&gt;: one line with your 5-hour and 7-day rate-limit usage, reset countdowns, model and context window.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Standalone monitors (Claude Code and Codex)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/steipete/CodexBar" rel="noopener noreferrer"&gt;CodexBar&lt;/a&gt;&lt;/strong&gt;: a macOS menu bar app that shows usage for both Codex and Claude Code without logging in. &lt;code&gt;brew install --cask codexbar&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/graykode/abtop" rel="noopener noreferrer"&gt;abtop&lt;/a&gt;&lt;/strong&gt;: like htop, but for AI coding agents. It shows every Claude Code and Codex session with tokens, context window and rate limits, and &lt;code&gt;abtop --json&lt;/code&gt; prints a snapshot for scripts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to do when the bar turns red
&lt;/h2&gt;

&lt;p&gt;Seeing the limit coming is half the fix. The other half is having somewhere to go. If you pay for both Claude and ChatGPT, the obvious move is to continue the task in Codex. The painful part is that Codex starts with no context.&lt;/p&gt;

&lt;p&gt;That's why I built &lt;strong&gt;&lt;a href="https://github.com/aaronwong1999/ccx" rel="noopener noreferrer"&gt;ccx&lt;/a&gt;&lt;/strong&gt;. It links a Claude Code session with a Codex thread and syncs them both ways: messages, condensed tool calls, the plan and git status. It also reads the usage data from every tool above when you have one installed, so the menu bar warns you when either side passes 90% of its 5-hour window and offers to move the task to the other side in one click. No configuration, no keys, nothing extra installed.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Do I need all of these?&lt;/strong&gt; No. Pick one statusline you like, or CodexBar or abtop if you want both Claude and Codex in one place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does any of this bypass usage limits?&lt;/strong&gt; No. These tools only show your usage. ccx only moves your task between your own two subscriptions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which one works with ccx?&lt;/strong&gt; All six. ccx reads whichever is installed, without any setup.&lt;/p&gt;

&lt;p&gt;If ccx saves you a re-explanation, a ⭐ on &lt;a href="https://github.com/aaronwong1999/ccx" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; helps a lot. I'm &lt;a href="https://x.com/aaron0x10" rel="noopener noreferrer"&gt;@aaron0x10&lt;/a&gt; on X.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>openai</category>
      <category>opensource</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Claude Code usage limit reached? 5 ways to keep working (ranked by what actually helped me)</title>
      <dc:creator>Aaron W</dc:creator>
      <pubDate>Wed, 21 Oct 2026 21:15:16 +0000</pubDate>
      <link>https://dev.to/aaron_w_ef987250d3531be6d/claude-code-usage-limit-reached-5-ways-to-keep-working-ranked-by-what-actually-helped-me-1dij</link>
      <guid>https://dev.to/aaron_w_ef987250d3531be6d/claude-code-usage-limit-reached-5-ways-to-keep-working-ranked-by-what-actually-helped-me-1dij</guid>
      <description>&lt;p&gt;You're mid-task, Claude Code says you've hit your limit, and the reset is hours away. I've been there most days since Opus 5.5 came out, so here's what I tried, ranked by how much it helped.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Run two plans and hand the task over (biggest win)
&lt;/h2&gt;

&lt;p&gt;Claude Pro plus ChatGPT Plus costs $40 a month, less than Max 5x at $100, and the two limits are independent. When Claude caps out, Codex takes over. When Codex caps out, Claude has usually reset.&lt;/p&gt;

&lt;p&gt;The catch is the handoff. Codex starts with zero context, so you re-explain the project, what's done, and what you already ruled out. I got tired of that and built &lt;a href="https://github.com/aaronwong1999/ccx" rel="noopener noreferrer"&gt;ccx&lt;/a&gt;, an open-source macOS tool that syncs a Claude Code session and a Codex thread both ways: messages, condensed tool calls, the todo list, and git status. Click ⇄ in the menu bar and Codex picks up where Claude stopped; go back to Claude later and Codex's progress comes with you. It also warns you when either side passes 90% of its 5-hour window, so you can switch before you're cut off mid-step.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. One task, one session
&lt;/h2&gt;

&lt;p&gt;Every message re-sends the session's context. Long sessions get expensive fast. Finish a task, then &lt;code&gt;/clear&lt;/code&gt; or start fresh. This alone stretched my 5-hour window noticeably.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Compact instead of dragging on
&lt;/h2&gt;

&lt;p&gt;If you need the context, &lt;code&gt;/compact&lt;/code&gt; it rather than continuing a bloated conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Keep big files and logs out of context
&lt;/h2&gt;

&lt;p&gt;Tell Claude in &lt;code&gt;CLAUDE.md&lt;/code&gt; which folders to skip (build output, &lt;code&gt;node_modules&lt;/code&gt;, logs). A single huge tool output can burn a surprising share of your window.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Use a cheaper model for simple work
&lt;/h2&gt;

&lt;p&gt;Renaming, copy edits, running tests, reading an error: switch to Sonnet with &lt;code&gt;/model&lt;/code&gt;. Save Opus for planning and hard bugs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What doesn't help
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Waiting it out.&lt;/strong&gt; You lose hours of momentum.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pay-per-token API as a fallback.&lt;/strong&gt; It works, but a long agent session can cost more than a month of a second subscription.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Picking a long, idle session back up.&lt;/strong&gt; After about an hour the prompt cache expires and your next message re-reads the whole conversation. Start a new session instead.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does running two subscriptions break any rules?&lt;/strong&gt; No. You're using your own Claude and ChatGPT plans, each within its own limits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does ccx upload my code?&lt;/strong&gt; No. Everything runs locally; the code is already on your disk. ccx only moves conversation context between the two desktop apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows or Linux?&lt;/strong&gt; Not yet. ccx needs macOS 13+ and the Claude and/or Codex desktop app.&lt;/p&gt;

&lt;p&gt;If the handoff pain sounds familiar, give &lt;a href="https://github.com/aaronwong1999/ccx" rel="noopener noreferrer"&gt;ccx&lt;/a&gt; a try. A ⭐ helps a lot, and I answer every issue. I'm &lt;a href="https://x.com/aaron0x10" rel="noopener noreferrer"&gt;@aaron0x10&lt;/a&gt; on X.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>How I hand a Claude Code session to Codex (and back) without re-explaining anything</title>
      <dc:creator>Aaron W</dc:creator>
      <pubDate>Wed, 21 Oct 2026 11:11:02 +0000</pubDate>
      <link>https://dev.to/aaron_w_ef987250d3531be6d/how-i-hand-a-claude-code-session-to-codex-and-back-without-re-explaining-anything-2poe</link>
      <guid>https://dev.to/aaron_w_ef987250d3531be6d/how-i-hand-a-claude-code-session-to-codex-and-back-without-re-explaining-anything-2poe</guid>
      <description>&lt;p&gt;When Claude Code hits its 5-hour limit mid-task, you can wait for the reset, pay for API tokens, or move the task to another agent. I use both Claude Code and Codex, so the third option is the obvious one. The hard part isn't switching apps. It's the handoff: the other agent knows nothing about the task.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with switching
&lt;/h2&gt;

&lt;p&gt;I switch for two reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;One side runs out. Claude Code has a 5-hour window and a weekly cap, and so does Codex.&lt;/li&gt;
&lt;li&gt;Cross-checking. When one model loops on a bug, the other often solves it in one pass.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Either way, the new side starts cold. You re-explain what the project is, where you were, which approaches you already ruled out, and what's broken now. Pasting the transcript doesn't work well either: tool calls and their output run to tens of thousands of words.&lt;/p&gt;

&lt;p&gt;Then you switch back, and Claude doesn't know what Codex changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built: ccx
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/aaronwong1999/ccx" rel="noopener noreferrer"&gt;ccx&lt;/a&gt; links a Claude Code session with a Codex thread and keeps them in sync both ways, inside both desktop apps. It's open source (MIT) and runs entirely on your Mac.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Claude hits its limit.&lt;/li&gt;
&lt;li&gt;Click ⇄ in the menu bar, pick the project and session.&lt;/li&gt;
&lt;li&gt;Codex picks up the task with the full context.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When Codex runs out too, open the same Claude conversation and send anything ("continue"). Codex's progress comes in. Switch as many times as you like.&lt;/p&gt;

&lt;h2&gt;
  
  
  What gets carried over
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Every user message and reply&lt;/li&gt;
&lt;li&gt;Condensed tool calls and their output&lt;/li&gt;
&lt;li&gt;The latest task list (Claude's todos or Codex's plan)&lt;/li&gt;
&lt;li&gt;Whether the other side stopped mid-step&lt;/li&gt;
&lt;li&gt;Pasted images, as the path of the app's own cached copy&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git status&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The code is already on your disk. All of this arrives as context for the model, not as new chat bubbles.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude side:&lt;/strong&gt; reads the session JSONL files under &lt;code&gt;~/.claude/projects/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codex side:&lt;/strong&gt; goes only through Codex's own app-server API (&lt;code&gt;thread/list&lt;/code&gt;, &lt;code&gt;thread/read&lt;/code&gt;, session import). It never parses Codex's internal files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pairing:&lt;/strong&gt; a Claude session A and a Codex thread T form a pair in &lt;code&gt;~/.ccx/pairs.json&lt;/code&gt;, and each side keeps a cursor of how much the other has received.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delivery:&lt;/strong&gt; when you send a message in A, a &lt;code&gt;UserPromptSubmit&lt;/code&gt; hook appends T's new progress to that message and moves the cursor. Nothing is delivered twice, and the hook never blocks a prompt. If something was condensed away, the model can page through it with a &lt;code&gt;read_session&lt;/code&gt; tool.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each update is usually a few thousand tokens. Clicking again with nothing new does nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  A heads-up before you run out
&lt;/h2&gt;

&lt;p&gt;v0.0.32 adds a usage heads-up. When either side's 5-hour window passes 90%, and again when it's used up, the menu bar notifies you once and offers that side's newest session to continue in the other app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Codex: read from its app-server's &lt;code&gt;account/rateLimits/read&lt;/code&gt;. Built in.&lt;/li&gt;
&lt;li&gt;Claude: Claude Code keeps no local signal before the limit, so ccx also reads &lt;a href="https://github.com/steipete/CodexBar" rel="noopener noreferrer"&gt;CodexBar&lt;/a&gt;, &lt;a href="https://github.com/Maciek-roboblog/Claude-Code-Usage-Monitor" rel="noopener noreferrer"&gt;Claude Code Usage Monitor&lt;/a&gt; or &lt;a href="https://github.com/ccusage/ccusage" rel="noopener noreferrer"&gt;ccusage&lt;/a&gt; when one of them is installed, through their documented output only.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does it bypass usage limits?&lt;/strong&gt; No. You use your own Claude and ChatGPT/Codex plans, each within its own limits. ccx only moves the task between them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is anything uploaded?&lt;/strong&gt; No. Sync is local. ccx reaches GitHub only to install and check for updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows, Linux, standalone CLIs?&lt;/strong&gt; Not yet. macOS 13+ with the Claude and/or Codex desktop app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;Paste this into Claude Code or Codex and it installs itself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Install ccx for me: run `curl -fsSL https://raw.githubusercontent.com/aaronwong1999/ccx/main/install.sh | sh` (it needs network access and writes to my home folder), then run `~/.local/bin/ccx doctor` and tell me the result.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feedback is welcome in &lt;a href="https://github.com/aaronwong1999/ccx/issues" rel="noopener noreferrer"&gt;Issues&lt;/a&gt; or on X (&lt;a href="https://x.com/aaron0x10" rel="noopener noreferrer"&gt;@aaron0x10&lt;/a&gt;).&lt;/p&gt;

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