Slack Standup Digest
OpenHands/extensions
Create an automation that generates an async standup digest from Slack.
Generates a project dashboard from MCP work items. An agent skill from jpicklyk/task-orchestrator.
$ npx skills add jpicklyk/task-orchestrator --skill work-summary -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jpicklyk/task-orchestrator work-summary --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .claude/skills && cp -r skills-src/claude-plugins/task-orchestrator/skills/work-summary .claude/skills/work-summary && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "work-summary" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/claude-plugins/task-orchestrator/skills/work-summary into .claude/skills/work-summary/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "work-summary", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jpicklyk/task-orchestrator/tree/main/claude-plugins/task-orchestrator/skills/work-summaryType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jpicklyk/task-orchestrator --skill work-summary -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jpicklyk/task-orchestrator work-summary --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .agents/skills && cp -r skills-src/claude-plugins/task-orchestrator/skills/work-summary .agents/skills/work-summary && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "work-summary" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/claude-plugins/task-orchestrator/skills/work-summary into .agents/skills/work-summary/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "work-summary", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jpicklyk/task-orchestrator --skill work-summary -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jpicklyk/task-orchestrator work-summary --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/claude-plugins/task-orchestrator/skills/work-summary .cursor/skills/work-summary && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "work-summary" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/claude-plugins/task-orchestrator/skills/work-summary into .cursor/skills/work-summary/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "work-summary", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jpicklyk/task-orchestrator.git --path claude-plugins/task-orchestrator/skills/work-summary--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jpicklyk/task-orchestrator --skill work-summary -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jpicklyk/task-orchestrator work-summary --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/claude-plugins/task-orchestrator/skills/work-summary .gemini/skills/work-summary && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "work-summary" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/claude-plugins/task-orchestrator/skills/work-summary into .gemini/skills/work-summary/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "work-summary", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jpicklyk/task-orchestrator work-summaryInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jpicklyk/task-orchestrator --skill work-summary -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .github/skills && cp -r skills-src/claude-plugins/task-orchestrator/skills/work-summary .github/skills/work-summary && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "work-summary" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/claude-plugins/task-orchestrator/skills/work-summary into .github/skills/work-summary/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "work-summary", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jpicklyk/task-orchestrator --skill work-summary -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jpicklyk/task-orchestrator work-summary --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/claude-plugins/task-orchestrator/skills/work-summary .opencode/skills/work-summary && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "work-summary" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/claude-plugins/task-orchestrator/skills/work-summary into .opencode/skills/work-summary/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "work-summary", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
work-summaryGenerates a project dashboard from MCP work items. An agent skill from jpicklyk/task-orchestrator.
Work Summary is an agent skill from jpicklyk/task-orchestrator. 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.
Its SKILL.md is about 4.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Productivity & Automation, covering Time tracking and reporting. It works with Model Context Protocol. The repository describes itself as: Server-enforced workflow discipline for AI agents. An MCP server providing persistent work items, dependency graphs, quality gates, and actor attribution. Schemas define what… The licence is MIT.
2 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit b688ea0. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Work Summary loads about 4.3k tokens when it runs. Until then it costs about 129 tokens; SKILL.md has 1,963 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from jpicklyk/task-orchestrator at commit b688ea0, republished under its MIT licence (© jpicklyk). 1,963 words, ~4,339 tokens.
.claude/skills/work-summary/SKILL.md (or your agent's skills folder).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.
$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 |
Before running Lean, Full, or Multi-Project mode, resolve the scope:
## 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..taskorchestrator/config.yaml's top-level project.rootId field (a file read, not an MCP call).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.
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.get_context() — health-check: active items, blocked items, stalled items, claim summary. Add ancestorId="<rootId>" when known.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.get_next_item(limit=5, includeDetails=true) — ranked recommendations with parentId/tags. Add ancestorId="<rootId>" when known.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.query_items(operation="search", role="terminal", limit=1) — read total for the true terminal count. Add ancestorId="<rootId>" when known.Headline counts must come from these sources, never from eyeballing the overview payload — overview covers the roots set with childCounts roll-ups only and may be truncated.
type = container never count as active; exclude them from the active/In Flight lists.activeItems minus containers. Blocked/stalled = health-check lists as-is.terminal / total from childCounts, rendered N/M terminal (not done — the terminal bucket includes cancelled items, so labeling it "done" overstates completion); "next up" = the highest-priority queue row from the step-5 queue-list whose parentId is that root.type field if set; else the first tag not in {agent-observation, feature, container}; else "Uncategorized".action-item.mtest-* tags).Render in this order; omit any section with no data.
## ◆ Work Summary
[One sentence: health and momentum.]
**N active · N blocked · N stalled · N queued · N terminal**
### ◉ In Flight
| ID | Item | Container | Status | Pri |
|----|------|-----------|--------|-----|
| `xxxxxxxx` | <title> | <parent title or —> | ◉ work | high |
↳ Recent: <up to 3 one-line transition summaries from session-resume, newest first — omit line if none in 48h>
### ⊘ Attention Required
| ID | Item | Container | Issue |
|----|------|-----------|-------|
| `xxxxxxxx` | <title> | <parent or —> | Blocked by: `<blocker-id>` <blocker-title> |
| `yyyyyyyy` | <title> | <parent or —> | Stalled: missing `<note-key>` (trait: <trait-name> if applicable) |
### ▸ Recommended Next
| ID | Title | Container | Pri |
|----|-------|-----------|-----|
### ○ Backlog
**Workstreams**
| ID | Workstream | Progress | Next up | Pri |
|----|-----------|----------|---------|-----|
| `xxxxxxxx` | <root title> | 2/5 terminal | <queue child title> | high |
**<Kind>** (N): `id` <title> (pri) · `id` <title> (pri) · ... ← groups of ≤5
**<Kind>** (N): X bug · Y optimization · Z friction — highest: `id` <title> (pri) ← groups of >5
### ✓ Terminal — N terminal items
↳ Hygiene: <N> test artifacts, <N> empty containers — candidates for /batch-completeLean-mode rules:
full mode for the breakdown.$ARGUMENTS = full)Everything lean mode shows, plus the complete per-container inventory.
query_items(operation="overview", limit=<total>) — the compact roots list, without includeChildren. Add anchorId="<rootId>" when a rootId is known, to anchor the roots list to this project. It carries each root's role, statusLabel, childCounts, tags, and type but pulls no subtree, so it stays under the tool-result token ceiling even on mature workspaces. If the first call reports truncated: true, re-issue once with limit=<total>.childCounts show non-terminal children), in parallel: query_items(operation="overview", itemId="<root-id>", excludeTerminal=true) — returns that container plus its open children, plus any terminal-role child that itself still has non-terminal descendants (scoped excludeTerminal filters the children array by role but retains done-labeled sub-containers holding open work; childCounts stays full). Each call is bounded to one container's open work. These are already itemId-scoped and need no ancestorId.get_context() — health-check. Add ancestorId="<rootId>" when known.get_next_item(limit=5, includeDetails=true). Add ancestorId="<rootId>" when known.limit=1; the queued headline via the role="queue" list with container/project exclusion (lean step 5). Same ancestorId rule.Never fetch every root's children in one call (overview includeChildren=true across the whole tree). On a mature workspace the combined terminal subtrees exceed the tool-result token ceiling — the per-container scoped fetch in step 2 is what keeps full mode bounded. Terminal children are counted, not enumerated: the ✓ N terminal footer comes from childCounts, never from pulling the terminal subtree. To see a specific container's completed items, run Scoped mode on that container (one bounded subtree).
Health Headline — same as lean mode; counts from health-check + role-total queries, containers excluded from active.
Attention Required — same as lean mode.
Recommended Next — same as lean mode (deliberately above the inventory).
Project Inventory — for each active container (root with non-terminal children), rendered from its step-2 scoped fetch:
#### <Container Title> `<8-char-id>`
<role-symbol> <role> · <N open> · <N terminal>
| ID | Title | Status | Pri | Tags | Children |
|----|-------|--------|-----|------|----------|
✓ N terminal — terminal children are counted (from childCounts), not listedexcludeTerminal fetch returns exactly these. Sort: ◉ active first, then ⊘ blocked, then ○ queue.<N open> = queue + work + review + blocked from childCounts; <N terminal> = terminal from childCounts. Terminal children are never fetched — run Scoped mode on this container to see them.N○ N◉ N⊘ N✓ built from the child's own childCounts in the scoped payload (omit zero roles; — if childless).—; traits append with ▸ prefix, needs- stripped (feature-task ▸migration-review).Standalone Items — non-terminal childless roots, grouped by the shared grouping key (below). One tag group → flat table with Tags column; multiple groups → subheading per group, Tags column omitted.
Terminal — header ### ✓ Terminal — N terminal (N from the terminal role-total query). Split root-level terminal items by their statusLabel (present in the step-1 roots list): **Completed containers:** <title> (N children) · ..., **Completed standalone:** <title> · ... (+N more if >5), and **Cancelled:** <title> · .... Cancelled roots are listed separately — never presented as completed work. Child-level terminal items are accounted by count via childCounts (not enumerated); their done/cancelled split is available through Scoped mode on the owning container.
Empty containers — **Empty (no items):** <title>, <title> at the end of the inventory if any exist.
$ARGUMENTS = UUID or title)Unchanged by project scoping — already resolves its own scope UUID per invocation, independent of any project rootId.
Use the resolved UUID as the scope for full-inventory-style rendering of one subtree:
query_items(operation="overview", itemId="<parentId>") — scoped overview.get_context() — global; filter to the scope during enrichment.get_next_item(limit=5, parentId="<parentId>", includeDetails=true) — scoped recommendations.Render the Full Inventory sections for that subtree only. All shared rules apply.
$ARGUMENTS = all)Enumerate every known project anchor and render one condensed section per project — for workspaces where multiple project roots share the same database.
query_items(operation="search", type="project", depth=0) — list all depth-0 items typed project (the anchors created by /task-orchestrator:init, /adopt-project-scope, or by hand). An anchor tagged personal-root is the personal root; label it (personal) in its section header./task-orchestrator:init to bootstrap one, or use /work-summary (no arguments) for the whole-DB view."query_items(operation="overview", anchorId="<anchor-id>", excludeTerminal=true)get_context(ancestorId="<anchor-id>")get_next_item(limit=3, includeDetails=true, ancestorId="<anchor-id>")Render, per project, with a clear per-project header:
### ◆ <Project Name> (`<8-char-id>`)
N active · N blocked · N queued
**Attention:** <up to 2 blocked/stalled items, or "none">
**Next up:** <top get_next_item result, or "nothing queued">Keep each section condensed — this mode is a cross-project scan, not a per-project deep dive. Point the user at /work-summary (unscoped, or with that project's rootId once resolved) for the full dashboard on any one project.
Status symbols: ✓ terminal · ◉ work/review · ⊘ blocked/stalled · ○ queue
Short IDs: first 8 chars of the UUID in backticks: `af21ed9a`. Use — for empty values, not 0 or blank. Priority renders as high / med / low.
Grouping key (standalone items, all modes): type field if set; else first tag not in {agent-observation, feature, container}; else "Uncategorized". The generic tag is never the group — the specific one is.
Containers (tag or type container) are never counted as active work in any headline or In Flight list, regardless of their role.
statusLabel: the item's role drives the status symbol. Print the statusLabel text only when the item is non-terminal AND the label differs from the role's default. Never print statusLabels on terminal items — stale in-progress labels on terminal items are a known artifact (bug 100da214).
Cancelled ≠ done: wherever terminal items are broken down, count statusLabel: "cancelled" separately.
Truncation: if any data-collection response had truncated: true that you could not resolve by re-fetching, end the dashboard with ⚠ showing X of Y root items — never silently drop data.
Observations: write them sparingly — only for a genuine anomaly, bottleneck, or actionable insight. A healthy project needs zero observations.
Do NOT render a UUID reference table. Retain the short→full UUID mapping as internal context; when the user references a short ID in a follow-up (e.g., "start 0499a6aa"), resolve it silently for the MCP call from the data already collected.
© jpicklyk, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in claude-plugins/task-orchestrator/skills/work-summary of jpicklyk/task-orchestrator.
Open the folder on GitHubat commit b688ea0
Work Summary next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Work Summary this skilljpicklyk/task-orchestrator | 207 | — | ~4.3k | Automated safety check: Pass | MIT | |
| Slack Standup DigestOpenHands/extensions | 157 | — | ~837 | Automated safety check: Pass | MIT | |
| Stock Historical IndexOctagonAI/skills | 127 | — | ~2k | Automated safety check: Pass | MIT | |
| AgentRQ Workspace Agentagentrq/agentrq | 1.1k | — | ~1.9k | Automated safety check: Pass | AGPL-3.0 | |
| Webctlcosinusalpha/webctl | 419 | — | ~1.7k | Automated safety check: Pass | None | |
| Huge AI Searchwangwingzero/huge-ai-search | 144 | — | ~563 | Automated safety check: Pass | MIT |
OpenHands/extensions
Create an automation that generates an async standup digest from Slack.
OctagonAI/skills
Retrieve full historical end-of-day price data for market indices using Octagon MCP.
agentrq/agentrq
Guides a workspace agent through executing assigned tasks, replying to a remote human operator, and creating sub-tasks, memory and events inside an AgentRQ workspace.
cosinusalpha/webctl
Browser automation via CLI. An agent skill from cosinusalpha/webctl.
wangwingzero/huge-ai-search
Searches the live web through Google AI Mode via Huge AI Search (MCP or CLI).
agentrq/agentrq
Orchestrates work across specialized AgentRQ workspaces, breaking goals into tasks, assigning them to the right workspace agent, and tracking shared learning notes.
jpicklyk/task-orchestrator
Walks through how to launch and reach the MCP Task Orchestrator server container: transport, REST API, port publishing, config mounts and config-sync.
jpicklyk/task-orchestrator
Resolves ready MCP work items into a run plan, shows it to you, then executes it through the Workflow tool or direct subagent dispatch, with post-run verification.
jpicklyk/task-orchestrator
Migrates an existing unscoped Task Orchestrator database to the project-scoping convention in place, creating one project anchor root and re-parenting work trees under it after a mandatory dry run.
jpicklyk/task-orchestrator
Completes or cancels a whole feature subtree, a named list of items, or a batch of stale work items at once, previewing the impact and warning before force-completing anything active.
jpicklyk/task-orchestrator
Creates an MCP work item from conversation context, anchoring it under the right container, inferring type and priority and pre-filling the required notes.
jpicklyk/task-orchestrator
Views, creates, deletes and diagnoses BLOCKS, IS_BLOCKED_BY and RELATES_TO links between MCP work items, including why an item cannot start.
Works with
Categories
Generates a project dashboard from MCP work items. An agent skill from jpicklyk/task-orchestrator. Work Summary is an agent skill from jpicklyk/task-orchestrator. Generates a project dashboard from MCP work items.
Work Summary fits situations like: the user says: project status; show me the dashboard; what should I work on; where did I leave off.
Run `npx skills add jpicklyk/task-orchestrator --skill work-summary -a claude-code`. Or copy the skill folder (claude-plugins/task-orchestrator/skills/work-summary in jpicklyk/task-orchestrator) into .claude/skills/work-summary in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jpicklyk/task-orchestrator --skill work-summary -a codex`. Or copy the skill folder (claude-plugins/task-orchestrator/skills/work-summary in jpicklyk/task-orchestrator) into .agents/skills/work-summary in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jpicklyk/task-orchestrator --skill work-summary -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/work-summary, .gemini/skills/work-summary, .github/skills/work-summary and .opencode/skills/work-summary in your project.
SKILL.md names no scripts, command-line tools or credentials: Work Summary is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Work Summary is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.3k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Work Summary: Slack Standup Digest (OpenHands/extensions, 157 stars), Stock Historical Index (OctagonAI/skills, 127 stars), AgentRQ Workspace Agent (agentrq/agentrq, 1.1k stars) and Webctl (cosinusalpha/webctl, 419 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jpicklyk (a GitHub user) maintains it in jpicklyk/task-orchestrator, which has 207 GitHub stars. The repository holds 28 skills in this directory. The repository was last updated on October 6, 2026.
Source: jpicklyk/task-orchestrator on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.