Confluye
Features

Search and notifications

Workspace-scoped global search (⌘K) and the derived notification inbox.

Global search finds workspace objects and jumps to a view. It does not run Command Center actions. The notification inbox is a derived list (runs, schedules, deployments, credentials, documents) with in-process read/archive state.

HTTP: Search, Notifications.

Press ⌘K or Ctrl+K anywhere, or call GET /api/search / GET /api/v1/search.

The query is lowercased and split on non-alphanumeric characters. Tokens of length 1 are dropped. If no token remains, results is []. Scoring: each remaining term adds 1 if it appears in indexed fields and 2 if it appears in the title. Results with score > 0 sort by score desc, then title, then slice to a limit.

Default limit is 20. Session search has no limit query param (always 20). v1 accepts limit; non-positive or non-numeric values fall back to 20. There is no upper clamp on v1.

Indexed types and default targetView:

typeTypical jump
workspacehome
workflowworkflow
documentdocs
knowledgeBaseknowledge
tabledatabases (includes cell text)
runlogs (targetId is workflow id)
scheduleschedules
webhookworkflow
credentialsettings / secrets
apiKeysettings / api-keys (masked)
aiProvidersettings / byok
mcpServersettings / workflow-mcp-servers
customToolsettings / custom-tools
skillsettings / skills
mailerRoutesettings / mailer
chathome (indexes message bodies)
notificationnotifications
auditEventsettings / audit-logs

Search uses getPlatformSnapshotForWorkspace for the caller’s user. Session access to another workspace requires membership (403 Cannot access search results for another workspace.).

Notifications

GET lists workspace-scoped rows. Types: run, schedule, deployment, credential, document. Priority: critical, warning, info, success. Status: unread, read, archived.

PATCH actions:

BodyEffect
{ "all": true }Mark every non-archived row read
{ "id", "action": "read" }Mark one read (action may be omitted)
{ "id", "action": "archive" }Mark archived and also record as read

Unknown action (for example delete): 400 Notification action must be read or archive. Missing id when not all: 400 Notification id is required. Unknown id: 404.

Read and archive ids live in process memory (readNotificationIds / archivedNotificationIds). A new web instance or restart forgets those marks; the derived rows reappear as unread. There is no create/delete notification API and no pagination.

Human Task notifications

Human Task assignment, reminder, escalation, and orphan (no-eligible-user) alerts are delivered through a transactional notification outbox, not this derived inbox. The outbox record commits in the same durable boundary as the task and checkpoint, and dispatch begins only after commit, so an early response is never lost. Delivery is retried with backoff; on exhaustion the record becomes failed (never silently dropped), and the Tasks inbox remains the source of truth. Outbox records carry only a bounded payload and digests — never raw draft/form values or resume secrets. Watch the humanTask.outbox.retryExhausted counter for channel outages and see the Human Task recovery runbook.

Gaps

  • Session search cannot raise the 20-result cap.
  • v1 search does not reject huge limit values.
  • Notification read/archive is not durable across processes.
  • Inbox rows are generated from the platform snapshot, not a first-class notification store.

Next steps