{"id":49091609,"url":"https://github.com/paul-bouzian/skein","last_synced_at":"2026-04-28T02:04:55.856Z","repository":{"id":350113893,"uuid":"1199617649","full_name":"paul-bouzian/Skein","owner":"paul-bouzian","description":"Loom is a local-first macOS desktop app for Codex with native review, plans, approvals, and Git workflows","archived":false,"fork":false,"pushed_at":"2026-04-13T16:52:40.000Z","size":8297,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-13T17:29:20.528Z","etag":null,"topics":["codex","macos","react","rust","tauri"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/paul-bouzian.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-02T14:29:12.000Z","updated_at":"2026-04-13T16:52:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/paul-bouzian/Skein","commit_stats":null,"previous_names":["paul-bouzian/loom","paul-bouzian/skein"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/paul-bouzian/Skein","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paul-bouzian%2FSkein","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paul-bouzian%2FSkein/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paul-bouzian%2FSkein/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paul-bouzian%2FSkein/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paul-bouzian","download_url":"https://codeload.github.com/paul-bouzian/Skein/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paul-bouzian%2FSkein/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32061251,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T11:35:06.609Z","status":"ssl_error","status_checked_at":"2026-04-20T11:34:48.899Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["codex","macos","react","rust","tauri"],"created_at":"2026-04-20T19:00:35.868Z","updated_at":"2026-04-28T02:04:55.848Z","avatar_url":"https://github.com/paul-bouzian.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Skein\n\n[\u003cimg src=\"branding/skein-logo.png\" alt=\"Skein logo\" width=\"160\" /\u003e](branding/skein-logo.png)\n\n[![CI](https://github.com/paul-bouzian/Skein/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/paul-bouzian/Skein/actions/workflows/ci.yml)\n[![Latest Release](https://img.shields.io/github/v/release/paul-bouzian/Skein?display_name=tag)](https://github.com/paul-bouzian/Skein/releases)\n[![macOS](https://img.shields.io/badge/platform-macOS-black)](https://github.com/paul-bouzian/Skein/releases)\n[![Apple Silicon](https://img.shields.io/badge/chip-Apple%20Silicon-111111)](https://github.com/paul-bouzian/Skein/releases)\n\nSkein is a local-first macOS desktop app for working with Codex through a native, review-first interface.\n\nIt 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.\n\n## What Skein already does\n\n- Real Codex conversations backed by `codex app-server`\n- Project, environment, and thread management with the canonical model `Project -\u003e Environment -\u003e Thread`\n- Plan mode with approve / refine flows\n- Native `requestUserInput` questions and approval prompts\n- Subagent visibility and context window tracking\n- Git review pane with staged / unstaged / untracked changes, diffs, commit generation, fetch / pull / push\n- Release-based desktop updates through Electron + `electron-updater`\n\n## Product shape\n\nSkein is intentionally:\n\n- Codex-only, not a multi-provider shell\n- Local-first, not a hosted runtime product\n- macOS-first for V1\n- Review-first rather than terminal-first\n\nThe 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.\n\n## Current status\n\nSkein is already usable as a serious local Codex desktop workflow, but it is still an early public build.\n\nCurrent public focus:\n\n- polish the Codex conversation loop\n- improve review and Git ergonomics\n- harden release and update flows\n- keep the architecture stable while expanding desktop-native UX\n\n## Stack\n\n- Electron 41\n- React 19\n- TypeScript\n- Rust\n- Bun\n\nThe Electron main/preload layer owns shell concerns. The Rust backend remains the authority for Codex runtime, Git/worktrees, terminals, persistence, and validation.\n\n## Requirements\n\n- macOS\n- Apple Silicon for the current release builds\n- Bun\n- Rust toolchain\n- Xcode Command Line Tools\n- `codex` installed locally and available on `PATH`\n\n## Local development\n\n```bash\nbun install\nbun run electron:dev\n```\n\nUseful commands:\n\n- `bun run dev` starts the Vite frontend only\n- `bun run electron:dev` starts the Electron desktop app in development\n- `bun run build` builds the frontend bundle\n- `bun run electron:build` builds the packaged Electron release artifacts\n- `bun run electron:build:debug` builds the unpacked Electron debug app\n- `bun run verify` runs the full local validation suite\n- `bun run verify:electron` runs the Electron shell validation suite\n- `cargo test --manifest-path desktop-backend/Cargo.toml` runs Rust tests\n\n## Architecture\n\nSkein keeps a strict desktop boundary:\n\n- Rust owns privileged logic, runtime supervision, persistence, Git, worktrees, and release/update plumbing\n- React owns rendering, local UI state, and typed interaction with the backend\n- Electron main/preload stay narrow and typed over the Rust sidecar JSONL RPC\n\nImplementation note:\n\n- `desktop-backend` hosts the Rust library and the packaged `skein-backend` sidecar\n- the canonical desktop shell is Electron under `electron/*`\n\nKey product surfaces already implemented:\n\n- three-pane shell\n- thread tabs\n- conversation timeline\n- interactive plan / approval / user-input flows\n- subagent strip\n- review pane + diff column\n- update notice UI\n\n## Releases and updates\n\nSkein is distributed through GitHub Releases and uses Electron release metadata (`latest-mac.yml`) for in-app updates.\n\nExisting installs migrate forward during startup, and the first Electron cut publishes transition updater assets for pre-Electron installs.\n\nThe current release target is:\n\n- macOS\n- Apple Silicon\n\n## Why this exists\n\nMost Codex workflows are still either terminal-first or web-shell-first. Skein aims at a more native desktop loop:\n\n1. pick a repo or worktree\n2. talk to Codex in a real thread\n3. inspect plans, approvals, tool calls, and diffs without leaving the app\n4. stage, commit, and sync the repo directly from the review pane\n\n## Contributing\n\nIssues and pull requests are welcome. Before opening a PR, run:\n\n```bash\nbun run verify\ncargo test --manifest-path desktop-backend/Cargo.toml\n```\n\nIf you changed desktop shell, runtime, release, preload, updater, or packaging behavior, also run:\n\n```bash\nbun run verify:electron\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaul-bouzian%2Fskein","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaul-bouzian%2Fskein","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaul-bouzian%2Fskein/lists"}