- TypeScript 98.9%
- CSS 0.9%
- Shell 0.2%
|
Some checks failed
Release / release (push) Failing after 27s
Fix transcript ordering, mid-turn click-to-expand, and two paths whose cost grew with session length. Transcript history merged the disk window ahead of the in-memory context with first-wins dedupe, assuming the window was strictly older. loadTail reads the newest records, so the two overlap: the newest rows rendered at the window's position and the bottom of ctrl+o sat a full window behind the latest message. Verified against five real sessions, including a two-compact one, where the view was 200 messages behind. Rows of the in-flight turn render outside VirtualMessageList and so had no ancestor carrying onClick. Clicking a collapsed "Ran N commands" group mid-turn reached no handler at all until the turn ended and the row moved into virtualized history. The older-edge paging effect re-armed itself in its own continuation while one of its dependencies changed as a result of the load it performed. When a page returned no new leading row it fired again every commit, with no exit. The speculative fill now stops unless it makes progress; scroll-driven loads are still always honoured. updateVirtualOffsets invalidated the whole prefix sum on any height write, so each appended message re-summed all history while pinned to the bottom: 1.35M height lookups per 50 appends at 27k rows, versus 100 after. Writers now report the lowest index they dirtied and the rebuild resumes there. Tests cover all four; each was confirmed to fail against the pre-fix code. The offsets change carries a 600-step randomised oracle asserting the narrowed rebuild is identical to a full one, since an off-by-one there would corrupt scroll positioning silently. |
||
|---|---|---|
| .claude | ||
| .forgejo/workflows | ||
| assets | ||
| debug/260413-compact-loop | ||
| docs | ||
| predict | ||
| reason/260410-0130-gpt-opus-parity | ||
| relay | ||
| scripts | ||
| specs/done/paged-transcript-store | ||
| src | ||
| vendor | ||
| web | ||
| WEB_UI_MEMORY_MANAGEMENT_SPEC-tasks | ||
| WEB_UI_SESSION_SUMMARY_SPEC-tasks | ||
| wiki | ||
| .bunfig.toml | ||
| .env.example | ||
| .gitignore | ||
| autoresearch-lessons.md | ||
| autoresearch-state.json | ||
| bun.lock | ||
| CLAUDE.md | ||
| env.d.ts | ||
| FEATURES.md | ||
| install.ps1 | ||
| install.sh | ||
| package.json | ||
| PRODUCT.md | ||
| README.md | ||
| research-results.tsv | ||
| tsconfig.json | ||
| UPSTREAM_PORTING.md | ||
| WEB_UI_MEMORY_MANAGEMENT_SPEC.md | ||
| WEB_UI_PLAN.md | ||
| WEB_UI_SESSION_SUMMARY_SPEC.md | ||
cute-code
A terminal coding agent with a local browser UI, multi-provider model support, and worktree-aware sessions.
Use it as a REPL, a one-shot CLI, or a browser-managed local session. It supports Anthropic models, GPT/Codex-style models, Codex Pool-backed servers, custom model definitions, MCP, voice input, and browser-side session management.
curl -fsSL https://git.irrigate.cc/pp/cute-code/raw/branch/main/install.sh | bash
What it does
cute-code is a coding agent for local development work. You can run it directly in the terminal, open the same runtime in a browser UI, point it at Anthropic or OpenAI-compatible model stacks, and keep separate tasks isolated in their own worktrees.
The useful part is not one headline feature. It is the combination:
- terminal REPL and one-shot prompt mode
- browser UI backed by a local daemon
- Anthropic, GPT/Codex-style, and custom registered models
- MCP support
- worktree-per-session workflows
- voice mode and OpenAI-backed image generation
- broader agent/runtime features like planning, monitoring, and autodrive
Why people use it
| Capability | Why it matters |
|---|---|
| Multi-provider model support | Run Anthropic models, GPT/Codex-style models, Codex Pool-backed servers, and custom registered models from one client. |
| Better OpenAI integration | GPT-family sessions include deeper runtime support such as native web search, remote compaction, Codex config loading, Codex Pool login flows, smarter agent model mapping, and mid-turn narration. |
| Browser session management | The browser UI supports persistent transcripts, pinned and renamed sessions, attachments, inline generated images, and better session controls than a single terminal pane. |
| Worktree workflows | Start isolated sessions in separate worktrees so parallel tasks do not fight over one branch. |
| Local tool surface | MCP, image generation, voice mode, and computer-use support can live inside the same runtime. |
| Better release ergonomics | Cross-platform binaries, install scripts, compiled web assets, and Gitea releases make it usable as software, not just as a source tree. |
Quick start
Install
macOS / Linux:
curl -fsSL https://git.irrigate.cc/pp/cute-code/raw/branch/main/install.sh | bash
Windows PowerShell:
irm https://git.irrigate.cc/pp/cute-code/raw/branch/main/install.ps1 | iex
Or download a binary from the releases page.
Start a terminal session
For Anthropic models:
export ANTHROPIC_API_KEY="sk-ant-..."
cute-code
For GPT/Codex-style models:
export OPENAI_API_KEY="sk-..."
cute-code --model gpt-5.6
If you prefer interactive login:
cute-code /login
The login flow also supports Codex Pool. The Codex Pool path saves pooled Anthropic and OpenAI credentials, then refreshes the server's model catalog automatically.
Run a one-shot task
cute-code -p "explain the architecture of this repository"
Launch the browser UI
cute-code web
If you want to expose that local web session through the relay:
cute-code web --share
Treat share mode as remote shell access. Anyone with the passcode can act as you.
Core capabilities
Provider and model support
cute-code can run against Anthropic models, GPT/Codex-style models, Codex Pool-backed servers, and custom model definitions you register in settings. The current runtime also includes extra OpenAI-side work that simple compatibility layers usually skip: Codex config loading, native web search routing, remote compaction, better long-session handling, GPT-oriented mid-turn narration, and a dedicated Codex Pool login flow that configures credentials and refreshes pool-defined models.
Browser sessions
cute-code web starts a local daemon and opens a browser UI for the same runtime. That UI supports persistent transcripts, pinned sessions, auto-titles, rename/delete flows, slash-command discovery, attachments via drag-and-drop or paste, and inline rendering for generated images.
Worktree-based workflows
cute-code can create isolated sessions in separate worktrees so you can run several coding threads at once without stomping on the same working tree. The browser-side flow also supports inspecting and publishing worktree sessions.
Advanced agent workflows
Beyond the base prompt loop, the runtime includes planning and verification flows, autodrive, and the Monitor tool for streaming background shell events. If you use cute-code for longer-running work instead of one prompt at a time, those additions matter.
Band peer workflow
Band peer behavior is available as a first-party runtime feature. Use /band enable or /band disable to turn passive Band processing on or off without deleting profiles, peers, queues, or archives. /band status, /band inbox, /band reply, and /band ack expose the durable Band queue in the terminal, while the browser UI uses the same local service layer for peers, chats, send, reply, and ack controls.
Existing Jam users can run /band migrate for a dry-run report against $JAM_CONFIG_DIR or Jam's default config directory. Re-run with /band migrate --import to copy validated profiles, peer sessions, queues, and archives into cute-code's Band state. See docs/band-peer/migration.md for the safe migration path and the Jam surfaces that remain out of scope for first-party v1.
Local tools
The local tool surface includes MCP integration, voice mode, OpenAI-backed image generation, and computer-use support where the platform and runtime support it. In the current implementation, image generation goes through OpenAI auth, either via API key or ChatGPT/Codex-style auth.
Common commands
| Command | What it does |
|---|---|
cute-code |
Start the interactive terminal session. |
cute-code -p "..." |
Run a one-shot prompt and exit. |
cute-code --model gpt-5.6 |
Start with a specific model. |
cute-code web |
Launch the local browser UI. |
cute-code web --share |
Launch the browser UI and expose it through the share relay. |
cute-code --version |
Print the current version. |
Inside the REPL, you also have slash commands for model switching, login, permissions, skills, session controls, voice mode, planning flows, and background-task workflows.
Configuration
cute-code reads settings from ~/.claude/settings.json.
Example:
{
"model": "gpt-5.6",
"openaiApiKey": "sk-...",
"openaiBaseUrl": "https://gateway.example.com/v1",
"anthropicApiKey": "sk-ant-...",
"anthropicBaseUrl": "https://api.anthropic.com",
"customModels": [
{
"id": "gateway/o3",
"name": "o3 via gateway",
"protocol": "openai",
"baseUrl": "https://gateway.example.com/v1",
"contextWindow": 200000,
"description": "OpenAI-compatible model exposed through an internal gateway"
},
{
"id": "gateway/opus-like",
"name": "Opus-like internal model",
"protocol": "anthropic",
"baseUrl": "https://anthropic-gateway.example.com",
"contextWindow": 200000
}
]
}
Useful settings surfaced by the current schema include:
openaiApiKeyandopenaiBaseUrlanthropicApiKeyandanthropicBaseUrlcustomModelsfor Anthropic- or OpenAI-protocol backends- the usual model, permissions, environment, and session settings
If you already use Codex, cute-code can also read Codex auth/config and pick up provider base URL information from there on the OpenAI side. If you use a Codex Pool server, the login flow writes pooled Anthropic/OpenAI credentials and caches the pool's authenticated model catalog without copying credentials into each model entry.
Architecture at a glance
+----------------------+
| cute-code |
| REPL / one-shot |
+----------+-----------+
|
+----------------+----------------+
| |
+-------v--------+ +-------v--------+
| local runtime | | browser daemon |
| bash/read/edit | | web sessions |
| MCP/image/voice| | transcripts |
| monitor/agents | | attachments |
+-------+--------+ | worktrees |
| +-------+--------+
| |
+----------------+----------------+
|
+----------v-----------+
| model + API layer |
| Anthropic |
| OpenAI / Codex |
| custom endpoints |
+----------------------+
Build from source
cute-code builds with Bun >= 1.3.14.
bun install
bun run build
./cli
Useful development commands:
bun run dev
bun run build:dev
bun run build:dev:full
bun run release:build
Troubleshooting
ANTHROPIC_API_KEY is not set
Set an Anthropic API key before starting a session:
export ANTHROPIC_API_KEY="sk-ant-..."
OPENAI_API_KEY is not set
Set an OpenAI API key before using GPT or Codex-style models:
export OPENAI_API_KEY="sk-..."
The binary installed but cute-code is not found
Make sure your install directory is on PATH.
On macOS and Linux the default install path is:
~/.local/bin
On Windows it is:
$env:LOCALAPPDATA\Programs\cute-code\bin
cute-code web starts but I cannot connect
By default the web UI listens locally. If you need access from another machine, use share mode intentionally:
cute-code web --share
Voice mode does not work
Voice support depends on local audio capture support and a usable microphone environment. If your machine does not expose audio capture correctly, the rest of the app still works normally.
Limitations
- Building from source requires Bun.
- This snapshot does not ship with a reconstructed automated test suite.
- Some features depend on the local environment, especially voice and computer-use support.
- Share mode is powerful and should be treated carefully because it exposes agent access to your machine.
FAQ
Can I use Anthropic and OpenAI models in the same tool?
Yes. cute-code supports both stacks and also supports custom model registrations in settings.
Is the OpenAI support just basic API compatibility?
No. The runtime includes dedicated OpenAI translation, model handling, auth/config loading, remote compaction, native web search routing, and mid-turn narration for GPT-family sessions.
Does it work with Codex Pool servers?
Yes. The login flow includes a Codex Pool path that claims pooled credentials from a server URL plus friend code, writes both Anthropic and OpenAI base URLs/API keys, and refreshes the authenticated pool model catalog.
Can I point it at a proxy, pool, or internal gateway?
Yes. The settings schema includes both Anthropic and OpenAI base URL overrides, plus custom model definitions.
Does it support MCP?
Yes. MCP servers are part of the core workflow.
Can I ignore the browser UI and stay in the terminal?
Yes. The terminal REPL remains the primary experience. The browser UI is there when you want uploads, persistent transcripts, session management, or worktree flows.
Can it isolate sessions in separate worktrees?
Yes. The current codebase supports worktree-aware sessions and publish flows around them.
About Contributions
Please don't take this the wrong way, but I do not accept outside contributions for any of my projects. I simply don't have the mental bandwidth to review anything, and it's my name on the thing, so I'm responsible for any problems it causes; thus, the risk-reward is highly asymmetric from my perspective. I'd also have to worry about other "stakeholders," which seems unwise for tools I mostly make for myself for free. Feel free to submit issues, and even PRs if you want to illustrate a proposed fix, but know I won't merge them directly. Instead, I'll have Claude or Codex review submissions via gh and independently decide whether and how to address them. Bug reports in particular are welcome. Sorry if this offends, but I want to avoid wasted time and hurt feelings. I understand this isn't in sync with the prevailing open-source ethos that seeks community contributions, but it's the only way I can move at this velocity and keep my sanity.
License
See LICENSE if present in your checkout, and review the repository metadata on the host you downloaded it from.