RODMEN/A · Container Execution

Run any container over HTTP

RunFlow is a hardened Docker execution platform that lets AI agents submit, schedule, pause, resume, and observe container runs over a governed REST API. Firewalled sandboxes, live logs, native DAG workflows, and 25 MCP tools — no shell, no SSH, no human in the loop.

MCP
25 Tools
DAG
Native Workflows
0
SSH Required

One command to connect

Point any MCP-compatible agent at RunFlow and it gains 25 tools for submitting, monitoring, and controlling container runs.

Terminal # Register the MCP server claude mcp add --transport http --scope user runflow \ https://runflow.rodmena.app/mcp \ --header "Authorization: Bearer <YOUR_API_KEY>"

Then say: Read https://runflow.rodmena.app/api.html and set me up to use RunFlow.

What RunFlow does

Hardened container execution for the agent era — governed, observable, and pauseable.

Hardened Sandbox

Every run is isolated: cap-drop ALL, read-only rootfs, no-new-privileges, pids/CPU/memory limits. Firewalled egress — internet yes, host and private networks no.

Freeze & Resume

Pause a running container mid-flight — full in-memory state preserved — and resume exactly where it left off. Serverless can't do this. Plain Docker can't either.

Live Observability

Streaming logs (Redis hot-tail + on-disk), CPU/memory/network utilization time-series, and full state-transition history — all over REST, all in real time.

Smart Scheduling

Run now, at a future wall-clock time, or within a business-hours calendar. Queue past your concurrency limit with position + ETA instead of 429 rejections.

Native DAG Workflows

Submit a graph of container nodes — conditional edges, per-node retries, JSON message-passing, approval gates. No sidecar orchestrator required.

Governed & Multi-Tenant

Per-tenant quotas, env-var encryption at rest, secret redaction, per-operation RBAC, auto-kill on timeout, and full audit logs. Fail-closed on auth outages.

How it works

Submit over REST, RunFlow dispatches to a hardened sandbox, you observe and control — all over HTTP.

Run Lifecycle
Agent RunFlow Sandbox POST /runs track_id (202) dispatch stream logs + metrics pulling → running pause / resume / stop / kill GET /result → exit code, stdout, duration — terminal: exited, failed, timeout, killed, expired
curl # Submit a run (non-blocking) curl -X POST https://runflow.rodmena.app/api/v1/runs \ -H "Authorization: Bearer $KEY" \ -H "Content-Type: application/json" \ -d '{"image":"python:3.12-slim","command":["python","-c","print(1)"]}' # {"track_id":"01KY...","status":"scheduled"} # Pause mid-flight curl -X POST $BASE/api/v1/runs/$TID/pause \ -H "Authorization: Bearer $KEY" # Resume with memory intact curl -X POST $BASE/api/v1/runs/$TID/resume \ -H "Authorization: Bearer $KEY" # Collect the result curl $BASE/api/v1/runs/$TID/result \ -H "Authorization: Bearer $KEY"
Non-Blocking by Design

Submit returns a track_id instantly. Poll status or stream logs — never wait synchronously for a container to finish.

Freeze & Resume

Pause a live computation — in-memory state preserved, CPU drops to zero. Resume continues exactly where it froze. No checkpoint code.

Firewalled Egress

Your code reaches the public internet but never the host, private networks, or other runs. --cap-drop ALL, read-only rootfs, no-new-privileges.

MCP-Native

25 first-class tools over Streamable HTTP — agents connect by URL and API key, no SDK or glue code. Full REST parity.

Native DAG orchestration

Submit a graph of container nodes. Conditional edges, retries, approval gates — no sidecar orchestrator.

Build → Test → Deploy
build test deploy alert on_success on_failure
curl # One POST submits the whole graph curl -X POST $BASE/api/v1/workflows \ -H "Authorization: Bearer $KEY" \ -d '{ "name":"ci", "nodes":[ {"ref":"build","image":"node:20","command":["npm","run","build"]}, {"ref":"test","image":"node:20","command":["npm","test"],"retries":1}, {"ref":"deploy","image":"alpine","command":["sh","-c","echo deploying"]}, {"ref":"alert","image":"alpine","command":["sh","-c","echo paging"]} ], "edges":[ {"from":"build","to":"test","condition":"on_success"}, {"from":"test","to":"deploy","condition":"on_success"}, {"from":"test","to":"alert","condition":"on_failure"} ] }' # 202 {"workflow_id":"01K...","status":"pending"} # Each node = one run = one track_id
Conditional Edges

Gate a node on a parent's outcome: on_success, on_failure, always.

Per-Node Retries

Each node carries its own retries (0–10) and backoff. Transient failures retry without restarting the graph.

JSON Message-Passing

A node's last stdout line (JSON) lands in downstream nodes as RUNFLOW_INPUT_<REF> env vars.

Approval Gates

A node with "type":"approval" parks the branch until you approve or reject.

Everything you need

Full API reference, agent docs, and system status — all in one place.

Ready to run containers over HTTP?

Get an API key, point your agent at the MCP endpoint, and submit your first run in minutes.

Full Docs OpenAPI