{"id":"74fe98b8-3856-494b-bfa4-fc1de5040602","entityType":"agent","slug":"crewai-merchantkevin-agentic-finance-explorer","name":"agentic-finance-explorer","canonicalUrl":"https://www.xpersona.co/agent/crewai-merchantkevin-agentic-finance-explorer","canonicalPath":"/agent/crewai-merchantkevin-agentic-finance-explorer","generatedAt":"2026-10-08T23:23:30.463Z","source":"GITHUB_OPENCLEW","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-05-31T06:18:02.861Z","emptyReason":null},"description":"Multi agent financial analysis system using CrewAI, FastAPI, and GPT-4o-mini. Features technical analysis and adversarial risk auditing. 🏛️ Multi-Agent Financial Intelligence Committee (NSE/BSE) $1 $1 $1 $1 An autonomous investment-research assistant for Indian (NSE/BSE) stocks. A crew of three specialized AI agents performs technical and news-driven analysis, a Chief Risk Officer agent audits their findings, and the result is scored by an automated evaluation layer and traced in Langfuse. A Streamlit dashboard presents live prices, fundamentals, an","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. Last updated 5/31/2026.","installCommand":"git clone https://github.com/merchantkevin/agentic-finance-explorer.git","sourceUrl":"https://github.com/merchantkevin/agentic-finance-explorer","homepage":null,"primaryLinks":[{"label":"View Source","url":"https://github.com/merchantkevin/agentic-finance-explorer","kind":"source"}],"safetyScore":66,"overallRank":37,"popularityScore":0,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Multi agent financial analysis system using CrewAI, FastAPI, and GPT-4o-mini. Features technical analysis and adversarial risk auditing. 🏛️ Multi-Agent Financi"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-05-31T06:18:02.861Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[{"label":"crewai","status":"self-declared"},{"label":"multi-agent","status":"self-declared"}],"verifiedCount":0,"selfDeclaredCount":3,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"},{"key":"crewai","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"},{"key":"multi-agent","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile capability:crewai|supported|profile capability:multi-agent|supported|profile"}},"adoption":{"evidence":{"source":"no-adoption-signals","verified":false,"confidence":"low","updatedAt":"2026-05-31T06:18:02.861Z","emptyReason":"No source adoption metrics were available."},"stars":0,"forks":0,"downloads":null,"packageName":null,"latestVersion":null,"tractionLabel":null},"release":{"evidence":{"source":"agent-index","verified":false,"confidence":"medium","updatedAt":"2026-05-31T06:18:02.860Z","emptyReason":null},"lastUpdatedAt":"2026-05-31T06:18:02.861Z","lastCrawledAt":"2026-05-31T06:18:02.860Z","lastIndexedAt":null,"nextCrawlAt":"2026-06-07T06:18:02.860Z","lastVerifiedAt":null,"highlights":[]},"execution":{"evidence":{"source":"GITHUB OPENCLEW","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"git clone https://github.com/merchantkevin/agentic-finance-explorer.git","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/crewai-merchantkevin-agentic-finance-explorer/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/crewai-merchantkevin-agentic-finance-explorer/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/crewai-merchantkevin-agentic-finance-explorer/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/crewai-merchantkevin-agentic-finance-explorer/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/crewai-merchantkevin-agentic-finance-explorer/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/crewai-merchantkevin-agentic-finance-explorer/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"GITHUB_OPENCLEW","generatedAt":"2026-10-08T23:23:30.462Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/crewai-merchantkevin-agentic-finance-explorer/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/crewai-merchantkevin-agentic-finance-explorer/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/crewai-merchantkevin-agentic-finance-explorer/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/crewai-merchantkevin-agentic-finance-explorer/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"GITHUB OPENCLEW","verified":false,"confidence":"high","updatedAt":"2026-05-31T06:18:02.861Z","emptyReason":null},"readme":"# 🏛️ Multi-Agent Financial Intelligence Committee (NSE/BSE)\n\n[![FastAPI](https://img.shields.io/badge/API-FastAPI-009688?style=flat&logo=fastapi&logoColor=white)](https://fastapi.tiangolo.com/)\n[![CrewAI](https://img.shields.io/badge/Framework-CrewAI-ff69b4?style=flat)](https://www.crewai.com/)\n[![Python 3.12](https://img.shields.io/badge/Python-3.12-blue?style=flat&logo=python&logoColor=white)](https://www.python.org/)\n[![Cloud-Native](https://img.shields.io/badge/Cloud-Render%20%7C%20Streamlit-663399?style=flat)](https://render.com)\n\nAn autonomous investment-research assistant for Indian (NSE/BSE) stocks. A crew of three specialized AI agents performs technical and news-driven analysis, a Chief Risk Officer agent audits their findings, and the result is scored by an automated evaluation layer and traced in Langfuse. A Streamlit dashboard presents live prices, fundamentals, an interactive chart, and the committee's verdict.\n\n🔗 **[Live Dashboard](https://agentic-finance-explorer-zrkwkgnuyidyfgbqc8jb4a.streamlit.app/)** | 📖 **[API Documentation](https://agentic-finance-explorer.onrender.com/docs)**\n\n---\n\n## 🚀 Architecture\n\nThe system uses a **decoupled pattern** that separates the reasoning engine from the presentation layer:\n\n- **Reasoning Engine (`app.py`):** A FastAPI server that orchestrates the CrewAI agents in a background task, caches results in SQLite, exposes fundamentals, and traces every run in Langfuse.\n- **Agent Crew (`main.py`):** Three CrewAI agents wired with deterministic and search tools, producing a Pydantic-validated JSON report.\n- **Evaluation Layer (`evaluator.py`):** A rule-based consistency check plus an LLM-as-judge that scores each report; scores are pushed to Langfuse.\n- **Frontend (`frontend.py`):** A Streamlit dashboard with a multi-source live-price engine, fundamentals snapshot, and interactive Plotly chart.\n- **Deterministic Tool (`tools.py`):** A CrewAI tool that computes RSI and the 20-day moving average from yfinance data.\n\n### Request flow\n\n1. The Streamlit frontend `POST`s a ticker to `/analyze`.\n2. The backend fetches a live price and checks the SQLite cache. If the price has moved less than **0.5%** and the last run was **within 1 hour**, the cached report is returned immediately.\n3. Otherwise a background task kicks off the CrewAI crew; the frontend polls `/status/{job_id}` (up to 25 times, every 5s).\n4. When the crew finishes, the report is saved to SQLite, scored by the evaluator, and the full run (timing + scores) is logged to Langfuse.\n\n## 🧠 The \"Committee\" (Agents)\n\nDefined in `main.py`, all running on `openai/gpt-4o-mini` (temperature 0):\n\n1. **Senior Quant Researcher** — Calls the `stock_price_analyzer` tool (`tools.py`) to fetch price, RSI(14), and MA20 from yfinance + `pandas_ta`. Deterministic, not LLM guesswork.\n2. **Financial News Correspondent** — Uses `SerperDevTool` (Serper Google-search API) to gather recent news and sentiment. (Its prompt directs it toward Moneycontrol / Economic Times / LiveMint, but search is performed via Serper, not direct scraping.)\n3. **Chief Risk Officer (adversarial)** — Audits the Quant and News findings to surface concrete risks (regulatory, promoter, macro), assigns a sentiment score (0–10), and emits the final structured JSON.\n\nThe final report conforms to the `FinancialAnalysisOutput` Pydantic schema:\n\n| Field | Type | Meaning |\n| :--- | :--- | :--- |\n| `ticker` | str | Ticker analyzed |\n| `technical_signal` | str | `Bullish` / `Bearish` / `Neutral` |\n| `sentiment_score` | float | 1.0 (extreme fear) – 10.0 (extreme greed) |\n| `key_catalysts` | list[str] | 3 bullets of upside drivers |\n| `risk_summary` | list[str] | 3 bullets of critical risks |\n\n## 📊 Evaluation Layer\n\nAfter each analysis (`evaluator.py`), two evaluators score the report and the results are attached to the Langfuse trace:\n\n- **Signal consistency (rule-based, 0.0/1.0):** Checks that `technical_signal` and `sentiment_score` agree (e.g. a `Bullish` call should have a score > 5.5). No LLM, no cost.\n- **LLM-as-judge (`gpt-4o-mini`):** Scores `risk_specificity` (1–5), `catalyst_specificity` (1–5), and `overall_quality` (1–10), penalizing generic boilerplate. Falls back to neutral scores on failure so it never blocks the user's result.\n\n## 🔌 API Endpoints\n\n| Method | Path | Description |\n| :--- | :--- | :--- |\n| `GET` | `/` | Health check (`{\"status\": \"AI Agents Online\", \"version\": \"2.0\"}`) |\n| `GET` | `/fundamentals/{ticker}` | Market cap, P/E, 52w high/low, EPS, book value, dividend yield, ROCE, ROE, D/E — derived in 3 layers from yfinance `fast_info`, `get_info()`, and financial statements, with NSE→BSE fallback |\n| `POST` | `/analyze` | Body `{\"ticker\": \"...\"}`. Returns cached result or `{\"job_id\", \"status\": \"started\"}` |\n| `GET` | `/status/{job_id}` | Poll job status: `pending` / `completed` / `failed` / `not_found` |\n\n## 🖥️ Frontend Features\n\n- **Live-price engine (`get_current_price`):** Tries Groww's live-price API first, then scrapes Google Finance, then falls back to yfinance history. Auto-routes NSE vs BSE based on the ticker suffix.\n- **Fundamental Snapshot:** Pulls the backend `/fundamentals` endpoint (cached 30 min) into a collapsible panel.\n- **Interactive chart:** Plotly line/candlestick toggle across 1D / 1M / 3M / 6M timeframes.\n- **Committee verdict:** Technical signal, sentiment score, color-coded catalysts and risk audit.\n\n## 🛠️ Tech Stack\n\n| Layer | Technology |\n| :--- | :--- |\n| **Agent Framework** | CrewAI + crewai-tools (SerperDevTool) |\n| **LLM** | GPT-4o-mini (OpenAI), used by both the crew and the judge |\n| **Backend** | FastAPI + Uvicorn |\n| **Frontend** | Streamlit + Plotly |\n| **Data** | yfinance, pandas, pandas-ta, BeautifulSoup |\n| **Validation** | Pydantic |\n| **Observability** | Langfuse |\n| **Persistence** | SQLite (`market_data.db`) |\n| **Cloud** | Render (API), Streamlit Cloud (UI) |\n\n## 🌟 Engineering Notes\n\n- **Defensive parsing:** If the crew's output lacks a valid `json_dict`, the backend builds a fallback report instead of crashing (`app.py`).\n- **Async background tasks:** FastAPI `BackgroundTasks` run the long (~45s+) agentic loop without blocking the request.\n- **Smart caching:** SQLite-backed; a cached report is reused only if price moved < 0.5% **and** the last run was < 1 hour ago.\n- **Restricted CORS:** Origins come from the `ALLOWED_ORIGINS` env var (default: the Streamlit app URL), limited to `GET`/`POST` and the `Content-Type` header. To allow another frontend, set `ALLOWED_ORIGINS` to a comma-separated list.\n\n---\n\n## ⚙️ Local Setup\n\n### 1. Clone & install (using [`uv`](https://github.com/astral-sh/uv))\n\n```bash\ngit clone https://github.com/merchantkevin/agentic-finance-explorer.git\ncd agentic-finance-explorer\nuv sync\n```\n\n### 2. Environment variables\n\nCreate a `.env` file in the project root:\n\n```bash\n# Required\nOPENAI_API_KEY=sk-...\nSERPER_API_KEY=...\n\n# Optional — Langfuse observability (tracing/scoring still runs without keys but won't be persisted)\nLANGFUSE_PUBLIC_KEY=pk-lf-...\nLANGFUSE_SECRET_KEY=sk-lf-...\nLANGFUSE_HOST=https://cloud.langfuse.com\n\n# Optional — restrict CORS to your frontend (comma-separated)\nALLOWED_ORIGINS=http://localhost:8501\n```\n\n### 3. Run the backend (FastAPI)\n\n```bash\nuv run uvicorn app:app --reload --port 8000\n```\n\nAPI docs are then available at `http://localhost:8000/docs`.\n\n### 4. Run the frontend (Streamlit)\n\n```bash\nuv run streamlit run frontend.py\n```\n\n> **Note:** `frontend.py` currently points its `backend_url` at the hosted Render API (`https://agentic-finance-explorer.onrender.com`). To use your local backend, update those URLs in `frontend.py`.\n\n---\n\n## ☁️ Deployment\n\n- **Backend:** Deployed on Render via `render.yml` (`uvicorn app:app`). It declares `OPENAI_API_KEY` and `SERPER_API_KEY`; add the Langfuse keys in the Render dashboard if you want tracing in production. The build command expects a `requirements.txt` — generate one with `uv export --no-hashes -o requirements.txt` (the repo ships `pyproject.toml` / `uv.lock`).\n- **Frontend:** Deployed on Streamlit Cloud from `frontend.py`.\n\n> **Disclaimer:** This application uses Large Language Models to synthesize public financial data for informational purposes only. It is **not** financial advice.\n","readmeExcerpt":"🏛️ Multi-Agent Financial Intelligence Committee (NSE/BSE) $1 $1 $1 $1 An autonomous investment-research assistant for Indian (NSE/BSE) stocks. A crew of three specialized AI agents performs technical and news-driven analysis, a Chief Risk Officer agent audits their findings, and the result is scored by an automated evaluation layer and traced in Langfuse. A Streamlit dashboard presents live prices, fundamentals, an ","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"git clone https://github.com/merchantkevin/agentic-finance-explorer.git\ncd agentic-finance-explorer\nuv sync"},{"language":"bash","snippet":"# Required\nOPENAI_API_KEY=sk-...\nSERPER_API_KEY=...\n\n# Optional — Langfuse observability (tracing/scoring still runs without keys but won't be persisted)\nLANGFUSE_PUBLIC_KEY=pk-lf-...\nLANGFUSE_SECRET_KEY=sk-lf-...\nLANGFUSE_HOST=https://cloud.langfuse.com\n\n# Optional — restrict CORS to your frontend (comma-separated)\nALLOWED_ORIGINS=http://localhost:8501"},{"language":"bash","snippet":"uv run uvicorn app:app --reload --port 8000"},{"language":"bash","snippet":"uv run streamlit run frontend.py"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[],"languages":["python"],"docsSourceLabel":"GITHUB OPENCLEW","editorialOverview":"Multi agent financial analysis system using CrewAI, FastAPI, and GPT-4o-mini. Features technical analysis and adversarial risk auditing. 🏛️ Multi-Agent Financial Intelligence Committee (NSE/BSE) $1 $1 $1 $1 An autonomous investment-research assistant for Indian (NSE/BSE) stocks. A crew of three specialized AI agents performs technical and news-driven analysis, a Chief Risk Officer agent audits their findings, and the result is scored by an automated evaluation layer and traced in Langfuse. A Streamlit dashboard presents live prices, fundamentals, an","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":390,"uniquenessScore":68,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-05-31T06:18:02.861Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-05-31T06:18:02.861Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-08T23:23:30.463Z","emptyReason":null},"items":[{"id":"959108e7-5f7c-45ac-bea0-9ab67f017226","entityType":"agent","canonicalPath":"/agent/langchain-x1pay-langchain","slug":"langchain-x1pay-langchain","name":"@x1pay/langchain","description":"LangChain/LangGraph tools for AI agent x402 payments on X1","url":"https://www.npmjs.com/package/@x1pay/langchain","homepage":null,"source":"GITHUB_OPENCLEW","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":70,"overallRank":65,"updatedAt":"2026-06-01T00:29:07.099Z","createdAt":"2026-05-23T06:52:58.553Z","downloads":null},{"id":"4f8f8f95-34f7-49a9-b516-391d1c355d6c","entityType":"agent","canonicalPath":"/agent/langchain-langchain-langgraph-swarm","slug":"langchain-langchain-langgraph-swarm","name":"@langchain/langgraph-swarm","description":"An implementation of a multi-agent swarm using LangGraph","url":"git+ssh://git@github.com/langchain-ai/langgraphjs.git","homepage":"https://github.com/langchain-ai/langgraphjs#readme","source":"GITHUB_OPENCLEW","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":70,"overallRank":65,"updatedAt":"2026-06-01T00:29:03.792Z","createdAt":"2026-05-23T06:52:55.396Z","downloads":null},{"id":"e36fd59b-38d7-4e73-aa20-c1431a8f7434","entityType":"agent","canonicalPath":"/agent/langchain-langchain-langgraph-supervisor","slug":"langchain-langchain-langgraph-supervisor","name":"@langchain/langgraph-supervisor","description":"LangGraph Multi-Agent Supervisor","url":"git+ssh://git@github.com/langchain-ai/langgraphjs.git","homepage":"https://github.com/langchain-ai/langgraphjs#readme","source":"GITHUB_OPENCLEW","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":70,"overallRank":65,"updatedAt":"2026-06-01T00:29:03.756Z","createdAt":"2026-05-23T06:52:55.353Z","downloads":null},{"id":"d1d0f93e-b722-4791-9bbf-2532470054c2","entityType":"agent","canonicalPath":"/agent/langchain-oceanbus-langchain","slug":"langchain-oceanbus-langchain","name":"oceanbus-langchain","description":"LangChain tools for OceanBus — give your LangChain and CrewAI agents a global identity, encrypted messaging, and Yellow Pages service discovery with a single import.","url":"git+https://github.com/oceanbus/oceanbus.git","homepage":"https://github.com/oceanbus/oceanbus#readme","source":"GITHUB_OPENCLEW","protocols":["OPENCLAW"],"capabilities":["oceanbus","langchain","langchain-tools","agent-to-agent","ai-agent","communication","messaging","e2ee","structured-tool","yellow-pages","service-discovery","reputation","crewai"],"safetyScore":70,"overallRank":65,"updatedAt":"2026-06-01T00:29:02.595Z","createdAt":"2026-05-23T06:52:54.240Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/github_openclew","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}