personal memory agent
0
fork

Configure Feed

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

Remove iq option from category config, use providers system

The iq field in category JSON was informational-only and didn't affect
model routing. All category follow-ups already use the providers config
system via observe.describe.* context pattern.

- Remove iq field from meeting.json and messaging.json
- Remove iq handling code from observe/describe.py
- Update docs and tests to reflect simplified schema
- Add note in SCREEN_CATEGORIES.md pointing to providers config

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

+6 -18
+3 -3
docs/SCREEN_CATEGORIES.md
··· 14 14 { 15 15 "description": "One-line description for categorization prompt", 16 16 "followup": true, 17 - "output": "markdown", 18 - "iq": "lite" 17 + "output": "markdown" 19 18 } 20 19 ``` 21 20 ··· 24 23 | `description` | Yes | - | Single-line description used in the categorization prompt | 25 24 | `followup` | No | `false` | Whether to run follow-up analysis for this category | 26 25 | `output` | No | `"markdown"` | Response format: `"json"` or `"markdown"` | 27 - | `iq` | No | `"lite"` | Model tier: `"lite"`, `"flash"`, or `"pro"` | 26 + 27 + Model selection is handled via the providers configuration in `journal.json`. Each category uses the context pattern `observe.describe.<category>` for routing. See [JOURNAL.md](JOURNAL.md) for details on configuring providers per context. 28 28 29 29 ### 2. `<category>.txt` (required if `followup: true`) 30 30
+1 -1
observe/categories/__init__.py
··· 4 4 """Category prompts and formatters for screen description. 5 5 6 6 This package contains: 7 - - <category>.json: Metadata (description, followup, output, iq) 7 + - <category>.json: Metadata (description, followup, output) 8 8 - <category>.txt: Vision prompt template (required if followup=true) 9 9 - <category>.py: Optional formatter for rich markdown output 10 10
+1 -2
observe/categories/meeting.json
··· 1 1 { 2 2 "description": "Video calls/conferencing (Zoom, Meet, Teams, Webex, etc.)", 3 3 "followup": true, 4 - "output": "json", 5 - "iq": "flash" 4 + "output": "json" 6 5 }
+1 -2
observe/categories/messaging.json
··· 1 1 { 2 2 "description": "Chat or email apps (Slack, Discord, Messages/iMessage, Gmail, etc.)", 3 3 "followup": true, 4 - "output": "markdown", 5 - "iq": "flash" 4 + "output": "markdown" 6 5 }
-6
observe/describe.py
··· 53 53 - description (required): Single-line description for categorization prompt 54 54 - followup (optional, default: false): Whether to run follow-up analysis 55 55 - output (optional, default: "markdown"): Response format if followup=true 56 - - iq (optional, default: "lite"): Model tier for follow-up ("lite", "flash", "pro") 57 56 58 57 If followup=true, a matching .txt file contains the follow-up prompt. 59 58 ··· 87 86 # Store the category context for later resolution 88 87 # The model will be resolved at runtime via generate() 89 88 metadata["context"] = f"observe.describe.{category}" 90 - 91 - # Store iq for informational purposes (actual tier comes from CONTEXT_DEFAULTS 92 - # or config override, but category iq can influence CONTEXT_DEFAULTS registration) 93 - if "iq" not in metadata: 94 - metadata["iq"] = "lite" # Default tier for categories 95 89 96 90 # Load prompt if followup is enabled 97 91 if metadata["followup"]:
-4
tests/test_describe_config.py
··· 37 37 assert "context" in metadata, f"Category {category} missing 'context'" 38 38 assert metadata["context"].startswith("observe.describe.") 39 39 40 - # Every category should have iq field (tier name) 41 - assert "iq" in metadata, f"Category {category} missing 'iq'" 42 - assert metadata["iq"] in ("lite", "flash", "pro") 43 - 44 40 45 41 def test_followup_categories_have_prompts(): 46 42 """Test that categories with followup=true have prompt loaded."""