From miranda
Creates structured GitHub issues from task descriptions or .oh session context. Task mode investigates codebase and asks questions; session mode decomposes existing solutions into 1-4 hour issues.
npx claudepluginhub open-horizon-labs/mirandaThis skill uses the workspace's default tool permissions.
Creates well-structured GitHub issues ready for oh-task agents. Works in two modes:
Captures brainstormed solutions from conversation as pre-planned GitHub issues with Implementation Plan sections (Context, Exploration, Risks, Approach, Dependency Graph, Tasks) for fast-tracking planning.
Decomposes user requests into requirements and TODOs, clarifies ambiguities via questions, then bulk-creates GitHub Issues per task in dependency order with structured bodies, priorities, estimates, and labels.
Creates GitHub issues for each phase of an implementation plan using feature_request.yml or chore_request.yml templates. Checks existing issues before creating or updating.
Share bugs, ideas, or general feedback.
Creates well-structured GitHub issues ready for oh-task agents. Works in two modes:
.oh/<session>.md context, skips investigation, creates issues# Task mode - investigate from scratch
/oh-plan "Add dark mode support to the dashboard"
# Session mode - use existing context from skills workflow
/oh-plan auth-refactor
At the start, check if the argument matches an existing session file:
If .oh/<arg>.md exists AND contains ## Solution Space:
→ Session mode (skip investigation, use context)
Else:
→ Task mode (investigate, ask questions)
When .oh/<session>.md exists with solution-space context:
Read session file and extract:
## Aim → Goal for issues## Problem Space → Constraints, terrain, assumptions## Solution Space → Selected approach, trade-offs accepted## Problem Statement → Framing (if present)Skip investigation - context already gathered by grounding skills
Skip clarifying questions - decisions already made during solution-space
Decompose the selected solution into right-sized issues:
Create GitHub issues with enriched context from session:
gh issue create --title "<title>" --label "oh-planned" --body "$(cat <<'EOF'
## Goal
<from Aim section>
## Context
<from Problem Space: constraints, terrain>
<from Solution Space: selected approach>
## Acceptance Criteria
- [ ] <derived from solution trade-offs>
- [ ] <derived from aim feedback signals>
## Trade-offs Accepted
<from Solution Space>
## Notes
<from Problem Space assumptions>
EOF
)"
Update session file with created issues:
## Plan
**Updated:** <timestamp>
**Issues:** #43, #44, #45
$ /oh-plan auth-refactor
Found session file: .oh/auth-refactor.md
Reading context...
- Aim: Users complete signup in under 60 seconds
- Problem: Current flow has 5 steps, competitors have 2
- Solution: Collapse to email + password, defer profile to post-signup
- Trade-offs: Less data upfront, need progressive profiling later
Decomposing into issues...
Created 2 issues:
#43: "Simplify signup to email + password only"
- Remove name, company, role fields from signup
- Add post-signup redirect to profile completion
- Depends on: none
#44: "Add progressive profile completion flow"
- Prompt for missing fields on first dashboard visit
- Track completion percentage
- Depends on: #43
Updated .oh/auth-refactor.md with issue links.
Done. Issues ready for /oh-task.
When no session file exists (current behavior):
Explore the codebase to understand:
Ask clarifying questions via AskUserQuestion:
Assess complexity and determine decomposition:
Create GitHub issue(s) with the oh-planned label:
# Create label if it doesn't exist (one-time)
gh label create oh-planned --description "Created via oh-plan skill" --color "0E8A16" 2>/dev/null || true
# Create issue
gh issue create --title "<clear, actionable title>" --label "oh-planned" --body "$(cat <<'EOF'
## Goal
<1-2 sentences describing what we're trying to achieve>
## Context
<relevant background - files identified, patterns to follow, constraints>
## Acceptance Criteria
- [ ] Criterion 1 (specific, testable)
- [ ] Criterion 2
- [ ] Criterion 3
## Notes
<any technical decisions, edge cases, or things to watch out for>
EOF
)"
Signal completion: Call signal_completion(status: "success") to notify the orchestrator.
Fallback: If signal_completion is not available, output COMPLETION: status=success as your final message.
Issues created by oh-plan should be:
Bias toward focused issues. A well-scoped issue that does one thing well is better than a multifaceted issue that tries to do many things. When genuinely uncertain, prefer splitting - but don't create trivial issues.
Split into multiple issues when ANY of these apply:
Keep as one issue when:
Consider a separate integration issue when connecting components involves:
Don't create integration issues for:
Pattern when integration IS complex:
Issue #1: "Add theme persistence API" (Foundation)
Issue #2: "Add theme toggle component" (Feature)
Issue #3: "Wire theme system with fallback handling" (Integration - Depends on #1, #2)
- Handle API failures gracefully
- System preference detection fallback
- Theme flicker prevention on load
Task: "Add dark mode support to the dashboard"
Over-decomposed (too many trivial issues):
Issue #1: Add preferences API
Issue #2: Add toggle component
Issue #3: Add CSS variables
Issue #4: Wire toggle to API
Issue #5: Wire CSS to components
Issue #6: Handle loading states
Under-decomposed (one big issue):
Issue #1: Add dark mode support (everything)
Right-sized:
Issue #1: "Add user preferences API with theme support" (Foundation)
- GET/POST /api/preferences
- Includes theme field
Issue #2: "Add dark mode theming system" (Feature - Depends on #1)
- CSS custom properties for light/dark
- Theme toggle in settings
- Wire to preferences API
- Apply theme on app load
Issue #3: "Handle theme edge cases" (Polish - Depends on #2)
- Only if complex: system preference fallback,
theme flicker prevention, etc.
- Skip if straightforward
Use "Depends on #N" in issue body:
## Goal
Add dark mode theming system with toggle and persistence.
**Depends on:** #1 (preferences API)
| Outcome | Call |
|---|---|
| Issue(s) created successfully | signal_completion(status: "success") |
| User cancelled during questions | signal_completion(status: "error", error: "User cancelled") |
| Failed to create issue | signal_completion(status: "error", error: "<reason>") |
| Session file missing solution-space | signal_completion(status: "error", error: "Session missing Solution Space - run /solution-space first") |
$ /oh-plan "Add heartbeat monitoring for tmux sessions"
Exploring codebase...
Found relevant files:
- src/tmux/sessions.ts (session management)
- src/state/sessions.ts (session state tracking)
- src/index.ts (main loop)
I have a few questions to scope this correctly:
Q: What should happen when a session stops responding?
[1] Mark as crashed, notify user
[2] Auto-restart the session
[3] Just log and continue
User: 1
Q: How often should we check for heartbeats?
[1] Every 30 seconds (Recommended)
[2] Every minute
[3] Every 5 minutes
User: 1
Creating issue...
Created issue #67: "Add heartbeat monitoring for tmux sessions"
## Goal
Detect when tmux sessions stop responding and notify the user.
## Context
- Sessions are tracked in src/state/sessions.ts
- Tmux interactions in src/tmux/sessions.ts
- Need to add periodic check in main loop
## Acceptance Criteria
- [ ] Check session liveness every 30 seconds
- [ ] Mark session as "crashed" if not responding
- [ ] Send Telegram notification when session crashes
- [ ] Add crashed sessions to /status output
## Notes
- Use tmux has-session to check liveness
- Consider: what if tmux server itself is down?
signal_completion(status: "success")
Done. Issue #67 ready for /oh-task.
oh-plan works seamlessly with the Open Horizons skills workflow:
# Grounding phase (in skills workflow)
/aim auth-refactor
/problem-space auth-refactor
/solution-space auth-refactor
# Planning phase (oh-plan reads the context)
/oh-plan auth-refactor # Creates GitHub issues from session
# Execution phase
/oh-task 43 # Work the issues
This avoids duplicating investigation work - the grounding skills gather context, oh-plan transforms it into trackable issues.