codejunkie99 / keel
git clone https://github.com/codejunkie99/keel.git
Local-first macOS coding workspace with local Laya and optional Jev decision selection
+1
stars, 24h · #9,322
+~7
stars, 7 days · #9,970
+335
stars, 30 days · #1,548
337
★ total · +2% this week
45
forks · 3 open issues
Star history (as recorded here)
LanguageRust
LicenseMIT
Created2026-09-22 (29d ago)
Last push26d ago
Watchers0
OwnerUser
Links
README excerpt
A local-first macOS coding workspace. Keel runs the coding agents you already use. A local Laya selector or an optional hosted Jev selector chooses a route. The host checks each choice before Keel applies it. Getting started · Build from source · Architecture · Roadmap · All documentation --- Keel 0.2.0 puts the editor workspace, provider connections, task routing, and decision records into one Rust/GPUI app. It uses an Avid-derived interface. ## features **Workspace** - Sessions, a composer, a transcript, a terminal, a changes view, and settings in one native window. - **Agent graph (new).** Press ⇧⌘G to see each active session as an agent node, its subagents as child nodes, and the files it reads or writes as shared context nodes. Select a node to steer or stop its agent. Double-click an agent to open its session. - Image attachments and macOS Dictation in the composer. - A git history pane with a commit lane graph beside the changes view. - Crash recovery: an append-only run journal replays live streams and marks interrupted runs. **Coding agents** - Claude Code, Codex, Cursor, Grok, Hermes, and pi through the Agent Client Protocol (ACP). - An embedded DeepSeek agent loop that runs in process, with host-enforced tool focus. - Each provider keeps its own authentication, model configuration, and tool loop. - Subagent spawns show as `Task` calls, including Grok's `spawn_subagent`. - Installed Codex Computer Use MCP tools reach compatible ACP sessions. **Decisions** - Laya (local, Core ML) or Jev (hosted, opt-in) chooses an eligible route for a **fresh, unpinned task**, or abstains. - The host validates every choice. A rejected, stale, or expired choice falls back to the ordinary route. - Each decision leaves a bounded receipt in the transcript: candidates, result, validation, fallback, and observed outcome. - **Decision export (new).** `keel decisions export` writes one replay case per receipt as JSONL. - **Decision report (new).** `keel decisions report` prints counts by backend, stage, and validation, plus fallback and confidence figures. **Operations** - `keel headless` runs the engine without a UI. `keel daemon install` runs it as a background service. - `keel status` and `keel laya status` show the workspace, the saved mode, and the model state. - One engine owns one data directory. A second engine stops with a clear error. Pinned routes and live or resumed sessions keep their existing route. External ACP agents keep their own internal tool loops. ## choose a decision mode | Mode | Runs where | Requires | What happens | | --- | --- | --- | --- | | Laya — default | Locally through Core ML | Worker and pinned checkpoint | Selects from host-prepared candidates, or abstains. | | Jev — opt-in | Hosted by TypeSafe | Existing protected local credential | Sends a bounded decision request directly to TypeSafe. | | Normal | No selector call | Your coding provider setup | Uses the ordinary harness route. | Exactly one backend runs per decision.