Stack Overflow for the AI era: capture validated problem-solution pairs from AI debugging sessions, index them in Elasticsearch, and feed them back into future LLM sessions so nobody has to re-solve the same bug twice.
Winner of Best Use of Elastic Agents at CalHacks 12.0.
Every day, developers solve real bugs inside AI chat sessions, and then the fix disappears into an unsearchable conversation log. The next person (or the next LLM session) starts from zero, burning tokens and time rediscovering the same solution.
AgentOverflow turns those one-off debugging sessions into a durable, searchable knowledge base:
- Capture: share a solved Claude conversation from a Chrome extension side panel.
- Extract: the backend scrapes the share link and uses Claude to distill it into a structured solution JSON (problem, root cause, code snippets, error messages, attempted fixes, deep technical context, tags).
- Validate: the author adds human context, and a second LLM pass merges it into a final, polished post.
- Index: the post is stored in Elasticsearch, searchable by the community through a React web app.
- Retrieve: when you're stuck, "Find Solution" queries an Elastic Agent over the knowledge base and copies a ready-to-paste solution to your clipboard. An MCP server (on the
mcpbranch) exposes the same knowledge base directly to LLMs and agents.
┌──────────────────┐ share link ┌─────────────────────────┐
│ Chrome Extension │ ──────────────► │ Pipeline Server (:3001) │
│ (side panel on │ │ Playwright scraper │
│ claude.ai) │ ◄────────────── │ Claude via Lava API │
└──────────────────┘ solution JSON └───────────┬─────────────┘
│ finalized post
┌──────────────────┐ ▼
│ React Web App │ /api ┌─────────────────────────┐
│ (:8080) │ ──────► │ API Server (:3002) │
│ browse/search/ │ │ posts, search, auth │
│ submit posts │ └───────────┬─────────────┘
└──────────────────┘ │
▼
┌──────────────────┐ MCP (stdio) ┌─────────────────────────┐
│ LLMs / Agents │ ──────────────► │ Elasticsearch + │
│ (mcp branch) │ │ Elastic Agent Builder │
└──────────────────┘ └─────────────────────────┘
- Chrome extension (
extension/): Manifest V3 side panel that runs onclaude.ai. Two actions:- Share Solution: sends the current conversation's share link to the backend for extraction, then hands off to the web app for human review and publishing.
- Find Solution: extracts your current problem and queries the knowledge base; the answer is copied to your clipboard so you can paste it straight back into the conversation.
- Pipeline server (
backend/server.js, port 3001): Express server that:- Scrapes Claude share pages with headless Playwright (with anti-bot-detection measures and Cloudflare handling).
- Calls Claude 3.5 Sonnet through the Lava API forwarding proxy to extract a strict solution schema from the raw conversation, in either
share(solved) orfind(unsolved) mode. - Runs a second finalization pass that merges the extracted JSON with the author's human context into the final post.
- Answers
POST /api/find-solutionby conversing with an Elastic Agent Builder agent (claude_solution_finder) over the indexed knowledge base. - Includes an LRU cache for repeated scrapes, rate limiting, and usage tracking.
- API server (
backend/src/server.js, port 3002): Express REST API backed by Elasticsearch (@elastic/elasticsearch):/api/search: multi-field search with boosted relevance (title^3,problem^2,solution^2, ...), tag/category filters, trending./api/posts: create, update, like, and comment on posts (indices:posts_ai,user_post_map,post_edges)./api/auth: JWT-based register/login with bcrypt.- Hardened with Helmet, CORS, compression, and rate limiting.
- Web app (
frontend/): React + TypeScript + Vite, styled with Tailwind CSS and shadcn/ui (Radix primitives), with TanStack Query for data fetching. Pages for browsing, searching, trending, tags, leaderboard, post detail, and submitting posts. - MCP server (
mcpbranch): a TypeScript Model Context Protocol server (@modelcontextprotocol/sdk, stdio transport) that lets any MCP-capable LLM or agent read from and write to the knowledge base.
Everything revolves around a portable JSON schema for a solved (or open) problem:
{
"solution_id": "...",
"share_link": "https://claude.ai/share/...",
"type": "share | find",
"title": "Fix React useEffect Infinite Loop with useRef",
"problem": "...",
"context": "...",
"technical_description": "...",
"solution": "...",
"summary": "...",
"error_messages": ["..."],
"attempted_solutions": ["..."],
"code_snippets": [{ "description": "...", "code": "..." }],
"technical_deep_context": "...",
"tags": ["react", "hooks"],
"created_at": "ISO 8601"
}The technical_deep_context field is deliberately exhaustive (versions, environment, stack, debugging steps taken): it exists purely to improve future similarity matching.
| Layer | Technology |
|---|---|
| Extension | Chrome Manifest V3, Side Panel API |
| Pipeline | Node.js, Express, Playwright, Lava API → Claude 3.5 Sonnet |
| Search | Elasticsearch (Elastic Cloud), Elastic Agent Builder |
| API | Express, JWT + bcrypt, Helmet, express-rate-limit, LRU cache |
| Frontend | React 18, TypeScript, Vite, Tailwind CSS, shadcn/ui (Radix), TanStack Query |
| MCP | TypeScript, @modelcontextprotocol/sdk, Zod, undici (on the mcp branch) |
- Node.js >= 18
- An Elastic Cloud deployment with an API key
- A Lava forward token (used to proxy Anthropic API calls)
cd backend
npm installCreate backend/.env:
# Pipeline server (server.js, port 3001)
LAVA_FORWARD_TOKEN=your_lava_token
ELASTICSEARCH_ENDPOINT=https://your-deployment.kb.us-central1.gcp.elastic.cloud:443
ELASTICSEARCH_API_KEY=your_kibana_api_key
# API server (src/server.js, port 3002)
ELASTIC_NODE=https://your-deployment.es.us-central1.gcp.elastic.cloud:443
ELASTIC_API_KEY=your_elasticsearch_api_key
API_PORT=3002
FRONTEND_URL=http://localhost:8080Create the Elasticsearch indices, then start both servers:
node src/setup-indices.js # creates posts_ai, user_post_map, post_edges
npm run dev:all # pipeline server (3001) + API server (3002)For "Find Solution" to work, your Elastic deployment needs an Agent Builder agent named claude_solution_finder (see FIND_SOLUTION_SETUP.md).
cd frontend
npm install
npm run dev # http://localhost:8080, proxies /api to :3002- Open
chrome://extensions, enable Developer mode. - Click Load unpacked and select the
extension/folder. - Open a conversation on
claude.ai, open the side panel, and use Share Solution / Find Solution.
The DOCKER file builds the pipeline server on the official Playwright image:
docker build -f DOCKER -t agentoverflow-backend ./backendThe mcp branch contains a standalone MCP server that exposes the knowledge base to any MCP-capable client (Claude Desktop, agents, IDEs). It runs over stdio and forwards requests to the AgentOverflow mediator API, validating everything with Zod.
Tools:
agentoverflow_search: search for similar questions/answers, with optional structured context (error lines, language, files, tags) andtopK.agentoverflow_get_answer: fetch a full answer body in Markdown by ID.agentoverflow_submit: write a new question or answer back into the knowledge base.
git checkout mcp
npm install
API_BASE_URL=https://your-mediator-api npm run devThis closes the loop: solutions captured from past AI debugging sessions get injected directly into future LLM contexts, so agents can cite proven fixes instead of guessing.
backend/ Express servers (pipeline + API), Playwright scraper, index setup
frontend/ React + Vite web app
extension/ Chrome MV3 side panel extension
supabase-schema.sql Relational schema (profiles, posts, comments, likes) for a Postgres/Supabase variant
FIND_SOLUTION_SETUP.md Elastic agent setup guide for the Find Solution flow
DOCKER Dockerfile for the pipeline server
Branches: main (app + pipeline), mcp (MCP server), plus feature branches for the extension and frontend.
MIT