28c974fe1d
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.
33 lines
1.6 KiB
Markdown
33 lines
1.6 KiB
Markdown
# 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 0–3 + 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.
|