Public beta · v2.0.0-beta.20 2026-09-25

Run the agent.
Watch the work.

The desktop app for Gajae Code. Follow the work as it lands, approve the commands that matter, and read each diff before you reply, all on your own machine.

Apple Silicon · macOS 13+ · Notarized by Apple

A real session recorded in v2.0.0-beta.20, sped up where it waits. Only the pointer is redrawn.
The web UI at phone width, in a real session recorded in v2.0.0-beta.20.
  • Notarized by AppleSigned with a Developer ID
  • MIT LicenseOpen source on GitHub
  • Runs on your machineLoopback by default, fails closed
  • Gajae Code SDK 0.17.6Bundled, in an isolated worker

One real session

Every step of the turn, in plain view.

Every clip comes from the shipping app, following one real session in a small Python project: a --json flag, a test run, a review and a follow-up.

01Live turn

Watch the work happen.

A turn’s reads, searches, edits and commands fold into one work block. While it runs, the row says what the agent is doing right now. When it finishes, one line sums up the turn.

Worked for 28s5 files read1 search1 command3 edits

The block never unfolds by itself, not even on failure. Its row carries the failed count.

The live work block at 1:1: “Thinking… · Reading tidepool/data/tides.csv:1-3”, then Read ×4, a Search and a Read row.

02Permissions

Commands wait for you.

Put a project in Ask mode and every shell command stops the turn on a card. Allow it once, always allow it in this project, or deny it. The turn resumes where it paused.

Permission requiredTool: bash

A card answered in one window closes in every other.

The permission card: Permission required, Tool: bash, and the start of the python3 -m unittest command.
Its buttons: Deny, Always deny bash, Always allow bash and Allow.

03Review

Read the diff. Reply in the composer.

Every edit carries its diff inline in the conversation, with the line counts on its row. Read what changed, then write the next instruction in the composer. The agent takes it as the next turn of the same session.

edit / cli.py+17 −0

The inline diff for edit / cli.py: the import lines, with import json added.

04Session controls

Match the model to the task.

Pick the provider, the model and the reasoning depth from one searchable picker, without leaving the session. A model chosen for a session stays with it. Models, presets and credentials come from your own Gajae Code install.

ProviderConversation modelReasoning

The model picker: Provider, Conversation model and Reasoning columns, with Anthropic Opus 5.5 checked.

05Isolation

Isolated by default.

In a git repository, each new session runs in its own managed worktree, so your checkout stays as you left it. The agent sidebar reports the changes, the directory and the branch. Going back to the shared checkout is one click, set per project.

Run locationProject · New worktree

A run that would rewrite git state outside its own worktree asks first.

The agent sidebar’s Environment panel: Changes 4, the job-session worktree directory and its job branch.

06Sessions

Every session, at a glance.

Running, waiting for your input, finished or failed and not viewed yet: each session shows its state. The Work section gathers what needs a look across every project, and the model names each session from its first message.

RunningWaiting for your input

The sidebar: the tidepool session running, and the Work section with pixel-press waiting for input above it.

Web UI · self-hosted

Approve from your phone.

The web UI works down to phone width, on the same live run. Tap Allow on the phone and the card closes in the desktop browser by itself; the turn carries on.

Not out of the box: the server listens on loopback and fails closed. A phone reaches it only over a network path you set up to a server you run, such as a tailnet, a VPN or an SSH tunnel. Web mode has one owner and no sign-in, so that network is the boundary. Self-host guide

The sessions drawer at phone width, listing the demo projects and their sessions.

The film

One session, start to finish.

The same real session, cut together: picking a model, the live turn, the permission card, the diff, the reply and the phone. Silent, with on-screen titles.

Play the film

Around the run

The rest of the workbench.

Permission modes

Decide what waits for you, per project.

Every project keeps its own mode, set from the composer or Settings → Permissions. Always allow on a card adds that tool to the project’s list.

Permission mode

Ask Commands and destructive file changes wait for your approval.

Runs without asking
Reads, searches, and file writes and edits the runtime does not gate
Waits for approval
Commands (bash, eval), file deletes and moves — everything the runtime gates

Auto-approve edits File edits run without asking; commands still wait for approval.

Runs without asking
The above, plus every file mutation (edit, write, delete, move)
Waits for approval
Commands

Bypass Nothing asks. The agent runs any command in this project.

Runs without asking
Everything, as in the GJC CLI
Waits for approval
Nothing

Sessions

A state on every session.

