iterion

module
v1.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 22, 2026 License: MIT

README

Iterion logo

Iterion

The control plane for AI agents. Apps have Linux. The cloud has Kubernetes. AI agents have Iterion.

Kubernetes gave cloud workloads a declarative control plane. Iterion brings that model to AI agents. Define agent workflows as readable .bot files — chain agents, judges, routers, human gates, parallel branches, bounded loops, and budget caps — and operate every run from a single, auditable execution graph.

⚠️ This project is highly experimental. APIs, DSL syntax, and storage formats may change without notice. Use at your own risk in production environments. Feedback and contributions are welcome!

📖 New here? Read Why Iterion? — the origin story, the patterns we've seen work, the asymptote lens that motivated the engine, and the workflow-lab dimension. Helps you decide whether Iterion fits how you work before you install anything.

🧭 Want the as-built picture? Read Current state of Iterion — shipped surfaces, execution architecture, backend status, security defaults, cloud control plane, and deliberate limits, verified against main.


Table of Contents


🧩 What is Iterion?

If you've ever noticed yourself repeating the same prompt-and-review patterns while vibe-coding with an LLM — "ask the model, eyeball the diff, ask it to fix what it missed, run the tests, ask again" — and wondered how to automate and optimize that loop, Iterion is built for you. Capture the pattern once as a .bot workflow, give it budget caps, parallel reviewers, judges and human gates, and let the engine run it deterministically every time.

Iterion is a workflow engine that turns .bot files into executable AI pipelines. You describe what your agents should do — review code, plan fixes, check compliance, ask a human — and Iterion handles how: scheduling branches in parallel, enforcing budgets, persisting state, and routing between nodes.

flowchart LR
  BOT[".bot file"] --> PARSE["Parse"]
  PARSE --> COMPILE["Compile"]
  COMPILE --> VALIDATE["Validate"]
  VALIDATE --> EXEC["Execute"]
  EXEC --> NODES["agents, judges,<br/>routers, await,<br/>humans, tools<br/>running in parallel<br/>with budget tracking"]
  NODES --> OUT["results, artifacts, event log"]

Think of it as a DAG runner purpose-built for LLM workflows — with first-class support for things like structured I/O, conversation sessions, human-in-the-loop pauses, and cost control.


The studio's visual editor — drag-and-drop graph, live diagnostics, and an inspector for every node. See more screenshots.


📋 Features

Authoring & orchestration
  • 📝 Declarative DSL — Human-readable .bot files with indentation-based syntax
  • 🤖 Multi-agent orchestration — Chain agents, judges, routers, humans, deterministic tools/computes, sub-bots, and event nodes into complex graphs
  • 🖥️ Visual editor — Browser-based workflow builder with drag-and-drop, live validation, and source view
  • 🙋 Human-in-the-loop — Pause for human input, auto-answer via LLM, or let the LLM decide when to ask — see docs/human-in-the-loop.md
  • 🔀 Parallel branching — Fan-out via routers, converge at downstream nodes with await: wait_all / await: best_effort
  • 🧭 5 routing modesfan_out_all, fan_out_each, condition, round_robin, and llm-driven routing
  • 🧩 Reusable composition — Parameterised group/use macros, nested subbot runs, sequential foreach, and resource-aware fan-out
  • 🔁 Fuelled loops — Fixed, templated, or convergence-driven loops with iteration and liveness backstops
  • 📡 In-bot eventsemit / wait nodes coordinate concurrent branches without polling
  • 🔲 Structured I/O — Typed schemas for inputs and outputs with enum constraints
  • 🔗 MCP support — Declare MCP servers directly in .bot files (stdio, http)
  • 🧪 Recipe system — Bundle workflows with presets for comparison and benchmarking
  • 📐 Mermaid diagrams — Auto-generate visual workflow diagrams (compact / detailed / full)
Execution & runtime
  • 🔌 Multiple execution backends — In-process claw and the recommended Claude Code delegate, plus explicit Kimi Code and Grok Build CLI-agent backends; the Codex delegate is deprecated and frozen
  • 🌐 Provider routingclaw validates Anthropic and OpenAI as first-class lanes and also wires xAI, Bedrock, Vertex, Foundry, and compatible endpoints with varying test coverage; OpenAI can use an API key or a ChatGPT/Codex OAuth forfait
  • 💰 Budget enforcement — Shared, mutex-protected caps on tokens, cost (USD), duration, parallel branches, and loop iterations
  • 🎛️ Live control and recovery — Queue operator/supervisor messages, raise budgets, grant loop iterations, retry eligible failures, and resume from persisted checkpoints
  • 🛡️ Tool-permission gate — Shared off / ask / deny policy for claude_code and claw, with allow/ask/deny rule lists; restrictive modes are opt-in
  • 🌳 Worktree finalizationworktree: auto runs in a fresh Git worktree and protects committed results with a named branch; CLI or studio merge policy decides when and how it lands — see docs/merge-policy.md
  • 🛡️ Per-run sandbox — Opt-in Docker/Podman/Kubernetes isolation. Local containers preserve the host worktree path by default; network mode is open unless the workflow selects an allowlist/denylist proxy — see docs/sandbox.md
  • 🧰 Reproducible bot tools — A bot and its target repository can each declare a pinned devbox.json; Iterion composes both toolchains and exposes them to non-interactive nodes
  • 🔐 Privacy filter — Built-in Go-native privacy_filter / privacy_unfilter tools redact and restore PII (emails, phones, IBANs, credit cards, URLs, ~25 secret patterns) — see docs/privacy_filter.md
Persistence & observability
  • 📦 Artifact versioning — Per-node, per-iteration versioned outputs persisted to disk
  • 📊 Event sourcing — Append-only JSONL event log for full replay and debugging
  • ⏯️ Resumable runs — Checkpoint-based resume from failed_resumable / paused_waiting_human / cancelled states — see docs/resume.md
  • 🧭 Run operations — Run trees, files/diffs/commits, live steering, human answers, notes/tags, and a local post-mortem shell for preserved worktrees
  • 📈 Observability stack — Prometheus /metrics, OTLP traces, and a self-contained docker-compose stack with pre-built Grafana dashboards — see docs/observability/README.md


