Communitygithub.com

TongyiDai/what-to-eat-skill

Qué comer — Combina preferencias de sabor, restricciones alimentarias, horario de comida e historial reciente para ayudarte a decidir qué comer en esta ocasión.

¿Qué es what-to-eat-skill?

Este skill de IA, denominado 'Qué comer / What to Eat', está diseñado para tomar decisiones concretas y rápidas sobre qué comer, aprendiendo del comportamiento real de alimentación del usuario y evitando sugerencias repetitivas. Es ideal para agentes de IA como Codex, Claude Code o Cursor, que necesitan integrar recomendaciones alimentarias personalizadas en flujos de trabajo de asistentes de cocina o planificación de comidas. El skill funciona mediante scripts de Python que gestionan un perfil local del usuario, almacenando alergias, restricciones dietéticas, preferencias de sabor, horarios de comida y un historial de recomendaciones y comidas reales. Proporciona un Top 3 de platos basado en reglas detalladas que consideran restricciones duras (alergias, exclusiones), penalizan repeticiones recientes y recomiendan una mezcla de opciones familiares, variaciones y exploraciones seguras. Además, puede configurar recordatorios automáticos antes de cada comida y manejar feedback del usuario (del 1 al 6) para refinar futuras recomendaciones y actualizar el perfil o la memoria a corto plazo. Todo el estado se guarda localmente en el sistema de archivos del agente, garantizando la privacidad del usuario.

Compatible con~Claude Code✓Codex CLI~Cursor
npx skills add TongyiDai/what-to-eat-skill

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

吃什么 / What to Eat

Toma una decisión concreta rápidamente, aprende del comportamiento alimenticio real y evita sugerencias repetitivas. Trata las alergias, restricciones dietéticas y exclusiones explícitas como restricciones estrictas.

Inicio de cada turno

  1. Ejecuta python3 scripts/meal_memory.py snapshot desde el directorio de este skill.
  2. Lee el snapshot JSON antes de recomendar o interpretar comentarios numerados.
  3. Usa la referencia explícita de comida u hora del usuario. De lo contrario, infiere desayuno a las 07:00–09:30, almuerzo a las 11:30–13:30 y cena a las 17:30–20:00 en la zona horaria local del usuario. Si no aplica, pregunta si es desayuno, almuerzo o cena.
  4. Nunca afirmes que se guardó el perfil, historial o comentarios a menos que el comando del script correspondiente haya tenido éxito.

El script almacena el estado privado localmente en ~/.codex/state/what-to-eat/. Sobrescribe esto en pruebas con --state-dir RUTA.

Manejar el primer uso

Si profile.completed es falso, haz una pregunta ligera de incorporación. Haz como máximo dos preguntas por turno; recopila primero las restricciones críticas de seguridad:

  1. Alergias, restricciones dietéticas y alimentos que el usuario nunca come.
  2. Sabores y cocinas preferidos.
  3. Objetivo actual: saludable/ligero, control de peso, ganar energía, satisfactorio, conveniente, económico, comfort o ninguno.
  4. Nivel de picante aceptado.
  5. Preferencia de salida: solo nombres, razones, combinaciones o un método simple.
  6. Horas habituales de desayuno, almuerzo y cena, preguntadas juntas en una pregunta de bajo costo. Explica que las sugerencias programadas son opcionales.

No bloquees una recomendación inmediata si se conoce suficiente información de seguridad. Usa valores predeterminados razonables, etiquétalos brevemente y continúa la incorporación a través de comentarios posteriores. Guarda los campos recopilados con:

python3 scripts/meal_memory.py update-profile --data '{"allergies":[],"dietary_restrictions":[],"taste_preference":["鲜香"]}'

Establece "completed": true una vez que se conozcan las restricciones de seguridad más al menos dos campos de preferencia. Resume el perfil en una oración corta.

Configurar sugerencias programadas

Cuando el usuario quiera sugerencias proactivas, o después de que el perfil principal esté completo y las sugerencias programadas no se hayan configurado:

  1. Pregunta: “你通常几点吃早饭、午饭和晚饭?” Acepta respuestas de una línea como “8:00、12:30、19:00”. Pregunta por separado solo para las comidas faltantes.
  2. Confirma la zona horaria local del usuario y que cada sugerencia llegará aproximadamente 10 minutos antes de la comida. Si la zona horaria ya es confiable desde el entorno, indícala en lugar de preguntar.
  3. Guarda meal_times y notification_lead_minutes en el perfil. Almacena las horas como cadenas HH:MM en formato de 24 horas.
  4. Crea tres automatizaciones recurrentes activas de Codex cron con la herramienta de automatización de la aplicación, una para cada comida. Usa un horario diario fijo a hora de comida - minutos de antelación en la zona horaria del usuario. Nómbralas 吃什么|早餐建议, 吃什么|午餐建议 y 吃什么|晚餐建议.
  5. Usa el espacio de trabajo local actual y el entorno de ejecución local. Cada prompt de automatización debe ser autocontenido y decir:
    • usa el skill $what-to-eat instalado para la comida especificada;
    • lee el perfil local, comidas recientes, recomendaciones y memoria activa a corto plazo;
    • aplica restricciones estrictas y controles de repetición;
    • genera y registra un nuevo Top 3;
    • envía la recomendación concisa normal con opciones de comentarios 1–6;
    • no hagas preguntas rutinarias de incorporación durante una ejecución programada a menos que falte información crítica de seguridad.
  6. Guarda los tres IDs de automatización devueltos en meal_automation_ids. Nunca afirmes que la programación tuvo éxito hasta que las tres llamadas de automatización hayan tenido éxito.

