A 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 skillentry 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 onevery 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:
correction phrasing, 3-short-answers → switch-topic rule
conversation-history.md unlessasking deeper questions; "wrong vs right" question style examples
teaching-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 continuity
AGENT-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.json> The 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 follows README.md inside.
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 tothe original student. The recipient accumulates their own as they use
the tutor.
BOOTSTRAP.archive.md is a one-shot wizard file from the originaldeveloper's setup. Not needed for new installs.
workspace/ to ~/.openclaw/workspace/english-oral-teacher/. Rename USER.md.template → USER.md and IDENTITY.md.template →
IDENTITY.md, fill in the [PLACEHOLDERS].
plugin/tutor-timing/ to ~/.openclaw/extensions/.topic-library/topic-library.md to ~/.openclaw/agents/english-oral-teacher/english-oral-tutor/references/.
~/.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" }
}
]
}
}
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.
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 whenthey don't appear in the prompt — this skill relies on workspace files
and conversation-history.md for continuity instead.
scaffold; once the wizard finished, it was archived. Don't re-add it.
questions, topic dedup.
D:\English-training\openclaw-voice-userscript.jstutor-timing (in-repo, ~85 lines)共 2 个版本