Run analytics — cost over time stacked by workflow, plus per-workflow run counts, fail rates, and P50/P95 durations.

Distribution & integration
  • ☁️ Multi-tenant agent control plane — Self-hostable Helm deployment (MongoDB + S3 + NATS JetStream, KEDA-scaled runners, per-run Kubernetes sandboxes) with org → team tenancy, repo-first forge integrations, schedules/triggers/webhooks, bound credentials, quotas/metering, audit, SSO, PATs, SMTP onboarding, and a typed remote CLI — see the Iterion Cloud overview
  • 🧩 Skills, plugins, and marketplace — Package bot resources, install project/global skills, contribute MCP/rewriter/skill/hook/lifecycle plugins, and distribute bots or plugins through one registry model
  • 🧰 TypeScript SDK@iterion/sdk wraps the CLI with typed run / resume / events streaming for Node, Deno, and Bun apps
  • 🧠 AI agent skill — Install as a skill in Claude Code, Codex, Cursor, Windsurf, GitHub Copilot, Cline, Aider, and other AI coding agents

☁️ Iterion Cloud — Agent orchestration at scale

The same engine, deployed for teams: an external event fires → an agent workflow runs with your org's bound credentials → the result lands back in your own system. Open a merge request, get Revi's review as inline comments — no human in the loop, no secret ever in a prompt.

Run agent workflows as governed services.

flowchart LR
  FORGE["forge event"] -- "token/HMAC,<br/>rate, quota" --> HOOK["POST /api/webhooks/{provider}/{id}"]
  HOOK --> NATS[("NATS queue")]
  NATS --> RUNNER["runner pod<br/>(KEDA-scaled)"]
  RUNNER -- "BYOK key +<br/>file secrets" --> WORKFLOW["agent workflow executes<br/>with bound creds"]
  WORKFLOW --> POST["review/fix/report<br/>posted back on the MR/PR"]

Five steps to a working forge loop:

  1. helm install iterion oci://ghcr.io/socialgouv/charts/iterion -f values.yamlchart README
  2. Activate the bootstrap super-admin (temp password in the boot logs), create an org
  3. In the studio, open Integrations, connect GitHub/GitLab/Forgejo, and select a repository
  4. Enable a bot for that repository; Iterion provisions the managed hook, webhook secret, credential binding, and optional schedule
  5. Open a PR/MR — watch the run in the studio and the result land back on the forge

Org quotas (runs / cost / concurrency / rate), audit log, personal access tokens, DLQ ops and Prometheus metrics make it operable as a real multi-tenant service. Start with the Iterion Cloud overview.


🤖 Ready-to-run agent workflows

Iterion ships a catalog of named, first-class agent workflows. Each is packaged as a general-purpose .bot you point at any repo: run it directly (iterion run bots/<name>/main.bot), dispatch it per issue, or schedule it.

Workflow Role Bundle
🧭 Nexie Co-CTO orchestrator — surveys the repo, elicits priorities, proposes a roadmap, and emits kanban issues whats-next
🛠️ Featurly Ships a feature end-to-end — plan → implement → simplify → review-fix loop feature_dev
🌿 Billy Branch reviewer-fixer — one adaptive campaign over the branch diff, with deterministic checks and convergence gates branch_improve_loop
🌍 Willy Whole-repo reviewer-fixer — the same unit-convergent campaign across the full codebase whole_improve_loop
📚 Doki Doc aligner — detects & fixes doc/code drift (the docs, never the code) docs-refresh
🔎 Revi Code reviewer — read-only cross-family review, publishes findings to the board review_pr
🛡️ Seki Source security auditor — SAST + secret scan + LLM triage sec-audit-source
📦 Depsy Supply-chain auditor — dependency malware / CVE scan sec-audit-deps
⬆️ Renovacy Security-aware dependency upgrader secured-renovacy

List them anytime with iterion bots list; see docs/examples.md for the full catalog (including the DSL demos under examples/).


🚀 Getting Started

Installation

Same engine, eight delivery modes — pick the one that fits your workflow:

Mode Best for Install Docs
🖥️ CLI Scripted runs, CI/CD pipelines curl -fsSL https://socialgouv.github.io/iterion/install.sh | sh install.md
🌐 Studio (web app) Visual workflow design (browser-based) Bundled with the CLI: iterion studio visual-editor.md
🪟 Desktop app Native window, multi-project, OS keychain, auto-update Download iterion-desktop from Releases desktop.md
🐳 Docker Zero-install runs, reproducible CI docker run --rm ghcr.io/socialgouv/iterion:latest install.md#docker
☁️ Cloud / server Multi-tenant deployment, shared run store, REST/WS API helm install iterion oci://ghcr.io/socialgouv/charts/iterion cloud.md
🎼 Dispatcher Autonomous loop — poll a tracker, dispatch a workflow per issue Bundled: iterion dispatch iterion.dispatcher.yaml dispatcher.md
Scheduler Cron recurring runs (weekly audits, nightly passes) — no resident daemon Bundled: iterion schedule add … && iterion schedule install scheduling.md
📦 TypeScript SDK Programmatic invocation from Node/Deno/Bun npm install @iterion/sdk sdks/typescript/

All eight use the same Go compiler and runtime contracts. They differ in launch transport, persistence adapter, isolation driver, and whether execution is in-process or queued to a runner.

Your first bot

There is no mandatory setup step — cd into the repository you want bots to work on and pick the entry point that matches your intent:

You want to… Start here
Run a bot on this repo iterion bots listiterion run <bot>
Build your own bot iterion bots create <slug>, or the studio builder at /bots/new
Wire bots into CI / a forge docs/repo-scope.md — connect a repo, then trigger on PRs and issues
Use a cloud instance iterion remote login <url> — see docs/cloud-cli.md
Run a bot from the catalog

