How codejunkie99/keel works
Keel is a local-first macOS coding workspace. Users configure providers and a decision mode, compose a task, and run it in a session; for eligible fresh, unpinned tasks, host-prepared routes may be selected by local Laya or optional hosted Jev, then checked by Keel before the chosen coding harness executes. Normal mode skips selection, and external ACP agents retain their own tool loops. The app also exposes workspace, terminal, settings, and session features. The README documents sync and decision-record capabilities; sampled excerpts do not establish all their runtime wiring.
Main entry points: src/lib.rs Engine · jev_routing.rs Route selection · runtime.rs Tool runtime · src/lib.rs Workspace UI
Components 22
Workspace app
- Keel app
apps/keel/src/main.rs - Workspace UI
crates/ui/src/lib.rs - Engine
crates/engine/src/lib.rs
Task routing
- Decision mode
crates/engine/src/decision_mode.rs - Route selection
crates/engine/src/jev_routing.rs - Harness registry
crates/engine/src/registry.rs - Local Laya
crates/laya-local/src/lib.rs - Laya worker
crates/laya-local/worker.py - Hosted Jev
crates/jev-core/src/lib.rs
Agent execution
- ACP harnesses
crates/harness/src/lib.rs - Embedded agent loop
crates/dsh/agent-loop/src/agent.rs - Tool runtime
crates/dsh/tools/src/runtime.rs - Filesystem tools
crates/dsh/fs/src/tools.rs - Shell tools
crates/dsh/shell/src/tool.rs
Workspace services
- RPC transport
crates/rpc/src/server.rs - Workspace host
crates/engine/src/workspace_host.rs - Terminal service
crates/engine/src/terminals.rs
Sessions and sync
- Event sessions
crates/dsh/session/src/session.rs - Session persistence
crates/dsh/session-persistence-jsonl/src/lib.rs - Chat sync
crates/sync/src/chat_client.rs
Other components
- User
- Coding provider
Connections 22
- User → Workspace UI: uses
- Workspace UI → Engine: requests tasks
- Keel app → Engine: starts
- Engine → Decision mode: checks mode
- Engine → Route selection: routes eligible tasks
- Route selection → Harness registry: prepares candidates
- Route selection → Local Laya: requests choice
- Local Laya → Laya worker: uses worker
- Route selection → Hosted Jev: requests choice
- Route selection → Engine: returns decision
- Engine → Harness registry: checks route
- Engine → ACP harnesses: dispatches task
- Engine → Embedded agent loop: runs embedded tasks
- Embedded agent loop → Tool runtime: dispatches tools
- Tool runtime → Filesystem tools: invokes
- Tool runtime → Shell tools: invokes
- Engine → Event sessions: manages sessions
- Event sessions → Session persistence: persists events
- Engine → Chat sync: syncs chat
- Engine → RPC transport: serves requests
- Engine → Workspace host: hosts workspace
- Engine → Terminal service: manages terminals