| name | project-lifecycle |
| description | Multi-workspace Plane sprint board management with intelligent automation, ticket creation, and BMAD workflow integration.
Use this skill when:
- Creating tickets, task descriptions, or audit findings
- Auditing board organization (ticket clustering, label optimization, status bottlenecks)
- Selecting the next optimal ticket to work on
- Promoting completed tickets to production and generating changelogs
- Working with multiple Plane workspaces
- Understanding the canonical Plane CRUD → n8n HMAC → Bloodbank → Candystore event side effect
- For higher-level orchestration — "what's next", "clear the board", "orchestrate this ticket" — route to the **`momo`** skill, which surveys the board, triages, decides, and delegates implementation to subagents.
Triggers: "create ticket", "board audit", "what should I work on", "next ticket", "promote to production", "changelog", "sprint status", "WIP limit", plane ticket operations
|
| pipeline-status | ["new"] |
Managing Tickets in Plane
Plane Configuration
Connection: Plane MCP server or direct Plane REST API at https://plane.delo.sh
Plane REST API Endpoints:
GET /api/v1/workspaces/{workspace}/projects/{project}/issues/ - List issues
POST /api/v1/workspaces/{workspace}/projects/{project}/issues/ - Create issue
PATCH /api/v1/workspaces/{workspace}/projects/{project}/issues/{id}/ - Update issue
GET /api/v1/workspaces/{workspace}/projects/{project}/states/ - List states/statuses
GET /api/v1/workspaces/{workspace}/projects/{project}/labels/ - List labels
Authentication: X-Api-Key header with value from workspace-specific env var (e.g., PLANE_API_KEY)
Event side effect of Plane writes
Every successful Plane project/issue/comment write is independently reported by
Plane to the one active n8n workflow at
https://n8n.delo.sh/webhook/plane. n8n verifies the exact raw-body HMAC using
the secret selected by webhook_id, resolves board_id through the Hermes
registry, normalizes provider actions, and publishes canonical Bloodbank facts:
| Plane activity | Canonical event |
|---|
| project created | bloodbank.repo.board.created |
| issue created | bloodbank.repo.task.created |
| issue updated, transitioned, or deleted | bloodbank.repo.task.updated |
| issue comment created | bloodbank.repo.task.appended |
These events are retained in BLOODBANK_EVENTS and projected by Candystore.
Do not manually emit a second ticket lifecycle event after Plane CRUD. Explicit
PM judgments remain separate repo.decision.recorded events.
The Plane workspace automaticai is a tenant slug on the same self-hosted
personal plane.delo.sh instance. It is not a separate infrastructure or
credential boundary. Load bloodbank-integration → references/event-journey.md
when tracing beyond the board operation.
Core Workflows
0. Initialize New Project (First-Time Setup)
When initializing a new project in Plane, execute the full onboarding workflow:
Trigger: "initialize project in plane", "setup plane for project", or first ticket creation in unknown project
Workflow Steps:
-
Create/Verify Project
- Check if project exists (by identifier)
- Create if missing with description from README/CLAUDE.md
- Set project emoji based on theme
-
Generate Absurd Project Art (via fal-text-to-image skill)
- Generate themed mascot/header image using project context
- Prompt formula:
"A weird [PROJECT_THEME] creature in absurdist corporate art style, [PROJECT_SPECIFIC_ELEMENTS], vibrant colors, slightly unsettling but friendly, like a mascot designed by a 5-year-old CEO"
- Save to
docs/[project]-mascot.png
- Set as Plane project cover image
-
Create Label Taxonomy
- Priority:
must-have, should-have, could-have (MoSCoW)
- Sprint:
sprint-1, sprint-2, sprint-3, etc. (workaround for premium cycles)
- Type:
infrastructure, feature, ai-pipeline, auth, monetization
- Effort:
effort:S, effort:M, effort:L, effort:XL (optional)
- Special:
blocked, needs-review (status helpers)
-
Seed Backlog from PRD (if PRD exists)
- Parse feature list from PRD
- Create one ticket per feature with:
- Description from PRD user story
- Appropriate phase/priority/effort labels
- Acceptance criteria from PRD
-
Establish Art Theme (document in project)
- Create
docs/PLANE_ART_THEME.md with:
- Theme name and visual language
- Tone description
- Usage guidelines for ticket categories
- Original mascot prompt for variations
Output:
✓ Project initialized: [PROJ] Project Name
Cover: docs/project-mascot.png (uploaded)
Labels: 14 created (3 priority, 4 phase, 4 effort, 3 type)
Backlog: 10 tickets seeded from PRD
Art Theme: "Theme Name" documented in docs/PLANE_ART_THEME.md
See references/project-initialization.md for detailed workflow.
1. Create Ticket from Story/Task
Parse input for discrete tasks, extract metadata, check duplicates, create via API.
Ticket Metadata:
- Title: Clear, action-oriented
- Description: User story format + acceptance criteria
- Priority: urgent/high/medium/low
- Story points: 1/2/3/5/8/13
- Labels: Auto-detect (security, performance, frontend, backend, sprint-N)
Output format:
✓ Ticket Created: [CWS-015] Fix API authentication bug
Priority: urgent | Points: 3 | Sprint: 1 | Labels: security, backend
URL: https://plane.delo.sh/<workspace>/projects/<board-id>/issues/<ticket-id>
See references/create-ticket-from-story.md for full workflow.
2. Audit Board State
Analyze ticket distribution and recommend optimizations.
Audit Checklist:
- Ticket Clustering - Group related tickets (3+ related → parent issue, 5+ → epic)
- Label Optimization - Missing labels, redundant labels, new label recommendations
- Status Distribution - WIP bottlenecks, stale tickets (>14 days in todo)
- View Recommendations - "My Sprint", "Blocked Items", "Quick Wins", "Tech Debt"
- Dependency Analysis - Map dependencies, detect circular refs, identify blockers
Audit Depths:
quick: Basic metrics (<5 seconds)
standard: With clustering analysis (<15 seconds)
comprehensive: Full NLP analysis (<60 seconds)
See references/audit-board-state.md for full workflow.
3. Select Next Logical Ticket
Score and recommend optimal ticket based on priority algorithm.
Selection Algorithm:
score = priority_score + effort_score + age_score + dependency_bonus + critical_path_bonus - blocker_penalty
Scoring Weights:
- Priority: urgent=10, high=7, medium=3, low=0
- Effort (favor quick wins): 1-2pts=+5, 3-5pts=+3, 8+pts=-2
- Age (address stale): >14 days=+3, >7 days=+2
- Dependency bonus: +2 per ticket unblocked (cap 10)
- Critical path: +8
Output:
🎯 Recommended: [CWS-004] Fix production build (Score: 21)
Why: URGENT priority, unblocks 2 tickets, on critical path
Alternatives:
1. [CWS-001] API key rotation (18 pts, security critical)
2. [CWS-012] Add CSP (8 pts, quick win - 1 point)
Marking CWS-004 as in-progress...
✓ Status updated, assigned to you, start time logged
See references/select-next-ticket.md for full algorithm.
4. Promote Completed Tickets
After staging merged to main:
- Query completed tickets in current sprint
- Verify acceptance criteria met
- Move to "live" status, add "deployed-production" label
- Generate changelog from ticket data
- Send notification email to team
See assets/changelog-email.md for email template.
Hook Integration
Pre-Prompt Hook (Automatic)
Runs before every prompt to check board state.
Checks:
- WIP limit exceeded? (warn if >5 in-progress)
- Current ticket context from git branch
- Dependency conflicts
- Urgent tickets needing attention
Silent mode: Passes without output if no issues.
Stop Hook (Automatic)
Runs at session end to update ticket.
Actions:
- Detect ticket from git branch (
CWS-\d+ pattern)
- Generate session summary (files changed, commits, duration)
- Prompt for status update (in-progress/completed/blocked)
- Append development log to ticket description
BMAD Integration Points
| Workflow | Phase | Action |
|---|
/create-story | post-creation | Auto-create Plane ticket from story |
/sprint-planning | post-planning | Batch create all sprint tickets |
/dev-story | pre-implementation | Select optimal ticket, mark in-progress |
/captain:sync | continuous | Bidirectional doc/ticket sync |
/captain:health | on-demand | Board health and decomposition check |
/captain:prune | weekly | Backlog cleanup recommendations |
Registering a project and workspace
Every project that uses a ticket board records the binding in repo-root
.project.json:
{
"project_slug": "33god",
"ticket_provider": {
"type": "plane",
"workspace": "33god",
"identifier": "33GOD",
"board_id": "15258893-0206-4e8f-aea6-340eb217988c",
"state": "linked"
},
"agents": {}
}
| Field | Meaning |
|---|
project_slug | Canonical repo identity and Hindsight/event data.repo value |
ticket_provider.workspace | Plane tenant slug, such as 33god or automaticai |
ticket_provider.identifier | Human-facing project identifier |
ticket_provider.board_id | Plane project UUID and webhook routing key |
ticket_provider.state | planned until linked, then linked |
Credentials remain workspace-scoped runtime secrets. PJangler reconciles this
manifest into the shared fleet registry; webhook routing reads the registry on
every execution. Do not persist base_url, board_url, or credentials in the
manifest.
Finding the project ID
If you don't know the project UUID, query the API:
curl -s -H "X-Api-Key: $PLANE_33GOD_API_KEY" \
"https://plane.delo.sh/api/v1/workspaces/33god/projects/" \
| python3 -c "import json,sys; [print(f'{p[\"identifier\"]}: {p[\"id\"]}') for p in json.load(sys.stdin).get('results', json.load(sys.stdin))]"
Or grab it from the Plane UI URL: https://plane.delo.sh/<workspace>/projects/<project_id>/...
Ticket Template
See assets/ticket-template.md for standard ticket format with:
- User story (As a... I want... So that...)
- Acceptance criteria checklist
- Technical notes and dependencies
- Development log (auto-populated by stop hook)
Error Handling
API failures: Retry with exponential backoff (3 attempts), cache locally for later sync
Ticket not found: Search similar IDs, prompt user, offer to create new ticket
Dependency conflicts: Warn user, offer options (work on blocker first, continue anyway, remove dependency)
WIP limit exceeded: Warn but don't block, suggest completing existing work
Quick Reference
"Create a ticket for fixing the login bug, high priority, 3 points"
"Run a board audit" or "Audit board state --depth comprehensive"
"What should I work on next?" or "Select next ticket"
"Promote completed tickets from Sprint 1 and send changelog"
"Show sprint progress" or "List my in-progress tickets"