Skip to content

Choose Bifrost

Bifrost has several interfaces because editor navigation, agent tools, structural queries, and embedded analysis have different jobs. Start with the question you need to answer, then choose where you want to answer it.

Your questionStart withWhy
“Where is this known symbol defined or referenced?”search_symbols, then a mode-specific definition or usage toolThese tools preserve declaration identity, aliases, imports, and language-specific resolution.
“Which code has this syntactic shape?”query_codeIt matches normalized calls, declarations, assignments, imports, literals, containment, and typed graph steps across languages.
“Which declarations call, use, inherit from, or import this result?”A query_code typed pipelineStart with a structural match, then traverse exact indexed declarations, reference/call edges, hierarchy, ownership, or project-file imports.
“Which code is conceptually about this topic?”semantic_searchThis optional feature retrieves by meaning when names and shapes are not known in advance.
“Where does this literal string occur?”A text-search toolText search is the honest choice when the question is textual rather than structural or semantic.
“Can Bifrost prove control flow, aliasing, points-to, or general data flow?”Do not use the current query engine for that proofThose analyses are outside the current product boundary. Structural containment and resolved graph edges are not substitutes for them.

When a question begins with a known declaration, prefer symbol and usage tools. When it begins with a language-neutral shape, prefer query_code. A common workflow is to find candidates structurally and then use exact locations or declarations for semantic follow-up.

Where you workBest first surfaceWhat it provides
Coding agentMCP Server with symbol|extendedSymbol navigation plus inline JSON query_code and saved .rql through query_file.
VS CodeVS Code LSPDefinitions, references, hover, .rql editing, and execution of the current RQL buffer, including unsaved text.
Another editorLSP ServerEditor-native definitions, references, hover, and workspace indexing; RQL editor features currently belong to the VS Code extension.
Terminal explorationCLI and Rune Query LanguageOne-shot JSON queries, saved query files, and an interactive RQL prompt.
Rust applicationRust LibraryIn-process analyzer APIs for a Rust integration.
Python applicationPython ClientNative-backed Python access to Bifrost analysis and query results.
Instruction-only agent setupAgent InstructionsGuidance for using tools that are configured separately; skills and AGENTS.md text do not expose tools.

MCP and LSP are separate Bifrost processes. A VS Code Play action proves that the extension’s language server can execute RQL; it does not prove that an agent has MCP or query_code. Likewise, installing agent skills teaches a host how to use tools but does not start those tools. See the MCP/RQL availability matrix before configuring an agent.

Read Language and Analysis Capabilities first. It distinguishes structural support, exact graph-backed references and calls, proof tiers, named arguments, imports, hierarchy, external-dependency limits, and unsupported whole-program analyses. Then review the current evidence and evaluation method, complete the ten-minute evaluation, and use the executable language tutorials to inspect source, query, and exact expected output together.

Start with the MCP toolsets, choose symbol|extended, and run both query-access smoke tests. Keep symbol tools, structural query results, and text search as different evidence sources. A successful symbol call does not establish that query_code is enabled, and a truncated or diagnostic-bearing result is not a completeness proof. Review workspace, cache, launcher, and model boundaries before connecting a repository to a hosted model.

Choose an LSP integration for editor navigation. Add MCP separately only when an agent in that editor should call Bifrost tools. For VS Code query exploration, use the RQL Play workflow.

Begin with Build a Static-Analysis Rule, use RQL to explore, and inspect its canonical JSON CodeQuery before embedding the query through the CLI, Python, Rust, or MCP. Treat diagnostics, proof, truncation, and provenance as part of the result contract rather than optional metadata.

Bifrost is a good fit when the answer can be grounded in parsed source structure, indexed declarations, exact source references, resolved call edges, direct project-file imports, or indexed type relationships. It is not currently a control-flow, points-to, general alias, taint, or whole-program data-flow engine. Read the capability matrix for language-specific boundaries before relying on a zero-result or completeness claim.