Skip to content
Back to skills

Triage

ASecurity

Route orphaned inbox files and pull scattered `- [ ]` tasks into the right project/person/goal using current priorities. Use when the user says 'clean up my inbox', 'triage', 'sort out these notes'. Also use proactively when `00-Inbox/` is piling up. Not for updating notes from meetings; use `process-meetings`.

  • 489 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 2, 2026
ai-agentsgo

Works with

  • mcp

Security analysis

A100/100

Scanned September 25, 2026

npx -y skills add davekilleen/Dex --skill triage --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Triage?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Triage
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/davekilleen-triage-dex/badge)](https://www.skillsdirectory.com/skills/davekilleen-triage-dex)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: triage
description: "Route orphaned inbox files and pull scattered `- [ ]` tasks into the right project/person/goal using current priorities. Use when the user says 'clean up my inbox', 'triage', 'sort out these notes'. Also use proactively when `00-Inbox/` is piling up. Not for updating notes from meetings; use `process-meetings`."
model_hint: fast
---

<!-- Generated from `.claude/skills/triage/SKILL.md` by `scripts/generate-agents-skills.py`. Do not edit. -->

Cleanup and routing tool that finds standalone files and scattered tasks, then suggests where they belong using your current strategic context (Week Priorities + Quarterly Goals).

## Execution Style

This skill handles quick decisions. Be concise. Don't over-analyze. Make a routing decision and move on. Target: <2 seconds of thinking per item.

## What It Does

- **Files**: Routes standalone files in `00-Inbox/` to projects, person pages, or resource folders
- **Tasks**: Finds unchecked `- [ ]` tasks scattered across notes and routes them appropriately
- **Strategic**: Uses your Week Priorities and Quarterly Goals to inform routing confidence

## Usage

- `/triage` - Process everything (files + tasks)
- `/triage files` - Organize standalone files only
- `/triage tasks` - Extract and route tasks only

## Arguments

$MODE: Optional. "files" | "tasks" | "all". Default: "all"

---

## Step 0: Load Strategic Context & Structure Discovery

Before processing inbox items, load strategic context and build an index of existing entities. This makes triage strategically aware and enables intelligent routing.

### 0. Load Strategic Context

Read these files to understand current priorities:

1. **Week Priorities**: `02-Week_Priorities/Week_Priorities.md`
   - Extract this week's Top 3 focus items
   - Note any specific projects/people mentioned
   - Capture keywords and themes

2. **Quarterly Goals**: `01-Quarter_Goals/Quarter_Goals.md`
   - Extract current quarter's goals
   - Note associated projects and outcomes
   - Capture keywords and themes

This context will inform routing decisions - entries matching current priorities get higher confidence scoring and are surfaced first.

### 1. Scan Projects

List all files in `04-Projects/`:
- Extract project name from filename (convert underscores to spaces)
- Read frontmatter if present for description, status, pillar
- Build index: `{ name, path, description, status, pillar }`

### 2. Scan People

List all files in `05-Areas/People/External/` and `05-Areas/People/Internal/`:
- Extract name from filename
- Read frontmatter/metadata table for role, company
- Build index: `{ name, path, company, role, type: internal|external }`

### 3. Scan Role-Specific Areas

List any additional folders under `05-Areas/` that aren't People or Career:
- These may be role-specific areas created during setup (e.g., Accounts/, Team/, Content/)
- Extract relevant names from filenames
- Build index: `{ name, path, type: area_type }`

### 4. Read Pillars

Parse `System/pillars.yaml`:
- Extract pillar names, descriptions, and keywords
- These inform categorization when no entity match is found

---

## Step 0.5: Semantic Matching Enhancement (if QMD available)

**This step activates automatically when QMD is installed.** It dramatically improves routing accuracy by matching inbox items to goals, projects, and people by **meaning**, not just keywords.

Check if QMD MCP tools are available by calling the `status` tool (QMD MCP). **If available:**

After loading strategic context (Step 0), enhance matching with semantic search:

1. **For each inbox item**, run:
   ```
   query(query="[item title + first 100 words of content]", limit=5)
   ```
   This finds vault content related by meaning. "Email about onboarding flow" matches "Q1 goal: improve activation rate" even though they share no keywords.

2. **For task deduplication**, use semantic similarity instead of keyword overlap:
   ```
   query(query="[task description]", limit=3)
   ```
   Catches semantic duplicates: "Review Q1 metrics" detected as duplicate of "Check quarterly pipeline numbers".

3. **For goal alignment scoring**, run:
   ```
   query(query="[item content]", limit=3)
   ```
   against quarterly goals and weekly priorities. Items semantically related to active goals get a +25 confidence boost.

**How this changes matching:**

| Aspect | Without QMD (keyword) | With QMD (semantic) |
|--------|----------------------|---------------------|
| Goal matching | Exact keyword overlap only | Meaning-based: "churn analysis" matches "retention goal" |
| Duplicate detection | >60% string similarity | Semantic similarity: different words, same intent |
| Person matching | Name must appear in text | Role/title references found: "the sales VP" → Sarah Chen |
| Project matching | Project name in filename | Thematic connection: "pricing update" → "Acme Deal" project |

**Merge semantic scores with entity scores** from Step 0. The combined confidence determines routing priority.

**If QMD is not available:** Skip silently. The standard keyword-based matching in the steps below handles routing with existing patterns.

---

## Mode: Files

Organize standalone files in the `00-Inbox/` folder by suggesting where they belong.

### Process

1. **Scan 00-Inbox/**
   - List all files (exclude Week Priorities.md, README.md)
   - Read each file's content

2. **Match Against Strategic Context & Entities**

   For each inbox file, check in this order:

   | Check | Match Criteria | Action | Confidence Boost |
   |-------|---------------|--------|------------------|
   | **Week Priority match** | Content relates to this week's Top 3 priorities | Route to associated project/person, flag as HIGH priority | +30 points |
   | **Quarterly Goal match** | Content relates to current quarter's goals | Route to associated project, flag as strategic | +20 points |
   | **Project match** | File mentions project name, or filename contains project reference | Route to specific project file | +10 points if also matches priority |
   | **Person match** | File is about a specific person, contains their name prominently | Route to person page OR suggest linking | +10 points if person mentioned in priorities |
   | **Company match** | File mentions company name, or attendees from known domain | Route to company page in 05-Areas/Companies/ | Base confidence |
   | **Pillar keyword match** | Content matches pillar keywords | Tag with pillar, suggest relevant category | Base confidence |
   | **No entity match** | None of the above | Fall back to category routing | Low confidence |

3. **Category Fallback Rules**

   When no specific entity matches, use these rules:

   | Destination | Criteria |
   |-------------|----------|
   | `04-Projects/` | Has deadline, specific outcome, time-bound |
   | `05-Areas/[specific area]/` | Belongs to a role-specific area (Accounts/, Team/, Content/) |
   | `05-Areas/People/` | Person-specific information |
   | `06-Resources/` | Reference material, knowledge, learnings |
   | `07-Archives/` | Old/completed, no longer active |
   | Delete | No value, redundant, or temporary |

4. **Present Suggestions with Strategic & Entity Context**

   Show what was matched, prioritizing items that align with current priorities:

   ```
   File: [filename]
   Strategic Context: [Week Priority/Q Goal if matched]
   Match: [entity type] → [specific entity name]
   Destination: [exact path]
   Confidence: [high/medium/low] ([score]/100)
   Action: [suggested action]
   ```

   **Sort order:**
   1. Items matching Week Priorities (highest confidence first)
   2. Items matching Quarterly Goals
   3. Items matching known entities (projects, people, companies)
   4. Generic category routing
   
   **Flag misalignments:**
   - If multiple entries relate to something NOT in priorities/goals, surface it: "You've captured 5 items about [topic]. Consider adding to priorities?"

5. **Execute with Confirmation**
   - Show full plan
   - Wait for user approval
   - Move files using `mv` (not copy)
   - For merges, append content to existing file

---

## Mode: Tasks

Extract uncompleted tasks from notes and route them appropriately.

### Process

1. **Scan Sources**
   - `00-Inbox/Meetings/*.md` - Meeting action items
   - `00-Inbox/*.md` - Captured tasks
   - Any file with unchecked tasks `- [ ]`

2. **Extract Tasks**
   - Find all `- [ ]` items
   - Note the source file for each
   - Extract any mentioned names, projects, companies

3. **Match Tasks to Entities**

   For each task:
   - Check if it mentions a known project → suggest adding to that project
   - Check if it mentions a known person → suggest linking to person page
   - Check if it mentions a known company → suggest linking to company

4. **Deduplication Check**

   For each task, check against `03-Tasks/Tasks.md`. Flag items with >60% similarity
   to existing tasks. (The Work MCP `create_task` tool runs its own similarity gate at
   creation time — this pre-check is so you can show duplicates to the user before
   proposing a route, not a replacement for the tool's gate.)

5. **Ambiguity Detection**

   Flag tasks that are:
   - Less than 3 words
   - Match vague patterns (e.g., "fix bug", "follow up", "research X")

   Generate clarification questions for ambiguous items.

6. **Present Results**

   **Ready to Route** (clear, non-duplicate items):
   - Show suggested destination with entity context
   - Show pillar if detectable
   - Show any linked entities

   **Potential Duplicates** (>60% similarity):
   - Show the existing task it matches
   - Ask: Skip / Merge / Keep Both

   **Needs Clarification** (ambiguous):
   - Show the issue
   - Ask clarifying questions
   - Wait for user input

7. **Route with Confirmation**
   - **Actionable task → Work MCP `create_task`.** Never append task checkboxes to
     files by hand — hand-written tasks get no task ID, so completion sync, dedup,
     and goal rollups can't see them. Pass what triage learned: `pillar` (confirmed
     with the user), `priority`, `due` if a date was mentioned, `weekly_priority_id`
     if it supports a weekly priority, `people`/`account` page paths for anyone
     involved, and `project`/`goal` when the item clearly belongs to one. If the
     tool flags a duplicate the user already reviewed in step 6 and chose "Keep
     Both", retry with `on_duplicate: "force"`.
   - To Project: Add non-task context to the relevant project file
   - To Person: Add non-task context to the person page
   - Skip: Don't process
   - Defer: Leave for later

8. **Queue-Jump Check (one line, only when it applies)**

   After routing, for each created task that landed under a goal: call
   `get_goal_backlog(goal_id)` once. If that goal's tasks carry a groomed
   `next_up` order, ask in a single line whether the new item jumps the queue —
   "This lands under Goal X, which has a groomed order — should it go first?"
   If yes, call `set_task_next_up(task_id, next_up=1)` (or the position they
   name). If the goal has no next-up order, say nothing — grooming belongs to
   `/goal-backlog`, not triage.

---

## Mode: All (Default)

Process all orphaned items:
1. Load strategic context (Week Priorities + Quarterly Goals)
2. Run structure discovery (projects, people, companies)
3. Organize standalone files in `00-Inbox/`
4. Extract and route scattered unchecked tasks from all notes

---

## Example Output

```
📬 Triage Report

=== STRATEGIC CONTEXT ===
Week Priorities:
• Mobile App Launch (beta by Friday)
• Q2 Planning finalization
• Sarah's team onboarding

Quarterly Goals:
• Launch mobile app beta (Q1)
• Expand into EMEA market (Q2)
• Build product marketing team (Q1)

=== STRUCTURE DISCOVERED ===
• 4 projects found in 04-Projects/
• 12 people found in 05-Areas/People/
• 3 companies found in 05-Areas/Companies/
• 3 pillars configured

=== FILES (2) ===

1. "Screenshot 2026-01-28.png"
   Found in: 00-Inbox/
   Strategic Context: (no automatic match - image file)
   Suggested: Review manually or describe context
   
2. "Q1_Planning_Notes.md"
   Strategic Context: ✓ Week Priority "Q2 Planning" (related)
   Match: PROJECT → "Q2 Planning"
   Destination: 04-Projects/Q2_Planning.md
   Confidence: MEDIUM (70/100)
   Action: Merge into Q2 Planning project?

=== TASKS (4) ===

🎯 HIGH PRIORITY - MATCHES WEEK PRIORITIES (1):

1. "- [ ] Finalize mobile app pricing model"
   Found in: 04-Projects/Mobile_App_Launch.md
   Strategic Context: ✓ Week Priority "Mobile App Launch" + Q1 Goal
   Match: Already in correct project
   Confidence: HIGH (95/100)
   Action: Extract to Week Priorities for visibility?

📋 NEEDS ROUTING (2):

2. "- [ ] Follow up with Sarah about timeline concerns"
   Found in: random meeting note
   Strategic Context: ✓ Week Priority "Sarah's team onboarding"
   Match: PERSON → "Sarah Chen"
   Destination: Add to Sarah's person page action items
   Confidence: HIGH (85/100)

3. "- [ ] Review competitor pricing"
   Found in: scattered note
   Strategic Context: (no direct priority match)
   Match: PILLAR → "Product Strategy"
   Destination: Week Priorities or Tasks.md?
   Confidence: MEDIUM (60/100)

⚠️ DUPLICATE (1):

4. "- [ ] Reach out to Sarah"
   Found in: old meeting note
   78% match with existing task in Week Priorities
   Action: Skip / Merge / Keep both?

=== TASKS (5 items) ===

✅ READY TO ROUTE (3):
1. "Follow up with Sarah about Q1 budget"
   → Week Priorities
   Links: People/External/Sarah_Chen.md

2. "Prep slides for conference"
   → Week Priorities
   Pillar: Thought Leadership

3. "Review competitor analysis for Acme deal"
   → 04-Projects/Acme_Deal.md (project match)
   Links: 05-Areas/Companies/Acme_Corp.md

⚠️ POTENTIAL DUPLICATE (1):
4. "Contact Tom about implementation"
   → 78% match with "Reach out to Tom" in Week Priorities
   [s]kip / [m]erge / [k]eep both?

❓ NEEDS CLARIFICATION (1):
5. "Fix the bug"
   - Too vague. Which bug? What system?

---
Proceed with ready items? [y/n]
```

---

## How Structure Discovery Evolves

Because discovery happens at runtime:
- **New projects** are automatically recognized in the next triage
- **New people pages** become available for matching
- **New companies** get detected
- **Custom folders** you add are included as destinations

No configuration needed - triage adapts as your structure grows.

---

## Notes

- Never auto-route without confirmation
- Duplicates require explicit decision
- Ambiguous items block until clarified
- Use `mv` not `cp` when moving files
- Entity matches show confidence level (high/medium/low)
- Multiple entity matches are shown for user to choose

---

## Track Usage (Silent)

Call the `mark_feature_used` tool on the `dex-analytics` MCP server with `triage`. This ticks the feature's box in `System/usage_log.md`, which is what `/dex-level-up` reads to recommend features that have not been tried. It writes locally and sends nothing, so it runs whether or not analytics is enabled.

**Analytics (Silent):**

Call `track_event` with event_name `triage_completed` and properties:
- items_processed
- tasks_extracted
- files_routed

This only fires if the user has opted into analytics. No action needed if it returns "analytics_disabled".

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.