Reference

Database schema

The platform's Postgres database holds 113 tables across the public schema. Every row that belongs to a workspace carries a user_id; row-level security enforces that scope at the database edge. This page indexes the tables by purpose so a reader can locate the right one without reading raw schema files.

Updated today

Overview

At a glance
Engine
Postgres 15 (Supabase managed)
Public tables
113
Functions
141 (SQL plus PL/pgSQL)
Triggers
25
RLS policies
197 across 110 tables
Vector tables
file_embeddings, agent_memories
Storage buckets
4 (brain-files, canvas-exports, chat-attachments, content-media)

Every workspace-scoped table follows the same shape: id uuid primary key, user_id uuid referencing auth.users, then domain columns, then created_at and updated_at timestamps. The user_id column is the RLS pivot: every read and write checks auth.uid() = user_id before the row is visible.

Extensions

Five extensions are enabled, all standard Supabase fare.

ExtensionVersionUsed for
vector0.8.0768-dim embeddings on brain files and agent memories; HNSW cosine index
pgcrypto1.3Encrypted columns for OAuth tokens and integration secrets
pg_stat_statements1.11Query profiling for slow-path investigation
uuid-ossp1.1uuid_generate_v4 defaults
supabase_vault0.3.1Encrypted secrets storage for a small set of sensitive values

Chat and conversations

The tables behind the chat loop. One conversation, many messages, one chat_runs row per assistant turn.

TablePurposeNotable columns
conversationsOne row per chat threadskill_type, department, model, project_id, sandbox_id, active_mission_id
messagesEvery user, assistant, and tool messagerole, content, channel, tool_events, metadata
chat_runsOne row per assistant turn lifecyclestatus, model, started_at, completed_at, error
chat_eventsSSE event log for replay and auditevent_type, payload, sequence
pause_pointsTool-approval pause recordstool_name, args, decision, resumed_at
shared_linksPublic share tokens for conversationsshare_token, expires_at, password_hash, view_count
shared_link_viewsPer-view audit for shared linksviewer_ip_hash, viewed_at
synced_blocksLive blocks rendered into shared and canvas viewsblock_id, content, revision

Memory and files

Three storage surfaces: agent_memories for short structured facts, brain_files plus file_embeddings for uploaded documents, and conversation summaries written back into messages.

TablePurposeNotable columns
agent_memoriesDistilled facts the agent should remember across turnsagent, text, embedding (vector), tags, metadata
brain_filesUploaded source files (one row per file)file_name, file_type, storage_path, chunks_count, content_hash, status
file_embeddingsChunked, embedded chunks of brain fileschunk_index, content, embedding (vector), content_tsv, token_count
brain_artifactsGenerated artifacts attached to brain filesartifact_type, payload
notesFree-form sticky notes the agent can read and writetitle, body, tags
project_memoriesProject-scoped memory entriesproject_id, text, embedding
project_brain_filesLink table from projects to brain filesproject_id, brain_file_id
Note
file_embeddings has an HNSW cosine index (fe_embedding_hnsw_idx) with m=16 and ef_construction=64. Queries cap at k=8 and combine vector similarity with full-text rank over content_tsv.

Skills, tasks, missions

Run tracking for skill executions, agentic tasks, scheduled actions, and long-running missions.

TablePurpose
agentsStatic persona definitions (Cortex, Specter, Striker, Pulse, Sentinel, Amplify, Counsel)
agent_tasksOne row per agent-spawned background task
tasksGeneric task queue (user-visible)
home_tasksSuggested tasks rendered on the home dashboard
scheduled_actionsCron-style declarative schedules
scheduled_tasksConcrete due-dated work items
missionsLong-running multi-step plans (mission control)
cron_jobsJob definitions polled by the cron worker
executed_rulesAudit of automation_rules that fired
automation_rulesIf-this-then-that style rules per workspace

CRM and outreach

Leads, deals, campaigns, sequences, and the workflow engine that drives them.

TablePurpose
leadsThe lead record (28 columns; name, email, company, enrichment_data, score, status)
dealsPipeline opportunities with stage and value
campaignsOutreach campaign definitions
outreach_campaignsMulti-channel outreach orchestration
outreach_pipeline_runsPer-run execution of an outreach pipeline
outreach_pipeline_leadsLead-to-pipeline join with per-step status
crm_sequencesReusable message sequences
crm_sequence_enrollmentsLead enrolment in a sequence
crm_activitiesActivity log per lead and per deal
crm_segmentsSaved lead segments
crm_tasksUser tasks tied to leads or deals
crm_workflowsVisual workflow definitions
crm_workflow_runsWorkflow execution rows

Content, pages, media

Generated content (carousels, posts, articles) and the page builder.

TablePurpose
contentGeneric content rows (carousels, posts, videos)
content_setsGrouped content drops (theme, batch)
content_researchResearch notes attached to a content set
pagesPage builder rows
page_revisionsPer-edit revision history for pages
page_templatesSaved page templates
page_backlinksInternal links between pages
media_libraryWorkspace media assets
media_itemsIndividual media files (image, video, audio)
social_postsScheduled and published social posts
post_analyticsEngagement metrics per post

Email infrastructure

Outbound email through a transactional provider, with per-message tracking and suppression.

