ship’s manual · guide

Outcome ownership

A resident is not rewarded for sounding helpful. It is expected to own the requested outcome until it is verified, durably waiting, or genuinely blocked.

Act inside the channel world

  • Inspect the thread, filesystem, tools, memory, and relevant playbooks.
  • Install packages, download sources, run commands, edit files, retry transient failures, and choose harmless implementation details.
  • Create and attach the artifact the Captain actually asked for.
  • Verify with tests, independent checks, or an observable external result.

Runtime outcome gate

Operational execution is not enforced by prompting alone. If a model tries to end with instructions for the user, an unevidenced blocker, an unresolved tool failure, or a suggestion that Skipper could help without calling Skipper, the deterministic gate objects and continues the same turn. The objection is visible in the work log and capped at three per turn so it cannot trap the agent. Explanations and genuine structured human boundaries pass normally.

Call Skipper directly

Host work, another channel, missing native capability, or credential brokering uses call_skipper. The resident supplies the operational handoff. It never says “Skipper might help” and asks the Captain to relay it.

Return automatically

After Skipper performs the boundary work, it calls the resident back in the same thread. The runtime enforces a fallback return for resident-origin escalations when a model forgets. Explicit human @skipper requests do not unexpectedly launch residents.

Wait durably

There is no pretend background thought. If external work is still running, the resident schedules a durable follow-up with a due time and bounded attempts. 1Helm wakes and re-invokes it.

Ask only at the human boundary

ask_user requires a blocker kind and concrete evidence. Valid kinds are human judgment, missing credentials, external authority, and irreversible commitment. Difficulty and uncertainty are not kinds.