Orchestrate OpenSpec Change Requests through Vibe-Kanban with a 4-phase workflow: intake → plan → execute → finalize.
This plugin provides a complete orchestration system for managing OpenSpec change requests by delegating implementation work to Vibe-Kanban (VKB) executor agents.
| Component | Name | Description |
|---|---|---|
| Agent | vibe-orchestrator | Primary orchestrator — loads skills per phase |
| Subagent | oscr-reviewer | Read-only code reviewer for worktree output |
| Subagent | oscr-verifier | Test/verification runner for worktree output |
| Skill | oscr-intake | Phase 0: Interactive Q&A via octto |
| Skill | oscr-plan | Phase 1: Create VKB cards for each change |
| Skill | oscr-execute | Phase 2: Launch, wait, review, fix, merge |
| Skill | oscr-finalize | Phase 3: Sync, verify, archive |
| Skill | oscr-vkb-quirks | Reference: VKB API quirks and workarounds |
| Tool | oscr_save | Persist orchestration state to disk |
| Tool | oscr_load | Load persisted state from disk |
| Tool | oscr_wait | Server-side poll with timeout (prevents context explosion) |
| Tool | oscr_follow_up | Send instructions to VKB executor sessions |
| Template | card-template.md | User-modifiable instructions for VKB executors |
Invoke the orchestrator agent directly:
@vibe-orchestrator implement openspec active changes
Or use a slash command:
/oscr user-authentication-v2
/oscr active
| Command | Description |
|---|---|
/oscr |
Full workflow (intake → plan → execute → finalize) |
/oscr-plan |
Planning phase only — creates VKB cards |
/oscr-exec |
Resume execution from saved state |
/oscr-fin |
Finalization phase only — sync and archive |
/oscr-status |
Show current orchestration status (read-only) |
The orchestrator accepts:
- Single change:
@vibe-orchestrator implement user-auth-v2 - Multiple changes:
@vibe-orchestrator implement auth,logging,cache - All active:
@vibe-orchestrator implement active(usesopenspec status --json)
Interactive confirmation via octto:
- Determine change names from input
- Infer VKB server URL from opencode.json MCP config
- Confirm push preference (local vs remote)
- Choose executor model (OPENCODE, CLAUDE, CODEX, etc.)
- Validate changes exist and are active
- Save initial state
Create VKB cards:
- Load state
- For each change: get instructions via
openspec instructions --json - Create kanban issue via MCP
create_issue - Build CardState entries with "pending" status
- Save state, transition to execute phase
The 5-step execution loop per card:
Step 1: Create & Launch
- Call VKB
create-and-startAPI - Get session ID
- Immediately send follow-up with rendered card template
Step 2: Wait for Completion
- Poll via
oscr_wait(server-side, prevents context explosion) - Completion signal:
has_in_progress_attempt === false - Stall handling: nudge once, escalate on second timeout
Step 3: Review
- Invoke
@oscr-reviewersubagent - If blocking issues and fix cycles remaining: send fix instructions via follow-up
- Loop back to Step 2
Step 4: Merge
git merge {branch} --no-ffinto base- Push to remote if configured
- Explicitly update issue status to "done"
Step 5: Checkpoint
- Save state, log summary, continue to next card
For each completed card:
openspec sync <change>openspec verify <change>openspec archive <change>- Generate summary report
- Clean up state file
- OpenCode with plugin support
- Bun runtime (v1.0.0+)
- Vibe KanBan configured with repositories
- OpenSpec project structure at
openspec/changes/ - octto plugin (for Phase 0 interactive Q&A)
Add to your project's .opencode/opencode.json:
{
"plugins": [
"opencode-vkb-oscr"
]
}The plugin's config hook installs:
- Agents to
.opencode/agents/ - Skills to
.opencode/skills/ - Commands to
.opencode/commands/ - Templates to
.opencode/templates/
See INSTALLATION.md for detailed instructions.
The plugin handles these known VKB behaviors (documented in oscr-vkb-quirks skill):
- Descriptions not passed to executors — always use follow-up API
- Two project systems — legacy for tasks, remote for issues
- No auto-transition to Done — explicitly update status after merge
- Completion signal —
has_in_progress_attempt === falseis more reliable than status
- CONTRIBUTING.md — Setup and workflow
- AGENTS.md — Guidelines for AI agents
- CHANGELOG.md — Version history
MIT — See LICENSE file.