Minimal local-first web console for Codex.
Published package: https://www.npmjs.com/package/codex-web-console
- Local-only: talks to a single local
codex app-server - Single-token auth: one login field, one access token
- Thread list across all local providers
- URL-addressable threads:
/opens a new thread,/?thread=<id>opens an existing one - Live timeline updates over SSE
- Workspace browser for choosing a local directory
- Approval handling for command, file-change, and permissions prompts
- Turn controls: stop the current turn, jump to previous/next historical turn
This project is intentionally narrow. It does not implement users, remotes, or a second session system on top of Codex threads.
bun install
bun run devStart the console with npx:
npx codex-web-consoleOptions:
npx codex-web-console --host 127.0.0.1 --port 3000 --no-openFor local testing from this repository:
bun run build
npx . --no-openSet a single access token before starting, or copy .env.example to .env:
export CODEX_WEB_CONSOLE_TOKEN=your-tokenSvelteKit loads .env automatically in development. A value exported in your
shell takes precedence over the same key in .env.
The landing page accepts exactly one token and stores a signed-in cookie locally.
In development, if the variable is missing, a fallback token is enabled:
codex-web-console
bun run buildCI runs on every push to main and every pull request:
bun run check
bun run buildPackage publishing is manual only.
For workflow_dispatch runs, publishing is blocked by default.
It will publish only when:
release_nowis set totruerelease_versionis set to the exact version you want to publish
For manual runs, you can choose:
oidc: publish via npm trusted publishingnpm-token: publish via theNPM_TOKENGitHub secret as a fallback
Before enabling manual token-based publishing, add this GitHub Actions secret:
NPM_TOKEN
The npm token needs publish permission for the codex-web-console package.
Manual publish will fail if the requested version already exists on npm.
- Bun must be available in
PATH - Codex must be available in
PATH - The UI starts and talks to a single local
codex app-server - The configured token is required outside development
- Threads are listed via the app-server with
modelProviders: [], so the sidebar includes threads across providers. - Some reasoning content is available live but not fully restored by
thread/read; the UI preserves it during the current browser session for continuity. - The current version focuses on the single-machine path and keeps the architecture thin on purpose.