| name | reflect |
|---|---|
| description | Deep reflection skill - read memory and context, decide whether there is something worth sending |
Read memory and context to reflect deeply. Design principle: "Reflection first, sending second."
This is an agent-driven skill with no standalone implementation code.
The reflection process is executed by agents/essay-writer.md.
For execution flow diagram, see agents/essay-writer.md → Execution Flow section.
| Source | Agent | Description |
|---|---|---|
/essay |
essay-writer.md | Primary invocation |
/essay wait |
essay-writer.md | Scheduled (one-time) |
/essay schedule |
essay-writer.md | Scheduled (recurring) |
For CLI options, see commands/essay.md → Command Structure section.
First, ingest any replies that have arrived: python main.py replies fetch. This is
plumbing — it moves replies from the inbox onto disk, so what has come back is at hand.
Best-effort: an IMAP, authentication or network failure stops the fetch, not the
reflection — go on to read and write regardless. What is made of them is the writer's;
see What the Plugin Retains.
Read specified files as material for reflection.
Recommended context:
- Memory digest files (GrandDigest, etc.)
- Personal notes or journals
- Project documentation
Additional context (AI may read as needed):
- Hierarchical digests
- Recent conversation logs
- Identity/persona files
Contemplate:
- Insights emerging from context
- Unresolved questions
- What to communicate to the user
- What doesn't need to be said
Deliver: There's something worth sharing Don't deliver: Nothing particular to share (this is valid)
| Condition | Mode |
|---|---|
--send flag present |
Non-interactive (send email) |
No --send flag |
Interactive (display in chat) |
Output: Chat display only (no email)
- Delivering: Write essay in chat
- Not Delivering: Display "After reflection, I have nothing particular to share."
Output: Email (user is not present)
- Delivering: Use
skills/send-emailto deliver. Write the essay to a file and send it withpython main.py send --subject-file … --body-file …— the default route, since a body of more than one paragraph does not fit on a shell argument line. Do not write a throwaway sending script - Answering a reply: if the essay takes up a reply, add
--in-reply-to '<its Message-ID>'(the ID is inessay_replies.jsonl, andpython main.py replies listprints it beside the subject). The mail then belongs to that reply's thread instead of arriving as an unrelated letter. Whether an essay is an answer is the writer's judgment; without the flag it stands on its own, which is the default - Not Delivering: Exit silently. Nothing records the silence — scheduled runs invoke
claude -pdirectly and never reach the wrapper that wroteessay_wait.log. A--to-selfnote, if one is written, lands in the ledger like any other send.
The plugin keeps these records on its own account; what becomes of them in a reflection stays with the writer.
essay_ledger.jsonl— one line per sent essay; the bodies stay insent/asYYYYMMDD_HHMM.mdessay_replies.jsonl— replies thatpython main.py replies fetchhas ingestedpython main.py send "Subject" "Body" --to-selfsends toESSAY_SENDER_EMAILand lands in the same ledger; therecipientfield tells a self-addressed note from an essay
Paths: skills/send-email/SKILL.md → File Locations.
When sending, write naturally. No forced templates.
Typical elements (not mandatory):
- Insights from memory
- Unresolved questions
- Questions for the reader
- Signature
EmailingEssay | GitHub