Agent-first GTM workspace

Signals in.
Approved outreach out.
Run from Claude.

Optic watches SEC filings, newsrooms and the news for the moments your buyers care about, scores each one against a brain you write for every product, and drafts a note that opens with your product's own read on their news. Nothing sends until you approve it.

  • Live Signal layer, MCP server, database rules
  • Building next Drafting, approvals, sending

any new kumkuat signals above 0.7?

optic-kumkuat · list_signals(workspace="kumkuat", min_score=0.7)

  1. 0.86exec_hireHalvard Industries“Halvard Industries names Jordan Reyes SVP, Corporate Communications”weight 1.0 × account 1.0 × persona 1.0 × fresh 0.86
  2. 0.74m_and_aCorvane GroupSEC 8-K item 2.01: completed acquisitionweight 0.8 × account 1.0 × persona 1.0 × fresh 0.93

Two above 0.7. Halvard has a new comms lead in their first 90 days, which matches yourexec-change play. Corvane’s is an 8-K, so the source is the filing itself.

Illustrative. Halvard and Corvane are made up; the tool, fields and scoring are real.

How it works

Outbound that opens with their news, not your pitch.

Five steps, one engine. Every step is a service function, so Claude, webhooks and the coming web UI all run the same code.

The full walkthrough →
  1. Signals come in

    Built

    Optic watches SEC filings, news search, company newsrooms and investor-relations pages for the accounts you care about, every hour.

    8-K items 2.02, 2.01, 5.02 · GDELT news · RSS/Atom · IR pages

  2. Each product's brain scores them

    Built

    A YAML brain per product sets the ICP, personas, voice, offers, signal weights and pace. Every score keeps its reasons.

    score = weight × account fit × persona fit × freshness

  3. A draft opens with your product's read

    Building next

    The play runs your own product on their news and puts the result in the first line. The hook is the product working, not a merge field.

    analyze → draft { offer, max_words }

  4. You approve it

    Building next

    Drafts wait in the approval inbox with the person, the company and the signal that triggered them. You approve, edit or reject from Claude.

    list_approvals built · approve / reject next

  5. It sends from that product's domain

    Building next

    Approved messages go out inside the brain's send window and daily caps, from a sending domain that belongs to one workspace.

    one vendor first: Instantly or Smartlead

MCP-first

Run it from Claude, not from another tab.

Optic is an MCP server first. Ask Claude what you owe replies on, which signals fired overnight, or what's waiting for approval. The agent works through the same functions a UI would, with your key's permissions and nothing more.

  • One server for every product. Each tool takes a workspace slug.
  • API keys belong to a user and can be narrowed to one workspace. A limit never widens access.
  • Signals arrive with the reasons behind their score, so Claude can explain them back.
Connect Claude Code in one command →
# add Optic to Claude Code
claude mcp add --transport http optic \
  https://api.optic.to/mcp \
  --header "Authorization: Bearer opt_…"

Tools you can call today

  • list_workspacesWorkspaces you can act in, with your role
  • digestReplies you owe, conversations gone cold, tasks and deal next steps due
  • list_approvalsDrafts waiting for approval, with the person, company and triggering signal
  • list_signalsThe signal feed, best score first, with the reasons behind each score
  • dismiss_signalMark a signal as not worth acting on

Building next approve, reject, search next.All tools

Multi-product

One engine. One workspace per product.

We built Optic to run GTM for our own products, and each one is a workspace with its own brain, voice, pace, plays and sending domain. Two very different markets, one engine.

Enterprise comms

Kumkuat

Sells to corporate communications teams at large companies. A small market, so every send is approved and the pace is slow.

Hook
Kumkuat's read on how the company's announcement is landing, run on their actual coverage.
Signals
Comms-leader hires, CEO or CFO changes, M&A, rebrands, earnings, crisis coverage.

Developer tool

SpecReel

Sells to B2B SaaS teams that ship weekly. Developer-to-developer voice: short, concrete, one link, one ask.

Hook
A narrated demo of their own onboarding flow, made by running SpecReel on their public URL.
Signals
Launches and funding from the news. Job-post and tooling detectors aren't built yet.

Your next product

Copy the template

Start from brains/_template.yaml. Set the ICP, voice, offers and signal weights, then optic push validates the brain and every play before anything runs.

Caught on push
Unknown keys, bad durations, a send with no draft, auto plays where the brain requires approval.

Rules in the database

The guardrails live in Postgres, not in a settings page.

These hold for every caller: the API, the agents, the workers, and someone editing rows in a SQL client. An agent can't talk its way around a trigger.

  • Tenant isolation

    Row-level security limits each user and API key to its workspaces. Composite foreign keys stop a row from pointing at another workspace's record, even from the backend.

  • A reply stops automation

    When someone replies, their play ends, queued automated drafts are canceled and they're marked engaged. Drafts you wrote by hand stay.

  • Suppressions hold

    A suppressed address or domain can't be approved, scheduled or sent to. A hard bounce adds one. They survive deleting and re-importing the lead.

  • One play per person

    A person can be in one running play at a time, so two plays never email the same lead.

  • Separate sending domains

    A sending domain belongs to one workspace, so one product's campaign can't hurt another product's sender reputation.

  • Append-only events

    Every signal, email, reply, meeting and stage change is an event that can't be edited. Webhook deliveries are queued in the same transaction.

Security and trust →

Guides

How we think about outbound.

Optic runs our own GTM today.

It isn't for sale yet. If you'd run it for your product, tell us what you sell and which signals matter, and we'll talk when drafting and sending are done.