Start or close a work block. `/session <type> [project]` starts a block; `/session end` closes it. On start: first session of the day delivers a full briefing (priorities, calendar, open work); subsequent sessions load context for the declared focus. Session type shapes AI posture. On end: logs what happened, asks if more sessions are coming, and either does a lightweight carry-over or a full day reconcile. Invoke when the user says "session", "good morning", "what's on today", "brief me", "catch me up", "let's do a focus session", "going into brainstorm mode", "I'm about to work on X", "wrapping up", or "done for the day".
One command for the whole loop.
/session focus-work my-project ← start a work block
/session end ← close it
Run all data-gathering steps concurrently where possible — do not wait for one to finish before starting the next.
Note the current date and time via date +'%Y-%m-%d %H:%M %Z'. Use this for
all timestamps — never trust <current_datetime> (it returns UTC).
end → skip to §CloseExtract from the user's message:
focus-work, brainstorming, research, meetings, writing, , or freeformgamingPROJ-189, dashboard deploy)If neither is given, that's fine — treat it as a general session start.
Determine:
notebook/daily/{TODAY}.md has a ## Plan section alreadyRun concurrently:
aya status -f json — system health, alerts, reminders, watches. If aya is not installed, skip.aya context — quick workspace snapshot (active projects, todo count, inbox size, last daily note). Use as baseline for deeper scans. If deeper scans contradict, trust the deeper scan.aya inbox --as <label> -f json — pending relay packets. Read instance_label from .workspace.yml for the --as value. If aya is not configured, skip.If today's daily note has no ## Plan section yet (or doesn't exist), run
the full briefing. This is the only time signals are pulled automatically.
Adapt depth based on context:
| Context | Depth |
|---|---|
| Weekday, morning | Full — all sections |
| Weekday, afternoon/evening | Focused — skip calendar, surface blockers and carry-overs only |
| Weekend | Light — personal items, creative work prominent, skip work tracking |
Check yesterday's (and recent) daily notes. Extract:
If carry-overs exist, treat those as the top of Tier 1 — do not re-derive:
Carrying from {YESTERDAY}: {item} — {context}
Read notebook/AGENTS.md to understand repo structure and active project paths.
Read the workspace's task tracking file (e.g. notebook/inbox.md, a todos.md,
or whatever the workspace uses). Capture unchecked items. Note any sitting more
than a week.
Group as:
Read .workspace.yml for directories.projects (default: projects/).
Scan each project's status.md:
git log -1 --format='%ai' -- {file} (also check filesystem mtime — uncommitted edits count as "touched")Pull the delta since the last daily note:
Tickets: assigned tickets + comments on active tickets
GitHub: PR review requests, CI failures, comments on open PRs
Slack: direct mentions + active project channels (if connected)
Calendar: today's events, conflicts, prep needed (if connected)
Surface any aya alerts, watches, or due items from the status check.
Skip gracefully if integrations are not available.
Produce the briefing. Omit sections with no data — don't show empty tables.
### Session Briefing — {YYYY-MM-DD} {day of week}
**Snapshot**: {N} tasks open · {N} projects active · {N} stale · {N} aya packets pending
---
#### Tier 1 — Act now
Items that are carry-overs, blocked, or time-sensitive.
| # | Item | Source | Why now |
---
#### Tier 2 — Advance today
In-flight work that can make meaningful progress this session.
| # | Item | Source | Context |
---
#### Tier 3 — On radar
Open but no immediate pressure.
| # | Item | Source | Notes |
---
#### Stale projects
Projects not touched in >7 days.
| Project | Last touched | Status |
---
#### Today's calendar
(if available)
---
#### Pending aya packets
(if any)
Prioritization logic (applied in order):
Keep it fast — orientation, not a report. Three tiers, bullet points.
If notebook/daily/{TODAY}.md doesn't exist, create it:
# {YYYY-MM-DD}
## Plan
{tier 1 and tier 2 items as a checklist}
## Progress
{empty}
## Notes
{empty}
If it exists, append under a ## Briefing section without disturbing existing content.
After the briefing, skip to §5 (posture) if a type was declared, otherwise ask:
"What do you want to pick up first?"
If today's daily note already has a ## Plan section, skip the full briefing.
Summarize what's already in the plan rather than rebuilding.
If a project or focus was named, load the minimum useful context:
projects/<name>/status.md — current state, blockers, next actionsprojects/<name>/README.md — frontmatter (ticket key, repos, run env)code_dir is set and branch matters — git status, git log --oneline -5Surface a one-paragraph situation report: where the project is, what's blocking, what the obvious next action is.
After the situation report, assess whether there are signals worth investigating: open PRs, unread ticket comments, recent commits, aya packets. If so, offer one level deeper — don't just do it.
Level 1 (always): status.md + README loaded → situation report
Level 2 (offer): "PR #22 has no review yet. Want me to pull the full diff?"
Level 3 (offer): "Two pending config changes. Want me to trace the drift?"
Level 4 (offer): "I can spawn parallel agents for a complete picture — 2-3 min."
One sentence per offer. Wait for yes before going deeper. Stop when the user says "good enough" or starts working.
A research session type triggers Level 3–4 depth automatically.
| Type | Posture |
|---|---|
focus-work | Execution-mode: concise, no tangents, interrupt only if blocking |
brainstorming | Expansive: ask questions, surface alternatives, hold ideas open |
research | Context-aggressive: lead with agents, synthesize before presenting |
meetings | Capture-first: decisions + owners + actions above all else |
writing | Structure-first: coherence and flow before speed |
gaming / play | Personal mode: no project overhead, relaxed |
If no type was declared, don't force one — just proceed naturally.
State the posture briefly, then stop talking and let the user work.
Append to notebook/daily/{TODAY}.md under ## Progress:
- **HH:MM** — Session: {type} / {focus} — [one line of intent]
Use date +'%H:%M %Z' for the timestamp. Never use <current_datetime>.
Reached via /session end.
Write a progress log entry — what changed, what shipped, what matters.
Use date +'%H:%M %Z' for the timestamp. Max 2 lines.
- **HH:MM** — [what happened, ticket/PR refs if relevant]
Ask immediately after writing the entry:
Done for the day, or more sessions coming?
More sessions coming → lightweight close:
Note carry-overs from this block:
**Carry-over:** [one line — what to pick up next]
Done. No recap, no summary, no ceremony.
Done for the day → full reconcile:
Plan vs actual — read ## Plan from today's daily note.
Note what hit, what slipped, why (one line each).
Carry-overs — anything unfinished that needs tomorrow. Flag if blocking.
Knowledge harvest — ask:
"Anything from today worth capturing in
notebook/knowledge/?" If yes, invoke the/session-learningsskill. If the user declines or says "nothing new," move on — don't force it. This is the structured step that prevents hard-won context from evaporating into git blame.
Tomorrow's stub — create notebook/daily/{YYYY-MM-DD}.md for tomorrow.
Add frontmatter + ## Plan stub with carry-overs already populated.
Status updates — for any project that advanced today, update
projects/<name>/status.md: current state, blockers, next 3 actions.
research session type triggers Level 3–4 depth automatically--day on /session end forces the full reconcile without asking/session end or a new /session/session with no arguments on first-of-day is the daily briefingThis skill also runs for: