
Security News
Open VSX Unblocks Extension IDs Used in Malware Campaign
Open VSX has removed three extension IDs from its malicious-extension list as the legitimate publishers they impersonated move to claim the names for themselves.
@christiangalsterer/opencode-requesty-plugin
Advanced tools
opencode TUI plugin: shows Requesty.ai monthly budget, current spend, and per-model cost distribution in the session sidebar, in the session prompt and with a detail dialog via the /requesty command
An opencode TUI plugin that shows your Requesty.ai budget, current monthly spend, and per-model cost distribution right in the session prompt, in the session sidebar, plus a detail dialog via the /requesty slash command.
The plugin surfaces your Requesty.ai budget and usage in three places, each optimized for the space it occupies: a compact sidebar, a full detail dialog, and a minimal prompt-area readout.

The sidebar gives a quick, at-a-glance view of your current month's Requesty usage:
GET /v1/manage/apikey/self~$X EOM), with a pace marker: ↑ over pace, → on pace, ↓ under pacesidebar.showTokens)sidebar.maxModels), each with spend, total tokens, and input (↑) / output (↓) breakdown; click the header to collapse or expand the listYou can disable the sidebar entirely with "sidebar": { "enabled": false }.

A compact readout on the right side of the session prompt shows:
~$X EOM ↑) when prompt.monthlyProjection is enabledDisable the readout with "prompt": { "budgetIndicator": false }.

