| name | report-lastrun |
| description | EXPRESS: a plain-language report of the last monitoring run for a NON-TECHNICAL reader โ when it ran, a brief overview of what happened, expanding on any important issues or warnings, plus recent-run context. Read-only. |
| lane | coding |
| allowed-tools | Read, Glob, Grep, Bash |
report-lastrun (Rhetoric / Express)
Answers one question in language a non-technical person can act on: "What did the
watchman find the last time it checked my machine โ and is anything wrong?" It leads
with when the last run happened and a brief plain-language overview of what it did,
then expands on the important issues and warnings so the reader understands what
needs attention. Strictly read-only โ it changes nothing and sends no mail (that is
send-report).
This is the body of the /watchman status mode and of the watchman status launcher.
It is the gentler, more human counterpart to report-status: where report-status
inventories the whole journal for an operator, report-lastrun tells a person what just
happened and what (if anything) they should worry about.
PRIME DIRECTIVE (outranks everything below). Do nothing destructive. If any action
would delete or overwrite a file or directory, modify a database in any way, sever access
(firewall/SSH/auth), or stop/remove a service or package โ STOP, WARN the operator in plain
language why it is destructive, and ASK for explicit per-action permission before proceeding.
In the unattended loop there is no one to ask, so the action does not happen: record it and
surface it instead. The only non-destructive database operation is routine create-or-update
through lib/journal.sh. This rule has no exceptions and no mode that overrides it.
When to use
/watchman status (typed live), and watchman status from the shell (which launches a
read-only session already running this). On demand only โ never part of the loop.
Workflow
-
Preflight. Run every claude-watchman function through the dispatcher โ
bash lib/wm <function> [argsโฆ] โ which sources the libs under bash internally; never
source lib/โฆ directly (dontAsk refuses a dot-source). Initialize with
bash lib/wm journal_init. Read only through lib/journal.sh (via bash lib/wm);
never touch findings.db directly.
-
Find the last run. bash lib/wm journal_recent_runs 5 returns the most recent runs
newest-first as id|kind|started_at|finished_at|summary. The top row is the last run;
its summary (written by correlate-findings: counts of new / regressed / cleared) is
the account of what happened that run. Also call bash lib/wm schedule_ledger_summary
โ if headless (cron/systemd) runs exist it reports their most-recent timestamp, count,
and any errors; if none, it says so (the visible tmux /loop shows cost live instead).
- No runs recorded yet (empty
journal_recent_runs output): say plainly that the
watchman has not completed a full monitoring pass yet, suggest running /watchman loop
(or watchman audit) once, and stop after the overview โ there is nothing to expand on.
-
Brief overview โ lead with this. In two or three short sentences, in plain language:
- When the last run happened โ convert the timestamp to a friendly form ("yesterday
evening", "about 3 hours ago", with the date/time in parentheses). Note whether it was
an attended loop or a scheduled headless run.
- The headline status. Pull
bash lib/wm journal_count_open and
bash lib/wm journal_count_regressed. Open with a one-line verdict a non-expert
grasps instantly โ e.g. "โ
Your system looks healthy โ nothing needs your attention."
or "โ ๏ธ A few things need a look โ none urgent." or "๐จ Something important came back
and needs attention." Regressed findings (problems that were fixed but have reappeared)
are the loudest signal โ never bury them.
-
Expand on the important issues and warnings. Call bash lib/wm journal_important_open
โ it returns the findings worth explaining (everything regressed, plus high/critical
severity) WITH their detail and remediation, regressed first. For each, write a short,
jargon-free entry:
- What it is โ name the problem in everyday words; define any unavoidable technical
term in the same breath.
- Why it matters to them โ the real-world consequence (what an attacker could do, what
could break, what could be lost), not the mechanism.
- What to do โ the suggested fix in plain terms, and who runs it: remind the reader
that applying a fix is done with
watchman fix (this report is read-only and changes
nothing). If a finding is manual tier, say it needs a person's judgement.
If journal_important_open is empty, say so warmly ("Nothing serious is open right now")
and give just a one-line count of any low/info items rather than listing them.
-
Recent-run context (short). From the journal_recent_runs rows, note the trend in a
sentence โ are things getting better (fewer open each run), holding steady, or worsening?
Mention any scheduled run that errored (from the ledger summary) since a failed headless
pass means the machine may not have been checked when expected.
-
Layout for a non-technical reader. Clear, plainly-titled sections (a "Bottom line"
first, then "What needs attention", then "Recent history"). Short sentences. No command
dumps, no raw table output, no severity codes without translation. Friendly but honest โ
do not soften a real warning into vagueness. End with a single "What to do next" line.
-
Change nothing. Output text only โ suitable for the terminal and for reading aloud to
someone non-technical. Make no edits, run no fixes, send no mail.
Grounding
lib/journal.sh โ journal_recent_runs, journal_important_open, journal_count_open,
journal_count_regressed (all read-only, reached via bash lib/wm <function>).
lib/schedule.sh โ schedule_ledger_summary (headless run cost/recency, via bash lib/wm).
skills/logic/correlate-findings โ writes the per-run summary this report reads.
report-status โ the fuller, operator-facing journal summary; send-report โ email.