Skip to content
↑↓Navigate ↵Open escClose

Extensions

Use Settings → Extensions to add panels made by other people to OpenChamber. An extension is a small page that sits on the right-hand rail, next to the built-in panels. It can show you data from another service, attach a task to the chat, and, if you allow it, start sessions, send prompts, or read files.

Extensions run on OpenChamber web and desktop. VS Code and the mobile app do not load them yet. They are not the same thing as OpenCode plugins.

Install one

Extensions marked Built-in ship with the selected OpenChamber instance. They start enabled and receive their declared permissions without a separate approval dialog. Use Disable or Enable on their card; built-ins cannot be removed or updated separately from the app. Disabling preserves their data and connected accounts, and stays in effect after app updates.

Their account settings appear in Settings → Integrations → Built-in integrations. A service may still need an API token or sign-in before it can access your account.

  1. Open Settings → Extensions.
  2. Paste one of these into the Folder, ZIP, or URL field and choose Add:
    • the absolute path of a folder on this computer
    • the path of a .zip file
    • an https link to a git repository or a zip file
    • an SSH Git address, such as git@github.com:owner/extension.git
  3. If the extension asks for any permissions, a dialog lists them. Choose Allow and enable, or Remove to take it back out.

You can also drop a .zip onto the field, or pick one with the archive button next to it; the archive is uploaded to the OpenChamber server, so this works for a remote instance too. On desktop the folder button opens a native picker, and a dropped folder installs from its path.

The extension’s icon appears on the rail. If it does not, see Troubleshooting.

A folder install runs straight from that folder, so someone developing an extension can edit and reload. A zip or a URL is copied into OpenChamber’s own data folder first; the original file is not touched.

Private repositories and Git identities

SSH installs accept git@github.com:owner/extension.git and ssh://git@github.com/owner/extension.git, with an optional #branch-or-tag. Choose Global Identity or a saved Git identity from the fingerprint menu beside the install field. The selection is kept for update checks and updates; changing that identity’s key applies to the next operation.

Global Identity uses the Git/SSH configuration and SSH agent of the user running the selected OpenChamber server. On a remote instance, the key must be available there. Unlock passphrase-protected keys in that server process’s SSH agent first. HTTPS URLs use Git’s HTTPS credentials rather than automatically switching to SSH. Git hosts must resolve to public addresses; local SSH host aliases and private-network targets are not supported.

What an extension may do

Showing a panel and reading which project and session are open needs no permission. Anything that acts on your behalf does, and you see the whole list once, when you install:

  • Send messages in your sessions: writes and sends prompts to the model, which costs tokens and can run tools.
  • Access projects and sessions: list registered projects, worktrees, and session states; create and open sessions in those projects. This does not expose conversation content.
  • Read and write project files: any file in the open project.
  • Read and write files outside the project: only the locations listed in the dialog.
  • Use your Small Model: one-off text generation outside your sessions, with the model from Settings → Sessions → Small Model. Costs tokens.
  • Connect to an external service: with the account you connect in Settings → Integrations.
  • Read a session’s conversation: only when you run the extension’s action on that session.
  • Run a local service: a separate program with your full user access. Allow it only if you trust the author. When the extension wants to be told what happens in your sessions, this line also lists the moments it hears about: a turn finishes, a turn fails, the agent asks permission, the agent asks a question. It hears about them in every project, with no window open, and gets only identifiers: the session, its project, and the items you linked to it.
  • Read what the agent says in the background: the final answer of each turn, the questions the agent asks and what it asks permission for, in every project, sent to the extension’s local service. Allow it only if you trust where the extension sends it.
  • Start sessions and send messages on its own: its local service does this with no window open, which costs tokens and can run tools.
  • Add to what agents read: text in the instructions of your sessions, and skills offered to every agent while the extension is on.

A local service can also keep running while OpenChamber runs, or wake on a schedule. The dialog says so under Run a local service, and it says when what you type after @ goes to the service. An extension can add its own rows to the @ menu and its own blocks to agent replies. Pausing the extension takes all of this away.

An extension that delivers your notifications, to Slack, Matrix or a server of its own, says so under Run a local service too, with a line that starts with Delivers your notifications. Nothing goes out until you connect an account for it in Settings → Integrations; after that it gets what your phone would, and pausing the extension stops it.

When a newer version asks for more than you allowed, the card shows Needs approval and a Review permissions button. Until you allow the new list, that extension stays off.

Where it shows up

An extension can also offer a full-screen page, such as a task board. Open it from Extension pages above the session list. The menu appears only when an enabled, approved extension offers a page. Selecting a chat brings you back; reload, pause, removal, or switching servers closes the page too. An extension cannot open a full-screen page on its own.

Extensions can save their own data on the connected OpenChamber server without putting files in your project. The data survives reloads and is deleted when you remove the extension. A board can track agents working in different projects or worktrees, while deciding its own task statuses.

