Skip to content

Extensions

Extensions let you add your own panels, commands and AI tools to Boltise. They are small JavaScript packages that run in a locked-down sandbox — useful for wiring Boltise to whatever your team already uses.

Scope Location
Global — available in every project ~/.cfxkit/extensions/
Per project — only that project <project>/.boltise/extensions/

Each extension is a folder containing a manifest.json and its entry script.

{
"name": "my-extension",
"displayName": "My Extension",
"version": "1.0.0",
"description": "What it does",
"author": "You",
"main": "index.js",
"activationEvents": ["onStartup"],
"contributes": {
"panels": [
{ "id": "my-panel", "title": "My Panel", "icon": "box", "location": "sidebar" }
],
"commands": [
{ "id": "my-extension.doThing", "title": "Do the thing", "keybinding": "Ctrl+Alt+T" }
],
"tools": [
{
"name": "lookup_thing",
"description": "Look something up in our internal system",
"parameters": { "query": "What to look up" }
}
]
}
}

Three kinds of contribution:

  • Panels appear in the sidebar or the bottom panel, beside the built-in ones.
  • Commands appear in the Command Palette, with an optional keybinding.
  • Tools are given to the AI assistant. It can call them mid-conversation, and they go through the same approval flow as every other tool — see Approvals & Safety.

That last one is the interesting one. A tool that queries your own ticket system or asset database becomes something you can just ask the assistant about, in the middle of working on the code it relates to.

Extension code runs inside an isolated context with no access to Node.js. There is no process, no fs, no child_process, no electron, and no unrestricted require — only an allowlisted subset. eval() and new Function() are blocked.

This is a deliberate trade. An extension cannot read arbitrary files or spawn processes, which means installing one cannot quietly compromise your machine or your server. It also means an extension genuinely needing that access cannot be written — that is the intended limit, not an oversight.

Extensions get a console that prefixes their name, so their output is identifiable in the log rather than anonymous.

  1. Create a folder in one of the two locations above.
  2. Add manifest.json and your entry script.
  3. Restart Boltise, or reload extensions from the Command Palette.
  4. Check the log if it does not appear — a malformed manifest is reported rather than silently skipped.

Start per project while you are iterating; move it to the global folder once it is worth having everywhere.

Docs privacy