Open the dialog with /requesty from the command palette for the full breakdown:
Data comes from the Requesty Management API (apikey/self + apikey/self/usage grouped by model_used, current calendar month).
Add the plugin to your tui.json (project root or ~/.config/opencode/tui.json). Update the version number to the latest release.
{
$schema": "https://opencode.ai/tui.json",
"plugin": ["@christiangalsterer/opencode-requesty-plugin@1.0.0"]
}
Or with options:
{
$schema": "https://opencode.ai/tui.json",
"plugin": [
[
"@christiangalsterer/opencode-requesty-plugin@1.0.0",
{
"refreshIntervalMs": 300000,
"warningThreshold": 0.6,
"errorThreshold": 0.85
"sidebar": {
"enabled": true,
"maxModels": 5,
"showTokens": true,
"order": 50
}
}
]
]
}
Plugin options must be the second item in the nested plugin entry. The same format is used for local plugins; use the generated dist/tui.tsx file as the plugin path:
{
"$schema": "https://opencode.ai/tui.json",
"plugin": [
[
"/absolute/path/to/opencode-requesty-sidebar-plugin/dist/tui.tsx",
{
"sidebar": { "showKeyName": true },
"prompt": { "showKeyName": true },
"dialog": { "showKeyName": true }
}
]
]
}
Restart opencode after changing the config — plugins are loaded at startup.
Point at a local checkout instead:
{
"$schema": "https://opencode.ai/tui.json",
"plugin": [
[
"file:///absolute/path/to/opencode-requesty-plugin/dist/tui.tsx",
{
"sidebar": { "showKeyName": true },
"prompt": { "showKeyName": true },
"dialog": { "showKeyName": true }
}
]
]
}
Run bun install && bun run build in the checkout first.
OpenCode does not currently support plugin updates reliably. See OpenCode PRs #35777, #32822, and #37300. To force OpenCode to download the configured plugin versions, clear its plugin cache:
rm -rf ~/.cache/opencode/packages/@christiangalsterer/opencode-requesty-plugin*
The plugin reads your Requesty API key from the opencode provider config: provider.requesty.options.apiKey in opencode.json, including {env:VAR} interpolation.
{
"provider": {
"requesty": {
"options": { "apiKey": "sk-..." }
}
}
}
Or via an environment variable:
{
"provider": {
"requesty": {
"options": { "apiKey": "{env:REQUESTY_API_KEY}" }
}
}
}
If no key is found, the widget shows a short setup hint instead of failing.
| Option | Type | Default | Description |
|---|---|---|---|
refreshIntervalMs | number | 300000 (5 min) | Periodic refresh interval (safety net) |
warningThreshold | number | 0.7 (70%) | Budget usage ratio at which the bar turns yellow (accepts 0–1 or 0–100) |
errorThreshold | number | 0.9 (90%) | Budget usage ratio at which the bar turns red (accepts 0–1 or 0–100) |
sidebar.enabled | boolean | true | Show the sidebar widget |
sidebar.maxModels | number | 5 | Number of models shown in the compact sidebar list |
sidebar.showTokens | boolean | true | Show input/output token breakdown alongside spend in the sidebar averages block |
sidebar.showKeyName | boolean | false | Show the API key nickname in the sidebar header |
sidebar.order | number | 50 | Slot order for the sidebar widget; lower numbers appear first |
prompt.enabled | boolean | true | Show the prompt widget |
prompt.budgetIndicator | boolean | true | Show spend/limit readout on the right side of the session prompt |
prompt.todaySpend | boolean | true | Show today's spend (T $X) in the session prompt averages block |
prompt.dailyAvg | boolean | false | Show the current month's daily average (D $X) in the prompt averages block |
prompt."7dAvg" | boolean | false | Show the 7-day average (7d $X) in the prompt averages block |
prompt."30dAvg" | boolean | false | Show the 30-day average (30d $X) in the prompt averages block |
prompt.showTokens | boolean | true | Show today's input/output token breakdown (↑X↓Y) next to today's spend in the session prompt |
prompt.showKeyName | boolean | false | Show the API key nickname in the session prompt readout |
prompt.monthlyProjection | boolean | true | Show a month-end projection (~$X EOM ↑) in the session prompt, red when the estimated spend exceeds the budget |
prompt.order | number | 50 | Slot order for the prompt indicator; lower numbers appear first |
dialog.showKeyName | boolean | false | Show the API key nickname in the detail dialog title |
warningThreshold must be lower than errorThreshold; if the ordering is invalid, both fall back to the defaults (70%/90%). Values above 1 are treated as percents, e.g. 80 means 80%.
If you utilize different API keys for various projects, it is highly recommended to enable showKeyName in your configuration. This allows you to easily identify which Requesty API key is currently active in the sidebar, session prompt, and detail dialog.
Example for enabling key identification:
{
"sidebar": { "showKeyName": true },
"prompt": { "showKeyName": true },
"dialog": { "showKeyName": true }
}
{
"$schema": "https://opencode.ai/tui.json",
"plugin": [
[
"@christiangalsterer/opencode-requesty-plugin",
{
"refreshIntervalMs": 300000,
"warningThreshold": 0.7,
"errorThreshold": 0.9,
"sidebar": {
"enabled": true,
"maxModels": 5,
"showTokens": true,
"showKeyName": true,
"order": 50
},
"prompt": {
"enabled": true,
"budgetIndicator": true,
"todaySpend": true,
"dailyAvg": false,
"7dAvg": false,
"30dAvg": false,
"showTokens": true,
"showKeyName": true,
"monthlyProjection": true,
"order": 50
},
"dialog": {
"showKeyName": true
}
}
]
]
}
Data is refreshed on startup, on a configurable periodic interval, when a new session is created, and when messages are updated.
All amounts are in USD and dates are evaluated in UTC.
$0 / 0 tokens. Uses a rolling window to ensure accuracy across month boundaries.$0 / 0 tokens. Uses a rolling window to ensure accuracy across month boundaries.bun install
bun run format:fix
bun run typecheck
bun run test
bun run build
The project is fully typed TypeScript (strict mode). Sources live in src/ (.ts/.tsx), tests in test/. The opencode host transforms TSX at load time via @opentui/solid/preload (Bun); no bundler is used.
MIT
FAQs
opencode TUI plugin: shows Requesty.ai monthly budget, current spend, and per-model cost distribution in the session sidebar, in the session prompt and with a detail dialog via the /requesty command
The npm package @christiangalsterer/opencode-requesty-plugin receives a total of 221 weekly downloads. As such, @christiangalsterer/opencode-requesty-plugin popularity was classified as not popular.
We found that @christiangalsterer/opencode-requesty-plugin demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Open VSX has removed three extension IDs from its malicious-extension list as the legitimate publishers they impersonated move to claim the names for themselves.

Product
Socket’s PHP and Composer support is now in Beta for all customers, with PHP reachability analysis generally available.

Product
Socket is bringing experimental protection to Firefox, scanning 97,000+ extensions in Mozilla's official directory for malware and risky updates.