[ HOW IT WORKS ]

A persistent decision layer for your revenue motion.

Five layers — Ingestion, Knowledge Graph, Retrieval, Synthesis, Delivery — running on Postgres with hybrid search and an autonomous 24/7 daemon. Workspace-isolated. Queryable from your own agents over MCP.

[ ARCHITECTURE ]
Sources00Ingestion01Graph02Retrieval03Synthesis04Delivery0524/7 daemon — ingest · enrich · consolidate · re-rankMCP SURFACE — YOUR AGENTSRSS · JSON · HTML · WEBHOOKSEMAIL · IN-APP · WEBHOOKS

Signals flow left to right. The daemon runs underneath on cron, continuously enriching and re-ranking. The MCP surface exposes the same brain to any agent runtime you choose.

[ THE FIVE LAYERS ]
LAYER 01

Ingestion

Pluggable adapters pull from public sources on independent schedules. Every signal arrives in a single normalised shape.

  • Adapters for RSS, JSON feeds, HTML scraping, webhooks, manual upload
  • Built-in scouts: funding, hiring, exec moves, tech-stack changes, product launches, community signals
  • Normalised contract: {source, url, entity_hints, observed_at, payload, fingerprint}
  • Dedup via deterministic fingerprint per (workspace, source, url)
LAYER 02

Knowledge graph

A typed graph of accounts, contacts, signals, plays, arc-states and outcomes — mirrored to Postgres for relational queries and pgvector for semantic ones.

  • Markdown-as-source-of-truth: every entity is a typed document, fully exportable
  • Self-wiring edges via wikilink extraction (works_at, invested_in, signals_for, matched_to, fired_play) — no LLM calls required
  • Sales schema pack: account · signal · play · arc-state · outcome
  • Postgres for joins and filters; pgvector for similarity
LAYER 03

Retrieval

Hybrid search combines lexical and semantic matches, fuses the rankings, then reranks the top candidates with a cross-encoder.

  • BM25 (lexical) + vector (semantic) + reciprocal rank fusion
  • Cross-encoder reranker on top-K candidates
  • Filters by workspace, entity type, recency, account status
  • Sub-200 ms p95 on workspaces under ~250k documents
LAYER 04

Synthesis

Two modes on the same brain: raw passages with citations, or a synthesised answer with inline citations and a gap analysis.

  • search — ranked passages, every one cited
  • think — synthesised answer + gap analysis (what's missing to answer with high confidence)
  • Play matching scored on (trigger fit × context fit × recency × account stage)
  • Output is always grounded — no ungrounded claims leave the layer
LAYER 05

Delivery

The brain shows up wherever the work happens — weekly email, in-app workspace, your own agents over MCP, optional CRM webhooks.

  • Weekly digest by email: top plays, matched accounts, suggested next move
  • In-app workspace: accounts, signals, playbook, members
  • MCP server — same brain queryable from Claude / Cursor / your own agent
  • Per-workspace webhooks for CRM push (optional)
[ THE 24/7 DAEMON ]

Cron-driven jobs that run while you sleep.

job · 01
ingest

Pull each enabled scout on its own cadence. Failures isolated per source.

job · 02
enrich

Fill missing entity attributes from public sources. Cached and re-used.

job · 03
consolidate

Merge duplicates, decay stale signals, recompute account arc-state.

job · 04
re-rank

Recompute play matches when new context lands. Surface what changed since last digest.

[ DATA OWNERSHIP & SECURITY ]
Workspace isolation

One Postgres workspace per customer; row-level isolation by workspace_id, enforced server-side.

RLS, not client trust

Row-level security policies on every table. Member scopes via a separate user_roles table — never on the profile row.

Scoped JWTs

Client SDK uses a scoped JWT. Service-role credentials never leave server functions.

Auditable & exportable

Raw signal payloads stored verbatim as JSONB. Full corpus is exportable and deletable on request.

No training on your data

Embeddings stay workspace-local. Your corpus is never used to train shared models.

BYO model keys

Bring your own keys for the synthesis layer. EU-sovereign options available.

[ INTEGRATIONS & EXTENSIBILITY ]
Add a source

A 30-line async adapter that returns normalised rows. Drop into the scout registry, set a cron cadence, done.

Add a play

Markdown doc with frontmatter — trigger, context, channel, frame, anti-patterns. The graph picks it up on the next tick.

Query from your agent

MCP server with 30+ tools: search, think, capture, list_accounts, match_play, and more. Same brain, any client.

[ TUNING & OPS ]

Weekly managed tuning

  • Signal taxonomy review against last week's outcomes
  • Play library updates — new plays, retired plays, weight adjustments
  • Scout health audit and false-positive triage
  • Synthesis prompt diffs reviewed and versioned

Observability

  • Per-scout health, ingestion lag, dedup ratio
  • Match precision against weekly outcomes
  • Daemon job log — every run, every failure
  • Delivery SLO: digest by Monday 09:00 customer-local
[ TECHNICAL QUESTIONS ]

See three plays matched against your real accounts.

Start on the home page →