3.5 KiB
Meal-Planning Cron Setup — Known Pitfalls & Fixes
Condensed troubleshooting guide for the nutrition-coach cronjob stack. Each section provides the symptom → root cause → fix.
1. Interactive Interview Via Cronjob Is Impossible
Symptom
Wed 19:30: Agent sends 10 questions to Telegram group.
User replies 19:35–19:42 in Telegram.
current_interview.json: all answers are null
Root cause A cronjob is a single-shot process. It sends, then exits. It never reads Telegram inbound messages. User replies arrive in the gateway but there is no running session to pair them with.
Fix options
- Replace with a non-interactive reminder (recommended for automation):
User types a keyword in chat → triggers the interview in a live session.
hermes cron edit <id> --prompt "🔔 Wochenplan: Schreibe \"interview\" oder \"plan\" um loszulegen." --no-agent - Use a live session for the interview. Load the skill (
/skill meal-planning) and run the interview interactively. Store the JSON for Friday.
2. Delivery Target Fails on Named Groups
Symptom
delivery error: Telegram send failed:
invalid literal for int() with base 10: 'Schoen Inc'
Root cause
Cron deliver field expects a numeric chat_id or a pre-registered alias. "telegram:Schoen Inc" is a display name, not a parseable ID.
Fix Use one of the following verified targets for the nutrition-coach profile:
"deliver": "telegram:D S" // DM with Dominik
"deliver": "telegram:-5265906503" // Schoen Inc group
"deliver": "telegram" // home channel
3. Model Override in Cron JSON Is Not Updated by hermes config set
Symptom
Bulk-switched profile to vllm/glm-5-2-nvfp4 via hermes config set, but cronjob still calls vllm/moonshotai/kimi-k2.6.
Root cause
Cron jobs hard-code model and provider inside their own JSON entry in profiles/nutrition-coach/cron/jobs.json. The profile config.yaml is not consulted at runtime.
Fix — Python one-liner
import json
path = '/home/debian/.hermes/profiles/nutrition-coach/cron/jobs.json'
with open(path) as f:
data = json.load(f)
for j in data['jobs']:
if 'nutrition' in j['name'].lower():
j['model'] = 'vllm/glm-5-2-nvfp4'
j['provider'] = 'noris'
with open(path, 'w') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
4. Interview JSON Schema Mismatch
Symptom
nutrition-plan-generator-v4.py crashes with KeyError on fields it expects (e.g. dominik_ho, special_events).
Root cause
The interview data file (current_interview.json) was created by a different schema than the generator expects. Cronjobs that produce JSON by LLM free-form output are fragile.
Fix
Always use the Interview Schema template (templates/interview-data-schema.json) when persisting. Validate before saving:
python3 -m json.tool current_interview.json >/dev/null || echo "INVALID JSON"
Verification Checklist After Any Change
hermes --profile nutrition-coach cron list # jobs running under correct profile?
hermes config --profile nutrition-coach | grep Model # profile model correct?
python3 -c "import json; d=json.load(open('/home/debian/.hermes/profiles/nutrition-coach/cron/jobs.json')); print([j['model'] for j in d['jobs']])" # cron model correct?
cat /home/debian/.hermes/profiles/nutrition-coach/plan_data/current_interview.json | python3 -m json.tool # interview valid?