
Part of the VS Code + GitHub Copilot as a Personal Assistant series.
The first three minutes of the working day used to look like this. Open Outlook. Skim the inbox. Open the calendar. Note the day’s meetings. Open the diary. Read yesterday’s carry-forward. Open a few project files. Try to remember where I left off. Reach for the second coffee. Try again.
It now looks like this. Type a single phrase into a chat. Wait. Read the briefing.
What the routine does
The phrase is “good morning” (or some variant). Custom instructions in the workspace recognise the trigger and fire off a structured routine. The routine:
- Calls a small script that fetches authoritative time from an external API, so the briefing knows what time it actually is regardless of the machine’s clock.
- Reads
!Calendar/today.mdand!Calendar/upcoming.jsonfor the day’s meetings, converted into my current timezone. - Reads any new emails that landed overnight from
!Emails/input/. - Reads yesterday’s diary entry for carry-forward action items.
- Reads the active projects in
!WorkDiary/projects/and notes any blockers. - Reads any new entries that arrived overnight on the Teams chat threads it monitors.
- Produces a single briefing in a fixed format: time and zone, today’s calendar, emails that need attention, carry-forward actions, projects with blockers, and a suggested focus for the morning.
Total elapsed time, including me reading the briefing carefully: about three minutes. Total typing on my end: two words.
What the briefing actually looks like
A typical one for a normal weekday:
Monday 26 May 2026, 07:34 NZST
Today’s calendar:
– 09:00 to 09:30, internal weekly with engineering
– 11:30 to 12:00, customer briefing prep, blocked
– 14:00 to 15:00, customer X review call (Teams link)
Emails since end of yesterday:
– One from customer Y about the open performance issue. Wants a 30 min call this week.
– One from a colleague about the upcoming conference talk. Needs the slide deck preview by Wednesday.
Carry-forward from Friday:
– Finish the FATCAT product area audit
– Send the customer X follow-up email
– Review the draft blog post in!Blogs/drafts/
Active projects with blockers:
– Project Z is waiting on a decision from team T. Last update was three days ago. Worth a nudge.
Suggested focus for the morning: customer X review call prep, then carry-forward actions in order of size.
The format is the same every day. The content is whatever the inputs actually contain. There is no editorial fluff. No “have a productive day”. Just the information.
Why the format matters
Three things make this work where similar attempts have failed for me in the past.
It is the same every day. Same sections, same order, same conventions. My eye knows where to look for what. I do not have to read the whole thing to find the calendar. I know it is in section two.
It is grounded in actual files. The briefing is not generated from the model’s general knowledge. It is generated by reading specific files in the workspace. If a meeting was on my calendar, it will be in the briefing. If an email arrived, it will be summarised. The accuracy is the accuracy of the underlying files.
It surfaces blockers without being asked. This is the section that surprises me most often. The routine notices that a project has not had a status update in days, and flags it. That nudge has saved me from going a full week without realising something I cared about was stuck.
The end-of-day bookend
For about six months I only had the morning routine. Then I added an end-of-day version. The two routines together close the loop.
The end-of-day routine:
- Reviews what landed in the diary today.
- Prompts me to add any decisions I made that I should record.
- Captures action items into the carry-forward section of today’s diary, so the next morning’s routine picks them up.
- Prompts me about anything I learned that should go into product feedback, customer profiles, or memory.
- Stages tomorrow’s diary file.
Adding the EOD routine made the morning one work better. The morning routine relies on yesterday’s diary having a clean carry-forward section. The EOD routine guarantees that.
How to set this up
You do not need everything I have on day one. The minimum viable version is:
- A
!Calendar/today.mdfile with today’s meetings. Manually maintained at first if you do not have a Power Automate feed yet. - A daily diary file at
!WorkDiary/daily/YYYY-MM-DD.md. Empty is fine. The routine will create one if it does not exist. - A section in your custom instructions file that defines the routine. Something like “When the user says ‘good morning’, do the following: read these files, format them like this, produce a briefing in this shape.”
That is enough to get value from day one. Everything else (Power Automate feeds, project tracking, Teams chat capture) can be added later. The routine improves as the inputs improve.
Practical tips
- Keep the trigger short. “Good morning” works because it is the thing I would say anyway. Long trigger phrases break the habit.
- Make the format opinionated. Resist the urge to be flexible. The point is that the briefing is reliable.
- Iterate the prompt, not the moment. When the briefing is wrong, fix the instruction. Do not just ask follow-up questions in the chat. The next day you want it right the first time.
- Include “what NOT to surface”. My routine explicitly ignores out-of-office notices from other people. Without that, every fortnight my briefing would be twenty lines of colleagues telling me they are on holiday.
- The bookend matters. The morning routine is much better with the EOD routine feeding it. They are a pair, not standalone.
The mental model
A regular morning involves running through your inputs by hand, in your head, while making coffee.
The routine version is a colleague who got in early, read everything, and is waiting at your desk with a single page.
The colleague is not smarter than you. They are just earlier and more thorough than you can be at 7am.
Next in the series: Subagents: send the intern to do the legwork.
The LinkedIn version of this tip went out on 20 May 2026.