Skip to content

LLM ready

/en/lab/forja.md

Title:
Forja

Forja

Desktop client that brings Claude Code, Codex and Gemini into one interface, so context survives when I switch instead of vanishing across three terminals. Built with Electron, React and TypeScript, with xterm.js for the terminal and an adapter layer per CLI instead of forcing a common protocol on all three. It is my primary client day to day.

Problem

Switching between three agent CLIs in separate terminals costs context on every swap, and none of them shows the state of the others.

Decisions

Started in Tauri and Rust, for binary weight. In March 2026 it moved to Electron: each session's terminal is a PTY, and managing PTYs from Node.js was simpler and had a larger ecosystem than from a Rust backend. An adapter layer per CLI, instead of a common protocol forced on all three.

Outcome

11 stars on GitHub and daily personal use as the primary client.

Links

---
title: Forja
url: https://nandomoreira.dev/en/lab/forja
collection: lab
tech:
  - Electron
  - React
  - TypeScript
date: 2026-01-15
---

# Forja

Desktop client that brings Claude Code, Codex and Gemini into one interface, so context survives when I switch instead of vanishing across three terminals. Built with Electron, React and TypeScript, with xterm.js for the terminal and an adapter layer per CLI instead of forcing a common protocol on all three. It is my primary client day to day.

## Problem

Switching between three agent CLIs in separate terminals costs context on
every swap, and none of them shows the state of the others.

## Decisions

Started in Tauri and Rust, for binary weight. In March 2026 it moved to
Electron: each session's terminal is a PTY, and managing PTYs from Node.js
was simpler and had a larger ecosystem than from a Rust backend. An adapter
layer per CLI, instead of a common protocol forced on all three.

## Outcome

11 stars on GitHub and daily personal use as the primary client.

## Links

- Repo: https://github.com/nandomoreirame/forja
- Live: https://forja.web.app

Ready to share.