---
title: Jad Madi's OpenCode Plugins — by Jad Madi (@jadmadi)
description: >-
  Every OpenCode V2 plugin and workflow, with what it is, what it solves, and
  how to install it. Mid-session model switching, context budgeting, durable
  project memory, best-of-N judges, and spec-to-ship workflows.
href: /project/opencode-plugins/
author: Jad Madi
version: 2026.9.0
pluginsCount: 12
---
# Jad Madi's OpenCode Plugins

Every OpenCode V2 plugin and workflow, with what it is, what it solves, and how to install it. Mid-session model switching, context budgeting, durable project memory, best-of-N judges, and spec-to-ship workflows.

- **Website**: https://jadmadi.net/project/opencode-plugins/
- **Plugin Ecosystem Map**: https://github.com/jadmadi/opencode-plugins
- **Version**: 2026.9.0 (CalVer YYYY.MM.MICRO (year.month.release counter; micro starts at 0), for example 2026.9.0.)
- **License**: MIT
- **Author**: [@JadMadi](https://x.com/jadmadi)

## Quick Install

Install any plugin directly in OpenCode V2:

```bash
opencode plugin add github:jadmadi/<plugin-repo-name>
```

*Note: installCommand is the Git distribution path. This machine already has these plugins installed by copy or symlink, so do not run both or the plugin loads twice.*

## Available Plugins (12)

| Plugin | Category | Commands | Agent Tools | Install Command | Links |
| :--- | :--- | :--- | :--- | :--- | :--- |
| **Model Switcher** | Models | `/model` `/free` `/cheap` `/think` `/vision` `/long` `/newest` `/muse` `/glm` `/nvid` | — | `opencode plugin add github:jadmadi/opencode-model-switcher` | [Page](https://jadmadi.net/project/opencode-plugins/model-switcher/) · [Raw MD](https://jadmadi.net/project/opencode-plugins/model-switcher.md) · [GitHub](https://github.com/jadmadi/opencode-model-switcher) |
| **Context Limit** | Models | `/context-limit` | — | `opencode plugin add github:jadmadi/opencode-context-limit` | [Page](https://jadmadi.net/project/opencode-plugins/context-limit/) · [Raw MD](https://jadmadi.net/project/opencode-plugins/context-limit.md) · [GitHub](https://github.com/jadmadi/opencode-context-limit) |
| **Max Mode** | Models | `/max` | `best_of_n` | `opencode plugin add github:jadmadi/opencode-max-mode` | [Page](https://jadmadi.net/project/opencode-plugins/max-mode/) · [Raw MD](https://jadmadi.net/project/opencode-plugins/max-mode.md) · [GitHub](https://github.com/jadmadi/opencode-max-mode) |
| **Memory** | Sessions and memory | `/remember` `/memory` `/checkpoint` | `memory_read` `memory_append` `memory_search` | `opencode plugin add github:jadmadi/opencode-memory` | [Page](https://jadmadi.net/project/opencode-plugins/memory/) · [Raw MD](https://jadmadi.net/project/opencode-plugins/memory.md) · [GitHub](https://github.com/jadmadi/opencode-memory) |
| **Sila Prime** | Sessions and memory | `/sila` | — | `opencode plugin add github:jadmadi/opencode-sila-prime` | [Page](https://jadmadi.net/project/opencode-plugins/sila-prime/) · [Raw MD](https://jadmadi.net/project/opencode-plugins/sila-prime.md) · [GitHub](https://github.com/jadmadi/opencode-sila-prime) |
| **Task Tool** | Sessions and memory | — | `task` | `opencode plugin add github:jadmadi/opencode-task-tool` | [Page](https://jadmadi.net/project/opencode-plugins/task-tool/) · [Raw MD](https://jadmadi.net/project/opencode-plugins/task-tool.md) · [GitHub](https://github.com/jadmadi/opencode-task-tool) |
| **Goal** | Autonomy and workflow | `/goal` | — | `opencode plugin add github:jadmadi/opencode-goal` | [Page](https://jadmadi.net/project/opencode-plugins/goal/) · [Raw MD](https://jadmadi.net/project/opencode-plugins/goal.md) · [GitHub](https://github.com/jadmadi/opencode-goal) |
| **Workflows** | Autonomy and workflow | `/workflow` | — | `opencode plugin add github:jadmadi/opencode-workflows` | [Page](https://jadmadi.net/project/opencode-plugins/workflows/) · [Raw MD](https://jadmadi.net/project/opencode-plugins/workflows.md) · [GitHub](https://github.com/jadmadi/opencode-workflows) |
| **Loop** | Autonomy and workflow | `/loop` | — | `opencode plugin add github:jadmadi/opencode-loop` | [Page](https://jadmadi.net/project/opencode-plugins/loop/) · [Raw MD](https://jadmadi.net/project/opencode-plugins/loop.md) · [GitHub](https://github.com/jadmadi/opencode-loop) |
| **Compose Next** | Autonomy and workflow | `/compose-next` | — | `opencode plugin add github:jadmadi/opencode-compose-next` | [Page](https://jadmadi.net/project/opencode-plugins/compose-next/) · [Raw MD](https://jadmadi.net/project/opencode-plugins/compose-next.md) · [GitHub](https://github.com/jadmadi/opencode-compose-next) |
| **Skip Permissions** | Safety | `/skip-permissions` | — | `opencode plugin add github:jadmadi/opencode-skip-permissions` | [Page](https://jadmadi.net/project/opencode-plugins/skip-permissions/) · [Raw MD](https://jadmadi.net/project/opencode-plugins/skip-permissions.md) · [GitHub](https://github.com/jadmadi/opencode-skip-permissions) |
| **Distill** | Safety | `/distill` | — | `opencode plugin add github:jadmadi/opencode-distill` | [Page](https://jadmadi.net/project/opencode-plugins/distill/) · [Raw MD](https://jadmadi.net/project/opencode-plugins/distill.md) · [GitHub](https://github.com/jadmadi/opencode-distill) |

## Plugin Details

### [Model Switcher](https://jadmadi.net/project/opencode-plugins/model-switcher/)

- **Category**: Models
- **Version**: v2026.9.0
- **Tested Runtime**: OpenCode v2.0.16
- **Repository**: https://github.com/jadmadi/opencode-model-switcher
- **Install**: `opencode plugin add github:jadmadi/opencode-model-switcher`

**The Problem:**
Mid-session model choice is manual: you need the exact provider and model id, and there is no quick view of what fits an intent such as free, cheap, fast, or vision.

**What It Does:**
Slash commands that switch provider and model mid-session, resolved against the live model catalog.

**Slash Commands:**
- `/model`: Show the current model and switch by reference or group.
- `/free`: Cycle models that cost nothing.
- `/cheap`: Cycle paid models, cheapest first.
- `/think`: Cycle reasoning models.
- `/vision`: Cycle models that accept images.
- `/long`: Cycle models with a 400k+ context window.
- `/newest`: Cycle the newest models.
- `/muse`: Cycle Muse models.
- `/glm`: Cycle GLM models.
- `/nvid`: Cycle NVIDIA models.

**Limits & Notes:**
The command set and pins come from ~/.config/opencode/model-switcher.json. No model ids are hard-coded.

---

### [Context Limit](https://jadmadi.net/project/opencode-plugins/context-limit/)

- **Category**: Models
- **Version**: v2026.9.0
- **Tested Runtime**: OpenCode v2.0.16
- **Repository**: https://github.com/jadmadi/opencode-context-limit
- **Install**: `opencode plugin add github:jadmadi/opencode-context-limit`

**The Problem:**
A model's advertised window is larger than its useful working window, and one global compaction threshold is either too late for small models or too eager for large ones.

**What It Does:**
Sets a per-model working context budget by lowering the model window, so compaction fires before quality drops.

**Slash Commands:**
- `/context-limit`: Show or set a working context budget for a model or pattern.

**Limits & Notes:**
It can only lower a model window, never raise it.

---

### [Max Mode](https://jadmadi.net/project/opencode-plugins/max-mode/)

- **Category**: Models
- **Version**: v2026.9.0
- **Tested Runtime**: OpenCode v2.0.16
- **Repository**: https://github.com/jadmadi/opencode-max-mode
- **Install**: `opencode plugin add github:jadmadi/opencode-max-mode`

**The Problem:**
Hard prompts benefit from several attempts, but generating them one at a time and comparing them by hand is slow and hides the reasoning.

**What It Does:**
Runs 2 to 8 candidate answers in parallel for a hard question and returns the one a judge picks.

**Slash Commands:**
- `/max`: Set the default best-of-N candidate count for the session.

**Agent Tools Registered:**
- `best_of_n`

**Limits & Notes:**
Cost multiplies with the candidate count. It calls ctx.generate.text, so set MAX_MODE_MODEL on providers that reject transient generation.

---

### [Memory](https://jadmadi.net/project/opencode-plugins/memory/)

- **Category**: Sessions and memory
- **Version**: v2026.9.0
- **Tested Runtime**: OpenCode v2.0.16
- **Repository**: https://github.com/jadmadi/opencode-memory
- **Install**: `opencode plugin add github:jadmadi/opencode-memory`

**The Problem:**
Sessions and compaction lose context; decisions, file state, and next steps need a durable project store that survives both.

**What It Does:**
Keeps per-project memory, checkpoints, and notes, injects a budgeted slice at session start, and exposes read, append, and search tools.

**Slash Commands:**
- `/remember`: Append a line to MEMORY.md.
- `/memory`: Show the three memory files.
- `/checkpoint`: Write a memory checkpoint now.

**Agent Tools Registered:**
- `memory_read`
- `memory_append`
- `memory_search`

**Limits & Notes:**
Files live under the OpenCode data dir per project. MEMORY_ROOT and MEMORY_BUDGET override location and size. A checkpoint is written on compaction.

---

### [Sila Prime](https://jadmadi.net/project/opencode-plugins/sila-prime/)

- **Category**: Sessions and memory
- **Version**: v2026.9.0
- **Tested Runtime**: OpenCode v2.0.16
- **Repository**: https://github.com/jadmadi/opencode-sila-prime
- **Install**: `opencode plugin add github:jadmadi/opencode-sila-prime`

**The Problem:**
Each session starts without the sila knowledge store unless you remember to run the CLI first.

**What It Does:**
Runs sila prime on the first prompt and injects the cross-tool briefing, plus a /sila command for any sila subcommand.

**Slash Commands:**
- `/sila`: Run a sila subcommand and post the output (default: prime).

**Limits & Notes:**
Calls the sila CLI. SILA_BIN points at the binary, SILA_PRIME=off disables the briefing, and SILA_PRIME_BUDGET caps it. The session is marked after one attempt, so /sila refreshes on demand.

---

### [Task Tool](https://jadmadi.net/project/opencode-plugins/task-tool/)

- **Category**: Sessions and memory
- **Version**: v2026.9.0
- **Tested Runtime**: OpenCode v2.0.16
- **Repository**: https://github.com/jadmadi/opencode-task-tool
- **Install**: `opencode plugin add github:jadmadi/opencode-task-tool`

**The Problem:**
Multi-step work loses its structure in long sessions, and ad hoc lists renumber or disappear when the context compacts.

**What It Does:**
A tree task tool with stable T1, T1.1 ids that survive long turns and compaction.

**Agent Tools Registered:**
- `task`

**Limits & Notes:**
State is per session and ids never renumber.

---

### [Goal](https://jadmadi.net/project/opencode-plugins/goal/)

- **Category**: Autonomy and workflow
- **Version**: v2026.9.0
- **Tested Runtime**: OpenCode v2.0.16
- **Repository**: https://github.com/jadmadi/opencode-goal
- **Install**: `opencode plugin add github:jadmadi/opencode-goal`

**The Problem:**
An agent decides it is done on its own, so a stopping condition needs an independent check to avoid ending early or running away.

**What It Does:**
Sets a judged stopping condition per session: at turn end a separate judge decides whether the goal is met, and the plugin continues with a nudge or gives up at a cap.

**Slash Commands:**
- `/goal`: Set, show, or clear the judged stopping condition for this session.

**Limits & Notes:**
It calls ctx.generate.text, so set GOAL_MODEL on providers that reject transient generation. Continuations are capped by GOAL_MAX (default 5).

---

### [Workflows](https://jadmadi.net/project/opencode-plugins/workflows/)

- **Category**: Autonomy and workflow
- **Version**: v2026.9.0
- **Tested Runtime**: OpenCode v2.0.16
- **Repository**: https://github.com/jadmadi/opencode-workflows
- **Install**: `opencode plugin add github:jadmadi/opencode-workflows`

**The Problem:**
Multi-phase work such as research is repeated ad hoc, with no fixed order, no artifacts, and no way to resume a run.

**What It Does:**
Runs deterministic multi-agent workflows with resumable artifacts. Ships deep-research from brief to review.

**Slash Commands:**
- `/workflow`: Run a workflow by name, or list the available workflows.

**Limits & Notes:**
Uses child sessions and inherits the invoking session's model, so it needs no override. Runs are resumable from artifacts under the data dir.

---

### [Loop](https://jadmadi.net/project/opencode-plugins/loop/)

- **Category**: Autonomy and workflow
- **Version**: v2026.9.0
- **Tested Runtime**: OpenCode v2.0.16
- **Repository**: https://github.com/jadmadi/opencode-loop
- **Install**: `opencode plugin add github:jadmadi/opencode-loop`

**The Problem:**
Recurring checks need a timer, but naive timers fire while the last run is still going and pile work up.

**What It Does:**
Runs a prompt on a fixed cadence, skipping a tick while the previous run is still active.

**Slash Commands:**
- `/loop`: Register, list, or stop a recurring prompt on a fixed cadence.

**Limits & Notes:**
One loop per session, because the turn-end event names the session, not the run.

---

### [Compose Next](https://jadmadi.net/project/opencode-plugins/compose-next/)

- **Category**: Autonomy and workflow
- **Version**: v2026.9.0
- **Tested Runtime**: OpenCode v2.0.16
- **Repository**: https://github.com/jadmadi/opencode-compose-next
- **Install**: `opencode plugin add github:jadmadi/opencode-compose-next`

**The Problem:**
Work that jumps straight to code skips design and review; the path from idea to a merged change needs a repeatable order and an independent reviewer.

**What It Does:**
A spec-to-ship workflow as a skill: grill, spec, workspace, implement, verify, review, finalize, finish, with a read-only reviewer.

**Slash Commands:**
- `/compose-next`: Start the spec-to-ship workflow and attach the compose-next skill.

**Limits & Notes:**
Needs the compose-next skill installed under ~/.config/opencode/skills/compose-next/SKILL.md.

---

### [Skip Permissions](https://jadmadi.net/project/opencode-plugins/skip-permissions/)

- **Category**: Safety
- **Version**: v2026.9.0
- **Tested Runtime**: OpenCode v2.0.16
- **Repository**: https://github.com/jadmadi/opencode-skip-permissions
- **Install**: `opencode plugin add github:jadmadi/opencode-skip-permissions`

**The Problem:**
Approval prompts interrupt trusted work in a session you already control, adding friction without adding safety.

**What It Does:**
Upgrades permission ask decisions to allow for one session through a permission hook.

**Slash Commands:**
- `/skip-permissions`: Toggle auto-approval of ask decisions for this session, or show the state.

**Limits & Notes:**
It only upgrades an ask to an allow. A configured deny is final and never reaches the hook.

---

### [Distill](https://jadmadi.net/project/opencode-plugins/distill/)

- **Category**: Safety
- **Version**: v2026.9.0
- **Tested Runtime**: OpenCode v2.0.16
- **Repository**: https://github.com/jadmadi/opencode-distill
- **Install**: `opencode plugin add github:jadmadi/opencode-distill`

**The Problem:**
The same procedure gets repeated by hand instead of becoming a reusable artifact, and nothing should be written until you apply it.

**What It Does:**
Finds repeated multi-step workflows in session history and proposes a skill, command, or subagent for them.

**Slash Commands:**
- `/distill`: Propose reusable artifacts from session history, list proposals, or apply one.

**Limits & Notes:**
Writes only on an explicit /distill apply and never overwrites an existing artifact. It calls ctx.generate.text, so set DISTILL_MODEL on providers that reject transient generation.

---

## Frequently Asked Questions (FAQ)

### Q: What are OpenCode plugins and how do they extend OpenCode V2?
OpenCode plugins are modular TypeScript extensions running directly
within the OpenCode V2 agent runtime. They hook into agent lifecycle
events, register custom slash commands, provide autonomous agent tools,
and enforce safety rules or cost tracking without modifying core.

### Q: How do I install an OpenCode plugin from GitHub?
Install any plugin using OpenCode's built-in command:
`opencode plugin add github:jadmadi/<plugin-repo>`.
The runtime downloads the plugin into `~/.config/opencode/plugins/`
and automatically loads it into your next session.

### Q: Do these OpenCode plugins collect telemetry or send code externally?
No. All plugins adhere to a 0% telemetry, local-first architecture.
External calls are restricted to AI model endpoints explicitly
configured by the user.

## Links & Resources

- Interactive Showcase: https://jadmadi.net/project/opencode-plugins/
- Ecosystem Hub Repository: https://github.com/jadmadi/opencode-plugins
- Author Profile: https://jadmadi.net/about/
- X: https://x.com/jadmadi