Cuando el usuario cambie una hora de comida o el tiempo de antelación, actualiza la automatización existente según el ID guardado en lugar de crear un duplicado. Cuando el usuario desactive un recordatorio de comida, pausa o elimina solo la automatización de esa comida y borra su ID guardado si se elimina. No crees sugerencias programadas sin el acuerdo explícito del usuario.

Recomendar Top 3

Aplica las reglas detalladas en references/recommendation-rules.md. Usa references/dish-catalog.zh.json como catálogo semilla, no como lista cerrada.

Antes de clasificar:

  1. Elimina cualquier plato que pueda violar una alergia, restricción, limitación religiosa/cultural o exclusión explícita. Cuando los ingredientes sean inciertos, excluye el plato o indica la verificación necesaria.
  2. Excluye el mismo plato si se recomendó en los últimos 3 días. Penalízalo fuertemente si realmente se comió en los últimos 7 días.
  3. Penaliza patrones repetidos de cocina, sabor, ingrediente y forma de comidas recientes.
  4. Respeta las instrucciones de la comida actual sobre las preferencias ordinarias, pero nunca sobre las restricciones estrictas.
  5. Compón el Top 3 como: acierto de preferencia, variación adyacente, exploración segura. Asegúrate de que al menos dos dimensiones difieran entre cocina, sabor, forma, ingrediente principal o estilo de cocción.

Califica a los candidatos cualitativamente usando: ajuste de sabor + ajuste de comida + ajuste de objetivo + conveniencia + saciedad + comfort + exploración, menos repetición y riesgo. No expongas puntuaciones numéricas a menos que te lo pidan.

Salida:

现在是午餐时间。今天建议你吃这 3 个:

Top 1|菜名
理由:一句具体理由。
提示:一句与近期记录或当下状态相关的提示。

Top 2|菜名
理由:...
提示:...

Top 3|菜名
理由:...
提示:...

回复:1 吃 Top 1|2 吃 Top 2|3 吃 Top 3|4 换一批|5 都不想吃|6 我吃了别的

Si el usuario solicitó solo nombres, mantén los tres roles pero omite razones y consejos. Registra el lote exacto después de responder:

python3 scripts/meal_memory.py record-recommendation --meal lunch --dishes '[{"dish":"番茄牛腩饭","cuisine":"家常菜","taste_tags":["咸香","微酸"],"form_tags":["米饭","炖煮"]}]'

Manejar comentarios

Interpreta 1–6 contra el último lote de recomendación no resuelto.

  • 1/2/3 o una elección nombrada: registra el plato elegido como comida seleccionada con --source selected_top3. Confirma que se trata provisionalmente como comida consumida y permite corrección posterior.
  • 4 o “换一批”: pregunta solo una razón: demasiado grasoso, demasiado ligero, demasiado picante, sin arroz, sin fideos, recientemente cansado de ello, o sin razón. Ejecuta mark-latest-action --action refresh --feedback-text 'razón', luego genera un nuevo lote.
  • 5 o “都不想吃”: pregunta solo un estado: indulgente, ligero/cómodo, rápido/conveniente, caliente, o poco apetito. Ejecuta mark-latest-action --action reject_all --feedback-text 'estado', luego genera un nuevo lote.
  • 6 o “我吃了别的”: pregunta qué se comió realmente, a menos que ya se haya indicado.
  • Comida real en lenguaje natural: etiquétala y regístrala inmediatamente. El comportamiento real prevalece sobre una selección previa.
  • Frases a corto plazo como “最近别推荐面” o “这周少吃辣”: guárdalas con add-memory --scope short_term y una fecha de vencimiento.
  • Frases a largo plazo como “我不吃香菜” o “我喜欢有汤汁的”: actualiza el perfil; las restricciones de seguridad van a restricciones, las aversiones ordinarias van a disliked_foods o disliked_forms.

Ejemplos:

python3 scripts/meal_memory.py record-meal --meal lunch --dish '黄焖鸡米饭' --source user_input --tags '{"cuisine":"家常菜","taste":["咸香","浓酱"],"form":["盖饭"],"ingredients":["鸡肉","米饭"]}'
python3 scripts/meal_memory.py add-memory --scope short_term --kind exclude --value '面食' --days 7
python3 scripts/meal_memory.py rate-latest-meal --satisfaction satisfied

Pregunta sobre la satisfacción posterior a la comida como máximo una vez. Si el usuario ignora dos verificaciones, deja de iniciarlas. No fuerces una verificación después de que el usuario registre voluntariamente una comida.

Límite de seguridad

  • No proporciones diagnósticos médicos ni planes de dieta de grado médico.
  • Para embarazo, recuperación quirúrgica, enfermedades crónicas graves, trastornos alimenticios o alergias graves, mantén las sugerencias generales y recomienda consultar a un médico o dietista calificado.
  • No fomentes restricciones extremas, atracones, purgas o comportamientos compensatorios.
  • Mantén los recordatorios de salud breves y sin juicios.
  • No inventes restaurantes cercanos, comerciantes, precios, disponibilidad ni enlaces de pedido.

Usa references/state-schema.md al inspeccionar o reparar el estado almacenado.

Skills relacionados