RunBeacon
RunBeacon provides durable lifecycle management for AI-agent jobs with secure credential handling, policy enforcement, and audit capabilities. You can:
Manage job lifecycle: start local or remote (SSH, Slurm, Apple-signing) jobs with configurable execution modes (
auto,direct,runner), idempotency keys, trace IDs, metadata, environment overrides, and output policies; wait for completion (job_wait); watch for changes (job_watch); read snapshots; list job history; cancel jobs; and open a live dashboard that auto-updates via long-polling.Ensure durability: use a remote Runner to survive disconnections, with automatic reconnection; manage the Runner by probing, installing, upgrading, uninstalling, and migrating host keys.
Handle credentials securely: create, list, delete, and set defaults for SSH and GitHub credential profiles; store SSH passwords and GitHub tokens in OS credential helpers, with options to use environment variables to avoid exposing secrets.
Control policies: read and update risk policy defaults, requiring approval for privileged, destructive, release, and credential actions (approval is performed via dashboard or CLI, not through the server).
Subscribe to events: manage persistent subscriptions for Codex, desktop, or HMAC-secured webhooks, referencing URLs and secrets via environment variables.
Audit activity: query verified, hash-chained audit records containing policy and lifecycle metadata, but never command bodies or credentials.
Publish to GitHub: start dashboard-tracked publish jobs, commit staged changes, push without force, and monitor GitHub Actions in the background.
Provides containerized workflow support, enabling console sessions and command execution within Docker containers.
Provides cloud platform support for Kubernetes, enabling console sessions and command execution within Kubernetes clusters.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@RunBeacon run 'npm run build' and track the job"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 themonitor-remote-jobsskill.
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 resultThe 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.jsThe npm commands are:
console-automation-mcp: lifecycle MCP serverremote-job-monitor: compatibility alias for the same MCP serverrunbeacon: 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.0macOS 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 versionrunner_manage: Runner probe; signed installation is interactive CLI-onlypolicy_manage: inspect/update risk defaults, never approve jobsevent_subscription_manage: Codex, desktop, or HMAC HTTPS webhook subscriptions using environment references for URLs and secretsaudit_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 boundedRUNBEACON_EVENT <JSON>outputtraining: structured epoch, step, loss, ETA, checkpoint, and GPU fieldsslurm:sbatch --parsable,squeue/sacctstatus recovery, and verifiedscancelapple-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.
License
MIT
Available Tools
21 toolsaudit_queryARead-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_defaultAIdempotent
Clear the default SSH or GitHub credential profile without deleting the profile or any OS-managed secret.
Inputs: kind (required).
credential_profile_deleteADestructive
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_listARead-onlyIdempotent
List safe credential reference profiles. Results never contain passwords, passphrases, private-key contents, or tokens.
Inputs: kind.
credential_profile_saveAIdempotent
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_defaultAIdempotent
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_manageBIdempotent
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_startADestructive
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_deleteADestructive
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_saveAIdempotent
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_cancelADestructiveIdempotent
Cancel a queued or running tracked job.
Inputs: jobId (required).
job_dashboardARead-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_listARead-onlyIdempotent
List tracked job history with bounded output tails. Live dashboards use job_watch for their single focused task.
Inputs: limit, tailLines.
job_snapshotARead-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_startADestructive
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_waitARead-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_watchARead-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_manageADestructiveIdempotent
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_manageBDestructiveIdempotent
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_deleteADestructive
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_saveAIdempotent
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
Scored across 21 tools
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.
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.
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.
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
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personal…
Public MCP server for discovering open jobs. Search, filter, and get application links.
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
Pingstack monitors cron jobs and scheduled tasks with heartbeat checks, and checks websites, TCP ports, DNS records, SSL certificates and domain expiry. This MCP server lets your agent create, update, pause and delete checks, build dashboards and publish them as status pages, manage notification groups, and read incidents with their causes, uptime, run history and latency. Pause, delete and unpublish stay off until you turn them on. Browser sign-in, no API key needed.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP 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 npmMIT
- AlicenseNot gradedqualityDmaintenanceMCP server for infrastructure discovery and remote management, enabling SSH command execution, file transfer, log tailing, and machine/service inventory with a companion web dashboard.2MIT
- AlicenseAqualityCmaintenanceDurable 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.111MIT
- AlicenseNot gradedqualityDmaintenanceLegacy MCP server for console automation that preserves interactive sessions, a 40-tool command/test surface, and legacy protocol adapters for local/remote execution. Intended only for migrations to RunBeacon 3.0.MIT