Skip to main content

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 for skill(...) 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.
Skills and bare 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)

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.