From benkyo
Wrap up a benkyo learning session cleanly and prepare for resumption. Use this skill when the learner says 「今日はここまで」「終わり」「また明日」「疲れた」「時間ない」「もう寝る」, or signals they're about to stop. Also trigger when you (the tutor) notice the natural completion of a topic and want to propose a stopping point, or when a session has gone long enough that a wrap is appropriate. This skill handles the recap, delayed JOL seeding, and persistence of state into project.metadata so the next session can resume cleanly.
How this skill is triggered — by the user, by Claude, or both
Slash command
/benkyo:benkyo-session-wrapThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The end of a session is where most of the persistent state for future sessions gets captured. Without doing this carefully, the next session starts from confusion. With it done well, the learner picks up exactly where they left off.
The end of a session is where most of the persistent state for future sessions gets captured. Without doing this carefully, the next session starts from confusion. With it done well, the learner picks up exactly where they left off.
At wrap time the temptation is highest to "summarize technically". Resist. Recap accomplishments in natural language only.
Never say:
Forbidden internal terms (this is in addition to the standard cardinal vocabulary list):
event, log, record, schema, JSON, metadata, session_end, delayed_jol, hypercorrection, payload, kind (as in event kind)
Instead say:
Internal IDs are also forbidden: never write c1, p1, prj1 etc. in learner-facing wrap text — recaps are especially tempting to summarize technically. Refer to concepts and problems by their natural-language name.
See ../_benkyo-shared/references/nl-to-cli.md.
This skill complements benkyo-tutoring. Tutoring is the in-session behavior; this is the boundary.
This skill handles session endings, not starts. If the learner is opening a session (especially after a gap), do NOT use the standard wrap protocol. Instead defer:
benkyo-project-init ("Returning after a long gap" handling)benkyo-tutoring session-start protocolThe cue is direction: this skill is for "winding down", project-init handles "spinning up". If the learner's utterance has no end-of-session signal, you're in the wrong skill.
Don't end mid-breakdown if avoidable. Look for:
If the learner says "終わり" in the middle of a breakdown:
In natural language, summarize:
Tutor: 今日は:
- RLC 並列回路の応答を解いた (P5 完了)
- 留数定理をきっちり理解する形に切り替えて、Cauchy 積分公式までいった
- ラプラス変換は『公式で OK』のまま、変換表を整理した
Three or four short lines. Don't be exhaustive.
Ask the learner to self-classify today's concepts by confidence:
Tutor: 今日扱った内容で、明日でも自分で説明できそうなのは?
自信あり / まあまあ / 自信ない、で分けてみて。
Important: do NOT frame as a test. Bertsch's incidental > intentional: framing as test halves the effect. "振り返り" or "感覚" is the right framing.
If the learner is reluctant or rushed, accept a brief answer or skip.
benkyo session endAs of v0.2.0, persistence uses the structured events log (not free-text metadata). The CLI provides a single atomic command that writes both the session summary and the delayed JOL seeds in one transaction:
benkyo session end --project <prj_id> --summary-file <path>
Compose the summary JSON in memory (use a temp file or --summary - from stdin) with this shape:
{
"completed_problems": ["p1", "p3"],
"treatment_changes": [
{"concept_id": "c5", "from": "blackbox", "to": "whitebox"}
],
"pending": ["c4 mid-derivation"],
"delayed_jols": [
{"concept_id": "c1", "claim": "high"},
{"concept_id": "c2", "claim": "mid", "note": "怪しい"},
{"concept_id": "c4", "claim": "low"}
],
"notes": "学習者は明日試験。c4 の breakdown は次回続きから。"
}
This writes one session_end event plus one delayed_jol_recorded event per JOL entry. The notes field on the session_end event captures non-schemable context (the learner's mood, external factors, anything that doesn't fit the structured fields). Use it generously — it is the LLM-flexibility escape hatch.
If a JOL entry has its own note (per-concept observation), that becomes the notes column on that specific JOL event.
Never call events add directly for these. Always use session end so the writes are atomic.
Brief, encouraging close:
Tutor: 了解、お疲れさま。次回は [next session start] から始めるね。
必要なら 1-2 日以内が retention の観点ではちょうどいい間隔だけど,
気にせず生活に合わせて。
The 1-6 day interval recommendation (Adesope) can be mentioned as a soft suggestion, not pressure.
When time is too short for a full wrap, call session end with a minimal summary:
benkyo session end --project prj1 --summary '{"pending": ["c4 mid-derivation"], "notes": "interrupted by 急用"}'
Spoken to learner:
Tutor: 了解、メモしといた。続きから入れる状態にしといたよ。お疲れ。
Skip:
The minimal summary still produces a session_end event with pending + notes — enough for next-session resume to know where to pick up.
If the session has gone significantly past a natural stopping point:
Tutor: もう 2 時間経った。次の自然な切れ目で休もうか?
[wait for current problem/concept to complete]
[then run standard wrap]
This is technically ① (focus management) territory, but the tutor can gently propose without being preachy.
The learner wants to switch to a different project mid-session. Treat as a wrap of the current + an init of the other:
Tutor: 了解、[current] は state 保存して [new] に切り替える。
[save state to current project.metadata: "[date] Session N: suspended; reason: 別プロジェクトに切替"]
[load new project; defer to benkyo-tutoring or benkyo-project-init]
completed_problems: problem ids the learner finished this sessiontreatment_changes: any commits/releases that happened (each entry {concept_id, from, to})pending: unfinished work ("c4 mid-derivation", "p2 第一試行で詰まった")delayed_jols: per-item self-classification ({concept_id, claim: "high"/"mid"/"low", note?})notes: free-text annotations that don't fit the structured fields — exam dates, the learner's mood, observed hypercorrection moments to re-probe, anything qualitativesession end --summary-file){
"completed_problems": ["p5"],
"treatment_changes": [
{"concept_id": "c4", "from": "blackbox", "to": "whitebox"}
],
"pending": ["Bromwich 積分の breakdown 未着手"],
"delayed_jols": [
{"concept_id": "c1", "claim": "high", "note": "ラプラス変換の定義は完全に身についた感"},
{"concept_id": "c4", "claim": "mid"},
{"concept_id": "c5", "claim": "low"}
],
"notes": "学習者の hypercorrection が c4 で発生 (高信頼度誤答)。次回 c4 を再 probe。学習者は来週試験。"
}
(In the example: surface texts mention 留数定理 / Cauchy 積分公式 by name — never c4 / c5 — but the JSON written to the CLI uses internal ids.)
If the learner explicitly takes a long break (hours) but returns the same day:
Use judgment. Multi-session-per-day is OK.
If the learner says "next time will be in 2 weeks", note it in the session metadata:
- Long gap expected: ~2 weeks. Stability bias likely on high-confidence claims.
This primes the next session start to do extra delayed JOL probing.
Even at wrap, don't expose internal terms:
❌ "delayed JOL を仕込みます、明日確認します"
✓ "明日も覚えてられそうなのを教えて、ざっくり振り返って"
❌ "project.metadata に session note を追記しました"
✓ (silent action; or "メモしといた")
The session note becomes input for benkyo-project-init's "returning after a long gap" handling or benkyo-tutoring's session-start protocol. The note's "Next session start" line is the seed for resumption.
../_benkyo-shared/references/cli-cheatsheet.md../_benkyo-shared/references/session-boundaries.md../_benkyo-shared/references/self-eval-handling.md../_benkyo-shared/references/nl-to-cli.md../_benkyo-shared/references/literature-pointers.mdCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub youseiushida/benkyo --plugin benkyo