TOOLS.md - Acquisitions Agent

Credentials

API keys are in /home/opsadmin/.openclaw/workspace/.secrets/acquisitions-api-keys.json (chmod 600):

  • openphone_api_key — OpenPhone/Quo API
  • hubspot_pat — HubSpot PAT
  • supabase_url + service_role_key — Supabase
  • SalesMsg OAuth: /home/opsadmin/.openclaw/workspace/data/salesmessage-oauth.json

See workspace/TOOLS.md for full credential paths and API usage examples.

Available Tools

OpenPhone API

  • Purpose: Read/send SMS, call history, contact management
  • Line: RERI|CH — +16578880122
  • API Key: api_keys.jsonopenphone_api_key
  • Base URL: https://api.openphone.com/v1
  • Auth header: Authorization: <api_key> (no Bearer prefix)
  • Capabilities:
    • Read inbound SMS and call transcripts on CH line
    • Look up contact history by phone number
    • Create and update contacts
    • Read call recordings and voicemail transcripts
  • Rate limits: 100 req/min

HubSpot API

  • Purpose: Deal CRUD, contact management, pipeline stage updates
  • Account: henry@reri.co
  • PAT: api_keys.jsonhubspot_pat
  • Pipeline: Wholesale Deals (816046) — see FIELDS.md for full stage reference
  • Capabilities:
    • Create and update deals with qualification data
    • Move deals between pipeline stages
    • Create and associate contacts to deals
    • Update deal properties (asking price, ARV, condition, etc.)
    • Search deals and contacts
    • Read deal activity timeline

SalesMsg API

  • Purpose: SMS via SalesMsg platform, tag management
  • API Base: https://api.salesmessage.com/pub/v2.2
  • Auth: OAuth 2.0 — always read live token from /home/opsadmin/.openclaw/workspace/data/salesmessage-oauth.json
  • Capabilities:
    • Send and receive SMS messages
    • Tag contacts (e.g., “has a property”, “qualified”, “dead”)
    • Read conversation history
    • Manage contact records
  • Constraints:
    • Max page size: 100 (422 error if >100)
    • Direction detection: status==“received” means inbound, else outbound
    • message_type must always be provided: “sms”, “mms”, or “call”
    • Skip statuses: faked, transcript

Supabase

  • Purpose: Persistent data storage for conversations, deals, and negotiations
  • Project: svueekfvfrvhylxygktb
  • Key tables:
    • salesmsg_inbox — SalesMsg message archive (52 cols, message_id UNIQUE)
    • acquisition_deals — Deal tracking and qualification state
    • property_negotiations — Negotiation history and offer tracking
    • conversations — CH conversation threads
    • messages — Individual message records
  • Auth: Service role key or anon key via api_keys.json
  • RLS: Always call set_agent_context('acquisitions') before queries

Discord Webhooks

  • Purpose: Deal cards, escalation alerts, pipeline notifications
  • Guild: Real Estate Resources (1473795019575132222)
  • Channels used:
    • Build channel: For routine operational updates
    • aurora-red: For critical escalations only (>$10K impact or <24h deadline)
    • ch-deals: Deal notifications and pipeline updates
  • Format: Embed messages with deal details, stage, and action needed
  • Purpose: Recall deal patterns, CH history, past negotiations
  • Backend: SQLite vec0 hybrid search
  • Search method: 70% vector (Voyage voyage-4) + 30% FTS keyword + MMR + temporal decay
  • Max results: 4 per query
  • Usage: Search before engaging any CH to pull prior context. Search for property addresses, CH names, phone numbers, and deal patterns.
  • DB location: /home/opsadmin/.openclaw/memory/acquisitions.sqlite

Shared Connectors (Reference Only)

These are integrated once and shared across agents. Do not re-integrate.

Messaging Stack

  • OpenPhone/Quo: 34 phone lines (see workspace TOOLS.md for full list)
  • SalesMessage: SMS/voice automation
  • Twilio: WhatsApp Business API (pending OAuth setup)

Email

Slack

  • Mode: HTTP webhook
  • Henry User ID: U01HQ98LY90
  • Angel User ID: U095EFGHWM8
  • Steph User ID: U0854Q29J9E

Audit Logging (Mandatory)

Log every tool access, CH communication, and deal state change:

SELECT log_agent_action(
  'acquisitions',
  'read',  -- or 'write', 'execute', 'send_sms', 'update_deal'
  'tool_name_or_resource',
  true,    -- success boolean
  '{"details": "additional context"}'::jsonb
);

Skills (Claude Code) — added 2026-04-28

Acquisitions owns 2 skills covering Stage 1 outreach + follow-up cadence. READ each skill’s SKILL.md before working in these domains.

SkillPathPurposeAudit recipe
acquisitions-outreach~/.claude/skills/acquisitions-outreach/Stage 1 SMS to wholesalers/contract holders. Wraps unified-outreach-engine.js + smart-outreach-worker.js + deal-outreach-worker.js + 5-gate compliance (gate-computer, compliance-gate, blast-safety, thread-context, response-generator, dispo-send) + 4 SMS templatesdocs/HANDOFF-FOR-KIMI.md
acquisitions-followup~/.claude/skills/acquisitions-followup/Cadence (NO_REPLY_4H, PRICE_DROP, NEW_DETAIL, STALLED_RECOVERY) + inbound A-G classifier. Wraps follow-up-scheduler.js + follow-up-engine.js + conversation-classifier.js + stage-sync.js + 2 webhook handlers (quo-handler-enhanced:18792, salesmessage-handler-v4-complete:18793)docs/HANDOFF-FOR-KIMI.md

Rules:

  • NEVER bypass compliance-gate.js (TCPA, quiet hours, suppression)
  • Stage 1 lives in acquisitions-outreach; Stage 2/3/4 + inbound lives in acquisitions-followup
  • For buyer-side blasts (after a deal moves to dispo), route to dispo’s dispo-blast skill

Cross-reference: project_skill_suite_il_outreach_pipeline.md

Perplexity Pro (web research with citations)

  • Purpose: Real-time web data with citations — for per-deal research (comp validation, market context, CH/buyer-side intel) and nightly batch intel
  • Auth: Cookie session (Henry’s 0 marginal cost per call)
  • Wrapper: /home/opsadmin/.openclaw/tools/perplexity-cookie-session/comprehensive_wrapper.py
  • Modes: ask (free auto), search (1 Pro query), reason (1 Pro query, thinking models), deep_research (1 Pro query, ~85s agentic)
  • Per-deal usage (preferred for live CH/buyer threads):
    from comprehensive_wrapper import PerplexityPro
    pp = PerplexityPro.from_env()
    r = pp.search("Recent comps for [address], 90d window", model="claude-sonnet-4.6", sources=["web"])
  • Nightly batch intel: /home/opsadmin/.openclaw/workspace/scripts/acquisitions_perplexity_collector.py — top-of-funnel CH/wholesale market intel (4 cited queries: inventory signals, distressed indicators, investor sentiment, platform changes). Output: /tmp/acquisitions-perplexity-intel-{date}.{json,md}
  • Skill: /perplexity (Claude Code skill loader)
  • API tier (alternative): POST http://127.0.0.1:18900/v1/chat/completions with model=sonar / sonar-pro / sonar-reasoning-pro — bills against $5/mo API credit + per-call rates. Use for high-volume / cached scenarios.
  • Quotas: 400 cookie Pro queries/day total (soft alert via daily_summary.py); 30 deep_research/day
  • KB: workspace/knowledge-base/perplexity/ (6 docs)