بنقرة واحدة
aitask-work-report
Draft a manager-facing work report from selected board columns.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Draft a manager-facing work report from selected board columns.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Create, refresh, or show an implementation trail — a durable, wave-structured, evidence-backed task-sequencing artifact stored via ait artifact.
Create, refresh, or show an implementation trail — a durable, wave-structured, evidence-backed task-sequencing artifact stored via ait artifact.
Shadow companion for a followed coding agent — reads its captured terminal output and, in one instruction-driven flow, explains it, helps answer an AskUserQuestion, or critically interrogates a plan. Advisory-only. Spawned by minimonitor; not a task-implementation command.
Pick and implement a task in remote/non-interactive mode. All decisions from execution profile - no AskUserQuestion calls.
Pick and implement a task on Claude Code Web. Zero interactive prompts. No cross-branch operations — stores task data locally in .aitask-data-updated/.
Pick and implement a task in remote/non-interactive mode. All decisions from execution profile - no AskUserQuestion calls.
| name | aitask-work-report |
| description | Draft a manager-facing work report from selected board columns. |
Drafts a first-person, manager-friendly Markdown report of upcoming work,
built from selected ait board columns. Task membership and ordering come
from the deterministic gatherer helper
(./.aitask-scripts/aitask_work_report_gather.sh) — the report contains
exactly the validated selected tasks, in board order, or it is not drafted
at all.
Every gatherer stdout line must match one of these record schemas:
COLUMN:<col_id>|<title>
TASK:<col_id>|<task_id>|<boardidx>|<status>|<priority>|<effort>|<pending_children>|<remaining_items>|<task_file_path>
VELOCITY_MODEL:<model_id>|<window_days>|<start_date>|<end_date>|<model_label>
VELOCITY:<bucket_id>|<observed_units>|<completed_count>|<avg_per_unit>|<bucket_label>
PROJECTION:<remaining_total>|<projected_date>|<days_ahead>|<basis_completions>|<caveat>
ERROR:<reason>[:<detail>]
NO_TASKS
Split each record on | with maxsplit = field-count − 1: the free-text
field is always LAST (<title>, <task_file_path>, <model_label>,
<bucket_label>); PROJECTION: and ERROR: have no free-text field. Note
the VELOCITY: field order: bucket id, observed units, completed count,
average, then label — do not swap counts and averages.
Any line matching none of these prefixes, or a recognized prefix with the wrong field count, is a malformed record: treat it as an infrastructure failure (hard stop per Step 2) — never guess, reorder, or skip fields.
Arguments arrive as flat whitespace-delimited text (the code-agent dispatcher rejects whitespace-bearing values, so token splitting is safe). Recognize:
--columns <csv> — column ids to report on (optional).--tasks <csv> — task ids, order significant (optional; requires
--columns).--velocity-model <id> and --velocity-window <days> — optional; forward
them verbatim to every gatherer invocation (including the --project
re-run). When absent, the gatherer's defaults apply.With --columns (+ optional --tasks): run the gatherer once with the
exact args and SKIP all membership prompts — the board already reviewed the
selection:
./.aitask-scripts/aitask_work_report_gather.sh --columns <csv> [--tasks <csv>] [velocity args]
Then apply Step 2 to the output and, if it passes, proceed to Step 3.
Without --columns (interactive path):
./.aitask-scripts/aitask_work_report_gather.sh --list-columns as the
only discovery source (it emits unordered first when the Unsorted
column currently has tasks — the dynamic column is always offered).
Validate the discovery run first — apply Step 2 in list mode: a
non-zero exit, any ERROR: line, or any malformed record (the only
well-formed records in list mode are COLUMN: lines) is a hard stop
per Step 2. Zero COLUMN: lines is NOT a hard stop in list mode — it is
handled next.COLUMN:
lines, there are no reportable columns — inform the user ("the board has
no reportable columns — nothing to report") and END the skill. Never
present an empty selection prompt.AskUserQuestion with
multiSelect: true, using the Paginated multi-select protocol below
(selection semantics: selected = included column).AskUserQuestion with multiSelect: true via the same protocol, one
option per TASK: row (label = t<task_id>, description = column +
status + a short name derived from the task filename). Phrase each page
as "Select any tasks to EXCLUDE from the report" — every listed task
is included unless explicitly selected for exclusion (this matches the
tool's semantics: options start unselected, so include-by-default means
select-to-exclude).--tasks list (canonical board order) and apply
Step 2 again — the final selection is always gatherer-validated.Paginated multi-select protocol (used by both selection prompts):
AskUserQuestion supports a maximum of 4 options: show 3 candidate items
per page, plus a "Show more" option while more items remain (the last page
shows up to 4 items and no "Show more").Agents without native multi-select (e.g. Codex CLI, whose
request_user_input mapping has no multi-select adaptation): do NOT emulate
with one yes/no question per item. Instead present the full candidate list
as numbered text and ask ONE free-text question for a
comma-separated list of ids, handled per branch:
t (e.g. a tests column), so NO prefix
stripping. Trim whitespace only, then run the gatherer with
--columns <selected-columns> (point 4).t prefix —
normalize by trimming and stripping the optional t on task ids ONLY.
Validate every exclusion BEFORE subtracting: each normalized
exclusion id must be a member of the displayed validated task-id set —
an unknown id, or input that normalizes to nothing (e.g. a bare t or
empty token), is a hard stop through the Step 2 re-select/abort prompt,
never a silent no-op (subtract-first would make a typo like 9999
vanish without rejection, and the survivors would still validate).
Only after all exclusions validate, remove them from the selection and
re-run the gatherer with the survivors as an ordered --tasks list in
canonical board order (point 5).In both branches every id the user typed is checked — column ids and the final task list by the gatherer, exclusion ids by the pre-subtraction membership check — so any typo or unknown id fails closed rather than silently dropping.
Hard-stop conditions, checked in this order:
ERROR: lines, or NO_TASKS.TASK: line in report mode)
or any malformed record per the pinned schema block above. In
list mode (--list-columns) the only well-formed records are
COLUMN: lines; a malformed record still hard-stops, but a zero-row
result is the intentional empty-board case handled by Step 1's
empty-discovery path, not a hard stop.On ANY of these: STOP — do not draft. Present the diagnostics verbatim
(stderr for condition 1; every ERROR: line for condition 2; the offending
line for condition 3), then AskUserQuestion:
This skill never drafts from a partial or silently-corrected selection — the report must contain exactly the validated selected tasks, parsed from well-formed records only.
Use AskUserQuestion:
The period labels the report only — it never changes task membership.
For each selected task (each TASK: row):
<task_file_path>): description, frontmatter metadata,
depends../.aitask-scripts/aitask_query_files.sh plan-file <task_id>
(PLAN_FILE:<path> → read it; NOT_FOUND → skip).children_to_implement in the
task frontmatter; archived (completed) children via
./.aitask-scripts/aitask_query_files.sh archived-children <task_id>.Child-context rules (PINNED):
children_to_implement = pending).First-person, manager-friendly Markdown, in-session only:
t<id>
for traceability.VELOCITY: rows
generically — per bucket: <bucket_label>, <avg_per_unit>, and
<observed_units> (quote the observed units so the reader can judge
confidence). The estimator is selectable (--velocity-model), so do NOT
hardcode weekday semantics or bucket meanings.--project (same columns/tasks/velocity args) and read the PROJECTION:
record. The gatherer computes it — report it as-is; do NOT recompute it
and do NOT do date arithmetic in-prompt.
remaining_total is 0 → say the selection is effectively complete and
omit the projection.PROJECTION:<n>|none|insufficient_data|… → state
"insufficient completion history for a projection" and omit the
section — never fabricate a rate.<projected_date>, <days_ahead> and
<basis_completions>, and always surface <caveat>: the figure
counts tasks, so it ignores task size, blockers and capacity — an
extrapolation of past throughput, never a commitment or a delivery
estimate.<days_ahead>: 0 → fits today,
> 0 → exceeds today (a field read, not arithmetic). For "This week"
and custom labels, show the horizon label plus the gatherer-provided
<projected_date> / <days_ahead> without any inferred fits/exceeds
judgement — deciding "fits this week" would require computing days
remaining in the week, and the skill cannot know what date a custom
label denotes.depends and task
content. Nothing invented.Constraints: include exactly the selected tasks; no invented dates, estimates, progress, commitments, dependencies, or blockers; no implementation-level file/symbol detail.
Present the draft in-session for review and editing; iterate on feedback until the user is satisfied. Do NOT write a report file (no dated file, no repository file) — the draft lives in the session only.
Finalization (before Step 7): when the user signals they are satisfied ("finalize", "good", "ship it", etc.), re-render the COMPLETE report as a single consolidated block — every iterated edit and any opt-in projection integrated inline — and present that as the final version before moving to Step 7. Never advance to the satisfaction prompt while the latest full report exists only as separate deltas across earlier turns (e.g. a projection or a correction shown on its own): the reader must see one whole, current report, not a stitch of fragments.
Execute the Satisfaction Feedback Procedure
(.claude/skills/task-workflow/satisfaction-feedback.md) with
skill_name = "work-report".
aiplans/archived/p1162/p1162_1_work_report_gatherer_helper.md).w flow launches this skill with explicit --columns/--tasks
so the agent receives the exact board-reviewed selection.