Skip to content

Getting Started ​

This page is the happy path for someone who already has a Corveil org and wants one source connected, end to end, until something useful shows up. It is not an evaluation brief — if you do not have an account yet, start at Evaluating Corveil.

You need to be an org admin. Adding a source, storing a credential, and confirming bindings are all admin actions.

Pick one source. Two at once is how a first result gets lost in setup.


1. You have an org ​

Sign in to the dashboard. You land on Dashboard. You are in the right place when the sidebar shows Dashboard, Corvus, Workforce, and Connections. Connect is the first item under Connections, not a top-level section. Inviting teammates is product work, not a docs step — skip it until after the first result.

If corveil is not on your PATH yet, install and authenticate it from the CLI reference. You will use it in step 3.

bash
corveil whoami        # → { "org_name": "...", "org_id": "...", ... }

2. Connect one source ​

Store the credential first, then create the source, then confirm bindings. That last click is the one that trips people: a new source sits in bindings required and does not poll until you confirm.

Credential, then source ​

  1. Connections → Credentials. Create the vault entry the source needs. The Credential Vault page lists every type; you only need the one for the source you picked.
  2. Corvus → Sensors → Add sensor. Choose the type, name it, point it at that credential, save. The dashboard label is Sensors; the API path is still POST /api/sensors.
  3. The bindings drawer opens. Defaults are already filled in. Click Confirm bindings & start processing. The row should flip from bindings required to active.
  4. Poll now on that row (or wait for the scheduled poll). Then wait one extraction cycle — roughly 30 minutes — before entities appear in Ontology. Events on the source row show up first; the graph is not instant.

Slack ​

Use this if your team's day lives in channels. The full guide — official app and the bring-your-own exception — is the Slack sensor page.

On a hosted org (Slack OAuth configured, slack_byo_app off), first ingest is:

  1. Corvus → Sensors → Add sensor → Slack → Add to Slack. The install stores the slack_bot_token. You do not paste an xoxb- token. Add to Slack leaves the form; the callback returns to Sensors with ?slack=connected.
  2. Open Add sensor → Slack again and select the Slack credential the install created. Its name is Slack — {team}, or Slack (official app) when the workspace name is missing. That credential is required.
  3. In Slack, /invite @Corveil in each channel you want. That invite is separate from listing channels on the sensor.
  4. Set Channels (optional) to those names without #, for example general, engineering, save, and Confirm bindings.

An empty channels list is chat-only. It does not ingest history. The form shows Events verification is handled by the Corveil Slack app. and does not ask for a signing secret or a per-sensor webhook URL.

Signing secret, Event Subscriptions, and the per-sensor webhook URL are only for a bring-your-own Slack app. Those steps are in the Slack guide's bring-your-own section.

What lands: Channel and Message entities, plus Person records for authors. After extraction, corveil search on a channel name or a phrase from a recent post should hit.

Google Meet ​

Use this if you want meetings, attendees, and transcript-derived decisions. Full setup — service account, domain-wide delegation, optional allowlist — is on the Google Meet sensor guide.

Two things that page assumes you already know, because they are the whole capture gate:

  • Gemini note-taking has to have been on for the meeting. A call without notes produces nothing — no transcript, no title, no attendees. That decision lives in Google Workspace, not in Corveil config. See Choosing a meeting-capture path before you pick Meet over Drive.
  • For a first result, prefer Meet (not Drive). Meet fans out across organizers and creates Meeting entities with structured attendees. Drive watches one folder and creates document entities; a single My Drive folder silently misses every other organizer.

Credential: google_service_account_json with domain-wide delegation. Config can be empty for org-wide fan-out, or set member_allowlist to two or three people for a pilot.

What lands: Meeting entities from transcribed calls, Person attendees, then Topic / Decision / ActionItem once extraction has run. Search for a meeting title, not a calendar invite that was never transcribed.


3. Confirm data landed ​

Check three surfaces. Any one of them is enough; using all three tells you whether the gap is poll, extraction, or the client.

Dashboard — Corvus → Sensors. The row is active, Last polled is recent, and Events is non-zero. If it is still bindings required, go back to step 2. If Test connection fails, the source guide's Verify section names the usual credential and scope problems.

Dashboard — Corvus → Ontology. Open the Entities tab. Slack should show Channel / Message / Person. Meet should show Meeting / Person, then decisions and topics after the LLM pass.

CLI or MCP. Same graph, from a terminal or an agent:

bash
corveil stats                              # entity counts + source status
corveil search "standup"                   # Slack channel name, or a Meet title
corveil entities --type Channel            # Slack
corveil entities --type Meeting            # Meet
corveil context Meeting "Q3 Planning"      # once a name resolves

Or ask an MCP client pointed at /mcp (see the Corveil MCP reference):

What did we talk about in #engineering this week?Who was in yesterday's planning meeting, and what was decided?

Those questions hit ontology_search / ontology_lookup. Empty results with a healthy source row almost always mean extraction has not finished yet — wait the cycle, then search again. corveil sensors poll is a stub; use Poll now in the dashboard.

Nothing yet?

  • Slack: is the bot in the channel? A missing invite shows as bot is not a member — run /invite @Corveil, then those channels resolve on the next poll.
  • Meet: did that meeting actually have Gemini notes? An untranscribed call is invisible on purpose.
  • Both: bindings confirmed, then one poll, then ~30 minutes.

4. What you should see next ​

Once the graph has entities, the rest of the product starts to have something to say.

  • Corvus → Ontology is the working set: people, channels or meetings, and the edges between them. Drill into an entity for its synthesized page, evidence, and neighborhood.
  • Corvus → Dashboards → Summaries is the org's summaries dashboard (gated on dynamic_dashboards). Per-person Daily and Hourly cards are Summary entities written by User Workers — not a dump of Slack messages, and not the retired request-log / ws_summaries pipeline. They are not instant; they appear once those workers have run against the graph.
  • The home-dashboard lede (What Corveil noticed) is a deterministic activity stub from spend and session metrics. It does not render a daily digest.

A scheduled morning brief in Slack is Workforce → Workers (open the User Workers tab, then Create Worker) — a prompt with a schedule and a delivery channel, once you want the graph to do something every day. The control plane is the same shape as everything else: dashboard, corveil, or MCP control_* tools. This page stops at the first entity and the first summary.

Then what ​

Add a second source after the first one is producing entities. The overlapping Google sources share one google_service_account_json credential. On the official Corveil Slack app, @corveil chat is the deployment-verified Events path (POST /webhooks/slack); you do not create a vault signing secret. A bring-your-own app uses that secret and Event Subscriptions in the Slack guide's bring-your-own section. Point a coding agent at /mcp so the graph is in the same context as the work. Tune what gets extracted on Ontology Concepts only after you have seen a real entity you want more — or less — of.