Overview
Snapshot for Adrienne · generated —
Pipeline by stage
Weighted · USDThis week
Calls · Emails · MeetingsTop deals to watch
Next-step datedDeals
From HubSpot snapshot · owner = Ian Grady
Projects
Goals, initiatives, portfolio work · from Asana (pending PAT)
Activity
Recent calls, emails, meetings
Autoresearch
Karpathy-grade prompt iteration loop · Claude writes [AR_CONTEXT] notes, HubSpot Prospecting Agent drafts, ledger measures · —
Funnel
Notes → drafts → sent → replies → meetingsInfrastructure health
Smoke + dedup testsPrompt-version leaderboard
Reply rate by version · winner stays, loser gets mutatedRuns
Per-day breakdown by research methodHow autoresearch works here
Two skills, one HubSpot, one ledgerThe pattern. Autoresearch is a Karpathy-style prompt iteration loop. Claude writes a research note onto a HubSpot contact, HubSpot's Prospecting Agent drafts an outbound email using that note, the ledger measures what happens (sent, reply, meeting), and the next run mutates one variable to try to do better. Winner stays, loser gets replaced.
Two autoresearch skills feed it.
- Cloud autoresearch (in HubSpot): the Prospecting Agent + Breeze AI inside HubSpot's UI. Its Selling Context says "Use the latest
[AR_CONTEXT]note as primary research source." When it drafts an email, it reads the most recent[AR_CONTEXT]note on the contact and grounds the email in that signal. - Claude Code autoresearch (local on Personal MBP): the skill at
00_AIOS/Skills/autoresearch.mdMode B. When triggered, it pulls real CRM context (engagement timeline, prequalification framework, stakeholder names) and writes a structured[AR_CONTEXT]note via Zapier MCP onto the target contact in HubSpot.
How they connect.
- Claude Code writes the
[AR_CONTEXT]note → Zapier MCPhubspot.create_engagement→ contact's HubSpot timeline. - Ian (or a scheduled play) enrolls the contact in the HubSpot Prospecting Agent.
- HubSpot's Prospecting Agent reads the latest
[AR_CONTEXT]note, drafts an email grounded in the signal, queues it for review. - Ian approves in HubSpot "Ready for review" → email sends from
ian@greenplaces.com. - Outcome (sent, reply, meeting) is logged into the autoresearch SQLite ledger in the vault.
Where the data lives.
- Source of truth: SQLite ledger at
~/Obsidian/Ian-Vault-Lab/outputs/agent-handoff/autoresearch-ledger.sqlite(three tables:experiments,smoke_runs,dedup_tests). - Aggregate snapshot for this dashboard: regenerated manually via
build-dashboard.pyinoutputs/agent-handoff/autoresearch-dashboard/, written topublic/data/autoresearch.json, committed to git, deployed by Cloudflare. - What this tab reads: only the static aggregate JSON above. Per-experiment detail (contact emails, draft bodies) stays in the vault SQLite — never on a public deploy.
Currently live. Run 1 sandbox (3 self-sends, 2026-05-03) and Run 2 Trex (1 send fired, 2 stalled at note-only, 2026-05-04). Prompt variants v0.1.0 baseline, v0.2.0 tighten-length, v0.3.0 stakeholder-map are staged in outputs/agent-handoff/autoresearch-prompt-variants/; swap-in via Comet pending.
Admin
Feedback · integrations · setup · change log
Restricted
Enter admin password to continue.
AI feedback summary
gpt-4o-mini · top themes from open queueSend feedback to Harper
Goes to the build thread · I'll ping you when shippedRecent submissions
Latest 100 · auto-loadedIntegrations
Every tool wired into the Ledger or HarperSetup & maintenance
How this is wiredMaking changes to this dashboard
Three lanes: Claude Code, Cloudflare, HubSpotThe default workflow. Open Claude Code in ~/the-ledger. Tell it what you want. It opens a branch + PR. Glance at the diff. Click merge. Cloudflare auto-deploys within 1–2 minutes. If it's wrong, git revert and back to the previous version.
Claude Code handles (your terminal, in ~/the-ledger):
- UI changes (HTML, JS, CSS in
public/) - Backend functions (
functions/api/*.js) - Database migrations (
migrations/*.sql) - Tests (
test/*.test.mjs) - Branch + commit + push + open PR via
gh
Cloudflare handles (no manual touching of the dashboard required):
- Hosting the static site at
the-ledger-ak5.pages.dev - Running the backend functions (serverless edge)
- D1 SQLite database (where structured data like feedback + future API tokens live)
- Secrets storage (
SESSION_SECRET,ADMIN_PASSWORD,OPENAI_API_KEY) - Auto-deploying every push to
mainwithin ~1 minute
HubSpot handles (the actual CRM data):
- Source of truth for deals, contacts, companies, engagements
- Connected to the Ledger via Zapier MCP using
ian@greenplaces.com - Refresh path: Claude pulls HubSpot data via MCP → regenerates
public/data/snapshot.json→ commits → Cloudflare deploys
Common changes, where to start:
- "Add a column to the Deals tab" → Claude Code, edits
public/index.html+public/assets/app.js - "Refresh HubSpot data manually" → Claude Code, run
npm run refresh-snapshot(lands when the refresh runner PR merges) - "Add a new feedback category" → Claude Code, edit the dropdown in
public/index.html - "Change the admin password" → terminal in
~/the-ledger, runnpx wrangler pages secret put ADMIN_PASSWORD --project-name=the-ledger - "See what auto-deployed today" → daily digest GitHub issue (lands when PR #6 merges)
What NOT to do (the things that wasted today):
- Don't push directly to
main. Branch protection blocks it; auto-deploy fires off main. - Don't bundle multiple unrelated changes into one PR. Smaller is faster to review and easier to revert.
- Don't try to make HubSpot push to the Ledger directly. The flow is always Claude → MCP → vault → snapshot.json → deploy.