Skip to main content
Glama

RunBeacon

RunBeacon is a durable task lifecycle layer for AI agents. Codex starts one local, SSH, Slurm, Apple-signing, or GitHub publishing job, calls job_wait once, and resumes after a terminal event. Intermediate monitoring happens in the resident daemon, remote Runner, and single-task dashboard without repeated model turns.

Components

  • console-automation-mcp@3.0.0: lifecycle core, MCP server, CLI, credentials, GitHub publishing, policy, audit, and event subscriptions.

  • runbeacon-runner@3.0.0: signed Linux/macOS x64/arm64 Runner installer. The Go binary requires no remote Node.js and opens no network port.

  • remote-job-monitor@2.0.0: Codex plugin with MCP App, hooks, and the monitor-remote-jobs skill.

Node.js 22 and 24 are supported on Windows, Linux, and macOS coordinators. The remote Runner supports Linux and macOS.

Related MCP server: jakubs-mcp-tools

Durable flow

sequenceDiagram
  participant C as Codex
  participant D as RunBeacon daemon
  participant S as SSH
  participant R as Remote Runner
  participant P as Supervisor
  participant U as Dashboard

  C->>D: job_start(executionMode=auto)
  D->>S: fixed-host-key Runner RPC
  S->>R: submit(jobId, key, digest) via stdin
  R->>P: independent supervisor
  R-->>D: accepted
  C->>D: job_wait(jobId) once
  D->>R: watch(afterSequence)
  P-->>R: output and state events
  R-->>D: sequenced events
  D-->>U: job_watch(afterVersion)
  R-->>D: terminal state
  D-->>C: terminal result

The command body is sent through SSH stdin. It is not placed in the Runner argv, service definition, snapshot, audit log, or credential profile. A lost submit response is retried only with the same job ID, idempotency key, and command digest. Once the Runner may have accepted a task, RunBeacon never falls back to direct SSH.

Quick start

npm ci
npm run build
node dist/mcp/lifecycle-server.js

The npm commands are:

  • console-automation-mcp: lifecycle MCP server

  • remote-job-monitor: compatibility alias for the same MCP server

  • runbeacon: interactive jobs, events, approval, audit, policy, doctor, and loopback dashboard CLI

mcp-console and the old 40-tool interactive terminal surface moved to console-automation-mcp-legacy@2.0.x. They are not present in the 3.0 tarball.

Job modes

  • auto: prefer the Runner; use direct SSH only when probing fails before submission and durability is not required.

  • runner: require a durable Runner.

  • direct: execute through one SSH channel. This mode is not resumable and cannot verify remote process termination.

Set requireDurable: true when an uncertain disconnect is unacceptable. Snapshots expose backend, phase, connection state, durability, resumability, Runner version, reconnect count, and last remote event sequence.

Top-level states are queued, running, succeeded, failed, cancelled, timed_out, and lost. A daemon restart reattaches Runner tasks. Non-resumable active jobs become lost; RunBeacon never restarts them automatically.

Runner installation

Runner release assets contain SHA256 checksums, Sigstore bundles, provenance, and an SBOM. Linux installs a user systemd service. macOS installs an Aqua LaunchAgent and must be installed locally in the logged-in GUI session:

npx runbeacon-runner@3.0.0

macOS installation over SSH is rejected. This preserves the GUI user's Keychain context for Developer ID and Notary operations. Uninstall refuses to proceed while any Runner job is active.

Runner state defaults to 7 days and 64 MiB output per task under owner-only directories. Output policy is tail, full, or none.

MCP tools

RunBeacon retains credential, GitHub publishing, and lifecycle tools and adds:

  • job_watch: dashboard long poll by local snapshot version

  • runner_manage: Runner probe; signed installation is interactive CLI-only

  • policy_manage: inspect/update risk defaults, never approve jobs

  • event_subscription_manage: Codex, desktop, or HMAC HTTPS webhook subscriptions using environment references for URLs and secrets

  • audit_query: verified hash-chain audit events

Clients that advertise MCP Tasks can map a RunBeacon job ID directly to an experimental MCP Task and use tasks/get, tasks/result, tasks/list, or tasks/cancel. Clients without Tasks keep the same tools. The model-facing completion path remains job_start -> job_wait; the MCP App watches only the current job and pauses while hidden.

Adapters

  • generic: RE2 progress patterns and bounded RUNBEACON_EVENT <JSON> output

  • training: structured epoch, step, loss, ETA, checkpoint, and GPU fields

  • slurm: sbatch --parsable, squeue/sacct status recovery, and verified scancel

  • apple-signing: macOS Aqua Runner preflight for Developer ID identity, untimestamped/timestamped signing, and a Keychain Notary profile

