Rewrite the skills SDK docs for the 0.7 interface - #25
Open
karmanyaahm wants to merge 3 commits into
Open
Conversation
The skills docs still described the 0.6.x API: `Interface(InterfaceType.X)` / `RobotState(RobotStateType.Y)` descriptors, a `name` property, `guidelines()`, `(message, SkillResult)` tuples, `_cancelled` flags, and a `cancel()` method on every skill. 0.7 replaced all of that. Core rewrite (software/skills/code-defined-skills.mdx): one rule — annotate what you consume. The class name is the skill name, the class docstring is the agent-facing guidelines, the execute() signature is the parameter schema. A plain annotation is guaranteed inside execute() (the run fails up front if the feed never arrives, with the real per-feed grace: 3s cameras, 6s battery, 2s the rest); `| None` makes it best effort. Return the message or call self.fail(); the tuple form is documented as deprecated-but-working. Cancellation is stated as the framework's job, including the never-`time.sleep` rule. robot-state.mdx: typed values replace the RobotStateType enums — odom.x rather than odom.pose.pose.position.x, an Image that IS the base64 string with .jpeg for bytes, Map.grid, Lidar.min_range(), the .raw escape hatch, and an odom-vs-pose frame table. body-control-interfaces.mdx: the 0.7 arm SDK. Blocking and raising (ArmFailed / ArmUnhealthy) instead of bools, move_to FK-verification with reboot-and-retry, move_by from the measured pose, Waypoint/follow(), block=False + wait() + moving, and the standing grip target — why nothing threads gripper= through a trajectory any more. composing-skills.mdx: the page documented `innate.skills`, which no longer exists, and cited a shipped skill that no longer ships. Rewritten around declared sub-skills and PhysicalSkill / physical_skills typed refs, the shared cancel latch, and self.skills.run() for dynamic ids. Drops the pre-release warning. skills.mdx: skill packages and <folder>/<name> namespacing, symlinked packs replacing extra_skill_dirs and the ~/skills lane, defining-the-class-is-the- registration, and broken skills staying visible with their load error. Also: navigation-interfaces (typed declaration, the deadman `duration` on send_cmd_vel, which calls are cancel points), physical-skill-examples (all examples rebuilt; retitled "Full-Body Examples" since "physical skill" now specifically means a trained policy), external-services (self.fail() over error tuples, credentials read per run rather than in __init__), policy-defined-skills and deploy-trained-skill (typed policy refs), and the shared interface tables. Agent pages get mechanical import and type-hint updates only — `from innate import Agent, SkillRef`, list[SkillRef] — since get_skills() now prefers the class over an id string. The old brain_client.agent_types path still works via its compat shim, so nothing there was broken. Verified against innate-os on 0.7.0-rc3: innate/__init__.py, skills/types.py (_feed_specs is the feed table), robot/manipulation.py, robot/mobility.py, robot/head.py, state/*.py, and the shipped skills. `mint broken-links` clean.
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
Show the mars-the-<N>th hostname pattern and the matching goodbot<N> password, with MARS the 21st/27th as examples, on the SSH page and in Development Setup. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Mirror the simulator tutorial's order — skill first, then the agent that uses it — and merge Hello World and Cheerful into one CheerfulGreeter agent. Replaces the Gmail walkthrough with a pointer to the RetrieveEmails worked example.
theo-michel
added a commit
that referenced
this pull request
Aug 8, 2026
…al robot naming The quickstart's first build step pointed at the Gmail/IMAP skill, which needs an app password before it does anything. It now opens with a victory_spin you can paste, save and watch, then hands that skill to the agent — so the first five minutes end in the robot moving. SSH examples showed a bare `goodbot` password and a placeholder hostname. Robots ship as MARS the <N>th, so the real pattern is mars-the-<N>th.local with goodbot<N>. Both carried over from #25. Co-authored-by: Karmanyaah Malhotra <karmanyaahm@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The skills docs still describe the 0.6.x API. 0.7 replaced essentially all of it, so a reader following these pages today writes a skill against an interface that no longer exists.
What was wrong
mobility = Interface(InterfaceType.MOBILITY)mobility: Mobilityimage = RobotState(RobotStateType.LAST_MAIN_CAMERA_IMAGE_B64)image: MainImagenameproperty and aguidelines()methodreturn "msg", SkillResult.SUCCESSreturn "msg"/self.fail(...)self._cancelledflags and acancel()on every skillodom.pose.pose.position.xodom.xmove_to_cartesian_pose()returning a boolmove_to()blocking and raisinginnate.skillsinnate.skillsno longer existsThe composing-skills page was the worst of it: it documented an import path that was removed and walked through
run_routine_demo.py, a shipped skill that no longer ships.The rewrite
Overview — one rule: annotate what you consume. The class name is the skill name, the class docstring is the agent-facing guidelines, the
execute()signature is the parameter schema. A plain annotation is guaranteed insideexecute()(the run fails up front if the feed never arrives, with the real per-feed grace — 3 s cameras, 6 s battery, 2 s the rest), and| Nonemakes it best effort. Cancellation is stated as the framework's job, carrying the never-time.sleeprule across from the OS repo.Robot state — typed values replace the enums, with an odom-vs-pose frame table, because picking the wrong one is the classic bug:
odomdrifts but never jumps,posecorrects and therefore can.Body control — the 0.7 arm SDK. Blocking and raising (
ArmFailed/ArmUnhealthy),move_toFK-verification with reboot-and-retry,move_byfrom the measured pose,Waypoint/follow(),block=False+wait(), and the standing grip target — why nothing threadsgripper=through a trajectory any more.Composing skills — rebuilt on declared sub-skills and
PhysicalSkill/physical_skillstyped refs, the shared cancel latch, andself.skills.run()for dynamic ids. Pre-release warning dropped; the feature shipped.Introduction — skill packages and
<folder>/<name>namespacing, symlinked packs replacingextra_skill_dirsand the~/skillslane, defining-the-class-is-the-registration, and broken skills staying visible with their load error instead of vanishing.Plus navigation interfaces, the full-body examples, external services, the policy-defined pages, and the shared interface tables.
Also in here
Two commits on top of the rewrite:
docs: lead the MARS quickstart with the victory_spin skill— the quickstart's "run custom code" step pointed at the Gmail/IMAP skill, which needs an app password before it does anything. It now leads with avictory_spinyou can paste, save and watch move, and links the email skill as the follow-on for reaching off the robot.Use real robot naming in SSH examples— the SSH and development-setup pages showed a baregoodbotpassword and a placeholder hostname. Robots ship asMARS the <N>th, so the real pattern ismars-the-<N>th.localwithgoodbot<N>.Scope
Agent pages get mechanical import and type-hint updates only —
from innate import Agent, SkillRef,list[SkillRef]— sinceget_skills()now prefers the class over an id string. The oldbrain_client.agent_typespath still works via its compat shim, so nothing there was broken; a full agents-docs pass is a separate job.Two renames, both reversible
physical-skill-examples.mdxis retitled "Full-Body Examples". The old title now collides withPhysicalSkill, which in 0.7 specifically means a trained policy. Path unchanged, so no redirect needed.composing-skills.mdxloses "(pre-release)".docs.jsonis untouched — same page set, same paths.Verification
Every API claim checked against innate-os at 0.7.0-rc3:
innate/__init__.py,skills/types.py(_feed_specsis the feed table),robot/manipulation.py,robot/mobility.py,robot/head.py,state/*.py, and the shipped skills inworkspace/innate_skills/.mint broken-linkspasses clean.Before merging
0.7.0 is still at rc3. Merging publishes docs for an API that hasn't tagged yet — worth holding until the release.
Two carried-over tables I did not audit against source:
HeadTiltAnglesTableandNavigationUseCasesTable. Both are 0.6-era behavioral claims, low risk, but they're the remaining unverified content.