Skip to content
Back to skills

Gemba Report

ASecurity

Report what was done in a period, a day, a week or a month, across every task of this obeya, with every count and total taken from gemba report. Use whenever the user asks for the daily report, a standup, an end-of-day, weekly or monthly summary, "what did I do today", "yesterday", "this week" or "in September", what the team did, how much of an amount went to each workstream, member, status or value of a field in a period, or how much went into a task with its subtasks, whatever the workstream.

  • 3 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 25, 2026
ai-agentsshellbash

Works with

  • cli

Security analysis

A100/100

Scanned November 11, 2026

npx -y skills add web-crafts-org/gemba --skill gemba-report --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Gemba Report?

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

Security grade badge for Gemba Report
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/web-crafts-org-gemba-report/badge)](https://www.skillsdirectory.com/skills/web-crafts-org-gemba-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: gemba-report
description: Report what was done in a period, a day, a week or a month, across every task of this obeya, with every count and total taken from gemba report. Use whenever the user asks for the daily report, a standup, an end-of-day, weekly or monthly summary, "what did I do today", "yesterday", "this week" or "in September", what the team did, how much of an amount went to each workstream, member, status or value of a field in a period, or how much went into a task with its subtasks, whatever the workstream.
---

# Report a period

The report answers what was done in a period, one day or several consecutive days,
across every task, and how much of each amount went where. `gemba list` finds the tasks
alive in the period, each task file records its work under `## Updates`, one
`### YYYY-MM-DD` subsection per day, and `gemba report` computes every count and every
sum over a selection of tasks. Your part is to list the candidates, read the
subsections of the period, take every number from `gemba report`, and compose the
report without adding anything the files and the commands do not say.

Every configured value (workstreams, prefixes, metadata fields, rules) lives in the
gemba config at the obeya root. Run `gemba config show` on every run and rely on nothing
else you know or remember about workstreams or fields: it prints the config resolved,
with the fields and the blocks shared by every workstream already joined to those of
each one.

## Prerequisite

The `gemba` command must be on the PATH. It is installed once from PyPI with
`uv tool install gemba-cli` and checked with `gemba --version`. If `gemba` is not
found, stop and tell the user to install it with that command. Do not build the list of
candidates by reading the task folders yourself, and do not compute a number yourself.

## Process

1. **Locate the config.** Walk up from the current folder to the nearest `gemba.yaml`.
   That folder is the obeya root. If there is none, stop and tell the user that no
   gemba config was found.
2. **Choose the period**, from F to T, both included. Today, unless the user names
   another day or period. Read today's date from the environment (`date +%F` in a
   POSIX shell, `Get-Date -Format yyyy-MM-dd` in PowerShell) and resolve "yesterday",
   a weekday, "this week", "last week", a month or "this month" against it; a week
   starts on Monday, and a period never ends after today. A day is F equal to T. Several
   periods give one report each, oldest first, and steps 3 to 9 run once per period.
3. **List the candidates** of the period with exactly this command, from anywhere
   inside the obeya:

   ```bash
   gemba list --to T --updated-from F
   ```

   It returns the tasks created on or before T and updated on or after F, which are
   exactly the tasks alive in the period. Add `--include-archived` only when the user
   asks for archived tasks too, and no other filter but the owner below: the report
   covers every workstream. Read only the tasks it returns. If the command refuses,
   relay its message and stop.

   Run `gemba config show` first. When it holds `team`, the obeya is shared by a team,
   and the report covers the user's own work: add `--owner <me>`, with `me` read from
   that document, to this command and to every `gemba report` of step 6. When the user
   asks about another member, use `--owner` with that member's folder name, the key of
   their entry under `team`. When they ask about the whole team, pass no `--owner` and
   group the numbers of step 6 `--by owner`, so that each member's total and the team's
   come from the command. When `me` is `null` and the user asks about their own work,
   ask which member they are.
4. **Read the signals of each candidate.** Open the file at the record's `path` and
   take:
   - the bullets of every `### D` subsection under `## Updates` whose date D lies from F
     to T: the work of the period, day by day;
   - the record's `date` from F to T: the task was created in the period;
   - the record's `done_at` from F to T: the task was finished in the period.

   A candidate with none of the three has nothing recorded for the period.
5. **Read the `report` block** of every workstream that has candidates: run
   `gemba config show` and read `processes.report` of each of their entries. Read
   `context` as background and follow every entry of `rules`, in order, when composing
   the entries of that workstream and when choosing a selection for its numbers; when
   two rules contradict, follow the later one. A rule shared by every workstream
   appears in every entry: follow it once.
