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 b5b85df2e5 MAESTRO: Style pass — dark mode, shared Layout with nav sidebar, responsive improvements, animations
- Enable Tailwind darkMode: 'class' with system preference detection
- Add shared Layout component with sidebar navigation, dark mode toggle, and mobile hamburger menu
- Add global CSS: focus-visible rings, smooth transitions, custom scrollbar, entrance animations
- Update all authenticated pages to use Layout wrapper via App.tsx route restructure
- Responsive improvements: stack headers on mobile, responsive padding, modal safe areas
- Add fade-in animations for stat cards and scale-in for modals
- 11 tests added for Layout component. All 430 tests pass.
2026-04-07 13:56:05 -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: Add comprehensive engine test suite achieving 90% coverage 2026-04-07 03:45:24 -05:00
backend MAESTRO: Add comprehensive engine test suite achieving 90% coverage 2026-04-07 03:45:24 -05:00
docker MAESTRO: Add entrypoint migrations, worker config, and stack integration tests 2026-04-07 02:09:56 -05:00
frontend MAESTRO: Style pass — dark mode, shared Layout with nav sidebar, responsive improvements, animations 2026-04-07 13:56:05 -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