today · diff

v0.1.0 to v0.2.0

95 added, 96 removed. Audit A to A.

---
name: today
- description: Read-only same-day catch-up — current-session context plus objective commits, PRs, Jira touches, and Beads activity across the current repository or validated workspace repositories.
- allowed-tools: "Bash(~/.agents/skills/wrap-up/scripts/activity.sh:*), mcp__jira__jira_get"
+ description: Read-only activity recap for today or the previous workday across commits, PRs, Jira touches, and Beads in validated repositories; same-day mode adds current-session context.
+ allowed-tools: "Read,Bash(~/.agents/skills/wrap-up/scripts/activity.sh:*),mcp__jira__jira_get"
model-tier: standard
model: sonnet
effort: medium
- version: "0.1.0"
+ version: "0.2.0"
author: "flurdy"
---
- # Today — Same-day catch-up
+ # Today — Activity recap
- Show what happened today without ending the session or creating a handoff. `/today` is the
- lightweight, anytime complement to `/wrap-up`: it combines objective activity that may come
- from several AI sessions with qualitative context from this conversation only.
+ The single collection-and-rendering procedure for `/today` and its `/yesterday` alias. The
+ existing `/wrap-up` activity helper owns collection; this skill owns report layout and mode rules.
+ Use it for a catch-up or stand-up recap without ending the session or creating a handoff.
- ## When to use
+ ## Usage and mode
- - You want a reminder of today's progress without running the end-of-session workflow.
- - Several sessions or repositories may have contributed work today.
- - You need a concise status recap with no mutation or required follow-up.
+ ```text
+ /today # Same-day catch-up with current-session context
+ /today --previous-workday # Objective previous-workday recap
+ /yesterday # Retained alias for the previous-workday mode
+ ```
+ Accept no arguments (same-day mode) or exactly `--previous-workday`.
+ Reject unknown arguments and repeated flags before collecting.
+ The alias fixes the mode; do not infer it from conversation text.
+
## Read-only boundary
- Never create or update a handoff. Never change Git state, Beads, Jira, settings, files, or
- remote state. Do not commit, stash, push, rename or exit the session, update tracker status,
- or prompt for a mutation. This skill reports evidence only.
+ Never create or update a handoff. Never change Git state, Beads, Jira, settings, files, or remote
+ state. Do not commit, stash, push, sync, rename or exit the session, transition, comment, update
+ tracker status, or prompt for a mutation. This skill reports evidence only.
- ## Instructions
+ ## Collect once, freshly on every invocation
- Re-fetch on every invocation. Run the activity helper in workspace mode:
+ The helper requires Python 3.10+ for date and JSON processing. Run the installed command for the
+ selected mode once, in the invoking repository or workspace:
- ```bash
- ~/.agents/skills/wrap-up/scripts/activity.sh --workspace
- ```
+ | Mode | Command | Report header |
+ |---|---|---|
+ | Same-day | `~/.agents/skills/wrap-up/scripts/activity.sh --workspace` | `# Today — {DATE}` |
+ | Previous-workday | `~/.agents/skills/wrap-up/scripts/activity.sh --workspace --previous-workday` | `# Yesterday — {DATE}` |
- It reuses `/wrap-up`'s local-day filtering and GitHub queries, plus its authoritative
- multi-repository resolver. It emits:
+ The helper owns date selection, local-day boundaries, UTC conversion, and validated repository
+ resolution. Previous-workday means Friday when invoked on Monday and the preceding calendar day
+ otherwise. Use its `---DATE---` value; never recalculate the date in either entry point.
- - `---DATE---` — local calendar date used by every same-day filter.
- - `---WINDOW-START---` / `---WINDOW-END---` — the local, exclusive-end interval applied to commits and Beads records.
- - `---SCOPE---` — `WORKSPACE` or `CURRENT_REPO`.
- - `---REPOSITORIES---` — `{repository}|{absolute_path}` for validated repositories.
- - `---DIAGNOSTICS---` — bounded discovery or member failures.
+ Read these helper sections:
+
+ - `---DATE---` — selected local `YYYY-MM-DD` used for the header and Jira query.
+ - `---WINDOW-START---` / `---WINDOW-END---` — exclusive-end local interval for commits and Beads.
+ - `---STATUS---`, `---SCOPE---`, `---REPOSITORIES---`, `---DIAGNOSTICS---` — Git availability,
+ `WORKSPACE` or `CURRENT_REPO` scope, `{repository}|{absolute_path}` rows, and bounded omissions.
- `---COMMIT-STATUS---` — `{repository}|OK|NO_AUTHOR|ERROR`.
- `---COMMITS---` — `{repository}|{worktree}|{branch}|{sha}|{subject}|{when}`.
- - `---GH-STATUS---`, `---GH-DIAGNOSTICS---`, and the three PR JSON sections used by `/wrap-up`.
+ - `---GH-STATUS---`, `---GH-DIAGNOSTICS---`, `---PRS-CREATED---`, `---PRS-MERGED---`, and
+ `---PRS-CLOSED-UNMERGED---` — status plus the three PR JSON arrays.
- `---BEADS-STATUS---` — `{repository}|OK|NO_BD|NO_BEADS_IN_REPO|ERROR`.
- - The three Beads sections — `{repository}|{JSON array}` for in-progress, open items
- created today (`BEADS-CREATED-TODAY`), and items closed today. The generic
- `BEADS-CREATED` section includes closed rows for historical consumers; ignore it here.
+ - `---BEADS-IN-PROGRESS---`, `---BEADS-CREATED-TODAY---`, `---BEADS-CREATED---`, and
+ `---BEADS-CLOSED---` — `{repository}|{JSON array}` rows; select categories by mode below.
- At the same time, query Jira for issues the current user changed today:
+ If the helper fails, report collection as unavailable. Do not invent a date/window or query Jira
+ without a valid `DATE`; same-day current-session context can still render.
+ ### Jira
+
+ Use the exposed read-only Jira tool (`mcp__jira__jira_get` where available):
+
1. Fetch `/rest/api/3/myself` and project only `accountId`.
- 2. Query `/rest/api/3/search/jql` with:
+ 2. Query `/rest/api/3/search/jql` using the helper's selected date:
```text
issuekey IN updatedBy("{account-id}", "{DATE}", "{DATE}") ORDER BY updated DESC
```
Request fields `summary,status,issuetype,updated`, `maxResults: 20`, and project key, summary,
status, type, and updated. `updatedBy` supports day precision and an inclusive end date; repeating
- `DATE` selects exactly that Jira calendar day. It deliberately means changed, commented on, or
- transitioned and does not claim to find tickets that were only read. If either Jira call fails,
- render Jira as unavailable and continue.
-
- Render the following sections in order.
-
- ## Header
-
- ```markdown
- # Today — {YYYY-MM-DD}
- ```
+ `DATE` selects exactly that Jira calendar day. Do not add an `updated` field bound: it represents
+ only the latest update and can discard an issue touched during the selected day. This query covers
+ changes, comments, and transitions, not issues that were only read. A missing tool or either failed
+ call makes Jira unavailable; continue with other sources.
- ## Objective activity today
+ ## Render
- Start with one scope line:
+ Use the mode's report header, then one scope line:
- Workspace: `_Scope: {N} validated repositories — {names}._`
- Current repository: `_Scope: current repository — {name}._`
- No Git repository: `_Git unavailable — commit and repository activity skipped._`
- ### Commits
-
- If commits exist, render:
+ Same-day mode uses `## Objective activity today` before the objective subsections below.
+ Previous-workday mode goes directly to those subsections. Render them in this order, using each
+ table shape only for populated rows.
- ```markdown
### Commits
+ ```markdown
| Repo | Branch | SHA | Subject | When |
|------|--------|-----|---------|------|
```
- Use the repository field to preserve ownership. Add the worktree name to Branch only when it
- clarifies two worktrees of the same repository. For `NO_AUTHOR` or `ERROR`, render one bounded
- coverage note naming that repository. If no commits were found from repositories with `OK`
- status, render `_No authored commits found today._` Do not infer that the whole day was inactive.
+ Preserve repository ownership. Add the worktree name to Branch only when it distinguishes
+ worktrees of the same repository. For `NO_AUTHOR` or `ERROR`, retain successful rows and render one
+ bounded coverage note naming that repository.
### Pull requests
- Use the same rules as `/wrap-up`: parse created, merged, and closed arrays; de-duplicate a PR
- that appears in several arrays; merged wins over created or closed. Render only populated rows:
+ De-duplicate PRs across created, merged, and closed arrays; merged wins over created or closed.
```markdown
- ### Pull requests
-
| Event | PR | Repo | Title |
|-------|----|------|-------|
```
- If `GH-STATUS` is `UNAVAILABLE`, render `_GitHub unavailable — PR activity skipped._` If it is
- `ERROR`, retain any successful rows and render `_GitHub query failed — PR activity may be
- incomplete._` plus the bounded `GH-DIAGNOSTICS` entries. If GitHub is `OK` but all arrays are
- empty, omit this subsection.
-
- ### Jira
-
- Render Jira results only when populated:
+ For `UNAVAILABLE`, render `_GitHub unavailable — PR activity skipped._` For `ERROR`, retain
+ successful rows and render `_GitHub query failed — PR activity may be incomplete._` plus bounded
+ `GH-DIAGNOSTICS` entries.
- ```markdown
### Jira touched
+ ```markdown
| Key | Type | Status | Summary |
|-----|------|--------|---------|
```
- If the Jira call fails or is unavailable, render `_Jira unavailable — ticket activity skipped._`
- Do not let that failure suppress Git, GitHub, Beads, or current-session context.
+ For a failed or unavailable Jira query, render `_Jira unavailable — ticket activity skipped._`
+ Do not let that failure suppress other sources or same-day current-session context.
### Beads
- Beads evidence is repository-qualified. Render compact tables for populated categories in this
- order: **In progress**, **Created today**, **Closed today**. Each table uses:
+ Use repository-qualified rows in separate compact tables for populated categories:
+ | Mode | Categories in order | Created source |
+ |---|---|---|
+ | Same-day | In progress, Created today, Closed today | `BEADS-CREATED-TODAY` (excludes currently closed rows) |
+ | Previous-workday | Created, Closed | `BEADS-CREATED` (includes rows since closed) |
+
+ Both modes use `BEADS-CLOSED` for closed items. Same-day mode ignores the generic `BEADS-CREATED`
+ section. Ignore `BEADS-IN-PROGRESS` in previous-workday mode: current state is not historical
+ activity. Same-day **In progress** is also current state, not proof of work today or an achievement.
+
```markdown
| Repo | ID | Type | Pri | Title |
|------|----|------|-----|-------|
```
- “In progress” is current state, not proof that the item changed today; label it exactly and do
- not count it as an achievement. Skip repositories with `NO_BD` or `NO_BEADS_IN_REPO` silently.
- For `ERROR`, render one bounded note naming the repository.
+ Skip repositories with `NO_BD` or `NO_BEADS_IN_REPO` silently. For `ERROR`, retain successful rows
+ and render one bounded coverage note naming the repository.
- After the objective subsections, render each non-empty `DIAGNOSTICS` line as a concise coverage
- note. Never turn an unavailable source into an assertion that no activity occurred.
+ ### Empty sources and coverage
- ## Current-session context
+ - Same-day: omit empty PR, Jira, and Beads subsections when their sources are available. If no
+ commits came from repositories with `OK` status, render `_No authored commits found today._`
+ - Previous-workday: retain each available source subsection with no matching rows and render
+ `_No objective activity found for this source._` Do not render current in-progress Beads.
- Render this heading exactly:
+ Never turn an unavailable source into an empty-success assertion or generalise one empty source
+ into a claim that the selected day was inactive. Render non-empty `DIAGNOSTICS` lines as concise
+ coverage notes. Use the helper's current-repository fallback when workspace discovery fails, and
+ show its diagnostic. No Git repository still permits GitHub, Jira, and same-day session context.
+ Each source is independent; a failure must not suppress successful evidence from the others.
- ```markdown
## Current-session context
- _From this conversation only._
- ```
-
- Summarise the current conversation in 2–5 concise bullets covering only useful topics,
- decisions, completed work, discoveries, and open threads. This section may explain work that has
- not produced a commit or tracker change, but it must not attribute other sessions' objective
- activity to this conversation. If this is a fresh or purely mechanical session, say
+ Same-day mode only: render this section after objective activity, beginning with
+ `_From this conversation only._` Summarise useful topics, decisions, completed work, discoveries,
+ and open threads from this conversation in 2–5 concise bullets. Do not attribute other sessions'
+ objective activity to this conversation. For a fresh or purely mechanical session, render
`_No substantive current-session context to add._`
- Each source is independent. A failure or empty result in one source never prevents the remaining
- sections from rendering. Keep the complete output concise and descriptive rather than prescribing
- more work. End with:
+ Previous-workday mode must omit current-session context, even when invoked from a long session.
+ Keep either report concise and descriptive, without prescribing more work. End with:
```markdown
**Next:** Nothing required.
```
-
- ## Failure modes
-
- - Workspace discovery fails or is incomplete: use the helper's current-repository fallback and
- show its diagnostic.
- - One repository cannot be read: show successful repositories and one bounded omission note.
- - GitHub, Jira, or Beads is unavailable or errors: show the source-specific note and continue.
- - No Git repository: still show GitHub, Jira, and current-session context when available.