Estimate All
Fetch all active Linear tickets, estimate each one, and generate an HTML report at ~/work/estimates/index.html.
Usage
Step 1: Fetch Active Tickets
lc issue list --exclude-state Done,Canceled,Duplicate --order-by priority --limit 250 --json
Parse the JSON output. Each ticket has: identifier, title, description, estimate, state, assignee, priority, comments, labels.
Step 2: Estimate Each Ticket
For each ticket, assess complexity on four dimensions:
| Factor |
What to assess |
| Scope |
How many files, systems, or layers are touched? |
| Ambiguity |
Are requirements clear? Could two engineers build the same thing? |
| Dependencies |
Shared code, APIs, external services, coordination needed? |
| Risk |
Unknowns, edge cases, things that could go wrong? |
Use comments to inform your assessment. Comments often contain clarifications, scope changes, or technical context.
Map to points using this scale:
| Points |
Profile |
| 1 |
Trivial. Single file, no ambiguity, no risk. |
| 2 |
Small. Clear scope, 1-2 files, straightforward. |
| 3 |
Moderate. Multiple files, some decisions needed. |
| 5 |
Significant. Cross-cutting, design decisions, some unknowns. |
| 8 |
Large. High ambiguity, multiple systems, research needed. |
Only use values 1, 2, 3, 5, or 8.
Step 3: Generate HTML Report
Create ~/work/estimates/index.html (mkdir -p the directory first).
The HTML page should:
- Be a single self-contained file with inline CSS
- Have a clean, professional look with a table layout
- Show a summary header with: total tickets, estimated count, unestimated count, date generated
- Include a table with columns:
- ID (ticket identifier, linked if possible)
- Title
- State (with color coding: Todo=gray, In Progress=blue, In Review=purple, Backlog=dim, Triage=orange, QA=green, Blocked=red)
- Assignee
- Current (existing estimate from Linear, or "-")
- Recommended (your estimate)
- Match (checkmark if same, warning icon if different, dash if no current estimate)
- Reasoning (one-line summary of why)
- Sort by priority (Critical first, then Urgent, High, Medium, Low, No priority)
- Highlight rows where current and recommended estimates differ
- Include a filter bar to toggle: All / Unestimated only / Mismatched only
- Use a light color scheme
Step 4: Report Summary
After generating the HTML, output a brief summary:
## Estimates Report
Generated: ~/work/estimates/index.html
Tickets: [N] total, [X] estimated, [Y] unestimated, [Z] mismatched
### Mismatches (current != recommended)
- [ID] [title]: current [N] → recommended [M] ([reason])
Rules
- Do NOT update any Linear tickets. This is read-only.
- Do NOT read the codebase. Estimate from ticket content only.
- Only use point values 1, 2, 3, 5, or 8.
- If a ticket has no description and no comments, flag lower confidence in reasoning.
- If a ticket feels larger than 8, note it should be broken down.
1---2name: estimate-all3description: Estimate all active Linear tickets and generate an HTML report comparing current vs recommended story points.4---56# Estimate All78Fetch all active Linear tickets, estimate each one, and generate an HTML report at `~/work/estimates/index.html`.910## Usage1112- `/estimate-all`1314## Step 1: Fetch Active Tickets1516```bash17lc issue list --exclude-state Done,Canceled,Duplicate --order-by priority --limit 250 --json18```1920Parse the JSON output. Each ticket has: `identifier`, `title`, `description`, `estimate`, `state`, `assignee`, `priority`, `comments`, `labels`.2122## Step 2: Estimate Each Ticket2324For each ticket, assess complexity on four dimensions:2526| Factor | What to assess |27|--------|---------------|28| **Scope** | How many files, systems, or layers are touched? |29| **Ambiguity** | Are requirements clear? Could two engineers build the same thing? |30| **Dependencies** | Shared code, APIs, external services, coordination needed? |31| **Risk** | Unknowns, edge cases, things that could go wrong? |3233Use comments to inform your assessment. Comments often contain clarifications, scope changes, or technical context.3435Map to points using this scale:3637| Points | Profile |38|--------|---------|39| **1** | Trivial. Single file, no ambiguity, no risk. |40| **2** | Small. Clear scope, 1-2 files, straightforward. |41| **3** | Moderate. Multiple files, some decisions needed. |42| **5** | Significant. Cross-cutting, design decisions, some unknowns. |43| **8** | Large. High ambiguity, multiple systems, research needed. |4445Only use values 1, 2, 3, 5, or 8.4647## Step 3: Generate HTML Report4849Create `~/work/estimates/index.html` (mkdir -p the directory first).5051The HTML page should:52- Be a single self-contained file with inline CSS53- Have a clean, professional look with a table layout54- Show a summary header with: total tickets, estimated count, unestimated count, date generated55- Include a table with columns:56 - **ID** (ticket identifier, linked if possible)57 - **Title**58 - **State** (with color coding: Todo=gray, In Progress=blue, In Review=purple, Backlog=dim, Triage=orange, QA=green, Blocked=red)59 - **Assignee**60 - **Current** (existing estimate from Linear, or "-")61 - **Recommended** (your estimate)62 - **Match** (checkmark if same, warning icon if different, dash if no current estimate)63 - **Reasoning** (one-line summary of why)64- Sort by priority (Critical first, then Urgent, High, Medium, Low, No priority)65- Highlight rows where current and recommended estimates differ66- Include a filter bar to toggle: All / Unestimated only / Mismatched only67- Use a light color scheme6869## Step 4: Report Summary7071After generating the HTML, output a brief summary:7273```74## Estimates Report7576Generated: ~/work/estimates/index.html77Tickets: [N] total, [X] estimated, [Y] unestimated, [Z] mismatched7879### Mismatches (current != recommended)80- [ID] [title]: current [N] → recommended [M] ([reason])81```8283## Rules8485- Do NOT update any Linear tickets. This is read-only.86- Do NOT read the codebase. Estimate from ticket content only.87- Only use point values 1, 2, 3, 5, or 8.88- If a ticket has no description and no comments, flag lower confidence in reasoning.89- If a ticket feels larger than 8, note it should be broken down.