diff --git a/docs/APPS.md b/docs/APPS.md index 38e8dc7fc..0b7ae1985 100644 --- a/docs/APPS.md +++ b/docs/APPS.md @@ -271,6 +271,8 @@ app = typer.Typer(help="Description of your app commands.") - Discovery logic: `think/call.py` - `_discover_app_calls()` function - App CLI example: `apps/todos/call.py` - Todo list command +**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. + --- ### 8. `talent/` - App Generators diff --git a/tests/baselines/api/settings/generators.json b/tests/baselines/api/settings/generators.json index 78eadf290..9d87e8d80 100644 --- a/tests/baselines/api/settings/generators.json +++ b/tests/baselines/api/settings/generators.json @@ -8,6 +8,14 @@ "source": "app", "title": "Entity Observer" }, + { + "app": "skills", + "description": "Writes or refreshes one skill profile per day from observer-flagged patterns or chat edit requests.", + "disabled": false, + "key": "skills:skill_editor", + "source": "app", + "title": "Skill Editor" + }, { "app": null, "description": "Analyzes activity patterns to identify optimal times for scheduled maintenance tasks.", diff --git a/tests/baselines/api/settings/providers.json b/tests/baselines/api/settings/providers.json index 14a955b17..eccc02bb8 100644 --- a/tests/baselines/api/settings/providers.json +++ b/tests/baselines/api/settings/providers.json @@ -176,6 +176,22 @@ "tier": 2, "type": "cogitate" }, + "talent.skills.skill_editor": { + "disabled": false, + "group": "Think", + "label": "Skill Editor", + "schedule": "daily", + "tier": 2, + "type": "generate" + }, + "talent.skills.skill_observer": { + "disabled": false, + "group": "Skills", + "label": "Skill Observer", + "schedule": "daily", + "tier": 3, + "type": "cogitate" + }, "talent.support.support": { "disabled": false, "group": "Think", @@ -339,14 +355,6 @@ "tier": 3, "type": "generate" }, - "talent.system.skills": { - "disabled": false, - "group": "Think", - "label": "Skill Observer", - "schedule": "activity", - "tier": 2, - "type": "generate" - }, "talent.system.speaker_attribution": { "disabled": false, "group": "Think", diff --git a/tests/baselines/api/sol/talents-day.json b/tests/baselines/api/sol/talents-day.json index 03f564ec0..e2df7f2af 100644 --- a/tests/baselines/api/sol/talents-day.json +++ b/tests/baselines/api/sol/talents-day.json @@ -368,17 +368,28 @@ "title": "Segment Sense", "type": "generate" }, - "skills": { - "app": null, - "color": "#6c757d", - "description": "Detects recurring activity patterns and generates structured skill documents describing what the owner does, how, and why.", + "skills:skill_editor": { + "app": "skills", + "color": "#8e24aa", + "description": "Writes or refreshes one skill profile per day from observer-flagged patterns or chat edit requests.", "multi_facet": false, - "output_format": "json", - "schedule": "activity", - "source": "system", - "title": "Skill Observer", + "output_format": "md", + "schedule": "daily", + "source": "app", + "title": "Skill Editor", "type": "generate" }, + "skills:skill_observer": { + "app": "skills", + "color": "#5e35b1", + "description": "Daily owner-wide scan for recurring skill patterns in today's activities.", + "multi_facet": false, + "output_format": null, + "schedule": "daily", + "source": "app", + "title": "Skill Observer", + "type": "cogitate" + }, "speaker_attribution": { "app": null, "color": "#d84315", diff --git a/tests/baselines/api/stats/stats.json b/tests/baselines/api/stats/stats.json index 66190a14d..10b2ba412 100644 --- a/tests/baselines/api/stats/stats.json +++ b/tests/baselines/api/stats/stats.json @@ -233,15 +233,13 @@ "title": "Segment Sense", "type": "generate" }, - "skills": { - "activities": [ - "*" - ], - "color": "#6c757d", - "description": "Detects recurring activity patterns and generates structured skill documents describing what the owner does, how, and why.", + "skills:skill_editor": { + "app": "skills", + "color": "#8e24aa", + "description": "Writes or refreshes one skill profile per day from observer-flagged patterns or chat edit requests.", "hook": { - "post": "skills", - "pre": "skills" + "post": "skills:skill_editor", + "pre": "skills:skill_editor" }, "load": { "percepts": false, @@ -249,12 +247,13 @@ "transcripts": false }, "mtime": 0, - "output": "json", - "path": "/talent/skills.md", - "priority": 90, - "schedule": "activity", - "source": "system", - "title": "Skill Observer", + "multi_facet": false, + "output": "md", + "path": "/apps/skills/talent/skill_editor.md", + "priority": 60, + "schedule": "daily", + "source": "app", + "title": "Skill Editor", "type": "generate" }, "speaker_attribution": {