{"id":"39e20932-8575-4633-8100-834a631e03e4","entityType":"agent","slug":"crewai-anuragtiwari73219-byte-crew-blog-agent","name":"crew-blog-agent","canonicalUrl":"https://www.xpersona.co/agent/crewai-anuragtiwari73219-byte-crew-blog-agent","canonicalPath":"/agent/crewai-anuragtiwari73219-byte-crew-blog-agent","generatedAt":"2026-10-10T05:22:55.150Z","source":"GITHUB_REPOS","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T17:02:02.490Z","emptyReason":null},"description":"Built a multi-agent AI workflow that performs real-time web research, extracts data-backed insights, and generates structured blog content using CrewAI, Groq LLM, and Serper Search API. 🤖 Repo Blog Agent A multi-agent AI pipeline that fetches a GitHub repository's README and metadata, then generates a fact-checked blog post introducing the project — fully automated. What It Does Three AI agents work sequentially, with an automatic correction loop: 1. **Technical Analyst** — Reads the repo's README, description, and metadata (fetched live via the GitHub API). Extracts what the project does, its tech","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1 GitHub stars reported by the source. Last updated 10/9/2026.","installCommand":null,"sourceUrl":"https://github.com/anuragtiwari73219-byte/crew-blog-agent","homepage":null,"primaryLinks":[{"label":"View Source","url":"https://github.com/anuragtiwari73219-byte/crew-blog-agent","kind":"source"}],"safetyScore":66,"overallRank":20.8,"popularityScore":8,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Built a multi-agent AI workflow that performs real-time web research, extracts data-backed insights, and generates structured blog content using CrewAI, Groq LL"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T17:02:02.490Z","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":"GITHUB REPOS","verified":false,"confidence":"medium","updatedAt":"2026-10-09T17:02:02.490Z","emptyReason":null},"stars":1,"forks":1,"downloads":null,"packageName":null,"latestVersion":null,"tractionLabel":"1 GitHub stars"},"release":{"evidence":{"source":"agent-index","verified":false,"confidence":"medium","updatedAt":"2026-10-09T17:02:02.485Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T17:02:02.490Z","lastCrawledAt":"2026-10-09T17:02:02.485Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-16T17:02:02.485Z","lastVerifiedAt":null,"highlights":[]},"execution":{"evidence":{"source":"GITHUB REPOS","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":null,"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-anuragtiwari73219-byte-crew-blog-agent/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/crewai-anuragtiwari73219-byte-crew-blog-agent/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/crewai-anuragtiwari73219-byte-crew-blog-agent/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/crewai-anuragtiwari73219-byte-crew-blog-agent/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/crewai-anuragtiwari73219-byte-crew-blog-agent/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/crewai-anuragtiwari73219-byte-crew-blog-agent/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"GITHUB_REPOS","generatedAt":"2026-10-10T05:22:55.150Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/crewai-anuragtiwari73219-byte-crew-blog-agent/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/crewai-anuragtiwari73219-byte-crew-blog-agent/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/crewai-anuragtiwari73219-byte-crew-blog-agent/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/crewai-anuragtiwari73219-byte-crew-blog-agent/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 REPOS","verified":false,"confidence":"high","updatedAt":"2026-10-09T17:02:02.490Z","emptyReason":null},"readme":"# 🤖 Repo Blog Agent\n\nA multi-agent AI pipeline that fetches a GitHub repository's README and metadata, then generates a fact-checked blog post introducing the project — fully automated.\n\n## What It Does\n\nThree AI agents work sequentially, with an automatic correction loop:\n\n1. **Technical Analyst** — Reads the repo's README, description, and metadata (fetched live via the GitHub API). Extracts what the project does, its tech stack, a notable technical detail, and any limitations — using only the source material, no outside knowledge.\n2. **Content Writer** — Takes the analysis and writes a ~350-word blog post introducing the project to a developer audience, using only facts from the analysis.\n3. **Fact Checker** — Cross-checks every claim in the blog post against the technical analysis and README. Flags anything invented, unsupported, or altered (including subtly changed numbers), and returns a PASS/FLAGGED verdict.\n\n**If the fact-checker flags any claim, the pipeline doesn't just report it — it acts on it.** The flagged claims are sent back to the Content Writer for a targeted rewrite, and the Fact Checker re-verifies the revised post. The saved output file is only marked `_FLAGGED` if a claim is still unresolved after that revision pass.\n\nNo hallucinated facts. The fact-checker has been stress-tested against fabricated claims (invented features, invented stats, and subtly altered numbers) and consistently catches them — see `test_fact_checker.py` and `test_fact_checker_extended.py`.\n\n## Tech Stack\n\n- [CrewAI](https://github.com/crewAIInc/crewAI) — multi-agent orchestration framework\n- [Groq](https://groq.com/) — LLM inference (llama-3.3-70b-versatile)\n- GitHub REST API — live repo metadata and README fetching\n- Python 3.11\n\n## Project Structure\n\n```\ncrew-blog-agent/\n├── repo_blog_agent.py              # Main pipeline — fetches repo, runs 3-agent crew, handles revision loop\n├── test_fact_checker.py            # Stress test: blunt fabricated claims\n├── test_fact_checker_extended.py   # Stress test: subtle number distortion + consistency\n├── index.md                         # GitHub Pages demo output\n├── output/                          # Timestamped .md output per run (blog post + fact-check report)\n├── .env                             # API keys (not committed)\n└── README.md\n```\n\n## Setup\n\n**1. Clone and create virtual environment**\n```\ngit clone https://github.com/anuragtiwari73219-byte/crew-blog-agent\ncd crew-blog-agent\npython -m venv venv\nvenv\\Scripts\\activate      # Windows\nsource venv/bin/activate   # Mac/Linux\n```\n\n**2. Install dependencies**\n```\npip install -r requirements.txt\n```\n\n**3. Add API keys**\n\nCreate a `.env` file:\n```\nGROQ_API_KEY=your_groq_key_here\nGITHUB_TOKEN=your_github_token_here   # optional, but recommended (60/hr -> 5000/hr)\n```\nGet keys from:\n- Groq: https://console.groq.com\n- GitHub: https://github.com/settings/tokens\n\n**4. Run**\n```\npython repo_blog_agent.py --repo owner/repo-name\n```\nExample:\n```\npython repo_blog_agent.py --repo anuragtiwari73219-byte/ai-email-triage-agent\n```\n\nOutput is saved to `output/<repo-name>_<timestamp>.md` (or `..._FLAGGED.md` if a claim was still unresolved after revision), containing both the blog post and the fact-check report.\n\n## How It Works\n\n```\n--repo owner/repo-name\n      ↓\nFetch README + metadata (GitHub API)\n      ↓\nTechnical Analyst\n  → Extracts: what it does, tech stack, notable detail, limitations\n  → Strictly from README/metadata — no outside knowledge\n      ↓\nContent Writer\n  → Writes ~350-word blog post using only the analyst's output\n      ↓\nFact Checker\n  → Lists every claim in the blog post\n  → Marks each SUPPORTED (cites source) or UNSUPPORTED/INVENTED\n  → Verdict: PASS or FLAGGED\n      ↓\n   FLAGGED? ──── yes ───→ Content Writer revises the flagged claims only\n      │                          ↓\n      │                    Fact Checker re-checks the revision\n      │                          ↓\n      no                   PASS or still FLAGGED\n      │                          │\n      └──────────────┬───────────┘\n                      ↓\n     Blog post + fact-check report saved to output/\n     (filename suffixed _FLAGGED only if still unresolved)\n```\n\n## Fact-Checker Validation\n\nBecause a fact-checker that never flags anything isn't a real safeguard, it was stress-tested separately from the main pipeline:\n\n- **`test_fact_checker.py`** — Feeds the checker a blog post with 3 blunt fabricated claims (invented user counts, invented features, a fabricated feature that directly contradicts a stated limitation). Result: all 3 caught, correctly FLAGGED.\n- **`test_fact_checker_extended.py`** — Two further checks:\n  - Subtle distortion: a real accuracy stat quietly changed (93%→99%, 9→12 categories). Result: caught, correctly FLAGGED.\n  - Consistency: same fabricated-claims test run 3x. Result: FLAGGED all 3 times, same claims named each time.\n\nBeyond that stress test, the full pipeline (not just the checker in isolation) has also been run end-to-end against real repos and produced a genuine FLAGGED verdict on an unsupported claim, which the revision loop then corrected on re-check — confirming the checker, the revision step, and the save-gating logic all work together, not just the checker alone.\n\nThis is a small sample, not a comprehensive audit — but it confirms the fact-checker does real verification rather than rubber-stamping every post as PASS.\n\n## Bugs Fixed During Development\n\n**1. Groq rejects CrewAI's cache_breakpoint field**\nCrewAI 1.14.x injects a `cache_breakpoint` property into system messages for Anthropic's prompt caching feature. Groq's API rejects this field with a 400 invalid_request_error.\n\nFix applied in `repo_blog_agent.py`:\n```python\nimport crewai.llms.cache as _crewai_cache\n_crewai_cache.mark_cache_breakpoint = lambda msg: msg\n```\nThis monkey-patches the function to return the message unchanged, stripping the unsupported field before it reaches Groq's API. Tracked in CrewAI GitHub Issue #5886 (crewAIInc/crewAI#5886).\n\n**2. Groq's llama-3.3-70b-versatile intermittently fails tool calls**\nKnown upstream Groq issue — the model occasionally returns a malformed function-call string instead of valid JSON, causing a `tool_use_failed` error. Intermittent (same prompt can succeed or fail across runs). Mitigated with `temperature=0` and a retry wrapper around `crew.kickoff()`.\n\n**3. GitHub API description/README mismatches**\nWhen a repo's GitHub description hasn't been updated to match its README (e.g. after a tech-stack migration), the analyst agent can pull stale/conflicting info. Worth double-checking the target repo's description is current before running.\n\n**4. Fact-checker verdict was computed but never acted on**\nOriginally, the PASS/FLAGGED verdict was printed to the terminal but had no effect on the saved output — a FLAGGED post was saved exactly like a PASSed one, so the fact-checking step was cosmetic rather than a real safeguard. Fixed by gating the save on the verdict: FLAGGED now triggers a revision task (Content Writer rewrites the specific failed claims, Fact Checker re-checks), and the output filename is only suffixed `_FLAGGED` if it's still unresolved after that.\n\n**5. Saved output only ever contained the fact-check report, never the blog post**\n`crew.kickoff()` returns only the *last* task's output — in this pipeline, that's the Fact Checker's report, not the Content Writer's blog post. Every saved `.md` file was silently missing the actual blog post. Fixed by explicitly pulling `write_task.output` (or `revision_task.output` after a revision) alongside the fact-check report when building the saved file.\n\n## What I'd Add Next\n\n- Broaden fact-checker stress tests beyond number/feature fabrication (e.g. wrong attribution, misleading paraphrase)\n- Batch mode — generate posts for multiple repos in one run\n- Cap the revision loop to more than one retry, with a hard stop and manual-review flag if still FLAGGED after N attempts","readmeExcerpt":"🤖 Repo Blog Agent A multi-agent AI pipeline that fetches a GitHub repository's README and metadata, then generates a fact-checked blog post introducing the project — fully automated. What It Does Three AI agents work sequentially, with an automatic correction loop: 1. **Technical Analyst** — Reads the repo's README, description, and metadata (fetched live via the GitHub API). Extracts what the project does, its tech","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"crew-blog-agent/\n├── repo_blog_agent.py              # Main pipeline — fetches repo, runs 3-agent crew, handles revision loop\n├── test_fact_checker.py            # Stress test: blunt fabricated claims\n├── test_fact_checker_extended.py   # Stress test: subtle number distortion + consistency\n├── index.md                         # GitHub Pages demo output\n├── output/                          # Timestamped .md output per run (blog post + fact-check report)\n├── .env                             # API keys (not committed)\n└── README.md"},{"language":"text","snippet":"git clone https://github.com/anuragtiwari73219-byte/crew-blog-agent\ncd crew-blog-agent\npython -m venv venv\nvenv\\Scripts\\activate      # Windows\nsource venv/bin/activate   # Mac/Linux"},{"language":"text","snippet":"pip install -r requirements.txt"},{"language":"text","snippet":"GROQ_API_KEY=your_groq_key_here\nGITHUB_TOKEN=your_github_token_here   # optional, but recommended (60/hr -> 5000/hr)"},{"language":"text","snippet":"python repo_blog_agent.py --repo owner/repo-name"},{"language":"text","snippet":"python repo_blog_agent.py --repo anuragtiwari73219-byte/ai-email-triage-agent"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[],"languages":["python"],"docsSourceLabel":"GITHUB REPOS","editorialOverview":"Built a multi-agent AI workflow that performs real-time web research, extracts data-backed insights, and generates structured blog content using CrewAI, Groq LLM, and Serper Search API. 🤖 Repo Blog Agent A multi-agent AI pipeline that fetches a GitHub repository's README and metadata, then generates a fact-checked blog post introducing the project — fully automated. What It Does Three AI agents work sequentially, with an automatic correction loop: 1. **Technical Analyst** — Reads the repo's README, description, and metadata (fetched live via the GitHub API). Extracts what the project does, its tech","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":402,"uniquenessScore":65,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T17:02:02.490Z","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-10-09T17:02:02.490Z","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-10T05:22:55.150Z","emptyReason":null},"items":[{"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-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"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":"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_repos","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}