File size: 3,242 Bytes
12acba0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
---
language:
- en
license: apache-2.0
pipeline_tag: robotics
tags:
- OpenRAL
- rskill
- any
inference: false
---

# rskill-playbook-find_object

A `kind: playbook` rSkill: a symbolic S2 **decision procedure** the
Reasoner reads, not a neural policy. It carries no weights β€” the authored
[`PLAYBOOK.md`](./PLAYBOOK.md) *is* its runtime.

## What this skill does

Locates a named object the request didn't give a pose for. It recalls the object
from spatial memory; on a miss it runs a **bounded commonsense active search**
(rank likely rooms/containers β†’ navigate β†’ open β†’ look) and, if the search
budget is exhausted, escalates to a human. Concrete walkthrough: the water-bottle
example in [`PLAYBOOK.md`](./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 (`recall_object`, `resolve_place`, `locate_in_view`,
`execute_rskill`, `memory_search`). It is `role: s2` and is **never** dispatched
through `ExecuteSkill`. Every motion it triggers is an `execute_rskill` β†’ Action
chunk β†’ C++ safety kernel β€” 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 β€” a playbook is **hand-authored**, not trained: it has no weights and no
upstream model. Its provenance is the authoring decision record
(also 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). Gated by `capabilities_required`
(`has_vision: true` β€” a real `RobotCapabilities` flag): the loader filters it out
on robots without a camera. Navigation / container-opening 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 names an object whose location is not given.
- `playbook.done_predicate`: the target object is confirmed in view at a known pose.
- `playbook.max_steps`: 12.

## Quick start

```python
from openral_core.schemas import RSkillManifest

m = RSkillManifest.from_yaml("rskills/find-object/rskill.yaml")
assert m.kind == "playbook" and m.playbook is not None
print(m.playbook.trigger)
```

## Reproduction

Packaging-only: the manifest + SOP are validated by
`tests/unit/test_playbook_rskill_manifest.py`. There is no benchmark number to
reproduce; the playbook's behaviour is exercised by the reasoner integration
tests in later phases.

## 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`](./PLAYBOOK.md) β€” the decision procedure itself.