{"id":"c72115af-7b14-482b-bbd9-2338d817a588","entityType":"agent","slug":"crewai-nihal108-bi-creawai-agent-azure","name":"creawai-agent-azure","canonicalUrl":"https://www.xpersona.co/agent/crewai-nihal108-bi-creawai-agent-azure","canonicalPath":"/agent/crewai-nihal108-bi-creawai-agent-azure","generatedAt":"2026-10-09T02:38:19.373Z","source":"GITHUB_OPENCLEW","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-05-18T06:45:09.067Z","emptyReason":null},"description":"AI financial analyst using CrewAI agents to research stock tickers, combine market data with news sentiment, generate investment reports, and persist results with Azure Blob Storage and PostgreSQL. Built with Python, FastAPI, Streamlit, yfinance, Firecrawl, and Azure. CrewAI Azure Financial Analyst Agent A production-style multi-agent AI application that researches public stock tickers, generates an investment report, and persists the result to Azure Blob Storage and Azure PostgreSQL. This project is designed to demonstrate practical agentic AI engineering: tool-using agents, structured API boundaries, cloud persistence, configuration management, and a lightweight user interface.","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. Last updated 5/18/2026.","installCommand":"git clone https://github.com/Nihal108-bi/creawai-agent-azure.git","sourceUrl":"https://github.com/Nihal108-bi/creawai-agent-azure","homepage":null,"primaryLinks":[{"label":"View Source","url":"https://github.com/Nihal108-bi/creawai-agent-azure","kind":"source"}],"safetyScore":66,"overallRank":27,"popularityScore":0,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"AI financial analyst using CrewAI agents to research stock tickers, combine market data with news sentiment, generate investment reports, and persist results wi"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-05-18T06:45:09.067Z","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-18T06:45:09.067Z","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-18T06:45:09.066Z","emptyReason":null},"lastUpdatedAt":"2026-05-18T06:45:09.067Z","lastCrawledAt":"2026-05-18T06:45:09.066Z","lastIndexedAt":null,"nextCrawlAt":"2026-05-25T06:45:09.066Z","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/Nihal108-bi/creawai-agent-azure.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-nihal108-bi-creawai-agent-azure/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/crewai-nihal108-bi-creawai-agent-azure/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/crewai-nihal108-bi-creawai-agent-azure/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/crewai-nihal108-bi-creawai-agent-azure/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/crewai-nihal108-bi-creawai-agent-azure/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/crewai-nihal108-bi-creawai-agent-azure/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-09T02:38:19.373Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/crewai-nihal108-bi-creawai-agent-azure/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/crewai-nihal108-bi-creawai-agent-azure/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/crewai-nihal108-bi-creawai-agent-azure/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/crewai-nihal108-bi-creawai-agent-azure/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-18T06:45:09.067Z","emptyReason":null},"readme":"# CrewAI Azure Financial Analyst Agent\n\nA production-style multi-agent AI application that researches public stock tickers, generates an investment report, and persists the result to Azure Blob Storage and Azure PostgreSQL.\n\nThis project is designed to demonstrate practical agentic AI engineering: tool-using agents, structured API boundaries, cloud persistence, configuration management, and a lightweight user interface. It is written as a portfolio-ready system that a recruiter or engineering manager can evaluate quickly while still giving enough technical depth for an implementation review.\n\n> Disclaimer: This application is an educational AI research assistant. It does not provide financial advice.\n\n## Recruiter Snapshot\n\n| Area | What this project shows |\n| --- | --- |\n| Agentic AI | CrewAI agents with role separation, sequential task orchestration, memory, and tool calling |\n| LLM application design | Prompted analyst personas, context handoff between tasks, markdown report generation |\n| Data integrations | Yahoo Finance via `yfinance`, web/news research via Firecrawl |\n| Backend engineering | FastAPI endpoint with Pydantic request/response models |\n| Frontend engineering | Streamlit dashboard for ticker input, report display, metadata, and markdown download |\n| Cloud readiness | Azure Blob Storage upload and Azure PostgreSQL report logging |\n| Configuration | `.env`-driven settings with Pydantic validation |\n| Persistence | Generated reports are stored both as files and database records |\n\n## What It Does\n\nThe application accepts a stock ticker such as `MSFT`, `TSLA`, or `META` and runs a two-agent financial research workflow:\n\n1. A **Senior Quantitative Analyst** retrieves hard financial metrics such as price, market cap, P/E ratio, EPS, beta, 52-week range, and one-year performance versus `SPY`.\n2. A **Chief Investment Strategist** researches recent market sentiment and news, combines that narrative with the quantitative findings, and produces a final `BUY`, `SELL`, or `HOLD` style report.\n3. The generated markdown report is saved locally as `investment_report_<TICKER>.md`.\n4. The report is uploaded to Azure Blob Storage.\n5. The report content and ticker are logged in Azure PostgreSQL.\n6. Users can run the workflow through either a CLI, REST API, or Streamlit UI.\n\n## Architecture Flow\n\n```mermaid\nflowchart TD\n    User[\"User / Recruiter / Analyst\"] --> UI[\"Streamlit UI<br/>frontend/app.py\"]\n    User --> CLI[\"CLI Runner<br/>main.py\"]\n    UI --> API[\"FastAPI Backend<br/>src/api/main.py\"]\n    API --> Route[\"POST /api/v1/analyze<br/>src/api/routes.py\"]\n    CLI --> Crew[\"CrewAI Orchestrator<br/>src/agents/crew.py\"]\n    Route --> Crew\n\n    Crew --> Quant[\"Senior Quantitative Analyst<br/>src/agents/agents.py\"]\n    Crew --> Strategist[\"Chief Investment Strategist<br/>src/agents/agents.py\"]\n\n    Quant --> Fundamentals[\"FundamentalAnalysisTool<br/>Yahoo Finance metrics\"]\n    Quant --> Compare[\"CompareStocksTool<br/>1-year return vs SPY\"]\n    Strategist --> Sentiment[\"SentimentSearchTool<br/>Firecrawl news search\"]\n\n    Fundamentals --> Report[\"Markdown Investment Report\"]\n    Compare --> Report\n    Sentiment --> Report\n\n    Report --> LocalFile[\"Local file<br/>investment_report_TICKER.md\"]\n    LocalFile --> Blob[\"Azure Blob Storage<br/>reports container\"]\n    Report --> Postgres[\"Azure PostgreSQL<br/>reports_log table\"]\n\n    API --> Response[\"JSON response<br/>report content + blob URL\"]\n    Response --> UI\n\n    click UI \"frontend/app.py\" \"Open Streamlit frontend\"\n    click CLI \"main.py\" \"Open CLI entry point\"\n    click API \"src/api/main.py\" \"Open FastAPI app\"\n    click Route \"src/api/routes.py\" \"Open API route\"\n    click Crew \"src/agents/crew.py\" \"Open CrewAI orchestration\"\n    click Quant \"src/agents/agents.py\" \"Open agent definitions\"\n    click Strategist \"src/agents/agents.py\" \"Open agent definitions\"\n    click Fundamentals \"src/agents/tools/financial.py\" \"Open financial tools\"\n    click Compare \"src/agents/tools/financial.py\" \"Open comparison tool\"\n    click Sentiment \"src/agents/tools/scraper.py\" \"Open Firecrawl tool\"\n    click Blob \"src/shared/storage.py\" \"Open Azure Blob service\"\n    click Postgres \"src/shared/database.py\" \"Open database service\"\n```\n\n## Agent Workflow\n\n```mermaid\nsequenceDiagram\n    autonumber\n    participant U as User\n    participant API as FastAPI / CLI\n    participant Crew as CrewAI Crew\n    participant Q as Quantitative Analyst\n    participant S as Investment Strategist\n    participant YF as Yahoo Finance\n    participant FC as Firecrawl\n    participant AZB as Azure Blob\n    participant DB as Azure PostgreSQL\n\n    U->>API: Submit ticker\n    API->>Crew: run_financial_crew(ticker)\n    Crew->>Q: Task 1 - collect financial metrics\n    Q->>YF: Fetch fundamentals and SPY comparison\n    YF-->>Q: Structured market data\n    Q-->>Crew: Quantitative summary\n    Crew->>S: Task 2 - synthesize recommendation\n    S->>FC: Search recent news and sentiment\n    FC-->>S: Top scraped search results\n    S-->>Crew: Final markdown report\n    Crew-->>API: Crew output\n    API->>AZB: Upload report markdown\n    API->>DB: Save ticker, content, timestamp\n    API-->>U: Report content and blob URL\n```\n\n## Key Features\n\n- **Multi-agent workflow:** separates quantitative research from strategic synthesis for clearer responsibilities.\n- **Tool-augmented analysis:** agents use real data tools instead of relying only on model memory.\n- **Sequential reasoning:** the strategist receives the quantitative analyst's output as task context.\n- **Cloud persistence:** completed reports are stored in Azure Blob Storage and logged to PostgreSQL.\n- **API-first backend:** FastAPI exposes the workflow through a clean `POST /api/v1/analyze` endpoint.\n- **Interactive UI:** Streamlit provides a simple dashboard for running analyses and downloading reports.\n- **Markdown reports:** outputs are human-readable, portable, and easy to review.\n- **Configuration safety:** secrets and service endpoints are loaded from environment variables.\n\n## Tech Stack\n\n| Layer | Tools |\n| --- | --- |\n| Language | Python 3.12 |\n| Agent framework | CrewAI, CrewAI Tools |\n| LLM provider | OpenAI-compatible API key through CrewAI configuration |\n| Market data | yfinance |\n| Web research | Firecrawl |\n| API | FastAPI, Uvicorn, Pydantic |\n| UI | Streamlit |\n| Cloud storage | Azure Blob Storage |\n| Database | Azure PostgreSQL, SQLAlchemy, psycopg2 |\n| Config | python-dotenv, pydantic-settings |\n| Package manager | uv |\n\n## Repository Structure\n\n```text\n.\n|-- main.py                         # CLI entry point for the full pipeline\n|-- pyproject.toml                  # Python project metadata and dependencies\n|-- README.md                       # Project documentation\n|-- investment_report_*.md          # Example generated reports\n|-- frontend/\n|   |-- app.py                      # Streamlit dashboard\n|   `-- requirements.txt\n|-- src/\n|   |-- api/\n|   |   |-- main.py                 # FastAPI app initialization\n|   |   |-- models.py               # Pydantic request/response schemas\n|   |   `-- routes.py               # Analysis endpoint\n|   |-- agents/\n|   |   |-- agents.py               # CrewAI agent definitions\n|   |   |-- crew.py                 # Crew assembly and kickoff\n|   |   |-- tasks.py                # Task prompts and report output config\n|   |   `-- tools/\n|   |       |-- financial.py        # yfinance tools\n|   |       |-- scraper.py          # Firecrawl sentiment/news tool\n|   |       `-- search.py\n|   `-- shared/\n|       |-- config.py               # Environment-based settings\n|       |-- database.py             # Azure PostgreSQL persistence\n|       `-- storage.py              # Azure Blob upload service\n```\n\n## Prerequisites\n\n- Python `3.12+`\n- `uv` package manager\n- OpenAI API key\n- Firecrawl API key\n- Azure Storage Account connection string\n- Azure PostgreSQL connection string\n\n## Environment Variables\n\nCreate a `.env` file in the project root. You can use `.env.example` as a starting point.\n\n```env\nOPENAI_API_KEY=\"your-openai-key\"\nOPENAI_MODEL_NAME=\"gpt-4o\"\n\nFIRECRAWL_API_KEY=\"your-firecrawl-key\"\n\nAZURE_POSTGRES_CONNECTION_STRING=\"postgresql://user:password@host:5432/postgres?sslmode=require\"\nAZURE_BLOB_STORAGE_CONNECTION_STRING=\"DefaultEndpointsProtocol=https;AccountName=...\"\n\nLANGSMITH_API_KEY=\"optional-langsmith-key\"\nLANGSMITH_TRACING=true\nLANGSMITH_ENDPOINT=\"https://api.smith.langchain.com\"\nLANGSMITH_PROJECT=\"multiagent-azure-crewai\"\n```\n\nNotes:\n\n- `OPENAI_API_KEY` and `FIRECRAWL_API_KEY` are required for the agent workflow.\n- Azure connection strings are required for the full production pipeline.\n- LangSmith variables are optional and useful for tracing agent execution.\n\n## Installation\n\n```bash\nuv sync\n```\n\nIf you prefer a traditional virtual environment workflow:\n\n```bash\npython -m venv .venv\n.venv\\Scripts\\activate\npip install -e .\n```\n\n## Running the Project\n\n### Option 1: Run the CLI Pipeline\n\n```bash\nuv run python main.py\n```\n\nThe CLI asks for a ticker, runs the agents, prints the report, uploads it to Azure Blob Storage, and saves a record in PostgreSQL.\n\n### Option 2: Run the FastAPI Backend\n\n```bash\nuv run uvicorn src.api.main:app --reload\n```\n\nBackend URL:\n\n```text\nhttp://127.0.0.1:8000\n```\n\nInteractive API documentation:\n\n```text\nhttp://127.0.0.1:8000/docs\n```\n\n### Option 3: Run the Streamlit Frontend\n\nStart the backend first, then run:\n\n```bash\nuv run streamlit run frontend/app.py\n```\n\nStreamlit usually opens at:\n\n```text\nhttp://localhost:8501\n```\n\n## API Usage\n\nEndpoint:\n\n```http\nPOST /api/v1/analyze\n```\n\nRequest body:\n\n```json\n{\n  \"ticker\": \"MSFT\"\n}\n```\n\nResponse shape:\n\n```json\n{\n  \"status\": \"success\",\n  \"ticker\": \"MSFT\",\n  \"report_content\": \"Markdown report content...\",\n  \"report_url\": \"https://<account>.blob.core.windows.net/reports/investment_report_MSFT.md\",\n  \"message\": \"Analysis complete and saved to cloud.\"\n}\n```\n\nExample curl:\n\n```bash\ncurl -X POST \"http://127.0.0.1:8000/api/v1/analyze\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"ticker\\\":\\\"MSFT\\\"}\"\n```\n\n## Generated Output\n\nEach successful run creates a markdown report named:\n\n```text\ninvestment_report_<TICKER>.md\n```\n\nExample reports already present in this repository include:\n\n- `investment_report_MSFT.md`\n- `investment_report_TSLA.md`\n- `investment_report_META.md`\n\nThe report typically includes:\n\n- Final verdict\n- Key financial metrics\n- Performance comparison against `SPY`\n- Recent news or analyst sentiment\n- Investment rationale\n- Risk considerations\n\n## Data Model\n\nReports are logged in Azure PostgreSQL using the `reports_log` table.\n\n```mermaid\nerDiagram\n    REPORTS_LOG {\n        integer id PK\n        string ticker\n        text content\n        datetime created_at\n    }\n```\n\n## Why This Project Matters\n\nThis project demonstrates more than a basic chatbot. It shows how an AI system can be structured as an application:\n\n- Agents have explicit roles and tool access.\n- The workflow is deterministic enough to operate behind an API.\n- Outputs are persisted for auditability and reuse.\n- The system has both a developer interface and an end-user interface.\n- Cloud services are integrated into the application path instead of being treated as an afterthought.\n\nFor recruiters and hiring teams, this is a strong signal of hands-on experience with modern AI application development, backend service design, and Azure-connected Python systems.\n\n## Suggested Demo Script\n\n1. Start FastAPI with `uv run uvicorn src.api.main:app --reload`.\n2. Start Streamlit with `uv run streamlit run frontend/app.py`.\n3. Enter a ticker such as `MSFT`.\n4. Show the live report rendered in the UI.\n5. Open the metadata tab and show the Azure Blob URL.\n6. Point to the generated local markdown file.\n7. Walk through the Mermaid architecture diagram to explain the agent workflow.\n\n## Future Improvements\n\n- Add authentication for the API and frontend.\n- Add automated tests for tools, API models, and route behavior.\n- Add Dockerfile content for containerized deployment.\n- Add CI/CD for linting, tests, and deployment.\n- Store richer metadata such as token usage, latency, model name, and source URLs.\n- Add portfolio analytics across multiple tickers.\n- Add caching to reduce repeated API calls for the same ticker.\n\n## Project Status\n\nThe core local workflow, API route, Streamlit frontend, and Azure persistence services are implemented. The Dockerfile and infrastructure automation are placeholders and good next steps for a full deployment pipeline.\n","readmeExcerpt":"CrewAI Azure Financial Analyst Agent A production-style multi-agent AI application that researches public stock tickers, generates an investment report, and persists the result to Azure Blob Storage and Azure PostgreSQL. This project is designed to demonstrate practical agentic AI engineering: tool-using agents, structured API boundaries, cloud persistence, configuration management, and a lightweight user interface. ","codeSnippets":[],"executableExamples":[{"language":"mermaid","snippet":"flowchart TD\n    User[\"User / Recruiter / Analyst\"] --> UI[\"Streamlit UI<br/>frontend/app.py\"]\n    User --> CLI[\"CLI Runner<br/>main.py\"]\n    UI --> API[\"FastAPI Backend<br/>src/api/main.py\"]\n    API --> Route[\"POST /api/v1/analyze<br/>src/api/routes.py\"]\n    CLI --> Crew[\"CrewAI Orchestrator<br/>src/agents/crew.py\"]\n    Route --> Crew\n\n    Crew --> Quant[\"Senior Quantitative Analyst<br/>src/agents/agents.py\"]\n    Crew --> Strategist[\"Chief Investment Strategist<br/>src/agents/agents.py\"]\n\n    Quant --> Fundamentals[\"FundamentalAnalysisTool<br/>Yahoo Finance metrics\"]\n    Quant --> Compare[\"CompareStocksTool<br/>1-year return vs SPY\"]\n    Strategist --> Sentiment[\"SentimentSearchTool<br/>Firecrawl news search\"]\n\n    Fundamentals --> Report[\"Markdown Investment Report\"]\n    Compare --> Report\n    Sentiment --> Report\n\n    Report --> LocalFile[\"Local file<br/>investment_report_TICKER.md\"]\n    LocalFile --> Blob[\"Azure Blob Storage<br/>reports container\"]\n    Report --> Postgres[\"Azure PostgreSQL<br/>reports_log table\"]\n\n    API --> Response[\"JSON response<br/>report content + blob URL\"]\n    Response --> UI\n\n    click UI \"frontend/app.py\" \"Open Streamlit frontend\"\n    click CLI \"main.py\" \"Open CLI entry point\"\n    click API \"src/api/main.py\" \"Open FastAPI app\"\n    click Route \"src/api/routes.py\" \"Open API route\"\n    click Crew \"src/agents/crew.py\" \"Open CrewAI orchestration\"\n    click Quant \"src/agents/agents.py\" \"Open agent definitions\"\n    click Strategist \"src/agents/agents.py\" \"Open agent definitions\"\n    click Fundamentals \"src/agents/tools/financial.py\" \"Open financial tools\"\n    click Compare \"src/agents/tools/financial.py\" \"Open comparison tool\"\n    click Sentiment \"src/agents/tools/scraper.py\" \"Open Firecrawl tool\"\n    click Blob \"src/shared/storage.py\" \"Open Azure Blob service\"\n    click Postgres \"src/shared/database.py\" \"Open database service\""},{"language":"mermaid","snippet":"sequenceDiagram\n    autonumber\n    participant U as User\n    participant API as FastAPI / CLI\n    participant Crew as CrewAI Crew\n    participant Q as Quantitative Analyst\n    participant S as Investment Strategist\n    participant YF as Yahoo Finance\n    participant FC as Firecrawl\n    participant AZB as Azure Blob\n    participant DB as Azure PostgreSQL\n\n    U->>API: Submit ticker\n    API->>Crew: run_financial_crew(ticker)\n    Crew->>Q: Task 1 - collect financial metrics\n    Q->>YF: Fetch fundamentals and SPY comparison\n    YF-->>Q: Structured market data\n    Q-->>Crew: Quantitative summary\n    Crew->>S: Task 2 - synthesize recommendation\n    S->>FC: Search recent news and sentiment\n    FC-->>S: Top scraped search results\n    S-->>Crew: Final markdown report\n    Crew-->>API: Crew output\n    API->>AZB: Upload report markdown\n    API->>DB: Save ticker, content, timestamp\n    API-->>U: Report content and blob URL"},{"language":"text","snippet":".\n|-- main.py                         # CLI entry point for the full pipeline\n|-- pyproject.toml                  # Python project metadata and dependencies\n|-- README.md                       # Project documentation\n|-- investment_report_*.md          # Example generated reports\n|-- frontend/\n|   |-- app.py                      # Streamlit dashboard\n|   `-- requirements.txt\n|-- src/\n|   |-- api/\n|   |   |-- main.py                 # FastAPI app initialization\n|   |   |-- models.py               # Pydantic request/response schemas\n|   |   `-- routes.py               # Analysis endpoint\n|   |-- agents/\n|   |   |-- agents.py               # CrewAI agent definitions\n|   |   |-- crew.py                 # Crew assembly and kickoff\n|   |   |-- tasks.py                # Task prompts and report output config\n|   |   `-- tools/\n|   |       |-- financial.py        # yfinance tools\n|   |       |-- scraper.py          # Firecrawl sentiment/news tool\n|   |       `-- search.py\n|   `-- shared/\n|       |-- config.py               # Environment-based settings\n|       |-- database.py             # Azure PostgreSQL persistence\n|       `-- storage.py              # Azure Blob upload service"},{"language":"env","snippet":"OPENAI_API_KEY=\"your-openai-key\"\nOPENAI_MODEL_NAME=\"gpt-4o\"\n\nFIRECRAWL_API_KEY=\"your-firecrawl-key\"\n\nAZURE_POSTGRES_CONNECTION_STRING=\"postgresql://user:password@host:5432/postgres?sslmode=require\"\nAZURE_BLOB_STORAGE_CONNECTION_STRING=\"DefaultEndpointsProtocol=https;AccountName=...\"\n\nLANGSMITH_API_KEY=\"optional-langsmith-key\"\nLANGSMITH_TRACING=true\nLANGSMITH_ENDPOINT=\"https://api.smith.langchain.com\"\nLANGSMITH_PROJECT=\"multiagent-azure-crewai\""},{"language":"bash","snippet":"uv sync"},{"language":"bash","snippet":"python -m venv .venv\n.venv\\Scripts\\activate\npip install -e ."}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[],"languages":["python"],"docsSourceLabel":"GITHUB OPENCLEW","editorialOverview":"AI financial analyst using CrewAI agents to research stock tickers, combine market data with news sentiment, generate investment reports, and persist results with Azure Blob Storage and PostgreSQL. Built with Python, FastAPI, Streamlit, yfinance, Firecrawl, and Azure. CrewAI Azure Financial Analyst Agent A production-style multi-agent AI application that researches public stock tickers, generates an investment report, and persists the result to Azure Blob Storage and Azure PostgreSQL. This project is designed to demonstrate practical agentic AI engineering: tool-using agents, structured API boundaries, cloud persistence, configuration management, and a lightweight user interface.","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":406,"uniquenessScore":66,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-05-18T06:45:09.067Z","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-18T06:45:09.067Z","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-09T02:38:19.373Z","emptyReason":null},"items":[{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-10T18:48:31.762Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/github_openclew","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}