Derrek Young

Skill

Chief of Staff: Daily Wrap

Nine questions in the evening, one at a time or all at once, and your answers land in today's note in your own words. No coaching layer.

♲ Copy & make it yours
cos-daily-wrap.md
---
name: daily-wrap
description: Close out the day. Ask nine reflection questions, one at a time or all at once on request, keep the answers verbatim, run a check-in on the tracker, and write it all into today's daily note. Use when the user says they are wrapping up, done for the day, ready to reflect, want to close out the day, or runs /daily-wrap.
---

# Daily Wrap

Ask the user nine questions about their day and write their answers into today's
daily note in their own words. This is a capture session, not a coaching
session. Ask, listen, write, confirm.

## When this runs

In the evening, on `/daily-wrap` or when the user says they are wrapping up.
Once per day. If today's note already has an End of Day Reflection, say so
and ask whether to add to it or replace it.

Start immediately. Do not explain what you are about to do, do not ask if they
are ready, and do not open with a greeting. Ask question one.

## Before you start

Read `config/profile.md` for the name, timezone, and life threads. Read
`config/season.md` and note two things before the interview begins:

- **Non-negotiables** (question 4 of the season file). If the user named any, you
  will write a status line for each at the end. If the answer is blank or
  `(skipped)`, skip that section entirely and never mention it.
- **The custom evening question** (question 5). If there is one, you ask it last.
  If not, the interview is nine questions.

Get the timezone out of `config/profile.md` and pass it to `date` through Bash,
so the machine clock never decides what day it is. With `Europe/Lisbon` in the
profile:

```
TZ=Europe/Lisbon date +%Y-%m-%d
TZ=Europe/Lisbon date +%A
```

Run these once, before question one, and use that date for everything the wrap
writes. A wrap that starts at 11:50pm and ends after midnight still belongs to
the day it started, so never re-run `date` partway through and never let one
wrap write into two days' files.

Substitute whatever zone the profile names. Bare `date +%A` is wrong. Never infer
a weekday from a date string. If the profile has no timezone in it, stop and ask
for one before you write anything. Never guess a zone and never fall back to the
machine clock, because a wrap that lands in yesterday's file looks correct and
stays wrong.

The tracker check-in needs a date in the past, and past date arithmetic is not
portable. On macOS the shell has BSD `date` and takes
`TZ=Europe/Lisbon date -v-14d +%Y-%m-%d`. On Linux it has GNU `date` and takes
`TZ=Europe/Lisbon date -d '14 days ago' +%Y-%m-%d`. Run one, and if the shell
rejects the flag, run the other. Do not count back by hand.

### Get it all in hand before question one

Nothing mechanical belongs between their last answer and the file getting
written. Read everything the wrap needs up front, batched, so the interview and
the check-in both run on data you already hold.

The timezone gates the date commands, so this comes in two rounds. First, in one
block: `config/profile.md`, `config/season.md`, and `tracker.md`. Then, once the
zone is known, in one more block: the three `date` commands above, today's
calendar events if a connector is present, and a listing of `meetings/`.

Then ask question one. Do not read any of it a second time later. If one of those
reads fails, carry on with the rest and say which part of the wrap ran short on
the confirmation line, rather than dropping it in silence.

### When the config is not fully filled

Check the answer slots, not the file text. Both config files carry instruction
comments that describe the placeholder markers in prose, and those comments stay
there forever, so a plain search for that shape matches on a fully configured
vault every time. Look at what sits under each heading instead. Nothing in
`config/templates/` is config: those slots are filled by skills on every run, so
never read them as setup answers.

A slot counts as filled when it holds anything the user put there, and
`(skipped)` is something the user put there. Treat it as a filled answer, a
deliberate pass on an optional question, never as a blocker.

Then degrade rather than stop:

- Every slot still unfilled, nothing written at all: the user has not been set
  up. Say so in one line, offer the setup interview in CLAUDE.md, and stop.
- Some filled, some not: run the wrap with what is there. No non-negotiables and
  no custom question means the interview is the nine questions and nothing else,
  with no mention of what is missing. No tag set means the note goes in without
  tags.

The one gap you cannot work around is the timezone, because the wrap has to know
which day's file it is writing. Ask for it, wait, and do not guess.

A partly filled profile is a normal state, not an error.

