Skip to content
Like what we’re building? Star on GitHub

☁️ Iterion Cloud — the multi-tenant control plane for AI agents ​

Audience. Anyone evaluating iterion as a multi-tenant platform — a platform engineer about to helm install, a tech-lead choosing between self-hosting and managed, or an operator who needs to explain to a review board what iterion is before they let it near production.

Iterion is two things in one repository:

  1. An open-source workflow engine you run locally (iterion run, iterion studio, the desktop app) — the same engine the rest of the docs cover.
  2. A self-hostable multi-tenant platform built on top of that engine: orgs, teams, BYOK LLM keys, generic + bot-secret bindings, inbound webhooks for four providers, NATS-queued runner pods, per-org quotas, audit log, PATs, SMTP onboarding. We call this deployment mode Iterion Cloud: the control plane and execution platform for running agent workflows across teams.

Build, run and orchestrate agentic AI workflows. The control plane for AI agents — apps have Linux, the cloud has Kubernetes.

Terminology. An agent workflow is the deployable workload packaged as .bot or .botz and identified as a bot by the existing CLI and API. An agent is one LLM-powered node inside that workflow.

The governed execution loop ​

A .bot is a deployable agent workflow: a versioned graph that can combine agents, judges, tools, routers, human gates, and deterministic compute. In cloud mode the loop is end-to-end:

The event is the trigger; the agent workflow is the governed workload; the org-bound credentials let it act in the user's own system (GitLab MR comment, GitHub PR review, Mattermost note); the result lands back in that system without anyone clicking a UI in between.

A concrete walkthrough — GitLab MR → Revi review ​

The operator's seed (a one-off):

  1. Helm-install the chart against Mongo + NATS + S3 (see cloud-deployment.md).

  2. Bootstrap the super-admin and create an org for the team (see the Iterion Cloud admin guide).

  3. The org admin opens Integrations → Repositories in the studio (/integrations) → "Connect a forge" → GitLab → paste a project access token (or use OAuth when an OAuth app is configured) → Enable a repo → pick the project → check review-pr → Enable. In one action iterion creates the GitLab project hook (pointing at its own inbound URL, with a fresh iwh_ secret it holds on both ends), the matching webhook config, and the forge_token binding so Revi posts the review under the org's own GitLab account. The operator never sees or pastes a token URL. See forge-integrations.md. A GitLab whose outbound allowlist refuses this deployment's host takes one extra gesture in the same step: on the connection's Webhook delivery row, pin the base it does accept before enabling the repo (webhooks.md).

    (The sibling Webhooks / Secrets / Bot bindings tabs of the same page remain for advanced / non-forge cases — e.g. a generic JSON trigger — and for hand-wiring a webhook the operator wants to manage themselves. Configs created by Integrations are marked managed and can only be torn down from the Repositories tab.)

After that, every MR-open in the GitLab project triggers Revi autonomously:

StepWhere the code livesWhat happens
GitLab POSTs the merge_request eventthe forgeHeader X-Gitlab-Token: iwh_…
Token check + rate/quota gatespkg/server/middleware_webhook.go401/410/429/403 if anything fails
Parse + filter (open/reopen on allowed project)pkg/webhooks/gitlab/parser.go200 filtered for noise (updates, label edits)
Launch admission (org suspend / concurrency / cost cap / run quota)pkg/server/launch_gate.go402/403/429 with a stable reason token
Bundle the org's BYOK keys + bound secrets, seal thempkg/secrets/run_secrets.goPer-run AES-GCM, run-id-bound AAD
Publish on NATS iterion.queue.runspkg/queue/nats/nats.goKEDA scales the runner pool on lag
A runner pod claims, unseals, runs the review-pr workflowpkg/runner/loop.goOne in-flight run per pod (each pod's serial loop; MaxAckPending=256 is the fleet ceiling)
The workflow clones, reviews, posts the note via forge_tokenthe workflowThe org's identity, not iterion's
Audit row + delivery row + Prometheus counterspkg/audit/audit.go + pkg/cloud/metrics/metrics.goBoth tenant and platform timelines

The same chain handles an on-demand re-review: a reviewer types /revi in the MR's notes, GitLab POSTs a Note Hook to the same URL, iterion's GitLab handler recognises the command word (pkg/webhooks/gitlab/note.go:IsReviewCommand), and a fresh review fires under a different idempotency key.

The primitives ​

PrimitiveOwnsWhere
Webhook token (iwh_…)inbound auth + tenant resolution + per-org rate/quotadocs/webhooks.md · pkg/webhooks/
Workflow catalog (bot_id)what a webhook can launch — agent workflows discovered from ITERION_BOTS_PATHdocs/bundles.md
BYOK API keys + bindingsthe org's LLM and forge credentials, sealed at restdocs/secrets-reference.md · pkg/secrets/
Runner poolclaims a queued run, unseals the bundle, runs the workflowdocs/cloud-architecture.md · pkg/runner/
Orgs + quotas + auditthe multitenancy and metering layerdocs/quotas-and-limits.md · pkg/orgusage/ · pkg/audit/
PATs (iap_…)long-lived, programmatic API access for CI/SDKsIterion Cloud admin guide · pkg/pat/
User notifications (web push)browser push when a run pauses on a human form or ends — VAPID keypair + per-user subscriptionsdocs/notifications.md · pkg/usernotify/

Everything is opt-in. A self-hosted iterion that hasn't enabled webhooks is still a perfectly fine multi-tenant studio (iterion server in cloud mode); a helm install that turns on webhooks but no PrometheusRule still runs — the chart's defaults are non-destructive (charts/iterion/README.md).

Reading map ​

If you arrived here looking for…

You want…Read
The conceptual loop (you're here)this page
The webhook reference (auth modes, providers, idempotency, CRUD API)webhooks.md
The quota / metering / enforcement contract (denial tokens, HTTP semantics)quotas-and-limits.md
The platform-operator + org-admin runbook (UI + curl side by side)Iterion Cloud admin guide
Every kind of secret and where it livessecrets-reference.md (engine-side layers in secrets.md)
The full REST surface (every endpoint, auth class, purpose)cloud-rest-api.md
Memory + knowledge spaces (visibilities, quotas, REST)memory-and-knowledge.md
Control plane vs data plane, queue internals, multitenancy enforcementcloud-architecture.md
How to install the chartcloud-deployment.md · charts/iterion/README.md
The OPERATOR-side bootstrap (super-admin, SSO, suspending an org)cloud-admin.md
The END-USER-side flows (login, BYOK, OAuth-forfait, PATs, reset)cloud-user.md
Outbound run-completion callbacks (the original "webhook" feature)outbound-callbacks.md

The ready-to-run agent workflows iterion ships — Nexie, Featurly, Billy, Revi, Seki and friends — live in examples.md and bundles.md. Iterion orchestrates and dispatches them through the same governed execution loop.