Local-first token, cost and cache observability for OpenClaw.
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 daemonopenclaw plugins install https://github.com/superbasedapp/pluginsopenclaw plugins install accepts an npm spec, a git URL, a local path,
a tarball or a zip. From a local checkout:
openclaw plugins install ./openclaw/superbasedInstalled plugins are extracted into ~/.openclaw/extensions/<id>/ and
enabled in config. Manage them with
openclaw plugins list|info|update|enable|disable|doctor. The plugin id is
superbased, which is also the key under plugins.entries in
your OpenClaw config.
| Manifest field | Value |
|---|---|
id (required) |
superbased — the canonical plugin id, and the plugins.entries.<id> key. |
configSchema (required) |
An object that accepts no properties. This plugin has no configuration of its own; observer's own knobs live in ~/.observer/config.toml, which the binary reads. |
name / description / version |
Display metadata; the version is stamped from the observer release tag. |
activation.onStartup |
true — the server is a static declaration and has to be present from the start of a session. |
mcpServers.observer |
transport: stdio, observer serve — on-demand project/session/cost queries from inside OpenClaw. |
Nothing else is declared. In particular there are no homepage,
repository, license or keywords fields — OpenClaw's
manifest reference does not have them, and states that npm install metadata
belongs in package.json instead. There is no icon (we have no
published image URL to point at, and OpenClaw falls back to a default) and no
catalog block (those are ClawHub curation hints, not something an
unlisted plugin should claim for itself).
No hooks are declared. Observer has no OpenClaw hook receiver —
observer hook accepts claude-code, cursor, codex and hermes only — so a
hook here would name a command that does not exist. OpenClaw capture works
without hooks: observer's watcher reads both the <id>.jsonl message log
and the <id>.trajectory.jsonl trace, which between them carry real
per-call token counts.
Captured data lands in the local ~/.observer/observer.db. The MCP server
makes no network calls of its own.
OpenClaw documents that mcp.servers.<name> in your own config "can
replace a plugin default or set enabled: false to omit it" — so an
entry you wrote by hand overrides this plugin's, and you can switch the server
off without uninstalling anything.
observer init writes no OpenClaw config today — internal/mcp
has no OpenClaw client row — so this plugin cannot duplicate anything observer
wrote. If you have separately run
openclaw mcp set observer …, that hand-written entry replaces
this plugin's per the rule above rather than stacking with it.
The automatic detect-and-skip observer init performs for the Claude Code
plugin is claude-code-only (internal/claudeplugin); no equivalent probe
exists for OpenClaw. Documented, not built.
- Docs: https://superbased.app/
- Source: https://github.com/superbasedapp/observer
- License: Apache-2.0