Search
Cockpit has two searches. They answer different questions.
Top bar
The shell search calls GET /cockpit/api/global-search. After two characters it returns name matches, up to five per group:
- tasks, by title
- accounts, by name
- contacts, by full name
- deals, by name
A short id (T… for a task, W… for a work item) resolves through GET /cockpit/api/short-id when the query matches that pattern. Results open the record. This path is a scoped ilike lookup. It does not embed the query and it does not search mail bodies.
GET /cockpit/api/records/search and GET /cockpit/api/accounts/search are the same style of lookup for pickers inside the app.
Semantic search
Indexed text (activities and entity notes that passed the quality gate) is embedded with gte-small at 384 dimensions and stored in rag_chunks. Query time combines keyword search and vector search, then fuses the lists.
You use that index from:
/chat, the knowledge-graph chat- the approval deck's card chat
- MCP
search,rag_search, andentity_context_query(scoperag:read)
search is the one to call from an agent. It routes the question, then runs the hybrid query. Optional filters are domain_name, deal_name, and project_name. Results are limited to the token's owner and team.
rag_search is the lower-level hybrid call: query, match_count, optional source_tables, and a time window. entity_match_search resolves a person, company, or campaign name to candidates. It does not merge them. entity_search_diag explains a name that did not resolve. entity_context_query builds a pack for one entity: the card, scoped chunks, and optional tasks and notes.
Digest and noise activities are not indexed. A record you cannot find in chat may still show up in the top bar if its name matches.
What search will not do
Name search will not invent a link between a person and an account. Matching a first name is not a merge. Create and merge stay on approval cards. See Approvals.