Agent skill
af-project-management-expertise
Use when planning weekly work cycles, managing team capacity, prioritizing backlogs, or scheduling issues into Linear cycles. Covers capacity budgets, prioritization rules, cycle management, and estimation quality checks.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/af-project-management-expertise
SKILL.md
Project Management Expertise
When to Use This Skill
Load this skill when you need to:
- Plan a weekly work cycle for a team
- Prioritize backlog issues for scheduling
- Manage team capacity budgets
- Assign issues to Linear cycles
- Review estimation quality across a backlog
Common triggers:
/pm:plan-weekcommand invoked- PM asks "what should we work on this week?"
- Sprint/cycle planning sessions
- Backlog grooming and prioritization
Quick Reference
Capacity Constants
| Parameter | Value |
|---|---|
| Productive hours per day | 6 |
| Hours per story point | 3 |
| Story points per week per team | Project-specific (see project CLAUDE.md) |
Note: Capacity varies by team size and composition. Define your team's weekly capacity in the project's CLAUDE.md (e.g., Team capacity: 50 pts/week).
Issue Status Types
| Status | Type | Planning Relevance |
|---|---|---|
| Discovered | backlog | Lowest priority for scheduling; may need Discovery Estimate |
| Approved | unstarted | Highest priority for scheduling; should have Refined Estimate from Refinement phase |
Prioritization Order
Issues are scheduled in this order:
- Approved issues (approved and estimated, ready to start)
- Discovered issues with estimates (backlog items with Discovery Estimates)
- Discovered issues without estimates (need estimation before scheduling)
Within each group, sort by:
- Priority field (1=Urgent, 2=High, 3=Normal, 4=Low)
- Estimate size (smaller issues first — complete more work)
- Age (older issues first — prevent stagnation)
Core Concepts
Per-Team Planning
The PM agent plans for one team at a time. Each team has its own:
- Capacity budget (defined per project, see CLAUDE.md)
- Cycle (weekly time-box)
- Backlog of issues in Discovered/Approved states
The agent is scoped to the team it's installed in. If installed in the Agentview team, it only plans for Agentview issues.
Cycles (Not Milestones)
Linear cycles are the scheduling container:
- Team-scoped — each team manages its own cycles
- Time-boxed — weekly or biweekly duration
- Auto-rollover — incomplete work rolls to the next cycle automatically
- No auto-advance — adding an issue to a cycle does NOT change its status
- Independent of status — cycle assignment and issue status are separate concerns
Estimation Quality Tiers
The estimation skill (af-estimation-expertise) defines two tiers:
| Tier | When | Confidence | Tagged As |
|---|---|---|---|
| Discovery Estimate | During Discovery phase | Low/Medium | [Discovery Estimate] in Linear comment |
| Refined Estimate | During Refinement phase | Medium/High | [Refined Estimate] in Linear comment |
For planning purposes:
- Issues with Refined Estimates → schedule with high confidence
- Issues with Discovery Estimates → schedule with medium confidence (pad 20%)
- Issues with no estimate → estimate first using
af-estimation-expertise, then schedule
Checking Estimation Status
To determine if an issue has been estimated and at what quality:
- Has estimate? Check
estimatefield on the Linear issue (non-null = has story points) - What quality? Search the issue's comments for
[Discovery Estimate]or[Refined Estimate]tags - No estimate? Load
af-estimation-expertiseand run a Discovery Estimate (quick heuristic)
Linear Hierarchy Model
The Hierarchy
AgentFlow uses Linear constructs as follows:
| Linear Construct | AgentFlow Meaning | Created When | Notes |
|---|---|---|---|
| Team | Product/organisational boundary | Setup | Your biggest unit of organisation |
| Project | Optional — only for "super-epics" | As needed | Bundles of milestones; rarely used |
| Milestone | Delivery goal (replaces "Epic" concept) | Discovery or Planning | Groups issues that ship together (e.g., "Auth MVP") |
| Issue (Parent) | Deliverable capability | Discovery | Gets branch, PR, implementation |
| Sub-issue | Specification artifact | Refinement | [Behaviour] or [UX] work; own cycle/assignee |
| Cycle | Weekly time-box | Ongoing | For both refinement and delivery |
Key Insight: Sub-issues Are Full Issues
Linear sub-issues have their own:
- Assignee (QA for Behaviour, UX for Storybook)
- Cycle (can differ from parent)
- Estimate (part of parent total, not additional)
- Status (tracked independently)
This enables scheduling spec work into refinement cycles before the parent's delivery cycle.
Milestone Usage
Milestones serve the role that "Epics" previously filled — grouping related issues toward a delivery goal:
- "Auth MVP" — Login + Registration + Session Management
- "v1.0 Release" — Core feature set for first release
- "Q2 Delivery" — Time-boxed quarterly goal
When to create Milestones:
- During Discovery (for capability areas)
- During Planning (for release groupings)
Milestones vs Projects:
- Milestones — For most delivery goals (recommended)
- Projects — Only for "super-epics" spanning multiple milestones (rare)
Scheduling Spec Work (Refinement Cycles)
The Pattern
Specification sub-issues ([Behaviour], [UX]) should be scheduled into cycles before their parent's delivery cycle.
Example:
- Cycle 12 (refinement): [Behaviour] and [UX] sub-issues for Login Flow
- Cycle 13 (delivery): Login Flow parent issue
This ensures specs are complete and approved before implementation begins.
Capacity Planning with Mixed Work
When planning a cycle, include both:
- Delivery work — Parent issues in Approved status
- Refinement work — Spec sub-issues in Approved status
Both consume capacity. A typical split:
- 60-70% delivery work
- 20-30% refinement work
- 10% buffer for unplanned work
Checking Readiness for Delivery
Before scheduling a parent issue into a delivery cycle:
- Check that its [Behaviour] sub-issue is Done
- Check that its [UX] sub-issue is Done
- If specs aren't complete, schedule the sub-issues first
Issues ready for delivery: Status = Approved AND all sub-issues have status = Done
Standing Housekeeping Issues
The Pattern
Each cycle should have a standing "Housekeeping" parent issue for batching trivial work.
Create at cycle start:
Title: Housekeeping — Week of {date}
Estimate: 2-3 points (collective)
Cycle: Current cycle
During the cycle: Add trivial items as sub-issues (titles only, no individual estimates):
- Typo fixes
- Config tweaks
- Unused import removal
- Small copy changes
Benefits:
- Trivial items don't inflate velocity individually
- Aggregate effort is tracked
- Nothing falls through the cracks
Workflow: Plan a Weekly Cycle
Step 1: Gather the Backlog
Query all schedulable issues for the team:
Using Linear MCP tools:
1. list_issues(team: "TeamName", state: "Approved")
2. list_issues(team: "TeamName", state: "Discovered")
For each issue, note:
identifier(e.g., AGV-34)titleestimate(story points, may be null)priority(1-4)createdAt(for age sorting)labels(for context)
Step 2: Assess Estimation Coverage
Group issues by estimation status:
| Group | Criteria | Action |
|---|---|---|
| Ready | Has estimate + Refined Estimate comment | Schedule directly |
| Usable | Has estimate + Discovery Estimate comment | Schedule with 20% padding |
| Needs estimation | No estimate (null) | Estimate using af-estimation-expertise heuristics |
For unestimated issues:
- Load
af-estimation-expertise - Use the Estimation Heuristics section (by change type) for quick estimates
- Set story points on the issue
- Post a
[Discovery Estimate]comment
Step 3: Prioritize and Fill the Cycle
With the team's weekly capacity budget (defined in project CLAUDE.md):
- Start with Approved issues — these are committed work
- Add Discovered issues with estimates — by priority, then size, then age
- Add Discovered issues with estimates — if capacity remains
- Include refinement work — spec sub-issues ([Behaviour], [UX]) consume capacity too
- Leave buffer — aim for 80-90% of capacity (uncertainty margin)
Capacity rules:
- Never exceed the team's weekly capacity in a single cycle
- Leave 10-20% buffer for unplanned work
- If a single issue exceeds remaining capacity, skip it (don't split)
- Flag issues over 21 points — suggest decomposition
Step 4: Present the Plan
Before making any changes, present the proposed cycle to the human:
## Weekly Cycle Plan: [Team] — Week of [Date]
**Capacity:** 50 points | **Planned:** X points | **Buffer:** Y points
### Scheduled Issues (X points)
| # | Issue | Title | Points | Priority | Est. Quality |
|---|-------|-------|--------|----------|-------------|
| 1 | AGV-XX | Title | 5 | High | Refined |
| 2 | AGV-YY | Title | 3 | Normal | Discovery |
| ... | | | | | |
### Newly Estimated (Z issues)
| Issue | Title | Points | Basis |
|-------|-------|--------|-------|
| AGV-ZZ | Title | 3 | Heuristic: new UI component |
### Not Scheduled (Remaining Backlog)
| Issue | Title | Points | Reason |
|-------|-------|--------|--------|
| AGV-AA | Title | 21 | Exceeds remaining capacity |
| AGV-BB | Title | null | Needs detailed estimation |
### Recommendations
- [Any issues that should be decomposed]
- [Any estimation quality concerns]
- [Suggested focus areas]
Step 5: Execute on Approval
After human approves:
-
Get or create the current cycle for the team:
list_cycles(teamId: "team-uuid", type: "current")If no current cycle exists, note this and inform the human.
-
Assign issues to the cycle:
update_issue(id: "AGV-XX", cycle: "cycle-name-or-id") -
Set newly estimated story points:
update_issue(id: "AGV-ZZ", estimate: 3) -
Post estimation comments for any issues that were estimated during planning.
-
Post summary to Zulip with the final plan.
Workflow: Review Estimation Quality
When reviewing a backlog for estimation health:
Metrics to Report
| Metric | Healthy | Warning | Action |
|---|---|---|---|
| % issues with estimates | >80% | <50% | Batch estimate unestimated issues |
| % with Refined Estimates | >60% | <30% | Move issues through Refinement |
| Avg points per issue | 3-8 | >13 | Suggest decomposition |
| Issues over 21 points | 0 | >2 | Flag for decomposition |
Report Format
## Estimation Health: [Team]
**Total backlog:** X issues
**Estimated:** Y (Z%)
**Refined:** A (B% of estimated)
**Avg points:** C
### Issues Needing Attention
- [AGV-XX] No estimate — needs at least Discovery Estimate
- [AGV-YY] 34 points — should be decomposed into sub-issues
- [AGV-ZZ] Discovery Estimate only, in Approved status — needs Refined Estimate
Integration Points
Estimation skill (af-estimation-expertise):
- Load for any estimation work (Discovery or Refined)
- Use heuristics table for quick batch estimates
- Follow structured output format for Linear comments
Work management (af-work-management-expertise):
- Linear status flow: Discovered → Refining → Approved → In Progress
- Issue updates via
linearisCLI or Linear MCP tools - Current-task.md for tracking planning sessions
Process skills:
af-discovery-process— Features should get Discovery Estimates during Phase 4af-refinement-process— Features should get Refined Estimates before approvalaf-delivery-process— Story points must be set before starting implementation
Linear MCP tools:
list_issues— Query backlog by team and statelist_cycles— Get current/next cyclesupdate_issue— Assign to cycle, set estimatescreate_comment— Post estimation breakdowns
Duplicate and Overlap Detection
Before scheduling, scan the backlog for duplicate or overlapping issues:
When to Check
- During cycle planning (Step 2.5 — after gathering backlog, before scheduling)
- After batch issue creation (new issues often overlap existing ones)
- When the backlog exceeds 50 issues (overlap probability increases with size)
Detection Method
- Theme clustering. Group issues by keywords (e.g., "cloud", "migration", "health", "costs", "activity"). Any theme with 3+ issues warrants review.
- Parent-child overlap. Check if Epic/parent issues carry their own estimates when children already carry the work — this causes double-counting.
- Entity vs. deep link overlap. An entity issue (e.g., "Environment Entity") may subsume a smaller issue (e.g., "Deep Links: Environments"). Make the smaller one a sub-issue or mark as duplicate.
- API + UI refactor pairs. Verify that paired refactor issues (API Refactor + UI Rethink) don't overlap with a broader parent issue covering the same scope.
- Description cross-reference. If an issue's description says "likely overlaps with X" or "see also Y", investigate immediately.
Resolution Actions
| Finding | Action |
|---|---|
| True duplicate (identical scope) | Mark as Duplicate of the richer issue |
| Parent carries estimate but children do too | Zero the parent's estimate |
| Smaller issue subsumed by larger | Make it a sub-issue of the larger |
| Overlapping scope but distinct work | Add relatedTo link, note overlap in descriptions |
Impact on Totals
After resolving duplicates, recalculate project totals. Report the delta:
- "Removed X pts of double-counting (was Y, now Z)"
Cycle Lifecycle Management
Verify Cycles Exist Before Assigning
Before assigning issues to cycles, always verify the target cycle exists in Linear:
list_cycles(teamId: "team-uuid")
If a cycle doesn't exist, create it first using the Linear GraphQL API:
mutation {
cycleCreate(input: {
teamId: "team-uuid",
startsAt: "YYYY-MM-DD",
endsAt: "YYYY-MM-DD"
}) {
cycle { id number }
}
}
Never "plan" cycles conceptually without creating them in Linear. Cycle assignments will silently fail if the cycle doesn't exist, and issues will appear unscheduled despite being "planned."
Cycle Naming Convention
Cycles are numbered sequentially per team. When creating future cycles, continue the sequence from the last existing cycle.
Common Pitfalls
- Over-scheduling. Don't fill 100% of capacity. Leave 5-10 points for unplanned work and interruptions.
- Ignoring estimation quality. A Discovery Estimate for a Discovered issue is fine. A Discovery Estimate for an Approved issue means Refinement didn't complete properly.
- Scheduling unestimated work. Never add an unestimated issue to a cycle — estimate it first, even if just a heuristic.
- Ignoring dependencies. Check parent/child relationships. Don't schedule a sub-issue if its parent isn't ready.
- Planning across teams. Each team has its own capacity. Don't mix team budgets.
- Double-counting Epic parents. If an issue has the "Epic" label and its children carry estimates, the parent should have estimate = 0. Otherwise totals are inflated.
- Forgetting to create cycles. Always verify cycles exist in Linear before assigning issues. Conceptual planning without cycle creation leads to silent failures.
- Missing delivery by-products. Issues created during delivery (follow-on work, "what's left" breakdowns) bypass the estimation workflow. Run an estimation sweep after each delivery cycle.
Remember:
- Capacity is project-specific — check project CLAUDE.md for the team's weekly budget
- Plan for one team at a time — the team the agent is installed in
- Prioritize: Approved > Discovered
- Always present the plan before executing
- Leave capacity buffer for unplanned work (10-20%)
- Estimate unestimated issues before scheduling them
- Schedule spec sub-issues ([Behaviour], [UX]) into refinement cycles before parent delivery cycles
- Create a standing Housekeeping issue each cycle for trivial work
- Scan for duplicates and overlaps before finalizing cycle plans
- Verify cycles exist in Linear before assigning issues to them
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?