Workhorse Duo#
Use this skill when:
- the user wants a practical execution worker + QA worker workflow
- the user says “让小马去做” / “让小牛验收”, or refers to Xiaoma / Xiaoniu by name
- a medium/large task should default to worker execution first, then QA
- the main session should behave like a boss / scheduler instead of personally doing the heavy work
- you need a locally validated path for two real agents that can actually be dispatched on this machine
What this skill is#
This skill defines a two-role orchestration workflow:
小马 / Xiaoma = execution worker
小牛 / Xiaoniu = QA / acceptance worker
主会话 = boss / scheduler / risk control / user-facing summary
Important:
- these are now treated as real local agents, not just roleplay names
- the local environment has been validated to run both
xiaoma and xiaoniu
- the current best dispatch path is CLI agent routing, not
sessions_send
- the default operating model is asynchronous dispatch: send work out, return to the user immediately, and report back when workers finish
Xiaoma and Xiaoniu are the default personality-forward names, but they also map cleanly to the generic roles execution worker and QA worker
- operators may keep the default names for personality/continuity, or rename the pair locally while preserving the same execution-vs-review structure
Core operating principle#
Default expectation:
- the main session receives the task
- the main session decides whether to dispatch to 小马
- the main session sends a clear task packet to 小马 via CLI agent routing
- the main session returns to Jerry immediately instead of blocking the conversation
- when 小马 finishes, the main session reviews/package its result for 小牛 if QA is needed
- the main session sends the compact QA packet to 小牛
- the main session again returns to Jerry immediately instead of hanging the chat
- when 小牛 finishes, the main session gives Jerry the final summary
This workflow optimizes for:
- real local usability
- non-blocking boss-mode orchestration
- lower chat interruption
- clear execution / QA separation
It does not optimize for:
sessions_send as the default local route
- synchronous waiting in the main session
- UI-visible dedicated worker chat cards as a requirement
Why Workhorse Duo is valuable#
Workhorse Duo is useful because it gives OpenClaw a practical execute -> review structure instead of forcing everything through one overloaded main session.
Key advantages:
- real dual-agent workflow instead of role-only prompting
- clear separation of execution and QA
- async boss-mode operation so the main chat stays usable while work runs
- first-use bootstrap and readiness checks for operators who need a reproducible setup path
- proactive completion reporting as part of the workflow expectation, not an afterthought
- personality-forward but still generic role design: Xiaoma/Xiaoniu remain memorable while mapping cleanly to execution-worker / QA-worker roles
- practical local validation: this is not just a conceptual workflow; the main route has been exercised end-to-end
Roles#
Role: execution worker.
角色简介:
小马是牛马搭档里的执行担当。
擅长快速理解需求、梳理任务重点,并把想法转化为可落地的执行结果。面对任务时,小马会优先推进进度,关注效率、产出和完成度,帮助用户尽快把事情做出来、做下去。
Generic role mapping:
- default name: Xiaoma
- generic role: execution worker
- renameable if an operator prefers a different local worker identity
Responsible for:
- implementing changes
- running commands/tests
- debugging and iterating
- reporting status in the required format
Not responsible for:
- final user-facing reporting
- final acceptance decision
- changing the task goal without approval
Required output format:
If blocked, 小马 should also state:
Role: QA / acceptance worker.
角色简介:
小牛是牛马搭档里的验收担当。
擅长从结果视角出发,对内容进行检查、校对和把关,关注逻辑是否清晰、信息是否完整、结果是否符合预期。小牛的作用不是拖慢进度,而是帮助用户减少遗漏、降低返工,让最终交付更稳妥。
Generic role mapping:
- default name: Xiaoniu
- generic role: QA / acceptance worker
- renameable if an operator prefers a different local worker identity
Responsible for:
- verifying 小马’s output against the task goal
- checking obvious regressions / missing items
- deciding pass/fail for acceptance
Not responsible for:
- redoing the whole task unless explicitly asked
- long narrative retelling
- overriding the main session’s scope
Required output format:
- if pass:
验收没问题
- if fail: list only concrete issues / missing items
主会话#
Role: scheduler / boss / fallback / reporter.
Responsible for:
- deciding whether to dispatch
- packaging a clear task for 小马
- forwarding output to 小牛 for QA when needed
- summarizing the final result to Jerry
- keeping the chat responsive while workers run
- handling fallback when worker/session/tooling fails
Default rule:
- medium/large tasks should be delegated to 小马 first
- after 小马 finishes, 小牛 should review by default unless the task clearly qualifies for skip-QA
- user-facing summary should focus on what 小马 finished and whether 小牛 passed it
- do not block the main session while workers are running unless debugging/smoke-test work truly requires it
Session and dispatch model#
Default local route: CLI agent dispatch#
Use:
openclaw agent --agent xiaoma ...
openclaw agent --agent xiaoniu ...
This is the locally validated route on this machine.
Why this is the default:
- both
xiaoma and xiaoniu were successfully created as real agents
- both agents returned real test responses via CLI agent routing
- a full execute -> review smoke test passed end-to-end
sessions_send was not the correct default dispatch entry for this local setup
Required local prerequisites#
For this workflow to function locally, the environment must have:
- real agents
xiaoma and xiaoniu created
tools.agentToAgent.enabled = true
tools.sessions.visibility = "all"
- an
agentToAgent.allow policy compatible with the chosen routing model
If these assumptions stop being true, revalidate before claiming the workflow is broken.
First-use bootstrap#
If the local machine does not already have xiaoma and xiaoniu, do not assume the workflow is ready.
Bootstrap it first:
- read
references/local-bootstrap.md
- if deterministic local setup is preferred, use the published helper in
references/published-bootstrap-helper.md (or copy its script block locally as bootstrap-workhorse-duo.ps1) to create missing agents and run a ready/not-ready ping check
- if the machine is missing the required cross-agent config, use the
-AutoFixConfig flow documented in references/published-bootstrap-helper.md to patch bootstrap-safe defaults, restart the gateway, and continue verification
- then run the ping smoke test and one real execute -> review smoke test
Do not call Workhorse Duo installed/ready until bootstrap + smoke test both pass.
Important:
- bootstrap-safe config is not automatically the same as the best long-term production policy
- before publishing or adopting long-term, read
references/risk-and-rollback.md
Default operating mode: asynchronous boss flow#
This is the critical rule for day-to-day use:
- dispatch worker tasks out from the main session
- do not sit in the main session waiting for worker completion by default
- tell Jerry the task has been handed off
- let Jerry continue chatting while workers run
- report back after worker completion
Use synchronous waiting only for:
- smoke tests
- runtime debugging
- explicit user requests to live-monitor the worker
Recommended task packets#
Main session -> 小马#
text
你是小马(执行位)。请按以下要求执行。
目标:<一句话目标>
范围:<允许改动的文件/模块/边界>
约束:<禁止项、兼容性、风格要求>
验收标准:<如何算完成>
补充要求:<是否跑测试 / 是否更新文档 / 是否给补丁>
输出格式固定为:
1. 已完成
2. 未完成
3. 风险/阻塞
4. 建议下一步
Main session -> 小牛#
text
你是小牛(验收位)。请只做验收,不重做主体工作。
任务目标:<一句话>
验收标准:<完成定义>
小马产出摘要:<简要总结>
重点检查:<文件、行为、测试、风险点>
输出规则:
- 通过:只回复“验收没问题”
- 不通过:只列具体问题或未完成项
Real smoke-test standard#
Do not claim this workflow works unless this minimal loop passes:
- the main session dispatches a real task to
xiaoma
xiaoma returns practical structured output
- the main session verifies required environment facts when needed
- the main session dispatches a compact acceptance packet to
xiaoniu
xiaoniu returns 验收没问题 or a concrete issue list
- the main session can summarize the result cleanly back to Jerry
On this machine, this real smoke test has already been validated.
Fallback rules#
If openclaw agent --agent xiaoma ... fails#
- retry once with a smaller/cleaner packet
- distinguish dispatch failure from task failure
- if urgent, degrade temporarily to main-session execution
If openclaw agent --agent xiaoniu ... fails#
- retry once
- if still unavailable, do manual acceptance in main session
- do not block the whole workflow forever on QA worker availability
Prefer asynchronous dispatch and later summary over blocking the conversation.
What not to overclaim#
Do not claim this workflow guarantees:
- visible dedicated worker chat cards in WebChat
- fully automatic
sessions_send-based orchestration
- synchronous live worker control as the default daily mode
This workflow is successful when the main session can reliably orchestrate:
xiaoma execution
xiaoniu review
- a usable execute -> review loop
- without unnecessarily occupying Jerry’s chat window
When NOT to use this workflow#
Do not force 小马 / 小牛 for:
- tiny one-shot questions
- tasks that are faster to answer directly than to dispatch
- sensitive external actions requiring direct main-session judgment first
For QA routing, use this rule of thumb:
- must go through 小牛: code changes, multi-file edits, risky refactors, acceptance-sensitive tasks, checklist/progress closure, or anything with meaningful regression risk
- may skip 小牛: tiny read-only analysis, harmless clarification, or trivial low-risk edits where dispatch overhead would exceed value
- main session decides when the task sits in the middle
Best fit / Not a fit#
Best fit#
Use Workhorse Duo when:
- you want the main session to stay in boss / scheduler mode
- tasks are medium or large enough that execute -> review is worth the extra structure
- you want a practical local workflow with a real execution worker and a real QA worker
- you care about keeping the main user chat responsive while work runs in the background
- you want a workflow that includes bootstrap, readiness checks, and recovery guidance
Not a fit#
Workhorse Duo is probably not the right choice when:
- the task is so small that dispatch overhead is larger than the work itself
- the environment does not allow local config mutation or gateway restarts during bootstrap
- the operator wants a zero-setup skill with no environment assumptions
- the operator does not want any multi-agent workflow at all and prefers to keep everything in one session
References#
Read these only when needed:
references/local-bootstrap.md — first-use local setup, required config, and smoke-test checklist when the machine does not already have xiaoma / xiaoniu
references/published-bootstrap-helper.md — published, inspectable bootstrap helper content (including the exact PowerShell block operators can copy locally)
references/risk-and-rollback.md — bootstrap risk, auto-fix behavior, rollback, and release-bar guidance
references/session-setup-and-operations.md — local dispatch flow, smoke test, and failure handling
references/persistent-session-examples.md — published V1 examples using real-agent CLI routing
references/review-routing-rules.md — QA-required vs skippable cases
references/persistent-session-rollout.md — historical / advanced note, not the default route
references/clawhub-readiness-checklist.md — publication/readiness audit