Status snapshot · 2 June 2026

Forja

Governed control plane for LLM agents and models — registry, guardrails, HITL, training orchestration, and promotion gates.

Product direction

Forja is evolving from an agent governance runtime into a full model lifecycle forge: define agents and policies (Studio), validate with guardrails and human review (Runs, Approvals), orchestrate external fine-tuning (Azure ML), evaluate on canonical scenarios, and promote draft versions to production (Promotions).

StudioAgents, policies, datasets, base models (YAML)
ValidationRuns, guardrails, runtime HITL
TrainingAzure ML SDK or mock/stub backends
GovernancePost-train eval gate + promotion HITL

Completed in this iteration

Phase 0 — Professional UI (English)

Phase A — MLOps orchestration (foundation)

Phase B — Eval gate and governance promotion

Azure ML SDK integration

Already in place (MVP core)

How to run the project

Option 1 — Docker (recommended)

cp .env.example .env
docker compose up

Open http://localhost:8000. Default LLM_PROVIDER=mock works without API keys.

Option 2 — Local Python

cp .env.example .env
python -m venv venv
source venv/bin/activate
pip install -r core/requirements.txt
pip install pytest pytest-asyncio ruff mypy freezegun

cd core/src
uvicorn forja_core.main:app --reload --host 0.0.0.0 --port 8000

Run from repo root with PYTHONPATH=core/src if needed:

PYTHONPATH=core/src uvicorn forja_core.main:app --reload --port 8000

Tests

source venv/bin/activate
./venv/bin/pytest tests/unit -q          # unit
./venv/bin/pytest tests/integration -q   # integration (slower)
make lint                                 # ruff + mypy (if tools on PATH)

Quick demo (3 steps)

  1. Agents/agents → inspect incident_analyzer
  2. Runs/run → scenario 01_sip_registration_drop (may trigger Approvals)
  3. Approvals / Promotions/approvals and /promotions

Key API endpoints

AreaEndpoint
HealthGET /health
Invoke agentPOST /api/agents/{name}/invoke
Training runPOST /api/training/runs
Post-train evalPOST /api/training/runs/{id}/evaluate
PromotionPOST /api/promotions.../approve

Next steps (when you resume)

Documentation