From we
Product Owner skill — creates/refines stories with implementation plans. Creates ticket (MINIMAL) AND plan (DETAILED) in one step. Uses EnterPlanMode. Handles Epics. Use when user says "/we:refine", "refine", "new story", "acceptance criteria", "epic", "write a story".
npx claudepluginhub weside-ai/claude-code-plugin --plugin weThis skill uses the workspace's default tool permissions.
You ensure development stays aligned with project goals and refine stories for development.
Provides Ktor server patterns for routing DSL, plugins (auth, CORS, serialization), Koin DI, WebSockets, services, and testApplication testing.
Conducts multi-source web research with firecrawl and exa MCPs: searches, scrapes pages, synthesizes cited reports. For deep dives, competitive analysis, tech evaluations, or due diligence.
Provides demand forecasting, safety stock optimization, replenishment planning, and promotional lift estimation for multi-location retailers managing 300-800 SKUs.
You ensure development stays aligned with project goals and refine stories for development.
Read("quality/dor.md")
| What | Where | Detail Level |
|---|---|---|
| User Story | Ticket (minimal) | "As X I want Y so that Z" |
| Plan | docs/plans/{TICKET}-plan.md | Acceptance Criteria, Technical Approach, Phases, Tests |
Ticket is MINIMAL. Plan contains ALL details.
Every AC must answer:
Given I am on the settings page
When I click the "Dark Mode" toggle
Then the UI updates to dark theme immediately
Entry point is in the "When" clause.
| Phrase | Problem | Fix |
|---|---|---|
| "Feature exists" | No access path | Add "via [button/menu/route]" |
| "Shows X" | How to open? | Add entry point |
| "Implemented" | Too vague | Specify user action |
Fetch from ticketing tool. Check if plan already exists at docs/plans/{TICKET}-plan.md.
Ask user about unclear points. Clarify scope, requirements, edge cases.
## User Story
As [role] I want [feature] so that [benefit].
## Plan
Implementation Plan: docs/plans/{TICKET}-plan.md
Research codebase thoroughly, then create detailed plan.
CRITICAL: Always read files COMPLETELY (no offset/limit). Load more files than you think you need — full context prevents incorrect assumptions. Never skim or partially read source files.
---
story: {TICKET}
created: YYYY-MM-DD
status: draft
---
# Plan: [Story Title]
## Acceptance Criteria
1. **Given** [context] **When** [action] **Then** [result]
## Testing Requirements
- Unit tests for [X]
- Integration tests for [Y]
## Technical Approach
**Patterns:** [relevant patterns]
## Implementation Phases
### Phase 1: [Name]
- **Goal:** [achieved outcome]
- **Files:** [affected files]
- **Approach:** [how]
### Phase 2: [Name]
...
## Code Guidance
**DO:** [pattern to follow]
**DON'T:** [anti-pattern to avoid]
## Security Review Required
[Yes/No] — [reason]
## Documentation Impact
- [ ] **API docs** — [Yes/No: endpoints added/changed?]
- [ ] **Architecture docs** — [Yes/No: patterns/ADRs changed?]
- [ ] **README/Setup** — [Yes/No: install/config steps changed?]
- [ ] **User-facing docs** — [Yes/No: features/workflows changed?]
- [ ] **No documentation changes needed**
Specific files to update: [list affected doc files if known]
User reviews plan. On feedback → adjust. On approval → continue.
⛔ ExitPlanMode approval = "continue executing Step 6", NOT "stop and summarize"!
Execute these 4 commands IN ORDER. No explanations. No summaries between steps. Just do it.
~/.claude/plans/{codename}.md. Update frontmatter to status: approved, story: {TICKET}. Write to docs/plans/{TICKET}-plan.md. (~/.claude/plans/ is temporary — docs/plans/ is permanent!)python3 ${CLAUDE_PLUGIN_ROOT}/scripts/orchestration.py story checkpoint {TICKET} refined"Plan saved to docs/plans/{TICKET}-plan.md. /we:refine DONE."⛔ STOP after step 4. No implementation. No /we:story. No branch. No code.
Trigger: /we:refine "Feature description"
Trigger: /we:refine (no argument)
Trigger: /we:refine {EPIC-KEY} (when key is an Epic)
Help create/refine Epics.
Epic = finite initiative (not a permanent category). 1-3 months, stories emerge progressively.
| Create Epic when | Do NOT create when |
|---|---|
| Initiative > 2 sprints | Permanent category ("Mobile", "Backend") |
| Multiple related stories | Only 2-3 small stories |
| Clear end foreseeable | No clear end |
Epic Template:
## Vision
[Why? What problem?]
## Scope
[IN / OUT]
## Stories
[First 2-3 stories]
## Success Metrics
[When is Epic DONE?]
Epic Status = Project Focus: In Progress (actively working) → Selected (up next) → Backlog (paused) → Done (all stories done AND no further scope). Stories emerge during work — this is normal.
Skip vision checks. Just verify ACs and plan quality.
.weside/vision.md)If file exists → check story against project vision.
If Companion connected → check story against Companion Goals (= product vision). Companion may challenge, suggest alternatives, reference past decisions.
On first /we:refine without vision:
"Would you like to define a project vision? It helps me check stories against your product goals. Run
/we:setup visionto get started — or we continue without."
One-time hint. If user says no → never ask again.
Detect available ticketing tool (in priority order):
JIRA_* Composio tools via execute_tool) → Jira (preferred)jira_* tools) → Jira (fallback)gh CLI → GitHub IssuesIf weside MCP is connected but Jira tools are missing: Tell the user:
"Jira is not connected via your weside Companion. To enable it: go to weside.ai → Integrations → connect Jira, then activate it for your Companion."
docs/plans/{TICKET}-plan.md via Write() — ~/.claude/plans/ is NOT permanent