Install
openclaw skills install @dukesky/openclaw-user-onboardingBootstraps new OpenClaw users with guided setup and configurable feature introductions. Auto-triggers on first session if ONBOARDING_PROGRESS.md is missing. Introduces one new OpenClaw capability per day, every few days, or weekly — user's choice. Supports pause, resume, and frequency change via /openclaw-user-onboarding.
openclaw skills install @dukesky/openclaw-user-onboardingThis skill turns a blank OpenClaw install into a useful, personalized assistant. It runs silently in the background — one setup conversation, then one short introduction at your chosen pace — until you've explored the full platform.
At the start of every interactive (non-cron, non-background) session:
ONBOARDING_PROGRESS.md exists in the workspace.| State | Action |
|---|---|
| File missing | Start Phase 1 — Discovery immediately as your first reply |
status: active | Ensure the intro cron job exists (create it if missing) — then proceed normally |
status: paused | Do nothing — wait for explicit /openclaw-user-onboarding invocation |
status: complete | Do nothing — all features introduced |
Do not run auto-trigger logic during cron runs, sub-agent sessions, or
isolated background turns. Check: if payload.kind is agentTurn from cron,
skip this skill's auto-trigger entirely.
When ONBOARDING_PROGRESS.md is missing, greet the user warmly and ask these
questions one at a time, waiting for each answer before the next:
Q1 — Name
"Hi! I'm getting myself set up to be as helpful as possible. What should I call you?"
Q2 — Primary messaging channel
"Which app do you use most for messaging? (e.g. iMessage, WhatsApp, Telegram, Slack, Discord — or just here in chat)"
Q3 — Main goal
"What's the main thing you're hoping I can help with? For example: staying on top of tasks and emails, automating repetitive work, coding assistance, or just having a smart assistant available everywhere?"
Q4 — Timezone
"What timezone are you in? I want to schedule check-ins at sensible times."
Q5 — Introduction frequency
"How often would you like me to introduce a new OpenClaw feature?
- Daily — fast track, one feature per day (10 days total)
- Every 3 days — steady pace, done in about a month
- Weekly — relaxed, one feature per week (default)
- Or tell me any other interval you prefer."
After all five answers, proceed to Phase 2 — Setup. Do not ask for more detail than needed; the user can always tell you more later.
Perform these steps silently (no need to narrate each one). Announce when done.
Convert the user's frequency answer into a cron schedule:
| User says | Cron expression | Plain description |
|---|---|---|
| "daily" / "every day" / "1 day" | 0 10 * * * | Every day at 10am |
| "every 2 days" | 0 10 */2 * * | Every 2 days at 10am |
| "every 3 days" | 0 10 */3 * * | Every 3 days at 10am |
| "every N days" | 0 10 */N * * | Every N days at 10am |
| "weekly" / "every week" / "once a week" | 0 10 * * 0 | Every Sunday at 10am |
| "every N weeks" | 0 10 * * 0/N | Every N weeks on Sunday |
| "twice a week" | 0 10 * * 1,4 | Monday and Thursday at 10am |
| Custom expression provided | Use as-is | As described by user |
If the user gives an ambiguous or unsupported answer, default to 0 10 * * 0
(weekly) and tell them.
Store both the cron expression and a human-readable description in
ONBOARDING_PROGRESS.md.
Create or update USER.md in the workspace:
# User Profile
Name: <name from Q1>
Primary channel: <channel from Q2>
Main goal: <goal from Q3>
Timezone: <timezone from Q4>
Onboarding started: <today's date>
Create a starter SOUL.md tuned to the user's goal:
# Persona
You are a proactive, helpful personal assistant.
Tone: friendly but concise — no filler phrases like "Certainly!" or
"Great question!". Get to the point.
Adapt to the user's stated goal:
- Tasks/email focus: prioritise actionable summaries and follow-up reminders
- Automation focus: suggest cron jobs and skills for repetitive patterns
- Coding focus: be precise, prefer code examples over prose
- General assistant: balanced, warm, practical
If SOUL.md already exists, do not overwrite it.
Create HEARTBEAT.md (overwrite only if it's empty or missing):
# Heartbeat checklist
- Scan for anything time-sensitive (messages, reminders, cron alerts).
- If an onboarding feature intro is due soon, surface it gently.
- If nothing needs attention, reply HEARTBEAT_OK.
Add a cron job using the cron tool with the expression from step 3a:
{
"action": "add",
"job": {
"name": "OpenClaw Feature Discovery",
"schedule": {
"kind": "cron",
"expr": "<cron expression from 3a>",
"tz": "<timezone from Q4>"
},
"sessionTarget": "session:openclaw-onboarding",
"payload": {
"kind": "agentTurn",
"message": "Read ONBOARDING_PROGRESS.md from the workspace. If status is 'active', find the next unchecked feature in the curriculum, introduce it in 2–3 plain sentences with one concrete example the user can try right now, then ask if they would like to set it up. Mark the feature as introduced with today's date. If status is 'paused' or 'complete', reply NO_REPLY.",
"lightContext": false
},
"delivery": {
"mode": "announce",
"channel": "<primary channel from Q2>",
"to": "<user's contact on that channel if known>"
}
}
}
Store the returned jobId in ONBOARDING_PROGRESS.md.
Create ONBOARDING_PROGRESS.md in the workspace:
# OpenClaw Onboarding Progress
status: active
started: <today's date>
intro_cron_job_id: <jobId from step 3e>
intro_frequency: <human-readable description, e.g. "daily", "every 3 days", "weekly">
intro_cron_expr: <cron expression, e.g. "0 10 * * *">
primary_channel: <channel>
delivery_target: <user contact>
## Feature Curriculum
- [ ] 1. Heartbeat & HEARTBEAT.md — always-on check-ins without bothering you
- [ ] 2. Cron reminders (main session) — "remind me in 20 minutes"
- [ ] 3. Cron isolated reports — scheduled summaries delivered to your chat
- [ ] 4. Skills — extending the agent with new capabilities
- [ ] 5. Multi-channel routing — same agent, every platform you use
- [ ] 6. Browser automation — agent controls a browser on your behalf
- [ ] 7. Sub-agents — spawn parallel workers for long tasks
- [ ] 8. Multi-agent setup — multiple personas on one gateway
- [ ] 9. Webhooks + Gmail trigger — external events wake the agent
- [ ] 10. MCP servers — connect any external tool to the agent
After setup is done, tell the user what was configured, using their actual frequency:
"You're all set, ! I've saved your profile, set up a regular heartbeat checklist, and scheduled a short feature introduction for you <intro_frequency> at 10am — 10 features total, one at a time. Nothing overwhelming. You can pause anytime by saying 'pause onboarding', change the pace with 'change onboarding frequency', and pick back up with '/openclaw-user-onboarding'. What would you like to do first?"
This phase runs automatically via the cron job created in Phase 2 at whatever frequency the user chose. The cron message instructs the agent to:
ONBOARDING_PROGRESS.md[ ] item in the curriculum- [x] N. Feature Name — introduced <date>Use these descriptions. Adapt tone to the user's goal from USER.md.
1. Heartbeat & HEARTBEAT.md
"The heartbeat is your agent's idle cycle — every 30 minutes, it quietly checks a small file called HEARTBEAT.md for things to keep an eye on. I already set one up for you! Try adding a line like '- If any tasks are overdue, remind me' and I'll surface it next time." Example: edit
HEARTBEAT.mdand add a line — it takes effect immediately.
2. Cron reminders (main session)
"You can ask me to remind you of anything, and I'll schedule it automatically. Just say 'remind me in 20 minutes to call the dentist' and I'll create a one-shot cron job that injects a nudge into our conversation at the right time." Example: "Remind me in 1 hour to review the proposal."
3. Cron isolated reports
"Cron jobs can also run fully on their own — I spin up a fresh session, do some research or summarising, and deliver the result to your chat. Great for daily briefings that arrive before you wake up." Example: "Every morning at 7am, summarise my overnight GitHub notifications and send it here."
4. Skills
"Skills are small instruction sets that teach me how to use specific tools — like controlling a browser, running code, or calling an API. You can see what's loaded with 'openclaw skills list', and install new ones from ClawHub at clawhub.ai." Example: run
openclaw skills listto see what I can already do.
5. Multi-channel routing
"I can listen and reply on multiple platforms simultaneously — WhatsApp, Telegram, Slack, iMessage, and more. Configure each channel once and just message me wherever you are." Example: set up a second channel so I respond both here and on Telegram.
6. Browser automation
"I have access to a dedicated browser I can control — clicking, filling forms, taking screenshots, extracting data from pages. It's isolated from your personal browser, so it's safe to hand me credentials for specific tasks." Example: "Log into my GitHub, check for new security alerts, and summarise them."
7. Sub-agents
"For long or parallel tasks, I can spawn background workers that run independently and report back. Your main conversation stays responsive while the work happens in parallel." Example: "Research three competing products at the same time and compare them."
8. Multi-agent setup
"You can run multiple fully isolated personas on the same gateway — different names, personalities, and channel bindings. Useful for a work vs. personal split, or sharing a gateway with someone else." Example: add a second agent that handles only your work Slack.
9. Webhooks + Gmail trigger
"External events can wake me directly. Wire a Gmail inbox to the gateway and every new email triggers an agent turn, or use a webhook URL to wake me from any external service." Example: new email arrives → I triage it and surface anything urgent.
10. MCP servers
"MCP (Model Context Protocol) lets me consume tools from any external server — databases, APIs, custom business logic. Manage servers with 'openclaw mcp set' and I discover their tools automatically at session start." Example: connect a local Postgres MCP server so I can query your database directly.
When the user says "stop onboarding", "pause onboarding", "skip the feature introductions", or similar:
ONBOARDING_PROGRESS.md: status: active → status: paused{ "action": "update", "jobId": "<intro_cron_job_id>", "patch": { "enabled": false } }
"Got it — I've paused the feature introductions. Resume anytime with '/openclaw-user-onboarding' or 'resume onboarding'."
When the user invokes /openclaw-user-onboarding or says "resume onboarding":
Read ONBOARDING_PROGRESS.md:
status: paused → re-enable cron, set status to active, confirmstatus: active → show progress and next featurestatus: complete → offer a second pass or deeper dive on any topicRe-enable the cron job:
{ "action": "update", "jobId": "<intro_cron_job_id>", "patch": { "enabled": true } }
Confirm, including the current frequency:
"Welcome back! Resuming from feature N: . Intros are set to <intro_frequency>. Anything you'd like to explore now instead of waiting?"
When the user says anything like "change onboarding frequency", "make it daily", "slow down the introductions", "switch to every 3 days", or similar:
{
"action": "update",
"jobId": "<intro_cron_job_id>",
"patch": {
"schedule": {
"kind": "cron",
"expr": "<new cron expression>",
"tz": "<timezone from ONBOARDING_PROGRESS.md>"
}
}
}
ONBOARDING_PROGRESS.md:
intro_frequency: <new human-readable description>intro_cron_expr: <new cron expression>"Done — I've switched your feature introductions to . The next one will arrive on ."
After the last feature (10. MCP servers) is introduced, update the file:
status: complete
completed: <date>
Disable the cron job and send a final message:
"That's the full tour! You've explored all 10 core OpenClaw features. I'll keep the heartbeat running as usual. If you want to revisit any feature in depth, just ask — or call '/openclaw-user-onboarding' to start a deeper second pass."
Copy this directory into your OpenClaw workspace skills folder:
cp -r openclaw-onboarding ~/.openclaw/workspace/skills/
Start a new session — onboarding begins automatically on the first reply:
/new
# or
openclaw agent --message "Hello"
To share with others, publish to ClawHub:
clawhub sync --all