skills/prioritize-proposals/SKILL.md
Analyze active OpenSpec proposals and produce a prioritized "what to do next" report
npx skillsauth add jankneumann/agentic-coding-tools prioritize-proposalsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Analyze all active OpenSpec change proposals against recent code history and produce a prioritized "what to do next" ordered list optimized for minimal file conflicts and parallel agent work.
$ARGUMENTS - Optional flags:
--change-id <id>[,<id>] — limit analysis to specific change IDs (comma-separated)--since <git-ref> — analyze commits since this ref (default: HEAD~50)--format <md|json> — output format (default: md)openspec/changes/# Defaults
SINCE_REF="HEAD~50"
FORMAT="md"
CHANGE_IDS="" # empty = all active proposals
# Parse flags from $ARGUMENTS
# --change-id add-foo,update-bar → CHANGE_IDS="add-foo,update-bar"
# --since HEAD~20 → SINCE_REF="HEAD~20"
# --format json → FORMAT="json"
List all active OpenSpec change proposals and gather metadata:
# List active changes
openspec list
# For each active change, gather:
# - proposal.md contents (the Why and What)
# - tasks.md contents (implementation status)
# - spec deltas (which specs are affected)
# - design.md (if present)
For each proposal, extract and record:
openspec/changes/proposal.md## Impact sectiontasks.mddesign.md existsIf --change-id was provided, limit inventory to those specific IDs only. Verify each requested ID exists; warn if any are not found.
Gather recent commit history and file changes:
# Get recent commits with files changed
git log --oneline --name-only $SINCE_REF..HEAD
# Get summary of files changed
git diff --stat $SINCE_REF..HEAD
# Get the list of unique files changed
git diff --name-only $SINCE_REF..HEAD | sort -u
Build a map of recently changed files and their commit frequency.
For each active proposal, evaluate three dimensions:
Compare the proposal's target files/specs against recent commits:
Evaluate implementation readiness:
For each pair of proposals, compare their target files:
Build a conflict matrix showing which proposals overlap.
Assign a composite priority score based on:
| Factor | Weight | Scoring | |--------|--------|---------| | Relevance | High | Still Relevant > Needs Verification > Needs Refinement > Likely Addressed | | Readiness | High | Ready > Partially Ready > Needs Planning > Blocked | | Task completion | Medium | Higher % complete = higher priority (momentum) | | Conflict isolation | Medium | Fewer conflicts with other proposals = higher priority | | Scope size | Low | Smaller scope = quicker wins = slightly higher priority |
Sort proposals by composite score (descending).
After ranking, group proposals by conflict status:
Present these groupings in the report.
Produce the prioritization report.
--format md)# Proposal Prioritization Report
**Date**: YYYY-MM-DD HH:MM:SS
**Analyzed Range**: <SINCE_REF>..HEAD (<N> commits)
**Proposals Analyzed**: <count>
## Priority Order
### 1. <change-id> — <title>
- **Relevance**: Still Relevant
- **Readiness**: Ready (0/5 tasks complete)
- **Conflicts**: None
- **Recommendation**: Implement next
- **Next Step**: `/implement-feature <change-id>`
### 2. <change-id> — <title>
- **Relevance**: Needs Refinement (target files changed since proposal)
- **Readiness**: Ready (0/3 tasks complete)
- **Conflicts**: Overlaps with #1 on `src/auth.py`
- **Recommendation**: Implement after #1, update proposal.md first
- **Next Step**: `/iterate-on-plan <change-id>`
### 3. <change-id> — <title>
- **Relevance**: Likely Addressed (recent commits cover core requirements)
- **Readiness**: N/A
- **Conflicts**: N/A
- **Recommendation**: Verify and archive
- **Next Step**: `openspec archive <change-id>`
## Parallel Workstreams
### Stream A (start immediately)
- <change-id-1>: <title>
- <change-id-4>: <title>
### Stream B (after Stream A completes)
- <change-id-2>: <title>
### Sequential (conflicts with higher-priority proposals)
- <change-id-3>: Wait for <change-id-1>
## Conflict Matrix
| | proposal-a | proposal-b | proposal-c |
|---|---|---|---|
| proposal-a | — | `src/auth.py` | none |
| proposal-b | `src/auth.py` | — | none |
| proposal-c | none | none | — |
## Proposals Needing Attention
### Likely Addressed
- <change-id>: Recent commits appear to cover this. Verify and consider archiving.
### Needs Refinement
- <change-id>: Code drift detected. Update: proposal.md, tasks.md
--format json)Output a JSON object with the same structure:
{
"date": "YYYY-MM-DDTHH:MM:SS",
"analyzed_range": { "from": "<ref>", "to": "HEAD", "commit_count": N },
"proposals": [
{
"rank": 1,
"change_id": "<id>",
"title": "<title>",
"relevance": "still_relevant",
"readiness": "ready",
"task_progress": { "completed": 0, "total": 5 },
"conflicts": [],
"recommendation": "implement_next",
"next_step": "/implement-feature <id>"
}
],
"parallel_streams": {
"A": ["<id-1>", "<id-4>"],
"B": ["<id-2>"],
"sequential": [{ "id": "<id-3>", "blocked_by": "<id-1>" }]
},
"conflict_matrix": { "<id-a>": { "<id-b>": ["src/auth.py"] } },
"needs_attention": {
"likely_addressed": ["<id>"],
"needs_refinement": ["<id>"]
}
}
Write the report to the standard location:
REPORT_FILE="openspec/changes/prioritized-proposals.md"
Write the markdown report to this file (even if --format json was used, always persist the markdown version). Include the timestamp and analyzed git range in the header.
If --format json was requested, also write openspec/changes/prioritized-proposals.json.
Display the report to the user with actionable next steps:
Prioritization complete. <N> proposals analyzed.
Top recommendation: /implement-feature <top-change-id>
Full report: openspec/changes/prioritized-proposals.md
openspec/changes/prioritized-proposals.mdopenspec/changes/prioritized-proposals.json (if --format json)After reviewing the prioritization:
/implement-feature <top-change-id>
Or to refine a proposal that needs updates:
/iterate-on-plan <change-id>
testing
Create and edit Obsidian Flavored Markdown with wikilinks, embeds, callouts, properties, and other Obsidian-specific syntax. Use when working with .md files in Obsidian, or when the user mentions wikilinks, callouts, frontmatter, tags, embeds, or Obsidian notes.
tools
Interact with Obsidian vaults using the Obsidian CLI to read, create, search, and manage notes, tasks, properties, and more. Also supports plugin and theme development with commands to reload plugins, run JavaScript, capture errors, take screenshots, and inspect the DOM. Use when the user asks to interact with their Obsidian vault, manage notes, search vault content, perform vault operations from the command line, or develop and debug Obsidian plugins and themes.
data-ai
Create and edit Obsidian Bases (.base files) with views, filters, formulas, and summaries. Use when working with .base files, creating database-like views of notes, or when the user mentions Bases, table views, card views, filters, or formulas in Obsidian.
tools
Create and edit JSON Canvas files (.canvas) with nodes, edges, groups, and connections. Use when working with .canvas files, creating visual canvases, mind maps, flowcharts, or when the user mentions Canvas files in Obsidian.