Files
matrix-bridge/README.md
T
Keysat 28c974fe1d Mark Phase 3 (Spark Control) done; trim spec to live command contract
Shipped in Spark Control v0.21.0: status badge + Update/Restart/Stop-Start/Logs
tile. All three exit criteria confirmed. matrix-bridge needed no code change.

- AGENTS.md: Current state + ROADMAP Phase 3 -> DONE; Deploy switched scp -> git
  pull (Update button); D10 stamped; new Infra fact for the Spark->Gitea path and
  the load-bearing IdentitiesOnly ssh-config pin the Update button depends on.
- spark-control-integration.md: trimmed from dev spec to live contract (dropped
  sudo -iu fallback and dev-side scaffolding; folded in direct-as-modelo, the
  Gitea key gotcha, restart cadence, and the LAN-only HTTP API).
- README: dropped stale "pre-Phase 0" status; Setup reframed for a fresh install.

Deferred follow-up: badge reflects container liveness only, not Matrix
connectivity; HEALTHCHECK + {{.State.Health.Status}} is the matrix-bridge-side fix.
2026-06-15 23:19:30 -05:00

33 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# matrix-bridge
A single-user Matrix → Claude Code bridge. Send a message in a project's Matrix room and a
Claude Code session launches on the Mac in that project's repo, then surfaces to your phone
via Claude Code Remote Control. The point: make the *trigger* for a coding session portable
without moving execution off the Mac.
Runs as a small **matrix-nio** bot in a Docker container on a DGX Spark; a zsh wrapper on the
Mac (`scripts/launch-claude.sh`) is the only piece that knows the Mac's environment. Routing
is deterministic in v1 — the room you message in decides the repo (an explicit config map).
> Status: **live on the Spark — Phases 03 + headless "ask" mode shipped.** The bot runs in
> 11 project rooms + an all-projects room, and is managed from the Spark Control dashboard. See
> `AGENTS.md` → `## Current state` for details and `ROADMAP.md` for the phase plan.
## How it works (v1)
```
Matrix message in a project room
→ bot on the Spark maps room → repo
→ SSHes to the Mac, runs scripts/launch-claude.sh <repo_dir> <message>
→ wrapper cd's into the repo and launches `claude`
→ Remote Control notifies the phone; you drive the session there
```
## Setup
The bot is live; this is the shape of a fresh install: Matrix onboarding (Element + the existing
Synapse homeserver, a bot user), the Mac wrapper, passwordless SSH from the Spark to the Mac, and
the room→repo mapping. Copy `config.example.toml` to `config.toml` (gitignored) and fill in real
room IDs and repo paths. Deploy and day-2 ops (status / update / restart) run from the Spark
Control dashboard — see `docs/spark-control-integration.md` for the command contract.