Create Jira subtasks from task descriptions or session context. Investigates when needed, skips when context exists.
Creates Jira subtasks from task descriptions or existing session context, skipping investigation when context is available.
npx claudepluginhub open-horizon-labs/bottleThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Creates well-structured Jira subtasks ready for autonomous agents. Works in two modes:
.oh/<session>.md context, skips investigation, creates subtasksThis skill requires a Jira MCP server to be configured. At startup, verify the MCP is available:
Check for Jira MCP tools:
- jira_search or jira_search_issues
- jira_create_issue
- jira_get_issue
If tools are not available:
→ Exit with: "Jira MCP not configured. Add a Jira MCP server to use this skill."
# Task mode - investigate from scratch
/jira-plan PROJ-123 "Add dark mode support to the dashboard"
# Session mode - use existing context from skills workflow
/jira-plan PROJ-123 auth-refactor
Arguments:
PROJ-123) - subtasks will be created under thisAt the start, check if the second 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 subtasks## 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 subtasks:
Create Jira subtasks with enriched context from session:
Use Jira MCP to create subtask:
Project: <extracted from parent issue>
Parent: <parent issue key>
Issue Type: Sub-task
Summary: <clear, actionable title>
Description:
h2. Goal
<from Aim section>
h2. Context
<from Problem Space: constraints, terrain>
<from Solution Space: selected approach>
h2. Acceptance Criteria
* <derived from solution trade-offs>
* <derived from aim feedback signals>
h2. Trade-offs Accepted
<from Solution Space>
h2. Notes
<from Problem Space assumptions>
Labels: jira-planned
Update session file with created subtasks:
## Plan
**Updated:** <timestamp>
**Subtasks:** PROJ-124, PROJ-125, PROJ-126
$ /jira-plan PROJ-100 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 subtasks...
Created 2 subtasks under PROJ-100:
PROJ-101: "Simplify signup to email + password only"
- Remove name, company, role fields from signup
- Add post-signup redirect to profile completion
- Blocked by: none
PROJ-102: "Add progressive profile completion flow"
- Prompt for missing fields on first dashboard visit
- Track completion percentage
- Blocked by: PROJ-101
Updated .oh/auth-refactor.md with subtask links.
Done. Subtasks ready for execution.
When no session file exists:
Get parent issue context using Jira MCP:
Use jira_get_issue to fetch parent issue details:
- Summary and description
- Project key
- Existing subtasks (to avoid duplication)
Explore the codebase to understand:
Ask clarifying questions via AskUserQuestion:
Assess complexity and determine decomposition:
Create Jira subtask(s) with the jira-planned label:
Use Jira MCP to create subtask:
Project: <from parent issue>
Parent: <parent issue key>
Issue Type: Sub-task
Summary: <clear, actionable title>
Description:
h2. Goal
<1-2 sentences describing what we're trying to achieve>
h2. Context
<relevant background - files identified, patterns to follow, constraints>
h2. Acceptance Criteria
* Criterion 1 (specific, testable)
* Criterion 2
* Criterion 3
h2. Notes
<any technical decisions, edge cases, or things to watch out for>
Labels: jira-planned
Link dependencies between subtasks:
If subtask B depends on subtask A:
Use Jira MCP to create link:
- Type: "Blocks" or "is blocked by"
- From: A
- To: B
Subtasks created by jira-plan should be:
Bias toward focused subtasks. A well-scoped subtask that does one thing well is better than a multifaceted subtask that tries to do many things. When genuinely uncertain, prefer splitting - but don't create trivial subtasks.
Split into multiple subtasks when ANY of these apply:
Keep as one subtask when:
Task: "Add dark mode support to the dashboard"
Over-decomposed (too many trivial subtasks):
PROJ-101: Add preferences API
PROJ-102: Add toggle component
PROJ-103: Add CSS variables
PROJ-104: Wire toggle to API
PROJ-105: Wire CSS to components
PROJ-106: Handle loading states
Under-decomposed (one big subtask):
PROJ-101: Add dark mode support (everything)
Right-sized:
PROJ-101: "Add user preferences API with theme support" (Foundation)
- GET/POST /api/preferences
- Includes theme field
PROJ-102: "Add dark mode theming system" (Feature)
- CSS custom properties for light/dark
- Theme toggle in settings
- Wire to preferences API
- Apply theme on app load
Blocked by: PROJ-101
PROJ-103: "Handle theme edge cases" (Polish)
- Only if complex: system preference fallback,
theme flicker prevention, etc.
- Skip if straightforward
Blocked by: PROJ-102
Always use Sub-task as the issue type. The parent issue should be a Story, Task, or Bug.
Adapt to available Jira fields. Common optional fields:
Jira uses wiki markup, not Markdown:
h2. for headers (not ##)* for bold (not **)* item for bullets (not - item){code}...{code} for code blocks (not triple backticks)Always add jira-planned label to identify subtasks created by this skill.
| Outcome | Description |
|---|---|
| Success | Subtask(s) created successfully |
| Error | Jira MCP not available, user cancelled, failed to create subtask, parent issue not found, or session file missing solution-space |
CRITICAL: You MUST signal completion when done. Call the signal_completion tool as your FINAL action.
Signal based on outcome:
| Outcome | Call |
|---|---|
| Subtasks created | signal_completion(status: "success", message: "Created N subtasks: PROJ-101, PROJ-102") |
| Jira MCP not available | signal_completion(status: "error", error: "Jira MCP not configured") |
| User cancelled | signal_completion(status: "error", error: "User cancelled") |
| Failed to create subtask | signal_completion(status: "error", error: "<reason>") |
| Parent issue not found | signal_completion(status: "error", error: "Parent issue PROJ-100 not found") |
| Session missing context | signal_completion(status: "error", error: "Session missing Solution Space - run /solution-space first") |
If you do not signal, the orchestrator will not know you are done and the session becomes orphaned.
Fallback: If the signal_completion tool is not available, output your completion status as your final message in the format: COMPLETION: status=<status> message=<message> or COMPLETION: status=<status> error=<reason>.
$ /jira-plan PROJ-100 "Add heartbeat monitoring for tmux sessions"
Fetching parent issue PROJ-100...
Found: "Miranda remote orchestration improvements"
Project: PROJ
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 subtask...
Created PROJ-107: "Add heartbeat monitoring for tmux sessions"
h2. Goal
Detect when tmux sessions stop responding and notify the user.
h2. Context
- Sessions are tracked in src/state/sessions.ts
- Tmux interactions in src/tmux/sessions.ts
- Need to add periodic check in main loop
h2. 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
h2. Notes
- Use tmux has-session to check liveness
- Consider: what if tmux server itself is down?
Labels: jira-planned
signal_completion(status: "success", message: "Created 1 subtask: PROJ-107")
Done.
jira-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 (jira-plan reads the context)
/jira-plan PROJ-100 auth-refactor # Creates Jira subtasks from session
# Execution phase
# Work the subtasks via your preferred method
This avoids duplicating investigation work - the grounding skills gather context, jira-plan transforms it into trackable Jira subtasks.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.