一键导入
tutor
Drill your recorded pains (friction phrasings, grammar fixes, irregular verbs, learned vocab) with spaced repetition. Usage: /tutor [size]
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Drill your recorded pains (friction phrasings, grammar fixes, irregular verbs, learned vocab) with spaced repetition. Usage: /tutor [size]
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Dev: check a target (spec / plan / working diff / code) for architectural drift from the rulebook docs/ARCHITECTURE.md — report qualitative deviations citing rule ids, and triage new ones into docs/Debt.md. Usage: /drift <target>
Push enriched vocab to Anki Desktop as flashcards and pull review progress back. Usage: /anki-sync
Add words/terms you're learning, enriched (translation, alternative translations, examples, synonyms, definition) into your native/learning languages. Comma-separated for several at once. Usage: /loot <word>[, <word2>, ...]
Review your buffered writing into per-category frequency docs (grammar / rephrasings / idioms / verbs). Usage: /debrief
Use whenever you read, query, or mutate shadowling's sqlite database (shadowling.db) — any SELECT/INSERT/UPDATE/DELETE, ad-hoc SQL, dropping/clearing/resetting rows, inspecting data, or checking a migration's result. All DB access goes through a skill entrypoint, a repository method (`models/*`), or `sql.py` — never raw sqlite3. Schema/data-layer changes are NOT made here — they go through an appended migration in appdb.py; this skill only documents that rule and verifies the outcome.
Explain an expression in the language you're learning that you can't read literally — get a verdict (memorize vs learnable rule) + how to read it, saved to the decode dataset. Usage: /aha <phrase> [+ your hunch]
| name | tutor |
| description | Drill your recorded pains (friction phrasings, grammar fixes, irregular verbs, learned vocab) with spaced repetition. Usage: /tutor [size] |
| disable-model-invocation | true |
| allowed-tools | Bash(python3 */tutor.py*) Bash(python3 */config.py*) |
You run an interactive tutoring session IN THIS conversation (you deal a card,
the user answers, you judge, repeat). This skill's entrypoint is
${CLAUDE_SKILL_DIR}/tutor.py (in this skill dir); the shared config.py is at
${CLAUDE_PLUGIN_ROOT}/config.py. Invoke each directly so the command starts
with python3.
Steps:
python3 "${CLAUDE_PLUGIN_ROOT}/config.py" show (it prints <config><row><first_language>…</first_language><learning_language>…</learning_language><explanation_language>…</explanation_language></row></config>). Write all feedback in
explanation_language.python3 "${CLAUDE_SKILL_DIR}/tutor.py" deck (add --size <N> if
the user passed a number). It prints <deck><row>…one card per <row>…</row></deck>.
If it prints <deck></deck> (empty): say there is nothing due
and nothing new — come back after a /debrief — and STOP.[i/N]), WAIT
for the user's reply, judge it, then record with ONE call. Put the user's reply
between the <answer> tags VERBATIM (do not re-quote, trim, or fix it; never
escape anything — the quoted <<'SL_IN' passes every char literally). The body
and the closing SL_IN MUST start at column 0:python3 "${CLAUDE_SKILL_DIR}/tutor.py" record <item_kind> <item_key> <exercise> <verdict> <<'SL_IN'
<answer>
their reply, verbatim
</answer>
SL_IN
The call prints <result><row><box>N</box></row></result> (the card's new Leitner box).
Exercises and verdicts:
friction/production — ask: how would you say (learner_wrote, mention
the zone)? PASS = conveys the meaning of
native_phrase in a natural register (word-for-word identity NOT
required); PARTIAL = understandable but unnatural; FAIL = bailed, empty,
or wrong meaning. Always show native_phrase after judging.grammar/fix — ask to correct original. PASS = the error class from
rule is fixed (other phrasing variance is fine); PARTIAL = fixed but a
new error introduced; FAIL = the error remains. Show fixed + rule.verbs/forms — if the card has a context excerpt, show it as the
setup, then ask for the past + past participle of item_key. PASS = both
exact; PARTIAL = one correct. Show the forms (and correction) from the card.vocab/reverse — ask: what is the learning-language word for translation?
PASS = the word; PARTIAL = minor misspelling. Show the word. (On FAIL
the script auto-resets the word into glossing — mention it relearns.)
Give ONE line of feedback per card, then move on. If the user asks to stop,
stop immediately (skip the remaining cards, no records for unseen cards).python3 "${CLAUDE_SKILL_DIR}/tutor.py" stats (it prints
<stats><row><due_today>…</due_today><due_tomorrow>…</due_tomorrow><tracked>…</tracked></row></stats>)
and report due_today / due_tomorrow. Nothing else.