Iterion ships a fleet (see Ready-to-run agent workflows) — the fastest way to see it work is to point one at your repo:

cd /path/to/your/repo
claude login                    # authenticate a backend (or set an API key)

iterion bots list               # what's available
iterion run bots/review-pr/main.bot --store-dir "$PWD/.iterion"
Or create your own
iterion bots templates                        # blank, code-reviewer, docs-writer, …
iterion bots create my-bot --template code-reviewer

$EDITOR bots/my-bot/main.bot                  # write the mission
iterion validate bots/my-bot/main.bot
iterion run bots/my-bot/main.bot

This scaffolds a complete bot bundle (main.bot + manifest.yaml + README.md

  • the resource directories) — so the bot is immediately discoverable by iterion bots list, editable in the studio, and dispatchable. The generated workflow is parsed and compiled before anything is written, so a scaffold never lands a broken bot.

iterion studio gives you the same thing with a visual builder, a live run console, and a kanban board.

Inspect results
iterion inspect                          # List all runs
iterion inspect --run-id <id> --events   # View a specific run with events
iterion report --run-id <id>             # Generate a detailed report

Run data lives under the resolved store. The example above opts into $PWD/.iterion so the CLI and iterion studio --dir "$PWD" share it. Without --store-dir, Iterion reuses an existing managed project .iterion or stores the run in a deterministic project slot under ~/.iterion/projects/; reuse the same override when inspecting a run. See the current storage contract.


🤖 Workflow files

Agent workflows, as code. Define readable, versioned workflows in .bot files. The DSL and visual editor are two views of the same source of truth.

Iterion accepts plain workflow sources as .bot files. Any other extension is rejected at the CLI, server, dispatcher, and studio boundaries.

Agent workflows can also be shipped as .botz bundles — tar.gz archives packaging the workflow with adjacent resources (Claude Code skills, reusable prompts, default attachments, manifest). Scaffold with iterion bots create, build with iterion bundle pack, run with iterion run my.botz. See docs/bundles.md.


✨ A Taste of the DSL

Here's the simplest possible workflow — an agent reviews code and decides pass/fail:

prompt review_system:
  You are a code reviewer. Evaluate the submission
  and decide if it meets quality standards.

prompt review_user:
  Review this code:
  {{input.code}}

schema review_input:
  code: string

schema review_output:
  approved: bool
  summary: string

agent reviewer:
  model: "${MODEL}"
  input: review_input
  output: review_output
  system: review_system
  user: review_user

workflow minimal:
  entry: reviewer
  reviewer -> done when approved
  reviewer -> fail when not approved

That's it — 28 lines. The agent gets a code input, produces a structured {approved, summary} output, and the workflow routes to done or fail based on the verdict.

From here you can add judges for multi-pass review, routers for parallel or per-item fan-out, human gates, reusable groups, nested bots, event coordination, fuelled loops, and budget caps — see docs/dsl.md for the language guide and reference map.


📚 Documentation

The full documentation lives under docs/ — start with the documentation index. Highlights:

Get going

Author workflows

Run & operate

Architecture & contributing

References


📄 License

MIT. See LICENSE for the full text. Copyright © SocialGouv.

Directories

