workflow_type: expertNO_THREAD_SKILLS set for delegation skills.gemma4:e4b — An Ollama local tag. OpenRouter doesn't have this model so routing silently returned "chat" for everything. Fixed: ROUTER_MODEL=openai/gpt-5.4-mini now correctly uses the 17KB cached GPT-5.4 Mini prompt.OIMY_REQUEST_BUDGET_S=50 default (configurable).chat_request circuit opened and ALL subsequent calls returned instant degraded fallback. Fixed: threshold=10, cooldown=120s.route_and_execute with no timeout protection. Honcho's API was slow (8-25s). Fixed: moved to background daemon threads, response returns immediately.OLLAMA_BASE_URL=http://127.0.0.1:11434 in the environment. OiMy's URL detection check picked this up as "OLLAMA_URL is set → don't use OpenRouter", falling back to localhost. Fixed: only check OLLAMA_URL (OiMy's own var); OLLAMA_BASE_URL is Ollama's client lib var and is ignored.| Feature | What |
|---|---|
| meal-planning → coach | Changed workflow_type: planner → coach. Now uses Kimi K2.6 for conversational dinner suggestions instead of template "3-day plan" boilerplate. |
| deep-inference-v6.txt | Opus 4.8 comprehensive rewrite — 467 lines. All 11 layers. 9 psychological frameworks (Chase Hughes needs/fears/decisions, Enneagram, DISC, OCEAN, Attachment Theory, Maslow, TTM, Bowen Family Systems, Hofstede). 30-50 inferences, cross-domain tags, negative personalization, forward projection, 3 worked multi-hop examples. |
| Intelligent Profile Router | get_inferences_for_skill(user_id, skill_id) — filters Opus-tagged inferences by skill_domains JSON array. No static mapping. Each inference tagged by Opus at synthesis time for all relevant skills including non-obvious cross-domain connections. |
| Vector memory → OpenAI | Switched from all-minilm (384-dim, Ollama, silently failing) to text-embedding-3-small (1536-dim, OpenAI direct API). Semantic search now works. |
| EntityExtractor | New module. GPT-5.4 Mini batch at session end. Extracts: named people, children (name/age/notes), pets, schedule events, health context, specific barrier values, preferences, locations. Stored in SQLite, injected into Kimi context. |
| Specific barrier/motivator values | Rule-based + pattern extraction wired into InferenceEngine.record_signal. Stores the exact constraint value (e.g. "peanut allergy") not just the category. |
| Rhythm Engine cron | Morning brief (8am) + evening closeout (8pm) wired via Hetzner crontab. BriefComposer (Kimi K2.6) generates personalized daily messages. |
| Honcho non-blocking | Background thread write-backs. Workspace creation hang patched. Key configured on Hetzner. |
workflow_type: coach → Kimi K2.6 is the highest-leverage next action. Each skill that moves from template to Kimi adds ~0.3-0.5 NPS points.
| Stage | Model | Via | Latency | Purpose |
|---|---|---|---|---|
| Intent Triage / Router | openai/gpt-5.4-mini | OpenRouter | ~700ms (cached) | Classify user message into 83 skill IDs. 17KB cached system prompt with disambiguation rules. |
| Hermes Gateway | moonshotai/kimi-k2.6 | OpenRouter | 15-30s | Persona-driven conversational AI. Extended reasoning. Soul.md + Honcho context + selected profile inferences. |
| CoachArchetype | moonshotai/kimi-k2.6 | OpenRouter | 15-30s | BCT-guided coaching responses. Receives selected profile inferences + BCT card + NLP opener. |
| PlannerArchetype | moonshotai/kimi-k2.6 | OpenRouter | 15-30s | Structured planning output with relevant profile context. |
| ExpertArchetype | moonshotai/kimi-k2.6 | OpenRouter | 15-30s | Safety-gated specialist guidance (OT, symptom triage, speech). |
| ActionArchetype | None / moonshotai/kimi-k2.6 | — | <50ms / 15s | Deterministic first. Kimi K2.6 only for complex parameter extraction. |
| Deep Profile Inference | anthropic/claude-opus-4-8 | OpenRouter | 30-60s (async) | Once per user. 30-50 inferences across 11 layers + Layer 0B biographical reference world. |
| Entity Extraction | openai/gpt-5.4-mini | OpenRouter | ~2s (batch) | Session-end batch. Extracts named entities, health context, schedule events, specific constraint values. |
| Vector Embeddings | text-embedding-3-small | OpenAI direct | ~200ms | 1536-dim semantic vectors for conversation pair storage and retrieval. |
| Rhythm BriefComposer | moonshotai/kimi-k2.6 | OpenRouter | 15-30s | Morning brief and evening closeout generation from DailyState signals. |
| QA Evaluator | gpt-5.5 | OpenAI direct | — | Automated QA scoring for synthetic user test sessions. |
| Synthetic User | x-ai/grok-4.3 | OpenRouter | — | Blind simulated user persona for end-to-end testing. |
| Layer | Technology | What it stores | Used by |
|---|---|---|---|
| Honcho | Dialectic inference API | Cross-session user model synthesis. get_insight() returns "User likely prefers X since they mentioned Y across 3 sessions" (~200 tokens). | Hermes + all archetypes (via context injection) |
| Vector Memory | SQLite + OpenAI text-embedding-3-small (1536-dim) | Conversation pairs as semantic vectors. Searched at request time for relevant past context. | route_and_execute() injects top-3 similar past exchanges |
| SQLite (structured) | SQLite on Hetzner | Inference signals, entity facts, deep profile inferences (30-50 per user), BCT session logs, agenda items, active threads | All archetypes, InferenceEngine, EntityExtractor |
GPT-5.4 Mini batch at session end. Extracts from the last 40 messages:
children: [{name, age, notes}] ← "Ethan is 11, peanut allergy"
pets: [{name, type}] ← "Biscuit, labradoodle"
health_context: [{person, condition}] ← "Lily, ear infection post-antibiotics"
schedule_events: [{what, when, who}] ← "soccer practice, Tuesdays 4pm, Ethan"
specific_barriers: [{domain, value, confidence}] ← "meal-planning: peanut allergy + picky eater"
specific_motivators: [{domain, value, confidence}]
preferences: [{domain, value}] ← "food: David low-carb"
These facts are injected into Kimi's context as a compact summary block — no re-asking the user.
The structural facts of their life — geography, household, occupation, family structure, financial tier, education, childhood geography. Social enrichment signals (LinkedIn/Instagram/Twitter) when available.
Skill mapping: All 90+ skills use this as baseline context.
The cultural/experiential universe they carry forward. Inferred from conversational cues, cultural signals, generational markers, social enrichment.
Fields: music_growing_up · music_now · sports_team · role_models · childhood_pets · extracurriculars · likely_schooling_type · peer_competition_pattern · first_vehicle · travel_experience_type · childhood_mischiefs_likely · nostalgic_memories · relationship_with_nature · self_care_relationship · aesthetic_sensibility · food_nostalgia_heritage · media_consumption
Skill mapping: meal-planning, family-film, music-discovery, sports-calendar, parent-playbook, wellness-daily, food-intelligence, storybook, travel-planning.
| Framework | What Opus extracts |
|---|---|
| Chase Hughes Social Needs | Primary need (importance/approval/pity/power/uniqueness/safety) + corresponding fear. Drives emotional behavior and BCT opener selection. |
| Chase Hughes Decision-Making | Primary motivator (security/comfort/status/belonging/autonomy/identity). Determines how to frame recommendations. |
| Enneagram (9 types) | Type + core fear + core desire. More predictive than the type label alone. Inferred from how they describe problems and what they fear. |
| DISC Profile | D (results-focused) / I (social) / S (stable) / C (analytical). From how they phrase requests and what they emphasize. |
| Big Five OCEAN | Openness, Conscientiousness, Extraversion, Agreeableness, Neuroticism — each scored 1-5. OCEAN directly determines which BCT techniques will land. |
| Attachment Theory | Secure / Anxious / Avoidant / Fearful. Determines how they'll respond to AI advice-giving and how much reassurance they need. |
| Maslow's Hierarchy | Active level per domain (health, family, career, finance). Where someone is on Maslow determines what they're motivated by. |
| Transtheoretical Model (TTM) | Stage of change per key behavior area (precontemplation→maintenance). Determines which BCT technique applies. |
| Bowen Family Systems | Differentiation, triangulation, multigenerational transmission. Explains family dynamics inferences in Layer 3. |
At synthesis time (Opus 4.8 runs once), every inference is tagged with skill_domains — all the OiMy skills it's relevant to, including non-obvious cross-domain connections that a static mapping would miss.
At call time, the router filters inferences by the current skill_id:
inference = {
"dimension": "food_as_emotional_regulation",
"claim": "User seeks comfort food and reduces movement when mentally low",
"layer": 9,
"confidence": 0.58,
"skill_domains": [
"meal-planning", # obvious
"wellness-daily", # body + emotional state
"habits", # behavior pattern
"parent-playbook", # if stress-eating → depleted parent
"fitness-coach" # movement reduction correlates
],
"cross_domain_note": "Emotional state drives food choices — load for meal queries too"
}
# At call time: filter by current skill_id
relevant = get_inferences_for_skill(user_id, "meal-planning", limit=8)
# → Returns this inference even for a meal query, surfacing the mental state signal
Why this matters: Static router only loaded food profile for meal-planning queries. Intelligent router surfaces the mental state signal that explains the behavior — Kimi can then acknowledge the likely emotional context without naming it, making OiMy feel like it truly understands.
Zero LLM. 1800-row lookup dictionary.
Key: barrier_category × stage_of_change × hughes_social_need × decision_style
Value: BCT technique file + NLP pattern + exact opener phrasing + specific user values from entity extraction
The specific user values (e.g., "Ethan has peanut allergy" extracted by EntityExtractor) are passed directly into the BCT opener, making it feel personal rather than generic.
52 BCT technique cards · 20 NLP pattern cards · O(1) lookup at runtime
| Feature | Status | Notes |
|---|---|---|
| Intent triage (GPT-5.4 Mini router) | ✅ Live | 17KB cached prompt, ~700ms, 83 skills |
| Hermes on Kimi K2.6 | ✅ Live | Hetzner + Emma bot (@chittiemma1_bot) |
| CoachArchetype → Kimi K2.6 | ✅ Live | Was a stub. Now calls Kimi K2.6 actually. |
| meal-planning → Kimi K2.6 | ✅ Live | workflow_type: planner → coach |
| deep-inference-v6.txt (Opus 4.8) | ✅ Live | 467 lines, 9 frameworks, 30-50 inferences |
| Intelligent Profile Router | ✅ Live | get_inferences_for_skill() filtering by skill_domains |
| Layer 0B biographical reference world | ✅ Live | 18 fields, stored in profile_layer_0b table |
| Cross-domain inference tags | ✅ Live | layer_num, skill_domains_json, cross_domain_note columns |
| Negative personalization layer | ✅ Live | profile_negative_personalization table |
| Forward projection | ✅ Live | profile_forward_projection table |
| Psychological frameworks store | ✅ Live | profile_psychological_frameworks (DISC/Enneagram/OCEAN/etc) |
| Vector memory (OpenAI embeddings) | ✅ Live | text-embedding-3-small, 1536-dim, direct OpenAI API |
| Entity extraction (GPT-5.4 Mini) | ✅ Live | Session-end batch, people/children/pets/health/barriers |
| Specific barrier/motivator values | ✅ Live | inference_specific_values table, rule-based extraction |
| Rhythm Engine cron | ✅ Live | 8am morning brief, 8pm evening closeout via Hetzner crontab |
| Honcho memory (background thread) | ✅ Live | Non-blocking write-backs. Key configured. Workspace → dashboard. |
| Social pre-enrichment (LinkedIn/Instagram) | ⚠️ Stub | Schema + wiring done. Needs Proxycurl + Apify API keys. |
| Expert RAG (vector knowledge bases) | 🔵 Next | OT library · symptom DB · speech activities |
| More skills → Kimi K2.6 coach path | 🔵 Next | Each skill moved from template → NPS +0.3-0.5 |
| Honcho workspace (dashboard) | ⚠️ Needs setup | Create workspace "oimy-default" at app.honcho.dev to activate dialectic insights |
The SOUL.md defines Hermes's identity and routing behavior for the OiMy persona. Key directives crafted by Opus 4.8: