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.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.
Add this repository as a marketplace, then install from it:
qodercli plugins marketplace add superbasedapp/plugins
qodercli plugins install superbased@superbasedmarketplace 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/superbasedAn 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.
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.
| 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.
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.
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.
- Docs: https://superbased.app/
- Source: https://github.com/superbasedapp/observer
- License: Apache-2.0