A collection of gpui-shell applications generated from scratch by AI coding agents. They exist to measure two things:
- AI friendliness — given only a design or a brief, plus the
AGENTS.mdandgpui-kit.d.tsthat gpui-shell generates, how quickly and cheaply can an agent produce a working native application? - Capability — can the gpui-shell runtime (layout, painting, input, files, network, storage, processes…) carry a genuinely useful application, not just a static screen?
Install the latest gpui-shell runtime from Git (requires Rust/Cargo and the platform's GPUI build dependencies):
cargo install --git https://github.com/longbridge/gpui-kit gpui-shell --lockedThen install applications from the latest release. install.sh lists them and asks which ones you want:
curl -fsSL https://raw.githubusercontent.com/huacnlee/gpui-shell-benchs/main/install.sh | shEach application gets an entry you can open like any other: a .app in ~/Applications on macOS, a launcher entry and a command in ~/.local/bin on Linux. It is also installed in ~/.gpui-shell/apps, so gpui-shell run <name> works too. Archives are checked against SHA256SUMS, and reinstalling keeps each application's data.
Arguments go after sh -s --:
curl -fsSL https://raw.githubusercontent.com/huacnlee/gpui-shell-benchs/main/install.sh | sh -s -- --list # what the release has
curl -fsSL https://raw.githubusercontent.com/huacnlee/gpui-shell-benchs/main/install.sh | sh -s -- chat finder # install these without asking
curl -fsSL https://raw.githubusercontent.com/huacnlee/gpui-shell-benchs/main/install.sh | sh -s -- --all # install everything
curl -fsSL https://raw.githubusercontent.com/huacnlee/gpui-shell-benchs/main/install.sh | sh -s -- --version v0.2.0Every application is a self-contained gpui-shell application directory:
gpui-shell types -d apps/<name> # write gpui-kit.d.ts (not committed)
gpui-shell check -d apps/<name> # load, render and materialize once
gpui-shell dev apps/<name> # run it, reloading on save| Application | What it does |
|---|---|
| folio-deck | Folio Desk, a Gmail desktop client: OAuth sign-in, local cache, drafts, replies, one-command installer and a macOS .app |
| tendra | Tendra, a bid pipeline board: drag cards between stages, details drawer, persisted changes |
| ocean-view | OceanView, live fleet tracking: great-circle dead reckoning, sea-lane routing, ETA, fuel burn, rule-based alerts, report export, draggable and zoomable map |
| signed | Signed, a PDF signer: opens real PDFs with a pure-JS parser, keeps a drawn/typed signature library, saves signed copies by incremental update |
| skills-manager | Skills, an agent skills manager: scans, enables, disables, trashes and restores local skills; installs new ones from GitHub |
| finder | Finder, an Omarchy-style file browser (first built as Omanta): real folders, tabs, resizable split view, preview pane, right-click menus, pinned Places, copy/move, recoverable trash and undo |
| disktree | Disk usage treemap: real allocated/apparent sizes, file/age metrics, drill-down, cleanup review and recoverable trash |
| chat | Chat, a ChatGPT / Claude Desktop-style client for the local claude and codex CLIs: saved, searchable chats, resumed sessions, Markdown replies, provider and model switching |
| tickets | Tickets, a helpdesk from a set of design shots: drag-and-drop ticket board and table, inbox with snooze and replies, customer accounts with bulk actions, notifications and SLA tracking |
AGENTS.md generated by gpui-shell 0.7.3 for every app; regenerate after upgrading, never edit
install.sh installs release apps, with a macOS .app or Linux launcher entry each
scripts/session-stats.py time and token usage from Claude Code / Codex transcripts
apps/<name>/ one gpui-shell application per directory
Pushing a semantic-version tag such as v0.2.0 runs .github/workflows/release.yml. It tests the applications, builds one <app>-<tag>.tar.gz per directory with a manifest under apps/, checks the unpacked applications with the latest gpui-shell Git build, and publishes every archive plus SHA256SUMS in one GitHub Release. Tags such as v0.2.0-beta.1 produce prereleases. Each packaged manifest uses the tag's version; source manifests remain unchanged.
The archives contain JavaScript, manifests, assets, documentation and the license. No gpui-shell binary is included. Install them with install.sh, or extract an archive by hand:
mkdir -p ~/.gpui-shell/apps
tar -xzf skills-manager-v0.2.0.tar.gz -C ~/.gpui-shell/apps
gpui-shell run skills-managerPreview all release packages locally:
python3 scripts/package-apps.py --tag v0.2.0 --out distTime and tokens come from the agents' local transcripts (see Measuring). Wall is the time between the first and last event of the sessions. Active only adds up gaps shorter than 15 minutes, so overnight breaks and time away do not count. Total is uncached input + cache writes + cache reads + output; most of it is cache reads, so new input and output are listed separately below.
| Application | Agent · model | Wall | Active | Prompts | Output | Total tokens | Status |
|---|---|---|---|---|---|---|---|
| folio-deck | Codex · gpt-6.1-sol | ≈651 min | ≈121 min | ≈29 | ≈54K | ≈13.7M | Done |
| tendra | Claude Code · claude-opus-5-5 | 124 min | 32 min | 23 | 70.4K | 30.9M | Done |
| ocean-view | Claude Code subagent · claude-opus-5-5 | 71 min | 42 min | 8 | 154.8K | 46.5M | Done |
| signed | Claude Code subagent · claude-opus-5-5 | 49 min | 49 min | 24 | 200.4K | 62.7M | Done |
| skills-manager | Claude Code subagent · claude-opus-5-5 | 42 min | 42 min | 1 | 147.2K | 48.5M | Done |
| finder | Codex · gpt-6.1-sol, then Claude Code · claude-opus-5-5 | 98 min | 79 min | 29 | 186.8K | 57.1M | Done |
| disktree | Codex · gpt-6.1-sol | 212 min | 88 min | 30 | 72.2K | 23.1M | Done |
| chat | Claude Code · claude-opus-5-5 | 151 min | 129 min | 70 | 350.3K | 182.3M | Done |
Token counts use K (1,000) and M (1,000,000), rounded to one decimal place; ≈ marks estimates.
| Application | Uncached input | Cache write | Cache read | Output | Total |
|---|---|---|---|---|---|
| folio-deck | ≈252K | 0 | ≈13.4M | ≈54K | ≈13.7M |
| tendra | 25.3K | 364.1K | 30.5M | 70.4K | 30.9M |
| ocean-view | 4.6K | 455.5K | 45.9M | 154.8K | 46.5M |
| signed | 9K | 287.6K | 62.2M | 200.4K | 62.7M |
| skills-manager | 5.1K | 289.8K | 48.1M | 147.2K | 48.5M |
| finder | 443.1K | 317.2K | 56.1M | 186.8K | 57.1M |
| disktree | 347.4K | 0 | 22.7M | 72.2K | 23.1M |
| chat | 624 | 649.9K | 181.3M | 350.3K | 182.3M |
Notes:
-
finder (first named omanta) and disktree were built together on 2026-10-14 with Codex/gpt-6.1-sol. The finder row measures the parent phase from the Finder request at 03:00 UTC to the integration snapshot at 03:34 UTC; it includes coordinating DiskTree, an abandoned Lucide browser experiment, and shared validation. All seven human prompts of that phase, including screenshot revisions, are counted in the finder row. DiskTree adds two parts: the first build in its own subagent rollout (03:02–03:22 UTC; 13 min, 0 prompts, 2.9M tokens after normalization), and the design and feature rounds that followed in the parent session from 03:44 to the
commit push mainturn ending at 06:35 UTC (75 min active, 30 prompts: home-folder default, treemap colours, gradients and borders, Space marking, breadcrumb and segmented tabs, permanent delete, animation, inspector layout; 290.2K uncached input, 19.9M cache reads, 52.3K output, 20.2M tokens). Wall runs from the subagent's first event to 06:35 UTC; active adds both parts.session-stats.pyran against normalized transcript snapshots: parent cumulative token counters subtract the baseline before each phase, and cloned child user messages are excluded. The abandoned Lucide experiment (03:40 UTC) and the later scan-performance and memory fix made in Claude Code are not included. -
finder had a second phase in Claude Code (claude-opus-5-5) from 07:14 to 08:19 UTC, measured from that session's transcript with
--from: 65 min wall, 46 min active, 22 prompts, 280 uncached input, 317.2K cache writes, 43.5M cache reads, 136.7K output, 44.0M tokens. It fixed the collapsed layout and the virtual-list click handlers, then reworked the screen after GPUI Kit and Omarchy design reviews: right-click menus, a preview pane for text, Markdown and images, Omarchy state colours and monospace type, a single-row toolbar, segmented tabs, resizable split panes, pane toggles in the status bar, dragging folders onto Places to pin them, opening files throughcx.open_path, and the rename from omanta to finder. The two phases ran hours apart, so the row's wall and active times add the two phases instead of spanning the gap. The script counted 23 prompts for the second phase because screenshots read back by the agent appear as user messages; the 22 counted are the author's own, excluding the commit request and one unrelated change to signed (built-inTextEncoder/TextDecoder), whose small cost is included in the tokens. Known issue at the end of the phase: the auto-collapse of side panes is decided inrender, which does not rerun on window resize, so a pane can appear only after the next repaint. -
chat was built in the same Claude Code session as finder's second phase, measured with
--from 2026-10-14T08:43:39Z(the goal was set at 08:43 UTC)--to 2026-10-14T11:15:00Z(the lastcommit push). The session moved to a new transcript file partway through that repeats the earlier events, so only the latest file (7c3e6285) is read. The first build took the first 16 minutes; the rest is redesign and feedback rounds: building zion-ui, the component library the app is drawn with (its name, theme colours and control sizes went through several rounds), centring and sidebar fixes, a resizable animated sidebar, streaming through gpui-shell's newprocess.spawnand a long-lived Codex app server, the read-only sandbox fix for resumed Codex turns, the activity bar for long waits, and continuing replies cut off by a reload. 70 prompts: the/goalrequest plus 69 counted by the script, 54 of them sent while the agent was working (queued commands; the script now counts those and skips hook feedback, interruptions, compaction summaries and images read back by tools). The tokens exclude the shortclaude -pandcodexruns used to probe their output formats and test sessions and continuations end to end, which bill to those tools. -
folio-deck adds two phases, both Codex with gpt-6.1-sol. Phase 1 (design → demo mail app, before commit
59c1cc1) is measured: 591 min wall including an overnight pause, 61 min active, 14 prompts, 6.9M tokens. Phase 2 (Gmail, local cache, installer, macOS bundle, about 15 prompts fixing Mail details) has no local transcript; its ≈60 minutes come from the author and its ≈6.8M tokens are scaled from phase 1's rate (≈113K per active minute). Replace the estimate withsession-stats.pyoutput if the transcript turns up. -
tendra was a standalone repository, huacnlee/tendra, imported unchanged. Its session includes about 50 minutes of wrap-up and context compaction after the last commit.
-
ocean-view, signed and skills-manager were built in parallel by three subagents of one Claude Code session, each measured from its own transcript (
<session>/subagents/agent-*.jsonl). Subagents inherit the parent's context, which is included in their cache reads. Prompts count the requirements relayed by the parent plus the messages sent straight to the subagent (19 for signed, 4 for ocean-view). ocean-view ran in two rounds: the first build, then map dragging, zooming, click and layout fixes. -
Fixes made afterwards in the parent session (for example the
TextEncodercrash in signed) are not included.
A new application only counts if it follows these rules.
An application must actually do what it claims; recreating the screen is only the starting point.
- Data comes from a real source (local files, a network API, system facilities) or a real calculation, not numbers fixed in the interface. Where sample data is unavoidable, the README says which parts are simulated and why.
- The main actions have real effects: saving writes to disk or storage and survives a restart, exporting produces a file other software can open, edits change the real objects.
- Loading, empty, failure and retry states exist. Destructive actions ask for confirmation and are undoable where possible.
- Pure logic (parsing, calculation, file formats) lives in separate modules covered by
node --test. Tests run with only the globals gpui-shell provides, and neither tests norcheckmay touch the user's real data.
- Use only the built-in modules listed in
AGENTS.md(gpui-kit,gpui-base,gpui-component,gpui-fps) and relative modules: no npm packages, no DOM or Web APIs. gpui-kit.d.tsfromgpui-shell typesis the API reference; do not commit it.gpui-shell.jsonasks for the narrowest grants (fs,network,clipboard,process), and the app README explains each one.
- Each application lives in
apps/<kebab-name>/and runs directly withgpui-shell run -d. Itsidiscom.huacnlee.<name>and stays stable. - Each application has a
README.md: what it is, a Reference section crediting the original design or software with a link, how to run it, features and shortcuts, permissions, differences from the original and known limits. gpui-shell check -d apps/<name>and the application's tests pass before committing; behavioural changes are also checked in a running window.
- Build from zero to done in one session where possible, note the start time, and keep the transcript.
- When done, run
scripts/session-stats.pyand add the results to the tables above (wall, active, prompts, tokens, model), with anything unusual in the notes (interruptions, several sessions, manual edits).
# Claude Code: ~/.claude/projects/<escaped path>/<session>.jsonl
# subagents: ~/.claude/projects/<escaped path>/<session>/subagents/agent-*.jsonl
python3 scripts/session-stats.py ~/.claude/projects/-Users-me-work-app/<session>.jsonl
# Codex: ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl
python3 scripts/session-stats.py ~/.codex/sessions/2026/10/13/rollout-*.jsonl
# Sum several sessions, or cut out a time range
python3 scripts/session-stats.py a.jsonl b.jsonl --from 2026-10-13T06:00:00Z --to 2026-10-13T08:00:00Z- Claude Code: per-call
usageis summed after de-duplicating by messageid(a streamed message is written on several lines). - Codex: the cumulative usage of the last
token_countevent;cached_input_tokenscounts as cache reads, the rest of the input as uncached input, andreasoning_output_tokensis already part of the output. - Prompts are messages written by a person (including messages that only contain a screenshot), not tool results or injected system content. In Claude Code that includes messages sent while the agent was working (queued commands), and excludes hook feedback, interruption notices, the summary that continues a compacted session, and images read back by tools. A
/goalrequest is not a user message in the transcript; add it by hand.
- Code: the code in this repository is released under the MIT License.
- Designs and features: the visual design, interactions and product features of each application belong to the authors of the original design or software it references (see each app's Reference section). These applications exist only to evaluate gpui-shell and may not be used commercially; obtain the original author's permission or replace the design with your own first.
- All sample data is fictional. Third-party names and trademarks belong to their owners.