Each connector field in the wizard has a Test button. Test before saving — fast feedback if a token is wrong.
| Service | Where | Notes |
|---|---|---|
| Google Workspace | console.cloud.google.com | One OAuth client covers Calendar, Gmail, Tasks, Docs, Drive. Tokens are captured automatically when you sign in — no separate auth step. |
| Slack | api.slack.com/apps | Create app → OAuth & Permissions → Bot token (xoxb-…). Need channels:history, chat:write, users:read. |
| Linear | linear.app/settings/api | Personal API key. Full read/write on your workspace. |
| Notion | notion.so/my-integrations | Create integration → grab secret. Then share each Notion page/database with the integration. |
| GitHub | github.com/settings/tokens | Personal Access Token with repo scope. Powers the Software Engineer agent in Dev Mode. |
| Anthropic | console.anthropic.com | Required only for Dev Mode. Powers the Claude Sonnet 4.6 engineer agent. |
| Serper | serper.dev | Web search. Free tier covers most personal use. |
Reconfigure any of these later from /admin. Tokens are encrypted at rest in the DB config store; the only place they're decrypted is in-memory at request time.
Google connectors — automatic
The Google Workspace connector is special. The same Google sign-in that authenticates you with Kerno also captures the OAuth tokens for Calendar, Gmail, Tasks, Drive, and Docs. The first sign-in's consent screen lists every scope; approve once, and every connector lights up immediately.
If you only want sign-in (no Workspace access), you can revoke individual scopes from your Google account permissions page. Kerno will skip connectors whose scopes aren't granted.
Embeddings provider
Semantic memory uses any OpenAI-compatible /embeddings endpoint. Defaults to Mistral with mistral-embed. Configure under the wizard's LLM step (or /admin → LLM):
| Field | Default | Notes |
|---|---|---|
| Embeddings API Key | (reuses the LLM key) | Only fill if your embedding provider differs |
| Embeddings Base URL | https://api.mistral.ai/v1 | OpenAI: https://api.openai.com/v1 |
| Embeddings Model | mistral-embed | OpenAI: text-embedding-3-small |
The pgvector column is fixed at 1024 dimensions. Mistral / Cohere / Voyage all return 1024 natively. OpenAI's text-embedding-3-* accept a dimensions parameter (Kerno sends 1024 automatically). text-embedding-ada-002 is 1536-only and won't work.