Agent skill
bdr-company-research
Run BDR Agent company research for a HubSpot lead when agent_orchestrator starts the company_research stage.
Filed under CRM and RevOps.
From warpdotdev/go-to-market-agent-oss · 11 skills · 1 · pushed 2026-07-21
What it does when it runs
Run BDR Agent company research for a HubSpot lead when agent_orchestrator starts the company_research stage. Canonical skill for the company_research runtime.
Read from the skill and the 0 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- None found.
- Hosts it reaches
- No third-party host appears in the skill or its bundled files.
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It does act, so it runs under whatever permissions your session already grants. - Actions present in the files
- shellnetwork
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/warpdotdev/go-to-market-agent-oss.git /tmp/go-to-market-agent-oss git -C /tmp/go-to-market-agent-oss sparse-checkout set "bdr_agent/skills/company-research" mkdir -p ~/.claude/skills/bdr-company-research-8 cp -R "/tmp/go-to-market-agent-oss/bdr_agent/skills/company-research/." ~/.claude/skills/bdr-company-research-8/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
The skill
Source on GitHub ↗Reproduced in full from warpdotdev/go-to-market-agent-oss/blob/db59d826a09083c2ead4fdf12b40d807dc453b0d/bdr_agent/skills/company-research/SKILL.md, which is licensed MIT (repository). 661 words, 9 headings.
BDR Company Research
Use this skill when agent_orchestrator starts company_research for a HubSpot lead. Invoke the deterministic runner; it owns webhook payload validation, company research, persistence, and stage completion.
Prompt fields
Use these prompt fields as CLI inputs:
BDR_AGENT_STAGE:company_researchBDR_AGENT_TRIGGERSOURCE_SYSTEMLEAD_IDHUBSPOT_WORKFLOW_ID
Recommended optional prompt fields:
CONTACT_IDCOMPANY_ID- At least one of
COMPANY_DOMAIN,COMPANY_WEBSITE, orCOMPANY_ALTERNATIVE_DOMAIN LEAD_CREATED_ATLEAD_OWNER_IDLEAD_SOURCE_DETAILEDCONTACT_EMAILCONTACT_FIRST_NAMECONTACT_LAST_NAMECONTACT_JOB_TITLECOMPANY_NAMECOMPANY_INDUSTRYCOMPANY_NUM_EMPLOYEESCOMPANY_ICP_TIER
Only LEAD_ID is required to start the runner. The HubSpot workflow should send the recommended fields whenever they are available because the runner uses them before consulting BigQuery. If optional fields are blank or absent, the runner falls back to BigQuery hydration for those blanks.
Setup
Run the deterministic bootstrap before invoking the CLI. It works whether the agent starts in the gtm-agents repo root or in bdr_agent/, avoids probing a dependency-free system Python first, and exports the active BDR source path explicitly:
if [ -d "bdr_agent/src/bdr_agent" ]; then
export GTM_AGENTS_ROOT="$PWD"
export BDR_AGENT_ROOT="$PWD/bdr_agent"
elif [ -d "src/bdr_agent" ]; then
export BDR_AGENT_ROOT="$PWD"
export GTM_AGENTS_ROOT="$(dirname "$PWD")"
else
echo "Run from the gtm-agents repo root or from gtm-agents/bdr_agent." >&2
exit 1
fi
export BDR_AGENT_VENV="/tmp/gtm-agents-bdr-company-research-venv"
python3 -m venv "$BDR_AGENT_VENV"
"$BDR_AGENT_VENV/bin/python" -m pip install --upgrade pip
"$BDR_AGENT_VENV/bin/python" -m pip install -r "$GTM_AGENTS_ROOT/requirements.txt"
export PYTHON="$BDR_AGENT_VENV/bin/python"
export PYTHONPATH="$BDR_AGENT_ROOT/src${PYTHONPATH:+:$PYTHONPATH}"
"$PYTHON" - <<'PY'
import importlib
for module in ("bdr_agent", "google.cloud.bigquery", "google.cloud.storage", "httpx"):
importlib.import_module(module)
print("BDR Company Research imports OK")
PY
Run
Export prompt field values before invoking the runner, or pass literal values directly. Do not combine variable assignment and command invocation in one shell command.
$PYTHON -m bdr_agent.stages.company_research.cli \
--lead-id "$LEAD_ID" \
--trigger-source "$BDR_AGENT_TRIGGER" \
--source-system "$SOURCE_SYSTEM" \
--hubspot-workflow-id "$HUBSPOT_WORKFLOW_ID" \
--lead-created-at "${LEAD_CREATED_AT:-}" \
--lead-owner-id "${LEAD_OWNER_ID:-}" \
--lead-source-detailed "${LEAD_SOURCE_DETAILED:-}" \
--contact-id "${CONTACT_ID:-}" \
--contact-email "${CONTACT_EMAIL:-}" \
--contact-first-name "${CONTACT_FIRST_NAME:-}" \
--contact-last-name "${CONTACT_LAST_NAME:-}" \
--contact-job-title "${CONTACT_JOB_TITLE:-}" \
--company-id "${COMPANY_ID:-}" \
--company-name "${COMPANY_NAME:-}" \
--company-domain "${COMPANY_DOMAIN:-}" \
--company-website "${COMPANY_WEBSITE:-}" \
--company-alternative-domain "${COMPANY_ALTERNATIVE_DOMAIN:-}" \
--company-industry "${COMPANY_INDUSTRY:-}" \
--company-num-employees "${COMPANY_NUM_EMPLOYEES:-}" \
--company-icp-tier "${COMPANY_ICP_TIER:-}" \
--persist
Failure handling
If the CLI fails, exits with a non-zero code, or returns an error in the structured output, stop and report the failure. Include the full error output, failure_reason, and the exact command that was run. Do not attempt to diagnose or fix source code. Do not create branches, push commits, or open pull requests. Source code fixes must be handled in a separate implementation task.
Result handling
The command prints structured JSON. Report run_id, output_id, status, storage, stage_completion, and failure_reason when present.
Successful persistence writes the company research artifact under gs://example-artifacts-bucket/bdr-agent/company_research/, writes canonical BigQuery rows, and lets the runner send the stage-completion handoff when the webhook environment is configured.
BigQuery usage
The runner treats the webhook payload as the primary source of truth for fresh Lead/Contact/Company fields and domain resolution. BigQuery hydration is retained only as a fallback for fields that are blank or absent from the webhook payload; non-blank webhook values always win over BigQuery values. BigQuery is also still used after hydration for Tier 1 internal product-usage metrics and Tier 2 reuse lookup by resolved_company_domain.
Tier 1 internal metrics interpretation
tier_1_internal_metrics is product-usage evidence for hook writing, not PLG upsell qualification. It should answer whether the resolved company domain has any product adoption, recent activity, AI usage, team adoption, paid signal, or only historical/no usage.
Do not treat has_product_usage, has_recent_product_usage, or has_paid_signal as eligibility gates. Paid and team usage are stronger signals, but free usage and historical usage should still be reported because synthesis owns deciding whether the evidence is useful for a hook.
The Tier 1 SQL is stored in sql/queries/tier_1_metrics_query.sql. It intentionally uses PLG upsell SQL only as source-table guidance and does not apply PLG filters such as minimum active users, active Build plan requirement, work-email-only eligibility, or Enterprise pipeline exclusion.
Reference files
sql/queries/tier_1_metrics_query.sqlsql/queries/hydration_query.sqlsql/tables/storage_tables.sqlreferences/company_research_taxonomy.mdtests/fixtures/company_research_example_outputs/not_ready.json
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- customer-research by coreyhaines31 · 45,947
- geo-content-research by onvoyage-ai · 1,291
- reddit-opportunity-research by onvoyage-ai · 1,291
- research-brand by onvoyage-ai · 1,291
- research-keywords by onvoyage-ai · 1,291
- sales-research by zubair-trabzada · 1,079
- domain-research by OpenClaudia · 664
- keyword-research by OpenClaudia · 664
Need help setting it up?
This page tells you what bdr-company-research does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.