Model or dataset
openyak/openyak avatar
openyak/openyak

OpenYak: a local desktop workspace for Codex and Claude Code

One chat. Every agent. A universal interface for AI agents running on your computer.

690 stars61 forksTypeScriptApache-2.0

At a glance

What is it?
OpenYak puts Codex and Claude Code in one Electron window with a Rust and SQLite core, persistent file tabs and a shared browser. It is v2 alpha on main, and packaged installers are not finished.
Who is it for?
Adopt OpenYak if you already sign in to Codex or Claude Code and want transcripts, file tabs and a shared browser in one window instead of a terminal scrollback; the README's own warning is that this is v2 alpha on main. Skip it if you need a packaged installer, a validated Linux or Windows GUI, or a complete workflow-orchestration UI for runtime-reported subagents.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 26 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What OpenYak is for, and who it is not for

The terminal is a poor place to read a long agent answer next to the file it changed. OpenYak is a desktop GUI built around that gap: a chat pane, a file workbench with persistent tabs, and a browser the agent and the user can both drive. The README frames the goal as keeping "the conversation, inspect the files, and work alongside your agent in a shared browser."

The intended user already has a Codex or Claude Code sign-in and is comfortable running a build from source. OpenYak does not supply model access. Model availability, usage limits and provider features depend on the account and the installed runtime versions, so the app is a front end, not a subscription.

Anyone who wants a double-clickable download should wait. The README states plainly that packaged installers, broader agent support, and Linux/Windows GUI validation are still work in progress. The current branch is v2 alpha, and the original v1 lives on the legacy/v1 branch and in the v1.5.0 release.

How the Electron app and the Rust core divide the work

The repository splits into two code trees. app/ holds the Electron and React layer: chat, the file workbench, native workers and host integrations. core/ is Rust with SQLite, and it owns projects, tasks, transcripts and normalized runtime events. The frontend subscribes to that normalized event stream rather than parsing provider-specific output itself.

That boundary shows up in how artifacts are handled. The README says the runtime boundary normalizes supported structured artifact and file outputs, so the frontend does not have to guess tool names or convert arbitrary code blocks into artifacts. Ordinary file references travel a separate file-opening path. If you have written a wrapper that scrapes agent stdout, this is the part worth copying.

On the provider side, Codex runs through the native App Server over stdio, and Claude Code is driven by the Claude Agent SDK against its CLI. ACP is kept as an explicit compatibility option rather than the default. Switching providers inside a task replays conversation context; OpenYak does not claim to restore a provider's private internal state.

Install from source and run a first task

OpenYak is installed from the repository, not from an installer. The README lists Node 26, Rust 1.90 and an existing Codex or Claude Code sign-in as prerequisites, with mise install providing the pinned toolchains. Google Chrome is needed for the shared browser.

bash
git clone https://github.com/openyak/openyak.git
cd openyak
npm install
npm run dev

The dev script first builds the Rust core, then launches Electron with hot reload. Expect a compile of core/Cargo.toml before the window appears; that step is why the first run is slow.

If you want to experiment without touching your real transcripts, the README suggests pointing the app at a new, empty directory with OPENYAK_DATA_DIR, which can be set on the same command line as the dev script. Two more environment variables matter. OPENYAK_CODEX_BIN and OPENYAK_CLAUDE_BIN select compatible local CLI binaries when the bundled ones are not what you want. To opt into the ACP transport instead of the native runtimes, set OPENYAK_AGENT_TRANSPORT=acp. The README warns that native host integrations such as the shared browser are not automatically available on that path, so treat ACP as a fallback rather than an equal mode.

Before sending real work through it, the repository's check target runs the Rust tests, the app tests and the app type checks:

bash
npm run check

The shared browser is a remote view, not an embedded Chrome

The browser panel uses Playwright MCP with a dedicated Chrome session. Agent and user operate the same page. Taking control blocks new agent browser actions and waits for in-flight work; resuming returns browser access without sending another chat prompt. That last detail is the interesting design choice, because it means control handoff is not a conversational turn.

The README is explicit about what the panel is not. It renders lossless HiDPI frames and describes itself as a shared remote view, not an embedded native browser, and it makes no promise of 60 fps. Anyone expecting the responsiveness of a local browser tab will be disappointed.

