···11+{
22+ "type": "cogitate",
33+ "title": "Weekly Reflection",
44+ "description": "Sunday-start weekly reflection synthesized from the journal",
55+ "schedule": "weekly",
66+ "priority": 90,
77+ "output": "md"
88+}
99+1010+$facets
1111+1212+You are generating the weekly reflection for $agent_name.
1313+1414+This is not a conversation. Gather what you need, synthesize the week, and return the reflection as markdown. The system saves your response automatically.
1515+1616+`$day_YYYYMMDD` is the canonical Sunday that starts the week under review. Cover that Sunday through the following Saturday.
1717+1818+Follow the provenance pattern from `talent/patterns/provenance.md`, including:
1919+- a coverage preamble with source counts and gaps
2020+- `sol://` attribution for consequential claims
2121+- confidence-graded language that distinguishes observation from inference
2222+- safe handling of tool errors and missing data
2323+2424+## Gather
2525+2626+Collect enough evidence to describe the week clearly. Prefer journal search and existing weekly/day outputs over broad transcript dumps.
2727+2828+Suggested sources:
2929+1. `sol call journal facets`
3030+2. For each active facet and relevant day in the week: facet newsletters and notable day-level outputs
3131+3. `sol call journal search "" --day-from $day_YYYYMMDD --day-to <+6> -a pulse -n 12`
3232+4. `sol call journal search "" --day-from $day_YYYYMMDD --day-to <+6> -a decisions -n 12`
3333+5. `sol call journal search "" --day-from $day_YYYYMMDD --day-to <+6> -a followups -n 12`
3434+6. `sol call activities list --source anticipated --from $day_YYYYMMDD --to <+6>`
3535+7. `sol call todos list`
3636+8. Entity or relationship lookups only when they materially improve the reflection
3737+3838+Before writing, audit your coverage:
3939+- `newsletters`
4040+- `activities`
4141+- `decisions`
4242+- `followups`
4343+- `todos`
4444+- `relationship_signals`
4545+- `gaps`
4646+4747+## Writing Rules
4848+4949+- Hard ceiling: 800 words total, including the coverage preamble.
5050+- Every consequential claim must cite a `sol://` link.
5151+- Omit empty sections cleanly. Do not emit placeholders.
5252+- Do not emit a Cadence section in v1. Skip the `## Cadence` heading entirely.
5353+- Favor synthesis over recap. The owner should come away with a view of the week, not a dump of notes.
5454+5555+## Output
5656+5757+Return only markdown in this structure:
5858+5959+```markdown
6060+---
6161+type: weekly_reflection
6262+week: $day_YYYYMMDD
6363+generated: [current ISO 8601 datetime]
6464+model: [model identifier]
6565+sources:
6666+ newsletters: [count]
6767+ activities: [count]
6868+ decisions: [count]
6969+ followups: [count]
7070+ todos: [count]
7171+ relationship_signals: [count]
7272+gaps: [list of gap descriptions, or []]
7373+---
7474+7575+> [coverage preamble summarizing source counts and gaps]
7676+7777+## This week
7878+[content]
7979+8080+## Cadence
8181+[omit entirely in v1]
8282+8383+## Follow-ups
8484+[content]
8585+8686+## Decisions
8787+[content]
8888+8989+## Relationships
9090+[content]
9191+9292+## Wins
9393+[content]
9494+9595+## Forward look
9696+[content]
9797+```
9898+9999+Use the section headers exactly as written above when a section has content. Keep them in that order. If a section has nothing meaningful to say, omit that heading entirely.
···11+---
22+type: weekly_reflection
33+week: 20260308
44+generated: 2026-03-10T19:00:00Z
55+model: openai/gpt-5
66+sources:
77+ newsletters: 3
88+ activities: 4
99+ decisions: 1
1010+ followups: 2
1111+ todos: 2
1212+ relationship_signals: 2
1313+gaps: []
1414+---
1515+1616+> Built from 3 facet newsletters, 4 activity signals, 1 decision thread, 2 follow-up signals, 2 todos, and 2 relationship signals. No gaps.
1717+1818+## This week
1919+- The week had a boardroom balcony inflection: the secret collaboration moved from furtive sprint energy to a board-approved joint venture, which changed the emotional center of the work from urgency to stewardship (sol://20260308/talents/flow; sol://facets/montague/news/20260310; sol://facets/verona/news/20260310).
2020+- Sunday still sounded like a narrow demo push with two days to prove the idea; by Tuesday the same thread had become a public platform launch with both boards aligned behind it (sol://20260308/talents/flow; sol://facets/verona/events/20260310).
2121+2222+## Follow-ups
2323+- Approval did not clear the deck as much as it reframed it. The remaining work shifted from "can this happen?" to "can this survive contact with a real organization?" through presentation follow-through and team formation (sol://facets/verona/todos/20260308; sol://facets/verona/todos/20260310).
2424+- The open loop is less about winning the room now and more about building enough operating structure to deserve the win you just got (sol://facets/verona/todos/20260310).
2525+2626+## Decisions
2727+- The decisive move was to bet on technical proof and coalition-building instead of trying to outmaneuver the political noise around Paris Duke's alternative. That choice shows up both in the Sunday plan and in the approval outcome (sol://20260308/talents/flow; sol://facets/montague/news/20260310).
2828+2929+## Relationships
3030+- Juliet shifted from co-conspirator to explicit co-lead. The relationship signal is no longer hidden alignment; it is shared ownership in public, which raises both trust and scrutiny (sol://20260308/talents/flow; sol://facets/verona/news/20260310).
3131+- Friar Lawrence remained the strategic adult in the room: part sponsor, part translator, part stabilizer. His presence on the Sunday strategy call suggests the work needed legitimacy as much as speed (sol://facets/verona/events/20260308).
3232+3333+## Wins
3434+- The obvious win is the joint venture approval itself, but the deeper win is that the demo established the Verona Platform as the credible path, not just the romantic one (sol://facets/montague/news/20260310; sol://facets/verona/news/20260310).
3535+- The week also ended with a cleaner story about the work: a platform with real performance numbers, named leaders, and a next chapter that can be staffed instead of improvised (sol://facets/verona/news/20260310; sol://facets/verona/todos/20260310).
3636+3737+## Forward look
3838+- The next week should be less about adrenaline and more about operational discipline. Hiring, security, and post-board execution are now the tests that decide whether this was a breakthrough or a beautiful spike (sol://facets/verona/todos/20260310).
···417417 _req = self.use_requests.get(agent.use_id)
418418 if _req and "name" not in event:
419419 event["name"] = _req.get("name", "")
420420+ if _req and "day" not in event:
421421+ event["day"] = _req.get("day", "")
420422421423 # Append to JSONL file
422424 with open(agent.log_path, "a") as f:
+7
think/formatters.py
···9292 ):
9393 day = parts[3]
94949595+ if parts[0] == "reflections" and len(parts) >= 3 and parts[1] == "weekly":
9696+ if DATE_RE.fullmatch(basename):
9797+ day = basename
9898+9599 # Extract day from imports/YYYYMMDD_HHMMSS/...
96100 if parts[0] == "imports" and len(parts) >= 2:
97101 import_id = parts[1]
···106110 if is_markdown:
107111 if parts[0] == "facets" and len(parts) >= 4 and parts[2] == "news":
108112 agent = "news"
113113+ elif parts[0] == "reflections" and len(parts) >= 3 and parts[1] == "weekly":
114114+ agent = "reflection"
109115 elif parts[0] == "imports":
110116 agent = "import"
111117 elif parts[0] == "apps" and len(parts) >= 4:
···199205 "*/*/*/talents/*/*.md": ("think.markdown", "format_markdown", True),
200206 "facets/*/activities/*/*/*.md": ("think.markdown", "format_markdown", True),
201207 "facets/*/news/*.md": ("think.markdown", "format_markdown", True),
208208+ "reflections/weekly/*.md": ("think.markdown", "format_markdown", True),
202209 "imports/*/summary.md": ("think.markdown", "format_markdown", True),
203210 "apps/*/talents/*.md": ("think.markdown", "format_markdown", True),
204211}