AI-native implementation planning for agentic workflows.
Stop losing context mid-feature or with cross-session work. OpenCode Plan Manager gives your AI agents a structured way to plan, track, and execute complex work — from a single idea to a fully shipped feature.
Agentic coding workflows break down when context gets too large. Agents start hallucinating, lose track of tasks, and repeat work. Plan Manager solves this with four principles:
- Selective context loading — agents read only what they need:
summary(stats),spec(requirements), orplan(task list). - Zero-hallucination schemas — strict Zod validation prevents malformed plans and invalid state transitions.
- Filesystem Kanban — plan state lives in
pending/,in_progress/, anddone/folders. Atomic, human-readable, no hidden database. - Cross-session continuity — plans are plain files committed to your repo. Pick up exactly where you left off in any new session, on any machine, with any agent — the spec and task progress are always there.
Designed for the Planner → Builder pattern: a Plan Agent architects the spec, a Build Agent executes it with no ambiguity.
Add the plugin to your OpenCode configuration (~/.config/opencode/opencode.json):
Pinning the version improves OpenCode startup time.
Config is loaded with the following precedence (highest → lowest):
- Project:
<project-root>/.opencode/plan-manager.json - User:
~/.config/opencode/plan-manager.json - Defaults: built-in fallback
{
// "markdown" (default), "json", or "toon" (https://github.com/toon-format/toon)
"outputFormat": "markdown",
}Permission setup
Plan Manager writes to .opencode/plans/*. For plan_create and plan_update to work, the agents that call them must have ask or allow permission on that path.
Example config for the Plan agent:
{
"agent": {
"plan": {
"permission": {
"edit": {
"*": "deny",
".opencode/plans/*": "ask",
},
},
},
},
}See opencode.ai/docs/permissions for details.
Plan Manager is optimized for a two-agent hierarchy, with prompts in src/prompts/:
| Agent | Role |
|---|---|
Plan Agent (plan.txt) |
Architect. Transforms vague requirements into phased, structured plans via a 4-step process: Analysis → Deduplication → Context Decision → Plan Creation. |
Build Agent (build.txt) |
Executor. Follows the plan precisely, managing task state from pending → in_progress → done. Escalates to the Plan Agent when a task needs more design. |
Uses OpenCode's built-in
PlanandBuildagents (docs) with injected system prompts. Your own custom prompts always take priority.
.opencode/plans/
├── pending/
│ └── feature_auth/
│ ├── metadata.json
│ ├── specifications.md
│ └── implementation.md
├── in_progress/
└── done/
Each plan is an isolated folder. Status moves atomically between pending/, in_progress/, and done/ — no database, no sync issues.
| Tool | Description | Key behavior |
|---|---|---|
plan_create |
Create a new plan | Validates full structure via Zod |
plan_list |
List plans by status/type | Reads only lightweight metadata.json files |
plan_read |
Read plan content | Supports summary, spec, plan, or full views |
plan_update |
Update status or tasks | Atomic folder moves, batch task updates |
plan_create({
metadata: {
title: "JWT Authentication",
type: "feature",
description: "Secure auth flow with refresh tokens",
},
specifications: {
description: "Implement secure JWT-based authentication",
functionals: ["User login", "Token refresh"],
nonFunctionals: ["Passwords hashed with bcrypt"],
acceptanceCriterias: ["Successful login returns a valid JWT"],
outOfScope: ["Social OAuth"],
},
implementation: {
description: "Phased rollout",
phases: [
{
name: "Phase 1: Database",
tasks: [
{ content: "Create users table", status: "pending" },
{ content: "Create sessions table", status: "pending" },
],
},
],
},
});plan_read({ id: "feature_auth", view: "summary" }); // metadata + progress stats
plan_read({ id: "feature_auth", view: "spec" }); // requirements only
plan_read({ id: "feature_auth", view: "plan" }); // task list only
plan_read({ id: "feature_auth", view: "full" }); // everythingplan_update({
id: "feature_auth",
status: "in_progress",
taskUpdates: [
{ content: "Create users table", status: "done" },
{ content: "Create sessions table", status: "in_progress" },
],
});bun install # Install dependencies
bun test # Run test suite
bun build # Build for productionMIT © 2026 Yuri Maciel

{ "$schema": "https://opencode.ai/config.json", "plugin": ["opencode-plan-manager@1.1.2"], }