with one click
assess
CEFR placement test — 30 questions, estimate level, seed initial deck
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
CEFR placement test — 30 questions, estimate level, seed initial deck
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Placeholder skill so the pack manifest validates.
Default skill for the Create pack — file casual user input (text, voice, image) into the material pool
Generate a platform-specific post draft from recent material
Fetch a URL, extract key points, and file as material
First-time setup for the Create companion — learn which platforms the user posts to and pick default voices
Evening proactive prompt — surface fresh thoughts the user might want to capture
| name | assess |
| pack | vocab |
| description | CEFR placement test — 30 questions, estimate level, seed initial deck |
| command | true |
| triggers | ["vocab assess","placement","test my level","测试水平","评估等级"] |
Place the user on the A2 / B1 / B2 / C1 spectrum, then build their initial card deck.
Run a 30-question quiz, compute a CEFR level, persist it, and seed 20 starter cards from that level.
Start a run
Use the db tool to read the 30 rows from assessment_items and the persist tool to open a run:
{
"action": "practice",
"skill_type": "vocab.assess.start",
"content": "Assessment started",
"metadata": "{\"target_count\":30}"
}
Ask questions
msg tool with type: "quiz" to render each as a Telegram-native multiple-choice (4 options).Adaptive shortcut (optional)
Compute level
Persist result
{
"action": "practice",
"skill_type": "vocab.assess.complete",
"content": "Placed at <level>",
"metadata": "{\"cefr_level\":\"B1\",\"scores\":{\"A2\":\"9/10\",\"B1\":\"7/10\",\"B2\":\"2/6\",\"C1\":\"0/4\"}}"
}
Also write user_state row cefr_level = <level> and last_assessed_at = now.
Seed initial deck
words row with: word, cefr_level, ipa, def_en, def_zh, one example_en, one example_zh.cards row with status='new', next_due=date('now').Wrap up