{"id":"bdd3449e-77e3-43c8-93ef-246bb95309c6","entityType":"agent","slug":"crewai-ashish-code-crewai-rag-chatbot","name":"crewai-rag-chatbot","canonicalUrl":"https://www.xpersona.co/agent/crewai-ashish-code-crewai-rag-chatbot","canonicalPath":"/agent/crewai-ashish-code-crewai-rag-chatbot","generatedAt":"2026-10-09T00:56:59.047Z","source":"GITHUB_OPENCLEW","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-06-01T00:30:48.752Z","emptyReason":null},"description":"4-agent CrewAI RAG chatbot: query planning, semantic retrieval, cited synthesis, and claim validation. Groq Llama 3.3 70B + ChromaDB + local embeddings. Docker + EC2 deploy. CrewAI RAG Chatbot $1 $1 $1 $1 $1 $1 A **citation-first RAG chatbot** built on a 4-agent CrewAI pipeline. Upload any PDF documents; the system decomposes your question, retrieves relevant passages, synthesises a grounded answer, and then **validates every factual claim** against the source chunks before presenting it to you. LLM inference runs on $1 (Llama 3.3 70B). Embeddings are computed locally (no API cost). The","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. Last updated 6/1/2026.","installCommand":"git clone https://github.com/ashish-code/crewai-rag-chatbot.git","sourceUrl":"https://github.com/ashish-code/crewai-rag-chatbot","homepage":null,"primaryLinks":[{"label":"View Source","url":"https://github.com/ashish-code/crewai-rag-chatbot","kind":"source"}],"safetyScore":66,"overallRank":19,"popularityScore":0,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"4-agent CrewAI RAG chatbot: query planning, semantic retrieval, cited synthesis, and claim validation. Groq Llama 3.3 70B + ChromaDB + local embeddings. Docker "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-06-01T00:30:48.752Z","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-06-01T00:30:48.752Z","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-06-01T00:30:48.751Z","emptyReason":null},"lastUpdatedAt":"2026-06-01T00:30:48.752Z","lastCrawledAt":"2026-06-01T00:30:48.751Z","lastIndexedAt":null,"nextCrawlAt":"2026-06-08T00:30:48.751Z","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/ashish-code/crewai-rag-chatbot.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-ashish-code-crewai-rag-chatbot/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/crewai-ashish-code-crewai-rag-chatbot/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/crewai-ashish-code-crewai-rag-chatbot/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/crewai-ashish-code-crewai-rag-chatbot/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/crewai-ashish-code-crewai-rag-chatbot/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/crewai-ashish-code-crewai-rag-chatbot/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-09T00:56:59.047Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/crewai-ashish-code-crewai-rag-chatbot/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/crewai-ashish-code-crewai-rag-chatbot/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/crewai-ashish-code-crewai-rag-chatbot/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/crewai-ashish-code-crewai-rag-chatbot/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-06-01T00:30:48.752Z","emptyReason":null},"readme":"# CrewAI RAG Chatbot\n\n[![Python](https://img.shields.io/badge/Python-3.12+-3776AB?logo=python&logoColor=white)](https://www.python.org/)\n[![CrewAI](https://img.shields.io/badge/CrewAI-0.80+-FF6B6B)](https://www.crewai.com/)\n[![ChromaDB](https://img.shields.io/badge/ChromaDB-1.0-orange)](https://www.trychroma.com/)\n[![Streamlit](https://img.shields.io/badge/Streamlit-1.42+-FF4B4B?logo=streamlit&logoColor=white)](https://streamlit.io/)\n[![Docker](https://img.shields.io/badge/Docker-ready-2496ED?logo=docker&logoColor=white)](https://www.docker.com/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\nA **citation-first RAG chatbot** built on a 4-agent CrewAI pipeline. Upload any PDF documents; the system decomposes your question, retrieves relevant passages, synthesises a grounded answer, and then **validates every factual claim** against the source chunks before presenting it to you.\n\nLLM inference runs on [Groq](https://groq.com/) (Llama 3.3 70B). Embeddings are computed locally (no API cost). The full pipeline runs in Docker and can be deployed to AWS EC2 in one command.\n\n---\n\n## Architecture\n\n```mermaid\nflowchart LR\n    subgraph Ingest[\"📄 Ingestion\"]\n        PDF[\"PDF Upload\"] --> Parse[\"pypdf parser\"]\n        Parse --> Chunk[\"Sentence chunker\\n800 chars, 100 overlap\"]\n        Chunk --> Embed[\"all-MiniLM-L6-v2\\n(local embeddings)\"]\n        Embed --> Store[\"ChromaDB\\nPersistent vector store\"]\n    end\n\n    subgraph Query[\"💬 Query Pipeline (CrewAI)\"]\n        Q[\"User question\"] --> P[\"🔍 Planner Agent\\nDecomposes into 2-3 sub-queries\"]\n        P --> R[\"📚 Retriever Agent\\nSearches ChromaDB per sub-query\"]\n        R --> S[\"✍️ Synthesizer Agent\\nBuilds cited answer (markdown)\"]\n        S --> V[\"✅ Validator Agent\\nFact-checks every claim\"]\n        V --> A[\"Final answer\\nwith PASS / FLAG labels\"]\n    end\n\n    Store --> R\n```\n\n### Agent Responsibilities\n\n| Agent | Role | Output |\n|-------|------|--------|\n| **Planner** | Decomposes the user query into 2–3 focused sub-queries | Plain-text sub-query list |\n| **Retriever** | Runs each sub-query against ChromaDB; tags every chunk with `[source:file, page:N, chunk:N]` | Raw chunk bundle |\n| **Synthesizer** | Writes a structured markdown answer grounded solely in retrieved chunks | Cited answer |\n| **Validator** | Cross-checks every factual claim against the raw chunks; marks each PASS or FLAG | Validation report |\n\nAll agents share a single LLM (Groq Llama 3.3 70B, temperature = 0) for fully deterministic, auditable output.\n\n---\n\n## Features\n\n- **4-agent validation pipeline** — answers are fact-checked before delivery, surfacing hallucinations proactively\n- **Semantic chunking** — sentence-boundary splitting with 100-character overlap preserves context\n- **Idempotent ingestion** — deterministic chunk IDs (SHA-256 hash) mean re-uploading the same PDF is a no-op\n- **Local embeddings** — `all-MiniLM-L6-v2` runs on-device; no embedding API costs\n- **Source attribution** — every claim is linked back to `[Doc: filename, Chunk N]`\n- **Zero-friction uploads** — drag-and-drop PDFs via sidebar; auto-ingested at app startup from `./docs/`\n- **Docker-ready** — embedding model pre-baked into image to avoid cold-start delays\n- **One-command EC2 deploy** — `infra/deploy.sh` rsyncs, rebuilds, and restarts the container\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n- Python 3.12+\n- [Groq API key](https://console.groq.com/) (free tier available)\n- [uv](https://docs.astral.sh/uv/) package manager (recommended) or pip\n\n### Local development\n\n```bash\ngit clone https://github.com/ashish-code/crewai-rag-chatbot\ncd crewai-rag-chatbot\n\n# Install dependencies\nuv sync           # or: pip install -e .\n\n# Configure environment\ncp .env.example .env\n# Edit .env and set GROQ_API_KEY\n\n# Configure Streamlit password (optional — comment out login gate in app.py to skip)\nmkdir -p .streamlit\necho 'password = \"changeme\"' > .streamlit/secrets.toml\n\n# (Optional) pre-load documents\ncp your_docs/*.pdf docs/\n\n# Run\nstreamlit run app.py\n```\n\nThe app opens at **http://localhost:8501**.\n\n### Docker\n\n```bash\ncp .env.example .env          # set GROQ_API_KEY\necho 'password = \"changeme\"' > .streamlit/secrets.toml\n\ndocker compose up --build\n```\n\nChroma data persists in the `chroma_data` Docker volume between restarts.\n\n---\n\n## Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `GROQ_API_KEY` | ✅ | Your Groq API key — obtain from [console.groq.com](https://console.groq.com/) |\n\n**Streamlit secrets** (`.streamlit/secrets.toml`):\n\n```toml\npassword = \"your-login-password\"\n```\n\n---\n\n## Project Layout\n\n```\ncrewai-rag-chatbot/\n├── app.py                      # Streamlit entry point + login gate\n├── src/\n│   ├── agents/                 # CrewAI agent definitions (planner, retriever, synthesizer, validator)\n│   ├── crew/                   # Pipeline orchestration (sequential crew)\n│   ├── ingestion/              # PDF parsing + sentence-level chunker\n│   ├── models/                 # LLM factory (Groq via LiteLLM)\n│   ├── ui/                     # Streamlit UI components\n│   └── vector_store/           # ChromaDB client + search helpers\n├── docs/                       # Drop PDFs here for auto-ingestion on startup\n├── infra/\n│   ├── setup_ec2.sh            # One-time EC2 bootstrap (Docker + swap)\n│   └── deploy.sh               # Rsync + rebuild + restart on EC2\n├── .env.example                # Environment template\n├── docker-compose.yml\n├── Dockerfile\n└── pyproject.toml\n```\n\n---\n\n## Deploying to AWS EC2\n\n1. Launch an EC2 instance (t2.small or larger recommended; t2.micro works with 1 GB swap).\n\n2. Bootstrap the instance (first time only):\n   ```bash\n   ssh -i key.pem ec2-user@<EC2_IP> 'bash -s' < infra/setup_ec2.sh\n   ```\n\n3. Deploy or re-deploy:\n   ```bash\n   bash infra/deploy.sh <EC2_IP> key.pem\n   ```\n   This rsyncs the project (excluding `chroma_db`, `__pycache__`, `.git`), rebuilds the Docker image, and restarts the service. The Chroma volume is preserved across deploys.\n\n4. Access the app at `http://<EC2_IP>:8501`.\n\n---\n\n## How the RAG Pipeline Works\n\n```\nUser question\n    │\n    ▼\n[Planner]  → \"What are the maintenance intervals?\"\n             \"What failure modes exist?\"\n    │\n    ▼\n[Retriever] → queries ChromaDB with each sub-query\n              → returns chunks tagged [source:manual.pdf, page:12, chunk:3]\n    │\n    ▼\n[Synthesizer] → \"According to [Doc: manual.pdf, Chunk 3], the interval is…\"\n    │\n    ▼\n[Validator] → Claim: \"interval is 6 months\" → PASS (found in chunk 3)\n              Claim: \"costs $500\" → FLAG: not found in retrieved chunks\n    │\n    ▼\nFinal answer with validation report\n```\n\n---\n\n## Dependencies\n\n| Package | Purpose |\n|---------|---------|\n| `crewai` | Multi-agent orchestration |\n| `litellm` | Unified LLM gateway (Groq, OpenAI, Anthropic, …) |\n| `chromadb` | Persistent vector store |\n| `sentence-transformers` | Local embedding model |\n| `torch` | Backend for sentence-transformers |\n| `pypdf` | PDF text extraction |\n| `streamlit` | Web UI |\n\n---\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","readmeExcerpt":"CrewAI RAG Chatbot $1 $1 $1 $1 $1 $1 A **citation-first RAG chatbot** built on a 4-agent CrewAI pipeline. Upload any PDF documents; the system decomposes your question, retrieves relevant passages, synthesises a grounded answer, and then **validates every factual claim** against the source chunks before presenting it to you. LLM inference runs on $1 (Llama 3.3 70B). Embeddings are computed locally (no API cost). The ","codeSnippets":[],"executableExamples":[{"language":"mermaid","snippet":"flowchart LR\n    subgraph Ingest[\"📄 Ingestion\"]\n        PDF[\"PDF Upload\"] --> Parse[\"pypdf parser\"]\n        Parse --> Chunk[\"Sentence chunker\\n800 chars, 100 overlap\"]\n        Chunk --> Embed[\"all-MiniLM-L6-v2\\n(local embeddings)\"]\n        Embed --> Store[\"ChromaDB\\nPersistent vector store\"]\n    end\n\n    subgraph Query[\"💬 Query Pipeline (CrewAI)\"]\n        Q[\"User question\"] --> P[\"🔍 Planner Agent\\nDecomposes into 2-3 sub-queries\"]\n        P --> R[\"📚 Retriever Agent\\nSearches ChromaDB per sub-query\"]\n        R --> S[\"✍️ Synthesizer Agent\\nBuilds cited answer (markdown)\"]\n        S --> V[\"✅ Validator Agent\\nFact-checks every claim\"]\n        V --> A[\"Final answer\\nwith PASS / FLAG labels\"]\n    end\n\n    Store --> R"},{"language":"bash","snippet":"git clone https://github.com/ashish-code/crewai-rag-chatbot\ncd crewai-rag-chatbot\n\n# Install dependencies\nuv sync           # or: pip install -e .\n\n# Configure environment\ncp .env.example .env\n# Edit .env and set GROQ_API_KEY\n\n# Configure Streamlit password (optional — comment out login gate in app.py to skip)\nmkdir -p .streamlit\necho 'password = \"changeme\"' > .streamlit/secrets.toml\n\n# (Optional) pre-load documents\ncp your_docs/*.pdf docs/\n\n# Run\nstreamlit run app.py"},{"language":"bash","snippet":"cp .env.example .env          # set GROQ_API_KEY\necho 'password = \"changeme\"' > .streamlit/secrets.toml\n\ndocker compose up --build"},{"language":"toml","snippet":"password = \"your-login-password\""},{"language":"text","snippet":"crewai-rag-chatbot/\n├── app.py                      # Streamlit entry point + login gate\n├── src/\n│   ├── agents/                 # CrewAI agent definitions (planner, retriever, synthesizer, validator)\n│   ├── crew/                   # Pipeline orchestration (sequential crew)\n│   ├── ingestion/              # PDF parsing + sentence-level chunker\n│   ├── models/                 # LLM factory (Groq via LiteLLM)\n│   ├── ui/                     # Streamlit UI components\n│   └── vector_store/           # ChromaDB client + search helpers\n├── docs/                       # Drop PDFs here for auto-ingestion on startup\n├── infra/\n│   ├── setup_ec2.sh            # One-time EC2 bootstrap (Docker + swap)\n│   └── deploy.sh               # Rsync + rebuild + restart on EC2\n├── .env.example                # Environment template\n├── docker-compose.yml\n├── Dockerfile\n└── pyproject.toml"},{"language":"bash","snippet":"ssh -i key.pem ec2-user@<EC2_IP> 'bash -s' < infra/setup_ec2.sh"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[],"languages":["python"],"docsSourceLabel":"GITHUB OPENCLEW","editorialOverview":"4-agent CrewAI RAG chatbot: query planning, semantic retrieval, cited synthesis, and claim validation. Groq Llama 3.3 70B + ChromaDB + local embeddings. Docker + EC2 deploy. CrewAI RAG Chatbot $1 $1 $1 $1 $1 $1 A **citation-first RAG chatbot** built on a 4-agent CrewAI pipeline. Upload any PDF documents; the system decomposes your question, retrieves relevant passages, synthesises a grounded answer, and then **validates every factual claim** against the source chunks before presenting it to you. LLM inference runs on $1 (Llama 3.3 70B). Embeddings are computed locally (no API cost). The","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":392,"uniquenessScore":68,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-06-01T00:30:48.752Z","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-06-01T00:30:48.752Z","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-09T00:56:59.047Z","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"}]}}}