Skills
Skills let Kheish load reusable instruction bundles from disk and apply them explicitly within the runtime.Discovery
The daemon builds a skill registry at startup from:- explicit skill roots passed to the daemon
- repository-local
skills/roots - compatibility roots such as
.claude/skillsand legacy.agents/skills - user-level skill roots under the home directory
Skill shape
A skill is centered aroundSKILL.md plus optional runtime metadata such as allowed tools, blocked tools, execution context, and model overrides. See Skill format for the on-disk contract and supported metadata fields.
Execution contexts
Kheish currently supports two main execution patterns:- inline skills, which activate instructions directly in the session and persist as session-scoped active skills
- fork skills, which run through a child agent path when the skill requires an isolated execution context
Persona defaults versus session-local skills
Skills can now enter a session from two different sources:- persona-provided
default_skills, which are resolved and frozen into the session persona binding - session-local inline skill activations, which are stored as session state
- updating a persona changes the defaults for future bindings, not for already bound sessions
- deactivating or activating one session-local inline skill does not rewrite the underlying persona record
- sidechains inherit the parent’s current persona snapshot and capability boundary, then build their own runtime state from that snapshot
Capability filtering
The effective capability scope can hide skills even when the daemon registry discovered them successfully. That filtering applies to:- the list of available skills advertised to the model
- persona-provided default inline skills
- session-local active inline skills
- the session-visible skill list returned by
GET /v1/sessions/{session_id}/skills - the
visible_skillsfield returned byGET /v1/sessions/{session_id}/memory-context - runtime tools such as
list_skillsanduse_skill
Control surfaces
Skills are exposed through:- runtime prompt sections that advertise available and active skills
- agent tools such as
list_skillsanduse_skill - control-plane endpoints for skill listing and inspection
- session-scoped inspection endpoints such as
GET /v1/sessions/{session_id}/skills
GET /v1/skills shows the daemon registry. GET /v1/sessions/{session_id}/skills shows only the subset that survives session capability filtering and promoted-skill source-scope checks.
Promoted procedural skills
Kheish can also create daemon-owned skills from reviewedprocedure learnings.
That path is controlled through the learning surfaces, not through the base skill inspection endpoints. A promoted procedural skill:
- originates from one durable learning record
- is written into the daemon-owned skill root under the state directory
- is reloaded into the daemon-owned promoted-skill store
- becomes visible through the normal skill inspection and runtime activation surfaces only after its rollout status reaches
active
- only workspace-scoped
procedurelearnings can be promoted - promoted procedure skills must execute through
fork - promoted procedure skills must resolve to the
verificationchild-agent profile - promoted procedure skills are not used as persistent inline skill state
- non-active rollout states (
draft,verified,canary) stay durable but hidden from the visible catalog
Forked skill results
Whenuse_skill activates a forked skill and waits for the child agent to settle, the returned spawn payload can include:
- the child
agent_id - the child
session_id - the initial
launch_run_id - the terminal child
snapshot final_output, when the child emitted a canonical run output
final_output is the safer completion signal for a waited forked skill because a successful child run may finish through a canonical output path without leaving a useful final assistant-text message.
For promoted procedural skills, the daemon also allocates one dedicated child worktree under the current workspace root before spawning the child agent. That keeps the promoted procedure off the parent session root by default.
See Semantic learning and procedural skills and Learnings API.
