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 f2e6baa56f MAESTRO: Implement PromptEditor component with Jinja2 syntax highlighting, variable sidebar, and preview
Built standalone PromptEditor with transparent-textarea overlay for syntax
highlighting of Jinja2 expressions, statements, and comments. Includes
clickable variable sidebar for insertion and preview panel with sample data
substitution. Integrated into ExperimentPage PipelineStageCard. 27 tests added.
2026-04-07 02:56:48 -05:00
alembic MAESTRO: Set up Alembic with initial migration for all 8 ORM models 2026-04-07 01:52:03 -05:00
Auto Run Docs MAESTRO: Implement PromptEditor component with Jinja2 syntax highlighting, variable sidebar, and preview 2026-04-07 02:56:48 -05:00
backend MAESTRO: Implement BaseScorer abstract class with sync/async scoring interface 2026-04-07 02:55:05 -05:00
docker MAESTRO: Add entrypoint migrations, worker config, and stack integration tests 2026-04-07 02:09:56 -05:00
frontend MAESTRO: Implement PromptEditor component with Jinja2 syntax highlighting, variable sidebar, and preview 2026-04-07 02:56:48 -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: Set up Alembic with initial migration for all 8 ORM models 2026-04-07 01:52:03 -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: Add entrypoint migrations, worker config, and stack integration tests 2026-04-07 02:09:56 -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 8000:8000 -v promptlooper-data:/data ghcr.io/xpltdco/promptlooper

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

In single-container mode, the API serves the built frontend as static files at the root. Database migrations run automatically on startup.

Production (Docker Compose)

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

Open http://localhost:8400 — nginx proxies the frontend (port 80 → 8400) and API (/api/ → port 8000).

Services started:

  • promptlooper-db — PostgreSQL 16 on port 5434
  • promptlooper-redis — Redis 7
  • promptlooper-api — FastAPI + Alembic migrations (auto-runs on startup)
  • promptlooper-worker — Celery worker for experiment execution
  • promptlooper-web — Nginx reverse proxy on port 8400

First boot: Navigate to http://localhost:8400/setup to create the admin account.

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