rskill-playbook-clarify_ambiguity
A kind: playbook rSkill: a symbolic S2 decision procedure the Reasoner
reads, not a neural policy. It has no weights; the authored
PLAYBOOK.md is its runtime.
What this skill does
Resolves an underspecified or ambiguous goal before acting. When the request
admits more than one interpretation β two candidate bowls, a missing destination,
an unsafe-to-guess choice β it disambiguates from spatial memory, then from the
scene, and only then asks the operator a concise question; it never guesses on
an irreversible action (placing, pouring, opening). Concrete walkthrough: the
two-bowls example in PLAYBOOK.md.
How it works
This playbook is content, not code. When installed, the reasoner injects
PLAYBOOK.md into its system prompt and follows the SOP, composing tools it
already has (query_scene, memory_search, recall_object, emit_prompt). It
is role: s2 and is never dispatched through ExecuteRskill. It actuates
nothing: its job is to gate the downstream execute_rskill β Action chunk β C++
safety kernel with a single unambiguous goal β the playbook holds no actuation
authority (CLAUDE.md Β§1.1).
Observation β action contract
None. A playbook emits no Action chunks and requires no actuators
(actuators_required: [], chunk_size: 1). Its "output" is the sequence of
tool calls the reasoner makes while following the SOP, bounded by
playbook.max_steps.
How it was authored / Upstream provenance
N/A: hand-authored, not trained, so no weights and no upstream model.
Provenance is the authoring decision record (linked via paper_url). To change
behaviour, edit PLAYBOOK.md and bump version.
Supported robots
Embodiment-agnostic β declares the explicit wildcard embodiment_tags: ["any"]
(never an empty list) and an empty capabilities_required: {}: resolving an
ambiguous reference is operator interaction plus memory/scene queries, so it
works on any robot. The read-only scene/memory queries are gated at runtime by
the composed tools, not by this playbook's flags.
Sensors required
None directly. The tools it composes declare their own sensor needs.
Manifest summary
kind: playbook,role: s2,actions: [plan],chunk_size: 1.playbook.trigger: the goal is underspecified or ambiguous.playbook.done_predicate: the goal has a single unambiguous interpretation, confirmed from memory/scene or by the operator.playbook.max_steps: 5.
Quick start
from openral_core.schemas import RSkillManifest
m = RSkillManifest.from_yaml("rskills/clarify-ambiguity/rskill.yaml")
assert m.kind == "playbook" and m.playbook is not None
print(m.playbook.trigger)
Reproduction
Packaging-only: tests/unit/test_playbook_rskill_manifest.py validates the
manifest + SOP. No benchmark number to reproduce;
tests/unit/test_reasoner_playbooks.py covers the reasoner's ## PLAYBOOKS
system-prompt injection.
Evaluation
N/A β no eval/*.json; a playbook produces no benchmarkable policy output.
License
- Code / content: Apache-2.0.
- Weights: none.
See also
PLAYBOOK.mdβ the decision procedure itself.