Path Synopsis
Package bots exposes the productised bot recipes shipped with iterion (the named team — Featurly, Billy, Willy, …) as an embed.FS so the binary can run them by basename from any working directory.
Package bots exposes the productised bot recipes shipped with iterion (the named team — Featurly, Billy, Willy, …) as an embed.FS so the binary can run them by basename from any working directory.
cmd
iterion command
Command iterion is the CLI for the iterion workflow engine.
Command iterion is the CLI for the iterion workflow engine.
iterion-desktop command
Package main is the Iterion Desktop binary.
Package main is the Iterion Desktop binary.
contrib
mattermost-clarify command
Command mattermost-clarify is a chat channel adapter that wires a Mattermost bot ("@clarify-bot") to iterion's run-completion webhook (pkg/notify), letting iterion facilitate a thread without iterion itself knowing anything about Mattermost.
Command mattermost-clarify is a chat channel adapter that wires a Mattermost bot ("@clarify-bot") to iterion's run-completion webhook (pkg/notify), letting iterion facilitate a thread without iterion itself knowing anything about Mattermost.
examples
mcp_test_server command
Tiny MCP stdio server used by the live tests.
Tiny MCP stdio server used by the live tests.
internal
httpx
Package httpx provides the shared JSON request/response helpers used by iterion's HTTP handlers.
Package httpx provides the shared JSON request/response helpers used by iterion's HTTP handlers.
pkg
alert
Package alert implements run-health alerting for the iterion studio / server.
Package alert implements run-health alerting for the iterion studio / server.
artifactlabels
Package artifactlabels derives semantic labels for a published artifact from the SHAPE of its output data — so an artifact groups under "Plans", "Verdicts", etc.
Package artifactlabels derives semantic labels for a published artifact from the SHAPE of its output data — so an artifact groups under "Plans", "Verdicts", etc.
askusermcp
Package askusermcp holds the ask-user MCP tool surface shared by the two transports that expose it to a claude_code session:
Package askusermcp holds the ask-user MCP tool surface shared by the two transports that expose it to a claude_code session:
audit
Package audit persists control-plane mutations into a queryable, tenant-scoped log.
Package audit persists control-plane mutations into a queryable, tenant-scoped log.
auth
Package auth implements the multitenant authentication core: password hashing, JWT issuance/verification, refresh token rotation, and the per-request Identity carried through ctx.
Package auth implements the multitenant authentication core: password hashing, JWT issuance/verification, refresh token rotation, and the per-request Identity carried through ctx.
auth/desktopsso
Package desktopsso holds the single-use, TTL-bounded ticket store that carries a login result between the OIDC callback (which MINTS a ticket for a desktop SSO flow) and the desktop exchange endpoint (which REDEEMS it).
Package desktopsso holds the single-use, TTL-bounded ticket store that carries a login result between the OIDC callback (which MINTS a ticket for a desktop SSO flow) and the desktop exchange endpoint (which REDEEMS it).
auth/oidc
Package oidc owns the SSO connectors: Google, GitHub, and a generic OIDC discovery-based provider.
Package oidc owns the SSO connectors: Google, GitHub, and a generic OIDC discovery-based provider.
auth/orgsso
Package orgsso owns the per-tenant (per-org) SSO provider configuration: the rows an iterion org admin self-serves to enable login via their own Keycloak (a discovery-based OIDC provider) or to gate the deployment-level GitHub login on specific GitHub teams.
Package orgsso owns the per-tenant (per-org) SSO provider configuration: the rows an iterion org admin self-serves to enable login via their own Keycloak (a discovery-based OIDC provider) or to gate the deployment-level GitHub login on specific GitHub teams.
auth/wsticket
Package wsticket holds the single-use, short-TTL ticket store that lets a client open an authenticated WebSocket without carrying a long-lived access JWT in the URL (query strings leak to access logs, proxies, and Referer).
Package wsticket holds the single-use, short-TTL ticket store that lets a client open an authenticated WebSocket without carrying a long-lived access JWT in the URL (query strings leak to access logs, proxies, and Referer).
backend/cost
Package cost holds the per-model token-pricing table used to annotate generation outputs with `_tokens` / `_model` / `_cost_usd`.
Package cost holds the per-model token-pricing table used to annotate generation outputs with `_tokens` / `_model` / `_cost_usd`.
backend/delegate
Package delegate provides the Backend interface and types for executing agent/judge nodes via pluggable backends (CLI agents like claude-code/codex, or API-based backends like claw).
Package delegate provides the Backend interface and types for executing agent/judge nodes via pluggable backends (CLI agents like claude-code/codex, or API-based backends like claw).
backend/delegate/claudesdk
Package claudesdk provides a Go SDK for the Claude Code CLI.
Package claudesdk provides a Go SDK for the Claude Code CLI.
backend/detect
Package detect probes the host environment for available LLM credentials and CLI binaries, producing a Report consumed by the studio (UI hints) and the runtime resolver (auto backend selection).
Package detect probes the host environment for available LLM credentials and CLI binaries, producing a Report consumed by the studio (UI hints) and the runtime resolver (auto backend selection).
backend/forfait
Package forfait implements a best-effort Anthropic "forfait" (Claude Code OAuth subscription) usage-cap check used by the LAYER-2 run-level auto-resume loop.
Package forfait implements a best-effort Anthropic "forfait" (Claude Code OAuth subscription) usage-cap check used by the LAYER-2 run-level auto-resume loop.
backend/llmtypes
Package llmtypes defines iterion-owned types for the LLM generation layer.
Package llmtypes defines iterion-owned types for the LLM generation layer.
backend/model
Package model provides the ModelRegistry and claw-based NodeExecutor for resolving "provider/model-id" specs and executing LLM nodes.
Package model provides the ModelRegistry and claw-based NodeExecutor for resolving "provider/model-id" specs and executing LLM nodes.
backend/permission
Package permission implements iterion's tool-permission gate — the anti-hypnosis / anti-prompt-injection boundary that mirrors Claude Code's default "ask" posture for BOTH execution backends (claude_code and claw).
Package permission implements iterion's tool-permission gate — the anti-hypnosis / anti-prompt-injection boundary that mirrors Claude Code's default "ask" posture for BOTH execution backends (claude_code and claw).
backend/recipe
Package recipe defines the RecipeSpec model and loading/application logic.
Package recipe defines the RecipeSpec model and loading/application logic.
backend/rewrite
Package rewrite is iterion's command-output-rewriter extension point: the generalization of what used to be the hardcoded rtk integration.
Package rewrite is iterion's command-output-rewriter extension point: the generalization of what used to be the hardcoded rtk integration.
backend/secretguard
Package secretguard protects secret values from leaking through an agent run.
Package secretguard protects secret values from leaking through an agent run.
backend/thinktokens
Package thinktokens provides an approximate token count for extended-thinking (reasoning) text.
Package thinktokens provides an approximate token count for extended-thinking (reasoning) text.
backend/tool
Package tool provides a unified ToolRegistry that normalizes built-in tools and MCP server tools under a single namespace and resolution scheme.
Package tool provides a unified ToolRegistry that normalizes built-in tools and MCP server tools under a single namespace and resolution scheme.
backend/tool/privacy
Package privacy implements two iterion built-in tools that detect and redact personally identifiable information (PII):
Package privacy implements two iterion built-in tools that detect and redact personally identifiable information (PII):
backend/tool/privacy/detector
Package detector implements the pure-Go PII detection backend used by the privacy_filter / privacy_unfilter built-in tools.
Package detector implements the pure-Go PII detection backend used by the privacy_filter / privacy_unfilter built-in tools.
backend/tooldisplay
Package tooldisplay turns a tool call (name + raw JSON input) into the strings the engine renders in console logs and the per-node Tools tab.
Package tooldisplay turns a tool call (name + raw JSON input) into the strings the engine renders in console logs and the per-node Tools tab.
benchmark
Package benchmark implements a multi-recipe benchmark runner with isolated workspaces and comparable metrics collection.
Package benchmark implements a multi-recipe benchmark runner with isolated workspaces and comparable metrics collection.
benchmark/asymptote
Package asymptote computes per-iteration quality scores from persisted runs and compares groups of runs (e.g.
Package asymptote computes per-iteration quality scores from persisted runs and compares groups of runs (e.g.
benchmark/quality
Package quality is the subjective quality + value-for-money assessment layer for iterion's live e2e tests.
Package quality is the subjective quality + value-for-money assessment layer for iterion's live e2e tests.
botimport
Package botimport converts Claude-Code workflow scripts (.claude/workflows/*.js — the `export const meta` + `agent()` / `phase()` / `log()` shape) into DRAFT .bot workflows.
Package botimport converts Claude-Code workflow scripts (.claude/workflows/*.js — the `export const meta` + `agent()` / `phase()` / `log()` shape) into DRAFT .bot workflows.
botinstall
Package botinstall imports a bot bundle from a git URL or local path into a workspace so `iterion bots list`, the dispatcher, and the studio discover it.
Package botinstall imports a bot bundle from a git URL or local path into a workspace so `iterion bots list`, the dispatcher, and the studio discover it.
botregistry
Package botregistry discovers bots on disk: single .bot files and .botz bundle directories.
Package botregistry discovers bots on disk: single .bot files and .botz bundle directories.
botreplay
Package botreplay implements a record/replay golden-test framework for iterion bots.
Package botreplay implements a record/replay golden-test framework for iterion bots.
botscaffold
Package botscaffold renders a new bot bundle (main.bot + manifest.yaml + README.md + the bundle layout directories) from a builder Spec.
Package botscaffold renders a new bot bundle (main.bot + manifest.yaml + README.md + the bundle layout directories) from a builder Spec.
bundle
Package bundle implements the `.botz` archive format: a ZIP archive that packages an iterion workflow (`main.bot`) with adjacent resources (skills, prompts, presets, default attachments, manifest).
Package bundle implements the `.botz` archive format: a ZIP archive that packages an iterion workflow (`main.bot`) with adjacent resources (skills, prompts, presets, default attachments, manifest).
bundlelint
Package bundlelint cross-checks a bot bundle's manifest.yaml against its compiled main.bot workflow, surfacing structural inconsistencies that neither the manifest parser (pkg/bundle) nor the DSL compiler (pkg/dsl/ir) can see on their own — because each validates only one side.
Package bundlelint cross-checks a bot bundle's manifest.yaml against its compiled main.bot workflow, surfacing structural inconsistencies that neither the manifest parser (pkg/bundle) nor the DSL compiler (pkg/dsl/ir) can see on their own — because each validates only one side.
cli
Package cli implements the iterion command-line interface.
Package cli implements the iterion command-line interface.
clock
Package clock provides a small Clock abstraction so time-dependent logic (notably the per-day spend-cap reset) can be driven by a fake clock in tests.
Package clock provides a small Clock abstraction so time-dependent logic (notably the per-day spend-cap reset) can be driven by a fake clock in tests.
cloud/metrics
Package metrics centralises the Prometheus metrics exposed by the cloud-mode iterion server and runner pods.
Package metrics centralises the Prometheus metrics exposed by the cloud-mode iterion server and runner pods.
cloud/orgsweep
Package orgsweep nightly-purges organizations that were soft-deleted (Status == pending_deletion) once their grace window (Org.PurgeAfter) has elapsed.
Package orgsweep nightly-purges organizations that were soft-deleted (Status == pending_deletion) once their grace window (Org.PurgeAfter) has elapsed.
cloud/tracing
Package tracing wires the OpenTelemetry trace SDK so the spans emitted by pkg/runtime, pkg/runner, and pkg/server are actually exported.
Package tracing wires the OpenTelemetry trace SDK so the spans emitted by pkg/runtime, pkg/runner, and pkg/server are actually exported.
cloudsched
Package cloudsched is the cloud-mode recurring-bot scheduler: a per-org store of cron-scheduled bots and a multi-replica-safe ticker that fires each due schedule exactly once (CAS on the next-fire time, no leader election needed).
Package cloudsched is the cloud-mode recurring-bot scheduler: a per-org store of cron-scheduled bots and a multi-replica-safe ticker that fires each due schedule exactly once (CAS on the next-fire time, no leader election needed).
config
Package config loads iterion runtime configuration from environment variables and an optional YAML file.
Package config loads iterion runtime configuration from environment variables and an optional YAML file.
configshare
Package configshare is the scoped, self-service config-file editor: a per-(bot × repo × config-file × category) grant, addressed by a dynamic URL and authenticated by its own token, that lets a non-operator edit ONLY a declared allow-list of fields (the veille's feeds[] + editorial) in one file of one repo — and nothing else in iterion.
Package configshare is the scoped, self-service config-file editor: a per-(bot × repo × config-file × category) grant, addressed by a dynamic URL and authenticated by its own token, that lets a non-operator edit ONLY a declared allow-list of fields (the veille's feeds[] + editorial) in one file of one repo — and nothing else in iterion.
dispatcher
Package dispatcher implements iterion's long-running dispatcher.
Package dispatcher implements iterion's long-running dispatcher.
dispatcher/boardmongo
Package boardmongo is the Mongo-backed implementation of native.BoardStore — the cloud counterpart of the filesystem pkg/dispatcher/native.Store.
Package boardmongo is the Mongo-backed implementation of native.BoardStore — the cloud counterpart of the filesystem pkg/dispatcher/native.Store.
dispatcher/native
Package native implements iterion's first-class issue/kanban tracker.
Package native implements iterion's first-class issue/kanban tracker.
dispatcher/native/boardops
Package boardops contains the capability-gated operations that the __mcp-board MCP server and the /api/v1/mcp/board HTTP handler share.
Package boardops contains the capability-gated operations that the __mcp-board MCP server and the /api/v1/mcp/board HTTP handler share.
dispatcher/tracker
Package tracker defines the issue-tracker abstraction used by the dispatcher (`iterion dispatch`).
Package tracker defines the issue-tracker abstraction used by the dispatcher (`iterion dispatch`).
dsl/ast
MarshalFile / UnmarshalFile provide JSON serialization and deserialization for File types, converting Go iota-based enums to human-readable string representations.
MarshalFile / UnmarshalFile provide JSON serialization and deserialization for File types, converting Go iota-based enums to human-readable string representations.
dsl/expr
Package expr implements a small expression language used by iterion's `compute` nodes and `when` edge clauses.
Package expr implements a small expression language used by iterion's `compute` nodes and `when` edge clauses.
dsl/ir
Package ir defines the canonical Intermediate Representation (IR) produced by compiling an AST.
Package ir defines the canonical Intermediate Representation (IR) produced by compiling an AST.
dsl/types
Package types defines shared enum types used by both the AST and IR packages.
Package types defines shared enum types used by both the AST and IR packages.
dsl/unparse
Package unparse converts an ast.File back into .bot DSL text.
Package unparse converts an ast.File back into .bot DSL text.
dsl/workflowfile
Package workflowfile is the single source of truth for which file extensions iterion recognises as workflow source files.
Package workflowfile is the single source of truth for which file extensions iterion recognises as workflow source files.
eventbus
Package eventbus is the internal publish/subscribe spine that carries trigger.Event values from producers (native board, run completion, forge webhooks, schedule ticks, custom ingress) to consumers (the trigger Evaluator).
Package eventbus is the internal publish/subscribe spine that carries trigger.Event values from producers (native board, run completion, forge webhooks, schedule ticks, custom ingress) to consumers (the trigger Evaluator).
forge
Package forge is iterion's OUTBOUND forge-integration layer: it connects a team to a GitLab / GitHub / Forgejo account (OAuth or PAT), lists that account's repos, and AUTO-PROVISIONS the forge-side webhook + the bot-secret binding when an operator enables a bot on a repo — replacing the manual PAT→secret→binding→webhook→forge-hook chain.
Package forge is iterion's OUTBOUND forge-integration layer: it connects a team to a GitLab / GitHub / Forgejo account (OAuth or PAT), lists that account's repos, and AUTO-PROVISIONS the forge-side webhook + the bot-secret binding when an operator enables a bot on a repo — replacing the manual PAT→secret→binding→webhook→forge-hook chain.
forge/forgejo
Package forgejo is the Forgejo/Gitea implementation of forge.Admin.
Package forgejo is the Forgejo/Gitea implementation of forge.Admin.
forge/github
Package github is the GitHub implementation of forge.Admin: the outbound write-side client the orchestrator uses to list repos and create/update/delete the iterion webhook on them.
Package github is the GitHub implementation of forge.Admin: the outbound write-side client the orchestrator uses to list repos and create/update/delete the iterion webhook on them.
forge/gitlab
Package gitlab is the GitLab implementation of forge.Admin: the OUTBOUND write-side client the orchestrator uses to list a connection's projects and create/update/delete the iterion webhook on them.
Package gitlab is the GitLab implementation of forge.Admin: the OUTBOUND write-side client the orchestrator uses to list a connection's projects and create/update/delete the iterion webhook on them.
git
Package git is a minimal wrapper around the `git` CLI for the studio's modified-files panel.
Package git is a minimal wrapper around the `git` CLI for the studio's modified-files panel.
identity
Package identity owns the multitenant user/team/membership domain.
Package identity owns the multitenant user/team/membership domain.
internal/clilocate
Package clilocate centralises the host-side probe used by backends that shell out to a CLI binary (claude, codex, …).
Package clilocate centralises the host-side probe used by backends that shell out to a CLI binary (claude, codex, …).
internal/jsonl
Package jsonl provides a crash-safe append-only JSONL file writer.
Package jsonl provides a crash-safe append-only JSONL file writer.
internal/mongoutil
Package mongoutil holds tiny helpers for the Mongo driver shared across iterion's storage packages (pkg/store/mongo, pkg/identity, pkg/secrets, pkg/auth).
Package mongoutil holds tiny helpers for the Mongo driver shared across iterion's storage packages (pkg/store/mongo, pkg/identity, pkg/secrets, pkg/auth).
internal/proc
Package proc holds tiny process-management primitives shared across iterion's shell-out wrappers (gitCmd, dockerCmd, kubectlCmd).
Package proc holds tiny process-management primitives shared across iterion's shell-out wrappers (gitCmd, dockerCmd, kubectlCmd).
internal/shellquote
Package shellquote produces POSIX-shell-safe single-quoted tokens for use in `sh -c` command strings.
Package shellquote produces POSIX-shell-safe single-quoted tokens for use in `sh -c` command strings.
internal/storekit
Package storekit holds the generic skeletons behind iterion's paired Mongo+memory store backends (pkg/audit, pkg/pat, pkg/cloudsched, pkg/webhooks, pkg/auth/desktopsso, pkg/auth/wsticket): a mutex-guarded keyed map (Memory), a typed Mongo collection wrapper composing on pkg/internal/mongoutil (Mongo), and a single-use TTL ticket pair (TicketMemory / TicketMongo).
Package storekit holds the generic skeletons behind iterion's paired Mongo+memory store backends (pkg/audit, pkg/pat, pkg/cloudsched, pkg/webhooks, pkg/auth/desktopsso, pkg/auth/wsticket): a mutex-guarded keyed map (Memory), a typed Mongo collection wrapper composing on pkg/internal/mongoutil (Mongo), and a single-use TTL ticket pair (TicketMemory / TicketMongo).
internal/strutil
Package strutil holds tiny string helpers that have no direct stdlib equivalent and were otherwise copy-pasted across packages.
Package strutil holds tiny string helpers that have no direct stdlib equivalent and were otherwise copy-pasted across packages.
knowledge
Package knowledge defines the backend-agnostic contract for iterion's shared memory / knowledge system: the MemoryStore interface, the SpaceRef identity model (the sharing axes), and the document/index value types both adapters return.
Package knowledge defines the backend-agnostic contract for iterion's shared memory / knowledge system: the MemoryStore interface, the SpaceRef identity model (the sharing axes), and the document/index value types both adapters return.
log
Package log provides a leveled logger with emoji-rich console output for the iterion workflow engine.
Package log provides a leveled logger with emoji-rich console output for the iterion workflow engine.
mail
Package mail is iterion's minimal transactional mailer: stdlib SMTP (explicit STARTTLS) + embedded templates for the two flows that need email — invitations and password resets.
Package mail is iterion's minimal transactional mailer: stdlib SMTP (explicit STARTTLS) + embedded templates for the two flows that need email — invitations and password resets.
marketplace
Package marketplace is the hosted bot registry that sits on top of pkg/botinstall.
Package marketplace is the hosted bot registry that sits on top of pkg/botinstall.
memory
Package memory provides the per-workspace iterion memory tree at ~/.iterion/projects/<encoded-workdir>/memory/<scope>/.
Package memory provides the per-workspace iterion memory tree at ~/.iterion/projects/<encoded-workdir>/memory/<scope>/.
notify
Package notify delivers run-completion webhooks — a generic "this run reached a terminal state, here is its final answer" callback POSTed to a URL supplied at launch time.
Package notify delivers run-completion webhooks — a generic "this run reached a terminal state, here is its final answer" callback POSTed to a URL supplied at launch time.
orgusage
Package orgusage meters per-org (tenant) monthly run launches and LLM spend, and enforces the launch-time caps.
Package orgusage meters per-org (tenant) monthly run launches and LLM spend, and enforces the launch-time caps.
pat
Package pat implements personal access tokens — long-lived bearer credentials for programmatic API access (CI jobs, SDKs, curl) where the 15-minute JWT + refresh-cookie dance is impractical.
Package pat implements personal access tokens — long-lived bearer credentials for programmatic API access (CI jobs, SDKs, curl) where the 15-minute JWT + refresh-cookie dance is impractical.
plugin
Package plugin implements iterion's plugin ecosystem: declarative, out-of-process extensions described by a `plugin.yaml` manifest with typed contribution points.
Package plugin implements iterion's plugin ecosystem: declarative, out-of-process extensions described by a `plugin.yaml` manifest with typed contribution points.
pluginsource
Package pluginsource persists ORG-PRIVATE plugin bindings: "this team's runs get the plugin living in this git repository".
Package pluginsource persists ORG-PRIVATE plugin bindings: "this team's runs get the plugin living in this git repository".
queue
Package queue defines the message contract exchanged between the iterion server (publisher) and the iterion runner (consumer).
Package queue defines the message contract exchanged between the iterion server (publisher) and the iterion runner (consumer).
queue/nats
Package nats wraps the NATS / JetStream / KV layer for iterion's cloud queue.
Package nats wraps the NATS / JetStream / KV layer for iterion's cloud queue.
reviewtopology
Package reviewtopology resolves the mono/dual review topology for bi-model review-loop bots (whole-improve-loop, branch-improve-loop, feature-dev, docs-refresh, secured-renovacy) from detected credentials (provider keys AND usable backends — e.g.
Package reviewtopology resolves the mono/dual review topology for bi-model review-loop bots (whole-improve-loop, branch-improve-loop, feature-dev, docs-refresh, secured-renovacy) from detected credentials (provider keys AND usable backends — e.g.
runner
Package runner implements the cloud-mode iterion runner pod.
Package runner implements the cloud-mode iterion runner pod.
runshell
Package runshell spawns interactive post-mortem shells in preserved run worktrees (the studio's "Open shell" on a failed run).
Package runshell spawns interactive post-mortem shells in preserved run worktrees (the studio's "Open shell" on a failed run).
runtime
Package runtime — conflict handling for the deferred squash merge.
Package runtime — conflict handling for the deferred squash merge.
runtime/recovery
Package recovery defines typed recovery recipes that decide what to do when a node fails.
Package recovery defines typed recovery recipes that decide what to do when a node fails.
runview
Package runview — agent-driven merge-conflict resolution.
Package runview — agent-driven merge-conflict resolution.
runview/runstream
Package runstream is the store-agnostic run-streaming seam (ADR-053): one Source per store delivers BOTH the structured event timeline and the raw log bytes of any run — persisted replay first, then live tail, gap-free — so the run-console WS layer never branches on how a run was produced (in-process launch, detached subprocess, external daemon, cross-store, cloud runner pod).
Package runstream is the store-agnostic run-streaming seam (ADR-053): one Source per store delivers BOTH the structured event timeline and the raw log bytes of any run — persisted replay first, then live tail, gap-free — so the run-console WS layer never branches on how a run was produced (in-process launch, detached subprocess, external daemon, cross-store, cloud runner pod).
sandbox
Package sandbox defines the iterion sandboxing abstraction.
Package sandbox defines the iterion sandboxing abstraction.
sandbox/devcontainer
Package devcontainer parses the subset of devcontainer.json fields iterion's sandbox driver consumes.
Package devcontainer parses the subset of devcontainer.json fields iterion's sandbox driver consumes.
sandbox/docker
Package docker implements the Docker/Podman sandbox driver.
Package docker implements the Docker/Podman sandbox driver.
sandbox/kubernetes
Package kubernetes implements iterion's sandbox driver for cloud (in-cluster) deployments.
Package kubernetes implements iterion's sandbox driver for cloud (in-cluster) deployments.
sandbox/netproxy
Package netproxy implements iterion's HTTP CONNECT proxy that enforces the workflow's sandbox network policy.
Package netproxy implements iterion's HTTP CONNECT proxy that enforces the workflow's sandbox network policy.
sandbox/noop
Package noop provides the always-available passthrough sandbox driver.
Package noop provides the always-available passthrough sandbox driver.
sandbox/registry
Package registry centralises the iterion-shipped sandbox-driver constructor list.
Package registry centralises the iterion-shipped sandbox-driver constructor list.
schedgate
Package schedgate is the shared "should this scheduled bot fire now?" gate used by all three scheduled-launch paths: pkg/cli/schedule (host crontab), pkg/trigger.Scheduler (in-process spine), and pkg/cloudsched (multi-replica cloud ticker).
Package schedgate is the shared "should this scheduled bot fire now?" gate used by all three scheduled-launch paths: pkg/cli/schedule (host crontab), pkg/trigger.Scheduler (in-process spine), and pkg/cloudsched (multi-replica cloud ticker).
secrets
Package secrets seals and unseals sensitive values (BYOK API keys, OAuth credentials, OIDC client secrets) at rest.
Package secrets seals and unseals sensitive values (BYOK API keys, OAuth credentials, OIDC client secrets) at rest.
secure/httpdial
Package httpdial is the single source of truth for iterion's SSRF guard: resolving an operator/admin-supplied host to a safe IP and dialing only that pinned IP (DNS-rebinding-proof).
Package httpdial is the single source of truth for iterion's SSRF guard: resolving an operator/admin-supplied host to a safe IP and dialing only that pinned IP (DNS-rebinding-proof).
server
Package server provides an HTTP API for the iterion studio.
Package server provides an HTTP API for the iterion studio.
server/cloudpublisher
Package cloudpublisher wires runview.LaunchPublisher on top of NATS + Mongo so the cloud-mode `iterion server` can hand work off to the runner pool instead of executing in-process.
Package cloudpublisher wires runview.LaunchPublisher on top of NATS + Mongo so the cloud-mode `iterion server` can hand work off to the runner pool instead of executing in-process.
server/projects
Package projects manages the studio's per-user project registry.
Package projects manages the studio's per-user project registry.
sessionboard
Package sessionboard models the per-run "Session board": a small, declarative dashboard the studio renders on a run's Tasks tab.
Package sessionboard models the per-run "Session board": a small, declarative dashboard the studio renders on a run's Tasks tab.
skilllib
Package skilllib implements iterion's first-class skill library: a standalone, operator-curated store of Claude-Code-style SKILL.md skills, stored globally (~/.iterion/skills/) with an optional per-project override, and referenced from workflows via the DSL `skills:` field.
Package skilllib implements iterion's first-class skill library: a standalone, operator-curated store of Claude-Code-style SKILL.md skills, stored globally (~/.iterion/skills/) with an optional per-project override, and referenced from workflows via the DSL `skills:` field.
store
Package store implements the file-backed persistence layer for iterion runs.
Package store implements the file-backed persistence layer for iterion runs.
store/blob
Package blob defines the artifact-blob interface implemented by S3 (cloud) and (potentially) a local filesystem variant for testing.
Package blob defines the artifact-blob interface implemented by S3 (cloud) and (potentially) a local filesystem variant for testing.
store/mongo
Package mongo implements the cloud-mode RunStore on top of MongoDB for run metadata + events + interactions, paired with an external blob.Client (S3) for artifact bodies.
Package mongo implements the cloud-mode RunStore on top of MongoDB for run metadata + events + interactions, paired with an external blob.Client (S3) for artifact bodies.
store/storetest
Package storetest exposes the conformance suite that every store.RunStore backend must satisfy.
Package storetest exposes the conformance suite that every store.RunStore backend must satisfy.
supervise
Package supervise implements LLM-driven supervisor agents that watch a running iterion workflow from a separate goroutine/process and enqueue steering messages the supervised run picks up at its next turn — like a human watching a Claude Code session and typing.
Package supervise implements LLM-driven supervisor agents that watch a running iterion workflow from a separate goroutine/process and enqueue steering messages the supervised run picks up at its next turn — like a human watching a Claude Code session and typing.
trigger
Package trigger is the unifying spine for event-driven runs.
Package trigger is the unifying spine for event-driven runs.
usernotify
Package usernotify delivers user-addressed notifications for run lifecycle moments — a run pausing on a human form, finishing, failing — to per-user channels (web push first; OS notifications for the desktop app and email are future sinks).
Package usernotify delivers user-addressed notifications for run lifecycle moments — a run pausing on a human form, finishing, failing — to per-user channels (web push first; OS notifications for the desktop app and email are future sinks).
usernotify/webpush
Package webpush is the Web Push (RFC 8030 + VAPID) usernotify.Sink: it delivers a Notification to every browser PushSubscription registered by each recipient, via the browsers' push services.
Package webpush is the Web Push (RFC 8030 + VAPID) usernotify.Sink: it delivers a Notification to every browser PushSubscription registered by each recipient, via the browsers' push services.
valkey
Package valkey wraps a go-redis client used to share ephemeral server state across replicas (forge OAuth/CSRF state, board-MCP run tokens, auth rate-limit buckets).
Package valkey wraps a go-redis client used to share ephemeral server state across replicas (forge OAuth/CSRF state, board-MCP run tokens, auth rate-limit buckets).
webhooks
Package webhooks is iterion's inbound-webhook spine: long-lived, per-org webhook tokens that authenticate an external caller (a forge, CI, a script) and authorize it to launch a configured set of bots.
Package webhooks is iterion's inbound-webhook spine: long-lived, per-org webhook tokens that authenticate an external caller (a forge, CI, a script) and authorize it to launch a configured set of bots.
webhooks/generic
Package generic decodes the bot-agnostic JSON shape iterion accepts on /api/webhooks/generic/{id}.
Package generic decodes the bot-agnostic JSON shape iterion accepts on /api/webhooks/generic/{id}.
webhooks/gitlab
Package gitlab decodes GitLab webhook payloads into the narrow, normalized shape iterion's inbound handler consumes.
Package gitlab decodes GitLab webhook payloads into the narrow, normalized shape iterion's inbound handler consumes.
webhooks/prforge
Package prforge decodes pull_request webhook payloads from PR-over-forge providers — GitHub and Forgejo/Gitea — which share the same wire shape for the pull_request event.
Package prforge decodes pull_request webhook payloads from PR-over-forge providers — GitHub and Forgejo/Gitea — which share the same wire shape for the pull_request event.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL