TOOLS.md - Base Template

Shared Connectors (Reference Only)

These connectors are integrated once and shared across agents. Never re-integrate.

HubSpot

  • Account: henry@reri.co
  • PAT: See api_keys.json for your agent’s key
  • Account ID: (business operations)
  • Base ID (AI Command Center): app8RwdwkzQZBYcvg

Messaging Stack

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

Supabase

Lovable

Email

Discord

  • Guild: Real Estate Resources (1473795019575132222)
  • Bot: OpenClaw
  • Channels: 16 across 5 categories

Slack

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

Vault Access

See vault_access.json in your agentDir for your specific vault permissions.

Before any vault query:

SELECT set_agent_context('your_agent_id');

RLS Wrapper (Required)

Use this function before any Supabase query:

async function queryWithRLS(agentId, query) {
  // Set agent context
  await supabase.rpc('set_agent_context', { agent: agentId });
  
  // Execute query
  const { data, error } = await supabase.from('vault_data').select(query);
  
  // Log access
  await supabase.rpc('log_agent_action', {
    p_agent_id: agentId,
    p_action: 'read',
    p_resource: 'vault_data',
    p_success: !error
  });
  
  return { data, error };
}

Audit Logging (Mandatory)

Log every vault access, connector use, and cross-domain transfer:

SELECT log_agent_action(
  'your_agent_id',
  'read', -- or 'write', 'execute', 'access_denied'
  'vault_name or connector_name',
  true, -- success boolean
  '{"details": "additional context"}'::jsonb
);

Agent-specific tool configurations append below.


SOLARA-SPECIFIC TOOLS

Vault Access (Read-Only Business)

Before querying business_context, set agent context: SELECT set_agent_context(‘solara’);

Permissions:

  • READ: business_context
  • WRITE: denied (RLS enforced)

Approval Management

Source: Supabase

Table: approvals
Filter: status = ‘pending’
Order: newest first

Responsibilities:

  • Review proposals
  • Update status after Henry decision
  • Log rationale

Session Messaging (Henry Notifications)

Use sessions_send:

sessions_send({ session: ‘main’, message: ‘☀️ Solara Approval Request:\n\n[Proposal Summary]\n\nDecision Needed: Approve / Deny / More Info’ });

Audit Awareness (Future Hook)

Solara should be able to:

  • Read audit logs
  • Detect repeated failures
  • Escalate systemic issues to Henry

(Note: Full audit integration comes in Phase 2)


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

Atlas owns 2 skills covering the IL → HubSpot pipeline. READ each skill’s SKILL.md before working in these domains.

SkillPathPurposeAudit recipe
il-marketplace-pull v2~/.claude/skills/il-marketplace-pull/IL data layer; wraps workspace/scripts/sync-il-api-to-supabase.js, enrich-il-deals-detail-api.js, investorlift-daily-sync.sh, investorlift-refresh-cookies.js. Net-new: enrich-contacts.js (Apollo+Hunter wholesaler enrichment), account-rollup.js, cookie-status.shdocs/HANDOFF-FOR-KIMI.md
hubspot-deal-ingest~/.claude/skills/hubspot-deal-ingest/Universal source-agnostic HubSpot deal creator. Wraps workspace/scripts/hubspot-deal-creator.js (1006 lines, 11 exports, dual-pipeline writes acq 877963314 + dispo 816046). Use for IL, Crexi, PropStream, Facebook, manual paste, future scrapesdocs/HANDOFF-FOR-KIMI.md + docs/PARSED-DEAL-CONTRACT.md

Rule: when working on IL data ingestion or HubSpot deal creation, use these skills. NEVER reimplement what hubspot-deal-creator.js already does. NEVER create per-source data_<source>_* tables — write to acquisition_deals (CCP) instead.

Cross-reference: project_skill_suite_il_outreach_pipeline.md

Perplexity Pro (web research with citations)

  • Purpose: Real-time web data with citations — for ad-hoc research and nightly batch intel feed
  • 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)
  • Direct usage:
    from comprehensive_wrapper import PerplexityPro
    pp = PerplexityPro.from_env()
    r = pp.search("query", model="claude-sonnet-4.6", sources=["web"])
  • Nightly batch intel: /home/opsadmin/.openclaw/workspace/scripts/atlas_perplexity_collector.py — enterprise architecture intel (4 cited queries: AI/RE tech landscape, wholesale platform economics, vendor lock-in/M&A signals, structural compounding recommendations via reasoning mode). Output: /tmp/atlas-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.
  • Quotas: 400 cookie Pro queries/day total (soft alert via daily_summary.py); 30 deep_research/day
  • KB: workspace/knowledge-base/perplexity/ (6 docs)