agentsclimarketplace

Plan backlog

Skill mataeil/OODA-loop/skills/plan-backlog

Score GitHub Issues using the RICE framework and propose a priority ordering. Strategize phase skill — turns raw issues into a ranked action plan written to agent/state/backlog.json.From its SKILL.md

Install
npx -y skills add mataeil/OODA-loop --skill plan-backlog

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
  • runs commandsInstructs the agent to run 3 commands, including `gh --version` and 2 more.

SKILL.md

6.8 KB, ~1.8k tokens by cl100k_base, as published. Nobody here has run it

plan-backlog: GitHub Issues RICE Scorer

Fetches open GitHub Issues, scores each with RICE (Reach × Impact × Confidence ÷ Effort), and outputs a ranked priority table. READ-ONLY — writes only to agent/state/backlog.json.


Step 0: Safety

HALT check — if config.safety.halt_file exists: print [HALT] plan-backlog stopped. Reason: {content} and exit.

gh check — run gh --version. If unavailable:

gh CLI not available. Skipping plan-backlog.
Install: https://cli.github.com  |  Auth: gh auth login

Exit cleanly (not an error).


Step 1: Load Issues

Remote check — before fetching issues, verify a GitHub remote exists:

git remote -v 2>/dev/null | grep -qE 'github\.com[:/]'

This checks for any remote pointing to GitHub (regardless of remote name — origin, upstream, etc.) and rejects non-GitHub remotes (GitLab, Bitbucket, etc.) that would cause gh to fail with a confusing error.

If no GitHub remote is found:

  • Print [plan-backlog] No GitHub remote configured. Backlog scoring requires a GitHub repository with issues. Skipping.
  • Write state file with "status": "no_remote" (preserve and increment run_count if state already exists)
  • Exit 0 — do NOT crash or show raw git errors

EVERY early-exit state write (no_remote, no_issues, fetch/parse error) MUST also include "actionable_items": 0, "top_rice_score": 0.0 — evolve's 4-B chain trigger evaluates those fields (actionable_items >= 1 AND top_rice_score >= 50); omitting them leaves the condition undecidable instead of cleanly false.

gh issue list --state open --json number,title,labels,body,createdAt,assignees --limit 100

On command error → Could not fetch issues. Is this a GitHub repository? Skipping. — exit 0. On malformed JSON (parse error) → treat identically to command error: log Could not parse gh output. Skipping. — exit 0. On empty array → write state with status: "no_issues", print No open issues to score. — exit 0.

Also read agent/state/backlog.json (if it exists) to carry forward run_count.


Step 2: RICE Scoring

Body cap: only the first 2000 characters of each issue body are considered for scoring (avoids runaway cost on mega-issues with embedded logs).

Deduplication: before scoring, group issues whose titles share >=80% similarity (case-insensitive Levenshtein ratio). Within each group, keep only the lowest-numbered (oldest) issue; mark the rest "deduplicated": true in the state scores array and set their rice_score to 0. The report notes: N duplicate issues collapsed.

For each issue estimate four components from title, labels, and body.

ComponentRangeLabel signals (highest match wins)Default
Reach0.0–1.0user-facing/ux/frontend → 0.8, api/perf → 0.6, internal/chore → 0.20.5
Impact0.25–3.0critical/P0 → 3.0, bug/security → 2.0, enhancement/P1 → 1.0, P2/low → 0.51.0
Confidence0.5–1.0≥3 labels + body>200 → 1.0, ≥1 label or body>100 → 0.8, bare issue → 0.50.8
Effort1–10 dayseasy/S → 1, L/needs-design or body>500 → 5, epic/XL → 83

Guard: Effort MUST be clamped to [1, 10] (never zero — prevents division-by-zero). When all issues share identical labels (or have no labels at all), every issue receives the same defaults; this is expected — relative ordering then falls back to Impact and Reach heuristics derived from the title and body text.

RICE = (Reach × Impact × Confidence) / Effort × 100   [round to 2 decimal places]

Step 3: Priority Table

Sort by RICE descending. Display the top 25 issues in the table (print ... and N more scored issues (see backlog.json) if truncated).

plan-backlog — <ISO timestamp>   Scored: N issues (showing top 25)
| #   | Title                                         | RICE  |  R  |  I  |  C  |  E  | Labels          |
|-----|-----------------------------------------------|-------|-----|-----|-----|-----|-----------------|
|  42 | Fix login redirect loop                       | 53.33 | 0.8 | 2.0 | 1.0 |   3 | bug, P0         |

Truncate titles to 45 chars with .... Truncate the Labels column to 20 chars with ... to keep rows aligned when issues carry many labels.


Step 4: State Update

Write to agent/state/backlog.json (create agent/state/ if missing):

{ "schema_version": "1.0.0", "last_run": "<ISO 8601>", "run_count": 1,
  "scored_count": 12, "unscored_count": 0, "status": "scored",
  "actionable_items": 12, "top_rice_score": 53.33,
  "duplicates_collapsed": 2,
  "scores": [{ "number": 42, "title": "Fix login redirect loop",
    "rice_score": 53.33, "reach": 0.8, "impact": 2.0, "confidence": 1.0,
    "effort": 3, "labels": ["bug", "P0"], "created_at": "<ISO 8601>",
    "deduplicated": false }] }

Every issue is scored (defaults applied when labels/body absent). status: "scored", "no_issues", or "no_remote".

The state MUST also include two top-level summary fields consumed by chain triggers:

"actionable_items": 12,
"top_rice_score": 53.33

actionable_items = count of scores where rice_score > 0. top_rice_score = maximum rice_score across all scored issues (0.0 when no issues).


Step 5: Report

Top 5 issues by RICE:
  1. #42 Fix login redirect loop (RICE 53.33) — bug, P0
  2. #7  Add dark mode toggle    (RICE 13.33) — enhancement
  ...

Recommendation: Start with #42. High-impact bug affecting most users.
Chain trigger will fire on next /evolve when top RICE > 50.

List all issues if fewer than 5. If none: No open issues to score. Backlog is clear.


Graceful Degradation

ScenarioBehavior
HALT file presentPrint reason, exit immediately
gh not installedPrint install hint, exit 0
No GitHub remote configuredWrite status: "no_remote", print message, exit 0
Not a GitHub repoPrint message, exit 0
Malformed gh JSON outputLog parse-error message, exit 0
No open issuesWrite status: "no_issues", exit 0
Issue has no labels or bodyApply all defaults; still scored
agent/state/ missingCreate directory, then write
backlog.json corruptRe-initialize as first run

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Gives 0 of the 12 instructions most plan spec skills give in ~1.8k tokens

Counted across 1,360 of the 2,617 authors here whose files we hold, read 2026-09-06

  • Ask one question at a timein 73 of 1360
  • Write the spec using the templatein 22 of 1360
  • Ask clarifying questions if neededin 19 of 1360, across 18 files
  • Wait for user confirmation before proceedingin 19 of 1360
  • Save plans to the plans directoryin 17 of 1360, across 13 files
  • Check for product marketing context firstin 16 of 1360, across 5 files
  • Read the plan file completelyin 16 of 1360
  • Order tasks by dependencyin 16 of 1360
  • Gather context from the conversationin 15 of 1360, across 9 files
  • Explore the codebase instead of askingin 15 of 1360, across 13 files
  • Wait for explicit user approvalin 14 of 1360, across 13 files
  • Quiz the user on the breakdownin 13 of 1360, across 7 files

Said here and by no other author read

  • Check for halt file presence
  • Score issues using RICE framework
  • Clamp effort to range one to ten
  • Sort issues by RICE score descending
  • Write state to backlog json file

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.