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
- Project: BetterPhone (twhjimxeakiyulfqmzro)
- Region: us-east-1
- URL: https://twhjimxeakiyulfqmzro.supabase.co
- Keys: See api_keys.json for your agent’s key (anon or service_role)
Lovable
- Account: aurora@reri.co
- Projects: BetterPhone, Homeoffr, etc.
- Google Workspace: aurora@reri.co, henry@reri.co
- Purpose: Universal AI operator account
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.
| Skill | Path | Purpose | Audit 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.sh | docs/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 scrapes | docs/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/completionswith 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)