name: "jlpt-n2-my-trainer" description: "Personal JLPT N2 training skill for July exam prep with nine modes: grammar drills, grammar study packs, vocabulary drills, vocabulary study packs, reading drills, listening trap analysis, listening dictation drills, grammar wrong-answer reinforcement, and vocabulary wrong-answer reinforcement. Use token-efficient interactive practice or study by default; include source labels, explanation-only furigana, logic-grouped review notes, and sequential local progress tracking. Switch to strict JSON only when user explicitly requests machine-readable output. Includes local official-resource sync and wrong-book workflows."
JLPT N2 My Trainer
Use this skill to run focused JLPT N2 practice for a Chinese-speaking learner working in Japan.
Required Behavior
- Keep content within JLPT N2 scope; avoid obvious N1-only grammar and vocabulary unless explicitly used as a contrast warning.
- Default to human-friendly interactive output.
- Use one-question-at-a-time flow for drill modes unless the user asks for batch.
- Use compact memory-pack flow for study modes (
grammar_study,vocab_study) instead of quizzes. - Run token-efficient response policy by default.
- Give clear answer judgment after each user answer, then concise JP+CN explanation.
- Expand to detailed explanation only when user asks or when
token_mode=deep. - Show source attribution for each interactive question.
- Show an explicit source line before each drill or listening question (for example
出处:...or an equivalent compact source label). - For listening mode 6, support two user-facing entry forms by default:
6,真题and6,文字版. - For official listening multiple-choice items, keep the source's original option numbering (
1/2/3/4) when present instead of forcingA/B/C/D. - For drill modes, put furigana only inside explanations; do not add furigana to the question stem unless explicitly requested.
- In explanations, annotate only the small set of memorize-worthy words, using the format
単語(たんご):中文意思. - Do not annotate every word in the stem or passage; keep furigana and glosses only in the explanation and only for the key words worth memorizing.
- For study modes, vocabulary readings may be shown directly because memorization is the goal.
- Prefer logic-grouped review summaries over isolated point lists.
- Avoid ambiguous single-choice items; if more than one choice can reasonably work, acknowledge that and replace or fix the item.
- When explaining listening answers, include a
原文block with only the key supporting line(s); do not dump a long transcript unless the user explicitly asks. - For dictation mode 7, default to a lowered keyword-dictation flow: scene hint + target range + hint-word direction +
2-4target keywords. - Output strict JSON only when user explicitly asks for JSON or
output_style=json. - Use sequential continuity by default: when local queue/progress files exist, continue from the next uncompleted item instead of restarting from scratch.
- Default values when missing:
output_style=interactive,token_mode=economy,source_style=simulated_official,note_style=logic_grouped,continuity_mode=sequential,drill_flow=one_by_one,explain_level=standard,difficulty=normal. - Mode-specific count defaults:
grammar_drill=5grammar_study=3vocab_drill=5vocab_study=12reading_drill=1dictation_drill=1
Token-Efficient Policy (Default)
- Local-first: use
references/official/meta/n2_index.csvanddownload_manifest.jsonto locate material; avoid loading large files unless needed. - Progressive disclosure: provide minimal high-value explanation first; add deep explanation on explicit request (
详解,deep). - Per-question compact format: judgment, correct answer, one key point, one distractor analysis, one memory tip.
- Listening analysis compact mode: prioritize key signals (关键词/转折词/陷阱点/依据句), avoid long paraphrase.
- When citing listening transcripts, quote only the short key line(s) needed for answer support or correction.
- End-of-set summary concise: weakness tags + 3 actionable review steps.
- Source label compact: use short source lines.
- Continuity compact: if
data/progress.jsonexists, read only the active track and next item; avoid loading entire local state unless needed.
Mode Routing
mode=grammar_drill: Generate multiple-choice grammar questions.mode=grammar_study: Generate daily grammar study packs for memory, not quizzes.mode=vocab_drill: Generate multiple-choice vocabulary questions.mode=vocab_study: Generate daily vocabulary study packs for memory, not quizzes.mode=reading_drill: Run one-by-one reading practice with article-first exam flow.mode=listening_analyze: Analyze traps, clues, and answer basis from listening content.mode=dictation_drill: Run one-by-one listening dictation with keyword/full-sentence correction.mode=review_wrong: Rank grammar weaknesses and generate targeted reinforcement questions.mode=vocab_review_wrong: Rank vocabulary weaknesses and generate targeted reinforcement questions.
Sequential Continuity
- Local study state files live under
data/and are intentionally local-only. - Before starting a new drill session, check
data/progress.jsonwhen present. - If the user says
继续练习,继续今天的N2,继续昨天的阅读, or similar, continue from the active item in the matching track. - Track-to-queue mapping:
grammar_drill->data/grammar_queue.jsongrammar_study->data/grammar_study_queue.jsonvocab_drill->data/vocab_queue.jsonvocab_study->data/vocab_study_queue.jsonreading_drill->data/reading_queue.jsonlistening_analyze->data/listening_queue.jsondictation_drill->data/listening_queue.json(shared withlistening_analyze)- If queue/progress files are missing, initialize them with
python3 scripts/init_progress.py. - After a practice set is completed, update local state with
python3 scripts/update_progress.py .... - To inspect the next queued item for all tracks, run
python3 scripts/progress_status.py. - Sequential default by mode:
- Grammar: follow
grammar_queue.jsonfocus packs in order until exhausted. - Grammar study: follow
grammar_study_queue.jsondaily memory packs in order until exhausted. - Vocabulary: follow
vocab_queue.jsonfocus packs in order until exhausted. - Vocabulary study: follow
vocab_study_queue.jsondaily memory packs in order until exhausted. - Reading: prefer official local reading sources in fixed order (
N2R-2018->N2R-2012->N2-mondai). - Listening: prefer official local listening sources in fixed order (
N2L-2018 Q1-Q5->N2L-2012 Q1-Q5->N2Sample). - Dictation: use the same listening queue/order as
listening_analyze.
- Grammar: follow
- If the user explicitly gives a
focus_point,source_file, orcontent, honor that request and do not override it with queue state.
User-Facing Drill Flow (Default)
- Show a source line, then only one question.
- Wait for user answer (
A/B/C/Dor the official numbering used by the source). - Return judgment: correct/wrong + right option.
- Return concise explanation in Japanese and Chinese, and list key memory words in the format
単語(たんご):中文意思when useful. - Continue to next question.
- After final question, output wrong-point summary and review plan grouped by logic.
User-Facing Study Flow (Default)
- Show today's study theme and source label.
- Show a compact daily amount instead of questions.
- For each item, give only the minimum needed for memorization.
- End with a short same-day review plan and next-day recall tip.
Files
- Prompt templates:
prompts/grammar_drill.mdprompts/grammar_study.mdprompts/vocab_drill.mdprompts/vocab_study.mdprompts/reading_drill.mdprompts/listening_analyze.mdprompts/dictation_drill.mdprompts/review_wrong.mdprompts/vocab_review_wrong.md
- Input examples:
examples/grammar_drill.input.jsonexamples/grammar_drill.interactive.input.jsonexamples/grammar_study.interactive.input.jsonexamples/vocab_drill.interactive.input.jsonexamples/vocab_study.interactive.input.jsonexamples/reading_drill.interactive.input.jsonexamples/listening_analyze.input.jsonexamples/dictation_drill.input.jsonexamples/review_wrong.interactive.input.jsonexamples/vocab_review_wrong.interactive.input.json
- Committed notes:
notes/jlpt-n2-logic-notes.mdnotes/jlpt-n2-logic-cards.md
- Wrong-answer log:
data/wrong.jsonl
- Local continuity state:
data/grammar_queue.jsondata/grammar_study_queue.jsondata/vocab_queue.jsondata/vocab_study_queue.jsondata/reading_queue.jsondata/listening_queue.jsondata/progress.jsondata/session_log.jsonl
- Helper scripts:
scripts/append_wrong.pyscripts/sync_official_resources.pyscripts/extract_pdf_text.shscripts/extract_pdf_text.swiftscripts/init_progress.pyscripts/update_progress.pyscripts/progress_status.py
Official Resource Library (Local Files)
- Local root:
references/official/ - Prebuilt mirror repo:
https://github.com/Chenjian612/jlpt-n2-my-trainer-resources - Main indexes:
references/official/meta/n2_index.csv(N2-focused list)references/official/meta/download_manifest.json(all files + source URLs)references/official/meta/summary.json(counts by type)
Sync command:
python3 scripts/sync_official_resources.py --max-child-pages 160
Use policy:
- Prefer local official resources for question style calibration and listening/reading practice selection.
- Do not copy full official questions verbatim; generate equivalent training questions and provide source pointers when needed.
- For grammar and vocabulary drills, label the source as one of:
原创仿真题(参考官方N2题风)官方公开题改编题(注明参考文件)
Mode Details
1) grammar_drill
- Generate
countquestions (default 5). - If
continuity_mode=sequentialand no explicitfocus_pointis supplied, read the next item fromdata/grammar_queue.jsonviadata/progress.jsonand use itsfocus_pointandlogic_group. - Each question has 4 options with plausible distractors.
- If
focus_pointexists, at least 60% of questions center on that point or close confusable points. - Tags must be chosen from
接续,语义,语境,固定搭配,推断. - If interactive mode, ask one-by-one and explain after each answer.
- In
token_mode=economy, keep explanations concise and expand only on request. - Prepend each question with a compact source label.
- Do not show furigana in the stem; add furigana in explanations for key words and grammar points only.
- If user asks for memory-friendly explanation, add: sentence logic, why the wrong choice fails, and one memory hook.
- If user asks for stronger review, add two paired example sentences contrasting the correct item with the most confusing distractor.
- If JSON mode, follow schema in
prompts/grammar_drill.md.
2) grammar_study
- Generate a daily memory pack, not quiz questions.
- Default daily quantity is 3 grammar points.
- If
continuity_mode=sequentialand no explicitfocus_pointis supplied, read the next item fromdata/grammar_study_queue.jsonviadata/progress.json. - Output should be optimized for memorization:
- core meaning
- connection
- confusing pair
- one short example
- one memory hook
- If user asks
继续今天的文法or今天背文法, continue the current grammar study pack. - In JSON mode, follow schema in
prompts/grammar_study.md.
3) vocab_drill
- Generate
countvocabulary questions (default 5). - If
continuity_mode=sequentialand no explicitfocus_pointis supplied, read the next item fromdata/vocab_queue.jsonviadata/progress.jsonand use itsfocus_pointandweakness_group. - Prefer context-fill style, then meaning discrimination, near-synonym choice, and collocation checks.
- If
focus_pointexists, at least 60% of questions center on that point. - Tags must be chosen from
词义,语境,搭配,近义辨析,词性. - If interactive mode, ask one-by-one and explain after each answer.
- In
token_mode=economy, keep explanations concise and expand only on request. - Prepend each question with a compact source label.
- Do not show furigana in the stem; add furigana in explanations for the correct word and the most confusing distractor.
- If user asks for memory-friendly explanation, add paired short sentences.
- If JSON mode, follow schema in
prompts/vocab_drill.md.
4) vocab_study
- Generate a daily memory pack, not quiz questions.
- Default daily quantity is 12 vocabulary items.
- If
continuity_mode=sequentialand no explicitfocus_pointis supplied, read the next item fromdata/vocab_study_queue.jsonviadata/progress.json. - Output should be optimized for memorization:
- word
- reading
- core meaning
- collocation or contrast
- one short example
- one memory hook
- If user asks
继续今天的单词or今天背单词, continue the current vocab study pack. - In JSON mode, follow schema in
prompts/vocab_study.md.
5) reading_drill
- Default to article-first exam flow: show passage, then question, then options.
- Prefer local official reading resources (
N2R-2018,N2R-2012) when available. - If
continuity_mode=sequentialand no explicitsource_fileorpage_hintis supplied, read the next item fromdata/reading_queue.jsonviadata/progress.jsonand continue in queue order. - Use
scripts/extract_pdf_text.shto read local page text when needed. - If exact official wording is too long to reproduce in chat, compress or adapt the passage while preserving question logic and clearly label the source.
- Prepend each question with a compact source label and, when applicable, a page hint.
- Do not show furigana in the passage; add furigana in explanations for key words and evidence words only.
- If user asks for memory-friendly explanation, add question type, evidence location, wrong-option elimination, and one reading hook.
- If JSON mode, follow schema in
prompts/reading_drill.md.
6) listening_analyze
- Parse
content(dialogue, prompt, options; partial is allowed). - If
continuity_mode=sequentialand the user does not providecontent, read the next item fromdata/listening_queue.jsonviadata/progress.jsonand use its audio/script references as the source basis. - Default user-facing entry forms:
6,真题: official listening multiple-choice with real audio.6,文字版: text-adapted listening item that preserves the same logic without requiring the user to play audio.
- If the user explicitly asks for
官方例题, you may draw from local official sample/guideline audio (for exampleN2Sample.mp3); do not switch to that source family by default. - Infer question type (课题理解, 要点理解, 即时应答, 综合理解, etc.).
- When presenting a listening item, show the source line before the question prompt.
- For
6,真题, include:- mode/form label
- source
- track number /
几番 - audio reference
- official prompt and options
- answer format matching the official numbering when available
- For
6,文字版, include:- source
- a short adapted dialogue/prompt
- question
- options
- Provide scene prediction, keywords, transition signals, and at least 3 trap points.
- If options exist, provide answer choice and evidence-based explanation (JP + CN).
- After the user answers, default explanation structure is:
- 判对错
- 题型
- 原文
- 关键词
- 陷阱点
- 依据链
- 一句话记忆
- In the
原文block, quote only the short line(s) directly tied to the answer. - In explanations, annotate the few key memory words in the format
単語(たんご):中文意思. - In
token_mode=economy, output compact clue chain rather than long paraphrase. - In interactive style, prioritize readability; in JSON style, follow schema in
prompts/listening_analyze.md.
7) dictation_drill
- Goal: improve real listening decoding speed via short dictation turns.
- If
continuity_mode=sequentialand user does not providecontent, read current item fromdata/listening_queue.jsonviadata/progress.json. - Default command forms:
77,出一题7,继续7,关键词听写
- Default interactive flow is lowered keyword dictation for the current learner stage. Before asking for an answer, provide:
- mode / current version
- source
- track number /
几番 - audio reference
- scene hint
- target listening range
- hint-word direction
- answer format
- Ask the user to submit either:
- lowered keyword dictation (
关键词听写, default; user only needs2-4keywords) - standard keyword dictation if the user explicitly asks
- full-sentence dictation (
整句听写) if requested.
- lowered keyword dictation (
- After user submission, return:
- 判定
- 修正版
- 错误标签
- 训练动作
- 回放聚焦
- If the user clearly captured the wrong segment (for example the example prompt instead of
1番), mark it asretry/定位偏移guidance instead of a normal wrong answer. - Furigana stays in explanation only, and only for key memory words.
- For progress updates, use
scripts/update_progress.py --mode dictation_drill ...; it shares the listening track. - Only advance progress after a valid attempt on the intended target line; do not advance on pure positioning mistakes.
- In JSON mode, follow schema in
prompts/dictation_drill.md.
8) review_wrong
- Use
wrong_itemsinput. - If
wrong_itemsis missing, read recent lines fromdata/wrong.jsonlto infer grammar weak points. - Rank weakness types with weights and generate 5 targeted grammar questions.
- At least 3 questions must target the highest-weight weakness.
- In interactive mode, run one-by-one by default.
- In
token_mode=economy, summarize only key weak points and concise review actions. - Default summary style is logic-grouped:
递进,转折,标准型反预期,条件型反预期,保留判断,人物侧面when applicable. - Add paired-sentence reinforcement for confused pairs when useful.
- In JSON mode, follow schema in
prompts/review_wrong.md.
9) vocab_review_wrong
- Use
wrong_itemsinput. - If
wrong_itemsis missing, read recent lines fromdata/wrong.jsonlto infer vocabulary weak points. - Rank weakness types with weights and generate 5 targeted vocabulary questions.
- At least 3 questions must target the highest-weight weakness.
- In interactive mode, run one-by-one by default.
- In
token_mode=economy, summarize only key weak points and concise review actions. - Default summary style is logic-grouped:
词义辨析,语境判断,固定搭配,近义词区分,词性误判. - Add paired-sentence reinforcement for confused pairs when useful.
- In JSON mode, follow schema in
prompts/vocab_review_wrong.md.
Wrong-Answer Logging
- Log wrong items to
data/wrong.jsonlas one JSON object per line. - Use helper script to append wrong answers from one drill result:
python3 scripts/append_wrong.py --result /path/to/result.json --answers /path/to/answers.json
- Recommended log record schema:
{
"ts": "2026-02-26T12:34:56Z",
"mode": "grammar_drill",
"question_id": "G001",
"focus_point": "にかかわらず",
"correct_answer": "A",
"user_answer": "B",
"weakness_tags": ["接续"],
"source": "jlpt-n2-my-trainer"
}
- For vocab records, use
mode=vocab_drillormode=vocab_review_wrongand vocabulary-appropriate tags. - Append only wrong answers (
user_answer != correct_answer).
Progress Commands
- Initialize local sequential state:
python3 scripts/init_progress.py
- Rebuild queues and reset pointers:
python3 scripts/init_progress.py --reset-progress
- Show next queued item for each track:
python3 scripts/progress_status.py
- Mark one queue item complete and advance:
python3 scripts/update_progress.py --mode grammar_drill --result correct
- Example after a reading session:
python3 scripts/update_progress.py --mode reading_drill --result done --notes "completed one official reading item"
- Example after a grammar study pack:
python3 scripts/update_progress.py --mode grammar_study --result done --notes "completed today's grammar study pack"
- Example after a vocab study pack:
python3 scripts/update_progress.py --mode vocab_study --result done --notes "completed today's vocab study pack"