Skip to content

Instantly share code, notes, and snippets.

@steipete
Created June 25, 2025 22:19
Show Gist options
  • Save steipete/670b2522b476f6a850e07b3535ebb2b7 to your computer and use it in GitHub Desktop.
Save steipete/670b2522b476f6a850e07b3535ebb2b7 to your computer and use it in GitHub Desktop.
compare gemini and codex. What are the key technical differences between the two? Which is better?

Excellent. This is a fantastic comparison task. Let's break down the technical differences between Gemini CLI and Codex CLI based on their file structures and documentation, and then determine which one might be "better" for different use cases.

At a Glance: Gemini CLI vs. Codex CLI

Feature Gemini CLI Codex CLI
Core Language TypeScript (Node.js) Hybrid: Rust & TypeScript
Architecture Client/Server (both in TypeScript) Hybrid: Rust core/TUI with a parallel JS/React TUI
Sandboxing Docker/Podman or macOS Seatbelt Rust-based execpolicy engine, macOS Seatbelt, Linux Landlock
UI Framework React & Ink (TypeScript) React & Ink (JS) AND Ratatui (Rust)
Tooling Focus General developer assistance, file system interaction, extensibility via MCP. Advanced agentic tasks, shell execution, structured code patching.
Extensibility MCP Servers (configured in JSON) MCP Servers (Rust implementation)
Automation Standard CLI features. Built-in GitHub Action for automated code review, issue handling.
Key Feature Hierarchical context (GEMINI.md), Git-based Checkpointing/Restore. execpolicy for fine-grained command security, apply_patch for edits.
Documentation Extensive, well-structured /docs directory. More fragmented, focused on technical specifications (e.g., protocol_v1.md).

Key Technical Differences in Detail

1. Core Technology Stack: TypeScript vs. Rust Hybrid

This is the most significant architectural difference and influences almost everything else.

  • Gemini CLI is a pure TypeScript/Node.js project. The packages/cli (frontend) and packages/core (backend) are both written in TypeScript. This makes it highly accessible to the large community of web and Node.js developers.
  • Codex CLI is a hybrid Rust and TypeScript project. It has a codex-cli package in TypeScript/React, but a massive and sophisticated codex-rs workspace containing a full-native implementation of the core logic, TUI, and security policies. The codex-cli/bin/codex.js launcher can even choose which implementation to run, suggesting a potential migration to or a dual-mode system.

Implication: Codex's Rust core (codex-rs/core) suggests a strong focus on performance, memory safety, and low-level system control, which is especially evident in its sandboxing approach. Gemini's TypeScript stack prioritizes developer accessibility and rapid iteration within the Node.js ecosystem.

2. Sandboxing and Security

Both projects prioritize security, but their approaches are fundamentally different.

  • Gemini CLI uses containerization (Docker/Podman) or macOS's built-in Seatbelt (sandbox-exec). This is a practical, environment-level approach. The sandbox is enabled via a flag (--sandbox) or configuration ("sandbox": true).
  • Codex CLI has a far more advanced and integrated security model. The codex-rs/execpolicy crate is a custom-built policy engine written in Rust. It uses Starlark (a Python dialect) for its policy files (default.policy), allowing for a highly granular, programmable definition of which shell commands and arguments are "safe." For OS-level isolation, it uses macOS Seatbelt and Linux Landlock, which are more lightweight and integrated than full containerization.

Implication: Codex's execpolicy is a technically superior and more unusual solution. It provides a fine-grained, application-aware security layer that goes beyond the simple "all or nothing" of a container, enabling safer "full-auto" modes.

3. User Interface (TUI)

Both provide rich terminal user interfaces, but again, the implementation differs.

  • Gemini CLI uses React and Ink for its TUI, implemented in TypeScript (packages/cli/src/ui/). The component-based structure (/components/messages, InputPrompt.tsx) is clear and modern.
  • Codex CLI has two TUIs.
    1. A JavaScript TUI using React and Ink, very similar to Gemini's (codex-cli/src/components/chat).
    2. A full-native Rust TUI using ratatui (codex-rs/tui). This is a complete, parallel implementation.

Implication: The existence of two TUIs in Codex is highly unusual. It suggests either a migration from JS to Rust is in progress, or that they serve different purposes (e.g., the JS one for simple use, the Rust one for the standalone binary). This architectural complexity contrasts with Gemini's single, unified UI.

4. Tooling and Agent Logic

  • Gemini CLI has a well-defined ToolRegistry and a suite of TypeScript-based tools (ReadFileTool, EditTool, ShellTool). A standout feature is the editCorrector.ts, which allows the replace tool to use the LLM to self-correct its own parameters if an edit fails. Its checkpointing feature, using a shadow Git repo, is another powerful and unique form of "tooling" for ensuring safety and reversibility.

  • Codex CLI's tooling seems more focused on structured, agentic tasks. The apply_patch tool (codex-rs/apply-patch) is particularly interesting. It uses a custom, context-aware diff format (not standard diff -u), suggesting the model is instructed to generate changes in a very specific, machine-parseable way. This is more robust for complex, multi-location code changes than the string replacement offered by Gemini's EditTool.

5. Automation and Integration

  • Gemini CLI is designed as a developer's personal assistant on the command line.
  • Codex CLI is designed for both personal use and automation. The presence of a custom GitHub Action (/.github/actions/codex) shows it's intended to be used in CI/CD pipelines to do things like comment on issues, review PRs, and even attempt fixes automatically. This is a major difference in scope and ambition.

Which is Better?

This is a subjective question, and the answer depends entirely on the use case.

Gemini CLI is likely "better" for the individual developer.

  • Ease of Use & Onboarding: It has superior, user-facing documentation (/docs), clear authentication guides, and user-friendly features like themes and checkpointing that are easy to grasp.
  • Simplicity & Contribution: The pure TypeScript stack is more accessible to a wider range of developers, making it easier to understand, extend, and contribute to.
  • Polished Experience: Features like hierarchical context (GEMINI.md) and the self-correcting edit tool provide a very refined and forgiving user experience.

Codex CLI is likely "better" as a powerful, agentic system for automation and advanced tasks.

  • Performance and Security: The Rust core and the custom execpolicy engine provide a more performant and secure foundation for running untrusted, model-generated commands automatically. This is crucial for CI/CD bots.
  • Agentic Power: The apply_patch tool and the GitHub Action integration demonstrate a focus on enabling complex, end-to-end automated workflows that go beyond what a typical developer would do in an interactive session.
  • Technical Sophistication: For developers interested in low-level systems programming, security, and building AI agents, Codex's Rust implementation is far more advanced and technically impressive.

Final Verdict

  • For a developer who wants a powerful, polished, and easy-to-use AI assistant to help with daily coding tasks in their terminal, Gemini CLI is the better choice. It's well-documented, user-friendly, and has innovative features like checkpointing.

  • For a team or organization looking to build AI-powered developer automation, or for a power user who needs maximum performance and security, Codex CLI is the superior platform. It's an industrial-strength agent framework, albeit with a more complex architecture and steeper learning curve.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment