Build a role-based VC scouting crew where the scout, analyst, and skeptic share live engineering signals.
POST https://signals.gitdealflow.com/api/a2aCrewAI's core unit is the role: a scout who finds, an analyst who writes, a skeptic who pokes holes. The pattern fits venture work better than any other agent framework — diligence is exactly that conversation. The missing piece is data. Without it, the scout is hallucinating company names from training-data fragments and the skeptic is correcting them.
Plug GitDealFlow's A2A endpoint in as a single BaseTool and the scout becomes credible. Now it's pulling 985+ real startups, ranked by 14-day commit velocity, with an SSRN-anchored methodology the skeptic can cite back. Run the crew on a Monday cron and your weekly deal-flow review writes itself: who's accelerating, who's stalling, who deserves a partner check-in.
Three agents, one tool, structured handoff. Scout pulls top 20 trending. Analyst drafts a 1-pager on the top result. Skeptic challenges the pick by demanding the methodology citation.
Daily/weekly Process schedules let CrewAI run unattended. Pipe the result into Slack, Notion, Linear — anywhere the team already lives.
Crews chain tools cleanly. Add SerpAPI for press, the Crunchbase free tier for funding history, GitHub REST for repo facts. GitDealFlow contributes the velocity signal nothing else has.
Set verbose=True for the first run to see exactly which skill the agent picked, then strip it back for production. The five skills are tightly named so the LLM almost never picks wrong.
# pip install crewai crewai-tools requests
from crewai import Agent, Task, Crew, Process
from crewai_tools import BaseTool
import requests
A2A = "https://signals.gitdealflow.com/api/a2a"
class GitDealFlowTool(BaseTool):
name: str = "gitdealflow"
description: str = (
"Live VC engineering signals. "
"skill: get_trending_startups | search_startups_by_sector | "
"get_startup_signal | get_signals_summary | get_methodology"
)
def _run(self, skill: str, args: dict | None = None) -> dict:
body = {"jsonrpc":"2.0","id":1,"method":"message/send",
"params":{"message":{"role":"user","parts":[
{"kind":"data","data":{"skill": skill, "args": args or {}}},
]}}}
return requests.post(A2A, json=body, timeout=15).json()
tool = GitDealFlowTool()
scout = Agent(role="Scout",
goal="Surface this week's most accelerated startups in fintech.",
backstory="A relentless deal sourcer with a nose for breakouts.",
tools=[tool])
analyst = Agent(role="Analyst",
goal="Write a 1-page memo on the scout's top pick.",
backstory="An ex-LP partner who writes diligence memos in their sleep.",
tools=[tool])
skeptic = Agent(role="Skeptic",
goal="Cite the methodology and challenge the analyst's conclusion.",
backstory="A contrarian who demands evidence over narrative.",
tools=[tool])
crew = Crew(
agents=[scout, analyst, skeptic],
tasks=[
Task(description="Pull trending fintech this week.", agent=scout, expected_output="Top 5 with signal data."),
Task(description="Memo on the top pick.", agent=analyst, expected_output="One-page deal memo."),
Task(description="Cite methodology + push back.", agent=skeptic, expected_output="Two paragraph rebuttal."),
],
process=Process.sequential,
verbose=True,
)
print(crew.kickoff())from pydantic import BaseModel
from crewai_tools import BaseTool
from typing import Literal, Any
import requests, schedule, time
A2A = "https://signals.gitdealflow.com/api/a2a"
class GitDealFlowArgs(BaseModel):
skill: Literal[
"get_trending_startups", "search_startups_by_sector",
"get_startup_signal", "get_signals_summary", "get_methodology",
]
args: dict[str, Any] | None = None
class GitDealFlowTool(BaseTool):
name: str = "gitdealflow"
description: str = "Live VC engineering signals — strict typed args."
args_schema: type[BaseModel] = GitDealFlowArgs
def _run(self, skill: str, args: dict | None = None) -> dict:
body = {"jsonrpc":"2.0","id":1,"method":"message/send",
"params":{"message":{"role":"user","parts":[
{"kind":"data","data":{"skill": skill, "args": args or {}}},
]}}}
return requests.post(A2A, json=body, timeout=15).json()
def run_weekly():
# ...build crew, kickoff, post result to Slack...
pass
schedule.every().monday.at("09:00").do(run_weekly)
while True:
schedule.run_pending(); time.sleep(60)Instantiate GitDealFlowTool() once and pass the same instance to every Agent that needs it via tools=[tool]. CrewAI handles concurrency safely — each agent's tool call is independent.
Yes. CrewAI uses LiteLLM under the hood, which supports OpenAI, Anthropic, Mistral, Bedrock, Vertex, Cohere, and Ollama. Set the llm parameter on Agent (or LITELLM_PROVIDER env vars) — the GitDealFlow tool is unchanged.
Yes — CrewAI Studio supports Custom Tools via the Tool Builder. Paste the BaseTool class above into the code editor, save, and the tool becomes available to drag onto any agent in the visual flow.
Email signal@gitdealflow.com — replies within 24 hours, EU business time. Include the framework name and the error in the message body and a snippet of your tool definition.
Email support