guidelines() to decide when to call it, and your execute() signature to know how.
~/innate-os/workspace/custom_skills/ and it’s live as look_around. Type hints and the docstring are what the agent sees, so write them carefully. guidelines() is a prompt: tune it when the robot calls your skill at the wrong time.
Declare what you need
Annotate a class attribute and the runtime provides it. A plain annotation is required: the run fails before starting if it’s unavailable, so you never check forNone. Add | None to make it optional.
Return a result
To return more than a message, use
SkillOutput:
Cancellation
A Stop can come at any time, and the framework handles it. Follow one rule: useself.sleep(), never time.sleep(). Every blocking framework call raises on Stop, the base brakes, and the arm halts. You don’t catch anything.
Put cleanup in
try/finally. Using time.time() to measure durations is fine.
Other helpers
Call other skills
Declare another skill like any dependency, then call it like a method. The call blocks until it finishes, shows up as its own step in the app, and returns aSkillOutput. Trained policies work the same way.
SkillFailed. Catch that, not bare Exception, or Stop won’t work.
Ask a model
Declarellm: Llm and ask it about a camera frame. You get the robot’s model, with its keys already set up.
Call external services
Skills can call any API. Read secrets from the environment, set timeouts, and turn errors intoself.fail():
guidelines() so the agent plans for it.

