Skip to content
Agent Orchestration
Skill

/work-summary

Generates a project dashboard from MCP work items. Default is a lean, attention-first view: what's in flight, what's blocked, what to do next, what's queued. Use when the user says: project status, what's active, show me the dashboard, work summary, what should I work on,

BOOST
From plugin
task-orchestrator
20929 skills4 agents2 commands
Install
$ npx -y skills add jpicklyk/task-orchestrator --skill work-summary --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/work-summary

Context preview

The summary Claude sees to decide when to auto-load this skill.

Generates a project dashboard from MCP work items. Default is a lean, attention-first view: what's in flight, what's blocked, what to do next, what's queued. Use when the user says: project status, what's active, show me the dashboard, work summary, what should I work on,

SKILL.md

work-summary.SKILL.md
name: work-summary
description: "Generates a project dashboard from MCP work items. Default is a lean, attention-first view: what's in flight, what's blocked, what to do next, what's queued. Use when the user says: project status, what's active, show me the dashboard, work summary, what should I work on, project health, what's blocked, where did I leave off, show items, what's in the backlog, overview, or any request to see or review the current state of work items. Also use at session start when gathering current project context."
argument-hint: "[full | container UUID or title to scope the summary]"

Work Summary — Current (v3)

Attention-first project dashboard. The default (lean) mode answers four questions — what's moving, what's stuck, what's next, what's queued — in a bounded view (~45 lines) regardless of workspace size. The exhaustive inventory is available as an explicit mode, not the default: mature workspaces accumulate hundreds of terminal items, and rendering them all buries the actionable content.

Supplement the data with brief observations only when there is a genuine anomaly or actionable insight.

---

Step 0 — Mode Selection

| `$ARGUMENTS` | Mode | |--------------|------| | empty | **Lean** (default) | | the literal word `full` | **Full Inventory** | | the literal word `all` | **Multi-Project** — one condensed section per known project root | | anything else | **Scoped** — resolve to a UUID via `query_items(operation="search", query=$ARGUMENTS, limit=5)`; prefer the best-matching root or container item; if ambiguous, present matches via `AskUserQuestion` |

---

Step 0.5 — Project Scope Resolution

Before running Lean, Full, or Multi-Project mode, resolve the scope:

  • Check session context from the SessionStart hook. A `## Project Scope` section carries a **project rootId**, which scopes reads (`ancestorId`/`anchorId`) and anchors. A `## Personal Scope` section carries a **personal root**, which only anchors new items: in personal scope every call below runs unscoped (whole database) and the header says `personal scope — whole database`.
  • Otherwise, read `.taskorchestrator/config.yaml`'s top-level `project.rootId` field (a file read, not an MCP call).
  • **If no rootId is found by either path, behavior is exactly as before this feature existed** — every call below runs unscoped (whole-DB), and no `ancestorId`/`anchorId` param is passed. This is the common case for single-project workspaces.

When a project rootId is known, Lean and Full mode calls pass it as `ancestorId="<rootId>"` — except the `overview` calls, which use `anchorId="<rootId>"` (all noted inline below). Scoped mode is unaffected — it already resolves its own scope UUID per invocation via FTS.

---

Lean Mode (default)

Data collection (all parallel)

1. `query_items(operation="overview", excludeTerminal=true)` — non-terminal roots with their `childCounts` role roll-ups only. `includeChildren` is deliberately omitted: it is a **no-op on the anchored (project-scoped) path** — the anchored overview never returns per-child arrays, only `childCounts` — and unnecessary on the global path, since the step-5 queue-list is the canonical source for individual children. Add `anchorId="<rootId>"` when a rootId is known, to anchor the overview to this project. **Detecting an older server:** MCP servers **silently ignore** unknown parameters (they return `200` with the full unfiltered payload) rather than rejecting them — so a server predating `excludeTerminal` will *not* error. Detect the no-op by inspecting the payload: **if any returned root has `role: "terminal"` AND its `childCounts` show only terminal descendants (no `queue`/`work`/`review`/`blocked`), the filter was not applied.** Note the qualifier: a current server intentionally *retains* a terminal-role root that still has non-terminal descendants (it is active work parked under a done container), so a terminal root **with** open descendants is expected, not evidence of an old server. When the no-op is detected, (a) drop client-side only those terminal roots whose `childCounts` show no open descendants during enrichment, and (b) if the response is also `truncated: true`, re-issue with `limit=<total>` (still passing `anchorId` if known) so non-terminal roots in the tail (e.g. active containers) are not silently dropped — a truncated *unfiltered* payload can hide real workstreams. Headline counts never come from this payload regardless (see the role-total queries below), so correctness holds either way; this only recovers the workstream/backlog completeness the filter was meant to guarantee. 2. `get_context()` — health-check: active items, blocked items, stalled items, claim summary. Add `ancestorId="<rootId>"` when known. 3. `get_context(mode="session-resume", since="<now minus 48h, ISO 8601>")` — recent role transitions (the "where did I leave off" signal). Add `ancestorId="<rootId>"` when known — but note the **known limitation**: `recentTransitions` is NOT scoped by `ancestorId` even when passed; it always reflects the whole tree, not just this project. 4. `get_next_item(limit=5, includeDetails=true)` — ranked recommendations with parentId/tags. Add `ancestorId="<rootId>"` when known. 5. `query_items(operation="search", role="queue", limit=100)` — **the canonical source for queue children.** Group its rows by `parentId` to get each workstream's "next up" (the queue children the anchored overview omits); each row carries `parentId`, `depth`, `priority`, and `type`/tags. `total` gives the true queued count. Add `ancestorId="<rootId>"` when known. **Exclude shelves from the headline:** subtract rows whose `type` or tag is `container` or `project` — a freshly-created container/anchor sits in `queue` role until its first advance and would otherwise inflate `N queued`. If `total` exceeds the returned page (queue backlog >100), note the headline count is approximate. 6. `query_items(operation="search", role="terminal", limit=1)` — read `

Read more
Ships withtask-orchestrator

Server-enforced workflow discipline for AI agents. Prompt-based frameworks hope the LLM follows instructions. This one blocks the call if it doesn't.

Get the whole plugin

Other skills on task-orchestrator.