Skip to content

Latest commit

 

History

History
123 lines (94 loc) · 4.95 KB

File metadata and controls

123 lines (94 loc) · 4.95 KB

SuperBased Observer — Qoder CLI plugin

Local-first token, cost and cache observability for Qoder (qodercli).

Requires the observer binary already on your PATH. This plugin is wiring only — it declares an MCP server that runs observer; it does not download or bundle it.

npm i -g @superbased/observer     # or: pipx install superbased-observer
observer start                    # run the local daemon

Layout

.qoder-plugin/marketplace.json   ← the catalog, at the marketplace ROOT
qoder/superbased/
├── .qoder-plugin/plugin.json    ← the manifest (only the manifest goes here)
└── .mcp.json                    ← the MCP server it ships, at the plugin ROOT

Qoder auto-discovers convention paths at the plugin root and ignores the ones that are absent, so a two-file plugin is a complete plugin. The catalog's source is ./qoder/superbased — relative to the marketplace root, and inside it, as the schema requires.

Install

Add this repository as a marketplace, then install from it:

qodercli plugins marketplace add superbasedapp/plugins
qodercli plugins install superbased@superbased

marketplace add also takes a git URL, a local directory or a marketplace.json URL, and --scope takes user (the default), project or local.

Or install the plugin directory straight from a clone, with no marketplace at all:

qodercli plugins install ./qoder/superbased

An absolute path or a ~/… path works too, and -s/--scope takes the same three values. Restart the CLI or run /plugins reload afterwards. Locally-installed plugins carry the id superbased@local; manage them with qodercli plugins list|enable|disable|validate|update and qodercli plugins uninstall superbased@local.

Why there is a catalog here at all

Qoder looks for a marketplace manifest in a fixed order — .qoder-plugin/marketplace.json, then .claude-plugin/marketplace.json, then marketplace.json — and this repository carries a .claude-plugin/marketplace.json at its root for Claude Code. Without a Qoder catalog to take the first slot, qodercli plugins marketplace add on this repository would fall through to the Claude Code entry and install that plugin — which bundles hooks/hooks.json full of observer hook claude-code … commands written for a different tool. The catalog above takes the first slot and resolves to the Qoder plugin, which declares an MCP server and nothing else. (Droid documents the same fallback and gets the same treatment; see ../droid/.)

The catalog entry carries no version: Qoder reads the pin from the plugin's own .qoder-plugin/plugin.json, exactly like the Codex and Droid catalogs.

What it wires

Component What it declares
.qoder-plugin/marketplace.json The catalog: one entry, superbased, sourced at ./qoder/superbased.
.qoder-plugin/plugin.json Identity only: name (superbased), version, description, homepage, repository, license, keywords.
.mcp.json The observer MCP server: observer serve — on-demand project/session/cost queries from inside Qoder.

There is deliberately no mcpServers key in the manifest. Qoder's documented manifest field list does not have one — MCP is bundled by file, and the manifest's advanced overrides cover commands / agents / skills / hooks / outputStyles only.

No hooks are declared. qodercli hooks exists, but no firing hook envelope has been grounded for Qoder and observer has no Qoder hook receiver (observer hook accepts claude-code, cursor, codex and hermes only), so a declared hook would name a command that cannot run.

Captured data lands in the local ~/.observer/observer.db. The MCP server makes no network calls of its own.

Double-wiring

observer init writes no Qoder MCP entry today — internal/mcp has no Qoder client row — so this plugin cannot duplicate anything observer wrote. If you have separately added the same server by hand with qodercli mcp add, or into ~/.qoder/settings.json or a project .mcp.json, remove one of the two: Qoder would otherwise load the same tool schema twice per turn.

The automatic detect-and-skip observer init performs for the Claude Code plugin is claude-code-only (internal/claudeplugin); no equivalent probe exists for Qoder. Documented, not built.

What observer can and cannot see for Qoder

Qoder's local stores carry neither a model name nor token counts — usage is server-side only, and Qoder has no base-URL knob to route through the local proxy. So observer records Qoder activity (sessions, tool calls, project patterns) but not Qoder spend. This plugin does not change that; it makes observer's own database queryable from inside Qoder.

Links