Skip to content

Cursor

Cursor has two independent Bifrost integrations:

IntegrationProcessSurface
Bifrost editor extensionbifrost --root <workspace> --lspDefinitions, references, hover, rename, diagnostics, workspace symbols, RQL, and Rune editor features
Bifrost agent pluginBifrost MCP serverBifrost tools that Cursor agents can call

Install either integration for its own surface or install both. They use separate Bifrost processes even when both resolve the same managed release. Never point the agent plugin at the extension’s LSP process.

Install the Bifrost extension from Open VSX, or open Cursor’s Extensions view and search for brokk.bifrost-vscode. Confirm that the publisher is brokk, choose Install, and open a supported source workspace. With the default auto launch mode, choose Install when Cursor asks to install the Bifrost version pinned by the extension.

Open Output > Bifrost and retain the lines showing the release download and the installed version and path. The managed installer downloads the platform archive and its .sha256 sidecar from the matching GitHub Release, requires the sidecar checksum to equal the hash pinned into the extension package, checks the downloaded archive bytes against that hash, and runs bifrost --version before launching the language server. A visible Bifrost status item by itself does not prove those checks or the active workspace.

To upgrade, choose Update for Bifrost in Cursor’s Extensions view, fully quit and reopen Cursor, and confirm that the installed extension version and the managed Bifrost version match the intended release. If the managed binary is stale or cannot run, accept Update or Reinstall when prompted.

Use a normal workspace rather than a Cursor agent worktree for this smoke. Add a temporary, uniquely named declaration and usage in a supported language. For example, in Rust:

pub fn cursor_bifrost_lsp_probe_4f6f2b7() {}
pub fn call_cursor_bifrost_lsp_probe_4f6f2b7() {
cursor_bifrost_lsp_probe_4f6f2b7();
}

From the usage, verify Go to Definition, Find All References, and hover. Run Rename Symbol, confirm that both declaration and usage change, then undo the rename. To exercise diagnostics, temporarily enable bifrost.unrecognizedSymbolDiagnostics, replace the call with a unique missing symbol, and confirm that Bifrost reports it before restoring the valid call and disabling the experimental setting.

Pass only if every result belongs to the active checkout and Output > Bifrost shows the LSP launch for that workspace. Remove the temporary probe after retaining the Cursor version, extension version, managed Bifrost version, platform, output evidence, and operation results.

  • Run Bifrost: Show Output and check the full launch command, download, checksum, version, and handler errors.
  • Run Bifrost: Restart Language Server after changing roots, exclusions, or launch settings.
  • Set bifrost.launchMode to bundled to require the managed binary, or use path with bifrost.serverPath to diagnose a specific local binary.
  • Set bifrost.debug to true for LSP request tracing and lower bifrost.slowRequestMs when investigating latency.
  • Do not use healthy MCP status as evidence that the editor extension works; it is a different process and protocol.

The shared agent plugin package lives in plugins/bifrost-agent, and the repository root includes .cursor-plugin/marketplace.json so Cursor can discover the package.

Use the dedicated Cursor Agents window. In a new agent, type /add-plugin, select the Add Plugin slash-command suggestion, and press Return. Cursor opens its Plugins view; in Search or Paste Link, paste:

https://github.com/BrokkAi/bifrost

Open the Bifrost result, choose Add to Cursor, and confirm Add Plugin. Cursor reads .cursor-plugin/marketplace.json, finds the bifrost package at plugins/bifrost-agent, and installs it.

Cursor’s settings labels vary by build. If Customize -> Plugins exposes Search or Paste Link, pasting the same repository URL there is equivalent. Typing the slash-command text as an ordinary chat prompt is not: select the slash-command suggestion before submitting it.

To upgrade an existing installation, remove the GitHub-installed Bifrost package from the Plugins view and repeat the GitHub install flow. Fully quit and reopen Cursor afterward, then confirm that the installed plugin metadata reports the expected version.

