用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/stoa-platform/stoa --skill fill-cycle命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
基于 SOC 职业分类
| name | fill-cycle |
| description | Analyze cycle capacity gap and propose backlog items to fill the sprint to ~80% of proven velocity. |
| argument-hint | [--check | --auto | --theme <name> | empty for interactive] |
Load the current Linear cycle, compute the capacity gap against proven velocity, scan 4 backlog sources, and propose a ranked fill plan.
Target: $ARGUMENTS
| Label | ID |
|---|---|
roadmap (parent group — NOT assignable to issues) | <LABEL_ID_ROADMAP> |
roadmap:gateway | <LABEL_ID_ROADMAP_GATEWAY> |
roadmap:dx | <LABEL_ID_ROADMAP_DX> |
roadmap:platform | <LABEL_ID_ROADMAP_PLATFORM> |
roadmap:community | <LABEL_ID_ROADMAP_COMMUNITY> |
roadmap:observability | <LABEL_ID_ROADMAP_OBSERVABILITY> |
| Argument | Mode | Description |
|---|---|---|
| (empty) | Interactive | Show fill plan, ask before promoting |
--check | Read-only | Compute capacity report only, no writes (CI-safe) |
--auto | Auto-promote | Promote quick wins automatically, suggest council for MEGAs |
--theme <name> | Themed fill | Filter candidates by roadmap theme + optional Notion search |
linear.list_cycles(teamId: "<LINEAR_TEAM_ID>")
Identify the current cycle (type "current" or date range containing today).
Extract: cycle_id, name, start, end, scopeTotal, completedTotal.
Then fetch all issues in the cycle:
linear.list_issues(
team: "<LINEAR_TEAM_ID>",
cycle: "<cycle_id>",
first: 50
)
Compute:
cycle_days = (end - start).daysdays_remaining = (end - today).dayspts_committed = sum of all issue estimates in cyclepts_done = sum of estimates for Done/Canceled issuesRead .claude/state/velocity.json.
Extract:
rolling_avg_pts_per_day = rolling_avg_3.pts_per_daytarget_utilization (default 0.80)Compute capacity gap:
capacity = rolling_avg_pts_per_day × cycle_days
target = capacity × target_utilization
gap = target - pts_committed
If gap <= 0: report "Cycle is fully loaded" and stop (unless --check which still reports).
Scan 4 sources for candidate items. Each source contributes candidates with metadata.
linear.list_issues(
team: "<LINEAR_TEAM_ID>",
first: 50
)
Filter for issues where:
cycle is null (not in any cycle)status is "Backlog" or "Todo"assignee is null or matches current userExtract: id, identifier, title, priority, estimate, labels.
Read BACKLOG.md from repo root.
Parse all CAB-XXXX entries from tables and lists. Extract:
gatewaycommunityobservabilityplatformplatformplatformplatformRead plan.md from repo root.
Parse entries from:
Extract: ticket ID, title, estimate (if present), priority.
Read docs/CAPACITY-PLANNING.md.
Parse unchecked [ ] items from remaining phases:
Map phase to roadmap theme:
platformobservabilitygatewaydxplatformcommunityplatformcommunity--themeIf --theme <name> is provided:
notion.notion-search(query: "STOA roadmap <theme>")
Extract any actionable items not already in Linear. Flag as "Notion-sourced" in output.
Merge all candidates. Deduplicate by CAB-XXXX identifier (Linear source wins if conflict).
Score each candidate (higher = better fit):
| Factor | Points | Condition |
|---|---|---|
| Priority | 3 × (5 - priority_value) | P1=12, P2=9, P3=6, P4=3 |
| Has estimate | 2 | estimate is not null |
| Already in Linear | 1 | Source is Linear backlog |
| Theme match | 2 | Matches --theme filter (if provided) |
| Max score | 17 |
Sort by score descending.
[MEGA] or [EPIC] in title)[MEGA] / [EPIC]/council CAB-XXXX then /decompose CAB-XXXXCap at top 15 candidates total across all buckets.
Within the gap budget:
Group MEGAs by roadmap theme for readability.
Display the fill plan. For each Quick Win, ask: "Promote Y/N?"
On Y: linear.update_issue(id, cycleId: "<current_cycle_id>")
--auto)Promote all Quick Wins automatically:
linear.update_issue(id: "<issue_id>", cycleId: "<current_cycle_id>")
Log each promotion in operations.log.
--check)Display the capacity report only. No Linear writes. Exit.
--theme <name>)Same as interactive but filtered by theme. Includes Notion results if available.
After any promotions:
/sync-plan to refresh plan.md with newly promoted issuesSTEP-DONE | step=fill-cycle task=velocity-pipeline promoted=N gap_before=X gap_after=Y
Capacity Report — Cycle N (dates)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Velocity baseline (rolling 3-cycle avg):
Avg: XX.X pts/day | Target utilization: 80%
Current cycle:
Committed: XXX pts | Done: YYY pts (ZZ%)
Capacity: AAA pts | Target: BBB pts (80%)
Gap: CCC pts (DD% under-loaded)
Fill Plan:
━━━━━━━━━
Quick Wins (promote now): Σ XX pts
1. CAB-XXXX: Title (N pts, P2) ............. [score: 14]
2. CAB-YYYY: Title (N pts, P1) ............. [score: 17]
MEGAs (→ /council + /decompose): Σ XX pts
[gateway] CAB-ZZZZ: Title (21 pts, P2)
[platform] CAB-WWWW: Title (34 pts, P3)
Unpointed (estimate to unlock):
CAB-VVVV: Title (no estimate, P2)
Summary:
Promotable: XX pts | After fill: YYY/ZZZ pts (WW%)
MEGAs needing council: N
Unpointed needing estimate: M
| Call | Purpose | Mode |
|---|---|---|
list_cycles | Get current cycle | All |
list_issues(cycle=X) | Get cycle issues | All |
list_issues(no cycle) | Get backlog issues | All |
notion-search | Themed search | --theme only |
update_issue × N | Promote quick wins | Interactive/Auto only |
| Total read | 3-4 calls | |
| Total write | 0-15 calls |
--check mode — always read-only (CI-safe)--theme — avoid unnecessary MCP latency