personal memory agent
0
fork

Configure Feed

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

cogitate: default to google + drop tier:3 hardcodes on 9 talents

Flip TYPE_DEFAULTS["cogitate"]["provider"] in think/models.py from
"openai" to "google". tier (TIER_FLASH) and backup ("anthropic") are
unchanged. After this and the per-talent strips below, every cogitate
talent inherits a single uniform default surface: gemini-3-flash-preview
with anthropic failover.

Stripped "tier": 3, from 9 cogitate talent frontmatters so they inherit
the system tier instead of pinning PRO:

- talent/digest.md
- talent/exec.md
- talent/reflection.md
- talent/awareness_tender.md
- talent/pulse.md
- apps/activities/talent/activities_review.md
- apps/entities/talent/entities.md
- apps/skills/talent/skill_observer.md
- apps/todos/talent/todo.md

Amended 3 tests that hardcoded the old default (over-asserting on a
soon-to-be-default value; per task, amend > restore the tier):

- tests/test_models.py::test_type_defaults — provider assertion flipped
to "google".
- tests/test_models.py::test_resolve_provider_no_config — cogitate
branch flipped to ("google", GEMINI_FLASH).
- tests/test_app_sol.py::test_digest_talent_discovery_and_schedule_exclusion
— dropped the tier-equality assertion (test name is about schedule
exclusion; the tier check was unrelated baggage).

Verified resolve_provider("talent.system.digest", "cogitate") returns
('google', 'gemini-3-flash-preview') against an empty journal.

Out of scope, deliberately untouched:
- tests/fixtures/journal/config/journal.json — the cogitate→openai
override is intentional fixture coverage of the override-resolution
path.
- apps/todos/talent/daily.md and talent/facet_newsletter.md still
hardcode tier: 3; CPO is tracking these in a separate lode.
- tests/baselines/api/settings/providers.json — snapshots the 9
talents with tier: 3 and will diff on tier when make verify-api
runs. Refresh via make update-api-baselines in a follow-up.

Future per-talent tier needs go through journal-config override or a
per-talent runtime hint, not by reintroducing tier in frontmatter.

Note: make ci was blocked locally by an unrelated env drift (uv sync
evicted onnxruntime, which observe/transcribe/overlap.py imports at
module top). Verified the constituent gates directly: ruff check,
ruff format --check, scripts/check_layer_hygiene.py, and pytest on
tests/test_models.py + tests/test_app_sol.py (82/82 green).

+4 -14
-1
apps/activities/talent/activities_review.md
··· 6 6 "schedule": "daily", 7 7 "priority": 30, 8 8 "multi_facet": true, 9 - "tier": 3, 10 9 "group": "Activities" 11 10 } 12 11
-1
apps/entities/talent/entities.md
··· 1 1 { 2 2 "type": "cogitate", 3 - "tier": 3, 4 3 5 4 "title": "Entity Detector", 6 5 "description": "Mines journal for entity mentions and records facet-scoped detections with day-specific context",
-1
apps/skills/talent/skill_observer.md
··· 6 6 "schedule": "daily", 7 7 "priority": 41, 8 8 "multi_facet": false, 9 - "tier": 3, 10 9 "group": "Skills", 11 10 "load": {"transcripts": false, "percepts": false, "talents": false} 12 11 }
-1
apps/todos/talent/todo.md
··· 1 1 { 2 2 "type": "cogitate", 3 - "tier": 3, 4 3 5 4 "title": "TODO Detector", 6 5 "description": "Detects todo items from activity transcripts and validates existing todos against activity evidence via sol call commands.",
-1
talent/awareness_tender.md
··· 5 5 "description": "Maintains identity/awareness.md — a compact situational awareness snapshot", 6 6 "schedule": "segment", 7 7 "priority": 98, 8 - "tier": 3, 9 8 "max_output_tokens": 600 10 9 } 11 10
-1
talent/digest.md
··· 5 5 "description": "Synthesize a plain-English digest of who sol is and what's happening now.", 6 6 "schedule": "none", 7 7 "priority": 10, 8 - "tier": 3, 9 8 "max_output_tokens": 1000 10 9 } 11 10
-1
talent/exec.md
··· 1 1 { 2 2 "type": "cogitate", 3 - "tier": 3, 4 3 "title": "Exec", 5 4 "description": "Sol — the journal itself, as a conversational partner", 6 5 "hook": {"pre": "exec_context"}
-1
talent/pulse.md
··· 5 5 "description": "Living narrative of the owner's day — updated each segment", 6 6 "schedule": "segment", 7 7 "priority": 99, 8 - "tier": 3, 9 8 "max_output_tokens": 1000 10 9 } 11 10
-1
talent/reflection.md
··· 1 1 { 2 2 "type": "cogitate", 3 - "tier": 3, 4 3 "title": "Reflection", 5 4 "description": "Sol — longer-form reflective synthesis grounded in the journal" 6 5 }
-1
tests/test_app_sol.py
··· 152 152 agents = get_talent_configs(type="cogitate") 153 153 154 154 assert "digest" in agents 155 - assert agents["digest"]["tier"] == 3 156 155 assert agents["digest"]["schedule"] == "none" 157 156 158 157 for schedule in ("daily", "segment", "activity", "weekly"):
+3 -3
tests/test_models.py
··· 199 199 assert model == GEMINI_FLASH 200 200 201 201 provider, model = resolve_provider("anything", "cogitate") 202 - assert provider == "openai" 203 - assert model == GPT_5_MINI 202 + assert provider == "google" 203 + assert model == GEMINI_FLASH 204 204 205 205 206 206 # --------------------------------------------------------------------------- ··· 227 227 assert "backup" in defaults 228 228 229 229 assert TYPE_DEFAULTS["generate"]["provider"] == "google" 230 - assert TYPE_DEFAULTS["cogitate"]["provider"] == "openai" 230 + assert TYPE_DEFAULTS["cogitate"]["provider"] == "google" 231 231 232 232 233 233 def test_prompt_paths_exist():
+1 -1
think/models.py
··· 94 94 95 95 TYPE_DEFAULTS: Dict[str, Dict[str, Any]] = { 96 96 "generate": {"provider": "google", "tier": TIER_FLASH, "backup": "anthropic"}, 97 - "cogitate": {"provider": "openai", "tier": TIER_FLASH, "backup": "anthropic"}, 97 + "cogitate": {"provider": "google", "tier": TIER_FLASH, "backup": "anthropic"}, 98 98 } 99 99 100 100