Skip to content

feat(handoff)!: delegate to rote guidance ids instead of rote skills - #23

Merged
roberts-pumpurs merged 5 commits into
mainfrom
feat/rote-guidance-ids
Oct 30, 2026
Merged

roberts-pumpurs merged 5 commits into
mainfrom
feat/rote-guidance-ids

Conversation

@roberts-pumpurs

@roberts-pumpurs roberts-pumpurs commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Rote is removing its 15 companion skills and the rote-onboard plugin, so Play's 13 delegated actions, which load a rote skill by name, would hit a skill that no longer exists. The rote side is the stack https://github.com/modiqo/rote/pull/3244, https://github.com/modiqo/rote/pull/3245, https://github.com/modiqo/rote/pull/3246, and https://github.com/modiqo/rote/pull/3248; https://github.com/modiqo/rote/pull/3245 retires the skills.

Before

references/controller/actions.yaml names a skill per delegated action (specialist: rote-flow-authoring). SKILL.md tells the agent to invoke instruction.specialist through the harness skill mechanism. handoff.py rejects any receipt whose executor.kind is not skill. Setup instructions send the user to the rote-onboard plugin and $rote-setup.

After

  • Each delegated action names a guidance id (guidance: play/authoring, registry/org, gate/route, adapters/config, …). The controller projects instruction.guidance, and the agent runs rote guidance <id> in its shell and returns the declared receipt.
  • Receipts carry executor: {kind: guidance, id, digest}. Verification requires the id to equal the packet owner and a sha256: digest from rote guidance <id> --json (data.result.digest). The authentication event declares guidance_digest for the receipt Play builds itself.
  • Route and audit owners map to guidance ids: adapters/delegated, shell/essential, browser/essential, workspace/essential, play/authoring, troubleshooting/essential, registry/essential.
  • SKILL.md keeps Play in charge of each delegated step: Rote documents end with ## Next gates and gate branches, and inside a Play step those are informational. The agent returns a declared event to Play and never follows a Rote gate past command_policy.
  • Setup instructions name the single rote skill (rote install skill --target <harness> --personal --force) and rote guidance setup/essential. When rote is not installed, they point at https://getrote.dev.
  • Play's prompt hook adds one line to every actionable prompt that is not a Play entry or a direct: bypass: rote: for API, MCP, browser, registry, or automation work, run \rote guidance root` and follow it.It does not depend on identity, network, or search, and it precedes anyPlay suggestion:` line. Play is the entry point; the rote skill is explicit-only.
  • SKILL.md lets that pointer and rote work run without activating Play, and adds the working rules: one rote command per shell call with @@next/@@mandatory read in full, re-read guidance after compaction, find rote via $ROTE_BIN or ~/.local/bin when it is off PATH, rote guidance root/index outside a Play step, and no destructive commands unless asked.
  • Preflight probes rote guidance root --json. Rote installs the latest Play, so an older Rote can end up running this Play; the probe fails there, reports guidance_capability, and puts rote update first in the setup commands.

Verification

  • Every guidance id Play names resolves on the rote stack tip, and rote guidance <id> --json returns a sha256: digest at data.result.digest for each.
  • play-preflight --harness codex --json reports guidance_capability: false and rote update with rote 0.93.0, and is ready with the stack-tip binary.
  • just test (733 tests) and just check pass.

Compatibility

  • Breaking: Play needs a Rote that serves rote guidance <id>. Receipts with executor.kind: skill are rejected.
  • Keep this PR in draft until the rote stack is released, then merge it the same day.

BREAKING CHANGE: Play needs a Rote that serves rote guidance <id> and delegates to guidance ids instead of rote skills; handoff receipts use executor.kind: guidance with an id and digest.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

@roberts-pumpurs
roberts-pumpurs marked this pull request as ready for review October 28, 2026 13:22

@hubertp hubertp left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Majority of feedback was already given on the modiqo/rote side. This part looks good.

Rote removes its companion skills and the rote-onboard plugin; every
instruction is served by `rote guidance <id>`. The 13 delegated actions
now name a guidance id, the controller projects `instruction.guidance`
at a `guidance` boundary, and handoff receipts carry
`executor: {kind: guidance, id, digest}`. Explore owners map to
adapters/delegated, shell/essential, browser/essential and
workspace/essential; authentication goes to adapters/config.

Setup instructions name the single `rote` skill and
`rote guidance setup/essential` instead of the rote-onboard skills.

BREAKING CHANGE: Play needs a Rote that serves `rote guidance <id>`;
receipts with executor kind `skill` are rejected.
Rote installs the latest Play, so an older Rote can run a Play that
delegates to guidance ids it does not serve. Preflight now probes
`rote guidance root --json`; a failure reports `guidance_capability`
and puts `rote update` first in the setup commands. DeepSeek setup
installs the rote skill with the `universal` target, because the
`agents-md` target refuses personal installs.
The prompt hook now adds one rote pointer line to actionable prompts, independent of published-Play discovery, and combines it with any Play suggestion. Explicit Play entries, slash commands, shell lines, and direct:/without play: bypasses get neither. SKILL.md allows rote work from the pointer without activating Play and adds rote execution, compaction, and safety rules.
@roberts-pumpurs
roberts-pumpurs merged commit 772145d into main Oct 30, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants