The shape of it
skill(name, description, tools) bundles tool
values you’d otherwise re-list individually every
ask_with_tools call. There’s no dedicated
keyword for this — same reasoning as why there’s no model keyword: the
builtin’s return type (a Skill value) already carries the meaning
wherever it’s checked.
When to use this
Reach forskill(...) once you find yourself passing the same group of
tools into ask_with_tools across multiple calls, or you want to
group related tools under one description so a model reasons about them
as a capability (“web research”) rather than as several unrelated
functions. For a single one-off tool, or a handful of tools that don’t
share a theme, just pass them to ask_with_tools directly — a skill
adds a layer of indirection that only pays for itself once it’s reused.
The description has a real effect, not just documentation
Passing a skill inside
ask_with_tools’s tools array flattens it
into its component tools and prepends its description (alongside every
other skill’s) to the prompt as an “Available skills:” preamble — the
same “not cosmetic” pattern
ask_with_memory’s
context injection follows.tool values mix freely in the same call.
Validation
1
tools must be non-empty
skill(name, description, []) raises SenseRuntimeError at
skill(...) call time.2
Each tool must already satisfy ask_with_tools's own rules
Not async, has a description — checked eagerly at
skill(...) call
time, not deferred until the skill is actually used, for the earliest
possible error.3
No name collisions
A tool name repeated across two skills — or a skill and a bare tool —
raises
SenseRuntimeError in ask_with_tools rather than silently
letting one shadow the other..name, .description, and .tools are readable members on a Skill
value, same “everything inspectable” pattern as
Agent/Action/
Memory.
What this doesn’t do (yet)
Nested skills, a per-skill capability
Nested skills, a per-skill capability
A skill can only bundle
tool/McpTool values, not other skills.
Each contained tool is still gated individually — a skill has no
capability of its own.Continue
Tool-Calling
The mechanism a skill’s tools are ultimately exposed through.
Tool
What each item inside a skill’s
tools list actually is.MCP
A skill can bundle tools from an external MCP server too.

