Download

Two apps: Shedbell on the Mac that runs your agents (the shed), and Shedbell on the iPhone you carry. Both need Tailscale signed in to the same account.

Mac

Menu-bar app. Streams the window, injects your input, pushes to your phone, and connects your agents.

Download Shedbell 0.1.0
Requires
macOS 14 Sonoma or later, Apple silicon
Format
DMG, 6.8 MB, signed with Developer ID and notarized by Apple
SHA-256
83893f86649ba2c19c5f66fc81c5a66b9d25b829f70087bb424fabbb6d37946d

Homebrew cask and automatic updates are coming.

iPhone

Native app. Gets the push, shows the live window, sends your taps and typing, and returns your answer to the agent.

Coming soon to the App Store.

Requires
iOS 17 or later and the Tailscale app

Setup

About five minutes. The Mac app shows each step with a live status, so you can also just open it and follow along.

  1. Tailscale on both devices

    Install Tailscale on the Mac and on the iPhone and sign in to the same account. Shedbell uses the Mac's Tailscale identity to decide who may connect: only you.

  2. Install the Mac app

    Open the DMG and drag Shedbell into Applications before you connect agents; they store the app's path. Shedbell lives in the menu bar. The setup window opens on first launch (later: menu bar icon → Setup…).

  3. Allow Screen Recording and Accessibility

    Screen Recording streams the window to your phone; Accessibility brings it to the front and passes on your taps and typing. Click Allow… next to each, then enable Shedbell in System Settings. One grant each, remembered across updates.

  4. Pair the iPhone

    Click Pair iPhone… on the Mac, open Shedbell on the phone, and scan the QR code (the Camera app works too). The code holds only the Mac's tailnet address and name; the phone must be signed in to the same Tailscale account to connect.

  5. Connect agents

    Click Connect next to Claude Code or Codex. T3 Code picks up both. For anything else, see the manual setup below.

  6. Ring it once

    From a terminal on the Mac:

    /Applications/Shedbell.app/Contents/Helpers/shedbell request "Hello from the shed"

    Your phone should ring within a few seconds. Tap the notification, look around, tap Done.

Manual agent setup

The MCP server is /Applications/Shedbell.app/Contents/Helpers/shedbell mcp (stdio). It exposes three tools: request_human, wait_for_human, and cancel_human_request. The optional SHEDBELL_AGENT environment variable labels requests on your phone.

Claude Code

claude mcp add shedbell --scope user --env "SHEDBELL_AGENT=Claude Code" -- \
  /Applications/Shedbell.app/Contents/Helpers/shedbell mcp

Codex

Add to ~/.codex/config.toml. The timeout must exceed the longest wait (600 s).

[mcp_servers.shedbell]
command = "/Applications/Shedbell.app/Contents/Helpers/shedbell"
args = ["mcp"]
tool_timeout_sec = 660

[mcp_servers.shedbell.env]
SHEDBELL_AGENT = "Codex"

Other MCP clients

Most clients accept this JSON shape:

{
  "mcpServers": {
    "shedbell": {
      "command": "/Applications/Shedbell.app/Contents/Helpers/shedbell",
      "args": ["mcp"],
      "env": { "SHEDBELL_AGENT": "My agent" }
    }
  }
}

What the agent sees

request_human({reason, app?, title?, ask?, wait_seconds?}) creates a request, pushes to your phone, and waits (default 300 s, at most 600 s). reason is one line for you, like “GitHub login needed in Chrome”. app and title pick the window; without them Shedbell uses the window that appeared most recently, then the frontmost one. Set ask only when the flow will show a code the agent has to type back, and say what to do if none appears. The result is {id, status, note, answer}; if it is still pending after the wait, the agent calls wait_for_human.

Good to know