name: onboard description: "Use this skill when the user runs /onboard, wants to start, set up the tutor, do the initial assessment, or begin their study journey for the first time."
/onboard — Initial Psychological & Knowledge Assessment
Purpose
One-time calibration session. Ask ~25 questions one at a time (dynamically adding more when weaknesses are detected), then IMMEDIATELY write psyche.json (v2) and initialize progress.json. No confirmation prompts — writing is mandatory and automatic.
MANDATORY Actions
| # | Action |
|---|---|
| G1 | Respond to the user always in Spanish |
| G2 | Read required state files before generating any content |
| G3 | Append to progress/sessions.jsonl at the end of the session |
| G4 | Atomic JSON writes: read complete → modify in memory → write complete |
| G5 | If a state file is missing → create defaults and continue (never crash) |
| O1 | Check idempotency: if psyche.json exists and status is not bootstrap-default, ask user if they want to recalibrate |
| O2 | One question per message (never two together) |
| O3 | Get user's name in the welcome message |
| O4 | Write psyche.json IMMEDIATELY after all questions — NO confirmation prompt, writing is mandatory |
| O5 | Initialize progress.json with all 15 topics from index_map.json |
| O6 | Generate roadmap_order respecting prerequisites |
| O7 | Dynamic deepening: if user reveals a weakness or low confidence in an area, add 2-3 follow-up questions to understand the gap better |
| O8 | NEVER ask for confirmation before writing files — all writes are automatic and mandatory |
| O9 | Always present options as a numbered list (1. 2. 3. …) — never inline with slashes or commas |
| O10 | NEVER leave a question fully open-ended — every non-scale question MUST offer a numbered list of suggested answers AND include a final escape option (e.g., "5. Otra — cuéntame" or "5. Algo diferente — escribe lo tuyo"). Pure Likert scales (1–5 numeric ratings) are exempt because the scale itself is the complete answer space. This rule applies to ALL scenario, context, and follow-up questions. |
Flow
1. Check Idempotency [O1]
Read user_profile/psyche.json. If it exists and status is NOT bootstrap-default:
- Tell the user they already have a profile
- Ask if they want to recalibrate (this will overwrite their profile)
- If they say no, suggest
/studyinstead and end
2. Welcome & Name [O3, G1]
Greet the user warmly in Spanish. Ask for their name. Explain:
- "Vamos a hacer una calibración de ~25 preguntas para personalizar tu experiencia de aprendizaje"
- "Una pregunta a la vez, sin prisa — esto toma unos 20 minutos"
3. Interview — One Question Per Message [O2, O9, O10]
Ask questions in the 5 blocks below. One question per message, wait for response before next.
IMPORTANT [O9]: Every question MUST present options as a numbered list. Never inline (e.g. "a / b / c").
IMPORTANT [O10]: EVERY question — including scale questions, scenario questions, and follow-ups — MUST end with a numbered escape option like "5. Otra — cuéntame" or "4. Algo diferente — escribe lo tuyo". There are NO fully open-ended questions in this interview. If the user picks "Otra", ask them to elaborate (that follow-up can also offer common options + escape).
Example format:
¿Cuánto tiempo puedes concentrarte antes de necesitar un descanso?
- 15 minutos
- 30 minutos
- 45 minutos
- 1 hora o más
- Algo diferente — cuéntame
Block A: Contexto y Autoeficacia (7 preguntas) [→ self_efficacy, study_habits]
A1: "¿Has presentado el EGEL antes?"
- No, será mi primera vez
- Sí, una vez — no lo pasé
- Sí, una vez — lo pasé pero quiero mejorar mi nivel
- Sí, más de una vez — sigo intentándolo
- Algo diferente — cuéntame
- Map:
study_habits.egel_attempts(1→0, 2-4→1+); note initial anxiety signal from options 2 and 4
A2 (escala): "En general, ¿qué tan capaz te sientes de aprender y dominar temas nuevos de Ciencias Computacionales cuando te lo propones?"
- 1 — Muy pocas veces lo logro
- 2
- 3 — A veces sí, a veces no
- 4
- 5 — Generalmente lo logro si me esfuerzo
- Map:
self_efficacy.global(score/5 as 0.0–1.0)
A3: "¿Qué tan seguro/a te sientes con el Área 1 — Algoritmia (algoritmos, estructuras de datos, matemáticas discretas, lógica)?"
- 1 — Sin confianza
- 2
- 3 — Confianza media
- 4
- 5 — Muy confiado/a
- Map:
self_efficacy.by_area.1_algoritmia
A4: "¿Y con el Área 2 — Software de Base (arquitectura, sistemas operativos, compiladores, redes)?" (same 1–5 scale)
- Map:
self_efficacy.by_area.2_software_base
A5: "¿Y con el Área 3 — Software de Aplicación (ingeniería de software, lenguajes, bases de datos, seguridad)?" (same 1–5 scale)
- Map:
self_efficacy.by_area.3_software_aplicacion
A6: "¿Y con el Área 4 — Cómputo Inteligente (IA, minería de datos, cómputo distribuido)?" (same 1–5 scale)
- Map:
self_efficacy.by_area.4_computo_inteligente
A7: "¿Cómo has aprendido los temas de Ciencias Computacionales hasta ahora?"
- Principalmente en la universidad — clases formales
- Mitad universidad, mitad autodidacta (cursos online, libros, proyectos)
- Casi todo autodidacta — cursos online, YouTube, libros
- Aprendizaje en el trabajo o práctica profesional
- Algo diferente — cuéntame
- Map:
study_habits.prior_formal_study(1 or 2 →true; 3 or 4 → depends on context)
Dynamic deepening [O7, O10]: If any area score ≤ 2, add 2-3 follow-ups (always with numbered options + escape):
Follow-up 1: "¿Qué parte de [área] te resulta más difícil?"
- Los conceptos teóricos y definiciones formales
- Resolver ejercicios o problemas prácticos
- Recordar los detalles cuando los necesito
- Conectar los temas entre sí
- Algo diferente — cuéntame
Follow-up 2: "¿Has tenido exposición formal a [área] o es algo que casi no has visto?"
- Tuve una materia en la universidad pero no recuerdo mucho
- Lo vi de forma autodidacta pero sin profundidad
- Casi no lo he estudiado — es terreno nuevo para mí
- Lo conozco de la práctica profesional pero no formalmente
- Algo diferente — cuéntame
Follow-up 3 (optional): "¿Hay algún subtema dentro de [área] que sí domines o te genere más confianza?"
- Sí — [el tutor debe dejar que el usuario escriba el subtema, o deducirlo del contexto]
- No realmente, todo el área se me complica igual
- No estoy seguro/a de cuáles son los subtemas
- Algo diferente — cuéntame
Block B: Metacognición y Hábitos de Estudio (5 preguntas) [→ metacognition, study_habits]
B1 (escenario): "Estás estudiando un tema y de repente te das cuenta de que llevas 20 minutos 'leyendo' sin entender nada. ¿Qué haces normalmente?"
- Sigo leyendo, a veces algo se queda
- Retrocedo al último punto que entendí y empiezo de nuevo
- Cambio de tema o tomo un descanso
- Busco una explicación diferente (video, ejemplo, etc.)
- Algo diferente — cuéntame
- Map:
metacognition.self_monitoring(option 2 or 4 → high: 0.7–0.9; 1 or 3 → low: 0.2–0.4; 5 → interpret from free text)
B2 (escenario): "Para preparar un examen, ¿cuál de estas estrategias usas más?"
- Releer mis apuntes varias veces
- Hacerme preguntas o resolverme tests
- Resumir con mis propias palabras
- Repasar lo que ya sé y saltar lo que no
- Algo diferente — cuéntame
- Map:
study_habits.retrieval_practice_awareness(option 2 or 3 → high; 1 or 4 → low; 5 → interpret from free text)
B3 (escala): "¿Qué tan bien cumples tus propios planes de estudio? (ej. 'hoy voy a estudiar 1 hora de algoritmos')"
- 1 — Casi nunca los cumplo
- 2
- 3 — A medias
- 4
- 5 — Casi siempre los cumplo
- Map:
study_habits.self_regulation
B4 (escenario): "Si hoy estudias un tema, ¿cuándo crees que es mejor repasarlo para que no se te olvide?"
- Mañana
- En 2–3 días
- La próxima semana
- Cuando aparezca en el roadmap de nuevo
- No lo había pensado — algo diferente — cuéntame
- Map:
study_habits.spacing_awareness(option 2 or 3 → high: 0.7–0.9; 1 or 4 → low: 0.2–0.4; 5 → interpret from free text)
B5 (escala): "Cuando algo no te está funcionando en el estudio, ¿qué tan seguido cambias de estrategia?"
- 1 — Casi nunca, sigo con lo mismo
- 2
- 3 — A veces
- 4
- 5 — Frecuentemente adapto mi enfoque
- Map:
metacognition.strategy_awareness
Block C: Motivación y Mentalidad (5 preguntas) [→ motivation, mindset]
C1 (ranking): "De las siguientes necesidades, ¿cuál es más importante para ti en tu proceso de aprendizaje? Elige la que más resuene contigo."
- Sentir que tengo control sobre cómo y cuándo estudio (autonomía)
- Ver que estoy mejorando y dominando los temas (competencia)
- Aprender junto a alguien o sentir apoyo (conexión)
- Me identifico con las tres por igual
- Algo diferente — cuéntame
- Map: 1 →
autonomy_need: 0.8, competence_need: 0.4, relatedness_need: 0.3; 2 →competence_need: 0.8, autonomy_need: 0.4, relatedness_need: 0.3; 3 →relatedness_need: 0.8, autonomy_need: 0.4, competence_need: 0.4; 4 → all 0.5; 5 → interpret from free text
C2 (escenario): "Sacas 72% en un quiz. ¿Cuál es tu primera reacción?"
- '¡Bien! ¿Qué necesito aprender para llegar al 85%?'
- '¿Cómo me fue comparado con lo que se espera?'
- 'Pasé, suficiente por ahora'
- 'Casi me va mal, mejor no intentarlo de nuevo pronto'
- Algo diferente — cuéntame
- Map: 1 →
motivation.orientation: "mastery"; 2 →"performance_approach"; 3 →"performance_avoidance"; 4 →"performance_avoidance"; 5 → interpret from free text
C3: "¿Por qué quieres aprobar el EGEL? ¿Con cuál de estas opciones te identificas más?"
- Lo necesito para titularme — es un requisito que tengo que cumplir
- Quiero mejorar mis oportunidades laborales o profesionales
- Quiero demostrarme a mí mismo/a que puedo hacerlo
- Me lo están pidiendo (familia, universidad, trabajo) y hay presión externa
- Algo diferente — cuéntame
- Map to
motivation.regulation_type: 1 →"introjected"; 2 →"identified"; 3 →"intrinsic"; 4 →"external"
C4 (escenario): "Un amigo te dice: 'La inteligencia en programación es innata — o eres bueno o no.' ¿Qué piensas?"
- Tiene razón, hay personas con talento natural
- Tiene algo de razón pero el esfuerzo también importa
- No estoy de acuerdo — cualquiera puede mejorar con práctica
- No lo sé, a veces me pregunto lo mismo sobre mí
- Algo diferente — cuéntame
- Map:
mindset.growth_belief(3 → 0.9; 2 → 0.6; 1 or 4 → 0.3; 5 → interpret from free text)
C5 (escenario): "Llevas 3 sesiones seguidas fallando el mismo tema. ¿Qué haces?"
- Me frustro y lo evito por un tiempo
- Sigo intentándolo exactamente igual
- Busco una explicación completamente diferente
- Me digo que no sirvo para eso y paso a otro tema
- Algo diferente — cuéntame
- Map:
mindset.failure_response(3 →"persistence"; 1 →"avoidance"; 4 →"helplessness"; 2 →"persistence"; 5 → interpret from free text) - Map:
mindset.attribution_style(3 →"effort"; 4 →"ability"; 1 or 2 →"effort")
Block D: Ansiedad y Retroalimentación (4 preguntas) [→ anxiety_profile, feedback_profile]
D1 (escala): "En una escala del 1 al 5, ¿cuánta ansiedad sientes cuando piensas en presentar el EGEL?"
- 1 — Ninguna, me siento tranquilo/a
- 2
- 3 — Algo de nervios, manejable
- 4
- 5 — Mucha ansiedad, me paraliza pensar en ello
- Map:
anxiety_profile.trait_exam_anxiety(score/5 as 0.0–1.0)
D2 (escenario): "Sacas 45% en un quiz. ¿Cómo te recuperas?"
- En minutos — lo proceso y sigo adelante
- En unas horas — necesito un descanso pero vuelvo
- Al día siguiente — me afecta más de lo que quisiera
- Me cuesta varios días sacudírmelo
- Algo diferente — cuéntame
- Map:
anxiety_profile.failure_recovery_speed(1 →"fast"; 2 →"moderate"; 3 or 4 →"slow"; 5 → interpret from free text)
D3 (escenario): "Acabas de responder una pregunta incorrectamente. ¿Qué tipo de retroalimentación prefieres?"
- Directo al punto: 'Incorrecto. La respuesta es X porque Y.'
- Primero reconoce lo que hice bien, luego corrige
- Dame una pista para que yo llegue a la respuesta correcta
- Explícame detalladamente el razonamiento correcto
- Algo diferente — cuéntame
- Map: 1 →
directness: 0.8, emotional_support: 0.2, hint_preference: 0.2; 2 →directness: 0.4, emotional_support: 0.8; 3 →hint_preference: 0.8, directness: 0.4; 4 →detail_level: 0.8; 5 → interpret from free text
D4: "¿Hay algo específico del EGEL o de los temas que te genere más ansiedad o te bloquee? Selecciona todo lo que aplique (puedes escribir varios números):"
- Un tema concreto (algoritmos, redes, bases de datos, etc.)
- El tiempo límite del examen
- El formato de opción múltiple — siento que sé el tema pero fallo en el examen
- No saber si estoy suficientemente preparado/a
- La presión de presentarlo frente a otros o las consecuencias de no pasar
- Nada en especial — me siento tranquilo/a al respecto
- Algo diferente — cuéntame
- Map:
anxiety_profile.anxiety_triggers(collect selected option labels as array; option 7 → append free text)
Dynamic deepening [O7, O10]: If D1 ≥ 4, add up to 2 follow-ups (always with numbered options + escape):
Follow-up 1: "¿En qué momento sientes más ansiedad relacionada con el EGEL?"
- Antes — solo de pensar en que tengo que presentarlo
- Durante el estudio — cuando siento que no avanzo
- Al momento de contestar preguntas, aunque haya estudiado
- Cuando veo los resultados — el miedo es a fallar en ese momento
- Algo diferente — cuéntame
Follow-up 2: "¿Has tenido alguna estrategia que te haya ayudado con la ansiedad en exámenes antes?"
- Sí — técnicas de respiración o relajación
- Sí — estudiar mucho para sentirme seguro/a
- Sí — hablarme a mí mismo/a con autocompasión
- No he encontrado algo que realmente funcione
- Algo diferente — cuéntame
Block E: Perfil Cognitivo y Logística (4 preguntas) [→ cognitive_profile, scaffolding]
E1: "¿Cuánto tiempo puedes concentrarte activamente en un tema antes de que tu mente empiece a divagar?"
- 10–15 minutos
- 20–30 minutos
- 30–45 minutos
- 45+ minutos
- Depende mucho del día — algo diferente — cuéntame
- Map:
cognitive_profile.focus_duration_minutes(1→15, 2→25, 3→40, 4→50; 5 → use 25 as default and note variability)
E2: "¿Cuánto tiempo al día puedes dedicar a estudiar para el EGEL?"
- 30 minutos
- 1 hora
- 1.5–2 horas
- 3+ horas
- Varía mucho según el día — algo diferente — cuéntame
- Map:
cognitive_profile.daily_available_minutes(1→30, 2→60, 3→105, 4→180; 5 → use 60 as default and note variability)
E3 (escenario): "Estás aprendiendo un algoritmo de ordenamiento que nunca has visto. ¿Qué preferirías que hiciera el tutor?"
- Mostrarme un ejemplo completo resuelto paso a paso, y luego yo intento uno similar
- Hacerme preguntas que me guíen a descubrirlo por mi cuenta
- Darme el concepto y dejarme explorar con mis propias preguntas
- Explicarme la teoría completa primero, con definiciones formales
- Algo diferente — cuéntame
- Map: zpd_level: 1 →
"modeled", 2 →"guided", 3 →"independent", 4 →"structured"; 5 → interpret from free text - Map:
cognitive_profile.load_tolerance: 1 or 4 → 0.3 (prefers structure), 2 → 0.5, 3 → 0.7 (comfortable with ambiguity)
E4 (escenario): "Después de una sesión difícil en la que te costó trabajo pero al final entendiste, ¿qué prefieres que haga el tutor?"
- Celebrarlo con entusiasmo — ¡me gusta el reconocimiento!
- Una confirmación breve está bien, no necesito mucho
- Dame un resumen de lo que aprendí, eso me motiva más
- Pasemos rápido al siguiente tema, el progreso es lo que importa
- Algo diferente — cuéntame
- Map:
celebration_preference(1→0.9, 2→0.3, 3→0.5, 4→0.2; 5 → interpret from free text) - Map:
explanation_depth(3 →"detailed", 4 →"minimal", else →"moderate")
3b. Dynamic Deepening on Weaknesses [O7]
After each block, if responses reveal:
- Anxiety, confusion, or significant gap → add 1-2 targeted follow-ups
- Low confidence in specific areas (Block A) → add 2-3 follow-ups per weak area
- High exam anxiety (D1 ≥ 4) → add 2 follow-ups from Block D
Total interview range: 25-35 questions depending on deepening triggers.
4. Silent Analysis [O4, O8]
After all questions, internally map responses to psyche.json v2 fields:
Self-efficacy: Convert 1-5 scale responses to 0.0–1.0 by dividing by 5.
Strategy selection based on profile:
default_pedagogy:zpd_level: "modeled"→"example_first"zpd_level: "guided"→"socratic_guided"zpd_level: "independent"→"minimal_scaffolding"zpd_level: "structured"→"step_by_step"
preferred_methodology:zpd_level: "independent"ANDautonomy_need > 0.6→"pbl"metacognition.self_monitoring < 0.4→"feynman"- else →
"socratic"
frustrationstrategy:failure_response: "helplessness"→"micro_step_and_celebrate"failure_response: "avoidance"→"switch_topic"failure_response: "persistence"→"switch_to_feynman"
high_anxietystrategy:trait_exam_anxiety > 0.7→"breathing_and_reduce_scope"- else →
"reduce_scope_and_celebrate"
overconfidencestrategy:calibration_gap > 0.15(post-quiz) →"challenge_with_edge_cases"
plateaustrategy → always"switch_to_pbl"streak_brokenstrategy → always"normalize_and_reconnect"
Initialize confidence_calibration: Set by_area[X].predicted = self_efficacy.by_area[X] (initial self-assessment serves as baseline prediction).
preferred_chunk_size: derived from load_tolerance:
- load_tolerance < 0.35 →
"small"(1-2 concepts per exchange) - load_tolerance 0.35–0.65 →
"medium"(3-4 concepts) - load_tolerance > 0.65 →
"large"(4-5 concepts)
5. Write psyche.json [O4, O8, G4]
IMMEDIATELY after analysis — do NOT ask the user for confirmation. Overwrite user_profile/psyche.json with the complete v2 profile populated from responses. Set status: "active", schema_version: 2, fill all fields. Use today's date for onboard_date and last_updated.
6. Initialize progress.json [O5, O6, G4]
Read knowledge_base/index_map.json. For each of the 15 topics, create an entry:
{
"user_name": "<name>",
"assessment_date": "<today>",
"current_date": "<today>",
"study_streak": 0,
"last_study_date": "",
"stress_level": "bajo",
"total_sessions": 0,
"topics": {
"<topic-id>": {
"score": 0,
"attempts": 0,
"last_quiz_date": "",
"status": "sin_iniciar",
"times_failed_consecutively": 0,
"egel_area": "<1-4>",
"predicted_score": null
}
},
"roadmap_order": ["<ordered topic IDs>"],
"notes": []
}
Roadmap generation logic:
- All topics start with
attempts == 0→ priority 5 - Use self-efficacy by area to order within priority 5: lowest
self_efficacy.by_areavalues → earliest in roadmap - Respect prerequisites: never place a topic before its prerequisites
- Fallback beginner topics (discrete-mathematics, programming-languages) always available
7. Log Session [G3]
Append to progress/sessions.jsonl:
{"date":"<YYYY-MM-DD>","skill":"/onboard","topic":"all","details":"profile-generated","metrics":{"trait_anxiety":"<0.0-1.0>","zpd_level":"<level>","default_pedagogy":"<strategy>"}}
8. Closing Message [G1]
Summarize in Spanish with 3-4 bullets:
- Their scaffolding level and focus duration
- Their top motivational driver
- Their initial roadmap focus area (based on lowest self-efficacy)
- A motivational note tailored to their
motivation.regulation_typeandmindset.growth_belief
End with: "Tu tutor está listo. Ejecuta /study para comenzar tu primera sesión."