nightly-dream
Skill2 starsChanged 7 days agoMITView on GitHub
Workbench routine and the heart of the self-improving loop. Each workday night it reads the day's recap and the owner's project captures, files them into people, projects, organizations, tools, the glossary and goals (dream-owned blocks and ledgers only), learns from corrections, digest answers and how drafts were edited before sending, proposes improvements, and writes what it read, changed and wasn't sure about to Tracking/DREAM_LOG.md. Runs as "[Workbench] Nightly Dream"; can be run by hand with /workbench:nightly-dream.
In this repository10 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- calendar-syncSkill
- captureSkill
- daily-briefingSkill
- eod-recapSkill
- librarianSkill
- migrateSkill
- schedulesSkill
- setupSkill
- weekly-reviewSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
13 rules. About 0 are common, 2 are distinctive, and 11 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
11
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 36
Never write any CLAUDE.md, any Daily/ file, any Meetings/ file, anything in Captures/, or anything in Archive/.
- Very specific: line 43
Before anything else, scan every file in Tracking/Captures/, whatever its date, and list each capture line not yet recorded under ## …
- Very specific: line 70
Every Tracking/Captures/*.md file with lines not yet listed under ## Processed captures.
- Very specific: line 71
If Meetings/ exists, today's meeting files above ## Transcript only, to cross-check the recap's commitments and decisions.
- Very specific: line 89
Contradiction-queue answers: When the owner answers one of the weekly's numbered reconcile questions, file the answer as a supersession on …
- Distinctive: line 119
Add each edge the day's sources state or clearly show: who works on which project, who owns it, which org it involves, which tools it uses, …
- Very specific: line 134
b3. Contradictions: When two sources disagree about the same thing (two dates, two owners, two figures), add both to a ## Needs reconciling …
- Very specific: line 138
b4. Commitments maintenance: After the contradiction pass, scan tonight's recap (both ### Owed by and ### Owed to, since
- Very specific: line 155
Changed: when a capture or recap line states a new deadline or a new owner for an existing row ("pushed the Q4 draft to the 15th", "Sam's …
- Very specific: line 169
Every correction: capture and every correction in the recap Signals becomes a rule.
- Distinctive: line 195
d. Escape hatch: If a recap line is genuinely ambiguous about one entity, you may make one read-only source lookup for it, at most five a …
- Very specific: line 268
When two sources disagree, add a ## Needs reconciling section to the page with both, not a pick (b3).
- Very specific: line 270
Keep Recent (dream) and Current state (dream) blocks short: five lines or fewer, newest first.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Nightly dream
You consolidate the day into long-term memory, the way sleep does. The recap is the account of the day; captures are what the owner settled in chat. You file both into the pages they belong on, learn from corrections, and leave a log the owner can audit in two minutes.
You do not go back to the sources (see the escape hatch). You do not send or change anything outside the vault.
What you own, and nothing else
| Where | What you may write |
Tracking/DREAM_LOG.md | a new entry at the top of ## Entries, ## Processed captures lines |
Tracking/Signals/<today>_dream.md | the whole file (new each night) |
Projects/* | ## Open commitments (mine), ## Decisions, ## Current state (dream); relationship properties (owner, people, orgs, tools); new project pages |
Projects/INDEX.md | status cells, new rows, moving rows (never change a row's link) |
People/* | ## Recent (dream); new stubs; role:/role_confirmed:/role_source:/status: on a stated change; relationship properties (org, reports_to, direct_reports, projects, relationship) and last_contact |
People/NAME_VARIANTS.md | new rows |
Organizations/* | new pages; ## Recent (dream); status:; people, projects, tools |
Resources/Tools/* | new tool pages; ## Current state (dream); owner, vendor, projects |
Resources/GLOSSARY.md | ## Needs confirmation entries; promoting confirmed terms into the table |
Context/me.md, other Context/ org pages | ## Current state (dream) |
Context/voice.md | ## Learned rules (dream) |
Tracking/GOALS.md | ## Current state (dream) |
Tracking/FRICTION_LOG.md | entries under ## Open and ## Resolved |
Tracking/COMMITMENTS.md | new rows; Due, Who owes, Last evidence and State on existing rows. nightly-dream adds rows and updates Due, Who owes, Last evidence and State; weekly-review alone removes rows, closing looks-done rows on evidence. Never delete or close a row yourself. |
Context/surfacing.md | learned rules, appended as dated lines; marking a line (superseded YYYY-MM-DD). You append learned rules; the owner edits it directly. |
Tracking/Signals/RUN_LEDGER.md | one appended line when you finish. Every routine appends here and none edits or deletes a line; it's the one documented exception to one writer per file. |
Never write any CLAUDE.md, any Daily/ file, any Meetings/ file, anything in Captures/, or
anything in Archive/. Never delete. Never move files (the weekly does that). If the root
CLAUDE.md lists a standing exception for you, it applies; otherwise these limits are absolute.
Whenever you write to a page, bump its updated: to today.
Step 0: gap recovery
Before anything else, scan every file in Tracking/Captures/, whatever its date, and list each
capture line not yet recorded under ## Processed captures in Tracking/DREAM_LOG.md. File all of
them in this run, oldest first, along with tonight's. A night the dream didn't run must never
strand a capture: the next run picks up everything.
Also read Tracking/Signals/RUN_LEDGER.md for your own last line. If one or more nights were
missed, say so in the log entry (**Backlog:** 2 missed nights, 7 captures from 11-05 and 11-06
filed tonight).
Step 0 runs even when tonight's recap is missing (see Inputs): filing captures doesn't depend on it.
Inputs
- Root
CLAUDE.md,Context/me.md,People/NAME_VARIANTS.md,Resources/GLOSSARY.md. - The confidence bar: the newest
Tracking/Signals/*_weekly.md"Thresholds in force" table if one exists, otherwise the defaults inDREAM_LOG.md(status 0.70 · commitment 0.80 · decision/person/term 0.90). - Today's
Daily/<date>_DAILY_RECAP.md. If it's missing, finish Step 0 (file the backlog captures), write a DREAM_LOG entry saying so, add a FRICTION_LOG## Openline ("recap missing for<date>"), append your ledger line aspartial, and stop. Don't rebuild the day yourself. 3b. EveryDaily/*_RECONSTRUCTED_RECAP.md, whatever its date, not yet listed under## Processed capturesinDREAM_LOG.md. The recap writes these for a missed day, usually the evening after, so tonight's may cover yesterday. File them like a recap, before today's, but only what they state, and mark everything you file from onesource: reconstructed recap. Then list each under## Processed captures(see Outputs) so it's never filed twice. Do this even when today's recap is missing. Tracking/Signals/<date>_recap.md: graded claims, graded drafts, answers to the digest, corrections.- Every
Tracking/Captures/*.mdfile with lines not yet listed under## Processed captures. - If
Meetings/exists, today's meeting files above## Transcriptonly, to cross-check the recap's commitments and decisions. - Answers to yesterday's Needs your yes: lines the owner ticked
- [x](approved) or deleted (declined) in the previous DREAM_LOG entry,answer:captures, and## Answersin the recap Signals (replies to the digest). - For drafts graded
light-editorheavy-edit: the draft file inTracking/Drafts/, and the recap's note of what changed. Tracking/IMPROVEMENTS.md## Open, so you don't re-propose what's already pending or declined.Tracking/COMMITMENTS.md,Archive/Superseded/COMMITMENTS ledger.mdif it exists (closed rows, for the duplicate check only), andContext/surfacing.md.- The newest
Daily/*_NEXT_WEEK_PLAN.md, for contradiction-queue questions, and any answers to them (captures or digest replies like "reconcile 2: the March date is right").
What to do
a. Apply answers. Ticked items: write them. Deleted items: drop them and don't propose them again for 30 days.
Contradiction-queue answers. When the owner answers one of the weekly's numbered reconcile
questions, file the answer as a supersession on each affected page: the winning claim stays
live, the losing claim is demoted to superseded with a forward link to the winner and the
answer as its source (source: answer 2026-11-09 reconcile 2). Keep the losing claim's history;
nothing is deleted. Then remove that conflict from the page's ## Needs reconciling section, and
drop the section when it's empty. This is the one edit you make to a ## Needs reconciling
section other than adding to it.
b. File the day. For each line in the recap and each unprocessed capture line:
- Decision → the project's
## Decisionsledger (source,since,state: live). If it reverses an earlier decision, demote the old one tosupersededwith a forward link. - Commitment owed by the owner → that project's
## Open commitments (mine), only at or above the commitment bar. Below it, it becomes a Needs your yes item. A commitment the recap shows done gets ticked- [x]with the evidence as its source. - Status or progress →
## Current state (dream)on the project, person, org, tool or goal: a few dated lines, newest first, replacing lines that are no longer true (demote, don't delete, if it was a claim someone relied on). - Person: if named in two sources within 30 days and no page exists, create a stub using the page
shape in
People/CLAUDE.md. Never guess a role. One mention only → list under New in the log. - Organization: create a page only for a live relationship (today's sources plus one other in 30
days), and check
Resources/Tools/first for a same-name tool page. - Tool: create a page when a tool is used, not just mentioned.
- Term: unknown terms go under
## Needs confirmationin the glossary,state: unconfirmed. A term heard three or more times unconfirmed becomes a Needs your yes question. - Name variant: when a misspelling clearly maps to an existing person, add an
UNCONFIRMEDrow toNAME_VARIANTS.mdunless the owner confirmed it, thenconfirmed. - Projects index: keep
INDEX.mdrows in step with project pages' status.
b2. Build the relationships. This is what turns notes into a graph. For every person, org,
project and tool touched tonight, follow Relationships in the root CLAUDE.md:
- Add each edge the day's sources state or clearly show: who works on which project, who owns it,
which org it involves, which tools it uses, who someone reports to, which org they're at.
"Pat and Sam discussed the Acme rollout" puts Pat and Sam on that project's
peopleand the project on both theirprojects, and Acme on the project'sorgs. - Always write both sides in the same pass (project
people↔ personprojects, orgpeople↔ personorg,reports_to↔direct_reports), and mirror the edge as a line in each page's## Relatedwith its source. - Set
last_contacton a person to the date of the newest recap line, meeting or capture involving them and the owner directly (not just a mention). - Edges below the person/decision confidence bar (a guess from one ambiguous line) go under Needs your yes instead: "Is [[Sam Ortiz]] on [[Acme Expansion]]?"
- A relationship a source says has ended (left the company, rolled off the project, churned) moves to
former_*with the end date; never just deleted. - Record edge counts in the log entry:
Relationships: +6 edges, 1 moved to former.
b3. Contradictions. When two sources disagree about the same thing (two dates, two owners, two
figures), add both to a ## Needs reconciling section on the page, each with its source and the
date you added it (added: YYYY-MM-DD). Never pick one. The weekly queues these for the owner.
b4. Commitments maintenance. After the contradiction pass, scan tonight's recap (both ### Owed by and ### Owed to, since
Owed to lines reach no page otherwise), any reconstructed recaps filed this run (3b), the pages
you touched tonight, and today's captures (plus any backlog captures from Step 0) for commitment language: promises,
deadlines, "I will", "I'll send", "owes", "waiting on", "by Friday". For each:
- Below the bar: a candidate under the commitment confidence bar (the same bar as step b) is
not a row. It stays a Needs your yes item, and becomes a row only once the owner approves it
(ticked, or an
answer:capture). The register holds confirmed commitments only. - New commitment, at or above the bar: add a row to
Tracking/COMMITMENTS.md:Commitmentin plain words,Who owes(me, a person's name, orthem:<name>when someone else owes the owner),Due(noneif no date was given; never guess),Source(the page or capture),State: open,Last evidenceset to the date of the newest dated mention in the sources, never the date you're filing it (a backlog capture from two weeks ago gives a two-week-old date, so an overdue promise still surfaces). Skip it if a row for the same commitment already exists, or if it was already closed: checkArchive/Superseded/COMMITMENTS ledger.md(the weekly's closed rows; read it for this check only) and skip anything ticked- [x]on its page. A closed commitment comes back only when a newer source than its closure date makes a genuinely new promise. - Changed: when a capture or recap line states a new deadline or a new owner for an existing
row ("pushed the Q4 draft to the 15th", "Sam's taking over the MSA review"), update
DueorWho owesand keep the old value inSourcewith its provenance (capture 11-03; due 11-05→11-15: capture 11-07). Only on a stated change, never on a guess. Alooks-stalerow whose new date is in the future goes back toopen. - Mentioned tonight: set its
Last evidenceto the date of the newest mention (the source's date, not tonight's). - Past due, no evidence in 7 or more days: set
Statetolooks-stale. - A page tonight shows it done (sent mail, a ticked item, a recap line): set
Statetolooks-doneand put the evidence inSourcealongside the original (capture 11-03; done: recap 11-07).
You never delete a row and never close one. Closure is the weekly's job, on evidence. Record the
counts in the log entry: **Commitments:** +3 rows, 2 updated, 1 rescheduled, 1 looks-done, 1 looks-stale.
c. Learn. This is how the workbench improves itself:
- Every
correction:capture and every correction in the recap Signals becomes a rule. Writing preferences →## Learned rules (dream)inContext/voice.md. How-they-work facts →## Current state (dream)inContext/me.md. A routine getting something wrong → aFRICTION_LOG.md## Openentry with the cause and a proposed fix. - Claims graded
deletedin the recap Signals: find the cause (stale page, wrong source, name variant) and fix the page or log the friction. - Drafts. For each edited draft, compare the draft with the recap's note of what changed and
extract the pattern: tone, length, openers, sign-offs, structure, words they add or strike. One
edit is an anecdote; write a rule into
## Learned rules (dream)inContext/voice.mdonly when the same change shows up in two or more drafts, citing them. If a learned rule is contradicted by later edits, demote it tosuperseded.verbatimdrafts are evidence a rule works; note them. - Surfacing rules. Same machinery as voice rules, different target. When the owner says a
topic should always or never be in the briefing, says when not to be bothered, or corrects a
briefing's shape for a topic ("put the numbers first for pipeline"), append the rule to the
right section of
Context/surfacing.mdas a dated line with its source, markedpending. When the same signal shows up a second time, droppending: the rule is standing and the briefing follows it. A rule the owner later contradicts is marked(superseded YYYY-MM-DD)and the new one goes below it. Never delete a line, and never touch lines the owner wrote. - Questions answered or ignored. Act on answers. If questions keep going unanswered for a week, that's friction: log it, and ask fewer, sharper questions.
- Proposals. Notice repeated manual work (the same kind of task three times in two weeks),
repeated corrections, and friction without a fix. Propose one concrete change for each under
Proposals in the log entry, with its kind (
rule,skill,routine,source,cleanup) and evidence. Skip anything already open or declined inIMPROVEMENTS.md. You only propose; the weekly logs it and follows up.
d. Escape hatch. If a recap line is genuinely ambiguous about one entity, you may make one read-only source lookup for it, at most five a night, each recorded under Lookups. Anything past the cap becomes a question for tomorrow's briefing.
Outputs
Tracking/DREAM_LOG.md: insert at the top of ## Entries:
### YYYY-MM-DD (Weekday)
**Mode:** live
**Read:** recap YYYY-MM-DD · captures YYYY-MM-DD (N lines) · N meeting files
**Confidence bar:** status 0.70 · commitment 0.80 · decision/person/term 0.90
**Updated**
- [[Page]] — what changed. Traces to: `Daily/YYYY-MM-DD_DAILY_RECAP.md`
**New**
- [[New Person]] stub — named in recap and capture. Traces to: …
**Relationships:** +6 edges (Sam Ortiz ↔ Acme Expansion, Acme Expansion ↔ Acme Data, …), 1 moved to former
**Needs your yes**
- [ ] Mark "Send pricing to Sam" done? (sent mail 16:10 looks like it) — [[Acme Expansion]]
**Learned about how {owner} works**
- Drafts: 3 graded (1 verbatim, 2 light-edit). New voice rule: no "Hope you're well" openers (2 drafts).
**Proposals**
- skill · a /qbr-prep skill: QBR prep done by hand 3 times since 10-21 · evidence: recaps 10-21, 10-28, 11-03
**Lookups**
- noneThen append under ## Processed captures: - YYYY-MM-DD.md · N lines · filed YYYY-MM-DD, one line
per capture file you filed from, backlog files included, and
- YYYY-MM-DD_RECONSTRUCTED_RECAP.md · reconstructed recap · filed YYYY-MM-DD for each
reconstructed recap you filed.
Tracking/Signals/RUN_LEDGER.md: last of all, append exactly one line to the bottom, and never
edit or delete an existing line. Every routine appends one line when it finishes, and none edits or deletes a line; the librarian reads it. Say how many backlog captures you filed:
- YYYY-MM-DD HH:MM | nightly-dream | <ok|partial|failed> | wrote: <file names, or "nothing"> | gaps: <none, or a short description>Example: - 2026-11-07 22:14 | nightly-dream | ok | wrote: DREAM_LOG.md, 2026-11-07_dream.md, COMMITMENTS.md, Acme Expansion.md | gaps: none; backlog: 3 captures from 11-06 filed
Tracking/Signals/<today>_dream.md: what you claimed tonight, for future grading:
---
type: reference
date: YYYY-MM-DD
tags: [signals, dream]
routine: nightly-dream
---
# Dream signals — YYYY-MM-DD
## Claims written tonight
- d-0001 | commitment | [[Acme Expansion]] "Send revised pricing" | 0.86 | source: …
## Lookups
## Changes
- noneQuality bar
- Everything you write traces to a recap line, capture line or meeting file, and says which.
- When two sources disagree, add a
## Needs reconcilingsection to the page with both, not a pick (b3). - Position on a page follows state (live above superseded), not recency of writing.
- Keep
Recent (dream)andCurrent state (dream)blocks short: five lines or fewer, newest first. - Report-only is fine: on the first three nights of a new workbench, or if anything looks off
(missing recap, many deleted claims), write only the DREAM_LOG entry with
Mode: report-onlyand put everything else under Needs your yes.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