Check whether a calendar connector is available. If one is, its read is part of
that second block and you offer a pass over today's meetings as the interview
closes. If not, the wrap runs exactly the same without it. Do not mention
connectors you do not have.

## The interview

The interview runs in one of two modes. Both ask the same questions and end in
the same place.

- **One at a time (default).** Ask a question, wait for the answer, then ask the
  next. This is what runs for a plain `/daily-wrap`.
- **Batch (on request only).** Post every question in one message as a single
  numbered list, then parse the one reply. Use it only when the user asks for it:
  "batch mode," "all at once," "give me all the questions." If it is unclear
  whether they want batch, run one at a time.

Rules:

- In the default mode, one question at a time. Wait for the answer before asking
  the next.
- Warm and casual. This is a conversation, not a form.
- Take short answers as complete. Push once only when a single word lands on a
  question that clearly wanted more, such as "fine" as the whole answer to how
  the day felt.
- If they skip ("nothing", "skip", "n/a"), move on and leave that section out of
  the note. Do not write "nothing" into the file.
- Do not analyze, reflect back, quote their answer approvingly, or offer an
  opinion mid interview. A brief acknowledgment, then the next question.

Ask in this order:

1. "What was your biggest win today?"
2. "What frustrated you most, or felt like a block?"
3. "Did you pick up anything new? An insight, something that clicked, anything
   that surprised you?"
4. "Any conversations or people worth remembering?"
5. "Did you make any decisions today, even small ones?"
6. "Anything unfinished or still on your mind that you don't want to lose?"
7. "What's the one thing you want to carry into tomorrow?"
8. "What are you grateful for today?"
9. "Last one, how did the day feel overall? Energy, mood, anything."

Then, if `config/season.md` defines a custom evening question, ask it last,
worded the way the user wrote it.

Question 5 does most of the work in this system. Small decisions count: what they
said no to, what they picked between, what they stopped doing. If the answer is a
single decision, that is fine. If they say none, leave the section out.

### Parsing a batch reply

Batch mode only. The list you post includes the custom evening question, if
there is one, as its last item. The non-negotiables sweep below is not in the
list, because it depends on what they answer, so it comes after the parse.

- Their numbered answers map by position to the list you posted: their "1." is
  your first question.
- A missing number, or "skip," "n/a," or a bare dash against one, is a skip.
  Leave that section out, same as in the default mode.
- If the reply is not numbered, has fewer answers than questions, or reads as
  combined or reordered, do not force a mapping. Ask one short follow-up that
  names the questions you cannot place, then carry on.

### The non-negotiables sweep

Only when `config/season.md` names non-negotiables. This is the one question you
are allowed to add, and you ask it after the last question, including the custom
one.

Read back through the answers they just gave. Some non-negotiables will already
be settled, because "got out for a walk at lunch" answers the walk. Take those as
answered and do not ask again. Then ask about whatever is left, all of it in a
single question:

> "Two quick ones before I write this up: did you get outside today, and were you
> in bed by eleven?"

One question, however many items are unresolved. Never one question per item, and
never ask about something they already covered. If everything is covered, ask
nothing at all and say nothing about it. If they wave it off, that is fine too,
write those lines as "not asked" and move on.

This is a checkbox sweep, not an opening. Take the yes or no, do not follow up,
do not comment on the answer.

## After the interview

Steps 1 and 2 are still the conversation. Do not announce a phase change, do not
say you are about to go and run something, and do not pause, because the reads
are already done and there is nothing to wait for. Keep going in the same voice
and let the exchange end when the tracker check-in ends. Everything from step 3
down is silent.

### 1. Today's meetings, when a calendar connector is present

Today's events are already in hand. For any meeting that has ended and that has
no note in `meetings/`, list them and ask once: "You had three meetings today
with no notes. Want to capture anything from them?"

Take whatever they give you and route it through the capture skill, one meeting
note per meeting. If they pass, move on and do not ask again.

With no calendar connector, skip this step silently.

This runs before the check-in on purpose. A note captured here becomes evidence
the check-in reads a moment later, so do not reorder the two.

### 2. Tracker check-in

You read `tracker.md` before question one. Take items only from the thread
sections below its `## Sections` heading. Everything above that heading documents
the format, and one line there has the shape of an unchecked item without being
one. Skip any line holding a placeholder in curly braces, and skip anything
inside a fenced code block wherever it sits, because a pasted example under a
thread section reads as a real item and then surfaces as a phantom to-do every
night until somebody notices it.