Besides its panel on the rail, an extension can add entries to menus you already use: the actions on a chat message, the menu of a session, the + menu next to the chat box, and slash commands like /task ABC-12 that attach something without opening anything. It can also give its own tools a proper icon, title, and output layout in the chat, the way OpenChamber’s built-in tools have. The extension decides which of these it offers; all of them are off until you allow the extension.

Some extensions show a live picture instead of a panel of their own: what an agent is working in on the server, such as a browser or a simulator. Click into the picture or type to take control, and the status line says You have control; the agent’s own browser actions are refused until you press Hand back to agent. Copy and paste work as usual. Another device connected at the same time sees who is in control and cannot take it over. Such an extension can add its own controls beside the picture, an address bar above it or a tool column next to it for example.

An extension as a git host

An extension can add a git host next to GitHub, GitLab, Gitea, Forgejo and Gerrit. Its permission dialog then has a line that starts with Acts as the Git host and names the host. The line also says what OpenChamber sends it: repository names, branches, and the issue and pull request text you write.

Once you allow it, the host gets its own card in Settings → Integrations, next to the built-in hosts. Connect your account there with a token, and the host’s address if the card asks for one. After that, a project whose remote is on that host works like any other: its issues and pull requests are on the Issues and PRs board and in the chat’s + menu, its branches show pull request badges, and you can start a worktree from one of its pull requests. See Git hosts for what each of these does.

Your token stays in OpenChamber. The extension asks OpenChamber to call the host for it, and OpenChamber adds the token to each call, only for the address you connected. The extension never receives it.

Pausing the extension takes the host away until you turn it back on, and your account stays. Removing the extension forgets the account. VS Code doesn’t show git hosts from extensions.

The OpenChamber SDK has a working example, examples/source-control-provider, to start from when building one. See Build an extension.

An extension as a tracker

An extension can add a work item tracker next to Linear: YouTrack, Jira, Plane, or a tracker of its own. Its permission dialog then has a line that starts with Acts as the tracker and names it. The line also says what OpenChamber sends it: your searches and the items you open, and that it is asked to change their state and post session comments for you.

Once you allow it, the tracker gets its own card in Settings → Integrations under Extension accounts. Connect an account there: with a token, or by signing in in the browser after you enter the client id of the app you registered with the tracker, and the server’s address first if the card asks for one. After that its items are wherever Linear’s are: the chat’s + menu and the picker, New Worktree, the linked items of a session, and the live states of items you follow. A pasted link to one of its items is recognised the same way. See Linear for what each of these does.

Your tokens stay in OpenChamber. The extension asks OpenChamber to call the tracker for it, and OpenChamber adds the credential to each call, only for the server you connected. The extension never receives it, and only its state change and comment calls may write anything there.

Pausing the extension takes the tracker away until you turn it back on, and your accounts stay. Removing the extension forgets them. VS Code shows no trackers; on the phone the tracker’s items show, and accounts are connected from the web or desktop app.

The OpenChamber SDK has a working example, examples/tracker-provider, with a fake tracker to run beside it. See Build an extension.

An extension as a usage provider

An extension can add a usage provider next to the built-in ones: a provider OpenChamber does not read itself, or one of its own. Its permission dialog then has a line that starts with Reports usage like a built-in provider and lists the OpenCode providers whose credentials it reads, such as openrouter; an extension that lists none says so.

Once you allow it, its card sits after the built-in providers on Settings → Usage, with the extension’s name and icon, and it joins the header’s rate limits, Work Status, the phone’s popover and the desktop tray when you tick Show in Work Status, like any built-in. On every refresh OpenChamber hands the extension the credential OpenCode holds for each provider it listed, and nothing else; a version that lists another provider asks for your approval again. The extension reads the usage itself, and OpenChamber draws it the way it draws a built-in.

Pausing the extension takes the card away until you turn it back on, and your Usage settings for it stay. Removing the extension takes the card away for good. VS Code shows no usage from extensions; on the phone the card shows, and the extension is set up from the web or desktop app. A session inside an isolated space reads usage from that space’s own server, which has no extensions.

The OpenChamber SDK has a working example, examples/quota-provider, with a fake usage API to run beside it. See Build an extension.

Connect its account

An extension that talks to a service gets a card at Settings → Integrations under Extension accounts. Depending on the service, the card asks for an API token, a username and token, or a client id for a sign-in flow. Choose Connect; Disconnect forgets the stored token. Extra fields the extension declares save on their own as you leave them.

The token stays on the OpenChamber server. The extension’s page never sees it.

Update

Extensions installed from a git URL can update themselves. Opening Settings → Extensions checks each of them at most once an hour; Check for updates checks right away. A card with a newer version shows Update available and an Update button. The update keeps your permissions, accounts, and settings; if the new version asks for more, the approval dialog appears again. Folder and zip installs do not update: replace them by hand.

Add #v1.2.0 or #stable to the git URL when you install to follow a tag or branch instead of the default branch.

Pause or remove

Each card has an Enabled switch. Off keeps the extension installed but hides its panel and blocks its calls. Remove deletes a zip or URL install from OpenChamber’s data folder; for a folder install it only forgets the path, your folder stays.

Build your own

Everything an extension can do, and how to make one, is in Build an extension.