Skip to content

mAIndmeld 0.5.0: the runner

Choose a tag to compare

@dev-dull dev-dull released this 25 Sep 00:53
· 26 commits to main since this release

Added

  • Tokens may carry an expiry and a room scope; the server mints one per
    harness launch, refuses it outside its room, revokes it when the launch
    or the room ends, and sweeps expired records (#29, first step of #36).
  • Harness launches (#30): POST /api/rooms/:code/launches and
    room_invite kind: "harness" ask a runner to start a harness into a
    room; runners subscribe to GET /api/runner/events, claim launches for
    a room-scoped token, and report how they ended; the room narrates
    requested, started, joined, exited, failed, timed out, cancelled; the
    scheduler times out launches that never join and cancels them when the
    room closes; GET /api/runners and the health endpoint list runners.
  • The runner (#31): maindmeld runner --config runner.json subscribes to
    a server, claims launches for the harnesses it lists, fills a prompt
    template, starts the command with a room-scoped token in its
    environment, caps its log locally, kills it on cancel or timeout, and
    reaps leftovers on restart. Commands come only from the runner's file.
  • Harness templates (#32): templates/harness/ holds MCP configurations,
    a prompt template, and runner.json entries for Claude Code, OpenCode,
    Gemini CLI, Codex, Hermes, and Pi, with a table of which are verified;
    Claude Code is, from a real launch. Placeholders {prompt} and
    {templates}; a null in a harness's env removes a variable.
  • Room page (#33): an Invite box lists the harnesses online runners offer
    and launches one; launch states show under the participants and update
    live.
  • Runner packaging (#34): Dockerfile.runner builds maindmeld-runner
    with Claude Code and OpenCode preinstalled, published by CI beside the
    server image; compose.yaml gains a runner profile; the Kubernetes
    base deploys a runner with its own ConfigMap and Secret. Unprivileged,
    no Docker socket; the socket is an opt-in for the runner only.
  • Docs (#35): the runner in DESIGN.md (scope, section 7.4, decision 16),
    OPERATOR.md (setup, config, lifecycle, troubleshooting), README, and
    the Kubernetes README.

Fixed

  • A model participant that gets a 413, or a 400 naming a length or token
    limit, now halves its transcript window and retries at once instead of
    counting a failure toward a ten-minute pause; the window creeps back by
    one message per reply. Profiles take max_prompt_chars; health shows the
    effective window; single messages over 4,000 characters are clipped in
    the model's view (#28).

Images:

  • ghcr.io/dev-dull/maindmeld:0.5.0@sha256:74c6dcc85f2340f887fe4de0dcae94bd80e01a502a7d29b87ca0a909cd8b148f
  • ghcr.io/dev-dull/maindmeld-runner:0.5.0@sha256:f5eb60fe8380843e23132a11f65ffd375c958690bf941ba7af810206f260ffa6