
Plugin Installer
- 105 installs
- 125 repo stars
- Updated February 4, 2026
- igorwarzocha/opencode-workflows
Discover, evaluate, and install OpenCode plugins from the community catalog and wire them into opencode.json.
About
A skill that helps find and install OpenCode plugins to extend agent capabilities. A developer uses it to list the catalog, read plugin details, and add a chosen plugin to opencode.json.
- Lists the plugin catalog via a script and reads full plugin files
- Guides installation and verification in opencode.json
Plugin Installer by the numbers
- 105 all-time installs (skills.sh)
- +3 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #779 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Aug 2, 2026 (Skillselion catalog sync)
npx skills add https://github.com/igorwarzocha/opencode-workflows --skill plugin-installerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 105 |
|---|---|
| repo stars | ★ 125 |
| Last updated | February 4, 2026 |
| Repository | igorwarzocha/opencode-workflows ↗ |
What it does
Discover, evaluate, and install OpenCode plugins from the community catalog and wire them into opencode.json.
Files
OpenCode Plugin Installer
Help users discover, evaluate, and install OpenCode plugins from the community catalog.
<workflow>
1. List Available Plugins
Run the catalog script to see what's available:
python3 ~/.config/opencode/skill/plugin-installer/scripts/list_plugins.pyOutput shows name: description with path to detailed file.
2. Read Plugin Details
For relevant matches, read the full plugin file:
references/plugins/<filename>.mdEach file contains:
- Installation config (copy-paste JSON)
- Setup steps
- Features and caveats
- Links to docs
3. Recommend and Install
Show the user:
- What the plugin does
- Install snippet for
opencode.json - Any setup steps (OAuth, config files, etc.)
</workflow>
<question_tool>
Batching: Use the question tool for 2+ related questions. Single questions → plain text.
Syntax: header ≤12 chars, label 1-5 words, add "(Recommended)" to default.
When to ask: Multiple plugins match the need, or plugin has complex setup.
</question_tool>
<installation>
Installation Format
Add to plugin array in opencode.json:
{
"plugin": [
"package-name@version"
]
}Config locations:
- Global:
~/.config/opencode/opencode.json - Project:
.opencode/opencode.json
Version Pinning
// Pin version (RECOMMENDED)
"plugin": ["package@1.2.3"]
// Auto-update on restart
"plugin": ["package@latest"]
// Locked to first install (never updates)
"plugin": ["package"]Force update when stuck:
rm -rf ~/.cache/opencode/node_modules ~/.cache/opencode/bun.lock</installation>
<documenting_new_plugins>
Adding New Plugins to the Catalog
When you discover a new OpenCode plugin (from web search, GitHub, npm, user mention), you MUST document it for future reference.
Step 1: Gather Plugin Information
Before creating the doc, collect:
| Info | Where to Find |
|---|---|
| Package name | npm registry, GitHub repo name |
| Description | README, package.json description |
| Install syntax | Check if scoped (@org/pkg) or plain (pkg) |
| Version strategy | Does it recommend @latest or pinned? |
| Setup steps | OAuth flows, config files, env vars |
| Provider/model requirements | Does it only work with specific providers? |
| Known issues | GitHub issues, compatibility notes |
Step 2: Create the Plugin File
Location: ~/.config/opencode/skill/plugin-installer/references/plugins/<name>.md
Naming convention: Use the npm package name with / replaced by - for scoped packages:
opencode-foo→opencode-foo.md@org/opencode-bar→org-opencode-bar.md
Step 3: Use This Template
---
name: package-name-or-@scope/package-name
description: One-line description for catalog listing (max ~80 chars)
---
# Plugin Display Name
Brief description of what this plugin does and why someone would use it.
## Installation
\`\`\`jsonc
{
"plugin": ["package-name@latest"]
}
\`\`\`
## Setup
### Prerequisites
- List any requirements (accounts, API keys, other tools)
### Configuration
Step-by-step setup instructions.
## Features
- Key feature 1
- Key feature 2
## Caveats
- Known limitations
- Compatibility notes
## Links
- [GitHub](https://github.com/...)
- [npm](https://www.npmjs.com/package/...)Step 4: Verify the Catalog
After creating, run the listing script to confirm it appears:
python3 ~/.config/opencode/skill/plugin-installer/scripts/list_plugins.py</documenting_new_plugins>
<frontmatter_requirements>
| Field | Required | Purpose |
|---|---|---|
name | Yes | Package name exactly as used in "plugin": [] |
description | Yes | One-liner shown in catalog listings |
Important: The name MUST match the npm package name exactly (including scope if any). This is what users will copy into their opencode.json.
</frontmatter_requirements>
<example>
Documenting a New Plugin
Say you found @cooldev/opencode-metrics on npm. Create:
File: ~/.config/opencode/skill/plugin-installer/references/plugins/cooldev-opencode-metrics.md
---
name: @cooldev/opencode-metrics
description: Track AI usage metrics and export to dashboards
---
# OpenCode Metrics
Export your OpenCode usage data to external dashboards...
## Installation
\`\`\`jsonc
{
"plugin": ["@cooldev/opencode-metrics@latest"]
}
\`\`\`
...</example>
LLM-API-Key-Proxy
Type: External Tool (not npm plugin) Author: Mirrowel Status: Use dev/beta release for latest features
Purpose
Universal LLM Gateway - one OpenAI-compatible API endpoint for all providers. Self-hosted proxy with automatic key rotation, failover, and exclusive provider support.
Features
- Single
/v1/chat/completionsendpoint for all providers - Automatic key rotation and load balancing
- Rate limit handling with intelligent cooldowns
- Escalating cooldowns per model (10s → 30s → 60s → 120s)
- OAuth support: Gemini CLI, Antigravity, Qwen Code, iFlow
- Interactive TUI for configuration
- Detailed request logging
Exclusive Providers
Providers not available elsewhere:
| Provider | Models | Notes |
|---|---|---|
| Antigravity | Gemini 3 Pro, Claude Opus 4.5, Claude Sonnet 4.5 | thinkingLevel support |
| Gemini CLI | All Gemini models | Higher rate limits via internal API |
| Qwen Code | Qwen coder models | <think> tag parsing |
| iFlow | Various | Hybrid auth |
Installation
1. Download from GitHub Releases
- Use dev/beta release for Antigravity and latest features
2. Extract and run:
- Windows:
proxy_app.exe - macOS/Linux:
chmod +x proxy_app && ./proxy_app
3. Configure credentials via TUI
From Source
git clone https://github.com/Mirrowel/LLM-API-Key-Proxy.git
cd LLM-API-Key-Proxy
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python src/proxy_app/main.pyOpenCode Configuration
{
"provider": {
"local": {
"npm": "@ai-sdk/openai-compatible",
"name": "LLM Proxy",
"options": {
"baseURL": "http://127.0.0.1:8000/v1",
"apiKey": "your-PROXY_API_KEY-from-env"
},
"models": {
"gemini-2.5-flash": {
"id": "gemini/gemini-2.5-flash",
"name": "Gemini 2.5 Flash"
},
"antigravity-gemini-3": {
"id": "antigravity/gemini-3-pro-preview",
"name": "Gemini 3 Pro (Antigravity)",
"reasoning": true
},
"antigravity-claude-opus": {
"id": "antigravity/claude-opus-4-5",
"name": "Claude Opus 4.5 (Antigravity)",
"reasoning": true
},
"gemini-cli-pro": {
"id": "gemini_cli/gemini-2.5-pro",
"name": "Gemini 2.5 Pro (CLI)"
}
}
}
}
}Model Format
Important: Models must be provider/model_name:
gemini/gemini-2.5-flash # Gemini API
openai/gpt-4o # OpenAI API
anthropic/claude-3-5-sonnet # Anthropic API
openrouter/anthropic/claude-3-opus # OpenRouter
gemini_cli/gemini-2.5-pro # Gemini CLI (OAuth)
antigravity/gemini-3-pro-preview # Antigravity
antigravity/claude-opus-4-5 # Claude Opus 4.5
antigravity/claude-sonnet-4-5 # Claude Sonnet 4.5Credential Setup
API Keys
Create .env file:
PROXY_API_KEY="your-secret-proxy-key"
GEMINI_API_KEY_1="key1"
GEMINI_API_KEY_2="key2"
OPENAI_API_KEY_1="sk-..."
ANTHROPIC_API_KEY_1="sk-ant-..."OAuth (Antigravity, Gemini CLI)
python -m rotator_library.credential_tool
# Select "Add OAuth Credential" → provider
# Complete browser authenticationAPI Endpoints
| Endpoint | Description |
|---|---|
GET / | Status check |
POST /v1/chat/completions | Chat completions (main) |
POST /v1/embeddings | Text embeddings |
GET /v1/models | List available models |
GET /v1/providers | List configured providers |
Advanced Config
# Concurrency per provider
MAX_CONCURRENT_REQUESTS_PER_KEY_OPENAI=3
# Rotation mode
ROTATION_MODE_GEMINI=sequential # or balanced
# Model filtering
IGNORE_MODELS_OPENAI="*-preview*"
WHITELIST_MODELS_GEMINI="gemini-2.5-pro,gemini-2.5-flash"Caveats
- Requires running separate proxy process
- Use dev/beta release for Antigravity and Gemini 3 support
- OAuth credentials need browser authentication
- Gemini 3 models require paid-tier Google Cloud project
Links
@tarquinen/opencode-dcp
Package: @tarquinen/opencode-dcp Author: Dan Tarquinen Latest Version: 1.0.4
Purpose
Dynamic Context Pruning - automatically reduces token usage by removing obsolete tool outputs from conversation history.
Features
- Deduplication: Identifies repeated tool calls, keeps only most recent output (zero LLM cost)
- Supersede Writes: Prunes write tool inputs for files that were later read (zero LLM cost)
- Prune Tool: AI can manually trigger pruning when needed
- On Idle Analysis: LLM analyzes context during idle periods to find irrelevant outputs
Session history is never modified - pruned outputs replaced with placeholder before sending to LLM.
Installation
{
"plugin": ["@tarquinen/opencode-dcp@latest"]
}Configuration
Config file locations:
- Global:
~/.config/opencode/dcp.jsonc(auto-created on first run) - Custom:
$OPENCODE_CONFIG_DIR/dcp.jsonc - Project:
.opencode/dcp.jsonc
Precedence: Defaults → Global → Config Dir → Project
Example Config
{
"deduplication": {
"enabled": true,
"protectedTools": []
},
"supersedeWrites": {
"enabled": true
},
"pruneTool": {
"enabled": true
},
"onIdleAnalysis": {
"enabled": false,
"idleThresholdMs": 30000
}
}Protected Tools
These tools are always protected from pruning:
tasktodowritetodoreadprunebatch
Add more via protectedTools arrays in each strategy.
Trade-offs
Prompt Caching Impact: Pruning changes message content, which invalidates cached prefixes. You lose some cache read benefits but gain larger token savings from reduced context size.
In most cases, token savings outweigh cache miss cost - especially in long sessions.
Caveats
- Restart OpenCode after config changes
- Does not modify actual session history
- On Idle Analysis uses LLM calls (has cost)
Links
opencode-gemini-auth
Package: opencode-gemini-auth Author: jenslys Latest Version: Check npm
Purpose
Authenticate with your Google account to use Gemini models via OAuth. Use your existing Gemini plan and quotas (including free tier) without separate API billing.
Features
- OAuth with Google account
- Use existing Gemini quotas (free tier included)
- Thinking config support:
thinkingLevel(low/high) for Gemini 3thinkingBudget(token count) for Gemini 2.5- Zero-config Google Cloud project discovery
- Auto-provisions suitable GCP project
Installation
{
"plugin": ["opencode-gemini-auth@latest"]
}Setup
1. Add plugin to config 2. Restart OpenCode 3. Run opencode auth login 4. Select "Google" → "OAuth with Google (Gemini CLI)" 5. Complete browser authentication
Configuration
Specify Project ID
{
"provider": {
"google": {
"options": {
"projectId": "your-specific-project-id"
}
}
}
}Gemini 3 Thinking (thinkingLevel)
{
"provider": {
"google": {
"models": {
"gemini-3-pro-preview": {
"options": {
"thinkingConfig": {
"thinkingLevel": "high",
"includeThoughts": true
}
}
}
}
}
}
}Gemini 2.5 Thinking (thinkingBudget)
{
"provider": {
"google": {
"models": {
"gemini-2.5-flash": {
"options": {
"thinkingConfig": {
"thinkingBudget": 8192,
"includeThoughts": true
}
}
}
}
}
}
}Troubleshooting
Manual Google Cloud Setup
If auto-provisioning fails: 1. Go to Google Cloud Console 2. Create or select a project 3. Enable Gemini for Google Cloud API (cloudaicompanion.googleapis.com) 4. Set projectId in config
Debug Mode
OPENCODE_GEMINI_DEBUG=1 opencodeGenerates gemini-debug-<timestamp>.log files.
Updating
rm -rf ~/.cache/opencode/node_modules/opencode-gemini-auth
opencodeLinks
@franlol/opencode-md-table-formatter
Package: @franlol/opencode-md-table-formatter Author: franlol Latest Version: 0.0.3
Purpose
Automatically formats markdown tables in AI responses. Correctly calculates column widths when markdown concealment mode is enabled.
Features
- Automatic table formatting after AI text completion
- Concealment mode compatible (correct widths when markdown symbols hidden)
- Alignment support: left (
:---), center (:---:), right (---:) - Nested markdown handling with multi-pass algorithm
- Code block preservation (`
bold` shows literal) - Handles emojis, unicode, empty cells, long content
- Silent operation - no console logs, errors don't interrupt
- Validation feedback for invalid tables
Installation
{
"plugin": ["@franlol/opencode-md-table-formatter@latest"]
}Example
Input (unformatted):
| Feature | Description | Status |
|---|---|
| **Bold text** | Has *italic* content | ✅ Done |
| `Code` | With `**bold**` inside | ⏳ Progress |Output (formatted):
| Feature | Description | Status |
| ------------- | ---------------------- | ----------- |
| **Bold text** | Has *italic* content | ✅ Done |
| `Code` | With `**bold**` inside | ⏳ Progress |How It Works
Uses OpenCode's experimental.text.complete hook to format tables after AI finishes generating text. Strips markdown symbols for width calculation while preserving symbols inside inline code blocks.
Troubleshooting
Tables not formatting?
- Ensure plugin is in config
- Restart OpenCode
- Tables must have separator row (
|---|---|)
Invalid table structure comment?
- All rows must have same number of columns
- Tables need at least 2 rows including separator
Caveats
- Only works with concealment mode enabled (OpenCode default)
- Requires Node.js >= 18.0.0 or Bun runtime
Links
opencode-openai-codex-auth
Package: opencode-openai-codex-auth Author: numman-ali Latest Version: 4.2.0
Purpose
Use your ChatGPT Plus/Pro subscription instead of OpenAI API credits. OAuth authentication via ChatGPT using the same method as the official Codex CLI.
Features
- OAuth authentication via ChatGPT Plus/Pro
- 22 pre-configured model variants (GPT 5.2, GPT 5.1 Codex, Codex Max, Codex Mini)
- Reasoning levels: none/low/medium/high/xhigh
- Prompt caching support
- Full image input support for all models
- Auto-refreshing tokens
- CODEX_MODE bridge prompt with Task tool & MCP awareness
Installation
{
"plugin": ["opencode-openai-codex-auth@4.2.0"]
}Full Configuration (Recommended)
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-openai-codex-auth@4.2.0"],
"provider": {
"openai": {
"options": {
"reasoningEffort": "medium",
"reasoningSummary": "auto",
"textVerbosity": "medium",
"include": ["reasoning.encrypted_content"],
"store": false
},
"models": {
"gpt-5.2-high": {
"name": "GPT 5.2 High (OAuth)",
"limit": { "context": 272000, "output": 128000 },
"options": {
"reasoningEffort": "high",
"reasoningSummary": "detailed"
}
}
}
}
}
}Setup
1. Add plugin to config 2. Restart OpenCode 3. Run opencode auth login 4. Select "OpenAI" → "ChatGPT Plus/Pro (Codex Subscription)" 5. Complete browser OAuth flow
Available Models
| Model ID | Reasoning | Best For |
|---|---|---|
gpt-5.2-none | None | Fastest responses |
gpt-5.2-low | Low | Fast responses |
gpt-5.2-medium | Medium | Balanced tasks |
gpt-5.2-high | High | Complex reasoning |
gpt-5.2-xhigh | xHigh | Deep analysis |
gpt-5.2-codex-* | Low-xHigh | Coding tasks |
gpt-5.1-codex-max-* | Low-xHigh | Large refactors |
gpt-5.1-codex-* | Low-High | General code |
gpt-5.1-codex-mini-* | Medium-High | Lightweight |
Caveats
- Personal use only - not for commercial/multi-user applications
- Must use full config from
config/full-opencode.jsonin the repo - GPT 5 models can be temperamental - stick to presets
- Stop Codex CLI if running (both use port 1455)
Updating
Change version number in config and restart. If stuck on old version:
rm -rf ~/.cache/opencode/node_modules ~/.cache/opencode/bun.lockTroubleshooting
- 401 Unauthorized: Run
opencode auth loginagain - Model not found: Add
openai/prefix (e.g.,--model=openai/gpt-5.2-codex-high)
Links
@ramtinj95/opencode-tokenscope
Package: @ramtinj95/opencode-tokenscope Author: ramtinJ95 Latest Version: Check npm
Purpose
Comprehensive token usage analysis and cost tracking for OpenCode sessions. Track and optimize token usage across system prompts, user messages, tool outputs, and more.
Features
- Token breakdown by category (system, user, tools, assistant)
- Tool usage breakdown with call counts and percentages
- Top token contributors identification
- Cache efficiency analysis (hit rate, cost savings)
- Cost estimation with model-specific pricing
- Subagent (Task tool) cost tracking across child sessions
- Context breakdown (system prompt, tool definitions, project tree)
- Visual ASCII charts
Installation
{
"plugin": ["@ramtinj95/opencode-tokenscope@latest"]
}Usage
Adds a tokenscope tool that can be called by the AI or requested by user.
Example output:
═══════════════════════════════════════════════════════════════
Token Analysis: Session ses_abc123
Model: claude-opus-4-5
═══════════════════════════════════════════════════════════════
TOKEN BREAKDOWN BY CATEGORY
───────────────────────────────────────────────────────────────
Input Categories:
SYSTEM ██████████████░░░░░░░░░░░░░░░░ 45.8% (22,367)
USER ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0.8% (375)
TOOLS ████████████████░░░░░░░░░░░░░░ 53.5% (26,146)
CACHE EFFICIENCY
───────────────────────────────────────────────────────────────
Cache Hit Rate: 86.2%
Cost Savings: $1.44 (77.6% reduction)
SUBAGENT COSTS (4 child sessions, 23 API calls)
───────────────────────────────────────────────────────────────
Subagent Total: $1.39 (566,474 tokens)
TOTAL: $1.96 (942,160 tokens, 38 calls)Configuration
Optional config to hide sections:
{
"showBreakdown": true,
"showToolUsage": true,
"showCacheEfficiency": true,
"showSubagents": true,
"showCost": true
}Updating
opencode --updateThe --update flag skips dependency installation for faster updates.
Caveats
- Token counts are estimated using tokenizer analysis
- Cost estimates use standard API pricing from models.json
- Free/open models marked with zero pricing
Links
@openhax/codex
Package: @openhax/codex Author: openhax Latest Version: 0.4.4
Purpose
Alternative OpenAI Codex OAuth plugin for OpenCode. Use ChatGPT Plus/Pro subscription for Codex models.
Installation
{
"plugin": ["@openhax/codex@latest"]
}Setup
1. Add plugin to config 2. Restart OpenCode 3. Run opencode auth login 4. Select OpenAI OAuth option 5. Complete browser authentication
Comparison
This is an alternative to opencode-openai-codex-auth. Choose based on:
- Active maintenance
- Feature set you need
- Model support
Check both READMEs for current feature comparison.
Links
@howaboua/pickle-thinker
Package: @howaboua/pickle-thinker Author: howaboua Latest Version: 0.4.0
Purpose
Reliably injects the magic keyword Ultrathink so GLM-4.6 / Big Pickle models consistently enter "thinking mode".
Features
- Forces
Ultrathinkas first token in every user message - Injects synthetic "continue + ultrathink" after tool results
- Appends
Ultrathinkblock to tool outputs as safety net - Re-injects on session compaction (when conversations are summarized)
- Two modes:
lite(prefix only) ortool(redundant injection - recommended)
Installation
{
"plugin": ["@howaboua/pickle-thinker@0.4.0"]
}Configuration
Config file locations:
- Global:
~/.config/opencode/pickle-thinker.jsonc(auto-created) - Project:
.opencode/pickle-thinker.jsonc
Example Config
{
"mode": "tool", // "lite" or "tool" (default: tool)
"prefix": "Ultrathink" // Can customize but Ultrathink required for GLM-4.6
}How It Works
Only activates for target models (GLM-4.6 + Big Pickle):
1. User messages: Forced to start with Ultrathink as dedicated leading text part 2. After tool results: Synthetic user "continue + ultrathink" message injected 3. Tool outputs/errors: Appended with Ultrathink block as extra safety 4. Session compaction: Re-injects instructions to maintain thinking mode
Duplication is intentional - missing Ultrathink is the bug.
Caveats
- Only activates for GLM-4.6 and Big Pickle models
toolmode increases turns/tokens (may affect subscription usage)Ultrathinkkeyword required - custom prefix still ensures it's first
Acknowledgments
Based on the Dynamic Context Pruning plugin architecture by Dan Tarquinen.
Links
#!/usr/bin/env python3
"""
List available plugins from the catalog.
Reads frontmatter from all plugin .md files and outputs a quick reference.
Agent uses this to find relevant plugins, then reads the full file for details.
Usage:
python scripts/list_plugins.py
"""
import re
from pathlib import Path
FRONTMATTER_PATTERN = re.compile(r"^---\s*\n(.*?)\n---\s*\n", re.DOTALL)
def parse_frontmatter(content: str) -> dict:
match = FRONTMATTER_PATTERN.match(content)
if not match:
return {}
frontmatter = {}
for line in match.group(1).strip().split("\n"):
if ":" in line:
key, value = line.split(":", 1)
frontmatter[key.strip()] = value.strip().strip("\"'")
return frontmatter
def main():
script_dir = Path(__file__).parent
plugins_dir = script_dir.parent / "references" / "plugins"
if not plugins_dir.exists():
print("No plugins directory found")
return
plugins = []
for plugin_file in sorted(plugins_dir.glob("*.md")):
content = plugin_file.read_text()
fm = parse_frontmatter(content)
if fm.get("name"):
plugins.append((fm["name"], fm.get("description", ""), plugin_file.name))
# Output simple list
for name, desc, filename in sorted(plugins, key=lambda x: x[0].lower().lstrip("@")):
print(f"{name}: {desc}")
print(f" -> plugins/{filename}")
print()
if __name__ == "__main__":
main()