-
Hero score: cold-leads + reply-triage agents, in review mode
First end-to-end run of the v1 B2B SaaS Outbound score. Cold-leads finds candidates from Apollo, drafts personalized openers with Compose, writes them to the Pipeline as note activities at stage 'ready', and pings the operator via the bell icon. The operator reviews each draft on the contact detail page and clicks Send via Gmail when satisfied — the activity flips to 'contacted' and the email goes out. Reply-triage classifies inbound replies and notifies on 'interested' / 'needs_review' intents.
-
Notify skill + bell-icon UI
Agents can now ping the operator when something needs attention. Two ops: send_event (informational) and send_attention (needs review). Bell icon in the topbar with unread count, dropdown of recent notifications with mark-read / dismiss / follow-link affordances, real-time via Postgres LISTEN/NOTIFY → SSE.
-
Pipeline skill — agent-facing reads + writes against contacts
Agents can now write to the contacts and activities tables. Three operations: find_contact, add_contact, log_activity (with optional stage advancement). Writes stream to the Pipelines UI in real time so the operator sees what the agent is doing as it works.
-
Compose skill — LLM-backed openers + reply triage
draft_personalized_opener writes a cold-email subject + body grounded in a recipient's recent signal. classify_reply_intent triages an inbound reply into one of six intents (interested, not_interested, out_of_office, wrong_person, unsubscribe, needs_review). Both use Anthropic tool-use to force structured output. Defaults to Haiku 4.5; pass model='claude-sonnet-4-6' for higher-quality drafts on hard prospects.
-
Apollo skill — find_leads, enrich_person, enrich_domain
B2B prospecting + enrichment via apollo.io's API. Trims Apollo's 50-field firehose down to the fields the agent + Pipeline can use. Empty email is a real signal — free-tier reveals are limited; the agent treats those as 'needs enrichment'.
-
Gmail skill — OAuth + read + send + label
Connect a Gmail account via OAuth (refresh-on-401 baked into the SDK), read the inbox, fetch full thread bodies (MIME-parsed text + html), send messages (plain or with html alternative, with optional thread_id for replies), apply labels by name. queue_paced_send is planned — needs a persistent send queue.
-
Encrypted secrets vault
API keys and OAuth tokens are now AES-256-GCM encrypted at rest in Postgres. Master key in MAESTRO_SECRET_KEY env var, never in the DB. Skill SDK resolves secrets via a chain: env vars (dev override) → DB vault. Web UI for listing, adding, rotating, deleting secrets. Compromised DB backup is no longer compromised secrets.
-
Pipeline foundation — multi-pipeline support, real-time UI
Workspace can have many named pipelines. Email uniqueness is per-pipeline (same lead can exist across A/B-test pipelines). Companies stay workspace-scoped + de-duped. Every contact/activity write streams live to the Pipelines UI via Postgres LISTEN/NOTIFY → SSE.
-
Skills SDK — @skill, @operation, auto-derived JSON Schema
Decorator-based skill authoring: @skill('name') on the class, @operation on each method. Pydantic input models generate JSON Schema automatically; the agent loop hands those schemas to Claude as tool definitions. Manifest YAML declares secrets + concurrency; runtime auto-discovers skills under skills/catalog/.
-
Runtime — scheduler + worker pool + agent loop
Python runtime with psycopg connection pool, croniter-based scheduler, SELECT FOR UPDATE SKIP LOCKED for safe job claim across workers, full agent loop with Anthropic tool-use dispatch back into skill operations. Run steps stream to the dashboard via SSE in real time.
-
Web app + API + design system
Vite + React 19 + Tailwind v4 web app on the Hono + Drizzle TS API. Sidebar / topbar / agent dashboard / run rows / run cards / run log / agent builder / pipelines kanban / contact detail. Mobile-optimized. Manuscript-inspired design system with custom typography (Geist body + Instrument Serif display + JetBrains Mono).
Changelog
Builder's log
Reverse-chronological record of what's shipped while we work toward the v1 hero score and the closed beta.