The app’s sidebar: four workspaces, tidepool open with its running session, and the Work section listing a pixel-press session waiting for input above the running tidepool session.
  • Waiting for your input
  • Run failed, not viewed yet
  • Finished, not viewed yet
  • Running

The Work section lists what needs a look across every project.

Output density

Compact, Balanced or Detailed.

A folded work block in the app: Worked for 28s, 5 files read, 1 search, 1 command, 3 edits.

Balanced is the default. Compact and Balanced fold the work into one block; Detailed shows every card and streams the reasoning live.

Mid-turn

Stop, steer or queue.

Esc
Stops the run from anywhere in the window; while it runs, Send becomes Stop.
Steer the active turn
A message typed mid-turn goes into the running turn.
Queue another message
Or it waits until the run finishes. Enter queues.

Slash commands

The runtime’s own commands.

  • /fast
  • /effort
  • /context
  • /compact

They come from Gajae Code’s own command list, so the runtime handles them, not the app.

Notifications

Know when a run needs you.

  1. Approval neededa card is waiting on you
  2. Run endedthe turn finished
  3. Run unsuccessfulthe turn failed

macOS notifications from the desktop app, with an optional sound.

Languages

Ten UI languages.

  • English
  • Français
  • 한국어
  • 简体中文
  • 繁體中文
  • 日本語
  • Русский
  • Deutsch
  • Türkçe
  • Italiano

Local by default

Your machine is the workspace.

Server
Listens on loopback and rejects cross-origin callers.
App data
Kept on your disk, under ~/.gajae-app.
Transcripts
Stay in Gajae Code’s own session files.
Prompts
Go to the model provider you choose.

v2.0.0-beta.20 · 2026-09-25

Get Gajae Code App.

Versioned files from GitHub Releases, each with its own SHA-256 checksum.

Desktop app

Download the desktop app

macOS · Apple Silicon · macOS 13+

File
DMG · 227 MB
SHA-256
fd6584299843c81d0f5d436e3b6e5cdfba6daa9fe007e133bf4f806707cb7596

Signed with a Developer ID and notarized by Apple. First-launch instructions

Intel Mac and Windows builds are not available.

Web interface

Prefer the web interface?

Run the same app in your browser from a server you control, or from source. These are alternatives to the desktop app.

Linux server

x86_64 · glibc 2.35+ · Requires Node.js 22.22.2+ (22.x)

Reach it over an SSH tunnel
ssh -N -L 3001:127.0.0.1:3001 user@server

Source

Run the web interface locally from the repository.

Server installation guide

First launch

Opening the app for the first time.

Since v2.0.0-beta.7 the DMG is signed with a Developer ID and notarized by Apple, so macOS opens it like any other app. Verify the download anyway; the checksum is published beside it.

  1. Download the DMG and its SHA-256 file.

  2. Open the DMG and drag Gajae Code App to Applications.

  3. Open the app. Gatekeeper checks the notarization ticket and lets it run.

  4. Only a build older than beta.7 needs System Settings → Privacy & Security → Open Anyway.

Verify in Terminal
cd ~/Downloads
shasum -a 256 -c gajae-app-desktop-2.0.0-beta.20-macos-arm64.dmg.sha256
Apple’s Gatekeeper instructions

FAQ

Questions, answered.

Is it free?

Yes. Gajae Code App is open source under the MIT license. It does not include a model or subscription.

Where does it run?

On your machine: the desktop app on a Mac, or the web UI on a Linux server you control. Project files and execution state stay on the host. Prompts and context go to the model provider you pick.

What does it support?

Gajae Code. The app uses the models, presets, skills, and credentials configured in your Gajae Code installation, and you can sign in to providers from inside the app.

Do I need the desktop app?

No. You can run the web UI from source or use the Linux server archive. See the install guide.

Can I use it from my phone?

Through the web UI, yes, once your phone can reach the server over a trusted network path you set up, such as a tailnet, a VPN or an SSH tunnel. The server listens on loopback by default, so this is never open out of the box. There is no native mobile app.

Is it multi-user?

No. Web mode has one owner and no sign-in: whoever reaches the server is the owner, so the network is the boundary.

Is there a Windows or Intel Mac build?

No. The desktop app is built for Apple Silicon Macs only, and Windows is not planned. On Linux, use the server archive and the web UI.

The Gajae Code mascot: a pixel-art lobster in a straw hat with a green-eyed visor.

Signed. Notarized. Yours.

Run the agent. Watch the work. Keep everything on your machine.

Gajae Code App, the film