Skip to content

OpenCode: add manual-review mode and /plannotator-last-plan to avoid eager submit_plan #479

@backnotprop

Description

@backnotprop

Summary

OpenCode support is currently mixing two different product models:

  1. Plannotator owns the planning loop — the agent is expected to call submit_plan automatically.
  2. Plannotator is an explicit review tool — users want to call it only when they decide the plan is worth reviewing.

A growing cluster of feedback says the current default is too eager and too broad.

Pain points

Common sentiment:

  • "I really enjoy Plannotator when I want to call it, but invoking itself on the OpenCode Plan mode is a bit annoying."
  • "The agent eagerly calls it."
  • "I don't want the build agent to call it."
  • "I'd love a way if I could only manually invoke Plannotator on the last plan submitted by the agent."

What this looks like in practice:

  • submit_plan is still available to all primary agents, not just the planning agent.
  • The build agent is excluded from extra prompt injection, but it can still access the tool.
  • Post-approval behavior is still biased toward implementation handoff, which clashes with users who want to stop, stay in planning, or manually choose the next step.
  • The plugin still assumes the planning agent is literally named plan, which makes alternate workflows harder.
  • Users who like OpenCode's native planning flow feel like Plannotator is hijacking it instead of layering on top of it.

Why this matters

This is not just prompt tuning.

The complaints around eager invocation, build-agent access, auto-switching, and hardcoded plan-agent behavior all point to the same underlying issue: the OpenCode contract is ambiguous.

Right now the plugin is trying to serve both:

  • users who want automatic plan interception
  • users who want manual, on-demand review

Those should probably not share one default behavior.

Existing issues this seems to unify

I also think this should be resolved before expanding agent-facing OpenCode power further, e.g. #295.

Proposal

Introduce an explicit OpenCode workflow mode instead of relying on one global default.

1. manual-review (recommended default)

Behavior:

  • No prompt injection into agent planning.
  • No submit_plan tool exposed to agents.
  • User lets OpenCode plan normally.
  • User explicitly invokes a new slash command such as /plannotator-last-plan to open the most recent plan-like assistant output in the Plannotator UI.

This matches the feedback from users who like Plannotator, but only when they choose to use it.

2. plan-only-auto

Behavior:

  • Only configured planning agents can see/call submit_plan.
  • build should not see or call it.
  • Approval should default to stay or stop, not implicitly hand off to build.
  • Planning agent name should be configurable, not hardcoded to plan.

This keeps the automatic review workflow for users who want Plannotator tightly integrated with planning.

3. all-primary-agents (legacy / advanced opt-in)

Behavior:

  • Preserves the current broad access model for users who intentionally want any primary agent to call submit_plan.

Why /plannotator-last-plan is promising

We already have /plannotator-last, which proves the plugin can fetch the last assistant message from the current OpenCode session.

That suggests a natural manual-review workflow:

  1. Let OpenCode's plan agent work normally.
  2. When the user wants review, they run /plannotator-last-plan.
  3. Plannotator opens the last plan-like assistant output in the normal plan review UI.
  4. The user can annotate, approve, or request changes without the agent eagerly invoking review mid-flow.

This would give users an explicit bridge between native OpenCode planning and Plannotator review, without forcing the two to be the same thing.

Acceptance criteria

  • OpenCode exposes a clear workflow setting/mode instead of one implicit default.
  • manual-review mode exists and disables eager agent invocation.
  • A manual slash command such as /plannotator-last-plan opens the last plan output in the plan review UI.
  • plan-only-auto restricts submit_plan to configured planning agents only.
  • Planning agent name or names are configurable instead of hardcoded to plan.
  • Approval flow can stay/stop instead of always assuming implementation handoff.
  • Existing users who rely on the broad current behavior can still opt into it explicitly.

Open question

Should manual-review become the default for OpenCode, with auto-interception as an opt-in mode?

My current read is yes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions