https://github.com/paul-bouzian/skein
Loom is a local-first macOS desktop app for Codex with native review, plans, approvals, and Git workflows
https://github.com/paul-bouzian/skein
codex macos react rust tauri
Last synced: 2 months ago
JSON representation
Loom is a local-first macOS desktop app for Codex with native review, plans, approvals, and Git workflows
- Host: GitHub
- URL: https://github.com/paul-bouzian/skein
- Owner: paul-bouzian
- Created: 2026-04-02T14:29:12.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-04-13T16:52:40.000Z (3 months ago)
- Last Synced: 2026-04-13T17:29:20.528Z (3 months ago)
- Topics: codex, macos, react, rust, tauri
- Language: TypeScript
- Size: 7.91 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Agents: AGENTS.md
Awesome Lists containing this project
README
# Skein
[
](branding/skein-logo.png)
[](https://github.com/paul-bouzian/Skein/actions/workflows/ci.yml)
[](https://github.com/paul-bouzian/Skein/releases)
[](https://github.com/paul-bouzian/Skein/releases)
[](https://github.com/paul-bouzian/Skein/releases)
Skein is a local-first macOS desktop app for working with Codex through a native, review-first interface.
It talks directly to `codex app-server`, keeps Git and runtime state environment-scoped, and is designed around the workflow most coding agents actually need: prompt, inspect, iterate, review, commit.
## What Skein already does
- Real Codex conversations backed by `codex app-server`
- Project, environment, and thread management with the canonical model `Project -> Environment -> Thread`
- Plan mode with approve / refine flows
- Native `requestUserInput` questions and approval prompts
- Subagent visibility and context window tracking
- Git review pane with staged / unstaged / untracked changes, diffs, commit generation, fetch / pull / push
- Release-based desktop updates through Electron + `electron-updater`
## Product shape
Skein is intentionally:
- Codex-only, not a multi-provider shell
- Local-first, not a hosted runtime product
- macOS-first for V1
- Review-first rather than terminal-first
The local repository itself is the default environment for a project. Worktrees become additional environments under that project, while multiple threads can coexist inside the same environment.
## Current status
Skein is already usable as a serious local Codex desktop workflow, but it is still an early public build.
Current public focus:
- polish the Codex conversation loop
- improve review and Git ergonomics
- harden release and update flows
- keep the architecture stable while expanding desktop-native UX
## Stack
- Electron 41
- React 19
- TypeScript
- Rust
- Bun
The Electron main/preload layer owns shell concerns. The Rust backend remains the authority for Codex runtime, Git/worktrees, terminals, persistence, and validation.
## Requirements
- macOS
- Apple Silicon for the current release builds
- Bun
- Rust toolchain
- Xcode Command Line Tools
- `codex` installed locally and available on `PATH`
## Local development
```bash
bun install
bun run electron:dev
```
Useful commands:
- `bun run dev` starts the Vite frontend only
- `bun run electron:dev` starts the Electron desktop app in development
- `bun run build` builds the frontend bundle
- `bun run electron:build` builds the packaged Electron release artifacts
- `bun run electron:build:debug` builds the unpacked Electron debug app
- `bun run verify` runs the full local validation suite
- `bun run verify:electron` runs the Electron shell validation suite
- `cargo test --manifest-path desktop-backend/Cargo.toml` runs Rust tests
## Architecture
Skein keeps a strict desktop boundary:
- Rust owns privileged logic, runtime supervision, persistence, Git, worktrees, and release/update plumbing
- React owns rendering, local UI state, and typed interaction with the backend
- Electron main/preload stay narrow and typed over the Rust sidecar JSONL RPC
Implementation note:
- `desktop-backend` hosts the Rust library and the packaged `skein-backend` sidecar
- the canonical desktop shell is Electron under `electron/*`
Key product surfaces already implemented:
- three-pane shell
- thread tabs
- conversation timeline
- interactive plan / approval / user-input flows
- subagent strip
- review pane + diff column
- update notice UI
## Releases and updates
Skein is distributed through GitHub Releases and uses Electron release metadata (`latest-mac.yml`) for in-app updates.
Existing installs migrate forward during startup, and the first Electron cut publishes transition updater assets for pre-Electron installs.
The current release target is:
- macOS
- Apple Silicon
## Why this exists
Most Codex workflows are still either terminal-first or web-shell-first. Skein aims at a more native desktop loop:
1. pick a repo or worktree
2. talk to Codex in a real thread
3. inspect plans, approvals, tool calls, and diffs without leaving the app
4. stage, commit, and sync the repo directly from the review pane
## Contributing
Issues and pull requests are welcome. Before opening a PR, run:
```bash
bun run verify
cargo test --manifest-path desktop-backend/Cargo.toml
```
If you changed desktop shell, runtime, release, preload, updater, or packaging behavior, also run:
```bash
bun run verify:electron
```