Scope is narrower than the topic list suggests. The README states that external computer-use tools and native desktop control are separate capabilities, and that the pictured flow was exercised through Codex in the real GUI. Claude integration exists, but the browser screenshots validate Codex, not a Claude browser acceptance run.

Where OpenYak breaks down

The alpha boundaries are the honest part of the README, and they are long. Packaged installers do not exist yet. Linux and Windows GUI validation is unfinished, so the practical target is macOS. Runtime-reported subagents are displayed but are not a complete workflow-orchestration UI, which means there is no dependency graph, no retry policy and no scheduling layer between you and the agents.

Local storage is also easy to misread. Projects, tasks and transcripts live locally, but the README says this does not mean offline inference: provider requests and browser navigation can use the network. A local-first label on this project describes where the conversation is kept, not where the tokens are computed.

There is a parity caveat too. OpenYak integrates supported runtime interfaces and does not reproduce every private feature of Codex Desktop or Claude Desktop, and private Desktop-only tools and full computer-use parity are not guaranteed. If your workflow depends on a Desktop-only capability, check that it exists here before migrating.

How OpenYak differs from running the agent CLIs directly

The obvious alternative is the thing OpenYak wraps: run codex or claude in a terminal and read the output there. That path has no Rust build step, no Electron process, and no Chrome dependency, and it works on any platform where the CLI runs. It also gives you the provider's full private feature set, which OpenYak explicitly does not promise to match.

The difference is what persists. A terminal session is scrollback; OpenYak stores projects, tasks and transcripts in SQLite through core/, keeps file tabs open across responses, and normalizes runtime events into one stream so a provider switch inside a task replays context instead of starting over. The shared browser is the second difference: the agent and the user act on the same page with an explicit control handoff, which a CLI cannot offer.

If you only need one agent, one short task and no file inspection, the CLI is the smaller tool and the right one. OpenYak earns its build cost when you are switching between Codex and Claude Code in the same piece of work and want the conversation to survive the switch.

Licence, maintenance and what an upgrade costs you

OpenYak is Apache-2.0, declared in package.json and in the LICENSE file at the repository root. That permits commercial use and modification with the usual notice and patent terms; it is not a copyleft licence, so it does not force you to publish changes. This is a description of the licence text, not legal advice, and if you redistribute a modified build you should read the terms yourself.

The repository is not archived, and the last push was on 2026-09-05. Releases are moving quickly: v1.5.0-rc.3 and v1.5.0-rc.2 both landed on 2026-08-05, and v1.4.0 on 2026-07-24, while main carries version 2.0.0-alpha.0. The v1 line is preserved on legacy/v1, so upgrading to v2 is a branch change rather than an in-place patch.

Upgrade cost is dominated by the toolchain pins rather than the app code. Node 26 and Rust 1.90 are required, mise.toml holds the pinned versions, and npm run dev rebuilds the Rust core every time. Agent dependencies are pinned inside the app, while authentication stays with you. Budget for a core rebuild and a check run on each pull, not for a migration script.

Editorial conclusion

Adopt OpenYak if you already sign in to Codex or Claude Code and want transcripts, file tabs and a shared browser in one window instead of a terminal scrollback; the README's own warning is that this is v2 alpha on main. Skip it if you need a packaged installer, a validated Linux or Windows GUI, or a complete workflow-orchestration UI for runtime-reported subagents. Verify first that Node 26 and Rust 1.90 are installed, that you have a Codex or Claude Code sign-in, and that you can run npm run check against your checkout before trusting it with real work.

Frequently asked questions

Is OpenYak a replacement for Codex Desktop or Claude Desktop?

No. The README states that OpenYak integrates supported runtime interfaces and does not reproduce every private feature of Codex Desktop or Claude Desktop, and that private Desktop-only tools and full computer-use parity are not guaranteed.

Does OpenYak need an internet connection?

Yes for model calls. Conversation data is stored locally in SQLite, but the README notes that this does not mean offline inference, because provider requests and browser navigation can use the network.

How do I run OpenYak without touching my existing transcripts?

The README suggests setting OPENYAK_DATA_DIR to a new, empty directory for an isolated test instance.

Official sources

  1. License: Apache-2.0
  2. openyak/openyak on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/openyak-openyak.svg)](https://hysenlabs.com/projects/openyak-openyak)