{"id":"a0290cb2-8f4a-40fc-b518-2435d1cd731c","slug":"oneshot","kind":"mcp","name":"oneshot","summary":"Multi-agent AI platform built with Microsoft Agent Framework on Azure AI Foundry. 7 coordinated agents, two parallel waves, one prompt — platform-ready social content.","owner":"shyamsridhar123","repoUrl":"https://github.com/shyamsridhar123/oneshot","license":"MIT","licenseTier":"permissive","trust":"community","stars":4,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-02-12T02:13:44.000Z","addedAt":"2026-10-21T08:19:54.451Z","logoUrl":"https://avatars.githubusercontent.com/u/117464342?u=0eae192590f7119169331f44346008a1a076470a&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["cloud-infra","search","writing"],"tags":["ai-agents","azure-openai","content-creation","fastapi","microsoft-agent-framework","multi-agent","nextjs","prompt-engineering"],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-21T13:58:10.996Z","sample":false,"url":"https://conduits.dev/tools/oneshot","language":"Python","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"<p align=\"center\">\n  <img src=\"docs/graphics/hero-banner.svg\" alt=\"OneShot Hero Banner\" width=\"100%\"/>\n</p>\n\n<h1 align=\"center\">OneShot</h1>\n\n<p align=\"center\">\n  <strong>You only get one shot. Do not miss your chance to blow.</strong><br/>\n  <em>7 AI agents. Two parallel waves. One prompt. Platform-ready social content.</em>\n</p>\n\n<p align=\"center\">\n  <img src=\"https://img.shields.io/badge/Agents_League-Track_2:_Reasoning_Agents-7C3AED?style=for-the-badge\" alt=\"Track 2: Reasoning Agents\"/>\n</p>\n\n<p align=\"center\">\n  <img src=\"https://img.shields.io/badge/Microsoft_Agent_Framework-MAF-0078D4?logo=microsoft&logoColor=white\" alt=\"MAF\"/>\n  <img src=\"https://img.shields.io/badge/Azure_OpenAI-GPT--5.x-0078D4?logo=microsoft-azure&logoColor=white\" alt=\"Azure OpenAI\"/>\n  <img src=\"https://img.shields.io/badge/MCP-Filesystem_Server-10B981\" alt=\"MCP\"/>\n  <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js&logoColor=white\" alt=\"Next.js 16\"/>\n  <img src=\"https://img.shields.io/badge/FastAPI-0.115-009688?logo=fastapi&logoColor=white\" alt=\"FastAPI\"/>\n  <img src=\"https://img.shields.io/badge/Python-3.11+-3776AB?logo=python&logoColor=white\" alt=\"Python 3.11+\"/>\n  <img src=\"https://img.shields.io/badge/React-19-61DAFB?logo=react&logoColor=black\" alt=\"React 19\"/>\n  <img src=\"https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript&logoColor=white\" alt=\"TypeScript\"/>\n  <img src=\"https://img.shields.io/badge/Tailwind-4-06B6D4?logo=tailwindcss&logoColor=white\" alt=\"Tailwind 4\"/>\n  <img src=\"https://img.shields.io/badge/tests-215_passing-2ecc71?logo=pytest&logoColor=white\" alt=\"215 tests\"/>\n  <img src=\"https://img.shields.io/badge/license-MIT-f39c12\" alt=\"MIT License\"/>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://oneshot-ctr-frontend.ambitiouscoast-16cae529.eastus2.azurecontainerapps.io/\">\n    <img src=\"https://img.shields.io/badge/🚀_Live_Demo-Azure_Container_Apps-0078D4?style=for-the-badge&logo=microsoft-azure&logoColor=white\" alt=\"Live Demo\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <strong>🌐 <a href=\"https://oneshot-ctr-frontend.ambitiouscoast-16cae529.eastus2.azurecontainerapps.io/\">Try OneShot Live →</a></strong><br/>\n  Deployed on <strong>Azure Container Apps</strong> (East US 2) — containerized frontend and backend running in a fully managed serverless environment with automatic scaling, built-in HTTPS, and zero-downtime deployments.\n</p>\n\n---\n\n## The Problem\n\nEnterprise social media teams hit the same bottleneck every day:\n\n> Research → Strategy → Writing → Compliance → Analytics — **all sequential, all manual, all slow.**\n\nDifferent people. Different tools. Handoff friction at every stage. By the time content ships, the trend is over.\n\n## The Solution: OneShot\n\n**OneShot** takes a single prompt — *\"Write a LinkedIn post about our AI launch\"* — and fires 7 specialized AI agents in two parallel waves. Research, strategy, brand context, analytics, writing, and compliance review happen **simultaneously**, not sequentially. Content comes out platform-specific, brand-compliant, data-backed, and scored.\n\nLike a real content team — but in seconds. *You only get one shot at the first draft. Make it count.*\n\n> **Agents League @ TechConnect — Track 2: Reasoning Agents.** The challenge asks participants to build an intelligent agent that helps a company's communication team create social media content across platforms using multi-step reasoning. OneShot answers that challenge with 7 coordinated MAF agents, 5 distinct reasoning patterns, grounded brand data, MCP tool integration, and a full production UI — everything the starter kit describes as aspirational \"Going Further\" bonuses, we ship as core features.\n\n---\n\n<p align=\"center\">\n  <img src=\"docs/graphics/stage-banner.svg\" alt=\"OneShot — The Stage Is Set\" width=\"100%\"/>\n</p>\n\n---\n\n## Two-Wave Parallel Architecture\n\n<p align=\"center\">\n  <img src=\"docs/graphics/architecture-flow.svg\" alt=\"Two-Wave Parallel Orchestration\" width=\"100%\"/>\n</p>\n\n```\nUser Prompt\n     │\n     ▼\n ORCHESTRATOR ──── intent classification, platform detection\n     │\n     ├── Wave 1: Context Gathering (parallel via asyncio.gather)\n     │   ├── Researcher  [ReAct]            → trends, hashtags, competitors\n     │   ├── Strategist  [Chain-of-Thought] → audience, messaging, tone\n     │   ├── Memory      [RAG]             → brand guidelines, past posts\n     │   └── Analyst     [Data-Driven]     → engagement benchmarks, timing\n     │\n     ├── Wave 1 context passed to Wave 2 via AgentContext\n     │\n     ├── Wave 2: Create + Review (parallel)\n     │   ├── Scribe      [Template-Guided]  → platform-specific content\n     │   └── Advisor     [Self-Reflection]  → compliance score (1-10)\n     │\n     ▼\n Brand-Compliant, Data-Backed Content\n (scored, traced, cited, exportable to 4 formats)\n```\n\n**Key insight**: Wave 2 agents don't create blind — they receive all Wave 1 context. The Scribe writes *informed by* live trends, strategy, brand voice, and engagement data. The Advisor reviews against *actual* brand guidelines and past post patterns.\n\n### Containerized Deployment with azd\n\nBoth services are now containerized and wired into `azd`.\n\n1. Provision infrastructure:\n    - `azd provision`\n2. Deploy both application containers:\n    - `azd deploy`\n    - or run `azd up` for provision + deploy in one command.\n\nThe deployment flow currently excludes brand-data seeding. Continue using your team setup/bootstrap scripts for data initialization.\n\nDeployment behavior in Azure:\n\n- Frontend resolves backend endpoints from runtime-injected config (server render path), not build-time-only `NEXT_PUBLIC_*`.\n- Runtime endpoint vars are populated by infra as `RUNTIME_API_URL` and `RUNTIME_WS_URL` from the backend Container App **actual FQDN output**.\n- Backend CORS is strict for deployed Container Apps (`ALLOWED_ORIGINS=[]` with `ALLOWED_ORIGIN_REGEX` scoped to the frontend app hostname pattern).\n- `azure.yaml` sets Docker `registry` explicitly from `AZURE_CONTAINER_REGISTRY_ENDPOINT`.\n- Container Apps are tagged in IaC with `azd-service-name` so `azd deploy --service backend|frontend` resolves targets consistently.\n\nCommon `azd` deployment recovery:\n\n- Registry endpoint error (`could not determine container registry endpoint`)\n  - Ensure azd env has `AZURE_CONTAINER_REGISTRY_ENDPOINT` and `AZURE_CONTAINER_REGISTRY_NAME`.\n- Service tag lookup error (`resource tagged with 'azd-service-name' not found`)\n  - Run `azd provision` to refresh tags/resources from IaC.\n- Frontend points to stale/non-resolving backend host\n  - Run `azd provision`, then `azd deploy --service frontend` to refresh runtime endpoint vars.\n\n---\n\n## Reasoning Patterns — The Core of Track 2\n\n> *\"This is not 7 copies of GPT with different system prompts.\"* — Each agent has a **named reasoning identity** drawn from established AI research patterns.\n\nThe Track 2 rubric weights **Reasoning & Multi-step Thinking at 25%** — the joint-highest criterion. OneShot implements every reasoning pattern the starter kit calls for, and then some:\n\n<p align=\"center\">\n  <img src=\"docs/graphics/agent-roster.svg\" alt=\"Meet the Agents\" width=\"100%\"/>\n</p>\n\n| # | Agent | Reasoning Pattern | How It Reasons |\n|:-:|-------|-------------------|----------------|\n| 🎯 | **Orchestrator** | **Step-by-Step Decomposition** | Classifies intent via structured output → detects platforms → dispatches two-wave parallel execution |\n| 🔍 | **Researcher** | **ReAct (Reasoning + Acting)** | Thought → Action → Observation → Thought loops. Calls `search_web`, `search_news`, `analyze_hashtags` tools between reasoning steps |\n| ♛ | **Strategist** | **Chain-of-Thought (CoT)** | \"Step 1: IDENTIFY audience → Step 2: ANALYZE message → Step 3: DETERMINE tone → Step 4: PLAN calendar → Step 5: RECOMMEND CTAs\" — deliberate, numbered, explainable |\n| 🧠 | **Memory** | **Retrieval-Augmented Grounding (RAG)** | Retrieves brand guidelines, past post performance, content calendars. Grounds generation in real data — zero hallucination on brand voice |\n| 📊 | **Analyst** | **Data-Driven Benchmarking** | Calculates engagement predictions, optimal posting times, performance comparisons against historical baselines. Numbers, not guesses |\n| ✍ | **Scribe** | **Template-Guided Generation** | Platform-specific structural rules: LinkedIn (1300 chars, hook-first), Twitter/X (280 chars, punchy), Instagram (visual-first). Saves drafts via MCP |\n| 🛡 | **Advisor** | **Self-Reflection** | Initial review → \"Wait, did I check brand voice consistency?\" → metacognitive reflection → revised compliance score (1-10). The AI that critiques the AI |\n\n### Reasoning in Action\n\n```python\n# ReAct pattern in Researcher — interleaved reasoning and tool use\nThought: \"I need to find current AI industry trends for the LinkedIn post.\"\nAction:  search_web(\"AI industry trends February 2026\")\nObserve: [5 results with URLs and snippets]\nThought: \"These trends are relevant. Now I need competitor positioning.\"\nAction:  search_news(\"enterprise AI product launches this week\")\nObserve: [3 news articles]\nThought: \"I have enough context. Let me synthesize findings.\"\n→ Returns: trend summary + source citations + hashtag recommendations\n\n# Self-Reflection pattern in Advisor\nInitial Review: \"Content is on-brand. Score: 8/10.\"\nReflection:     \"Wait — did I verify hashtag compliance? Let me re-check against guidelines.\"\nRevised:        \"Hashtag #BuildInPublic is approved. Tone matches LinkedIn persona. Score: 9/10.\"\n```\n\n---\n\n## Grounding & Data Sources\n\nAgents are grounded on real brand data — not just system prompt instructions. The Memory agent uses **Retrieval-Augmented Generation (RAG)** to pull from three synthetic data sources seeded into the knowledge base:\n\n| Data Source | File | What It Provides |\n|-------------|------|-----------------|\n| **Brand Guidelines** | `data/brand_guidelines.md` | Voice, tone per platform, hashtag strategy, DOs/DON'Ts, audience personas |\n| **Past Post Performance** | `data/past_posts.json` | 5+ high-performing posts with engagement metrics (likes, shares, impressions) |\n| **Content Calendar** | `data/content_calendar.json` | Weekly content plan, theme scheduling, platform cadence |\n\nThe Analyst benchmarks new content against past post engagement data. The Scribe follows brand voice guidelines. The Advisor reviews compliance against documented DOs and DON'Ts.\n\n---\n\n## MCP & Tool Integration\n\nAgents extend beyond pure language generation via [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) servers and direct tool integrations — spawned as subprocesses and auto-registered on MAF agents at runtime.\n\n| Integration | Type | Agent | Purpose |\n|-------------|------|-------|---------|\n| **Filesystem MCP** (`@modelcontextprotocol/server-filesystem`) | MCP Server | Scribe | Saves generated content drafts to `./data/drafts/` |\n| **DuckDuckGo Search** (`ddgs`) | Python Tool | Researcher | Live web search and news search for trend grounding |\n\n```python\nfrom agent_framework import MCPStdioTool\n\nfs_mcp = MCPStdioTool(\n    name=\"filesystem\",\n    command=\"npx\",\n    args=[\"-y\", \"@modelcontextprotocol/server-filesystem\", \"./data/drafts\"],\n)\nagent = client.create_agent(name=\"scribe\", instructions=SCRIBE_PROMPT, tools=[fs_mcp])\n```\n\n14 tool functions across 7 agents — `search_web`, `search_news`, `search_trends`, `analyze_hashtags`, `search_competitor_content`, `get_brand_guidelines`, `get_past_posts`, `get_content_calendar`, `search_knowledge_base`, `calculate_engagement_metrics`, `recommend_posting_schedule`, `generate_content_draft`, `save_draft`, and `review_content`. Each tool is an MAF `@ai_function`-decorated Python function that the agent invokes during reasoning.\n\nMCP is optional — agents gracefully fall back to direct LLM calls when servers are unavailable.\n\n---\n\n## Observability: Citation Tracing & Agent Analytics\n\nEvery agent execution is fully traced with citations, tool calls, and performance metrics — giving complete visibility into *how* and *why* content was generated.\n\n### Citation Pipeline\n\n```\nAgent executes tool (e.g., search_web)\n  → middleware extracts URLs + source labels from output\n  → knowledge tools (brand guidelines, past posts) generate knowledge citations\n  → citations deduplicated and attached to agent trace\n  → WebSocket pushes agent.citations + response.citations events\n  → Frontend renders CitationPanel with source attribution\n```\n\n**Citation types:**\n- **URL citations** — extracted from web search results (DuckDuckGo)\n- **Knowledge citations** — generated when agents reference brand guidelines, past posts, or content calendar\n- **Text citations** — captured from \"Source: ...\" patterns in agent output\n\n### Trace Waterfall\n\nThe Analytics page (`/analytics`) visualizes the full execution trace:\n\n- Per-agent execution time (ms), token usage, and success/failure status\n- Tool call history — which tools each agent invoked and what they returned\n- Citation provenance — trace every claim back to its source\n- Parallel execution visualization — see both waves firing simultaneously\n\n### REST API\n\n```\nGET  /api/analytics/traces              → All agent execution traces\nGET  /api/analytics/traces/:id          → Single trace with full citation + tool detail\nGET  /api/analytics/metrics             → Aggregate metrics (avg response time, token usage)\nPOST /api/conversations/:id/messages    → Trigger multi-agent execution\nWS   /ws/agents/:conversation_id        → Real-time agent status + citation streaming\n```\n\n---\n\n## Track 2 Alignment\n\nHow OneShot maps to every Track 2 milestone and bonus item:\n\n### Milestones\n\n| Milestone | Requirement | Our Implementation |\n|-----------|------------|-------------------|\n| **M1: Environment** | Deploy a reasoning model in Foundry | Azure OpenAI GPT-5.x deployed. MAF `AzureOpenAIResponsesClient` connected via `factory.py`. `DefaultAzureCredential` — zero secrets. |\n| **M2: Create Agent** | Define instructions, brand context, reasoning patterns | 7 MAF agents created via `factory.py` with CoT, ReAct, Self-Reflection, RAG, and Template-Guided reasoning in structured prompts |\n| **M3: Grounding** | Integrate relevant data sources | Brand guidelines + past post performance + content calendar seeded into knowledge base. Memory agent retrieves via RAG. |\n| **M4: External Tools** | Integrate MCP servers or APIs | Filesystem MCP for draft persistence + DuckDuckGo for live web search. 14 `@ai_function` tool functions. |\n\n### Bonus Features (all implemented)\n\nThe Track 2 starter kit describes these as aspirational \"Going Further\" items. We ship them as core features:\n\n| Bonus Item | Starter Kit Description | OneShot Implementation |\n|------------|------------------------|----------------------|\n| **Multi-Agent Architecture** | \"Decompose tasks across specialized agents\" | 7 agents orchestrated in two parallel waves via `asyncio.gather` |\n| **Reviewer Agent** | \"Create a reviewer agent that checks content for quality and compliance\" | Advisor agent with Self-Reflection: review → reflect → revise → score (1-10) |\n| **Evaluation** | \"Set up performance metrics using Foundry's built-in evaluation tools\" | Citation tracing pipeline + per-agent execution metrics + Analytics dashboard |\n| **Monitoring** | \"Track agent usage and performance over time\" | Real-time WebSocket status panel (6 event types) + SQLite trace persistence + Recharts visualizations |\n| **Safety** | \"Add safety mitigation layers for policy compliance\" | Advisor agent enforces brand DOs/DON'Ts + content quality scoring + hashtag compliance checking |\n\n---\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|------------|\n| **AI Framework** | Microsoft Agent Framework (MAF) — `agent-framework` with `AzureOpenAIResponsesClient`, `@ai_function` tools, MCP support |\n| **Models** | Azure OpenAI GPT-5.x via Foundry endpoints |\n| **Frontend** | Next.js 16, React 19, Shadcn/ui, Tailwind CSS 4, Zustand 5, Recharts |\n| **Backend** | Python 3.11+, FastAPI 0.115, SQLAlchemy 2.x, aiosqlite |\n| **Auth** | Azure Identity (`DefaultAzureCredential`) — zero secrets in config |\n| **MCP** | Filesystem MCP (`@modelcontextprotocol/server-filesystem`) for draft persistence |\n| **Search** | DuckDuckGo Search (`ddgs`) — live web and news search, no API key required |\n| **Database** | SQLite with async support (conversations, messages, traces, documents, knowledge) |\n| **Real-time** | WebSocket agent status + citation streaming (6 event types) |\n| **Testing** | pytest + pytest-asyncio (215 tests across 12 modules) |\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n- Python 3.11+\n- Node.js 18+ (pnpm recommended)\n- Azure OpenAI resource with deployed models\n- Azure CLI logged in (`az login`) for DefaultAzureCredential\n\n### 1. Environment Setup\n\n```bash\ncp .env.example .env\n```\n\nEdit `.env`:\n\n```env\nAZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com\nAZURE_OPENAI_API_VERSION=2025-03-01-preview\nAZURE_OPENAI_DEPLOYMENT_NAME=gpt-5.2-chat\nNEXT_PUBLIC_API_URL=http://localhost:8000\nNEXT_PUBLIC_WS_URL=ws://localhost:8000\n```\n\n> **No API key needed.** The app uses `DefaultAzureCredential` — just `az login` first.\n> In Azure Container Apps, frontend runtime endpoint vars are injected by infra (`RUNTIME_API_URL`, `RUNTIME_WS_URL`).\n\n### 2. Backend\n\n```bash\ncd backend\npython -m venv .venv\nsource .venv/bin/activate  # Windows: .venv\\Scripts\\activate\npip install -r requirements.txt\n\n# Initialize database + seed data\npython setup_db.py\npython -c \"from app.data.seed import seed_database; import asyncio; asyncio.run(seed_database())\"\npython -c \"from app.data.seed import seed_social_media_data; import asyncio; asyncio.run(seed_social_media_data())\"\n\n# Start\nuvicorn app.main:app --reload --port 8000\n```\n\n### 3. Frontend\n\n```bash\ncd frontend\npnpm install\npnpm dev\n```\n\nOpen **http://localhost:3000** — you're in.\n\n### Docker Alternative\n\n```bash\ncp .env.example .env\ndocker-compose up\n```\n\n---\n\n## Demo Scenarios\n\n| Scenario | Prompt | What Fires |\n|----------|--------|------------|\n| **Full Content Creation** | *\"Write a LinkedIn post about our AI Collaboration Suite v3.0 launch\"* | All 7 agents, both waves, full citation trail |\n| **Multi-Platform Campaign** | *\"Create content for all platforms about our healthcare deployment\"* | Orchestrator detects 3 platforms, dispatches per-platform |\n| **Trend Research** | *\"What AI topics are trending on social media this week?\"* | Researcher (ReAct loops with live DuckDuckGo search) |\n| **Content Review** | *\"Review this draft tweet for brand alignment\"* | Advisor (Self-Reflection) + Memory (RAG grounding) |\n\n---\n\n## Pages & Features\n\n| Page | Route | What You See |\n|------|-------|-------------|\n| **Landing** | `/` | Project overview, agent showcase, architecture visualization |\n| **Chat** | `/chat` | Multi-agent conversation with real-time status panel + citation panel |\n| **Content** | `/proposals` | Generated social media content library, export to 4 formats |\n| **Trends** | `/research` | Trend research, competitor analysis, hashtag data |\n| **Brand** | `/knowledge` | Brand guidelines, past post performance, content calendar |\n| **Analytics** | `/analytics` | Agent trace waterfall, execution metrics, token usage charts |\n\n---\n\n## Real-Time Agent Streaming\n\nWebSocket at `/ws/agents/{conversation_id}` streams live as agents work:\n\n```\nagent.started      → \"Orchestrator: Analyzing request\"\nagent.thinking     → \"Researcher: Searching AI trends...\" (progress: 0.3)\nagent.handoff      → \"Orchestrator → Scribe: Generate content\"\nagent.completed    → \"Advisor: Brand score 9/10\" (duration: 600ms)\nagent.citations    → [{ url: \"https://...\", source_tool: \"search_web\" }]\nstream.token       → Token-by-token LLM streaming\ndocument.generated → \"Social Post: AI Launch Campaign\"\n```\n\n6 event types. Full visibility into multi-agent execution — reasoning, tool use, and citation provenance in real time.\n\n---\n\n## By The Numbers\n\n| Metric | Value |\n|--------|:-----:|\n| Specialized AI agents | **7** |\n| Named reasoning patterns | **5** (CoT, ReAct, Self-Reflection, RAG, Template-Guided) |\n| Agent tool functions (`@ai_function`) | **14** |\n| MCP server integrations | **1** (Filesystem) |\n| Supported platforms | **3** (LinkedIn, Twitter/X, Instagram) |\n| Export formats | **4** (Markdown, HTML, PDF, DOCX) |\n| WebSocket event types | **6** |\n| REST API endpoints | **15+** |\n| Automated tests | **215** |\n| Intent types | **4** (creation, strategy, review, research) |\n| Brand data files | **3** (guidelines, past posts, content calendar) |\n| Hardcoded secrets | **0** |\n\n---\n\n## Project Structure\n\n```\noneshot/\n├── frontend/                    # Next.js 16 + React 19\n│   └── src/\n│       ├── app/                 # App Router pages (chat, proposals, research, knowledge, analytics)\n│       ├── components/          # Shadcn/ui components (landing, chat, sidebar, agent panel, citations)\n│       └── lib/                 # API client, Zustand store, WebSocket, types\n├── backend/                     # FastAPI + Python 3.11\n│   ├── app/\n│   │   ├── agents/              # 7 AI agents with named reasoning patterns\n│   │   │   ├── orchestrator.py  # Two-wave parallel dispatch via asyncio.gather\n│   │   │   ├── prompts.py       # All agent prompts with CoT, ReAct, Self-Reflection patterns\n│   │   │   ├── factory.py       # MAF agent factory + MCP tool registration\n│   │   │   └── middleware.py    # Citation extraction + trace building pipeline\n│   │   ├── api/                 # REST endpoints + WebSocket handler\n│   │   ├── models/              # SQLAlchemy models + Pydantic schemas\n│   │   ├── services/            # LLM, documents, knowledge, traces\n│   │   └── data/                # Seed data\n│   ├── data/                    # Brand data (guidelines, posts, calendar, drafts/)\n│   └── tests/                   # 215 tests across 12 modules\n├── docs/\n│   ├── graphics/                # SVG artwork (hero, agents, architecture, logo, stage)\n│   ├── TRD.md                   # Technical Requirements Document\n│   └── API.md                   # API documentation\n├── .env.example                 # Environment template (zero secrets)\n├── DEMO.md                      # Demo presentation script\n├── SETUP.md                     # Detailed setup guide\n└── Makefile                     # Common commands\n```\n\n---\n\n## Testing\n\n```bash\ncd backend\nsource .venv/bin/activate\npytest                    # 215 tests, 12 modules, 100% pass rate\npython demo_e2e.py        # 85 E2E demo checks\n```\n\n| Category | Count |\n|----------|------:|\n| Agent & tool tests | 53 |\n| API endpoint tests | 37 |\n| Analytics & trace tests | 26 |\n| Document & proposal tests | 37 |\n| WebSocket tests | 15 |\n| Core & seed tests | 47 |\n| **Total** | **215** |\n\n---\n\n## What Makes This Different\n\n**It's not a chatbot — it's a team.** Most AI demos show one model answering one question. OneShot orchestrates 7 agents with different specialties collaborating in parallel — the way real content teams actually work.\n\n**Every agent has a reasoning identity.** ReAct for research. Chain-of-Thought for strategy. Self-Reflection for review. RAG for memory. These aren't labels — they're structured reasoning patterns embedded in each agent's prompt architecture, producing different thinking behaviors for different tasks.\n\n**Two-wave architecture mirrors real workflows.** Wave 1 gathers context (research, strategy, brand data, benchmarks). Wave 2 creates with that context (writing, compliance review). Research and strategy happen *before* writing. Review happens *after*. We automated the workflow, not just the writing.\n\n**Agents interact with the real world.** The Scribe saves files via MCP. The Researcher searches live web content via DuckDuckGo. Tool integrations turn language models into agents that act, not just generate.\n\n**Every claim is traceable.** The citation pipeline tracks every source — URLs from web searches, brand guidelines referenced, past posts consulted. No black-box generation. Every piece of output can be traced back to the data that informed it.\n\n**Zero secrets.** `DefaultAzureCredential` everywhere. `az login` for dev, Managed Identity for prod, service principals for CI — same code, no API keys.\n\n**The AI reviews its own AI.** The Advisor uses Self-Reflection: generate an initial review, reflect on whether the review was thorough enough, then produce a revised score. Metacognition applied to content compliance.\n\n---\n\n## Security\n\n- **Zero hardcoded credentials** — `DefaultAzureCredential` for Azure auth, `.env` for configuration\n- **`.env` in `.gitignore`** — `.env.example` contains only placeholder values\n- **Synthetic brand data** — NotContosso Inc. is fictional; no PII, no real customer data\n- **No subscription IDs or resource names** in code — all environment-variable driven\n- Reviewed against [DISCLAIMER.md](https://github.com/microsoft/agentsleague-techconnect/blob/main/DISCLAIMER.md)\n\n---\n\n<p align=\"center\">\n  <img src=\"docs/graphics/logo-badge.svg\" alt=\"OneShot Logo\" width=\"200\"/>\n</p>\n\n<p align=\"center\">\n  <em>\"Look — if you had one shot, or one opportunity, to seize everything you ever wanted, in one moment — would you capture it, or just let it slip?\"</em>\n</p>\n\n<p align=\"center\">\n  <strong>We didn't let it slip.</strong>\n</p>\n\n---\n\n## License\n\nMIT License — see [LICENSE](LICENSE) for details.\n"}