Universal LLM pipeline tuning workbench — systematically optimize prompts, models, and inference parameters through cached experiments, pluggable scoring, and agent-driven sweeps via MCP.
Find a file
John Lightner 7ef116e2f9 MAESTRO: Create backend/models.py with all 8 SQLAlchemy ORM models from spec
Define User, Project, Experiment, Run, StageResult, Score, ResponseCache,
and WebhookConfig with UUID primary keys, JSON columns, enum types
(ExperimentStatus, RunStatus), full relationship cascades, and indexes.
Uses sqlalchemy.JSON (not JSONB) for SQLite compatibility in single-container
mode. 16 tests added covering table creation, CRUD, uniqueness constraints,
default values, and cascade deletes — all passing.
2026-04-07 01:49:10 -05:00
alembic MAESTRO: Create multi-stage Dockerfile, nginx.conf, and frontend/backend scaffolding 2026-04-07 01:44:52 -05:00
Auto Run Docs MAESTRO: Create backend/models.py with all 8 SQLAlchemy ORM models from spec 2026-04-07 01:49:10 -05:00
backend MAESTRO: Create backend/models.py with all 8 SQLAlchemy ORM models from spec 2026-04-07 01:49:10 -05:00
docker MAESTRO: Create multi-stage Dockerfile, nginx.conf, and frontend/backend scaffolding 2026-04-07 01:44:52 -05:00
frontend MAESTRO: Create multi-stage Dockerfile, nginx.conf, and frontend/backend scaffolding 2026-04-07 01:44:52 -05:00
.env.example MAESTRO: Add .env.example with all environment variables from spec 2026-04-07 01:41:22 -05:00
.gitignore MAESTRO: Initialize repository with README, .gitignore, and project files 2026-04-07 01:39:18 -05:00
alembic.ini MAESTRO: Create multi-stage Dockerfile, nginx.conf, and frontend/backend scaffolding 2026-04-07 01:44:52 -05:00
CLAUDE.md MAESTRO: Initialize repository with README, .gitignore, and project files 2026-04-07 01:39:18 -05:00
docker-compose.yml MAESTRO: Update docker-compose.yml with corrected XPLTD conventions 2026-04-07 01:42:58 -05:00
env.example MAESTRO: Initialize repository with README, .gitignore, and project files 2026-04-07 01:39:18 -05:00
promptlooper-spec.md MAESTRO: Initialize repository with README, .gitignore, and project files 2026-04-07 01:39:18 -05:00
README.md MAESTRO: Initialize repository with README, .gitignore, and project files 2026-04-07 01:39:18 -05:00

PromptLooper

License: AGPL-3.0 Status: Alpha

The one who loops prompts — a universal LLM pipeline tuning workbench.

PromptLooper is a self-hosted tool for systematically optimizing LLM prompts, model selection, and inference parameters. It runs experiments across prompt x model x parameter combinations, caches every response, scores results against pluggable evaluation functions, and surfaces the best configurations through a real-time observability dashboard with human-in-the-loop steering.

It ships as a single Docker container (SQLite mode) for zero-config quickstart, or a Docker Compose stack (Postgres + Redis) for production use. An MCP server enables any AI agent to drive PromptLooper programmatically — creating experiments, running sweeps, and reading results without human intervention.

Quick Start

Single Container (zero dependencies)

docker run -p 8400:8400 -v promptlooper-data:/data ghcr.io/xpltdco/promptlooper

Open http://localhost:8400 — you'll be prompted to create an admin account on first boot.

Production (Docker Compose)

git clone git@git.xpltd.co:xpltdco/promptlooper.git
cd promptlooper
cp .env.example .env
# Edit .env — set POSTGRES_PASSWORD and JWT_SECRET at minimum
docker compose up -d

Features

  • Systematic experimentation — grid, random, and guided sweeps across prompt x model x parameter space
  • Response caching — SHA-256 deduplication means re-runs cost zero tokens
  • Pluggable scoring — embedding similarity, format compliance, keyword presence, LLM-as-judge, human rating, custom webhooks
  • Real-time dashboard — live progress, leaderboard, side-by-side comparison, steering controls
  • MCP server — AI agents can create experiments, run sweeps, and export results programmatically
  • Single-container mode — SQLite + in-process queue when no external dependencies are configured

Development

# Start backing services
docker compose up -d promptlooper-db promptlooper-redis

# Backend
cd backend && pip install -r requirements.txt
alembic upgrade head
uvicorn main:app --reload --host 0.0.0.0 --port 8000

# Frontend (separate terminal)
cd frontend && npm install && npm run dev

Testing

cd backend && pytest
cd frontend && npm test

License

AGPL-3.0