Install
openclaw skills install english-oral-tutorLong-running English conversation tutor for a Chinese middle school student (Grade 7, 13-14, B1). Triggers when (1) the student starts a new speaking-practice session, (2) the agent must lead an English conversation with grammar correction and vocabulary teaching, (3) a 30-minute phase transitions (warm-up / main / wrap-up / end) needs to be honored. Use this skill for any sustained English oral practice with the same student — not for one-off translation or grammar questions.
openclaw skills install english-oral-tutorA complete, portable design for a long-running English oral practice tutor agent in OpenClaw. Built around a single Grade 7 student in Beijing, but every rule and file is documented so you can adapt it for any B1 learner.
This document is the shareable design. The runtime prompt that
OpenClaw actually injects lives in the workspace .md files and is documented
in section 4 below — the agent never reads this SKILL.md at runtime.
| Goal | Why it matters |
|---|---|
| Every session is a 30-minute English lesson | Mimics real classroom pacing; prevents premature wrap-up |
| Frank talks 70% / tutor 30% | Practice over lecturing |
| State machine enforced by a plugin | The agent can't lose track of "which minute we're in" |
| Open-ended questions by default | Prevents yes/no dead-ends; 8 rotating templates |
| Topic dedup across sessions | Avoids repeating the same RC-planes question for the third time |
| File-based continuity | Conversation history persists; no "mental notes" |
OpenClaw does not inject this SKILL.md body into the system prompt.
What happens instead:
name, description) → injected as a one-line skill
entry in the skills block of the system prompt. ~250 chars.SOUL.md, AGENTS.md, USER.md, IDENTITY.md,
TOOLS.md, HEARTBEAT.md) → auto-injected on every prompt. ~12.8K chars.[System Context] block → injected by the tutor-timing plugin on
every prompt. ~6 lines.The agent sees ~13K chars of relevant context per turn. This SKILL.md is
loaded only when a human (you, a collaborator, a code reviewer) wants to
understand the design.
Implication for sharing: this document is the thing to read and adapt. The workspace files are the thing the agent actually obeys.
START → WARM_UP (0-5 min) → MAIN_ACTIVITY (5-25 min) → WRAP_UP (25-30 min) → END (30+ min)
| Phase | Time | Tutor goal | Frank's share |
|---|---|---|---|
| WARM_UP | 0–5 min | Greet, 1 easy day/week question | ~50% |
| MAIN_ACTIVITY | 5–25 min | Topic + 2-3 vocab words + grammar correction | ~70% |
| WRAP_UP | 25–30 min | Summarize, 1 strength + 1 to improve, assign homework | ~50% |
| END | 30+ min | Write conversation-history.md + teaching-transcript.md, then goodbye | n/a |
Why a plugin enforces this: the agent can't be trusted to track time on
its own across long sessions and idle gaps. The tutor-timing plugin reads
lastMessageTime, computes elapsed minutes, and stamps every prompt with the
current phase. See references/companion-files.md for the plugin code.
Six files in the workspace are auto-injected. They are the canonical runtime spec. This section documents what each file contains; if you fork this skill, copy these files into your workspace and adapt them.
SOUL.md — Authoritative sourcePurpose: Identity, core truths, state machine, response rules, topic rules, exchange logging. This is the file to edit when changing behavior.
Key sections:
conversation-history.md unless
asking deeper questions; "wrong vs right" question style examplesteaching-transcript.mdAGENTS.md — Operational index (51 lines, ~3K chars)Purpose: Quick-reference index for the agent. Always defers to SOUL.md.
Key sections:
USER.md — Student profileFrank, 13-14, Grade 7, Beijing, B1. Notes: "He may switch to Chinese when struggling — gently redirect. Short answers mean he's losing interest — switch topic."
IDENTITY.md — Agent cardAgent name, role, primary use case.
TOOLS.md — Local environmentWindows paths, voice script location, anything host-specific.
HEARTBEAT.md — Cron tasksPeriodic checks (none active for this agent by default).
BOOTSTRAP.md — was the wizard's one-shot init file, now archivedMEMORY.md / memory/*.md — not used; the agent relies on the
workspace files + conversation-history.md for continuityAGENT-SPEC.md — a design document for humans. Kept in
~/.openclaw/skills/english-oral-tutor/ (not the workspace) so it is
guaranteed not to leak into the runtime prompt. The plugin-skills/
directory is reserved for OpenClaw's npm-registry mirror and will wipe
non-symlink entries on Windows — do not use it for user skills.Detailed in references/companion-files.md:
openclaw.jsonThe canonical share bundle lives at
D:\English-training\skill\(a copy of this design + the workspace template + the plugin + topic library + optional voice script). Zip that directory and send it to another OpenClaw user. The recipient followsREADME.mdinside.
The instructions below are the canonical install steps; the bundle's
README.md reproduces them.
skill/ ← the whole share bundle
├── README.md ← recipient starts here
├── plugin-design/ ← design docs (you are here)
├── workspace/ ← agent workspace template
│ ├── SOUL.md
│ ├── AGENTS.md
│ ├── USER.md.template ← recipient fills in
│ ├── IDENTITY.md.template ← recipient fills in
│ ├── TOOLS.md
│ └── HEARTBEAT.md
├── plugin/tutor-timing/ ← session phase injector
├── topic-library/topic-library.md
└── voice/openclaw-voice-userscript.js ← optional
conversation-history.md and teaching-transcript.md are personal to
the original student. The recipient accumulates their own as they use
the tutor.BOOTSTRAP.archive.md is a one-shot wizard file from the original
developer's setup. Not needed for new installs.Copy workspace/ to ~/.openclaw/workspace/english-oral-teacher/.
Rename USER.md.template → USER.md and IDENTITY.md.template →
IDENTITY.md, fill in the [PLACEHOLDERS].
Copy plugin/tutor-timing/ to ~/.openclaw/extensions/.
Copy topic-library/topic-library.md to
~/.openclaw/agents/english-oral-teacher/english-oral-tutor/references/.
Edit ~/.openclaw/openclaw.json — add two entries:
{
"plugins": {
"entries": { "tutor-timing": { "enabled": true } }
},
"agents": {
"list": [
{
"id": "english-oral-teacher",
"workspace": "C:\\Users\\<you>\\.openclaw\\workspace\\english-oral-teacher",
"agentDir": "C:\\Users\\<you>\\.openclaw\\agents\\english-oral-teacher",
"tts": { "auto": "off" }
}
]
}
}
Restart: openclaw gateway restart. Verify by opening
http://127.0.0.1:18789/, selecting the agent, and confirming a
[System Context] block appears at the top of the prompt.
(Optional) Voice: install Tampermonkey, load
voice/openclaw-voice-userscript.js, visit the Control UI.
| To change... | Edit... |
|---|---|
| Student's name/age/level | USER.md |
| Agent's name/persona | IDENTITY.md |
| Iron rules (e.g. allow Chinese) | SOUL.md Core Truths section |
| Add new follow-up templates | SOUL.md Response Rules section |
| Change phase durations | tutor-timing/index.js (and references/companion-files.md) |
| Add new topics | agent/english-oral-tutor/references/topic-library.md |
| Voice / TTS voice | openclaw.json tts.providers.microsoft, or the userscript |
openclaw configure and openclaw doctor --fix will silently overwrite
workspace files (issue #27919). Always back up workspace/english-oral-teacher/
before running either.event.context.agentId is {}).
The tutor-timing plugin uses module-level state and unconditional
injection to work around this. If you fork the plugin, keep this design.[[audio_as_voice]] despite the
iron rule. Reinforce in SOUL.md Core Truth #6 if it happens.MEMORY.md and memory/*.md are not used. Don't be surprised when
they don't appear in the prompt — this skill relies on workspace files
and conversation-history.md for continuity instead.D:\English-training\openclaw-voice-userscript.jstutor-timing (in-repo, ~85 lines)