ringmaster

The job platform: a durable job journal + wake-on-completion channel, and its MCP tool surface, extracted from clown into a standalone, forge-native Go module. It is upstream of both clown and troupe — troupe's messaging rides on the wake channel to notify sessions, and clown runs llama-server as a job over it.

What's here

  • jobwake/ — the substrate (public package code.linenisgreat.com/ringmaster/jobwake): the JSONL job journal, the lossy UDS-datagram nudge, session-key/channel resolution, the output spool and status probe, the wake monitor, presence, and GC. Durable at-least-once correctness from disk; sub-second liveness from a best-effort socket.
  • jobmcp/ — the RFC-0011 MCP tool surface: a hand-rolled JSON-RPC stdio server exposing the job_* job-control tools over jobwake, served as ringmaster mcp. (Messaging — chat + job_message — moved to troupe, which serves its own chat MCP.)
  • cmd/ringmaster/ — the job-control binary: producer verbs (start/progress/done/read/spool-path/wait/whoami), operator verbs (ls/status/tail/cancel), the per-session wake monitor, and the mcp server.

Messaging (chat, troupe send/read/list) lives in the separate troupe repo now; it builds on ringmaster's public jobwake primitives and rides this wake channel to notify sessions.

The module is pure-stdlib (no third-party Go dependencies). On-disk state lives under $XDG_STATE_HOME/ringmaster/jobs/ with the nudge socket under $XDG_RUNTIME_DIR/ringmaster/jobs/.

Consuming ringmaster (igloo go-pkgs)

ringmaster is published via igloo's flake-input-go_mod protocol (RFC 0001). It exposes packages.${system}.go-pkgs and go-pkgs-test. A consumer bridges it as a Go dependency via goFlakeInputs on buildGoApplication/mkGoEnv:

# flake input
ringmaster.url = "git+https://code.linenisgreat.com/ringmaster.git";

# in the gomod.nix bridge
goFlakeInputs = {
  "code.linenisgreat.com/ringmaster" = {
    src = inputs.ringmaster.packages.${system}.go-pkgs;
  };
};

nix supplies the source through the bridge, so the module path code.linenisgreat.com/ringmaster is never fetched over the network (no GitHub mirror; the forge is SSOT).

Build

nix build .#default        # ringmaster binary + manpages
nix flake check            # full gate: go tests + bats conformance lanes
just                       # == nix flake check (the pre-merge gate)

Normative specs

The wire contracts are specified in RFC-0009 (wakeup channel), RFC-0010 (output spool + status), RFC-0011 (MCP tools), and RFC-0015 (the ringmaster/troupe binary surface), currently in clown's docs/rfcs/.