Policy and audit

Privileged, private-key, release, and destructive commands enter awaiting_approval. Approval is bound to the job, command digest, target profile, and risk class for five minutes. The dashboard receives a one-use capability through App-private MCP metadata; it is excluded from model content, snapshots, persistence, and audit. Approval is available only through a user action in the dashboard or interactive CLI:

runbeacon approve <jobId>
runbeacon reject <jobId>

The MCP tool catalog does not expose approval. Audit JSONL files are owner-only and hash chained. They record policy, approval, Runner management, cancellation, publication, terminal state, and event delivery, but never command bodies or credentials.

Credentials and SSH security

Credential profiles store safe references only. SSH passwords and GitHub PATs are stored through the OS credential helper; private keys remain at referenced paths or in an SSH agent. Inline secrets are memory-only.

Pin hostKeySha256 and hostKeyAlgorithm. Existing profiles without an algorithm can be migrated only after an explicit pinned-fingerprint probe:

runbeacon runner migrate-host-key --profile <profileId>

The MCP equivalent is runner_manage(action="migrate-host-key", credentialProfile=..., confirm=true). A fixed algorithm fails closed and is never replaced after a mismatch. allowUnverifiedHostKey is an explicit insecure override and is never selected automatically.

Configuration migration

Use RUNBEACON_* variables. 3.x accepts corresponding RJM_* aliases with a deprecation warning; aliases are removed in 4.0. Runtime state defaults to the stable ~/.runbeacon directory. PLUGIN_DATA, CLAUDE_PLUGIN_DATA, and ~/.remote-job-monitor are one-time credential-profile migration sources and never override the canonical directory. Set RUNBEACON_DATA_DIR explicitly for an isolated deployment or test; an explicit override does not import home or plugin-host state.

See Migration to 3.0 and Security migration 2.0.

Stable release operators must configure the three dedicated GitHub runners in Self-hosted Acceptance before dispatching a three-machine rehearsal or post-Beta acceptance workflow.

Development

npm run format:check
npm run lint
npm run typecheck
npm run build
npm run test:all

cd runner
go test -race ./...

Release promotion is manual. Beta requires green main checks, zero open CodeQL High/Critical alerts, npm and Go vulnerability gates, Linux/macOS Runner tests, four signed assets, Developer ID/Notary validation, exact-workflow Sigstore bundles, provenance, and an SBOM. Stable promotes the tested npm versions only after the same commit has a public Beta for seven complete days and attested Linux training, Mac signing, and fresh Codex-task acceptance all pass.

M8ven Score

License

MIT

Available Tools

21 tools
audit_queryA
Read-onlyIdempotent

Query verified RunBeacon audit records. Audit entries contain policy and lifecycle metadata, never command bodies or credentials.

Inputs: jobId, limit, since, action.

credential_profile_clear_defaultA
Idempotent

Clear the default SSH or GitHub credential profile without deleting the profile or any OS-managed secret.

Inputs: kind (required).

credential_profile_deleteA
Destructive

Delete one RunBeacon credential reference profile. This does not delete keys from ssh-agent, private-key files, or credentials from Git Credential Manager.

Inputs: id (required).

credential_profile_listA
Read-onlyIdempotent

List safe credential reference profiles. Results never contain passwords, passphrases, private-key contents, or tokens.

Inputs: kind.

credential_profile_saveA
Idempotent

Create or update a passwordless credential reference profile. SSH profiles store only host, user, host-key verification, and an SSH-agent/private-key path. GitHub profiles reuse Git Credential Manager. Passwords, passphrases, private-key contents, and tokens are rejected and never persisted.

Inputs: id (required), kind (required), host, port, +9 more.

credential_profile_set_defaultA
Idempotent

Make an existing safe credential profile the default for its kind. SSH and GitHub defaults are independent. This changes only RunBeacon profile selection and does not alter OS-managed secrets.

Inputs: id (required).

event_subscription_manageB
Idempotent

List, save, or delete persistent Codex, desktop, and HMAC HTTPS webhook subscriptions. Webhook URLs and secrets use environment-variable references.

Inputs: action (required), id, kind, enabled, +2 more.

github_publish_startA
Destructive

Start a dashboard-tracked GitHub publish: optionally commit already-staged changes, push without force, then monitor GitHub Actions in the background. This never runs git add. Use job_wait once if the workflow should continue automatically after publishing.

Inputs: cwd (required), branch, remote, githubToken, +8 more.

github_token_deleteA
Destructive

Delete a GitHub PAT created through github_token_save from the configured Git credential helper and remove its RunBeacon profile reference. This cannot delete generic OAuth/login profiles.

Inputs: id (required).

