Skip to content
Back to skills

Task Report

ASecurity

Record the results of a workhub task - store the raw report in the vault AI zone, polished notes in the human zone, update the task's result section, and set status to review. Use when finishing work started via task-start, or when the user asks to report/close out a task.

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 3, 2026
developmentgoshellbashnodegit

Works with

  • cli

Security analysis

A100/100

Scanned September 30, 2026

npx -y skills add atman-33/workhub --skill task-report --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Task Report?

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

Security grade badge for Task Report
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/atman-33-task-report/badge)](https://www.skillsdirectory.com/skills/atman-33-task-report)

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: task-report
description: Record the results of a workhub task - store the raw report in the vault AI zone, polished notes in the human zone, update the task's result section, and set status to review. Use when finishing work started via task-start, or when the user asks to report/close out a task.
argument-hint: "<task-id>"
---

# task-report — Record task results into the workhub vault

## Steps

1. **Resolve the vault** (same order as the other task skills:
   `WORKHUB_VAULT` env var → the current directory if it is a vault →
   `vault_path` in `%APPDATA%\workhub\config.json`) and locate the task
   file by `id`.
2. **Write the raw report** to `<vault>/_ai/logs/<task-id>-<yyyymmdd>.md`:
   what was done, key decisions, files changed (as `path:line` references),
   verification results, and anything a future agent needs to resume.
3. **Write human-readable deliverables** where they belong:
   - Knowledge gained (research, gotchas, how-tos) → a note under
     `<vault>/knowledge/`, added to `knowledge/_index.md`.
   - **Project outcomes → the task's backlog item**, in
     `projects/NNNN-<project>/backlog/`. `task-start` has already settled which
     item that is; if `backlog` is somehow still empty, settle it now the same
     way rather than inventing a home for the note.
      - Items are folders (folder-first since T-0321): the deliverable goes
        straight into `B-NNN-<slug>/`, whose entry note is `B-NNN-<slug>.md`,
        so every `[[B-NNN-<slug>]]` resolves to it.
      - Write the deliverable as `NNN-<task-id>-<title>.md` in that folder,
       numbering in tens after the highest number already there (`010`,
       `020`, …). Never renumber what is already there: the tens exist so a
       note that belongs in between can be `015`. Non-Markdown output (a test
       report, an exported image) goes in the same folder, flat — no
       sub-folders.
     - If you are moving a note that **already existed** under another name,
       add its old basename to its frontmatter as an alias:

       ```yaml
       aliases:
         - <the name it had before>
       ```

       The `NNN-` prefix changes the basename, so every `[[old title]]` in the
       vault stops resolving — including ones in archived tasks, which you will
       not find by searching and should not be rewriting. An alias fixes all of
       them without editing a single reference.
     - Append one dated line to the entry note's `## Status`, newest first,
       and list the new note under its `## Notes`. This is the only thing
       that tells a later reader which file is current, since the number
       prefix records creation order and nothing else.
     - Do **not** add the task to the item's frontmatter. The link runs one
       way — the task names the item, never the reverse.
     - **Review the project's `roadmap.md`.** `## Status` and the README move
       with every report, but the roadmap's milestone table is easy to leave
       behind (a project once sat at `planned` with M1–M4 already done). If
       this task completed a milestone or changed its scope, update that row
       in `projects/NNNN-<project>/roadmap.md` — its `Status`, and `Notes` if
       the task id or scope belongs there — plus `## Now / Next / Later` and
       `updated:` when they moved. Which milestone a task finished is a
       judgement, so decide it here rather than expecting a tool to. Do
       nothing when the project has no `roadmap.md` or the task maps to no
       milestone.
   - **A task with no `project`** is vault housekeeping: it has no item and no
     project folder, so its outcome belongs in `knowledge/` or stays in the
     raw log.
   - Keep these polished and short; link to the raw log with a wikilink
     only if the detail matters.
4. **Append to the task's `## Results` section** (Edit tool): a 2-4 line
   summary and wikilinks to the notes created in step 3. Change nothing
   else in the body.
5. **File the follow-ups this task turned up.** Finishing a task is the moment
   you have seen the most of what was left undone, and step 2 has already made
   you write it down. Create those tasks now rather than leaving a line in a
   log nobody re-reads.

   **Include it in this task, or split it out?** Split when any of these hold:

   - it needs its own decision from the owner (scope, design, priority);
   - it touches a different repository, or a part of this one the current
     `## Plan` never covered;
   - it is not needed for the work in this task to stand on its own.

   Otherwise finish it here. A follow-up that is two lines of the change you
   just made is a task nobody wants to read, review and merge separately.

   **Write a Description a cold session can act on.** The next session has none
   of this one's context, so the Description carries it:

   - the target repository, as an absolute path;
   - the PR or branch this depends on, and whether it has merged;
   - what to read first — the raw log from step 2, the notes from step 3, the
     source files as `path:line`;
   - what the task is for, not a list of edits. Hand over the goal; let the
     next session work out the how;
   - a wikilink back to the originating task's raw log, e.g.
     `[[T-0236-20260905]]`, so the trail survives.

   Create each one with the CLI — it assigns the `id` and `order` exactly as
   the app would, so a task filed here is indistinguishable from one filed on
   the board:

   ```bash
   node "${CLAUDE_PLUGIN_ROOT}/scripts/task-cli.mjs" create \
     --title "..." --project <slug> --assignee claude-code \
     --status todo --priority medium --body-file <path to the Description>
   ```

   Write the Description to a file and pass `--body-file`; it is prose, and
   prose does not survive a shell argument intact. The file holds the
   Description's text only — no `## Description` heading (the CLI adds it)
   and no `## Plan` or `## Results`, which the CLI refuses. Leave `status` at `todo`
   (or `inbox` when it is only an idea) — never start a follow-up yourself as
   part of closing this task. List what you filed in the report and in the
   final message, so the owner can drop any of them.

   Then run `task-handoff` on each follow-up filed for an agent. It puts the
   choice of continuing here or starting a fresh session to the owner, with a
   recommendation — a fresh session by default.
6. **Feed the owner's judgement calls back.** If the owner settled anything
   during this task — a question you put to them, a correction to your
   approach, a preference they stated in passing — record the rule it
   establishes:
   - a one-off call → `<vault>/memory/notes/`, under `## Decisions`
     (`- <date> <task-id> <the rule>` with `(from: <the question>)` on the
     next line). This file has no size limit; it is grepped, not read.
   - a standing leaning → `<vault>/memory/identity/decision-policy.md`'s
     `## Preferences`.
   - an axis the same reasoning has now applied twice → that note's
     `## Promoted rules`. Any new entry opens with the next unused `P-NN` and
     passes the admission test at the top of the policy. The policy holds 50
     entries of 3 lines at most; a 51st arrives by merging or dropping one,
     never by appending.

   Say in the report which lines you added and where. This is what stops the
   next task asking the same question.
7. **Close out the status** with the bundled CLI (preferred — it sets
   `status: review` + `updated`, clears every session marker pointing at the
   task, and refreshes the index in one step):

   ```bash
   node "${CLAUDE_PLUGIN_ROOT}/scripts/task-cli.mjs" report <task-id>
   ```

   *Fallback (no node, or script missing):* set `status: review` and
   `updated: <today>` in the frontmatter by hand (preserve the rest), and
   delete any `<vault>/_ai/state/sessions/*.json` that refers to this task. A
   vault that has not run the T-0390 vault-upgrade migration still has its
   markers under `_ai/memory/sessions/` instead — as of T-0392 nothing reads
   that folder any more, so leave it for the migration rather than editing it.
8. **Offer to clean up the worktree — only for worktree-mode tasks**
   (`worktree: true`). Once the work is committed/pushed and no longer needed,
   **propose** removing the task's worktree (do not delete it automatically —
   the user may still want to inspect it):

   ```bash
   git -C <repo> worktree remove "<repo>/../.worktrees/<repo-name>/<task-id>"
   ```

   Mention the branch `task/<task-id>` is left in place for the PR/merge.

## Rules

- AI never sets `status: done` — a human does that in the workhub app after
  reviewing.
- If the work is incomplete or blocked, still report: describe the blocker in
  `## Results`, keep `status: doing`, and leave the session marker in place.
  When the blocker is a question filed for the owner (`_ai/comms/`), name the
  question id and mark the task blocked so the board shows the wait:
  `task-cli.mjs update <id> --blocked true --blocked-note "waiting on Q-0001"`.
- Do not overwrite existing human notes; create new ones and link them.
- Never modify the task's `## Plan` section — it is the approved plan and the
  user's approval record, not a place for results.
- Write `## Results` in the language given by the workhub **Language**
  setting, stated in the app's launch prompt (default English). That setting
  also governs the reply language and the task file's `## Plan` — never
  notes under `knowledge/` and `projects/`, or anything in target
  repositories, which follow their own conventions.

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.