English | 中文
Inspired by VibeGuard.
An OpenCode plugin that:
- Replaces configured sensitive strings with placeholders before requests are sent to the LLM provider (the provider never sees plaintext)
- Restores placeholders back to the original text after the model output completes (more natural local display/persistence)
- Restores placeholders before tool execution (e.g.
bash/write/edit) so local tools run with real values
Note: OpenCode tool calls are stored in the DB with the real executed args/output. Before each request, this plugin also redacts historical tool inputs/outputs to prevent plaintext from being sent upstream in later turns.
Placeholder format (aligned with VibeGuard):
- Prefix:
__VG_ - Shape:
__VG_<CATEGORY>_<hash12>__or__VG_<CATEGORY>_<hash12>_<N>__ hash12is the first 12 hex chars ofHMAC-SHA256(session-random secret, original), stable within a session and irreversible to the provider
- Put this plugin directory in your project (e.g.
./opencode-vibeguard/). - Load it in your OpenCode config:
- Put
vibeguard.config.jsonin your project root (copy fromvibeguard.config.json.example).
Safety note: to avoid unexpected modifications, the plugin becomes a no-op if the config file is missing or
enabled=false.
Reference the package name in opencode.json (OpenCode will auto-install it on first use):
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-vibeguard"]
}You can also pin a version:
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-vibeguard@0.1.0"]
}Optional (manual) install via npm/pnpm/bun (useful for offline / reproducible setups):
npm i -D opencode-vibeguard
# or: pnpm add -D opencode-vibeguard
# or: bun add -d opencode-vibeguardIf you prefer to load from your local node_modules, use a file:// plugin path:
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["file://./node_modules/opencode-vibeguard/src/index.js"]
}Config lookup order (first match wins):
- Path specified by env var
OPENCODE_VIBEGUARD_CONFIG - Project root:
./vibeguard.config.json - Project
.opencodedir:./.opencode/vibeguard.config.json - Global dir:
~/.config/opencode/vibeguard.config.json
See vibeguard.config.json.example for an example.
cd opencode-vibeguard
npm testEnable debug logs (will not print any plaintext secrets; only config path and replace counts):
OPENCODE_VIBEGUARD_DEBUG=1 opencode .Or set in vibeguard.config.json:
{ "debug": true }- During streaming (
text-delta) the placeholder may briefly appear; it will be restored attext-end.

{ "$schema": "https://opencode.ai/config.json", "plugin": ["file://./opencode-vibeguard/src/index.js"] }