Choosing a skill
The model reads each skill’sdescription and picks the one that matches the
user’s intent. The framework decides which skills are eligible: hidden,
disabled, and engine-managed skills are omitted from routing. A
precondition does not hide the skill — the engine parks it as pending
and runs the bound resolver first. See
Guarantees & Guardrails.
The skill stack
Mantle tracks active skills on a stack. The current skill sits on top; when it finishes, it comes off and the one underneath resumes.- Sub-skills. A skill can hand off to another for a sub-task:
card_replacecallsverify_identity, which runs and passes its result back up. The parent always resumes where it left off. See Sub-skills. - Interruptions. The user changes topic mid-task. The current skill stays on the stack while Mantle handles the new request. It may return to the paused skill afterward, but that is not guaranteed. The user drives.
default_continue_interrupted skill — see
Continue interrupted.
What the Inspector records
When you inspect a conversation, Mantle writes explicit lifecycle events for every skill (including built-in defaults) and for every authored ordered block:
Skill activated and completed carry the skill id only. Ordered-block entered
carries the skill id and the authored block id (for example
submit — not a compiled
skill__block id). Cancel, interrupt, resume, and ordered-block completed
also record the step where that happened. Cancelling a skill produces one
ordered_block_cancelled per open block and a single skill_cancelled for the
skill.
A skill that is only an ordered block (no surrounding prose) records both
skill_activated and ordered_block_entered on the same start. Hybrid prose
records skill_activated when the skill starts, then ordered_block_entered
when that conversation later enters a block — without a second
skill_activated. Parking a block still records skill_interrupted as well as
ordered_block_interrupted.
Inspector draws Block rows only from ordered_block_*, with labels such as
Travel Notice skill / submit block entered. Skill and block lifecycle is
recorded as skill_* and ordered_block_*.
Tool invocations persist as tool_executed (local Python or MCP, with the
server name when MCP). Memory writes persist as memory_set / memory_cleared,
which are grouped by Inspector memory panel.
The field-level contract is in the Execution Loop
reference.
Structured invocation vs. interruption
These two ways of leaving a skill behave differently, and the difference matters for what you can rely on:
Public memory is readable across skills either way, so what separates them is
control rather than data. The full parking rules are in
skill.md.
Next steps
Skills
What a skill is and what goes in it.
Sub-skills & Composition
Compose focused skills into larger flows.