MITM proxy debugger & loop detector for AI Agents
Intercept every prompt. Catch every loop. Replay any step.
🌍 English · Русский
What is PromptShark?
PromptShark is a transparent local proxy that sits between your AI agent and the OpenAI API. It captures, logs, and visualizes every single request/response pair in a beautiful real-time dashboard — and automatically detects when your agent gets stuck in an infinite tool-calling loop.
One line to integrate. Zero code changes to your agent.
Just swapbase_url→http://localhost:8080/v1
At a Glance
Feature Matrix
| Category | Feature | Details |
|---|---|---|
| Proxy | Drop-in integration | Change one URL, keep your existing OpenAI SDK |
| Proxy | Streaming + non-streaming | Full support for stream: true and stream: false |
| Proxy | Token tracking | Per-step prompt_tokens / completion_tokens split |
| Proxy | USD Cost Tracker | Real-time per-step and per-session cost in dollars |
| Proxy | Latency measurement | Time-to-first-token (TTFT) displayed on each step |
| Detection | C++ Loop Detector | IPC-connected engine with configurable threshold |
| Detection | Configurable sensitivity | loop_config.txt — threshold & argument-ignoring |
| Debug | Time-Travel Replay | Edit & re-run from any step using cached responses |
| Debug | Interactive Diff View | Side-by-side diff of original vs. edited payload |
| Debug | Raw JSON Viewer | Collapsible request/response payloads per step |
| Testing | Chaos Mode | Toggle to inject fake 429 Rate Limit errors from UI |
| UI | Real-time WebSockets | Tokens stream live into the dashboard |
| UI | Session search & filter | Instant full-text search across all steps |
| UI | Auto-switching sessions | Dashboard follows the active agent run |
| Export | Markdown reports | One-click export of entire debug sessions |
| Export | Session management | Create, switch, and delete sessions from sidebar |
Installation
There are three ways to run PromptShark:
Option A: Docker (Recommended)
Option B: Pre-compiled Binaries
Download the latest .zip or .tar.gz for your OS (Windows, macOS, Linux) from the GitHub Releases page. Extract and run agent_supervisor (or agent_supervisor.exe).
Option C: Build from Source
1 · Build the C++ Core
mkdir -p build && cd build cmake .. && make
2 · Run the Proxy
cd proxy go build -o ../build/agent_supervisor . ../build/agent_supervisor
You will see:
____ __ _____ __ __
/ __ \_________ ____ ___ / /_/ ___// /_ ____ ______/ /__
/ /_/ / ___/ __ \/ __ '__ \/ __ \__ \/ __ \/ __ '/ ___/ //_/
/ ____/ / / /_/ / / / / / / /_/ /__/ / / / / /_/ / / / ,<
/_/ /_/ \____/_/ /_/ /_/ .___/____/_/ /_/\__,_/_/ /_/|_|
/_/
──────────────────────────────────────────────────
🦈 Version : 0.1.0
🌐 Dashboard : http://localhost:8080
📦 Database : ../db/promptshark.db
🎯 Target API : https://api.openai.com
🔗 Proxy URL : http://localhost:8080/v1
──────────────────────────────────────────────────
Point your OpenAI SDK base_url to the Proxy URL above.
Press Ctrl+C to stop.
Open http://localhost:8080 — the dashboard is ready.
3 · Point your Agent
Python
from openai import OpenAI client = OpenAI( base_url="http://localhost:8080/v1", api_key="sk-..." # forwarded transparently to OpenAI ) response = client.chat.completions.create( model="gpt-4o", messages=[{"role": "user", "content": "Hello!"}], stream=True )
Node.js
const OpenAI = require("openai"); const client = new OpenAI({ baseURL: "http://localhost:8080/v1", apiKey: "sk-..." }); const stream = await client.chat.completions.create({ model: "gpt-4o", messages: [{ role: "user", content: "Hello!" }], stream: true, });
Loop Detector Config
Edit loop_config.txt in the project root:
# Consecutive identical calls before triggering alert THRESHOLD=3 # Ignore arguments — match function name only IGNORE_ARGS=false
| Parameter | Default | Effect |
|---|---|---|
THRESHOLD |
3 |
Number of identical consecutive tool calls that trigger a loop alarm |
IGNORE_ARGS |
false |
When true, only function names are compared (arguments are stripped) |
⚙️ CLI Options
| Flag | Default | Description |
|---|---|---|
--port |
8080 |
HTTP server port |
--db |
../db/promptshark.db |
Path to SQLite database file |
--schema |
../db/schema.sql |
Path to schema.sql file |
--target |
https://api.openai.com |
Upstream LLM API URL |
Environment variables PORT and DB_PATH are also supported (flags take priority).
The server handles graceful shutdown: press Ctrl+C and it will finish in-flight requests, close the database, and exit cleanly.
Tech Stack
| Layer | Technology | Role |
|---|---|---|
| Proxy Server | Go 1.22+ | HTTP reverse proxy, WebSocket hub, REST API, CLI |
| Loop Engine | C++ 17 | Real-time tool-call hashing & pattern detection via stdin/stdout IPC |
| Storage | SQLite (WAL) | Embedded session & step persistence, zero-config |
| Dashboard | HTML + Tailwind + JS | Single-file embedded UI served by Go via go:embed |
| Diff Engine | jsdiff | Client-side line-by-line diff rendering for Time-Travel |
Roadmap
- Configurable loop rules via YAML (regex patterns, token budgets)
- Ollama / Anthropic Claude API support
- Multi-agent message flow visualizer (network graph)
Что такое PromptShark?
PromptShark — это прозрачный локальный прокси, который встает между вашим ИИ-агентом и API OpenAI. Он перехватывает, логирует и визуализирует каждую пару запрос/ответ в красивом дашборде в реальном времени — и автоматически обнаруживает, если агент попал в бесконечный цикл вызова инструментов.
Одна строка для интеграции. Ноль изменений в коде агента.
Просто заменитеbase_url→http://localhost:8080/v1
Обзор возможностей
Матрица возможностей
| Категория | Функция | Подробности |
|---|---|---|
| Прокси | Drop-in интеграция | Измените один URL, оставьте текущий OpenAI SDK |
| Прокси | Стриминг + обычные запросы | Полная поддержка stream: true и stream: false |
| Прокси | Трекинг токенов | Разбивка prompt_tokens / completion_tokens на каждый шаг |
| Прокси | Калькулятор стоимости | Цена каждого шага и всей сессии в долларах в реальном времени |
| Прокси | Замер задержки | Время ответа API (TTFT) на каждом шаге |
| Детекция | C++ Loop Detector | Движок через IPC с настраиваемым порогом |
| Детекция | Гибкая настройка | loop_config.txt — порог срабатывания и игнорирование аргументов |
| Отладка | Time-Travel Replay | Редактируй и перезапускай с любого шага через кэш |
| Отладка | Интерактивный Diff | Визуальное сравнение оригинала и отредактированного промпта |
| Отладка | Raw JSON Viewer | Сворачиваемые JSON запроса/ответа для каждого шага |
| Тестирование | Chaos Mode | Тумблер для инъекции фейковых 429 Rate Limit ошибок из UI |
| UI | WebSocket реалтайм | Токены стримятся в дашборд в реальном времени |
| UI | Поиск и фильтрация | Мгновенный полнотекстовый поиск по всем шагам |
| UI | Авто-переключение | Дашборд следует за активным запуском агента |
| Экспорт | Markdown отчёты | Экспорт всей сессии одним кликом |
| Экспорт | Управление сессиями | Создание, переключение и удаление из сайдбара |
Установка
Есть три способа запустить PromptShark:
Вариант А: Docker (Рекомендуется)
Вариант Б: Готовые бинарники
Скачайте актуальный .zip или .tar.gz для вашей ОС (Windows, macOS, Linux) со страницы GitHub Releases. Распакуйте и запустите agent_supervisor (или agent_supervisor.exe).
Вариант В: Сборка из исходников
1 · Сборка C++ ядра
mkdir -p build && cd build cmake .. && make
2 · Запуск прокси
cd proxy go build -o ../build/agent_supervisor . ../build/agent_supervisor
Вы увидите:
____ __ _____ __ __
/ __ \_________ ____ ___ / /_/ ___// /_ ____ ______/ /__
/ /_/ / ___/ __ \/ __ '__ \/ __ \__ \/ __ \/ __ '/ ___/ //_/
/ ____/ / / /_/ / / / / / / /_/ /__/ / / / / /_/ / / / ,<
/_/ /_/ \____/_/ /_/ /_/ .___/____/_/ /_/\__,_/_/ /_/|_|
/_/
──────────────────────────────────────────────────
🦈 Version : 0.1.0
🌐 Dashboard : http://localhost:8080
📦 Database : ../db/promptshark.db
🎯 Target API : https://api.openai.com
🔗 Proxy URL : http://localhost:8080/v1
──────────────────────────────────────────────────
Point your OpenAI SDK base_url to the Proxy URL above.
Press Ctrl+C to stop.
Откройте http://localhost:8080 — дашборд готов к работе.
3 · Подключите агента
Python
from openai import OpenAI client = OpenAI( base_url="http://localhost:8080/v1", api_key="sk-..." # прозрачно перенаправляется в OpenAI ) response = client.chat.completions.create( model="gpt-4o", messages=[{"role": "user", "content": "Привет!"}], stream=True )
Node.js
const OpenAI = require("openai"); const client = new OpenAI({ baseURL: "http://localhost:8080/v1", apiKey: "sk-..." }); const stream = await client.chat.completions.create({ model: "gpt-4o", messages: [{ role: "user", content: "Привет!" }], stream: true, });
Настройка детектора циклов
Отредактируйте loop_config.txt в корне проекта:
# Количество идентичных вызовов подряд до срабатывания тревоги THRESHOLD=3 # Игнорировать аргументы — сравнивать только имя функции IGNORE_ARGS=false
| Параметр | По умолчанию | Эффект |
|---|---|---|
THRESHOLD |
3 |
Сколько одинаковых последовательных вызовов считать зацикливанием |
IGNORE_ARGS |
false |
Если true, сравниваются только имена функций (аргументы игнорируются) |
⚙️ Параметры CLI
| Флаг | По умолчанию | Описание |
|---|---|---|
--port |
8080 |
Порт HTTP-сервера |
--db |
../db/promptshark.db |
Путь к файлу базы данных SQLite |
--schema |
../db/schema.sql |
Путь к файлу схемы |
--target |
https://api.openai.com |
URL upstream LLM API |
Также поддерживаются переменные окружения PORT и DB_PATH (флаги имеют приоритет).
Сервер поддерживает Graceful Shutdown: нажмите Ctrl+C, и он корректно завершит текущие запросы, закроет базу данных и выведет ✅ Goodbye!.
Технологический стек
| Слой | Технология | Роль |
|---|---|---|
| Proxy Server | Go 1.22+ | HTTP reverse proxy, WebSocket хаб, REST API, CLI |
| Loop Engine | C++ 17 | Хэширование и детекция паттернов через stdin/stdout IPC |
| Хранилище | SQLite (WAL) | Встроенная база сессий и шагов, без настройки |
| Дашборд | HTML + Tailwind + JS | Единый встроенный UI через go:embed |
| Diff Engine | jsdiff | Клиентский построчный diff для Time-Travel |
Дорожная карта
- Конфигурация правил детектора через YAML (regex паттерны, бюджеты токенов)
- Поддержка Ollama / Anthropic Claude API
- Визуализатор потоков мультиагентных систем (граф сети)
[MIT License](LICENSE) — use it, fork it, ship it.






