TablePurpose
email_sendsOne row per outbound message with delivery status
email_suppressionsBounce, complaint, and manual suppression list
brevo_domainsVerified sending domains
brevo_sendersVerified sender identities (from-address rows)
sender_groupsGroups of senders rotated for warmup
sender_group_itemsGroup-to-sender link rows

Billing and usage

Subscription, credit ledger, usage counters, and Stripe event audit.

TablePurpose
profilesUser profile and subscription state (plan, stripe_customer_id, credit_balance, business profile)
credit_grantsCredit-package purchases and grants
credit_transactionsAppend-only ledger of credit debits and credits
billing_eventsAudit of Stripe webhook events
invoicesCached Stripe invoices for the dashboard
plan_limitsQuota definitions per plan tier
usage_trackingDaily counters (messages, leads, content, api_calls)

Integrations and accounts

OAuth and API-key connections to third-party services, plus the cookie pools that some scrapers borrow against.

TablePurpose
integrationsPer-user provider connections with encrypted credentials
user_integrationsOAuth flow state and tokens
google_tokensGoogle OAuth tokens (Gmail, Calendar, Drive)
google_burner_poolPool of burner Google identities for read-only public scraping
google_cookie_poolCookie pool with health and last-used timestamps
social_accountsConnected social network identities
channel_connectionsSlack, Discord, Telegram channel-level installs
telegram_connectionsTelegram bot installations per workspace
Warning
Tokens in integrations.api_key_encrypted are encrypted with the platform's ENCRYPTION_SECRET before insertion. They never leave the database in plain form.

Scraping signals

The intermediate tables scraper workers write into before downstream skills aggregate them.

TablePurpose
job_signalsOne row per scraped job posting (jd_url is the dedup key)
account_signalsBuying signals attached to a company
account_analyticsAggregated account-level metrics
profile_changesDetected profile diff events from tracked LinkedIn handles
job_eventsBackground-job event log shared by skills and scrapers
jobsGeneric background job rows
jobs_notification_settingsPer-user notification preferences for job runs

Fundraising and agreements

Tables behind the fundraising flow: investor pipelines, commitments, and signed agreements with audit.

TablePurpose
fundraising_jobsLong-running fundraising worker tasks
investor_commitmentsSoft and hard commits from investor outreach
rfp_requestsInbound RFP requests captured for routing
agreementsGenerated agreement documents
agreement_recipientsSigner identities per agreement
agreement_fieldsFillable fields and their bound values
agreement_signaturesCaptured signatures with timestamp and IP hash
agreement_audit_logsTamper-evident audit trail per agreement

Ops and automation

The internal ops console writes a small set of tables for proposals, missions, and policy.

TablePurpose
ops_missionsInternal ops missions
ops_stepsStep rows within an ops mission
ops_proposalsAction proposals that need approval
ops_policyGuardrail policy rules
ops_eventsAppend-only event log for ops
activity_feedUnified user-facing activity feed across all sources
eventsInternal product-event stream (used for analytics dispatch)

Sandbox and workspace

The per-user sandbox metadata and the workspace project model.

TablePurpose
projectsUser-defined workspace projects (groups conversations)
project_countsMaterialised counts per project
sandbox_artifactsArtefacts produced inside the E2B sandbox
sandbox_questionsQuestions the sandbox surfaced to the user mid-run
recall_botsMeeting-recording bot rows (one per active recording)
blueprintsSaved multi-step workflow blueprints
deploymentsUser-deployed apps from the deployment flow
deployment_runsPer-run execution rows
deployment_outputsOutputs captured from a deployment run
deployment_activityActivity rows for the deployment surface
deployment_usage_eventsUsage events emitted by deployed apps

Storage buckets

Four Supabase Storage buckets handle binary content.

BucketPublicHolds
brain-filesYesUploaded brain-file binaries; URL stored on brain_files.storage_path
canvas-exportsNoCanvas PNG and PDF exports served via signed URL
chat-attachmentsYes (25 MB limit)Images and small files attached to chat messages
content-mediaYesCarousel slide PNGs and other generated content media

Row-level security

RLS is on for almost every public table. The pattern is uniform.

rls-policy-template.sqlsql
1-- The template used on every user-scoped table
2alter table public.<table> enable row level security;
3
4create policy "<table>_select_own"
5 on public.<table> for select
6 using (auth.uid() = user_id);
7
8create policy "<table>_modify_own"
9 on public.<table> for all
10 using (auth.uid() = user_id)
11 with check (auth.uid() = user_id);
12
13-- The service role bypasses RLS for backend writes (webhooks, workers)
Tip
110 of 113 public tables have RLS enabled. The three without RLS are admin-only tables (plan_limits, cron_jobs, agents) that are read-only at the application boundary and never read by anonymous or user-scoped clients.

Vector indices

Two tables hold embeddings; only one needs a vector index.

file_embeddings indexsql
1create index fe_embedding_hnsw_idx
2 on public.file_embeddings
3 using hnsw (embedding vector_cosine_ops)
4 with (m = 16, ef_construction = 64);

agent_memories stores embeddings but does not have an HNSW index. Memory rows are few per user (typically under 200) so a sequential scan with a cosine distance computation runs in well under 10 ms. Brain files, by contrast, are unbounded and need the index to keep retrieval latency below the chat-loop budget.