6. **Take the numbers from `gemba report`** whenever the report states a count, a sum or
   a total, and whenever the user asks how much of something went where. The command
   takes the filters of `gemba list` and prints one JSON object:

   ```bash
   gemba report --done-from F --done-to T [--owner <member>] \
     [--by <grouping> ...] [--sum <field> ...]
   ```

   - **Selection.** A number field holds one total per task, so the totals of a period
     are those of the tasks finished in it: select with `--done-from F --done-to T`
     unless the user asks for another selection (created in the period is
     `--from F --to T`; a date field in the period is `--where-from <field>=F
     --where-to <field>=T`) or the `report.rules` of the workstreams involved say
     otherwise. Add `--include-archived` when the user asks for archived tasks too.
     Narrow it with `--workstream`, `--status` or `--where` when the question does.
   - **A task with its subtasks.** When the user asks how much went into a task
     together with the tasks split from it, select with `--under <ref>
     --include-archived` alone: no period and no `--owner`, the one of step 3 included,
     unless the user names a period or a member. Find the ref with the `gemba-list`
     skill when the user names the task by its title or description. Group `--by
     owner` when they ask per member in an obeya with a team, and say that the numbers
     cover the task and every task below it, archived ones included.
   - **Groupings.** `--by workstream`, `--by status`, `--by owner` in an obeya with a
     team, or `--by <field>` for a field whose declared `type` is `text` or `boolean`,
     when the user asks for amounts per workstream, per member, per status or per value
     of a field. Repeat `--by` to group within
     groups. Map the user's words to fields by the `name` and `description` of every
     field under `metadata` in the entries of the document of step 5, and write every
     value by its field's declared type, as `gemba list` takes them.
   - **Sums.** `--sum <field>` for a field whose declared `type` is `number`.
   - **Reading.** `groups` holds one entry per combination of grouping values: `key`
     (each grouping and its value, `null` for tasks without one), `tasks`, `refs` and,
     per summed field, `total` and `missing`, the tasks without a number to add.
     `total` holds the same over every selected task, each counted once. A task whose
     text field holds a list is counted in the group of each item, so the groups may add
     up to more than the total: say so when you report both.
   - If the command refuses, its message lists every invalid filter, grouping and sum at
     once. Fix the call and run it again, asking the user only when the request itself
     is unclear. When it says the ref of `--under` is not a task of this clone, relay it
     and suggest pulling the obeya, since the task may have been created in another
     clone.

   State only the numbers the command printed: each total, each count, and the tasks
   without a value whenever `missing` is not zero. Never add, subtract, average or
   compare numbers yourself; when the user wants a total the command did not print,
   such as two groups together, run `gemba report` again with the selection or the
   grouping that yields it. Say which selection the numbers come from, such as "tasks
   finished from F to T".
7. **Compose the report** in the language the user converses in, grouped by
   workstream unless the user asks for another grouping, with one entry per task that
   has a signal for the period: its title, ref and current status, with its owner when
   the report covers more than one member, then the bullets of the period, condensed
   rather than transcribed. A task created or finished in the
   period says so, without bullets made up for it. When no candidate has a signal for
   the period, say plainly that nothing was recorded for it. This layout reads well:

   ```
   Report for <F> to <T>

   <workstream>
     <ref>  <title>  <status>
       - <condensed bullet>
       - created on <date> | finished on <done_at>

   Numbers (<the selection used>)
     <group>  <count> tasks  <field>: <total> (<missing> without a value)

   Updated recently, nothing recorded from <F> to <T>
     <ref>  <title>  <status>  updated <updated_at>
   ```

   The layout is guidance, not a contract: adapt it to the question asked; nothing
   depends on it. A question about amounts alone gets the numbers alone.
8. **List the gaps at the end:** every candidate with nothing recorded for the period,
   under a heading saying they were updated recently with nothing recorded for that
   period, with no bullets, so the user can record what is missing.
9. **Relay every problem** that `gemba list` or `gemba report` returned, alongside the
   report: give each path and its problem. A file that is not a valid task is left out
   until it is fixed; a value that is not of its field's type is grouped under `null`
   and counted as missing until it is set again with `gemba set`.

## Filling a gap

The report never fills a gap. To record what a task is missing, point the user to the
`gemba-record` skill, used in one of two places: inside the harness of that task,
`harnesses/<workstream>/<task file name without .md>/`, for the work of its run, from
its notes; or from the obeya, for work done outside a run, such as a meeting or a
review, from what the user tells it. A metadata value that is missing or wrong is set
with the `gemba-set` skill.

## Rules

- Read, never write: do not edit, move or create any file, and do not commit.
- State no activity that a subsection of the period, a creation date or a `done_at`
  does not support, and no number that `gemba report` did not print. A task with
  nothing recorded is a gap to show, not one to fill from memory.
- When `gemba.yaml` changes, follow the new content. This skill never needs an edit when
  a workstream, field or rule is added, changed or removed.

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.

View all in ai-agents →

Comments

Loading comments…

Newsletter

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