pi-neuralwatt
Neuralwatt provider for pi — energy usage tracking and account quota in your status bar
Package details
Install pi-neuralwatt from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-neuralwatt- Package
pi-neuralwatt- Version
1.1.0- Published
- Jul 5, 2026
- Downloads
- 89/mo · 31/wk
- Author
- tedewaard
- License
- MIT
- Types
- extension
- Size
- 25.2 KB
- Dependencies
- 0 dependencies · 1 peer
Pi manifest JSON
{
"extensions": [
"./extensions/neuralwatt.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
Disclaimer: This plugin has been developed in co-operation with AI
Pi Neuralwatt Extension
This extension adds Neuralwatt support to the pi coding agent.
Installation
Install with one of the following:
pi install npm:pi-neuralwatt
pi install git:github.com/tedewaard/pi-neuralwatt
pi install https://github.com/tedewaard/pi-neuralwatt
Configuration
API Key Setup
You can provide your Neuralwatt API key in either of two ways:
Option 1: Environment Variable (Recommended)
Set the following variable in your shell or shell configuration before launching pi:
export NEURALWATT_API_KEY=<your_neuralwatt_api_key>
Option 2: Stored Credentials
Run /login in interactive mode and select the neuralwatt provider to store the key in auth.json for future sessions.
Without an API key
The /v1/models catalog is readable without a key, so neuralwatt models are still discovered and registered. Every live API call, however, reports that no key is configured: /neuralwatt:quota and /neuralwatt:energy surface an error, and the status-bar widget (when enabled) displays ⚡no API key configured for neuralwatt.
Feature Highlights
- Dynamic model catalog – Discovers the
neuralwattprovider's model catalog at runtime fromhttps://api.neuralwatt.com/v1/models(capabilities, context window, per-million pricing), so new upstream models appear without an extension update. On the first run the catalog is empty until pi starts a session and fetches it; thereafter the fetched list is cached to~/.pi/agent/pi-neuralwatt.jsonand re-registered from disk on every startup, so warm starts (andpi --list-models) see it instantly without a network round-trip. The cache is refreshed automatically when it expires, and explicitly with/neuralwatt:refresh. - Cache-Control aware – The cache expiry is derived from the
/v1/modelsresponseCache-Controlheader (s-maxage, thenmax-age), falling back to a 24h default when the header is absent.no-cache/no-storemark the catalog immediately stale, so the next startup refetches instead of serving from cache. - Reasoning-aware models – For each model,
reasoning,thinkingLevelMap, andcompat(supportsDeveloperRole,supportsReasoningEffort) are derived at fetch time from the API's reported capabilities and pi's curated built-in catalogs (matched by model id), so reasoning models are wired up correctly with no manual configuration. pi uses these fields when crafting requests. If a/v1/modelsfetch fails, the previously cached list (stale or otherwise) is kept. - Status-bar widget – When enabled, shows remaining credit balance plus current-month usage (requests and energy) and spend. Refreshes on session start, after each LLM turn, and on model switch (throttled to once per 60s), and only while a Neuralwatt model is the active model. Disabled by default; enable it with
/neuralwatt:toggle. The setting is persisted in~/.pi/agent/pi-neuralwatt.json(understatusBarEnabled) alongside the model cache, so it survives restarts. - Slash Commands
/neuralwatt:energy– Shows an energy-consumption report for the current period: request count, energy scaled to the most readable unit (µWh/mWh/kWh) plus joules, estimated cost, and a recent 7-day daily breakdown./neuralwatt:quota– Shows your key name, accounting method, account balance (remaining/total and % used), current-month and lifetime usage totals, rate-limit tier, and snapshot timestamp./neuralwatt:toggle– Enable or disable the status-bar widget (disabled by default; persisted across restarts)./neuralwatt:refresh– Force-refresh the model catalog from/v1/models, bypassing the cache. Reports how many models were refreshed, or falls back to the last cache on failure.
Usage Example
# start pi normally – the extension is auto-loaded
pi
Once pi starts, you can run /models to select a neuralwatt model. On a first run (no cached catalog yet), the model list is populated as soon as pi starts its session and fetches /v1/models; subsequent runs read from the on-disk cache immediately. Then you can run one of the following commands:
/neuralwatt:energy
/neuralwatt:quota
/neuralwatt:toggle
/neuralwatt:refresh
The status-bar widget is disabled by default. Run /neuralwatt:toggle to enable it — live quota information then appears in the status bar (bottom of the terminal). Run it again to hide it. Run /neuralwatt:refresh to force-reload the model catalog from /v1/models (e.g. after a new model ships upstream).
Development
First install the dependencies. This pulls in the @earendil-works/pi-coding-agent peer dependency, which provides both the pi binary and the extension's types:
npm install
Then run pi with the extension loaded straight from source, so you can iterate on extensions/neuralwatt.ts without installing the package:
pi -e ./extensions/neuralwatt.ts
-e (--extension) takes any local path and can be passed multiple times. If pi isn't on your PATH, use the copy installed above with npx pi -e ./extensions/neuralwatt.ts.
Also note that you should not have an instance of this plugin installed via npm or git; I've experienced that if you try to load an extension with the same name via -e as one already installed, the installed one seems to be preferred.