Project Info
We’re bringing back our favorite developer tool — Stack Overflow — but rebuilt for the LLM and agent era. Developers waste time and tokens re-solving the same hallucination-driven issues. AgentOverflow captures, validates, and reuses real solutions — so you can break the spiral and ship faster.
Inspiration
Devs burn time and tokens re-solving identical LLM failures; chat histories vanish, solutions don’t persist. Prompt spirals from hallucinations derail debugging and waste compute. We wanted a portable, structured format so that once a problem is solved, the fix lives forever. What It Does (Three Buckets) 🧩 1) Share JSON One-click “Share Solution” from a Claude share (or any public page). Scrapes, extracts, and assembles a Share Solution JSON — a canonical schema for storing LLM problem–solution pairs. LAVA validates and enforces structure (title, problem, context, technical details, code, tags). User adds short human context in our web app → LAVA re-checks summary alignment → stored + indexed in Elastic. 🔍 2) Find Solution When you’re stuck, click Find Solution. We scrape your current conversation, build a “query JSON,” and run a hybrid Elastic search over validated fixes. Returns ranked, community-verified solutions — you can copy the fix or reuse the exact prompt that worked. ⚙️ 3) Modular Context Protocol (MCP) Our MCP layer pipes structured solutions directly into live LLM sessions. Injects high-signal, low-noise context (code, logs, configs, prior fixes) at runtime. Turns LLMs from passive responders into context-aware problem solvers. How We Built It Chrome Extension (MV3 Side Panel) → captures URL and user action. Node.js Backend → orchestrates scraping and calls LAVA. Playwright Scraper → merges inline JSON (NEXT_DATA), DOM + code, shadow DOM, CDP snapshot; falls back to Jina/Readability; optional Bright Data proxy. Normalizer → canonical URLs, solution_id = sha256(canonical_url), de-dupe, preserve raw code. LAVA (Assembler → Validator) → populates schema, enforces required keys, integrates human-context correction. Web App → displays JSON, gathers human validation, saves to DB, indexes to Elasticsearch. MCP Server → injects stored JSON data into future LLM sessions in real time. Challenges We Ran Into Scraping Claude pages — dynamic Next.js + shadow DOM + iframes made extraction tricky. Canonicalization & de-dupe across mirrored URLs. Schema strictness — ensuring no fabricated fields, consistent arrays, and raw code preservation. MV3 plumbing — extension → backend → web app CORS flow. Elastic tuning — balancing vector + keyword recall without over-matching. Accomplishments We’re Proud Of Reliable multi-extractor pipeline that preserves full code context. Seamless extension → web app → DB integration. LAVA’s dual-phase validation (assembler + human-context correction). The Share Solution JSON — a portable format for AI problem–solution memory. Functional Find Solution loop: stuck → match → copy fix → unblocked in seconds. MCP turning static knowledge into live agent context. What We Learned LLM output isn’t reusable knowledge until you add structure and validation. Guardrails prevent hallucination, not just fine-tuning. Human context + schema validation beats auto-summarization. Canonical URLs + hashes create a single source of truth. Small UX choices (side panel, copy button, “open in web app”) dramatically improve adoption. What’s Next for AgentOverflow Team Repos: org-scoped libraries of problem–solution pairs with permissions, versioning, ownership. Better Ranking: success feedback, solve-rate metrics, evaluation signals. Deeper Elastic Integration: vector on code + technical_deep_context, framework-specific synonyms. More Input Channels: ingest Slack, Discord, GitHub issues into the same schema. Quality Gates: automatic spec/API validation before publishing. SDK + API: let any LLM or agent read/write Share Solution JSONs. Share Solution JSON Schema
AgentOverflow
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.
The Problem
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.
How It Works
┌──────────────────┐ 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 │
└──────────────────┘ └─────────────────────────┘
Components
- 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.
The Solution Schema
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.
Tech Stack
| 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) |
Getting Started
Prerequisites
- Node.js >= 18
- An Elastic Cloud deployment with an API key
- A Lava forward token (used to proxy Anthropic API calls)
1. Backend
cd backend
npm install
Create 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:8080
Create 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).
2. Frontend
cd frontend
npm install
npm run dev # http://localhost:8080, proxies /api to :3002
3. Chrome Extension
- 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.
Docker
The DOCKER file builds the pipeline server on the official Playwright image:
docker build -f DOCKER -t agentoverflow-backend ./backend
MCP Server
The 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 dev
This 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.
Repository Layout
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.
License
MIT
Analysis
View
Metric
- 18
- 7
- 7
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- ExpressIn code
- HTMLIn code
- JavaScriptIn code
- ReactIn code
- SQLIn code
- Tailwind CSSIn code
- TypeScriptIn code
- Google GeminiClaimed
- Node.jsClaimed
- PythonClaimed
8 of 11 appear in the indexed code. 3 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
- Claude CodeCommits
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
459 KB
Source files
108
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
Ishaannarang22/agentoverflow
132 files · 1.0 MB · @ 88a3a4e
Structure
Interface
74 files · 56%Screens, components and styles rendered to the user.
API & routing
4 files · 3%Request entry points: routes, handlers and controllers.
Application logic
27 files · 20%Domain rules, services and shared utilities.
Data & schema
1 file · 1%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript73%
- JavaScript19%
- Markdown4%
- SQL2%
- HTML2%
- CSS1%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
frontend/package.json
npm · 67- @hookform/resolvers
- @radix-ui/react-accordion
- @radix-ui/react-alert-dialog
- @radix-ui/react-aspect-ratio
- @radix-ui/react-avatar
- @radix-ui/react-checkbox
- @radix-ui/react-collapsible
- @radix-ui/react-context-menu
- @radix-ui/react-dialog
- @radix-ui/react-dropdown-menu
- @radix-ui/react-hover-card
- @radix-ui/react-label
- @radix-ui/react-menubar
- @radix-ui/react-navigation-menu
- @radix-ui/react-popover
- @radix-ui/react-progress
- @radix-ui/react-radio-group
- @radix-ui/react-scroll-area
- +49 more
backend/package.json
npm · 16- @elastic/elasticsearch
- bcryptjs
- compression
- cookie-parser
- cors
- dotenv
- express
- express-rate-limit
- express-validator
- helmet
- jsonwebtoken
- lru-cache
- morgan
- playwright
- +2 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
Feature verification
Chrome extension side panel (Share/Find)Verified
Chrome Extension (MV3 Side Panel) captures URL and user action; side panel on claude.ai with Share Solution and Find Solution buttons
Claimed on readmehigh confidenceextension/manifest.json:20— Manifest V3 side_panel config with content script matching claude.aiextension/sidepanel.js:6— shareBtn/findBtn click handlers drive the Share/Find flows
Docker build for pipeline serverVerified
The DOCKER file builds the pipeline server on the official Playwright image
Claimed on readmehigh confidenceDOCKER:1— Dockerfile FROM mcr.microsoft.com/playwright:v1.48.2-noble, runs node server.js
Elasticsearch indexing of validated solutionsVerified
Post is stored in Elasticsearch, searchable by the community through a React web app
Claimed on readmehigh confidencebackend/src/setup-indices.js:1— creates posts_ai, user_post_map, post_edges indicesbackend/src/routes/posts.js:7— POST / route indexes new posts into Elasticsearch
Find Solution via Elastic Agent BuilderVerified
Find Solution queries an Elastic Agent Builder agent (claude_solution_finder) over the indexed knowledge base and copies a ready-to-paste solution
Claimed on readmehigh confidencebackend/server.js:488— /api/find-solution routebackend/server.js:561— queryElasticsearchAgent POSTs to {ES_ENDPOINT}/api/agent_builder/converse with agent_id 'claude_solution_finder'extension/sidepanel.js:68— sidepanel calls /api/find-solution and copies the returned solution to clipboard with navigator.clipboard.writeText
JWT auth (register/login) with bcryptVerified
/api/auth: JWT-based register/login with bcrypt
Claimed on readmehigh confidencebackend/src/routes/auth.js:43— register route hashes password with bcrypt and signs a JWTbackend/src/routes/auth.js:154— login route verifies bcrypt hash and signs JWT
LRU cache, rate limiting, hardened API (Helmet, compression)Verified
Includes an LRU cache for repeated scrapes, rate limiting, and usage tracking; API hardened with Helmet, CORS, compression, and rate limiting
Claimed on readmehigh confidencebackend/server.js:28— express-rate-limit configured and applied globallybackend/server.js:35— LRUCache instance used to cache process-conversation results by url-action key
Post CRUD, likes, and comments APIVerified
/api/posts: create, update, like, and comment on posts (indices: posts_ai, user_post_map, post_edges)
Claimed on readmehigh confidencebackend/src/routes/posts.js:7— POST / creates a postbackend/src/routes/posts.js:270— POST /:id/likebackend/src/routes/posts.js:359— POST /:id/comments
React + TypeScript + Vite web app with pages for browse/search/trending/tags/leaderboard/submitVerified
Web app (frontend/): React + TypeScript + Vite, Tailwind, shadcn/ui, TanStack Query, pages for browsing, searching, trending, tags, leaderboard, post detail, submitting posts
Claimed on readmehigh confidencefrontend/src/pages/Trending.tsx:1— dedicated Trending pagefrontend/src/pages/Leaderboard.tsx:1— dedicated Leaderboard pagefrontend/src/pages/SubmitPost.tsx:1— dedicated submit-post page for human-context review flow
Share Solution capture and extraction pipelineVerified
One-click Share Solution scrapes a Claude share link, extracts, and assembles a Share Solution JSON via LAVA/Claude
Claimed on Devposthigh confidenceextension/sidepanel.js:163— share flow POSTs share link to /api/process-conversation with action=sharebackend/server.js:407— process-conversation route scrapes the URL then calls callLavaAPI to produce the structured schemabackend/scraper.js:8— Playwright chromium launch scrapes the Claude share page text
Human context correction pass (dual-phase validation)Code-supported
User adds human context in the web app, LAVA re-checks summary alignment, stored and indexed
Claimed on Devpostmedium confidencebackend/server.js:220— callLavaFinalizationAPI merges extractedData and humanContext into a final post via a second Claude call, but no explicit summary-alignment re-check logic beyond the merge promptbackend/server.js:348— /api/finalize-post route wires the extension/webapp human-context input to this second LLM pass
Hybrid Elastic search (keyword + vector)Code-supported
Runs a hybrid Elastic search over validated fixes; Deeper Elastic Integration item mentions vector on code and technical_deep_context
Claimed on Devpostmedium confidencebackend/src/routes/search.js:39— multi_match keyword search across boosted fields (title^3, problem^2, etc.) with fuzziness; no dense_vector/knn query found anywhere in backend, so this is keyword search, not a hybrid vector+keyword search
LAVA schema assembler and validator (strict, no fabricated fields)Code-supported
LAVA (Assembler to Validator) populates schema, enforces required keys, no fabricated fields, consistent arrays, raw code preservation
Claimed on Devpostmedium confidencebackend/server.js:44— shareInstructions prompt enumerates required schema fields and instructs Claude to follow it exactly, but there is no code-level schema validator or rejection logic after the LLM call, just JSON.parse of the model output
Supabase/Postgres relational schema variantCode-supported
supabase-schema.sql: Relational schema (profiles, posts, comments, likes) for a Postgres/Supabase variant
Claimed on readmemedium confidencesupabase-schema.sql— file exists in repo root as described, but nothing in backend/frontend code references or connects to Supabase/Postgres, so it appears to be an unused alternate schema rather than a wired-up path
Advanced multi-extractor scraper (NEXT_DATA, shadow DOM, CDP snapshot, Jina/Readability fallback, Bright Data proxy)Claimed only
Playwright Scraper merges inline JSON (NEXT_DATA), DOM + code, shadow DOM, CDP snapshot; falls back to Jina/Readability; optional Bright Data proxy
Claimed on Devposthigh confidenceNormalizer with canonical URL and sha256 solution_id, de-dupeClaimed only
Normalizer produces canonical URLs, solution_id = sha256(canonical_url), de-dupe, preserve raw code
Claimed on Devposthigh confidenceMCP server injecting solutions into live LLM sessionsBlocked
Modular Context Protocol (MCP) layer pipes structured solutions into live LLM sessions; MCP server on the mcp branch with agentoverflow_search, agentoverflow_get_answer, agentoverflow_submit tools
Claimed on readmehigh confidence
An AI agent derived these features from the project’s Devpost page and readme, then searched the code for each one. Verified features are backed by cited code; claimed-only features had no supporting code, which is not by itself proof a feature is missing.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.