personal memory agent
0
fork

Configure Feed

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

Add speakers and calendar Agent Skills

Extract speaker identification and calendar event commands from
unified.md into standalone SKILL.md files at their app-level
muse directories, following the established skill pattern.

+312
+129
apps/calendar/muse/calendar/SKILL.md
··· 1 + --- 2 + name: calendar 3 + description: > 4 + Manage calendar events with sol call calendar commands. List, create, update, 5 + cancel, and move events organized by facet and day. 6 + TRIGGER: calendar events, scheduling, appointments, meetings, event 7 + management, moving events between facets. 8 + --- 9 + 10 + # Calendar CLI Skill 11 + 12 + Use these commands to manage calendar events from the terminal. 13 + 14 + **Environment defaults**: When `SOL_DAY` is set, commands that take a DAY argument will use it automatically. Same for `SOL_FACET` where FACET is required. 15 + 16 + Common pattern: 17 + 18 + ```bash 19 + sol call calendar <command> [args...] 20 + ``` 21 + 22 + ## list 23 + 24 + ```bash 25 + sol call calendar list [DAY] --facet FACET 26 + ``` 27 + 28 + List events for a day. 29 + 30 + - `DAY`: day in `YYYYMMDD` (default: `SOL_DAY` env). 31 + - `--facet`: facet name (default: `SOL_FACET` env). 32 + 33 + Example: 34 + 35 + ```bash 36 + sol call calendar list 20260115 --facet work 37 + ``` 38 + 39 + ## create 40 + 41 + ```bash 42 + sol call calendar create TITLE --start HH:MM --day DAY --facet FACET [--end HH:MM] [--summary TEXT] [--participants NAMES] 43 + ``` 44 + 45 + Create a calendar event. 46 + 47 + - `TITLE`: event title (positional argument). 48 + - `--start`: start time in `HH:MM` (required). 49 + - `--day`: day in `YYYYMMDD` (default: `SOL_DAY` env). 50 + - `--facet`: facet name (default: `SOL_FACET` env). 51 + - `--end`: optional end time in `HH:MM`. 52 + - `--summary`: optional event description. 53 + - `--participants`: optional comma-separated participant names. 54 + 55 + Example: 56 + 57 + ```bash 58 + sol call calendar create "Team standup" --start 09:00 --end 09:30 --day 20260115 --facet work --participants "Alicia, Ben" 59 + ``` 60 + 61 + ## update 62 + 63 + ```bash 64 + sol call calendar update LINE --day DAY --facet FACET [--title TEXT] [--start HH:MM] [--end HH:MM] [--summary TEXT] [--participants NAMES] 65 + ``` 66 + 67 + Update an existing calendar event. 68 + 69 + - `LINE`: 1-based line number from `list` output (positional argument). 70 + - `--day`: day in `YYYYMMDD` (default: `SOL_DAY` env). 71 + - `--facet`: facet name (default: `SOL_FACET` env). 72 + - `--title`: new event title. 73 + - `--start`: new start time in `HH:MM`. 74 + - `--end`: new end time in `HH:MM`. 75 + - `--summary`: new event description. 76 + - `--participants`: new comma-separated participant names. 77 + 78 + Example: 79 + 80 + ```bash 81 + sol call calendar update 2 --day 20260115 --facet work --start 10:00 --end 10:30 82 + ``` 83 + 84 + ## cancel 85 + 86 + ```bash 87 + sol call calendar cancel LINE --day DAY --facet FACET 88 + ``` 89 + 90 + Cancel a calendar event. 91 + 92 + - `LINE`: 1-based line number from `list` output (positional argument). 93 + - `--day`: day in `YYYYMMDD` (default: `SOL_DAY` env). 94 + - `--facet`: facet name (default: `SOL_FACET` env). 95 + 96 + Behavior notes: 97 + 98 + - Cancelled events remain visible in listings to preserve line numbering. 99 + 100 + Example: 101 + 102 + ```bash 103 + sol call calendar cancel 3 --day 20260115 --facet work 104 + ``` 105 + 106 + ## move 107 + 108 + ```bash 109 + sol call calendar move LINE --day YYYYMMDD --from SOURCE --to DEST [--consent] 110 + ``` 111 + 112 + Move a non-cancelled calendar event to another facet. 113 + 114 + - `LINE`: 1-based line number from `list` output (positional argument). 115 + - `--day`: day in `YYYYMMDD` (required). 116 + - `--from`: source facet name. 117 + - `--to`: destination facet name. 118 + - `--consent`: required when called by a proactive agent. Must have explicit user approval before calling with this flag. 119 + 120 + Behavior notes: 121 + 122 + - Only non-cancelled events can be moved. 123 + - The `--consent` flag signals that the user has explicitly approved this action. Proactive agents must obtain user approval before including it. 124 + 125 + Example: 126 + 127 + ```bash 128 + sol call calendar move 1 --day 20260115 --from personal --to work --consent 129 + ```
+183
apps/speakers/muse/speakers/SKILL.md
··· 1 + --- 2 + name: speakers 3 + description: > 4 + Manage the speaker identification subsystem with sol call speakers commands. 5 + Check speaker status, detect the owner voice, identify unknown speakers, and 6 + merge name variants. Curate the speaker library over time. 7 + TRIGGER: speaker identification, voice recognition, owner detection, speaker 8 + names, voice matching, unknown voices, speaker merge. 9 + --- 10 + 11 + # Speakers CLI Skill 12 + 13 + Use these commands to manage the speaker identification subsystem from the terminal. 14 + 15 + **Environment defaults**: When `SOL_DAY` is set, commands that take a DAY argument will use it automatically. Same for `SOL_FACET` where FACET is required. 16 + 17 + Common pattern: 18 + 19 + ```bash 20 + sol call speakers <command> [args...] 21 + ``` 22 + 23 + **Typical workflow**: status → status owner → suggest → identify/merge-names 24 + 25 + ## status 26 + 27 + ```bash 28 + sol call speakers status [SECTION] 29 + ``` 30 + 31 + Speaker ID subsystem dashboard (embeddings, owner, speakers, clusters, imports, attribution). Returns JSON. 32 + 33 + - `SECTION`: optional section name to filter (e.g., `owner`). 34 + 35 + Behavior notes: 36 + 37 + - Without a section, returns the full dashboard. 38 + - Use `sol call speakers status owner` to check just the owner centroid state. 39 + 40 + Examples: 41 + 42 + ```bash 43 + sol call speakers status 44 + sol call speakers status owner 45 + ``` 46 + 47 + ## suggest 48 + 49 + ```bash 50 + sol call speakers suggest [--limit N] 51 + ``` 52 + 53 + Actionable curation opportunities: unknown recurring voices, name variants, low-confidence segments. Returns JSON. 54 + 55 + - `--limit`: max suggestions to return. 56 + 57 + Behavior notes: 58 + 59 + - Run after dream processing completes, or when the user is engaging with transcripts or recordings. 60 + - Surface suggestions one at a time conversationally — don't stack them. 61 + 62 + Example: 63 + 64 + ```bash 65 + sol call speakers suggest --limit 5 66 + ``` 67 + 68 + ## owner detect 69 + 70 + ```bash 71 + sol call speakers owner detect [--force] 72 + ``` 73 + 74 + Run owner voice detection. Returns candidate with samples. 75 + 76 + - `--force`: re-run even if a candidate already exists. 77 + 78 + Behavior notes: 79 + 80 + - Only attempt when there are 50+ segments with embeddings across 3+ streams. 81 + - If fewer segments exist, wait — don't mention speaker ID proactively until there's enough data. 82 + 83 + Example: 84 + 85 + ```bash 86 + sol call speakers owner detect 87 + sol call speakers owner detect --force 88 + ``` 89 + 90 + ## owner confirm 91 + 92 + ```bash 93 + sol call speakers owner confirm 94 + ``` 95 + 96 + Save detected owner centroid after user confirms. 97 + 98 + Behavior notes: 99 + 100 + - Only run after presenting the candidate to the user and receiving explicit confirmation. 101 + - After confirmation, the system can start identifying other voices. 102 + 103 + ## owner reject 104 + 105 + ```bash 106 + sol call speakers owner reject 107 + ``` 108 + 109 + Discard candidate if user says "that's not me." 110 + 111 + Behavior notes: 112 + 113 + - Wait for more data before trying detection again. 114 + - Don't re-ask about a rejected owner candidate within the same week. 115 + 116 + ## identify 117 + 118 + ```bash 119 + sol call speakers identify <cluster_id> <name> [--entity-id ID] 120 + ``` 121 + 122 + Name an unknown speaker cluster after the user provides the name. 123 + 124 + - `cluster_id`: cluster identifier from `suggest` output (positional argument). 125 + - `name`: speaker name to assign (positional argument). 126 + - `--entity-id`: optional entity ID to link the speaker to an existing entity. 127 + 128 + Example: 129 + 130 + ```bash 131 + sol call speakers identify abc123 "Alicia Chen" 132 + sol call speakers identify abc123 "Alicia Chen" --entity-id alicia_chen 133 + ``` 134 + 135 + ## merge-names 136 + 137 + ```bash 138 + sol call speakers merge-names <alias> <canonical> 139 + ``` 140 + 141 + Merge a name variant into the canonical entity. 142 + 143 + - `alias`: the variant name to merge away (positional argument). 144 + - `canonical`: the canonical name to keep (positional argument). 145 + 146 + Behavior notes: 147 + 148 + - Use when `suggest` surfaces a name variant (e.g., "Mitch" and "Mitch Baumgartner" sound identical). 149 + - Ask the user for confirmation before merging. 150 + 151 + Example: 152 + 153 + ```bash 154 + sol call speakers merge-names "Mitch" "Mitch Baumgartner" 155 + ``` 156 + 157 + ## Owner Detection 158 + 159 + Check `speakers status owner`. If the owner centroid doesn't exist: 160 + 161 + - If there are 50+ segments with embeddings across 3+ streams: good time to try. Run `speakers owner detect`. 162 + - If fewer: wait. Don't mention speaker ID proactively until there's enough data. 163 + 164 + When you have a candidate, present it naturally: "I've been listening to your journal across your different devices and I think I can recognize your voice. Here are a few moments — does this sound right?" Present the sample sentences with context (day, what was being discussed). Don't play audio — show text and context. 165 + 166 + - If the user confirms: run `speakers owner confirm`. 167 + - If the user rejects: run `speakers owner reject`. Wait for more data before trying again. 168 + 169 + ## Speaker Curation 170 + 171 + Run `speakers suggest` after dream processing completes, or when the user is engaging with transcripts or recordings. Surface suggestions conversationally based on type: 172 + 173 + - **Unknown recurring voice:** "I keep hearing a voice in your [day/context] recordings. They said things like '[sample text]'. Do you know who that is?" If the user names them, run `speakers identify <cluster_id> <name>`. 174 + - **Name variant:** "I noticed 'Mitch' and 'Mitch Baumgartner' sound identical in your recordings. Should I merge them?" If yes, run `speakers merge-names <alias> <canonical>`. 175 + - **Low confidence review:** "There are a few speakers in this conversation I'm not sure about. Want to take a quick look?" 176 + 177 + **Don't stack suggestions.** Surface one at a time. Wait for the user to respond before presenting another. Speaker curation should feel like a natural aside, not a checklist. 178 + 179 + ## When NOT to Act 180 + 181 + - Don't proactively surface speaker ID during unrelated conversations. If the user is asking about their calendar or a todo, don't pivot to "by the way, I found a new voice." 182 + - Don't surface low-confidence suggestions. If a cluster has only a few embeddings, wait for it to grow. 183 + - Don't re-ask about a rejected owner candidate within the same week.