Blog

Claude Code, Cursor and Codex on the same project

Plenty of people run more than one coding agent on a project: Cursor for one piece, Claude Code for another, Codex for a second look. Each keeps its own sessions in its own place. Codecast puts them in one list, shows what each one said and did, and can move a conversation from Claude Code to Codex so the second agent picks up with the whole history.

the codecast team5 min read

One project, two agents

For this post we made a small repository with one script in it, slugify.py, which turns titles like Hello, World into URL slugs like hello-world. Then we did what a lot of people do: gave one job to Cursor and the next to Claude Code. First, in a terminal, Cursor's command line agent got this:

Write unit tests for slugify() in slugify.py in a new file test_slugify.py using unittest. Cover punctuation, repeated separators, leading and trailing spaces, and accented letters. Run them and report what passes.

When it was done, Claude Code got the next job in another terminal:

Add a --max-length N option to slugify.py that cuts each slug to at most N characters without ending on a hyphen or splitting a word when possible. Standard library only. Add tests for it to the existing test_slugify.py and update the README.

Neither was started from Codecast. Both showed up in the list on their own, because the Codecast app on the laptop picks up sessions from Claude Code, Codex, Cursor and other agents as they run. Each card carries the agent's mark, so you can tell them apart at a glance, and clicking the project's chip at the top of the list narrows it to that repository. We renamed both sessions in the app to keep the titles short:

Two session cards in the slugs project: slugify: --max-length with the Claude mark, marked COMPLETE, and slugify: unit tests with the Cursor mark
Claude Code on top, Cursor below, both in the slugs project.

What each one did

Opening a session shows its conversation as it happened, whichever agent ran it. Here is Cursor's, below the prompt. Its tool calls are folded into small rows (read 1 file, wrote 1 file) that open to show what it ran, and its report comes through as written, table included:

The Cursor session in codecast: its plan to write test_slugify.py and run it with uv, folded rows for reading a file and writing a file, a table of four tests that all passed, and a note that accented letters are dropped, so café becomes caf
Cursor's turn. The last line is the one we came back to.

That last line matters later: the script throws accented letters away, so café becomes caf.

Next to a Claude Code session is the code it changed. The panel lists each file with the lines added and removed, and has tabs for the whole session, the branch and a commit. Claude edited the README and added 32 lines of tests to the file Cursor had written:

The diff panel on the Session tab: README.md with 9 lines added describing --max-length N and an example, and test_slugify.py with 32 lines added
Claude's changes, file by file. The panel is cut off on the right and below.

For the Cursor session that panel stayed empty on our run. Its transcript names the file it wrote, and the tests themselves were in the repository, but the line by line diff is something we saw for Claude Code, not for Cursor.

Handing the conversation to Codex

To fix the accents, we wanted a different model on it, with everything that had happened so far. In a session's header, next to the agent's mark, is the model it is running. Clicking it opens the session's controls, and Switch agent lists the agents to move to:

The Switch agent list: Claude marked current; Codex, OpenCode, pi and Grok available; Cursor and Muse Spark greyed out with can't rebuild history
Claude is current. Cursor is greyed out here; Codex is not.

Cursor and Muse Spark are greyed out because they can't take over a conversation another agent started. The other agents can, so we picked Codex. Codecast stopped the Claude Code process that was still open in the terminal, and a divider landed in the conversation:

A thin divider across the conversation reading now using Codex, was Claude, just now
Same conversation, same title and link. A new agent answers from here.

We typed the next request in the app's message box:

The accented letters test from earlier shows café becomes caf. Turn accented letters into plain ones instead, so café becomes cafe. Standard library only, and update that test.
Codex's reply: it normalizes accents with the standard library's unicodedata, café to cafe, naïve résumé to naive-resume, São Paulo to sao-paulo, updated the test, and all 10 tests pass
Codex's first turn in the conversation Claude Code started.

Codex made the change with Python's unicodedata, updated Cursor's test, and ran all ten tests, which pass. To check that it had the conversation and not only the files, we asked it something only the history could answer:

Before you answer from the files: what was my first request in this session, and which test file did you add to then?
Codex answers: your first request was to add --max-length N to slugify.py, avoiding trailing hyphens and splitting words when possible, using only the standard library, with tests and a README update. I added tests to the existing test_slugify.py
Answered from the conversation, without running a command.

It answered without opening a file. The request it describes was sent to Claude Code, and the work it calls its own was Claude's, because Codecast rewrote the whole conversation in Codex's format before starting it. Our field manual chapter on switching agents explains how that works, what carries over and what doesn't, and the other ways to move work between agents, including the ones that work for Cursor.

What you need

An account and the Codecast app on each computer you code on; your empty inbox shows the one-line install command. Keep starting Claude Code, Cursor and Codex the way you already do, and their sessions arrive in the same list. You do not need a team for any of this.

Codecast records every coding agent session you run, on any machine, and gives you one place to see them, steer them and answer them, on your own or with your team.

All seven screenshots are the Codecast web app on a local build in Chrome on 2026-10-30. The sessions were run for this post in a throwaway repository, Cursor first and then Claude Code, each started by hand in a terminal; the follow-ups were sent from the app. The account's other sessions, people and projects are outside every crop. Prompts are quoted in the text rather than pictured, the Cursor transcript starts below its prompt, and the diff is cut off at the edges shown. Nothing was composited or retouched.

Taking longer than usualOffline · reloads when back