with one click
wrap-up
End-of-day wrap-up skill — daily summary and status update
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
End-of-day wrap-up skill — daily summary and status update
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Capability discovery — the canonical answer to 'what can you do?' and 'what do I say to ...?'
Close skill — draft resolution comment, sync backends, redirect to next task
Start skill — begin task with optional backend sync
Morning brief skill — prioritized daily summary
Reconcile skill — detect wiki/backend drift and let the User resolve it via four moves
Triage skill — walk untriaged Asana pages, push a new ticket or mark not-needed
| name | wrap-up |
| description | End-of-day wrap-up skill — daily summary and status update |
End-of-day summary and workspace update.
Run this skill whenever the user signals the end of their day — "wrap up", "wrapping up", "end of day", "eod", "done for today", or similar. Invoke it immediately — do not ask "would you like me to run /wrap-up?" first.
Read today's daily page frontmatter. If wrap_up is already set to a timestamp from today, the user has already wrapped up. Confirm: "You wrapped up at — want to amend that or start fresh?"
If active_task is set on today's page, ask before continuing: "You still have marked as active — ready to wrap up?" This prevents accidental wrap-up mid-flow.
Read today's daily page from wiki/daily/YYYY-MM-DD.md. If no daily page exists, create one first:
rubber-ducky page create daily
Kick off the linter agent in the background while gathering context. Its findings (drift, stale tasks, broken links) will be presented as a separate card later, not buried inline:
Agent({
subagent_type: "linter",
prompt: "Run wrap-up linter checks on this workspace"
})
Scan wiki/tasks/ and read activity logs and frontmatter. A task was "touched" if:
updated timestamp is from todayFor each touched task, run via Bash:
rubber-ducky frontmatter set wiki/tasks/<slug>.md status <new-status>
rubber-ducky frontmatter set wiki/tasks/<slug>.md updated <now-iso>
If a task was completed, also set:
rubber-ducky frontmatter set wiki/tasks/<slug>.md closed <now-iso>
After the User's own changes are recorded (Step 3), invoke /reconcile to sweep for anything that drifted during the day — external transitions, comments, assignee changes the User didn't make. This is the second half of the twice-daily ritual (the first half runs in /good-morning).
/reconcile fans out pull --dry-run per linked backend, assembles a 3-way view across {wiki, asana, jira} per active task, and walks the User through resolution one ticket at a time (see src/skills/reconcile/SKILL.md). When nothing drifted, it reports a one-line summary and wrap-up continues. When drift surfaces, resolve it now — the daily log entry in Step 4 and the status snapshot in Step 5 should reflect the reconciled state, not the pre-reconcile guess.
Skip cleanly when no backends are configured, the user is wrapping up offline, or /reconcile errors on connectivity. Note the skip in the wrap-up output ("Skipped wrap-up reconcile — no backends configured.") rather than failing the routine.
Append a wrap-up entry to the workspace log:
rubber-ducky log append "EOD wrap-up: <N> tasks touched, <M> completed"
Update today's daily page body sections by editing the file directly:
doneAlso update the tasks_touched frontmatter array:
rubber-ducky frontmatter set wiki/daily/YYYY-MM-DD.md tasks_touched '["task-slug-1","task-slug-2"]'
rubber-ducky frontmatter set wiki/daily/YYYY-MM-DD.md wrap_up true
rubber-ducky frontmatter set wiki/daily/YYYY-MM-DD.md active_task null
If wiki/asap.md exists, scan it for items the user might want to close out. For each pending item, ask:
rubber-ducky asap resolve <index>rubber-ducky page create task "<title>"Garbage-collect resolved items in batch at the end (so the file doesn't accumulate cruft).
The linter agent from Step 1a has finished. Present its findings as a distinct card in the wrap-up output:
─── Linter findings ───
<count> issue(s):
- <rule>: <count> — <one-line description>
...
Don't fix the issues automatically. Surface them so the user knows; offer "Want to address any of these now?"
The vault treats context capture as ongoing. If the user produced drafts,
comments, or messages today (visible in the daily file's ## Work log /
## Notes & context sections, or in any task page activity log dated
today), they're potentially useful voice samples for wiki/voice.md.
Check whether the user has opted in:
rubber-ducky settings get ingest.auto_on_wrap_up
false (the default), skip this step entirely.
Do not offer; do not mention it. The user has explicitly chosen not to
spend tokens on this at wrap-up.true, scan today's user-authored material and offer:
"I saw N pieces you wrote today. Want me to ingest them as voice
samples? (/ingest-writing handles the routing.)" On yes, route the
raw text through /ingest-writing.This is the only ongoing-capture hook the wrap-up skill runs. Other
hooks (e.g. at /onboard) are owned by those skills.
After the daily summary is complete, check if any undefined terms came up during the day:
UBIQUITOUS_LANGUAGE.md to get the current set of defined terms.UBIQUITOUS_LANGUAGE.md.If the user triggers this skill but has an active_task set in today's daily page, confirm they want to wrap up: "You still have [active task] marked as active — ready to wrap up for the day?" This prevents accidental wrap-up mid-flow.
A concise end-of-day summary:
Keep it brief — the daily page has the full record.