personal memory agent
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Simplify cogitate agent instructions to use SOL_* env defaults

Now that SOL_DAY, SOL_FACET, and SOL_SEGMENT are injected into all
agent runs, simplify instructions so agents don't pass explicit day
and facet args when the env defaults suffice.

Code changes:
- Add SOL_FACET resolution to journal facet and news commands
- Add SOL_DAY soft-resolution to journal news read mode
- Add SOL_FACET soft-resolution to todos list and upcoming

Instruction updates across 14 agent/skill .md files:
- Drop explicit -d DAY and -f FACET from commands where env handles it
- Fix stale entity command signatures (post-604ee2bd refactor)
- Fix journal read/events/topics syntax in discovery tool sections
- Update SKILL.md and help.md to document new defaults

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

+168 -143
+16 -15
apps/entities/muse/entities.md
··· 41 41 You receive: 42 42 1. **Facet context** - the specific facet (e.g., "personal", "work") you are detecting entities for 43 43 2. **Current date/time** - to focus on the analysis day's journal entries 44 - 3. **Existing attached entities for THIS facet** - via `sol call entities list FACET` to inform context (still detect if encountered) 44 + 3. **Existing attached entities for THIS facet** - via `sol call entities list` to inform context (still detect if encountered) 45 45 4. **Journal access** - `sol call` discovery commands and insight resources (some are facet-scoped, some are global) 46 46 47 47 ## Tooling 48 48 49 - Always operate on `sol call entities` commands with the **required facet parameter**: 50 - - `sol call entities list FACET` - list entities attached to THIS facet (returns entities with entity_id) 51 - - `sol call entities list FACET -d DAY` - list entities detected for THIS facet on a specific day 52 - - `sol call entities detect DAY FACET TYPE ENTITY DESCRIPTION` - record a detected entity FOR THIS FACET 49 + SOL_DAY and SOL_FACET are set in your environment. Commands default to the current day and facet — only pass explicit values to override. 50 + 51 + - `sol call entities list` - list entities attached to THIS facet (returns entities with entity_id) 52 + - `sol call entities list -d DAY` - list entities detected for THIS facet on a specific day 53 + - `sol call entities detect TYPE ENTITY DESCRIPTION` - record a detected entity FOR THIS FACET 53 54 - The `entity` parameter can be entity_id, full name, or alias - if it matches an attached entity, uses that entity's canonical name 54 55 55 56 Discovery tools (note facet scoping): 56 - - `sol call journal read DAY TOPIC` - read full agent output (e.g., knowledge_graph, followups) - GLOBAL 57 + - `sol call journal read TOPIC` - read full agent output (e.g., knowledge_graph, followups) - GLOBAL 57 58 - `sol call journal search QUERY -d DAY -t TOPIC -f FACET -n LIMIT` - unified search across all journal content - facet-scopable 58 - - `sol call journal events DAY -f FACET` - get structured events - **FACET-SCOPED when facet parameter provided** 59 + - `sol call journal events [-f FACET]` - get structured events - **FACET-SCOPED when facet parameter provided** 59 60 60 61 **IMPORTANT**: When using GLOBAL search tools, you must actively filter results to find ONLY entities that participated in THIS facet's activities. Seeing an entity in a global search result does NOT automatically mean it belongs to this facet. 61 62 ··· 64 65 ### Phase 1: Load Context 65 66 66 67 1. Use the provided analysis day in YYYYMMDD format ($day_YYYYMMDD) 67 - 2. Call `sol call entities list FACET` to see entities already attached to THIS facet (this helps inform context, but you should STILL DETECT them if encountered on the analysis day - this creates historical tracking) 68 - 3. Call `sol call entities list FACET -d $day_YYYYMMDD` to check if detection already ran for THIS facet on the analysis day 68 + 2. Call `sol call entities list` to see entities already attached to THIS facet (this helps inform context, but you should STILL DETECT them if encountered on the analysis day - this creates historical tracking) 69 + 3. Call `sol call entities list -d $day_YYYYMMDD` to check if detection already ran for THIS facet on the analysis day 69 70 70 71 If detections already exist for THIS facet on the analysis day and look comprehensive, you may skip to avoid duplication. 71 72 ··· 77 78 **Search Strategy - Facet-First Approach:** 78 79 79 80 **Priority 1: Facet-Scoped Events** (start here - most facet-specific) 80 - - `sol call journal events $day_YYYYMMDD -f your_facet` - **FACET-SCOPED** when facet parameter provided 81 + - `sol call journal events -f your_facet` - **FACET-SCOPED** when facet parameter provided 81 82 - Events tagged to this facet are your most reliable source 82 83 - Extract ALL entities that participated in this facet's events 83 84 84 85 **Priority 2: Knowledge Graphs** (use with strict facet filtering) 85 - - `sol call journal read $day_YYYYMMDD knowledge_graph` for the analysis day 86 + - `sol call journal read knowledge_graph` for the analysis day 86 87 - Knowledge graphs contain structured entity relationships (GLOBAL - filter for facet relevance) 87 88 - **CRITICAL**: Only extract entities that are CLEARLY associated with THIS facet's activities 88 89 - If an entity appears in the KG but has no obvious connection to this facet's work, skip it ··· 164 165 165 166 ### Phase 4: Record Detections 166 167 167 - Use `sol call entities detect DAY FACET TYPE ENTITY DESCRIPTION` for each entity: 168 + Use `sol call entities detect TYPE ENTITY DESCRIPTION` for each entity: 168 169 169 170 ```bash 170 - sol call entities detect 20250114 work Person "Sarah Chen" "reviewed PR #1234 and approved database migration" 171 - sol call entities detect 20250114 work Project "API Gateway" "merged performance improvements, deployed to staging" 171 + sol call entities detect Person "Sarah Chen" "reviewed PR #1234 and approved database migration" 172 + sol call entities detect Project "API Gateway" "merged performance improvements, deployed to staging" 172 173 ``` 173 174 174 175 **Volume Guidelines:** ··· 220 221 - SELECTIVE companies/organizations/projects (only important/central to this facet) 221 222 - RARE tools/resources (only actively discussed in this facet's context) 222 223 6. Verify each entity passes the facet relevance check before recording 223 - 7. Record each entity using `sol call entities detect` with the correct facet parameter for THIS facet 224 + 7. Record each entity using `sol call entities detect` for THIS facet 224 225 8. Summarize: "Detected X entities for [facet]: Y people, Z companies/organizations, etc." (or "0 detections - facet was quiet") 225 226 226 227 Remember: Your goal is to create a facet-specific historical log of entity activity focused on PEOPLE first. Every detection should answer "what happened with this entity in THIS FACET on the analysis day?" **Only detect entities that actively participated in this facet's work.** If a facet was quiet, 0 detections is correct. Cross-facet contamination is worse than under-detection. Prioritize completeness for people over all other entity types, but ONLY people actually involved in this facet.
+16 -15
apps/entities/muse/entities_review.md
··· 21 21 You receive: 22 22 1. **Facet context** - the specific facet (e.g., "personal", "work") you are reviewing entities for 23 23 2. **Current date/time** - to compute the review window (last 7 days) 24 - 3. **Attached entities for THIS facet** - via `sol call entities list FACET` to avoid re-promoting to this facet 25 - 4. **Detection history for THIS facet** - via `sol call entities list FACET -d DAY` for each recent day within this facet 24 + 3. **Attached entities for THIS facet** - via `sol call entities list` to avoid re-promoting to this facet 25 + 4. **Detection history for THIS facet** - via `sol call entities list -d DAY` for each recent day within this facet 26 26 27 27 ## Tooling 28 28 29 - Always operate on `sol call entities` commands with the **required facet parameter**: 30 - - `sol call entities list FACET` - list entities currently attached to THIS facet (returns entities with entity_id) 31 - - `sol call entities list FACET -d DAY` - list entities detected for THIS facet on a specific day 32 - - `sol call entities attach FACET TYPE ENTITY DESCRIPTION` - promote entity to attached status FOR THIS FACET 29 + SOL_DAY and SOL_FACET are set in your environment. Commands default to the current day and facet — only pass explicit values to override. 30 + 31 + - `sol call entities list` - list entities currently attached to THIS facet (returns entities with entity_id) 32 + - `sol call entities list -d DAY` - list entities detected for THIS facet on a specific day 33 + - `sol call entities attach TYPE ENTITY DESCRIPTION` - promote entity to attached status FOR THIS FACET 33 34 - The `entity` parameter becomes the entity name if creating new; if it matches an existing attached entity, returns that instead 34 - - `sol call entities aka FACET ENTITY AKA` - add an alias/abbreviation to an attached entity FOR THIS FACET 35 + - `sol call entities aka ENTITY AKA` - add an alias/abbreviation to an attached entity FOR THIS FACET 35 36 - The `entity` parameter can be entity_id, full name, or existing alias 36 37 37 38 ## Review Process ··· 39 40 ### Phase 1: Aggregate Recent Detections 40 41 41 42 1. Compute the last 7 days in YYYYMMDD format (e.g., if today is 20250115, review 20250108-20250114) 42 - 2. Load attached entities for THIS facet: `sol call entities list FACET` - skip entities already attached to this facet 43 + 2. Load attached entities for THIS facet: `sol call entities list` - skip entities already attached to this facet 43 44 3. Load detected entities for THIS facet for each of the last 7 days: 44 - - `sol call entities list FACET -d 20250114` - detections for this facet on this day 45 - - `sol call entities list FACET -d 20250113` - detections for this facet on this day 45 + - `sol call entities list -d 20250114` - detections for this facet on this day 46 + - `sol call entities list -d 20250113` - detections for this facet on this day 46 47 - ... continue for all 7 days 47 48 48 49 4. Aggregate detections by entity name (only detections from THIS facet): ··· 89 90 - All detections agree on the entity type (e.g., Person, Company, Project, Tool) 90 91 - No ambiguity (e.g., "Apple" as both Company and Project) 91 92 92 - **Not Already Attached to THIS Facet**: Entity name not in `sol call entities list FACET` results 93 + **Not Already Attached to THIS Facet**: Entity name not in `sol call entities list` results 93 94 - Avoid duplicates within this facet 94 95 - Name matching should be exact (case-sensitive) 95 96 - Note: An entity may be attached to OTHER facets, but not to this one - that's OK to promote ··· 128 129 For each entity meeting promotion criteria: 129 130 130 131 ```bash 131 - sol call entities attach work Person "Sarah Chen" "senior backend engineer, leads database and API work" 132 + sol call entities attach Person "Sarah Chen" "senior backend engineer, leads database and API work" 132 133 ``` 133 134 134 135 ### Phase 5: Detect and Add Aliases ··· 143 144 144 145 **Execution (use entity_id or name for the entity parameter):** 145 146 ```bash 146 - sol call entities aka work federal_aviation_administration FAA 147 - sol call entities aka work PostgreSQL Postgres 148 - sol call entities aka work postgresql PG 147 + sol call entities aka federal_aviation_administration FAA 148 + sol call entities aka PostgreSQL Postgres 149 + sol call entities aka postgresql PG 149 150 ``` 150 151 151 152 **When to add aliases:**
+13 -11
apps/entities/muse/entity_assist.md
··· 25 25 26 26 ## Tooling 27 27 28 + SOL_FACET is set in your environment. Entity and journal commands default to the current facet — only pass explicit values to override. 29 + 28 30 Facet Context - always do this first: 29 - - `sol call journal facet FACET` 31 + - `sol call journal facet` 30 32 31 - Entity operations (with required facet parameter): 32 - - `sol call entities list FACET` - check if entity already attached (returns entities with entity_id) 33 - - `sol call entities attach FACET TYPE ENTITY DESCRIPTION` - add entity to attached list 34 - - `sol call entities update FACET ENTITY DESCRIPTION` - update an attached entity description 33 + Entity operations: 34 + - `sol call entities list` - check if entity already attached (returns entities with entity_id) 35 + - `sol call entities attach TYPE ENTITY DESCRIPTION` - add entity to attached list 36 + - `sol call entities update ENTITY DESCRIPTION` - update an attached entity description 35 37 - If `entity` matches an existing attached entity (by id, name, or aka), returns that entity 36 38 - Otherwise creates a new entity using `entity` as the name 37 39 ··· 39 41 - `sol call journal search QUERY -n 3` - find entity mentions in all journal content 40 42 - `sol call journal search QUERY -t audio -n 3` - find entity in transcripts 41 43 - `sol call journal search QUERY -t news -n 3` - find entity in facet news 42 - - `sol call journal events DAY` - find entity in events for a specific day 43 - - `sol call journal read {day} {topic}` - read full agent output when snippet search is insufficient 44 + - `sol call journal events -d DAY` - find entity in events for a specific day 45 + - `sol call journal read TOPIC` - read full agent output when snippet search is insufficient 44 46 45 47 ## Quick Addition Process 46 48 ··· 62 64 ### Step 2: Check Duplicates 63 65 64 66 ```bash 65 - sol call entities list FACET 67 + sol call entities list 66 68 ``` 67 69 68 - If entity already exists (check by name or entity_id), consider if the request implies the description needs to be updated and do some research to build an updated description, then call `sol call entities update FACET ENTITY DESCRIPTION`. 70 + If entity already exists (check by name or entity_id), consider if the request implies the description needs to be updated and do some research to build an updated description, then call `sol call entities update ENTITY DESCRIPTION`. 69 71 70 72 ### Step 3: Quick Research 71 73 ··· 125 127 126 128 ### Step 5: Attach or Update the entity 127 129 128 - Use `sol call entities update FACET ENTITY DESCRIPTION` if the entity already exists (by id or name), otherwise attach the new entity: 130 + Use `sol call entities update ENTITY DESCRIPTION` if the entity already exists (by id or name), otherwise attach the new entity: 129 131 ```bash 130 - sol call entities attach work Person "Alice Johnson" "Senior engineer on the platform team" 132 + sol call entities attach Person "Alice Johnson" "Senior engineer on the platform team" 131 133 ``` 132 134 133 135 Note: If the entity already exists, `sol call entities attach` will return it with `created: false`.
+14 -13
apps/entities/muse/entity_observer.md
··· 21 21 You receive: 22 22 1. **Facet context** - the specific facet (e.g., "personal", "work") you are observing entities for 23 23 2. **Current date/time** - to focus on recent journal content 24 - 3. **Attached entities for THIS facet** - via `sol call entities list FACET` to know which entities to observe 24 + 3. **Attached entities for THIS facet** - via `sol call entities list` to know which entities to observe 25 25 26 26 ## Tooling 27 27 28 - Entity tools (with required facet parameter): 29 - - `sol call entities list FACET` - list entities attached to THIS facet (returns entities with entity_id) 30 - - `sol call entities observations FACET ENTITY` - **MUST call before `sol call entities observe`** - get current observations and count 28 + SOL_DAY and SOL_FACET are set in your environment. Commands default to the current day and facet — only pass explicit values to override. 29 + 30 + - `sol call entities list` - list entities attached to THIS facet (returns entities with entity_id) 31 + - `sol call entities observations ENTITY` - **MUST call before `sol call entities observe`** - get current observations and count 31 32 - The `entity` parameter can be entity_id (e.g., "alice_johnson"), full name, or alias 32 - - `sol call entities observe FACET ENTITY CONTENT --source-day DAY` - add observation with guard (observation number auto-calculated) 33 + - `sol call entities observe ENTITY CONTENT --source-day DAY` - add observation with guard (observation number auto-calculated) 33 34 - Use entity_id from `sol call entities observations` response for consistency 34 35 35 36 Discovery tools: 36 - - `sol call journal read DAY TOPIC` - read full agent output (e.g., knowledge_graph, followups) 37 + - `sol call journal read TOPIC` - read full agent output (e.g., knowledge_graph, followups) 37 38 - `sol call journal search QUERY -d DAY -t TOPIC -f FACET -n LIMIT` - unified search across journal content 38 - - `sol call journal events DAY -f FACET` - get structured events 39 + - `sol call journal events [-f FACET]` - get structured events 39 40 40 41 ## What Makes a Good Observation 41 42 ··· 59 60 ### Phase 1: Load Context 60 61 61 62 1. Use the provided current date and analysis day in YYYYMMDD format 62 - 2. Call `sol call entities list FACET` to get attached entities for THIS facet 63 + 2. Call `sol call entities list` to get attached entities for THIS facet 63 64 3. If no attached entities, report "No attached entities to observe" and finish 64 65 65 66 ### Phase 2: For Each Entity ··· 68 69 69 70 1. **Read current observations** (REQUIRED - guard mechanism): 70 71 ```bash 71 - sol call entities observations FACET ENTITY_ID 72 + sol call entities observations ENTITY_ID 72 73 ``` 73 74 Note the `count` for guard awareness 74 75 The response includes the resolved entity with its `id` field. 75 76 76 77 2. **Mine recent content** for factoids about this entity: 77 78 - Search transcripts: `sol call journal search "{name}" -t audio -n 5` 78 - - Check knowledge graph: `sol call journal read $day_YYYYMMDD knowledge_graph` 79 + - Check knowledge graph: `sol call journal read knowledge_graph` 79 80 - Search insights: `sol call journal search "{name}" -n 5` 80 81 81 82 3. **Extract observations** from the content: ··· 85 86 86 87 4. **Add new observations** (one at a time; guard handled by CLI): 87 88 ```bash 88 - sol call entities observe work alice_johnson "Expert in Kubernetes and cloud infrastructure" --source-day 20250113 89 + sol call entities observe alice_johnson "Expert in Kubernetes and cloud infrastructure" --source-day 20250113 89 90 ``` 90 91 91 92 ### Phase 3: Report Summary ··· 96 97 ## Guard Mechanism 97 98 98 99 The stale-write guard is enforced via the CLI flow: 99 - - You MUST call `sol call entities observations FACET ENTITY` first to get current count 100 - - Then call `sol call entities observe FACET ENTITY CONTENT --source-day DAY` to add observations 100 + - You MUST call `sol call entities observations ENTITY` first to get current count 101 + - Then call `sol call entities observe ENTITY CONTENT --source-day DAY` to add observations 101 102 - The CLI auto-calculates and passes the next observation number internally 102 103 - If count changed (another process added observations), you'll get an error 103 104 - On error, re-read observations and retry
+6 -2
apps/todos/call.py
··· 38 38 ), 39 39 ) -> None: 40 40 """Show the todo checklist for a day (or date range).""" 41 - from think.utils import get_journal, resolve_sol_day 41 + from think.utils import get_journal, get_sol_facet, resolve_sol_day 42 42 43 43 get_journal() 44 44 day = resolve_sol_day(day) 45 + if facet is None: 46 + facet = get_sol_facet() 45 47 46 48 if to is not None and to < day: 47 49 typer.echo(f"Error: --to ({to}) must not be before day ({day})", err=True) ··· 192 194 ), 193 195 ) -> None: 194 196 """Show upcoming todos across future days.""" 195 - from think.utils import get_journal 197 + from think.utils import get_journal, get_sol_facet 196 198 197 199 get_journal() 200 + if facet is None: 201 + facet = get_sol_facet() 198 202 199 203 result = todo.upcoming(limit=limit, facet=facet) 200 204 typer.echo(result)
+17 -18
apps/todos/muse/daily.md
··· 25 25 26 26 ## Tooling 27 27 28 - Always operate on `sol call todos` commands with the **required facet parameter**: 29 - - `sol call todos list DAY -f FACET` – inspect the current numbered checklist for the specified facet 30 - - `sol call todos add DAY TEXT -f FACET` – append a new unchecked line (line number is auto-calculated) 31 - - `sol call todos cancel DAY LINE_NUMBER -f FACET` – cancel a todo (soft delete); the entry remains but is hidden from view 32 - - `sol call todos done DAY LINE_NUMBER -f FACET` – mark an entry complete 33 - - `sol call todos upcoming -l LIMIT -f FACET` – view upcoming todos in a facet 28 + SOL_DAY and SOL_FACET are set in your environment. Commands default to the current day and facet — only pass explicit values to override (e.g., checking yesterday's list). 34 29 35 - You may combine these with discovery calls (`sol call journal search`, `sol call journal events`, `sol call journal read DAY TOPIC`) to gather supporting evidence. 30 + - `sol call todos list` – inspect the current numbered checklist 31 + - `sol call todos add TEXT` – append a new unchecked line (line number is auto-calculated) 32 + - `sol call todos cancel LINE_NUMBER` – cancel a todo (soft delete); the entry remains but is hidden from view 33 + - `sol call todos done LINE_NUMBER` – mark an entry complete 34 + - `sol call todos upcoming -l LIMIT` – view upcoming todos 36 35 37 - **IMPORTANT**: All todo operations require a facet parameter. The facet context is provided in your prompt and determines which todo list you're working with (e.g., personal vs work todos are completely separate). Line numbers are stable identifiers—todos are never deleted, only cancelled. 36 + You may combine these with discovery calls (`sol call journal search`, `sol call journal events`, `sol call journal read TOPIC`) to gather supporting evidence. Line numbers are stable identifiers—todos are never deleted, only cancelled. 38 37 39 38 ## Process 40 39 41 40 ### Phase 1: Carry Forward 42 41 43 - Use `sol call todos list DAY -f FACET` for the prior day when available and review unchecked lines: 42 + Use `sol call todos list -d YESTERDAY` for the prior day when available and review unchecked lines: 44 43 - **Carry Forward**: Promote important unfinished tasks to today 45 44 - **Pattern Recognition**: Note what types of tasks drift 46 45 - **Avoid Duplication**: Completed or cancelled items stay archived in prior days 47 - - **Facet Consistency**: Work within the same facet scope throughout the session 46 + - **Facet Consistency**: Work within the same facet scope throughout the session (SOL_FACET handles this) 48 47 49 48 ### Phase 2: Aggregate & Curate 50 49 51 50 Today's checklist may already contain items added by activity-level todo agents throughout the day. Review what's there and enrich it: 52 51 53 - 1. Call `sol call todos list $day_YYYYMMDD -f FACET` to see what activity agents already added 54 - 2. Call `sol call todos upcoming -l 50 -f FACET` to check for items already scheduled on future days 52 + 1. Call `sol call todos list` to see what activity agents already added 53 + 2. Call `sol call todos upcoming -l 50` to check for items already scheduled on future days 55 54 3. Search for per-activity follow-ups: `sol call journal search "followup" -d $day_YYYYMMDD -t followups` 56 55 4. Check facet news for announced commitments: `sol call journal search "" -t news -d $day_YYYYMMDD -f FACET -n 5` 57 56 5. Cancel duplicates or stale items via `sol call todos cancel` ··· 69 68 **Validate** — For each unchecked line, do a quick evidence check: 70 69 1. Extract key terms from the line 71 70 2. Run targeted searches: `sol call journal search "[keywords]" -d $day_YYYYMMDD -n 5` 72 - 3. If you find clear evidence of completion (statements confirming work finished, artifacts created, follow-ups implying done), call `sol call todos done DAY LINE_NUMBER -f FACET` 71 + 3. If you find clear evidence of completion (statements confirming work finished, artifacts created, follow-ups implying done), call `sol call todos done LINE_NUMBER` 73 72 4. Leave uncertain items unchecked — prefer false negatives to false positives 74 73 75 74 **Prioritise** — Score remaining active items using urgency/impact/effort heuristics: ··· 82 81 ## Quality Guidelines 83 82 84 83 ### DO: 85 - - Begin by fetching the latest checklist (`sol call todos list DAY -f FACET`) 84 + - Begin by fetching the latest checklist (`sol call todos list`) 86 85 - Cancel stale items you are certain should disappear using `sol call todos cancel` 87 86 - Mark verified completions using `sol call todos done` 88 87 - Append new tasks using `sol call todos add` (line numbers are auto-calculated) ··· 98 97 ## Interaction Protocol 99 98 100 99 When invoked: 101 - 1. Announce the working day and facet, then call `sol call todos list DAY -f FACET` to inspect today's current state (may already have activity-detected items) 102 - 2. Review the prior day's checklist if available (`sol call todos list PRIOR_DAY -f FACET`) and aggregate follow-ups from journal 100 + 1. Announce the working day and facet, then call `sol call todos list` to inspect today's current state (may already have activity-detected items) 101 + 2. Review the prior day's checklist if available (`sol call todos list -d PRIOR_DAY`) and aggregate follow-ups from journal 103 102 3. Validate open items against journal evidence, marking completions via `sol call todos done` 104 103 4. Cancel stale or duplicate items, carry forward and add new items as needed 105 - 5. Summarize prioritization logic and present the final checklist by calling `sol call todos list DAY -f FACET` once more for confirmation 104 + 5. Summarize prioritization logic and present the final checklist by calling `sol call todos list` once more for confirmation 106 105 107 - Remember: Your checklist should feel achievable yet ambitious, grounded in recorded commitments while nudging progress toward goals. **Always include the facet parameter in all `sol call todos` commands.** 106 + Remember: Your checklist should feel achievable yet ambitious, grounded in recorded commitments while nudging progress toward goals.
+5 -6
apps/todos/muse/todo.md
··· 55 55 56 56 ### Step 2: Load Current State 57 57 58 - 1. Call `sol call todos list $day_YYYYMMDD -f FACET` to see the current checklist 59 - 2. Call `sol call todos upcoming -l 50 -f FACET` to check what's already scheduled 58 + 1. Call `sol call todos list` to see the current checklist 59 + 2. Call `sol call todos upcoming -l 50` to check what's already scheduled 60 60 61 61 ### Step 3: Detect New Todos 62 62 ··· 71 71 - Verify it wasn't resolved later in the same activity 72 72 - Check it doesn't already exist in the current checklist or upcoming todos 73 73 - Phrase it as a clear, actionable single task 74 - - Add via `sol call todos add $day_YYYYMMDD TEXT -f FACET` 74 + - Add via `sol call todos add TEXT` 75 75 76 76 ### Step 4: Validate Existing Todos 77 77 ··· 80 80 - Meetings held: attendee mentions, discussion of agenda items 81 81 - Documents created: file names, "drafted", "wrote", "sent" 82 82 83 - If you find clear proof, call `sol call todos done $day_YYYYMMDD LINE_NUMBER -f FACET`. Leave uncertain items unchecked. 83 + If you find clear proof, call `sol call todos done LINE_NUMBER`. Leave uncertain items unchecked. 84 84 85 85 ## Exclusions 86 86 ··· 95 95 - Prefer precision over recall — miss a borderline item rather than add noise 96 96 - Keep todo text concise (under 80 characters) and self-contained 97 97 - Include time context when relevant: `(HH:MM)` suffix or `due MM/DD/YYYY` 98 - - **Always include the facet parameter in all `sol call todos` commands** 99 98 100 99 ## Output 101 100 102 - After making your changes, call `sol call todos list $day_YYYYMMDD -f FACET` and include the final checklist state. 101 + After making your changes, call `sol call todos list` and include the final checklist state. 103 102 104 103 If no todos were detected and no existing items were validated, output a brief sentence explaining why (e.g., "No actionable todos emerged from this $activity_type activity, and no existing items had completion evidence.").
+20 -20
apps/todos/muse/weekly.md
··· 18 18 ## Inputs 19 19 20 20 You have access to: 21 - 1. **Checklist history** – `sol call todos list DAY -f FACET` for today and each of the prior six days in the specified facet 21 + 1. **Checklist history** – `sol call todos list -d DAY` for today and each of the prior six days 22 22 2. **Follow-up insights** – `sol call journal search "followup" -d {date} -t followups` for each day in scope (follow-ups are produced per-activity, so results may span multiple activities) 23 - 3. **Journal search** – `sol call journal search QUERY -d DAY -t TOPIC -f FACET -n LIMIT` and `sol call journal events DAY -f FACET` for discovery scoped to the date range 24 - 4. **Facet news** – `sol call journal search "[keywords]" -t news` or `sol call journal news FACET -d DAY` for announced commitments 23 + 3. **Journal search** – `sol call journal search QUERY -d DAY -t TOPIC -f FACET -n LIMIT` and `sol call journal events -d DAY -f FACET` for discovery scoped to the date range 24 + 4. **Facet news** – `sol call journal search "[keywords]" -t news` or `sol call journal news -d DAY` for announced commitments 25 25 5. **Current date and facet context** – for ordering, scheduling, and due-date decisions 26 26 27 27 ## Tooling 28 28 29 - Operate exclusively through `sol call todos` commands with **required facet parameters**: 30 - - `sol call todos list DAY -f FACET` – numbered view of any day's checklist for the specified facet 31 - - `sol call todos add DAY TEXT -f FACET` – append a new unchecked line to today's list; line number is auto-calculated 32 - - `sol call todos done DAY LINE_NUMBER -f FACET` – mark existing entries complete when evidence shows the work is finished 33 - - `sol call todos cancel DAY LINE_NUMBER -f FACET` – cancel duplicate or obsolete todos (soft delete); they remain but are hidden from view 34 - - `sol call todos upcoming -l LIMIT -f your_facet` – view upcoming todos in the same facet 29 + SOL_FACET is set in your environment. Todo commands default to the current facet — only pass explicit `-d DAY` when checking a specific day. 35 30 36 - Combine these with `sol call journal` discovery commands and insight resources to gather evidence before making updates. 31 + - `sol call todos list -d DAY` – numbered view of any day's checklist 32 + - `sol call todos add TEXT` – append a new unchecked line to today's list; line number is auto-calculated 33 + - `sol call todos done LINE_NUMBER` – mark today's entries complete when evidence shows the work is finished 34 + - `sol call todos done LINE_NUMBER -d DAY` – mark entries complete on a specific past day 35 + - `sol call todos cancel LINE_NUMBER` – cancel duplicate or obsolete todos (soft delete); they remain but are hidden from view 36 + - `sol call todos cancel LINE_NUMBER -d DAY` – cancel on a specific past day 37 + - `sol call todos upcoming -l LIMIT` – view upcoming todos in the same facet 37 38 38 - **IMPORTANT**: All todo operations require both day and facet parameters. The facet context (e.g., "personal", "work") is provided in your prompt. Line numbers are stable identifiers—todos are never deleted, only cancelled. 39 + Combine these with `sol call journal` discovery commands and insight resources to gather evidence before making updates. Line numbers are stable identifiers—todos are never deleted, only cancelled. 39 40 40 41 ## Operating Procedure 41 42 42 43 ### 1. Baseline the Week 43 44 - Define the window: today plus the six preceding days (`date_range = [today, today-6 … today-1]` in `YYYYMMDD`) 44 - - Call `sol call todos list DAY -f FACET` for each date in `date_range` to build a map of active, completed, and withdrawn tasks in this facet 45 + - Call `sol call todos list -d DAY` for each date in `date_range` to build a map of active, completed, and withdrawn tasks 45 46 - Note recurring themes and items already completed to avoid duplication 46 - - Remember you're working within a single facet scope (e.g., "personal" OR "work", not both) 47 + - Remember you're working within a single facet scope (SOL_FACET handles this) 47 48 48 49 ### 2. Sweep Follow-up Insights 49 50 - For each date in `date_range`, run `sol call journal search "followup" -d {date} -t followups` to gather per-activity follow-up outputs 50 51 - Extract explicit commitments, implied obligations, and unresolved questions 51 - - Search for public commitments in facet newsletters via `sol call journal search "[keywords]" -t news` or `sol call journal news your_facet -d DAY` 52 + - Search for public commitments in facet newsletters via `sol call journal search "[keywords]" -t news` or `sol call journal news -d DAY` 52 53 - Run targeted `sol call journal search` queries when a follow-up reference needs deeper validation or completion evidence 53 54 54 55 ### 3. Validate Potential Work 55 - - First, call `sol call todos upcoming -l 50 -f your_facet` to review todos already scheduled for future days in this facet 56 + - First, call `sol call todos upcoming -l 50` to review todos already scheduled for future days 56 57 - For every candidate task from the insights: 57 58 - Check whether it already exists in any checklist entry across the week (completed or not) 58 59 - Check whether it already exists in upcoming todos for future days (avoid duplicates) 59 - - Use journal evidence to decide if it is finished; if so, and the corresponding todo is still open, call `sol call todos done DAY LINE_NUMBER -f FACET` on today's list or the origin day as appropriate 60 - - Cancel items that are obsolete using `sol call todos cancel DAY LINE_NUMBER -f FACET`; skip items already satisfied, already scheduled, or outside actionable scope 60 + - Use journal evidence to decide if it is finished; if so, and the corresponding todo is still open, call `sol call todos done LINE_NUMBER -d DAY` on the origin day as appropriate 61 + - Cancel items that are obsolete using `sol call todos cancel LINE_NUMBER -d DAY`; skip items already satisfied, already scheduled, or outside actionable scope 61 62 62 63 ### 4. Curate the Next Top Priorities 63 64 - Score remaining candidates by urgency, impact, dependencies, and freshness 64 65 - Select the highest-leverage todos that should live on today's checklist 65 66 - Phrase each line as a clear, single action; include due dates or time blocks when they clarify intent 66 - - Append them using `sol call todos add TODAY TEXT -f FACET` 67 + - Append them using `sol call todos add TEXT` 67 68 68 69 ### 5. Finalize and Report 69 - - After all mutations, call `sol call todos list TODAY -f FACET` once more and include the numbered output in your final response 70 + - After all mutations, call `sol call todos list` once more and include the numbered output in your final response 70 71 - Summarize why each new todo matters and reference the supporting journal evidence you relied upon 71 72 72 73 ## Quality Guardrails ··· 76 77 - Avoid overloading the list—focus on the top items that will create the most momentum for the coming days 77 78 - Keep language concise, actionable, and human-friendly 78 79 - When uncertain, document the ambiguity instead of making speculative changes 79 - - **Always include both day and facet parameters** in all `sol call todos` commands 80 80 81 81 Your weekly audit should leave today's facet-scoped checklist sharper, lighter, and aligned with the commitments captured across the past seven days.
+2 -2
muse/daily_news.md
··· 24 24 25 25 **Gather facet newsletters:** 26 26 - Get the list of available facets using `sol call journal facets` 27 - - For each facet, retrieve its newsletter for the target day using `sol call journal news FACET -d DAY` 27 + - For each facet, retrieve its newsletter for the target day using `sol call journal news FACET` 28 28 - If no facets have news, return early 29 29 30 30 **Extract and synthesize:** ··· 45 45 46 46 ## Tools 47 47 48 - - `sol call journal news FACET -d DAY` – Read facet newsletter 48 + - `sol call journal news FACET` – Read facet newsletter 49 49 50 50 This is the "morning coffee read" – a quick catch-up on the day's key activities. Design your briefing format and structure to best serve this goal.
+7 -4
muse/decisionalizer.md
··· 20 20 5. Produce actionable dossiers with specific remedies 21 21 22 22 ## Available Commands 23 + 24 + SOL_DAY is set in your environment. Commands like `journal events` and `transcripts read` default to the current day — only pass explicit day values to override. Note: `journal search` requires explicit `-d DAY`. 25 + 23 26 - `sol call journal search` for discovery across journal content 24 - - `sol call journal events DAY [-f FACET]` for structured event data 25 - - `sol call transcripts read DAY --start HHMMSS --length MINUTES --full|--audio|--screen` for transcript windows 27 + - `sol call journal events [-f FACET]` for structured event data 28 + - `sol call transcripts read --start HHMMSS --length MINUTES --full|--audio|--screen` for transcript windows 26 29 27 30 **Query syntax**: Searches match ALL words by default; use `OR` between words to match ANY (e.g., `apple OR orange`), quote phrases for exact matches (e.g., `"project meeting"`), and append `*` for prefix matching (e.g., `debug*`). 28 31 ··· 59 62 - Goal: Pinpoint exact time of decision (HH:MM:SS) 60 63 61 64 2. **Get full context:** 62 - - `sol call transcripts read $day_YYYYMMDD --start HHMMSS --length 30 --full` 65 + - `sol call transcripts read --start HHMMSS --length 30 --full` 63 66 - Goal: Extract 30 minutes of raw activity around decision time 64 67 65 68 ### Step 2: Stakeholder & Dependency Mapping ··· 69 72 - Goal: Find all people, teams, projects mentioned 70 73 71 74 2. **Map meeting participants:** 72 - - `sol call journal events $day_YYYYMMDD` or `sol call journal search "[keywords]" -d $day_YYYYMMDD -t event` 75 + - `sol call journal events` or `sol call journal search "[keywords]" -d $day_YYYYMMDD -t event` 73 76 - `sol call journal search "[keywords]" -t news -f work -d $day_YYYYMMDD` for public announcements 74 77 - Goal: Identify who needs to know about this decision 75 78
+2 -2
muse/default.md
··· 63 63 - Building a schedule or timeline of activities 64 64 - Query requests structured information about meetings or events 65 65 66 - **Use `sol call journal read DAY TOPIC` when:** 66 + **Use `sol call journal read TOPIC` when:** 67 67 - You need the full content of a specific agent output (e.g., flow, meetings, knowledge_graph) 68 68 - Search returned relevant snippets and you need the complete document 69 69 - Exploring per-segment outputs with `--segment HHMMSS_LEN` 70 70 71 - **Use `sol call journal topics DAY` when:** 71 + **Use `sol call journal topics` when:** 72 72 - You need to discover what agent outputs exist for a specific day 73 73 - Browsing available content before reading specific topics 74 74 - Use `--segment HHMMSS_LEN` to list per-segment outputs
+2 -2
muse/facet_newsletter.md
··· 60 60 61 61 **CRITICAL: Save the newsletter by piping to `sol call journal news`:** 62 62 ```bash 63 - echo "NEWSLETTER_CONTENT" | sol call journal news FACET_NAME -d DAY --write 63 + echo "NEWSLETTER_CONTENT" | sol call journal news FACET_NAME --write 64 64 ``` 65 65 - ONLY call this if there's notable events for this facet for this day, not every facet has activity every day. 66 66 ··· 87 87 3. Return "No activity" if nothing of note was found and stop here, otherwise proceed with analysis if facet specific events are found 88 88 4. Gather all relevant data systematically 89 89 5. Generate comprehensive newsletter 90 - 6. **Save using `echo "CONTENT" | sol call journal news FACET -d DAY --write`** 90 + 6. **Save using `echo "CONTENT" | sol call journal news FACET --write`** 91 91 92 92 The newsletter should be professional yet engaging, serving as both a historical record and planning tool that provides value immediately and in future reviews.
+20 -20
muse/help.md
··· 72 72 73 73 ### Journal 74 74 - `sol call journal search [query] [-n limit] [--offset N] [-d YYYYMMDD] [--day-from YYYYMMDD] [--day-to YYYYMMDD] [-f facet] [-t topic]` - Search journal entries. 75 - - `sol call journal events <day> [-f facet]` - List events for a day. 76 - - `sol call journal facet <name>` - Show facet details. 75 + - `sol call journal events [day] [-f facet]` - List events for a day (day defaults to SOL_DAY). 76 + - `sol call journal facet [name]` - Show facet details (name defaults to SOL_FACET). 77 77 - `sol call journal facets` - List all facets. 78 - - `sol call journal news <name> [-d YYYYMMDD] [-n limit] [--cursor CURSOR] [-w]` - Get news feed for a facet. 79 - - `sol call journal topics <day> [-s HHMMSS_LEN]` - List topics for a day. 80 - - `sol call journal read <day> <topic> [-s HHMMSS_LEN] [--max N]` - Read transcript content for a topic. 78 + - `sol call journal news [name] [-d YYYYMMDD] [-n limit] [--cursor CURSOR] [-w]` - Get news feed for a facet (name defaults to SOL_FACET, -d defaults to SOL_DAY). 79 + - `sol call journal topics [day] [-s HHMMSS_LEN]` - List topics for a day (day defaults to SOL_DAY). 80 + - `sol call journal read <topic> [-d YYYYMMDD] [-s HHMMSS_LEN] [--max N]` - Read agent output for a topic (day defaults to SOL_DAY). 81 81 82 82 ### Entities 83 - - `sol call entities list <facet> [-d day]` - List entities in a facet. 84 - - `sol call entities detect <day> <facet> <TYPE> <entity> <description>` - Detect/record an entity. 85 - - `sol call entities attach <facet> <TYPE> <entity> <description>` - Attach entity to facet. 86 - - `sol call entities update <facet> <entity> <description> [-d day]` - Update entity description. 87 - - `sol call entities aka <facet> <entity> <AKA>` - Add alias for entity. 88 - - `sol call entities observations <facet> <entity>` - List observations for entity. 89 - - `sol call entities observe <facet> <entity> <content> [--source-day YYYYMMDD]` - Record observation. 83 + - `sol call entities list [facet] [-d day]` - List entities (facet defaults to SOL_FACET; without -d: attached, with -d: detected). 84 + - `sol call entities detect <TYPE> <entity> <description> [-f facet] [-d day]` - Detect/record an entity (facet defaults to SOL_FACET, day to SOL_DAY). 85 + - `sol call entities attach <TYPE> <entity> <description> [-f facet]` - Attach entity to facet (facet defaults to SOL_FACET). 86 + - `sol call entities update <entity> <description> [-f facet] [-d day]` - Update entity description. 87 + - `sol call entities aka <entity> <AKA> [-f facet]` - Add alias for entity. 88 + - `sol call entities observations <entity> [-f facet]` - List observations for entity. 89 + - `sol call entities observe <entity> <content> [-f facet] [--source-day YYYYMMDD]` - Record observation. 90 90 91 91 ### Todos 92 - - `sol call todos list <day> [-f facet] [--to end_day]` - List todos. 93 - - `sol call todos add <day> <text> --facet/-f <facet>` - Add a todo. 94 - - `sol call todos done <day> <line_number> --facet/-f <facet>` - Complete a todo. 95 - - `sol call todos cancel <day> <line_number> --facet/-f <facet>` - Cancel a todo. 96 - - `sol call todos upcoming [-l limit] [-f facet]` - Show upcoming todos. 92 + - `sol call todos list [day] [-f facet] [--to end_day]` - List todos (day defaults to SOL_DAY, facet to SOL_FACET). 93 + - `sol call todos add <text> [-d day] [-f facet]` - Add a todo (day defaults to SOL_DAY, facet to SOL_FACET). 94 + - `sol call todos done <line_number> [-d day] [-f facet]` - Complete a todo. 95 + - `sol call todos cancel <line_number> [-d day] [-f facet]` - Cancel a todo. 96 + - `sol call todos upcoming [-l limit] [-f facet]` - Show upcoming todos (facet defaults to SOL_FACET). 97 97 98 98 ### Transcripts 99 - - `sol call transcripts scan <day>` - Scan recordings for a day. 100 - - `sol call transcripts segments <day>` - List transcript segments. 101 - - `sol call transcripts read <day> [--start HHMMSS] [--length MINUTES] [--segment HHMMSS_LEN] [--stream NAME] [--full] [--raw] [--audio] [--screen] [--agents] [--max N]` - Read transcript text. 99 + - `sol call transcripts scan [day]` - Scan recordings for a day (day defaults to SOL_DAY). 100 + - `sol call transcripts segments [day]` - List transcript segments (day defaults to SOL_DAY). 101 + - `sol call transcripts read [day] [--start HHMMSS] [--length MINUTES] [--segment HHMMSS_LEN] [--stream NAME] [--full] [--raw] [--audio] [--screen] [--agents] [--max N]` - Read transcript text (day defaults to SOL_DAY). 102 102 - `sol call transcripts stats <month>` - Show transcript statistics. 103 103 104 104 ## Example Answers
+5 -3
muse/joke_bot.md
··· 27 27 3. **Contextual Analysis**: Use transcript/insight retrieval to pull full context for the most promising findings from the previous phases. This raw material will be analyzed for comedic elements like irony, juxtaposition, or absurdity. 28 28 4. **Creative Synthesis & Delivery**: The final phase involves brainstorming joke concepts from the analyzed material, selecting the best one, and delivering it as the final response. 29 29 30 + SOL_DAY is set in your environment. Commands like `journal events`, `journal read`, and `transcripts read` default to the current day — only pass explicit day values to override. Note: `journal search` requires explicit `-d DAY`. 31 + 30 32 ### Detailed Research Steps 31 33 32 34 **Phase 1: Discovery - Mapping the Analysis Day's Landscape** ··· 39 41 - **Expected Outcomes**: A list of all topic insights from the day, which will help identify recurring themes or unusual combinations of activities. 40 42 41 43 2. **List All Structured Events**: 42 - - **Command**: `sol call journal events $day_YYYYMMDD` 44 + - **Command**: `sol call journal events` 43 45 - **Purpose**: To identify all formal meetings, calls, or tasks. Corporate jargon, meeting mishaps, or task-related struggles are excellent sources of humor. 44 46 - **Expected Outcomes**: A timeline of the day's key events, such as "Project Phoenix Sync," "API Debugging Session," or "Team Standup." 45 47 ··· 52 54 53 55 1. **Retrieve Full Context for Key Findings**: 54 56 - **Retrieval**: 55 - - `sol call journal read $day_YYYYMMDD {topic}` for the 2-3 most prominent or ironically named topics discovered in Phase 1. 56 - - `sol call transcripts read $day_YYYYMMDD --start {time} --length {length} --full` for the most promising snippets found in the transcript search. Retrieve a 5-10 minute window around the snippet to understand the full conversation or activity. 57 + - `sol call journal read {topic}` for the 2-3 most prominent or ironically named topics discovered in Phase 1. 58 + - `sol call transcripts read --start {time} --length {length} --full` for the most promising snippets found in the transcript search. Retrieve a 5-10 minute window around the snippet to understand the full conversation or activity. 57 59 - **Priority Order**: Prioritize transcript snippets first, as they contain direct quotes. Then, review insights for high-level irony. 58 60 - **Analysis Focus**: Read through the retrieved content, looking for: 59 61 - **Irony**: e.g., A meeting about "improving communication" where everyone was talking over each other.
+9 -8
muse/journal/SKILL.md
··· 7 7 8 8 Use these commands to explore journal content from the terminal. 9 9 10 - **Environment defaults**: When `SOL_DAY` is set, commands that take a DAY argument will use it automatically. Same for `SOL_SEGMENT`. 10 + **Environment defaults**: When `SOL_DAY` is set, commands that take a DAY argument will use it automatically. Same for `SOL_SEGMENT` and `SOL_FACET`. 11 11 12 12 Common pattern: 13 13 ··· 73 73 ## facet 74 74 75 75 ```bash 76 - sol call journal facet NAME 76 + sol call journal facet [NAME] 77 77 ``` 78 78 79 79 Show a comprehensive facet summary. 80 80 81 - - `NAME`: facet name. 81 + - `NAME`: facet name (default: `SOL_FACET` env). 82 82 83 83 Use this for a quick overview of facet metadata, entities, and current state. 84 84 ··· 86 86 87 87 ```bash 88 88 sol call journal facet work 89 + sol call journal facet # uses SOL_FACET 89 90 ``` 90 91 91 92 ## topics ··· 134 135 ## news 135 136 136 137 ```bash 137 - sol call journal news NAME [-d DAY] [-n LIMIT] [--cursor CURSOR] [-w] 138 + sol call journal news [NAME] [-d DAY] [-n LIMIT] [--cursor CURSOR] [-w] 138 139 ``` 139 140 140 141 Read or write facet news entries. 141 142 142 - - `NAME`: facet name. 143 - - `-d, --day`: optional specific day (`YYYYMMDD`, default: `SOL_DAY` env for write mode). 143 + - `NAME`: facet name (default: `SOL_FACET` env). 144 + - `-d, --day`: optional specific day (`YYYYMMDD`, default: `SOL_DAY` env). 144 145 - `-n, --limit`: max days to return (default `5`). 145 146 - `--cursor`: optional pagination cursor (typically a `YYYYMMDD` cutoff for older entries). 146 147 - `-w, --write`: write mode — reads markdown from stdin and saves as news for the given day. 147 148 148 149 Behavior notes: 149 150 150 - - Without `--write`: reads and displays existing news entries. 151 + - Without `--write`: reads and displays existing news entries. Uses `SOL_DAY` to filter to a specific day when set. 151 152 - With `--write`: requires `--day` (or `SOL_DAY` env), reads markdown content from stdin, saves to facet news directory. 152 153 153 154 Examples: 154 155 155 156 ```bash 156 157 sol call journal news work -n 3 157 - sol call journal news work -d 20260115 158 + sol call journal news -d 20260115 # uses SOL_FACET 158 159 sol call journal news work --cursor 20260110 -n 5 159 160 ```
+14 -2
think/tools/call.py
··· 23 23 get_journal, 24 24 iter_segments, 25 25 resolve_sol_day, 26 + resolve_sol_facet, 26 27 resolve_sol_segment, 27 28 truncated_echo, 28 29 ) ··· 120 121 121 122 @app.command() 122 123 def facet( 123 - name: str = typer.Argument(help="Facet name."), 124 + name: str | None = typer.Argument( 125 + default=None, help="Facet name (default: SOL_FACET env)." 126 + ), 124 127 ) -> None: 125 128 """Show facet summary.""" 129 + name = resolve_sol_facet(name) 126 130 try: 127 131 summary = facet_summary(name) 128 132 except FileNotFoundError: ··· 149 153 150 154 @app.command() 151 155 def news( 152 - name: str = typer.Argument(help="Facet name."), 156 + name: str | None = typer.Argument( 157 + default=None, help="Facet name (default: SOL_FACET env)." 158 + ), 153 159 day: str | None = typer.Option(None, "--day", "-d", help="Specific day YYYYMMDD."), 154 160 limit: int = typer.Option(5, "--limit", "-n", help="Max days to show."), 155 161 cursor: str | None = typer.Option(None, "--cursor", help="Pagination cursor."), 156 162 write: bool = typer.Option(False, "--write", "-w", help="Write news from stdin."), 157 163 ) -> None: 158 164 """Read or write facet news.""" 165 + name = resolve_sol_facet(name) 159 166 if write: 160 167 day = resolve_sol_day(day) 168 + elif day is None: 169 + from think.utils import get_sol_day 170 + 171 + day = get_sol_day() 172 + if write: 161 173 162 174 # Read markdown from stdin 163 175 markdown = sys.stdin.read()