Skip to main content

DSL-based intent execution system with iterative refinement, featuring AI-powered suggestions via Ollama, safe simulation, and automatic health validation.

Project description

ITERUN

DSL-based intent execution system with iterative refinement, ITERUN boundary, and AI-powered assistance

Python 3.11+ License: MIT

AI Cost Tracking

PyPI Version Python License AI Cost Human Time Model

  • ๐Ÿค– LLM usage: $3.8541 (17 commits)
  • ๐Ÿ‘ค Human dev: ~$646 (6.5h @ $100/h, 30min dedup)

Generated on 2026-06-06 using openrouter/qwen/qwen3-coder-next


Overview

ITERUN is a system that allows you to:

  1. Generate intents from prompts (LiteLLM / OpenRouter / Ollama) โ†’ iterun.yaml
  2. Define intents manually in YAML DSL (sekcja INTENT:)
  3. Simulate execution with dry-run planning
  4. Deploy services via Docker (default) or pactown sandboxes (--runtime pactown)
  5. Pack stacks to a single markpact file (stack.markpact.md)
  6. Orchestrate repair with contract verify (TestQL + LLM retry via --verify)
  7. Monitor artifacts with service registry (iterun.registry.json)
  8. Integrate via REST, SDK, MCP (iterun-mcp)
  9. Get AI suggestions in the interactive shell (Ollama / LiteLLM)
  10. Execute safely with the ITERUN boundary (explicit approval when enabled)

One-liner (prompt โ†’ running service):

iterun generate "Create a REST API for user management" \
  -o generated/ --execute --verify

Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  CLI ยท REST ยท SDK ยท MCP (iterun-mcp)                     โ”‚
โ”‚  interfaces/IterunService โ€” wspรณlna warstwa API            โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                          โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Generator (LLM) โ†’ iterun.yaml + intract + testql        โ”‚
โ”‚  Parser โ†’ IR ยท Planner โ†’ app.py / compose / STACK        โ”‚
โ”‚  markpact pack โ†’ stack.markpact.md                       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                          โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Runtime: docker    โ”‚ or โ”‚ Runtime: pactown            โ”‚
โ”‚ (Executor)         โ”‚    โ”‚ (integrations/pactown_*)    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Contract verify (--verify) โ†’ LLM repair loop            โ”‚
โ”‚  Registry โ†’ iterun.registry.json (Backstage / OTel)      โ”‚
โ”‚  session.json โ€” peล‚ny log sesji                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Quick Start

Installation

# Clone repository
git clone https://github.com/softreck/iterun.git
cd iterun

# Full setup (recommended)
make setup

# Editable install (recommended)
python3 -m venv venv && source venv/bin/activate
pip install -e ".[ai]"
pip install -e ".[runtime]"   # opcjonalnie: markpact + pactown
# lub lokalnie: pip install -e ../markpact -e ../pactown
cp .env.example .env

Configuration (.env)

Copy .env.example to .env and adjust:

# LLM for `iterun generate` (priority: --model > LLM_MODEL > DEFAULT_MODEL)
OPENROUTER_API_KEY=sk-or-...
LLM_MODEL=openrouter/deepseek/deepseek-v4-pro

# Local Ollama (shell suggest/chat fallback)
OLLAMA_BASE_URL=http://localhost:11434
DEFAULT_MODEL=llama3.2

# Server / execution
HOST=0.0.0.0
PORT=8080
SKIP_ITERUN_CONFIRMATION=true
CONTAINER_PORT=8000
ITERUN_RUNTIME=docker          # lub pactown (bez docker w iterun)

Generate from prompt

source venv/bin/activate

# YAML only
iterun generate "Create a ping API" -o generated/

# Plan + artifacts
iterun generate "..." -o generated/ --run

# Docker + contract verify + LLM repair loop (--verify wymagane!)
iterun generate "..." -o generated/ --execute --verify --max-verify-iterations 5

# Pactown runtime (markpact sandboxes zamiast docker compose)
iterun generate "..." -o generated/ --execute --runtime pactown --verify

# Rejestr usล‚ug i artefaktรณw
iterun registry -o generated/

# Full JSON session log
iterun generate "..." -o generated/ --execute --verify --json

Output directory (generated/ by default) โ€” see Session artifacts.

AI Gateway Setup (Ollama)

# Install Ollama
curl -fsSL https://ollama.com/install.sh | sh

# Start and pull model
make ollama-start
make ollama-pull

# Or manually
ollama serve
ollama pull llama3.2

Using Makefile

