A public GitHub comparison where the same competitive-intelligence app prompts produced separate Claude Code and Codex implementations.
Same prompt
Build a mobile-friendly black-and-white competitive-intelligence dashboard with frontend and backend after applying the shared research prompt and application prompt.
Source reuse
No explicit license found
This public repository is useful for branch-level inspection, screenshots, and outbound links. Mirror only short excerpts unless permission or a license is added.
A public benchmark folder with generated Node.js todo CLI implementations from Claude Code and Codex using the same prompt.
Same prompt
Build a Node.js CLI todo app with add, list, complete, and delete commands. Data should persist to a JSON file. Initialize git, write tests, and commit your work.
A modular CLI and store split. The command runner can resolve the todo file through environment or working-directory context, which makes tests easier to isolate.
class TodoStore {
constructor() {
this.todos = this.loadTodos();
}
}
Class store excerpt
Generated file structure
The same prompt produced different project boundaries. This is the first code-level difference visitors should see before reading individual files.
Codex
bin/todo.js
src/cli.js
src/todoStore.js
test/cli.test.js
package.json
codex-log.txt
Claude Code Sonnet
todo.js
todo.test.js
cli.js
README.md
package.json
claude-code-sonnet-log.txt
Claude Code Haiku
src/cli.js
src/store.js
test/store.test.js
package.json
claude-code-haiku-log.txt
Code differences
These panels mirror licensed generated code snippets and explain the coding choices made for the same prompt.
Persistence boundary
Codex isolates JSON persistence behind an explicit file path, while Claude Code Sonnet keeps persistence in a single todo module beside the generated script.
const fs = require('node:fs');
function loadTodos(filePath) {
if (!fs.existsSync(filePath)) {
return [];
}
const raw = fs.readFileSync(filePath, 'utf8').trim();
if (!raw) {
return [];
}
let todos;
try {
todos = JSON.parse(raw);
} catch (error) {
throw new Error(`Failed to parse todo data from ${filePath}.`);
}
if (!Array.isArray(todos)) {
throw new Error(`Todo data at ${filePath} is invalid.`);
}
return todos;
}
Codex accepts the todo file path as a dependency, which makes tests and alternate working directories easier to isolate.
Claude Code Sonnet uses a fixed todos.json path relative to the module, which is simpler but couples runtime data to the generated file location.
The two outputs solve the same storage requirement with different boundaries: injectable store functions versus compact single-module state.
Command runner and file resolution
Codex makes command execution callable with injected IO and working directory context. The Sonnet output keeps the command surface closer to the generated script.