$ open-source agent runtime

Describe an agent.
Get a workload.

tiny is a CLI and MCP server. Describe an agent in Claude Code — tiny builds it into flows of Kubernetes operators that run on your cluster. kubectl get pods shows you your agent.

$brew install tiny-systems/tap/tiny
Get started
# an agent, as your cluster sees it apiVersion: tinysystems.io/v1alpha1 kind: TinyNode metadata: name: rel.llm.llm_complete-p9m4 labels: tinysystems.io/flow: release-notes spec: module: llm-module-v0 component: llm_complete edges: - port: result to: slack_send:message
claude — tiny mcp · minikube
Terminal recording: an agent described in Claude Code being built by tiny and deployed to a Kubernetes cluster

no hosted sandbox — those are your pods, your namespace, your cluster

one prompt, end to end

What actually happens

Not a metaphor — this is a real flow, with the components tiny picks, the wiring it validates, and what your cluster shows afterwards.

you sayin Claude Code
prompt

"Take GitHub release webhooks, summarize the changelog with Claude, and post the summary to #releases in Slack."

tiny buildsvalidated + simulated
http_serverhttp-modulebody → promptllm_completellm-moduleresult → messageslack_sendcommunication-module

every edge checked against real port schemas — a wrong mapping fails the build, not your 3am webhook

your cluster runsCRDs, reconciled
$ kubectl get tinynodes -n tinysystems NAME MODULE STATUS rel.http.server-x7k2 http-module-v0 READY rel.llm.llm_complete-p9m4 llm-module-v0 READY rel.communication.slack_send-q2w8 communication-module-v0 READY

what people build

Agents with a job

Anything that watches, reasons, and acts is a flow away. Each of these is built from the same prompt-to-workload loop, out of stock modules.

On-call triage agent

Watches cluster events, drafts a diagnosis with the LLM, posts it to the on-call channel — restart waits for a human yes.

kubernetesllmslack_sendask

Support inbox agent

Reads incoming email, retrieves matching docs by embedding, drafts a reply — queued for approval before anything sends.

emailembeddingstoreask

PR review agent

Git webhook in, diff summarized and reviewed against your conventions, comment posted back to the pull request.

gitllmhttp_server

Nightly research digest

Cron kicks off a crawl of feeds and APIs, the LLM condenses what changed, one email lands before standup.

cronhttp clientllmemail

Data quality sentinel

Queries production tables on a schedule, flags anomalies with reasoning attached, files the report to a spreadsheet.

databasellmgoogleapis

Release-notes agent

The flow above, kept: webhook to summary to #releases — with traces for every release it ever announced.

http_serverllm_completeslack_send

Finished agents are shared as solutions — install one into your cluster, widgets and dashboards included, then reshape it by prompt.

no black boxes

You can read what it built

Every agent lands as a flow: typed nodes, labeled edges, live state. Open it in the editor and the logic is just… there — what watches, what thinks, what asks a human, what acts. If a run misbehaves, you point at the hop.

Eevent_watchkubernetes-module
Jjs_evalcrashloop?
Rroutercommon-module
Lllm_completellm-module
Aaskwaits for a human
Wworkload_restartkubernetes-module
Ddebugdrops the rest

run #482  ·  event_watch 0ms → js_eval 2ms → router 1ms → llm_complete 1.9s → ask 41s, human → workload_restart 230ms  ·  trace clean

this one restarts crashlooping pods — after a person says yes. the flow is the documentation; the trace is the audit log

production is the default

A runtime, not a demo

Everything an agent needs to survive contact with production ships in the runtime — not left as an exercise.

traces

Every hop recorded

Each message through each edge is traced. Drill from a failed run to the exact port that rejected it. Secrets are redacted in traces.

scenarios

Sample data travels with the flow

Pin a real trace as a scenario and every rebuild verifies against it. Flows ship green on first build, not after a week of poking.

retry

Transient failures self-heal

Components mark which errors are transient; edges retry exactly those. Durable hops requeue instead of dropping — messages don't vanish.

ask

Human-in-the-loop

The ask component pauses a flow with a form the runtime authors on the fly — approve, edit, or reject from the dashboard.

widgets

Dashboards from ports

Any port becomes a widget — chat with your agent, watch tables and charts fill, wire buttons to signals. No frontend work.

telemetry

Errors point at the edge

Live telemetry per node and per edge. An error badge filters the graph to what's failing; replay the signal once it's fixed.

architecture

No magic to outgrow

tiny is three honest pieces. If you know Kubernetes, you already know how to operate, monitor, and secure it.

  • A module is a container image running as an operator — one pod per module, reconciling its own TinyNode CRDs.
  • Components are goroutines inside the module pod; cross-module hops travel over NATS.
  • Agents are CRDs — GitOps them, RBAC them, kubectl describe them like anything else you run.
$ kubectl get pods -n tinysystems NAME READY STATUS common-module-6d8f9c7b4-rl2vx 1/1 Running http-module-58bd6f5d9-xm4qx 1/1 Running llm-module-7f4b8d6c5-nw8zk 1/1 Running communication-module-9c5d7e8f6-kp3jm 1/1 Running nats-0 1/1 Running tiny-operator-5b7c9d8e6-vh6tn 1/1 Running

capabilities

16 modules, 93 components — or write your own

Install a module and its components appear in the palette; prompt-built agents install missing capabilities on demand. Distribution is a static index.yaml in a git repo — publish yours with tiny repo add, no marketplace approval, no gatekeeper.

Modules are built on the tiny SDK — a Go struct with typed ports becomes a component; a GitHub release becomes a version.

mcp-native

Your editor is the console

tiny ships as an MCP server with the full lifecycle as tools — Claude Code, Cursor, or any MCP client can build, run, debug, and evolve agents. The web editor is there when you want a canvas; it's never required.

build_flowedit_flowsend_signalget_tracesscenariosinstall_moduleget_dashboardsearch_solutionsclone_solution

Debug loop stays in the conversation: run it, read the trace, fix the edge, run it again — without leaving your editor.

Your cluster can run agents now.

One brew install and one prompt away. MIT, no hosted anything.

$brew install tiny-systems/tap/tiny
View on GitHub