Surface at most five items total, grouped, one consolidated question per group.
Never go item by item.

Never check a box the user did not tell you to check. A meeting note is evidence
that a meeting happened, not evidence that their work around it is done, and a
wrongly closed item disappears from every future briefing and review. So when a
note in `meetings/` is dated today and the item's own text names preparation or
follow up for that specific meeting, say so and ask anyway, as part of the
group's one question:

> "Prep for the roof estimate, and there is a note from it, so I assume that one
> is done. Close it?"

Take the yes, then close it. If the item merely shares a person or a project with
today's meeting, that is not evidence of anything, so treat it like any other
item and ask plainly.

1. **Overdue** (`due:` before today, unchecked): "These slipped past their due
   date. Done, pushed, or dropped?"
2. **Stale**: two or three items with `captured:` fourteen or more days ago, no
   `due:`, not `!high`. "Still doing these?" Fourteen or more, not more than
   fourteen, so an item sitting at exactly fourteen days is caught here rather
   than falling between two definitions. The weekly recap draws the same line at
   the same number.
3. **Malformed**: a line sitting under a thread section that reads like an open
   item and has no checkbox. Every rule above matches on `- [ ]`, so an item
   written without one is invisible to this check-in, to the morning briefing,
   and to the weekly review, and it stays invisible for as long as it sits there.
   Say so once, offer to fix the syntax, and do not count it against the five.

Never raise items that are due soon, or high priority with no due date. Neither
has slipped, and asking about future work at the end of the day is nagging. The
morning briefing owns both groups. The check-in is for what already went wrong.

Apply their answer to `tracker.md` directly: check the box with a short outcome
and the date, edit the text if the scope changed, add or move `due:`, change
priority, or delete what they drop.

One more pass before you move on. If a win or a decision they described in the
interview matches an open item, that item is done and they will not think to say
so. Name it and ask: "Sounds like the permit call is done, close it?" This is
where an undated to-do finally gets closed, so do not skip it.

If nothing is overdue, stale, or malformed, and nothing in the interview matched an open item, skip this step without
comment.

### 3. Write into today's daily note

Find or create `daily/YYYY-MM-DD.md` from `config/templates/daily-note.md`,
filling `{{date}}` and `{{weekday}}`. Fill the `## End of Day Reflection` section:

```markdown
## End of Day Reflection

### Biggest Win
[answer]

### Biggest Frustration
[answer]

### What I Learned
[answer]

### People Worth Remembering
[answer]

### Still On My Mind
[answer]

### Carry Into Tomorrow
[answer]

### Grateful For
[answer]

### How the Day Felt
[answer]
```

Then the decisions from question 5 go in their own section. `## Decisions Made`
is a top level section of the daily note and it sits directly before the
`## End of Day Reflection` section. Create it there if it is not there yet, and
append to it if it is, because a capture earlier in the day may have opened it
already and put it in that same place. Never open a second one.

```markdown
## Decisions Made

- Dropped the Saturday market stall. Two months in and it never covered the gas.
- Told [[Dana Whitfield]] the roof work moves to April, rather than starting it in the rain.
```

Keep that heading spelled exactly `## Decisions Made`. The weekly recap harvests
the section by name, and the monthly and quarterly reviews are built on what the
weekly finds. A renamed heading breaks the ladder quietly.

If the season file defines a custom question, its answer goes in a final
subsection of the reflection, titled with a short phrase from the question
itself.

Write every answer **verbatim**. Do not paraphrase, tidy the grammar, or upgrade
their word choice. Leave out any section they skipped. While writing, wikilink
every person and project mentioned, and add tags to the note's frontmatter from
the set in `config/profile.md`.

### 4. Non-negotiables check

Only if `config/season.md` names non-negotiables. If it does not, this section
does not exist and you never bring it up.

Append to today's daily note as the last section, below the reflection:

```markdown
## Non-negotiables
- Walked outside: yes, got the dog out before the first appointment
- Asleep by 11: no, "up past one with the baby"
- Dinner at the table: not asked
```