The portable package uses root plugin.json and mcp.json files. It can also include optional skills/ files. Cursor still needs its native .cursor-plugin/plugin.json and cursor-mcp.json adapter. The adapter resolves its launcher from Cursor’s installed plugin directory. Bifrost also accepts the absolute native path that Cursor returns from roots/list. A connected MCP status or visible tool list is not sufficient evidence that both boundaries worked; complete the smoke test below.

Build Bifrost first:

Terminal window
cargo build --bin bifrost

Open Cursor with the local binary selected:

Terminal window
BIFROST_BINARY_PATH="$(pwd)/target/debug/bifrost" cursor .

In the Cursor Agents window, open Customize -> Plugins, choose Add -> From Local Repo, and select the repository root. Do not select plugins/bifrost-agent directly: From Local Repo expects the marketplace manifest at .cursor-plugin/marketplace.json.

This flow imports the marketplace definition, but the tested Cursor build resolved the plugin contents from the repository’s remote default branch. It ignored both uncommitted files and the selected feature-branch commit. Use it only to test a snapshot already reachable from the default branch. For a local Rust change, fully quit Cursor before starting it with BIFROST_BINARY_PATH as shown above; do not use From Local Repo as evidence for an unpublished plugin-manifest change.

After installing the plugin, stay in the Cursor Agents window, open Customize -> MCPs, and enable Bifrost for the workspace. Check that its status is healthy, then start a fresh agent so the newly enabled tools are attached to that agent. If a restored app session reports that Bifrost is not bound, select the workspace first, open Bifrost’s MCP details, choose Reload, and then start another fresh agent.

Enabling the plugin’s MCP entry is sufficient; do not create a duplicate manual Bifrost server. The packaged Cursor definition supplies the installed launcher location, starts Bifrost without an inferred root, and lets Cursor authorize the active workspace through the standard roots/list mechanism with compatibility for Cursor’s native-path response. Bifrost never treats Cursor’s process directory or the installed plugin directory as the analyzer workspace.

Cursor can also import an installed Claude Code plugin automatically. If the MCP list contains both the native plugin-bifrost-bifrost entry and an imported plugin-brokk-bifrost entry, leave the native Cursor entry enabled and disable the imported duplicate in Cursor. This does not disable the Claude Code installation itself.

For strong exact-checkout evidence, add a temporary declaration whose name is unique to the smoke:

src/cursor_bifrost_host_probe_4f6f2b7.rs
pub fn cursor_bifrost_host_probe_4f6f2b7() {}

Use this strict smoke prompt to prove Cursor called the plugin’s MCP server instead of silently falling back to file or shell tools:

Use only the installed Bifrost plugin MCP tools. First confirm query_code is in the callable Bifrost MCP surface. Call search_symbols with patterns ["cursor_bifrost_host_probe_4f6f2b7"]. Then call query_code with schema_version 1, languages ["rust"], match {"kind":"function","name":"cursor_bifrost_host_probe_4f6f2b7"}, limit 10, and result_detail "full". Do not use Shell, terminal, rg, codebase search, file reading, or the bifrost CLI. Show both exact structured MCP results. PASS only if both return src/cursor_bifrost_host_probe_4f6f2b7.rs.

Apply the shared host-integration evidence contract: retain Cursor’s Bifrost tool event and structured result, verify the result belongs to the active workspace, and reject ordinary file-reading fallbacks or paths under the installed plugin. Remove the temporary declaration after retaining the evidence.

The cursor agent --plugin-dir CLI path is useful for checking plugin loading, but it has not proven reliable for plugin-provided MCP servers. Treat the desktop Customize/MCP flow as the MCP validation path.

The packaged plugin uses symbol|extended. In a fresh chat after enabling MCP, confirm that the Bifrost tool list includes query_code, then call it with the inline JSON fields {"match":{"kind":"declaration"},"limit":1}. To validate saved RQL, check a workspace file named bifrost-smoke.rql containing (limit 1 (declaration)), then call query_code with {"query_file":"bifrost-smoke.rql"}.

The inline call is canonical JSON. MCP accepts RQL only from a workspace .rql file through query_file. See MCP query and RQL availability for the full surface matrix and Agent Result Safety before making completeness claims.