github_token_saveA
Idempotent

Store a GitHub personal access token in the configured Git credential helper and create a safe RunBeacon profile reference. Prefer tokenEnvVar so the token never appears in conversation; use token only when the user explicitly provides it. The token is never written to RunBeacon profiles, jobs, dashboard state, or logs.

Inputs: id (required), username (required), host, token, +2 more.

job_cancelA
DestructiveIdempotent

Cancel a queued or running tracked job.

Inputs: jobId (required).

job_dashboardA
Read-onlyIdempotent

Render one live RunBeacon task. Pass jobId to reopen a known task; without it, the newest non-terminal task is selected. The UI long-polls job_watch, so updates do not create model turns or expose job history.

Inputs: jobId.

job_listA
Read-onlyIdempotent

List tracked job history with bounded output tails. Live dashboards use job_watch for their single focused task.

Inputs: limit, tailLines.

job_snapshotA
Read-onlyIdempotent

Read one tracked job and a bounded output tail. Use only for explicit status requests; prefer job_wait for completion.

Inputs: jobId (required), tailLines.

job_startA
Destructive

Start one tracked local or SSH command. Pass remote shell commands verbatim without adding escapes. For a RunBeacon prompt trace, reuse requestTraceId on every retry so the server returns the original job instead of executing twice. When the user requests the default SSH server, set useDefaultCredential=true and call this tool directly without listing profiles first.

Inputs: command (required), cwd, env, args, +16 more.

job_waitA
Read-onlyIdempotent

Wait inside the MCP server until a tracked job reaches a terminal state. This is event-driven and consumes no repeated model turns while waiting. Call it immediately as the next tool call after job_start, without intermediate commentary, profile listing, status checks, or extra planning.

Inputs: jobId (required), tailLines, timeoutMs.

job_watchA
Read-onlyIdempotent

Wait for one job version change. This long-poll endpoint is intended for the RunBeacon dashboard; models should use job_wait for terminal completion.

Inputs: jobId (required), afterVersion (required), tailLines, timeoutMs.

policy_manageA
DestructiveIdempotent

Read or update risk policy defaults. This tool cannot approve a job; approvals are available only to the local dashboard or interactive CLI.

Inputs: action (required), confirm, requireApproval, approvalTtlSeconds.

runner_manageB
DestructiveIdempotent

Probe the durable Runner through a saved SSH profile. Installation and upgrades require a signed release asset and are performed by the CLI installer.

Inputs: action (required), target, confirm, credentialProfile, +1 more.

ssh_password_deleteA
Destructive

Delete an SSH password created through ssh_password_save from the configured OS credential helper and remove its RunBeacon profile reference. Passwordless SSH profiles are rejected.

Inputs: id (required).

ssh_password_saveA
Idempotent

Store an SSH password in the configured OS-backed Git credential helper and create a safe RunBeacon profile containing only host, port, username, host-key policy, and credentialKind="password". Prefer passwordEnvVar so the password never appears in conversation. The password is never written to RunBeacon profiles, jobs, dashboard state, logs, command arguments, or environment metadata.

Inputs: id (required), host (required), username (required), port, +7 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 21 tools

    Disambiguation4/5

    Tools are mostly distinct, with clear separation between job operations, credential profiles, and specific password/token storage. The main potential confusion between job_wait and job_watch is resolved by descriptions clarifying one is for models and the other for dashboard long-polling.

    Naming Consistency4/5

    Tool names follow a consistent object_verb pattern (e.g., job_start, credential_profile_delete, audit_query). Verbs are consistently placed at the end, and no camelCase or mixed conventions are present. While some verbs like 'manage' are generic, the overall pattern is predictable.

    Tool Count3/5

    With 21 tools, the server spans multiple domains (jobs, credentials, GitHub publishing, policies, events, audit). This is on the heavier side but remains justified by the broad feature set; however, it borders on feeling cluttered for a single server.

    Completeness4/5

    The tool set provides solid lifecycle coverage for jobs (start, wait, cancel, list, snapshot, dashboard) and credential profiles (save, delete, list, set/clear default). Minor gaps exist, such as no explicit job retry mechanism and runner management limited to probing, but core workflows are covered.

    Maintenance

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server for remote machine operations via SSH, providing a single tool to execute any shell command on remote machines with real-time progress streaming.
      21 npm
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server for infrastructure discovery and remote management, enabling SSH command execution, file transfer, log tailing, and machine/service inventory with a companion web dashboard.
      2
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      Durable MCP server for managing long-running jobs locally, over SSH, or on Slurm clusters. Jobs survive client disconnects and return exit codes, bounded logs, and JSON artifacts.
      11
      1
      MIT