Agent Bus banner
nooma-stack nooma-stack

Agent Bus

Development community

Description

Persistent Claude Code session daemon — expose an authenticated claude CLI over an SSH-tunnel-reachable HTTP endpoint

Installation

This entry records only its repository, not the path inside it, so there is no exact command to give. Open the source below and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

README

agent-bus

Persistent Claude Code session daemon — exposes a running, authenticated `claude` CLI as a local HTTP endpoint so remote clients (other agents, automation scripts, IDE plugins on other machines) can drive it through an SSH tunnel without re-authing each call.

What it is

  • Small FastAPI daemon, one Python file (~200 lines).
  • Token-authenticated — first launch generates a 256-bit bearer token at ~/.agent-bus/token.
  • Loopback-bound — listens on 127.0.0.1:18900. Access beyond the host is expected to go over SSH tunnel, not open network exposure.
  • Keychain-inheriting — must be launched from a GUI-authenticated session (or a LaunchAgent gated on Aqua session type). That's how it gets access to Claude Code's OAuth token.
  • Session-preserving — routes each prompt to claude -p --session-id --output-format json, so multiple calls with the same session_id share conversation context.

What it isn't

  • Not a multi-user server (v1 is for a single operator's Claude Code).
  • Not a proxy for API-key-based billing (it uses the Claude subscription the CLI is logged into).
  • Not yet a streaming interface — v1 is synchronous request/response.

Install (macOS)

git clone https://github.com/nooma-stack/agent-bus.git ~/agent-bus
cd ~/agent-bus
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt

Run (manual, foreground)

From a **Mac Studio / Mac mini Terminal window on the console**, not over SSH — the daemon needs keychain access:

cd ~/agent-bus
.venv/bin/python daemon.py

On first start the daemon writes a bearer token to `~/.agent-bus/token` (mode 0600). Output will include the path.

Run (LaunchAgent)

For always-on use, install the LaunchAgent template:

mkdir -p ~/Library/LaunchAgents
sed -e "s|PLACEHOLDER_HOME|$HOME|g" \
    -e "s|PLACEHOLDER_PYTHON|$HOME/agent-bus/.venv/bin/python|g" \
    com.nooma.agent-bus.plist.template \
  > ~/Library/LaunchAgents/com.nooma.age