Each line comes from something they said, either in the interview or in the
sweep. Do not guess and do not infer a yes from silence. Use "not asked" when the
sweep did not get to it or they waved it off, and it is better than a wrong yes.
Record, do not advise. Three nights of "no" is the weekly recap's business, not
yours.

### 5. Commit

Stage the files you actually touched, by path. Never `git add -A`, because it
sweeps up whatever else is sitting in the folder:

```
git add daily/2026-03-14.md tracker.md
```

```
git commit -m "daily-wrap: 2026-03-14"
```

Run these as separate commands, never chained with `&&`. A commit with nothing
to record exits non-zero, and a chain stops there without a word.

Then check for a remote. Push only to a remote the user owns, as its own
command, whether or not the commit had anything new. If there is no remote,
stop after the commit and say nothing about it.

## Output

Three to five lines. Nothing else.

```
Wrap saved -> daily/2026-03-14.md
Decisions: 2 recorded
Tracker: closed the roof measurements and the permit call, pushed the gutter quote to 2026-03-20
```

Do not summarize the day back at them. Do not tell them it sounds like a good
day, a hard day, or any kind of day. Do not offer a suggestion for tomorrow. They
just spent ten minutes telling you what happened, and they were there for it.

If they want to add something after the wrap is saved, treat it as a new capture
rather than reopening the interview.

## Tone and format rules

- Their words stay theirs. "The whole day was a dumpster fire" does not become
  "the day had its setbacks." A year from now the value of this file is that it
  still sounds like them.
- No coaching, no affirmations, no encouragement layer, during or after.
- Skipped questions produce no section. A quiet day produces a short note.
- Frontmatter stays at three fields: `type`, `date`, `tags`, tags as a quoted
  inline array.
- No em dashes and no double hyphens in anything you write. Commas, parentheses,
  or a new sentence.
Category
Tools
Tags
#chief-of-staff#daily#reflection#journaling
Best for
Claude Code
Updated
September 2026

What it does

It asks nine questions, one at a time by default, or all in one list if you’d rather answer in a single reply: your biggest win, what blocked you, what you learned, people worth remembering, decisions, what’s unfinished, what you carry into tomorrow, gratitude, and how the day felt. Skip one and that section doesn’t appear in the file. Answer it and the answer goes in verbatim, your grammar and your word choice intact.

Question five is the one everything above this rung depends on. Decisions land under a heading spelled ## Decisions Made, in a fixed position in the note, and the weekly recap harvests that heading by name. Rename it and the ladder breaks quietly.

The interview ends in a check-in on your tracker. It asks only about what already went wrong: items past their due date, and items that have sat untouched for two weeks. At most five, grouped, one consolidated question per group rather than one per item. It never asks about work that’s coming up. The morning briefing handles that, and being asked about tomorrow’s to-dos at the end of the day is just nagging. It won’t close a box you didn’t tell it to close, including when a meeting note proves the meeting happened, because a wrongly closed item disappears from every future briefing and review. It also reads back over what you just said: if a win you described matches an open item, it names that item and asks.

Then it writes the note, commits the files it touched by path, and hands you three to five lines.

When to use it

Evening, once a day, about ten minutes. It’s the input for everything above it, so a week of wraps is what makes the weekly recap worth reading and a month of them is what the monthly stands on. Miss a night and nothing breaks, the record just thins.

Make it yours

The nine questions are a list you can edit. Cut the one you never have an answer for. Add your own through the season file, which holds an optional custom question the wrap asks last and files under its own subsection.

Non-negotiables come from the same place. Name them and the wrap sweeps for whatever your answers didn’t already cover, in a single question rather than one per item, then writes a status line for each. Leave them blank and the section never exists.

The rule worth keeping as written is the one against coaching. It won’t tell you what kind of day you had, and it won’t tidy “the whole day was a dumpster fire” into something more presentable. A year from now, that’s the only reason the file is worth reading.

The full AI Chief of Staff suite

Seven skills, each reading one level down from the one above it. The full write-up is in Your AI Chief of Staff, and the whole kit is on GitHub.

  1. Capture, files a thought the moment you have it
  2. Daily Briefing, opens the day
  3. Daily Wrap, closes it, nine questions
  4. Weekly Recap, reads the week’s days
  5. Monthly Recap, reads the month’s weeks
  6. Quarterly Recap, reads the quarter’s months, rewrites your season
  7. Annual Review, reads the year’s quarters