# Own the room's working objects Prerequisite: [Rift setup](nexus.md). The workstation is the room's local binding canvas. It holds objects, attributes, and methods you give it; it is not another Spellbook or an implicit resolver. The saved example binds the name `subject` in both the object and method stores. The `store=` argument distinguishes them. It selects a method as the active target, calls it, clears the target without deleting the binding, and releases the object. ## Be explicit about retention `weak_ref=True` requests weak storage. The lesson proves a non-weak-referenceable value is refused rather than silently stored strongly. A strong binding retains the object for the binding's lifetime; a weak binding does not give it that lifetime. Keep room storage and world access separate. Retrieve permitted world objects through the room's command/view surfaces, then place the objects you need on the canvas. [Expert rooms](../expert/agent-rooms.md) continue into operation and codegen. ## The workflow in code These are the core steps from the saved example. Use its complete linked script for all class definitions and setup. ```{literalinclude} ../downloads/03_advanced/12_the_workstation_canvas.py :language: python :pyobject: main :linenos: ``` ## Runnable examples - [The workstation canvas](../examples/advanced/12-the-workstation-canvas.md) — Advanced 12 - [Static vs capability authority](../examples/advanced/11-static-vs-capability-authority.md) — Advanced 11 [All advanced examples](../examples/advanced/index.md) · [Level contents](index.md) · [Full contents](../contents.md) [Canonical page source](https://github.com/Synaptic724/melder/blob/4b364a338debcb1c010d0f6e9dcbbabb62945ba0/docs/advanced/workstation.md)