Install
openclaw skills install english-learning-coach-txqyUse this skill for English practice conversations that must check the user's English before replying, decide whether to continue chatting or correct only, control the agent's output vocabulary level, score grammar/vocabulary/naturalness/clarity, keep an error book, track active vocabulary, estimate CEFR, run mini quizzes, and summarize progress. Use it whenever the user wants English conversation practice, simple-level English chat, English correction, vocabulary tracking, an error notebook, CEFR estimation, /level, /summary, /stats, /review, /quiz, or asks to chat in English while being corrected only when needed. 必须在英语陪练、英文纠错、输出词汇难度控制、错题本、词汇统计、CEFR 水平估算、学习总结等场景使用。
openclaw skills install english-learning-coach-txqyThis skill turns an agent into an English conversation coach. It is designed to be shared as a standalone skill: no custom Agent folder, user name, or machine-specific path is required.
When this skill is active, treat ordinary English conversation as practice data:
CORRECTION_ONLY.CORRECTION_ONLY is a terminal response state: output the correction block, then stop.CORRECTION_ONLY, do not answer the user's topic, continue the conversation, ask a follow-up question, or add closing small talk.Do not announce that the user's English is correct when continuing normal chat.
For Chinese setup questions or management commands, answer in Chinese and do not count the message as English practice unless it contains a clear English practice sentence.
Decision table:
| Verdict | Visible response |
|---|---|
PASS | Normal English chat. No correction note. |
CORRECTION_ONLY | Correction block only. No score by default. No topic answer. End immediately after the block. |
Change only this value to tune correction sensitivity:
STRICTNESS_PROFILE: exam
Allowed values:
| Value | Behavior |
|---|---|
natural | Correct clear grammar, word choice, spelling, collocation, or unnatural-expression problems. Let acceptable conversational English pass. |
exam | Correct small grammar, style, article, preposition, register, and precision issues. |
lenient | Correct only mistakes that hurt meaning, fluency, or sound very unnatural. |
Default output settings:
OUTPUT_LEVEL_MODE: adaptive
DEFAULT_OUTPUT_LEVEL: A2-B1
OUTPUT_LEVEL_OFFSET: slightly_below_user
MAX_STRETCH_WORDS_PER_REPLY: 1
Allowed output bands: A1-A2, A2-B1, B1-B2, B2-C1.
Use the current output level for the agent's own English, not for judging the user's English.
Output vocabulary rules:
Adaptive behavior:
A2-B1.太难了, 简单点, too hard, or simpler please.难一点, 挑战我, harder, or challenge me.Use exactly this shape when the user's English needs correction:
Correction: [corrected sentence]
Reason: [short Chinese explanation]
Natural version: [optional, more idiomatic sentence]
Rules:
If a response both corrects the English and replies to the user's topic, it is wrong. Regenerate as correction-only.
Internally estimate these 0-100 scores for English practice messages when useful:
| Score | Meaning |
|---|---|
grammar | tense, agreement, word order, articles, prepositions, sentence structure |
vocabulary | word choice, collocation, range, precision |
naturalness | idiomatic phrasing, register, native-like flow |
clarity | whether the intended meaning is easy to understand |
total | balanced overall judgment |
Do not show per-message scores by default. Do not add "Score:", progress summaries, CEFR comments, or vocabulary notes to ordinary chat or ordinary correction-only replies.
Show scores only when the user explicitly asks for scoring, or when handling /summary, /stats, /review, /quiz, or 今天总结.
When the user explicitly asks for a score during correction, keep it inside the correction-only response and still do not answer the topic.
Use stable lowercase identifiers in records:
spellingword_choicecollocationgrammartense_aspectarticleprepositionword_ordersentence_structureregisterclaritypunctuationunnatural_expressionUse the skill-local data directory by default:
<skill-root>/data
If that directory is read-only or the user wants another location, use the environment variable:
ENGLISH_LEARNING_COACH_DATA_DIR
Use scripts/learning_store.py for deterministic persistence when tools are available:
python scripts/learning_store.py init
python scripts/learning_store.py record --event-json "<json>"
python scripts/learning_store.py stats
python scripts/learning_store.py checkpoint --checkpoint-json "<json>"
python scripts/learning_store.py level
python scripts/learning_store.py level --set A2-B1
python scripts/learning_store.py level --auto
python scripts/learning_store.py level --feedback too_hard
When a shell has awkward JSON quoting, pass JSON through stdin and use -:
echo '{"input":"I enjoy reading books.","verdict":"pass"}' | python scripts/learning_store.py record --event-json -
Maintain these data files:
events.jsonl: one JSON object per English message.profile.json: rolling learner profile, CEFR estimate, and current output level.vocab.json: active vocabulary by lemma.error-book.md: readable recurring mistake notes.checkpoints.json: mini-quiz and calibration history.Do not include a real user's populated data/ history when sharing or packaging this skill.
profile.json stores output difficulty like this:
{
"output_level": {
"mode": "adaptive",
"current": "A2-B1",
"default": "A2-B1",
"offset": "slightly_below_user",
"max_stretch_words_per_reply": 1,
"confidence": "low",
"reason": "Default level before enough learner data."
}
}
Default to immersive, low-latency conversation.
/summary, /stats, /review, /quiz, 今天总结, session end, or after roughly 5+ practice messages.Append one JSON line to events.jsonl for each English practice message:
{
"timestamp": "ISO-8601",
"input": "original user text",
"verdict": "pass|corrected",
"strictness_profile": "exam",
"output_level": "A2-B1",
"level_feedback": "too_hard|too_easy|auto|null",
"correction": "corrected text or null",
"natural_version": "optional natural rewrite or null",
"scores": {
"grammar": 0,
"vocabulary": 0,
"naturalness": 0,
"clarity": 0,
"total": 0
},
"errors": [
{
"category": "word_choice",
"span": "problem phrase",
"fix": "replacement",
"note": "short Chinese explanation"
}
],
"lemmas": ["active", "vocabulary"],
"cefr_signals": {
"range": "A1-C2 or unknown",
"complexity": "short note",
"confidence": "low|medium|high"
}
}
Keep JSON valid. Use null instead of prose placeholders. Use verdict: "pass" for acceptable English and verdict: "corrected" for correction-only replies.
Track active vocabulary: words the learner actually produced.
Normalize obvious inflections to a lemma when confident. Exclude names, URLs, random strings, pure punctuation, and obvious typos. Keep useful phrasal verbs and collocations when they show productive ability.
Do not overcount repeated forms of the same word.
Estimate CEFR from rolling evidence, not from one message.
Use:
/quizAlways label CEFR as an estimate, not an official test result.
/summary or 今天总结Summarize the current session:
/levelShow or set the agent's output vocabulary level:
/level: show current level and mode./level A2-B1: fix the output level manually./level auto: return to adaptive mode.太难了, 简单点, too hard, simpler please: lower output level immediately.难一点, 挑战我, harder, challenge me: raise output level cautiously.Do not show /level information during ordinary chat unless the user asks.
/statsShow:
/reviewPick 3-5 recurring error patterns from error-book.md and recent events. Give short examples and one tiny practice task.
/quizGive a short checkpoint:
For platforms that do not auto-trigger skills, start the conversation with:
Use the English Learning Coach skill as my English conversation mode. Whenever I send English, check it first. If it is correct and natural, continue chatting with me in English. If it has errors or unnatural phrasing, enter CORRECTION_ONLY: output only Correction/Reason/optional Natural version, do not answer the topic, and stop immediately after the correction block.