personal memory agent
0
fork

Configure Feed

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

skills: docs + baseline refresh + priority ladder notes (Lode B)

docs/APPS.md gains a Skills app section covering the CLI verb surface
(Lode A), the owner-wide storage under journal/skills/, and the
daily observer (41) + editor (60) talent pair. API baselines are
refreshed: the legacy "skills" entry is gone; skill_observer +
skill_editor appear at the expected priorities in stats, talents-day,
providers, and generators.

Daily priority ladder after this lode:

30 activities_review
40 facet_newsletter
41 skill_observer ← new
50 morning_briefing, todos/daily (pre-existing collision)
55 entities
56 entities_review
57 entity_observer
60 skill_editor ← new

Part of Lode B of the skills-observer-editor refactor.

+58 -30
+2
docs/APPS.md
··· 271 271 - Discovery logic: `think/call.py` - `_discover_app_calls()` function 272 272 - App CLI example: `apps/todos/call.py` - Todo list command 273 273 274 + **Skills app reference:** `apps/skills/call.py` is the current owner-wide pattern for a data-backed app CLI. It exposes `sol call skills list|show|observe|seed|promote|refresh|mark-dormant|retire|edit-request|rename` and routes all writes through `think/skills.py`, which owns `journal/skills/patterns.jsonl`, `journal/skills/edit_requests.jsonl`, and `journal/skills/{slug}.md`. The shipped daily talents for this app live in `apps/skills/talent/skill_observer.md` (daily cogitate, priority 41) and `apps/skills/talent/skill_editor.md` + `skill_editor.py` (daily generate, priority 60). The observer marks patterns for creation/refresh, and the editor consumes those flags or pending `edit-request` rows to write/update exactly one owner-wide profile per run. 275 + 274 276 --- 275 277 276 278 ### 8. `talent/` - App Generators
+8
tests/baselines/api/settings/generators.json
··· 9 9 "title": "Entity Observer" 10 10 }, 11 11 { 12 + "app": "skills", 13 + "description": "Writes or refreshes one skill profile per day from observer-flagged patterns or chat edit requests.", 14 + "disabled": false, 15 + "key": "skills:skill_editor", 16 + "source": "app", 17 + "title": "Skill Editor" 18 + }, 19 + { 12 20 "app": null, 13 21 "description": "Analyzes activity patterns to identify optimal times for scheduled maintenance tasks.", 14 22 "disabled": false,
+16 -8
tests/baselines/api/settings/providers.json
··· 176 176 "tier": 2, 177 177 "type": "cogitate" 178 178 }, 179 + "talent.skills.skill_editor": { 180 + "disabled": false, 181 + "group": "Think", 182 + "label": "Skill Editor", 183 + "schedule": "daily", 184 + "tier": 2, 185 + "type": "generate" 186 + }, 187 + "talent.skills.skill_observer": { 188 + "disabled": false, 189 + "group": "Skills", 190 + "label": "Skill Observer", 191 + "schedule": "daily", 192 + "tier": 3, 193 + "type": "cogitate" 194 + }, 179 195 "talent.support.support": { 180 196 "disabled": false, 181 197 "group": "Think", ··· 337 353 "label": "Segment Sense", 338 354 "schedule": "segment", 339 355 "tier": 3, 340 - "type": "generate" 341 - }, 342 - "talent.system.skills": { 343 - "disabled": false, 344 - "group": "Think", 345 - "label": "Skill Observer", 346 - "schedule": "activity", 347 - "tier": 2, 348 356 "type": "generate" 349 357 }, 350 358 "talent.system.speaker_attribution": {
+19 -8
tests/baselines/api/sol/talents-day.json
··· 368 368 "title": "Segment Sense", 369 369 "type": "generate" 370 370 }, 371 - "skills": { 372 - "app": null, 373 - "color": "#6c757d", 374 - "description": "Detects recurring activity patterns and generates structured skill documents describing what the owner does, how, and why.", 371 + "skills:skill_editor": { 372 + "app": "skills", 373 + "color": "#8e24aa", 374 + "description": "Writes or refreshes one skill profile per day from observer-flagged patterns or chat edit requests.", 375 + "multi_facet": false, 376 + "output_format": "md", 377 + "schedule": "daily", 378 + "source": "app", 379 + "title": "Skill Editor", 380 + "type": "generate" 381 + }, 382 + "skills:skill_observer": { 383 + "app": "skills", 384 + "color": "#5e35b1", 385 + "description": "Daily owner-wide scan for recurring skill patterns in today's activities.", 375 386 "multi_facet": false, 376 - "output_format": "json", 377 - "schedule": "activity", 378 - "source": "system", 387 + "output_format": null, 388 + "schedule": "daily", 389 + "source": "app", 379 390 "title": "Skill Observer", 380 - "type": "generate" 391 + "type": "cogitate" 381 392 }, 382 393 "speaker_attribution": { 383 394 "app": null,
+13 -14
tests/baselines/api/stats/stats.json
··· 233 233 "title": "Segment Sense", 234 234 "type": "generate" 235 235 }, 236 - "skills": { 237 - "activities": [ 238 - "*" 239 - ], 240 - "color": "#6c757d", 241 - "description": "Detects recurring activity patterns and generates structured skill documents describing what the owner does, how, and why.", 236 + "skills:skill_editor": { 237 + "app": "skills", 238 + "color": "#8e24aa", 239 + "description": "Writes or refreshes one skill profile per day from observer-flagged patterns or chat edit requests.", 242 240 "hook": { 243 - "post": "skills", 244 - "pre": "skills" 241 + "post": "skills:skill_editor", 242 + "pre": "skills:skill_editor" 245 243 }, 246 244 "load": { 247 245 "percepts": false, ··· 249 247 "transcripts": false 250 248 }, 251 249 "mtime": 0, 252 - "output": "json", 253 - "path": "<PROJECT>/talent/skills.md", 254 - "priority": 90, 255 - "schedule": "activity", 256 - "source": "system", 257 - "title": "Skill Observer", 250 + "multi_facet": false, 251 + "output": "md", 252 + "path": "<PROJECT>/apps/skills/talent/skill_editor.md", 253 + "priority": 60, 254 + "schedule": "daily", 255 + "source": "app", 256 + "title": "Skill Editor", 258 257 "type": "generate" 259 258 }, 260 259 "speaker_attribution": {