---
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