make help          # Show all commands
make setup         # Full setup
make web           # Start web server
make shell         # Interactive shell
make execute       # Execute example intent
make test          # Run all tests
make ollama-models # List available models
make clean         # Clean temp files

Shell Interface

# Start interactive shell
make shell
# Or: python -m cli.main

# Generate + execute from prompt
make execute
# Or: iterun generate "$(cat examples/01-user-api/prompt.txt)" -o examples/01-user-api/generated/ --execute --verify

Interactive Shell Commands:

intent> new my-api          # Create new intent
intent> load iterun.yaml    # Load package (generated/iterun.yaml)
intent> plan                # Run dry-run
intent> suggest             # Get AI suggestions
intent> apply               # Auto-apply AI suggestions
intent> chat                # Chat with AI
intent> iterate             # Apply manual changes
intent> iterun                # Approve execution
intent> execute             # Execute approved intent
intent> show [json]         # Show current state
intent> models              # List AI models
intent> ai-health           # Check AI Gateway status
intent> help                # Show help
intent> exit                # Exit shell

# Poza shell โ€” registry i runtime
iterun registry -o generated/
iterun registry list examples/*/generated

MCP (agents)

pip install -e ".[mcp]"
iterun-mcp   # z katalogu root iterun; nie z examples/*

Web Interface

# Start web server
python -m web.app

# Open browser at http://localhost:8080

AI Gateway

The AI Gateway uses LiteLLM for:

  • iterun generate โ€” cloud models via OpenRouter (OPENROUTER_API_KEY, LLM_MODEL)
  • Shell suggest / chat โ€” local Ollama (OLLAMA_BASE_URL, DEFAULT_MODEL)

Supported Models (โ‰ค12B parameters)

Model Size Description
llama3.2 3B Default - Fast and efficient
llama3.2:1b 1B Ultra lightweight
llama3.1:8b 8B Balanced performance
mistral 7B Fast inference
mistral-nemo 12B Best quality under 12B
gemma2 9B Google Gemma 2
gemma2:2b 2B Lightweight
phi3 3.8B Microsoft Phi-3
qwen2.5 7B Alibaba Qwen 2.5
codellama 7B Code generation
codegemma 7B Google CodeGemma
deepseek-coder 6.7B DeepSeek Coder

Configuration

Environment variables:

export OLLAMA_BASE_URL="http://localhost:11434"
export DEFAULT_MODEL="llama3.2"
export MAX_MODEL_PARAMS="12.0"

Package file: iterun.yaml

The canonical workspace filename is iterun.yaml (not intent.yaml). Full spec: docs/INTENT_DSL_SPEC.md.

INTENT:
  name: user-api
  goal: Create a REST API for user management

ENVIRONMENT:
  runtime: docker
  base_image: python:3.12-slim
  ports:
    - 8000

IMPLEMENTATION:
  language: python
  framework: fastapi
  actions:
    - api.expose GET /ping
    - api.expose GET /users
    - api.expose POST /users
    - api.expose DELETE /users/{id}

EXECUTION:
  mode: dry-run

Supported Actions

Action Format Description
api.expose api.expose METHOD /path Expose HTTP endpoint
db.create db.create table_name Create database table
db.add_column db.add_column table column type Add column to table
shell.exec shell.exec command Execute shell command
rest.call rest.call METHOD url Call external REST API
file.create file.create path Create file

API Reference

Peล‚na dokumentacja: docs/API.md โ€” REST, SDK, MCP, STACK.
Rejestr usล‚ug/artefaktรณw: docs/REGISTRY.md โ€” Backstage, OCI, OTel.
Runtime markpact+pactown: docs/RUNTIME.md โ€” odchudzone uruchamianie.

Integration surfaces

Surface Entry
REST uvicorn web.app:app โ†’ /api/*, OpenAPI /docs
CLI iterun generate, iterun plan, โ€ฆ
SDK IterunClient() โ€” local lub base_url="http://โ€ฆ"
MCP iterun-mcp / python -m iterun_mcp.server โ€” narzฤ™dzia dla agentรณw LLM

REST Endpoints (skrรณt)

Method Endpoint Description
GET /api/health Liveness
GET /api/interfaces Lista powierzchni API
GET /api/schema JSON Schema for DSL
POST /api/intents/validate-yaml Validate YAML (is_stack)
POST /api/intents/plan-yaml Plan z YAML (STACK โ†’ compose)
POST /api/pipeline/run generate โ†’ plan โ†’ execute? โ†’ verify?
POST /api/intents/generate LLM โ†’ YAML
POST /api/intents/generate-and-run Alias /api/pipeline/run
GET /api/registry Service/artifact registry
POST /api/registry/refresh Refresh registry + exports
GET /api/intents List all intents
POST /api/intents/parse Parse DSL and create intent
GET /api/intents/{id} Get intent by ID
POST /api/intents/{id}/plan Dry-run (compose_yaml dla STACK)
POST /api/intents/{id}/execute Execute approved intent

AI Gateway Endpoints

Method Endpoint Description
GET /api/ai/status Check AI Gateway status
GET /api/ai/models List available models
POST /api/ai/complete Generate AI completion
POST /api/ai/chat Chat with AI
POST /api/intents/{id}/ai/suggest Get AI suggestions
POST /api/intents/{id}/ai/apply Auto-apply suggestions

Python API

from generator.pipeline import run_pipeline
from parser import parse_dsl
from planner import plan_intent
from sdk import IterunClient

# Prompt โ†’ full pipeline
result = run_pipeline(
    "Create a REST API for user management",
    output_dir="generated",
    execute=True,
    verify=True,
)
print(result.yaml_path)       # generated/iterun.yaml
print(result.verification)    # testql + HTTP result

# Or SDK (local or remote REST)
client = IterunClient()
out = client.run_pipeline("Create a ping API", output_dir="generated", execute=True, verify=True)
# remote = IterunClient(base_url="http://localhost:8000")

# Manual DSL
ir = parse_dsl(open("generated/iterun.yaml").read())
plan = plan_intent(ir)
print(plan.generated_code)

Examples

Script Opis
./examples/run-all.sh 01โ€“08: prompt โ†’ iterun.yaml โ†’ plan
./examples/run-e2e.sh 09โ€“12: execute + TestQL + Intract
./examples/run-resilience.sh 13โ€“16: skrajne prompty, pฤ™tla naprawcza
./examples/run-stacks.sh 17โ€“19: multi-service STACK (compose / pactown)

Szczegรณล‚y: examples/README.md ยท operacje: examples/OPERATIONS.md.

Session artifacts

Everything from one iterun generate run lands in --output-dir (default generated/):

File Content
iterun.yaml DSL package from LLM
session.json Full session โ€” prompt, generate attempts, plan, execute, verify
intract.yaml Intract contract manifest
service.testql.toon.yaml Auto-generated TestQL scenario
plan.result.json Plan logs + IR
execution.json Execute logs, endpoints, container id
container.log Docker logs (tail)
verify.result.json Contract verify result
verify.rounds.json Repair loop history (--verify)
app.py / Dockerfile Generated service
stack.markpact.md Caล‚y workspace w jednym pliku markpact
pactown.yaml Konfiguracja ekosystemu pactown
pactown.urls.json URL po --runtime pactown
stack.urls.json URL gatewayรณw (STACK, docker)
iterun.registry.json Rejestr usล‚ug i artefaktรณw
catalog/ Eksport Backstage (po iterun registry)

Testing

pytest
pytest tests/e2e/test_intent_generator.py -v
pytest tests/e2e/test_shell.py -v
pytest tests/e2e/test_web.py -v
pytest tests/e2e/test_ai_gateway.py -v

Project Structure

iterun/
โ”œโ”€โ”€ generator/          # LLM generate, pipeline, testql, intract, verify loop
โ”‚   โ”œโ”€โ”€ intent_generator.py
โ”‚   โ”œโ”€โ”€ pipeline.py
โ”‚   โ”œโ”€โ”€ contract_verify.py
โ”‚   โ””โ”€โ”€ session.py
โ”œโ”€โ”€ dsl/                # Pydantic schema for LLM validation
โ”œโ”€โ”€ ir/                 # Intermediate Representation
โ”œโ”€โ”€ parser/             # DSL parser
โ”œโ”€โ”€ planner/            # Dry-run simulator
โ”œโ”€โ”€ executor/           # Docker execution + HTTP validation
โ”œโ”€โ”€ ai_gateway/         # LiteLLM (Ollama + OpenRouter)
โ”œโ”€โ”€ cli/                # `iterun` CLI
โ”œโ”€โ”€ web/                # FastAPI web UI
โ”œโ”€โ”€ sdk/                # Python SDK client
โ”œโ”€โ”€ interfaces/         # IterunService โ€” REST/SDK/MCP
โ”œโ”€โ”€ integrations/       # markpact pack, pactown runtime, registry bridges
โ”œโ”€โ”€ registry/           # iterun.registry.json catalog
โ”œโ”€โ”€ iterun_mcp/         # MCP server (`iterun-mcp`; nie `mcp/` โ€” konflikt PyPI)
โ”œโ”€โ”€ examples/           # 01โ€“19: prompt.txt + run.sh โ†’ generated/
โ”œโ”€โ”€ docs/               # API, REGISTRY, RUNTIME, DSL spec
โ”œโ”€โ”€ tests/e2e/
โ”œโ”€โ”€ config.py           # PACKAGE_FILENAME = "iterun.yaml"
โ””โ”€โ”€ README.md

Workflow

Prompt-first (recommended)

  1. Prompt โ†’ iterun generate "..." -o generated/
  2. Contracts โ†’ auto intract.yaml + service.testql.toon.yaml
  3. Plan โ†’ app.py, Dockerfile, plan.result.json
  4. Pack โ†’ stack.markpact.md (+ per-service README dla pactown)
  5. Execute โ†’ Docker (default) lub pactown (--runtime pactown)
  6. Verify โ†’ TestQL + HTTP (--verify); LLM repair przy bล‚ฤ™dzie (bez --verify brak regeneracji YAML)
  7. Registry โ†’ iterun.registry.json
  8. Session โ†’ session.json aggregates all steps

Manual / interactive

  1. Edit iterun.yaml or use shell new / load
  2. Plan โ†’ dry-run
  3. Suggest / iterate โ†’ AI or manual refinement
  4. ITERUN โ†’ approve (unless SKIP_ITERUN_CONFIRMATION)
  5. Execute โ†’ deploy + endpoint validation

Documentation:

Dokument Temat
docs/README.md Indeks dokumentacji
docs/INTENT_DSL_SPEC.md DSL, pipeline, STACK
docs/API.md REST, SDK, MCP
docs/REGISTRY.md Rejestr usล‚ug/artefaktรณw
docs/RUNTIME.md markpact + pactown

Validation & Auto-Fix

After container deployment, the system automatically:

  1. Waits for container startup (configurable STARTUP_WAIT)
  2. Validates all exposed endpoints with HTTP requests
  3. Detects issues like connection refused, timeouts, HTTP errors
  4. Auto-fixes common problems:
    • Missing __main__ block
    • Wrong port configuration
    • Missing dependencies
  5. Restarts container with fixes
  6. Re-validates until success or max iterations reached

Configuration

# In .env
VALIDATE_AFTER_EXECUTE=true
AUTO_FIX_ENABLED=true
MAX_FIX_ITERATIONS=3
STARTUP_WAIT=2
VALIDATION_TIMEOUT=10

Example Output

Execution Logs:
  [12:38:55] Container started: 8f35e0a2fb27
  [12:38:55] Waiting 2s for container startup...
  [12:38:57] โœ“ http://localhost:8002 โ†’ 200
  [12:38:57] โœ“ http://localhost:8002/ping โ†’ 200
  [12:38:57] โœ“ http://localhost:8002/health โ†’ 200
  [12:38:57] โœ“ All endpoints validated successfully
โœ“ Execution completed in 2.56s

Validation:
  โœ“ All endpoints validated

API Endpoints

Method Endpoint Description
POST /api/intents/{id}/validate Validate running container
GET /api/containers/{id}/logs Get container logs

License

Licensed under Apache-2.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iterun-0.1.12.tar.gz (81.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

iterun-0.1.12-py3-none-any.whl (95.1 kB view details)

Uploaded Python 3

File details

Details for the file iterun-0.1.12.tar.gz.

File metadata

  • Download URL: iterun-0.1.12.tar.gz
  • Upload date:
  • Size: 81.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for iterun-0.1.12.tar.gz
Algorithm Hash digest
SHA256 3e18785c6488e78a21279544fccfef1725f04bbe67089217694f632deae283dd
MD5 70cf4783ae61350bbaf2c80c261b3c7e
BLAKE2b-256 24fb6c1acf60c03c41d553ec10c82702279a8559bdf4f09cf7aabb495949ce7b

See more details on using hashes here.

File details

Details for the file iterun-0.1.12-py3-none-any.whl.

File metadata

  • Download URL: iterun-0.1.12-py3-none-any.whl
  • Upload date:
  • Size: 95.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for iterun-0.1.12-py3-none-any.whl
Algorithm Hash digest
SHA256 62828f93b79b3fe4fa2a85d0fdf7a89170fda62f2684e1447ee84bd6f4911777
MD5 ffc2a0dbcca41e50eb9190f1a2bbaf37
BLAKE2b-256 b4bc4e5f8e1b71c36b9a65a230878a78e825d664347f6fc7e1a242cc83ffcd07

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page