{"slug": "i-built-giverny-a-native-terminal-for-cluade-code-and-codex", "title": "I built Giverny – a native terminal for Cluade Code and Codex", "summary": "Developer y0av released Giverny, a native GPU-rendered terminal written in Rust on alacritty_terminal that runs Claude Code and Codex sessions side by side across multiple accounts on Linux, macOS and Windows. Giverny assigns a separate Claude account per category via CLAUDE_CONFIG_DIR, shows each account's usage limits and reset times, and tracks per-tab agent state through Claude Code hooks with a zero-config fallback to Claude's session registry and Codex observer hooks installed from Settings. The tool never contacts Anthropic or OpenAI directly and never reads credential files, drawing Claude usage from the .claude.json cache and Codex usage from the local codex app-server helper, with its only network request being a daily update check that sends nothing but a User-Agent.", "body_md": "A native terminal for running Claude Code and Codex sessions side by side, across several accounts at once. Tabs sit in categories on a left rail and show what each agent is doing. Each category can run on its own Claude account, and the rail shows every account's limits with reset times.\n\nWritten in Rust on `alacritty_terminal` and rendered on the GPU, with no web engine. Runs on Linux, macOS and Windows.\n\n- **Multiple accounts.** Each`CLAUDE_CONFIG_DIR` and Codex home is an account, discovered automatically. Claude accounts can be assigned per category, so work and personal projects draw from different plans. The rail shows each account's limits with reset times.\n- **Agent state per tab.** A spinner while Claude or Codex works, a flag and desktop notification when it needs input, a ✓ when a background tab finishes. Claude uses Claude Code hooks, with a zero-config fallback to its session registry. Codex uses observer hooks installed from Settings → codex and trusted with`/hooks` ([setup](https://github.com/y0av/giverny/blob/main/docs/codex-integration.md) ).\n- **Background agents.** Forked and`run_in_background` Claude sessions appear in the rail. Click one to attach a tab.\n- **Persistent sessions.** Tabs, categories, working directories and scrollback survive restarts. Claude and Codex conversations resume in the right directory and account. Monitors on the`restore_apps` list (btop, k9s, lazygit) restart; other commands are never re-run.\n- **Right-to-left text.** Hebrew and Arabic render in reading order. Cascadia Mono Hebrew is bundled.\n- **Rail views.** Group tabs by your own categories or by git repository.\n- **Terminal support.** Kitty keyboard protocol (Shift+Enter works in Claude without`/terminal-setup` ), kitty graphics, synchronized output, OSC 7 and 52, sanitized bracketed paste, SGR mouse, file drag-and-drop.\n- **Plain config.**`~/.config/giverny/config.toml` hot-reloads. The`Ctrl+,` settings screen writes back to it with comments preserved. See[all options](https://github.com/y0av/giverny/blob/main/docs/options.md) .\n- **`giverny doctor`** prints Claude and Codex accounts, hook status, usage freshness and live sessions.\n\nLinux / macOS:\n\n```\ncurl -fsSL https://github.com/y0av/giverny/releases/latest/download/install.sh | sh\n```\n\nWindows:\n\n```\nirm https://github.com/y0av/giverny/releases/latest/download/install.ps1 | iex\n```\n\nFrom source (Rust 1.90+):\n\n```\ngit clone https://github.com/y0av/giverny && cd giverny\ncargo install --path crates/app\ngiverny install-desktop\n```\n\n`install-desktop` adds the launcher entry and icons. On Linux it also sets `OOMPolicy=continue` on Giverny's systemd scope, so an out-of-memory kill in one tab doesn't close the rest. The install scripts run it for you.\n\nGiverny checks GitHub daily for a new release and offers a one-click update; `giverny update` does the same from a shell. Disable the check with `[update] check = false` or `GIVERNY_NO_UPDATE=1`.\n\nGiverny runs on Linux (Wayland and X11), macOS and Windows.\n\nGiverny itself never contacts Anthropic or OpenAI and never reads credential files. Claude usage comes from the `.claude.json` cache Claude Code writes; session state comes from hooks and Claude's session registry. Codex usage comes from the official local `codex app-server` helper, which contacts OpenAI using Codex's own sign-in; it never runs if Codex is disabled in Settings. Giverny's only direct network request is the update check, which sends nothing but a User-Agent.\n\nHook installation shows what it adds, keeps your existing hooks and writes a `.giverny-bak` backup. Pasted text is stripped of escape bytes, and the in-band control channel is nonce-authenticated so terminal output can't fake agent states. Details in [Claude Code integration](https://github.com/y0av/giverny/blob/main/docs/claude-integration.md) and [Codex integration](https://github.com/y0av/giverny/blob/main/docs/codex-integration.md).\n\n| Chord | Action | \n|---|---|\n| `Ctrl+Shift+T` /`Ctrl+Shift+W` | New tab / close tab | \n| `Ctrl+Shift+A` | Next tab where an agent needs you | \n| `Ctrl+Shift+P` | Tab palette | \n| `Ctrl+Shift+F` | Search scrollback | \n| `Ctrl+Shift+E` | Label paths and URLs on screen for quick open | \n| `Ctrl+Tab` | Recently used tabs | \n| `F2` | Rename tab | \n| `Ctrl+,` | Settings | \n| `F1` | Full key list | \n\n[Architecture](https://github.com/y0av/giverny/blob/main/docs/architecture.md) · [Options](https://github.com/y0av/giverny/blob/main/docs/options.md) · [Claude Code integration](https://github.com/y0av/giverny/blob/main/docs/claude-integration.md) · [Codex integration](https://github.com/y0av/giverny/blob/main/docs/codex-integration.md) · [Changelog](https://github.com/y0av/giverny/blob/main/CHANGELOG.md)\n\nMIT OR Apache-2.0, at your option.\n\nThe bundled Cascadia Mono fonts in `crates/term/fonts` are © Microsoft, licensed under the SIL Open Font License 1.1 (`CascadiaMono-OFL.txt`).", "url": "https://wpnews.pro/news/i-built-giverny-a-native-terminal-for-cluade-code-and-codex", "canonical_source": "https://github.com/y0av/giverny", "published_at": "2026-10-20 12:18:37+00:00", "updated_at": "2026-10-20 12:46:56.341130+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-tools"], "entities": ["Giverny", "y0av", "Claude Code", "Codex", "Anthropic", "OpenAI", "Rust", "alacritty_terminal"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/i-built-giverny-a-native-terminal-for-cluade-code-and-codex", "markdown": "https://wpnews.pro/news/i-built-giverny-a-native-terminal-for-cluade-code-and-codex.md", "text": "https://wpnews.pro/news/i-built-giverny-a-native-terminal-for-cluade-code-and-codex.txt", "jsonld": "https://wpnews.pro/news/i-built-giverny-a-native-terminal-for-cluade-code-and-codex.jsonld"}}