{"signals":["untrusted input"],"relaxed":[],"stackUrl":"/api/stack?harness=claude-code&model=anthropic&framework=langgraph&memory=mem0&retrieval=pgvector&search=exa&tools=mcp&security=iron-proxy&security=lakera&observability=promptfoo&runtime=docker-compose","picks":[{"layer":"harness","layerName":"Harness","choices":[{"id":"claude-code","name":"Claude Code","url":"https://claude.com/claude-code","tagline":"Anthropic's coding agent — terminal, IDE and SDK, with hooks, skills and MCP built in."}],"choice":{"id":"claude-code","name":"Claude Code","url":"https://claude.com/claude-code","tagline":"Anthropic's coding agent — terminal, IDE and SDK, with hooks, skills and MCP built in."},"confidence":"low","matchedOn":[],"alternatives":["Claude Agent SDK","Hermes Agent","OpenClaw"]},{"layer":"model","layerName":"Model provider","choices":[{"id":"anthropic","name":"Anthropic","url":"https://docs.claude.com/en/docs/about-claude/models","tagline":"Claude Opus, Sonnet and Haiku. Strong tool use and long-horizon agentic work."}],"choice":{"id":"anthropic","name":"Anthropic","url":"https://docs.claude.com/en/docs/about-claude/models","tagline":"Claude Opus, Sonnet and Haiku. Strong tool use and long-horizon agentic work."},"confidence":"low","matchedOn":[],"alternatives":["OpenAI","Google Gemini","Amazon Bedrock"]},{"layer":"framework","layerName":"Framework","choices":[{"id":"langgraph","name":"LangGraph","url":"https://langchain-ai.github.io/langgraph/","tagline":"Graph-shaped orchestration with checkpointing, interrupts and human-in-the-loop."}],"choice":{"id":"langgraph","name":"LangGraph","url":"https://langchain-ai.github.io/langgraph/","tagline":"Graph-shaped orchestration with checkpointing, interrupts and human-in-the-loop."},"confidence":"low","matchedOn":[],"alternatives":["Mastra","Pydantic AI","CrewAI"]},{"layer":"memory","layerName":"Memory","choices":[{"id":"mem0","name":"Mem0","url":"https://mem0.ai/","tagline":"Extracts durable facts from conversations and recalls them on the next turn."}],"choice":{"id":"mem0","name":"Mem0","url":"https://mem0.ai/","tagline":"Extracts durable facts from conversations and recalls them on the next turn."},"confidence":"low","matchedOn":[],"alternatives":["Zep","Honcho","Supermemory"]},{"layer":"retrieval","layerName":"Retrieval","choices":[{"id":"pgvector","name":"pgvector","url":"https://github.com/pgvector/pgvector","tagline":"Vector search inside the Postgres you already run."}],"choice":{"id":"pgvector","name":"pgvector","url":"https://github.com/pgvector/pgvector","tagline":"Vector search inside the Postgres you already run."},"confidence":"low","matchedOn":[],"alternatives":["Qdrant","Pinecone","Chroma"]},{"layer":"search","layerName":"Web grounding","choices":[{"id":"exa","name":"Exa","url":"https://exa.ai/","tagline":"Embeddings-native web search built for agents, with full-content retrieval."}],"choice":{"id":"exa","name":"Exa","url":"https://exa.ai/","tagline":"Embeddings-native web search built for agents, with full-content retrieval."},"confidence":"low","matchedOn":[],"alternatives":["Tavily","Firecrawl","Brave Search API"]},{"layer":"tools","layerName":"Tools & integrations","choices":[{"id":"mcp","name":"MCP (Model Context Protocol)","url":"https://modelcontextprotocol.io/","tagline":"The open protocol for exposing tools and data to agents. The default answer."}],"choice":{"id":"mcp","name":"MCP (Model Context Protocol)","url":"https://modelcontextprotocol.io/","tagline":"The open protocol for exposing tools and data to agents. The default answer."},"confidence":"low","matchedOn":[],"alternatives":["Composio","Arcade","Browserbase"]},{"layer":"security","layerName":"Security","choices":[{"id":"iron-proxy","name":"iron-proxy","url":"https://github.com/paradigmxyz/iron-proxy","tagline":"Default-deny egress firewall for untrusted workloads. The sandbox holds worthless proxy tokens; real credentials are swapped in at the boundary."},{"id":"lakera","name":"Lakera Guard","url":"https://www.lakera.ai/","tagline":"Prompt-injection and jailbreak detection as a low-latency API call."}],"choice":{"id":"iron-proxy","name":"iron-proxy","url":"https://github.com/paradigmxyz/iron-proxy","tagline":"Default-deny egress firewall for untrusted workloads. The sandbox holds worthless proxy tokens; real credentials are swapped in at the boundary."},"confidence":"high","matchedOn":["egress","exfiltration","prompt-injection","untrusted-input"],"alternatives":["Rebuff","Invariant","Llama Guard"]},{"layer":"observability","layerName":"Observability & evals","choices":[{"id":"promptfoo","name":"promptfoo","url":"https://www.promptfoo.dev/","tagline":"Local eval and red-team harness that runs in CI. No account needed."}],"choice":{"id":"promptfoo","name":"promptfoo","url":"https://www.promptfoo.dev/","tagline":"Local eval and red-team harness that runs in CI. No account needed."},"confidence":"medium","matchedOn":["prompt-injection"],"alternatives":["Langfuse","LangSmith","Braintrust"]},{"layer":"runtime","layerName":"Runtime & deploy","choices":[{"id":"docker-compose","name":"Docker Compose","url":"https://docs.docker.com/compose/","tagline":"One file, one box, everything local. The honest starting point."}],"choice":{"id":"docker-compose","name":"Docker Compose","url":"https://docs.docker.com/compose/","tagline":"One file, one box, everything local. The honest starting point."},"confidence":"low","matchedOn":[],"alternatives":["Vercel","Cloudflare Workers","Modal"]}]}