typeduck-codex-web 0.3.0

A standalone browser interface and Codex runtime
Documentation

typeduck-codex-web

typeduck-codex-web is a standalone Codex runtime with a browser interface. It includes the app server, so it does not require another codex executable.

Install

cargo install typeduck-codex-web

Start the user daemon and open its project dashboard:

typeduck-codex-web

The dashboard discovers recent projects and sessions from your Codex history. Use the directory picker to start work anywhere the daemon account can access, or open a specific directory directly:

typeduck-codex-web -C /path/to/project

On startup the command prints a private bootstrap URL. Opening it establishes an HTTP-only browser session scoped to an unguessable server path; the persistent secret remains in CODEX_HOME. Use --reset-token to revoke existing browser sessions.

Run typeduck-codex-web --help for port, browser, working-directory, and configuration options.

Accounts and proxies

Create $CODEX_HOME/typeduck-codex-web/daemon.toml to configure accounts in fallback order. Each account uses its own Codex home, so credentials stay isolated. At startup the daemon selects the first signed-in account whose reported rate limit is still available.

[[accounts]]
name = "primary"
label = "Work"
codex_home = "/home/me/.codex-work"
proxy = "http://127.0.0.1:8080"

[[accounts]]
name = "backup"
label = "Personal"
codex_home = "/home/me/.codex-personal"
use_ssh_tunnel = true

[ssh_tunnel]
destination = "me@bastion.example.com"
identity_file = "/home/me/.ssh/id_ed25519"
ssh_port = 22
# local_port = 1080 # omit to choose an available loopback port

Proxy URLs may use http, https, socks5, or socks5h. The daemon applies the selected account's proxy to Codex-owned OpenAI HTTP and WebSocket clients. For use_ssh_tunnel, it owns an OpenSSH ssh -N -D child process and stops it with the daemon. The SSH feature therefore requires ssh on PATH; the Codex runtime itself remains embedded in the installed binary.

Use --daemon-config /path/to/daemon.toml to load another file.