Adapted from aha-links' fact collection and output contract; first read Item operations and CLI reference. The CLI collects facts, the current model summarizes, and no separate reporting backend is called.
When this round's bound items are involved, first follow execution snapshot and real-time context to read this execution snapshot, then collect the latest review or periodic facts according to the following process; state the two sources separately. When there is no binding, use only the scope explicitly specified by the user.
Scope and time
ae-cli things +digest --agent-space-id <space-id> --from 2026-09-07T00:00:00+08:00 --to 2026-09-14T00:00:00+08:00 --time-zone Asia/Shanghai --format json
ae-cli things +digest --agent-space-id <space-id> --assignee-id <member-id> --format json
ae-cli things +digest --agent-space-id <space-id> --thing-ids <id-a>,<id-b> --format json
Do not guess IDs and do not choose a personal default space; watchlists, groups, and cross-space aggregation are not supported. Daily reports use natural days, weekly reports run from Monday 00:00 to the following Monday 00:00, defaulting to Asia/Shanghai. For today/this week the cutoff is the current moment; for yesterday/last week use the complete period. Custom intervals must be explicit; the command's from/to must both include a time zone, and the interval is left-closed right-open.
When outputting, convert the recorded ISO time to the report time zone, and clearly label the time zone next to the time window, collection time, and evidence date. Example:2026-09-10T04:50:00Z in Asia/Shanghai should be displayed as 2026-09-10 12:50(Asia/Shanghai); do not delete the Z and directly write it as "Shanghai time 04:50". When reliable conversion is not possible, keep the original ISO and label it UTC, disclose that it has not been converted, and do not fabricate a local time.
Evidence and completeness
Verify fetchedCount、truncated、consistency、collectedAt; for explicit sets also verify requestedCount and unreadable. Stop generating full conclusions when fields are missing. The CLI automatically paginates up to 100 pages/10000 items per chain; anomalies and limits are marked as truncated; do not substitute a single-page list and pass it off as complete collection.
thingis the current state,entriesis the record within the time window,baselineis the pre-window state inferred from the complete business change records; do not fabricate it when there is no baseline or when collection has undergone version changes.lastEffectiveRecordBeforeWindowis for locating pre-window evidence. The current state is not equal to changes within the period, and the period-end state cannot be directly replaced by the current state.- Before outputting, compare
collectedAtwith the windowto. WhencollectedAt < to(including a user-specified complete natural week that has not yet ended), the report must state "a phased summary as of the collection moment; the period has not yet ended"; the three-state statistics are labeled "state at collection time," and it is forbidden to write "period-end state" or "no subsequent updates." Example: for a weekly report collected on September 10 covering September 7 to 14, one cannot assert that the state on September 14 is the same as the current one. Even if the window has ended, the period-end state can be restored only when complete post-window change evidence supports it. - Count open/paused/done separately, and list archived items separately; the latest progress comes from thing.latestProgress, and historical changes are read from progress/status records.
- Remarks and repeated process descriptions do not count as valid progress;
effectiveProgressCountis a candidate pending verification, and should be excluded when the body contains no new information. - If there is no record, one can only say "no update recorded." This constraint also applies to summaries and next-step suggestions; open cannot prove that work has not started, and one can only report the current state and the unrecorded facts. Boundaries of non-transactional collection such as unread attachments, unreadable attachments, truncation, and multiple requests must be disclosed.
changed_during_collection: reread first; if it still changes, keep the limitation and do not claim a static full set.
Output and write-back
First write the scope, time window, collection time, and coverage boundaries, then give the three-state and archive statistics, periodic changes, blockers, and next steps. Attach the source and date of each important judgment, distinguishing facts, inferences, and recommendations. Do not display internal record IDs by default.
By default, output only to the session. When explicitly asked to write back: use +detail to fully read the report records of the target item, check titles with the same scope and same period, then use ae-cli things entry append --id <target-id> --type note --title "事项周报|起止日期|范围" --stdin --command-id <uuid> --format json to write the final body. The recommended title is 事项周报|起止日期|范围(the same applies to daily reports). When a report with the same scope and same period already exists, prompt for revision; do not silently overwrite or repeatedly append. Only after the user explicitly requests an appended revision should a new record be written, preserving the original report. Write-back is already authorized; do not ask for the same permission again.
Do not automatically send messages, change status, assign owners, or create scheduled tasks.
File evidence: +detail/+digest automatically paginates to collect asset associations. Files with availability=missing or verification_failed do not count as usable deliverables; even if available, it only means the reference is usable, not that the body has been read or acceptance has passed. Disclose unread files and non-transactional collection boundaries. Private session sources are read only when the current user has permission; reports cite shared item facts and must not automatically make private history public.