AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
Shed connects your phone to the Claude Code, Codex, Gemini, OpenCode and Pi sessions on your Mac. Send a message from anywhere; it runs in a real Terminal window you can watch and approve. Powered by
Developer toolsJavaScript · HTMLGitHub @IAmUnboundedOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Message the coding agents on your Mac from your phone. Powered by Laya.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Powered by Laya.
▶ Watch the 80-second tour · Download the video (MP4)
A local, internet-accessible task plane for desktop coding agents. It shows sessions that are currently open in Codex, Claude Code, Gemini, Pi, and OpenCode, refreshes their transcripts, and lets you continue them from a browser. You can also start a completely new coding session from a phone when no desktop session exists.Read the full README ↗Powered by Laya. MIT licensed.
Website: https://shed-sigma.vercel.app
▶ Watch the 80-second tour · Download the video (MP4)
A local, internet-accessible task plane for desktop coding agents. It shows sessions that are currently open in Codex, Claude Code, Gemini, Pi, and OpenCode, refreshes their transcripts, and lets you continue them from a browser. You can also start a completely new coding session from a phone when no desktop session exists.
curl -fsSL https://shed-sigma.vercel.app/install.sh | sh
macOS only. The installer clones Shed into ~/.shed/app and installs Node and cloudflared with Homebrew if they are missing. It then adds two launch agents (dev.shed.server, dev.shed.tunnel) that start at login, and opens Shed in your browser. Run the same line again to update. To remove Shed:
curl -fsSL https://shed-sigma.vercel.app/install.sh | sh -s -- --uninstall
Options (environment variables): SHED_HOME (default ~/.shed), SHED_PORT (default 4378), SHED_REF (git branch, default main).
The server starts automatically when this Mac signs in. Open http://localhost:4378 on the Mac once and choose Set a password for the first time. From any Wi-Fi or cellular network, use the HTTPS address shown under Settings → Phone access and sign in with that password.
The Mac must stay awake and connected to the internet. The Cloudflare Quick Tunnel URL can change when the tunnel restarts. Its current value is stored in .jev-data/remote-url. A named Cloudflare Tunnel is needed for a permanent hostname.
To run it manually:
npm start
Routing uses the open-source Laya decision model through the @receptron/laya ONNX runtime. It runs on this Mac and requires no TypeSafe account or API key. The first launch downloads about 1.7 GB of model files to ~/.cache/receptron-laya; later launches reuse the cache.
For a new prompt, Laya chooses a healthy installed harness and then a model from that harness's enabled roster.
Follow-ups always stay in the existing session's harness. Laya chooses only a model from that harness's enabled roster, preferring the current model and keeping it as the fallback when unsure. Open Terminal sessions and queued Codex sessions keep their current model because those delivery paths cannot apply a per-message model choice. If the current harness is unavailable, Shed reports the problem instead of automatically switching. You can still explicitly choose Hand off to … to start a new session in another harness with the recent transcript (up to 16 messages, about 12k characters); this does not carry native context. The drawer previews the selected route and model without starting a task.
To move a conversation yourself, pick Hand off to … in the session drawer. The new harness starts a session in the same project with the topic, the last 16 messages (about 12,000 characters), the path to the complete earlier transcript so it can read anything else it needs, and the project's uncommitted git changes. If the new window never takes the message, Shed sends it back to the original session and tells you. A new window that stops at a startup question (trust this folder, install an update) is reported as waiting, and its task drawer has a Terminal tab for answering it.
Harness health is checked about once a minute by starting each CLI and inspecting its login or provider configuration. A harness that needs sign-in stays visible with its reason, but is excluded from automatic routing for new sessions. These checks do not send a model prompt or consume tokens. If Laya is still loading or its confidence is low, deterministic local matching and the configured fallback model keep the task plane usable.
Configure harness model IDs, descriptions, enabled state, and fallback models in Settings → Models by harness.
The command center's New session composer does not require an existing agent session. From a phone you can:
~/Shed Workspaces.The Live sessions section identifies conversations held open by running harness processes. Codex transcripts are linked to their owning process directly. OpenCode can also provide busy state through its local session API. The drawer refreshes every five seconds. Follow-ups to an open Codex session use codex queue so the task plane does not try to acquire a second writer for the same thread. A queued message stays marked QUEUED until Codex records the turn in that conversation. Queue acceptance alone does not mean the owning Codex process has started the turn; check the original conversation if it stays queued. Other harnesses accept follow-ups after their current turn finishes.
Claude Code and Codex tasks run in a visible Terminal window on the Mac, not in a hidden process, so you can walk up to the Mac and see the session, and a reply keeps going if Shed restarts.
Session already open in Terminal: the follow-up is typed into that tab. It runs with that session's own model and permissions, and Claude queues it if it is busy.
Session not open: a new Terminal window runs claude --resume with the selected model. A new Claude session opens a new window the same way.
Permissions: new windows use Claude's normal permissions, so Claude asks before editing files, running commands or using the web. Tick Skip permissions to start them with --dangerously-skip-permissions instead.
Terminal view: the session drawer's Terminal tab shows that terminal's screen, updated every 2 seconds. Its input box types into the terminal, for example 1 to approve a permission prompt.
Codex: a session not open anywhere resumes in a new window with codex resume <id> --no-alt-screen (so the Terminal view can read its output); a session open in the Codex desktop app still takes messages through codex queue. Skip permissions maps to --dangerously-bypass-approvals-and-sandbox.
Safety: Shed only types into a window while the agent is that window's foreground program, and checks again before pressing Return. If the agent has exited, the half-typed line is cleared instead of being run by the shell, and the follow-up resumes in a new window.
Tasks follow the session transcript and finish when Claude goes idle or Codex records the turn as complete. The first time the background service controls Terminal, macOS asks on the Mac for permission (System Settings → Privacy & Security → Automation). Set LAYA_HEADLESS_CLAUDE=1 or LAYA_HEADLESS_CODEX=1 to go back to headless claude -p or codex exec runs.
Anyone who can reach your agents can run code on your Mac, so Shed needs both your password and a device you approved.
SHED_LAN=1.X-Frame-Options: DENY, frame-ancestors 'none'), scripts only load from Shed itself, and no referrer is sent.The master token in .laya-token only works for requests made directly on the Mac, never through the tunnel. For a permanent address and an extra login in front of Shed, use a named Cloudflare Tunnel with Cloudflare Access.
Settings → Notifications (or the banner on a phone) turns on push notifications for that device: one when a task finishes or stops, and one when an agent starts waiting for your OK. Tapping a notification opens that task or session. Shed checks for both every 10 seconds, whether or not anyone has it open.
Notifications use Web Push through public/sw.js, signed with keys Shed creates on first run (.jev-data/push.json). They need the https link: on iPhone, add Shed to the Home Screen first (iOS 16.4 or later) and turn notifications on from there. If the Cloudflare quick-tunnel address changes, turn notifications on again from the new address.
Each session's Files tab lists the newest videos, images, audio, PDFs and documents in its project folder, with an inline preview and a Download button. Replies that mention one of those files get download buttons underneath. Files are only served from inside the session's project folder (symlinks included), never from hidden folders or node_modules, and only to a signed-in browser.
| Harness | Discover sessions | Start tasks | Resume sessions |
|---|---|---|---|
| Codex | ~/.codex/sessions | Installed codex CLI | codex exec resume |
| Claude Code | ~/.claude/projects | Installed claude CLI | claude --resume |
| Gemini | ~/.gemini/tmp/*/chats | Installed gemini CLI | gemini --resume |
| Pi | ~/.pi/agent/sessions | Installed pi CLI | pi --session |
| OpenCode | opencode session list --format json | Installed opencode CLI | opencode run --session |
An absent CLI leaves file-backed history visible but disables sending tasks to that harness. OpenCode is installed on this Mac. Gemini sessions remain scoped to their original project.
Task data and service logs remain under .jev-data for compatibility with the existing installation. The user LaunchAgents are currently named com.local.jev-task-plane and com.local.jev-task-plane-tunnel; the application itself no longer calls TypeSafe or stores its API key.
npm test
The integration test uses an isolated home directory and a fake Codex CLI. Unit tests cover Laya choice validation, model routing, live-process matching, and model-roster validation without loading the production model.