A firm-wide urgency ranker. Every open case scored against four signals — overdue tasks, missing future events, days since last activity, HIGH-priority backlog — and the worst ones surfaced first. Built to find the cases that went quiet, not the ones that screamed the loudest yesterday.
At the prompt:
aaicase> which cases need attention
Or any of:
aaicase> case triage
aaicase> worst cases
aaicase> check all cases
About thirty seconds later you have a ranked list of every open case that scored above zero on the urgency rubric, with the top 15 expanded inline. It is the skill an attorney runs when they want to confront the cases they’ve been avoiding — not the ones with hearings this week (that’s morning brief), but the ones that went silent and haven’t been touched in months.
Workers’ Comp practice has a structural failure mode: the loud cases get attention; the quiet ones drift. A case with a hearing tomorrow surfaces in every workflow. A case where the QME came back six weeks ago and nothing has happened since does not.
The quiet cases are where malpractice lives. SOLs expire on cases nobody is looking at. Cases get reassigned to attorneys who don’t realize they exist. PD ratings come back and sit untouched until the client calls and asks why settlement is taking so long. The morning brief shows you what’s on fire today; this skill shows you what’s rotting in the corner.
One bash block, four parallel fetches:
node bin/merus-fetch.mjs /caseFiles/index → all open cases
node bin/merus-fetch.mjs /tasks/index → every open task
node bin/merus-fetch.mjs /events/index → every future event
node bin/merus-fetch.mjs /activities/index → recent activity (global)
All four endpoints feed the score — partial data would mislead the triage, so the skill stops with a clear error if any of the four fails. Everything lands in a per-run mktemp -d temp directory locked to chmod 700; deleted at the end.
The cases iterated are filtered to open status — closed, archived, and held cases are excluded. The score is computed in JavaScript directly from the fetched data; no second LLM pass, no string matching, no prompts.
Four signals, deliberately small in number so the ranking stays explicable. Each case’s score is the sum of the points from each signal that fires:
| Signal | Trigger | Points |
|---|---|---|
| Days since last activity | > 90 days | +40 |
| 30–90 days | +15 | |
| Overdue tasks (any priority) | 1–3 overdue | +10 each |
| 4+ overdue | +30 (capped) | |
| HIGH-priority overdue tasks | Any HIGH overdue | +20 |
| No upcoming events | Zero future events on the calendar | +20 |
The weights are intentionally chosen so:
Cases scoring zero (no signals firing) are not shown. The skill reports both the count of surfaced cases and the total open caseload so you know the denominator (“14 of 287 open cases need attention”).
The output splits surfaced cases into two brackets by score:
| Bracket | Score | Interpretation |
|---|---|---|
| CRITICAL | 50+ | Multiple signals firing. Likely going-cold + overdue tasks + no upcoming events. These are the cases that need a touchpoint this week. |
| NEEDS ATTENTION | 20–49 | One or two signals firing. Not crisis-level, but on the path. A health check or a single phone call usually resolves the flag. |
Below 20 are still flagged but only listed by number — not expanded inline — so the top 15 critical/needs-attention cases get the screen real estate.
Merus auto-generates “REVIEW (auto…),” “VERIFY (auto…),” and “Review filed orphan” tasks as side effects of various operations. The skill explicitly filters these out before counting overdue tasks. Otherwise a case with five autogenerated noise tasks looks identical to a case with five real overdue tasks — and the noise cases would surface first because they accumulate faster.
The same noise filter is documented in skills/status.md and shared with morning brief, process my tasks, and the case-level health check. Conservative by design: it filters only the prefixes that have never produced a real, attorney-actionable task in practice.
CASE TRIAGE — 14 of 287 open cases need attention
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CRITICAL (score 50+):
1. #[FILE-#] Doe, Jane v. Sample County Agency (score: 95)
145d since last activity, 5 overdue tasks,
2 HIGH priority overdue, no upcoming events
2. #[FILE-#] Roe, Maria v. Sample Industries (score: 75)
112d since last activity, 3 overdue tasks,
1 HIGH priority overdue, no upcoming events
3. #[FILE-#] Sample, Alex v. Sample Distribution (score: 60)
92d since last activity, 4 overdue tasks
NEEDS ATTENTION (score 20-49):
4. #[FILE-#] Doe, John v. Sample Foods (score: 45)
38d since last activity, 2 overdue tasks,
no upcoming events
5. #[FILE-#] Sample, Lee v. Sample Logistics (score: 35)
45d since last activity, no upcoming events
[...]
15. #[FILE-#] Doe, Pat v. Sample Manufacturing (score: 22)
33d since last activity, 1 overdue task
Want me to run a full health check on #[file] Doe, Jane?
| Which cases need attention | Morning brief | |
|---|---|---|
| Scope | Every open case in the firm | Cases with hearings/QMEs this week |
| Time horizon | Months of going-cold | Today and this week |
| Surfaces | The cases nobody’s touched | The cases that are about to break |
| Output | Top 15 ranked by score | Danger-scored cases with prep status |
| Cadence | Weekly or monthly | Daily |
They’re not substitutes — an attorney runs both, at different rhythms. Morning brief is the daily scan of what’s on fire. Which-cases-need-attention is the periodic confrontation with what got buried.
The pattern is the same in each case: surface the worst three to five, run a health check on each, decide one specific action per case (call the client, file the DOR, schedule the QME, write to defense), and create the task. Don’t boil the ocean. The skill ranks fifteen; you act on three.
Possible the activity index returned a thin global slice (it’s capped at ~2700 entries across all cases). For firms over a few hundred cases, the global slice may miss enough activity to make days-since-activity wrong on the longest-quiet cases — in which case the cases that should score 40+ might score 0 if recent activity outside the slice would have lowered the count. Run audit [case] on one or two cases you suspect are quiet — the audit fetches per-case activity unbounded.
The case is still in “Open” status (case_status_id 9413 by default). Flip its status in Merus — the skill filters open-only.
If they have overdue tasks or no other future events past the hearing, yes. That’s correct — an upcoming hearing doesn’t excuse overdue prep tasks. Run prep for hearing on them and clear the gap flags.
Read the flags string — the score is the sum of the listed flags. If “5 overdue tasks” shows but you’ve closed all five, the closes haven’t synced or the noise filter isn’t catching auto-generated tasks the firm uses. Run process my tasks on the case to walk through the open list and confirm.
The skill shows 15 expanded plus the total count. For the full list, run run report — Merus’s built-in “stale cases” report has the full surface.
Part of AAI for MerusCase — code-guarded AI case intelligence for California Workers’ Comp attorneys.