Project Turquoise
Welcome to Project Turquoise
In this project we compare how two coding agents — Codex CLI and Claude Code — handle the same real task, side by side.
Work through the blocks in order — each one tells you what to do.
Turquoise Guardian
Official Handshake learn hub for this project
Turquoise Guardian is the Handshake AI learning portal for Project Turquoise. Use it for project training, tasking guidance, and anything the program publishes there. You may need to sign in with your Handshake AI account.
https://turquoise-guardian.learn.joinhandshake.com
End-to-end flow
From Guardian + blank agents to a Drive submission
.jsonl from Path B (recommended — no extra model tokens), clean it to
the Project Turquoise format, then upload to the team Drive folder with your alias.
Agent-written .md (Path A) works too but costs another premium turn.
Step 1 — Set up two blank-slate agents
Each session runs the agent with a throwaway config home — your own setup is untouched, and the agent starts with no MCP servers, no memory, no custom instructions, and a fresh working directory.
Option A Codex
Paste this whole block into your terminal (it launches at the end):
blank_codex() {
local root codex_bin
codex_bin="$(command -v codex 2>/dev/null)"
if [ -z "$codex_bin" ] && [ -x "/Applications/ChatGPT.app/Contents/Resources/codex" ]; then
codex_bin="/Applications/ChatGPT.app/Contents/Resources/codex"
fi
if [ -z "$codex_bin" ]; then
echo "Codex CLI was not found. Install it or add it to PATH."
return 1
fi
root="$(mktemp -d "${TMPDIR:-/tmp}/codex-blank.XXXXXX")" || return 1
mkdir -p "$root/home" "$root/work"
git -C "$root/work" init -q
echo "Blank Codex root: $root"
echo "Session logs will be under: $root/home/sessions/"
echo "Work dir: $root/work"
CODEX_HOME="$root/home" "$codex_bin" \
-C "$root/work" \
-m gpt-5.6-sol \
-c 'model_reasoning_effort="high"'
}
blank_codex
Option B Claude Code
Recommended: paste this into any coding agent (Claude Code, Codex, Cursor, etc.) and let it launch a blank-slate Claude session for you.
Set up a Project Turquoise blank-slate Claude Code session on this Mac.
Requirements:
1. Create two temp directories with predictable names under $TMPDIR (or /tmp):
- config: mktemp -d "${TMPDIR:-/tmp}/claude-blank.XXXXXX"
- work: mktemp -d "${TMPDIR:-/tmp}/claude-blank-work.XXXXXX"
(These prefixes matter — later we recover session .jsonl from claude-blank.*/projects.)
2. Write settings.json into the config dir with exactly:
{"model": "claude-fable-5", "effort": "high"}
3. Launch Claude Code from the empty work dir using:
CLAUDE_CONFIG_DIR="" claude --strict-mcp-config --mcp-config '{"mcpServers":{}}'
4. Do not add MCP servers, plugins, memory, or custom instructions.
5. Print the config dir, work dir, and the exact launch command used. Remind me that session logs live under: <config-dir>/projects/
6. If `claude` is not on PATH, locate it or tell me how to install Claude Code.
7. Remind me to sign in with Claude Max if prompted, and to confirm the UI shows Fable 5 at high effort before I send my first task prompt.
Run the commands for me (or print them clearly if you cannot launch interactively).
Manual setup (terminal commands & notes)
Paste this into your terminal yourself:
cfg="$(mktemp -d "${TMPDIR:-/tmp}/claude-blank.XXXXXX")"
work="$(mktemp -d "${TMPDIR:-/tmp}/claude-blank-work.XXXXXX")"
echo '{"model": "claude-fable-5", "effort": "high"}' > "$cfg/settings.json"
echo "CLAUDE_CONFIG_DIR=$cfg"
echo "Session logs will be under: $cfg/projects/"
echo "Work dir: $work"
cd "$work" && CLAUDE_CONFIG_DIR="$cfg" claude --strict-mcp-config --mcp-config '{"mcpServers":{}}'
Notes (both agents)
- Each session starts clean, so the agent will ask you to sign in: Codex with your ChatGPT Pro account, Claude Code with your Claude Max account. That’s expected.
- Before your first prompt, check the session shows the right model: GPT-5.6-Sol in Codex, Fable 5 in Claude Code, both at high reasoning.
- If anything about setup fails, you can ask the agent itself to fix it.
- Don’t add tools, MCP servers, or settings beyond these commands.
- You’ll confirm this setup in the checklist below, and report the settings again after your sessions.
Before you begin — confirm setup
Check every box. If any of them doesn’t hold yet, fix your setup first.
Step 2 — Run the same task in both agents
The exchange protocol
- Give the exact same initial prompt to both agents, word for word.
- Work the problem back and forth with each agent as you naturally would.
- Stop when solved, or after 15 back-and-forth exchanges — whichever comes first.
When you finish each session
.jsonl to Desktop and convert in tourqmd. Asking a
premium high-effort model to rewrite the whole chat can take a long time and burn
a large extra turn of tokens for no research benefit.
If you still want the agent to write the .md itself, that is
Path A (optional). Prefer Path B for normal token usage.
What to write up for the submission form
Block 1 — Task description
Describe what you set out to do and why, what area of coding the task sits in, the required expertise, and how long the task would take an expert to do themselves.
Block 2 — Initial prompt
Copy and paste the initial prompt you gave to both Codex and Claude Code (must be identical).
Save transcripts (two useful paths)
Project Turquoise wants a faithful Markdown transcript. Prefer recovering the raw session log and converting in tourqmd — it’s free of extra model tokens.
Option / Path B · recommended Raw session logs → tourqmd
.jsonl export.
After you finish each agent, recover the raw .jsonl, drop it into
tourqmd, review Reader mode, then download or Submit.
Easiest — Terminal one-liner (after you finish each agent)
Project Turquoise blank-slate sessions do not write under
~/.claude or ~/.codex. They use the temp dirs from Step 1:
-
Codex (
blank_codex):${TMPDIR:-/tmp}/codex-blank.*/home/sessions/**/rollout-*.jsonl -
Claude Code (blank setup):
${TMPDIR:-/tmp}/claude-blank.*/projects/**/*.jsonl
After you finish each agent, run the matching command in Terminal. It moves the newest
session .jsonl onto your Desktop for tourqmd.
Claude Code — newest blank-slate session → Desktop:
mv "$(find "${TMPDIR:-/tmp}"/claude-blank.*/projects -name '*.jsonl' -type f -print0 2>/dev/null | xargs -0 ls -t 2>/dev/null | head -1)" ~/Desktop/
Codex — newest blank-slate session → Desktop:
mv "$(find "${TMPDIR:-/tmp}"/codex-blank.*/home/sessions -name 'rollout-*.jsonl' -type f -print0 2>/dev/null | xargs -0 ls -t 2>/dev/null | head -1)" ~/Desktop/
cp instead of mv if you want to
keep a copy in the blank-slate sessions folder too:
cp "$(find "${TMPDIR:-/tmp}"/claude-blank.*/projects -name '*.jsonl' -type f -print0 2>/dev/null | xargs -0 ls -t 2>/dev/null | head -1)" ~/Desktop/
cp "$(find "${TMPDIR:-/tmp}"/codex-blank.*/home/sessions -name 'rollout-*.jsonl' -type f -print0 2>/dev/null | xargs -0 ls -t 2>/dev/null | head -1)" ~/Desktop/
$TMPDIR / /tmp and can disappear after reboot or OS
cleanup. If find returns nothing, re-check that you launched with the
Step 1 blocks (so dirs are named codex-blank.* /
claude-blank.*), or use the coding-agent staging prompt below.
Or: paste this into a coding agent and let it locate and stage the files (still cheaper than asking the research agent to rewrite the full transcript).
Help me recover Project Turquoise blank-slate session logs for Codex and/or Claude Code on this Mac and stage them for tourqmd.
Do the following:
1. Find the newest relevant session files from the Step 1 blank-slate temp dirs (default for this project):
- Codex: ${TMPDIR:-/tmp}/codex-blank.*/home/sessions/**/rollout-*.jsonl
- Claude: ${TMPDIR:-/tmp}/claude-blank.*/projects/**/*.jsonl
Also check any printed CODEX_HOME / CLAUDE_CONFIG_DIR paths I still have open in a terminal.
2. List the newest few with full paths, sizes, and modified times.
3. Copy the ones I choose (or the newest for each tool) to a permanent folder on my Desktop, e.g.:
~/Desktop/turquoise-sessions/
Name them clearly, e.g. codex-<taskid>.jsonl and claude-<taskid>.jsonl
4. Remind me to open https://tourqmd.traphic.dev/ , drop each .jsonl, review Reader mode, then Submit with my alias.
5. Do not use ~/.codex or ~/.claude unless the blank-slate temp dirs are empty — those are normal installs, not Project Turquoise blank sessions.
6. Do not upload anywhere yourself — only copy files locally and print the final paths.
If a path is missing or empty, explain what to re-run and how to save a transcript before closing the agent next time.
Option / Path A · optional Agent-written transcript
If you still choose Path A, send this at the end of the session:
Please save a faithful transcript of this conversation as a .md file titled "claude/codex-transcript-'first four characters of task id'.md". Do not include any reference to the model or harness used.
- Use the “save a faithful transcript…” prompt only if you need it.
- Ask the agent to move the
.mdto a permanent folder (Desktop / Documents). -
Keep both files clearly named, e.g.
codex-transcript-ab12.mdandclaude-transcript-ab12.md.
Manual — paths, Terminal, and Finder
For Project Turquoise, always start from the blank-slate temp dirs printed by Step 1 (not your normal home installs).
Codex log location (blank-slate)
${TMPDIR:-/tmp}/codex-blank.*/home/sessions
find "${TMPDIR:-/tmp}"/codex-blank.*/home/sessions -name 'rollout-*.jsonl' -type f -print0 2>/dev/null | xargs -0 ls -lt 2>/dev/null | head
open "${TMPDIR:-/tmp}"
Files look like
…/codex-blank.XXXXXX/home/sessions/YYYY/MM/DD/rollout-….jsonl
(CODEX_HOME is $root/home from blank_codex).
Claude Code log location (blank-slate)
${TMPDIR:-/tmp}/claude-blank.*/projects
find "${TMPDIR:-/tmp}"/claude-blank.*/projects -name '*.jsonl' -type f 2>/dev/null | head
open "${TMPDIR:-/tmp}"
With CLAUDE_CONFIG_DIR="$cfg", sessions live under
$cfg/projects/ (named claude-blank.* by the Step 1
commands).
Finder (Mac)
- Press ⌘ + Shift + G
- Paste
/tmpor your$TMPDIRpath, then open the newestcodex-blank.*orclaude-blank.*folder - Codex: go to
home/sessions· Claude: go toprojects - Locate the newest session
.jsonl
Then convert
- Open tourqmd.traphic.dev
- Drop each
.jsonl - Review in Reader mode → Download or Submit with your alias
Convert with tourqmd
Clean back-and-forth transcripts for upload and rating
- Open the converter.
-
Drop a Claude or Codex
.jsonl(or use a sample to learn the UI). - Review in Reader mode (formatted). Switch to Source for raw Markdown.
- Copy or Download .md for your records.
Output shape
# Transcript **User:** your message **Assistant:** agent reply and readable actions **User:** … **Assistant:** …
Submit to Google Drive
After both transcripts look good
- Convert each session (Codex + Claude) in tourqmd.
- Click Submit.
- Enter your alias only (no email).
-
The file uploads as
alias-1__….md, thenalias-2__….md, and so on.
| Alias | ID | Drive file |
|---|---|---|
jane |
jane:1 |
jane-1__….md |
jane again |
jane:2 |
jane-2__….md |
Prefer clear names before upload when possible (e.g. include
codex / claude in the source filename). Your alias still
drives the unique ID.
Task write-up (for the submission form)
Fill these two blocks carefully — raters rely on them
Block 1 — What you set out to do
Include:
- What you set out to do and why
- What area of coding the task sits in
- Required expertise to perform the task
- How long an expert would take to do it themselves
Block 2 — Initial prompt (identical for both agents)
Copy and paste the exact initial prompt you gave to both Codex and Claude Code.
Creating · Vetting · Blind rating
How your work is used in the project
Creating & rating
You run the dual-agent protocol on a real task, upload both logs (via tourqmd when needed), and rate each agent’s run.
Vetting
Another person checks that the task is realistic usage and that the package is complete and consistent (same prompt, both agents, transcripts present).
Blind rating
Raters read both transcripts independently. The first rater’s scores are never shown to the second. Keep transcripts free of model/harness names so rating stays fair.
Troubleshooting
| Problem | What to do |
|---|---|
| Codex / Claude not found |
Install the CLI and ensure it is on PATH. For Codex Desktop, the
blank_codex helper also checks
/Applications/ChatGPT.app/Contents/Resources/codex.
|
| Wrong model shown | Exit and re-run the blank-slate commands. Confirm GPT-5.6-Sol (Codex) and Fable 5 (Claude) at high effort before the first prompt. |
| Can’t find session files |
Blank-slate logs live under
${TMPDIR:-/tmp}/codex-blank.*/home/sessions and
${TMPDIR:-/tmp}/claude-blank.*/projects — not
~/.codex / ~/.claude. Prefer the Path B one-liners
(recommended for tokens) before temp dirs are cleaned up / reboot.
|
| tourqmd Submit greyed out | Convert a file first (preview must appear in Reader mode). |
| Drive upload fails | Admin must finish admin Drive setup (Google connected + folder saved). |
redirect_uri_mismatch |
Google OAuth Web client must include exactly
https://tourqmd.vercel.app/api/google-callback
|
Useful links
https://turquoise-guardian.learn.joinhandshake.com
https://tourqmd.vercel.app/
https://tourqmd.vercel.app/compare.html
https://tourqmd.vercel.app/instructions.html
https://tourqmd.traphic.dev/admin.html
You’re ready
Check Turquoise Guardian for project guidance → set up blank agents → run the same task twice → save both transcripts → convert in tourqmd if needed → submit with your alias.