@suluk/core - v0.1.13
    Preparing search index...

    Interface SulukSkillRef

    A SKILL within an agent — an instruction bundle (the LLM tier). PRESENCE of model is what makes this a skill (the system-text path) rather than a deterministic route. Skill text is a PROVENANCE POINTER (source URL + content-hash + version), not inlined mutable prose: the served instructions are the single source of truth and a projected SKILL.md is GENERATED from it, the content-hash binding making drift tool-detectable and fail-loud.

    interface SulukSkillRef {
        model?: string[];
        modelProfile?:
            | "tool-reliable"
            | "cheap-fast"
            | "balanced"
            | "max-reasoning"
            | "long-context"
            | "vision";
        modelPrefer?: {
            intelligence?: 0
            | 1
            | 2
            | 3;
            cost?: 0 | 1 | 2 | 3;
            speed?: 0 | 1 | 2 | 3;
            context?: 0 | 1 | 2 | 3;
        };
        modelRequire?: {
            needsStructured?: boolean;
            inputModalities?: string[];
            minContext?: number;
            zdr?: boolean;
        };
        modelResolve?: "pinned"
        | "router"
        | "latest";
        tier?: "resident" | "cold-tail";
        whenToUse?: string;
        trust?: "author-declared" | "retrieved";
        scope?: string[];
        provenance?: { source: string; contentHash: string; version?: string };
        [ext: `x-${string}`]: unknown;
    }

    Indexable

    • [ext: `x-${string}`]: unknown
    Index

    Properties

    model?: string[]

    EXPLICIT model preference list (OpenRouter ids), cheap→capable — the opt-out path. OR declare NEEDS via modelProfile/modelPrefer/modelRequire and let @suluk/models pick the best CURRENT model (a skill declares what it needs, not a frozen id). Structural-only — never read by the matcher (C027 seam to @suluk/models).

    modelProfile?:
        | "tool-reliable"
        | "cheap-fast"
        | "balanced"
        | "max-reasoning"
        | "long-context"
        | "vision"

    a named selection profile resolved against the model catalog (@suluk/models).

    modelPrefer?: {
        intelligence?: 0 | 1 | 2 | 3;
        cost?: 0 | 1 | 2 | 3;
        speed?: 0 | 1 | 2 | 3;
        context?: 0 | 1 | 2 | 3;
    }

    escape-hatch preference weights (0-3) over the 4 author-facing axes.

    modelRequire?: {
        needsStructured?: boolean;
        inputModalities?: string[];
        minContext?: number;
        zdr?: boolean;
    }

    explicit hard requirements the author adds (beyond what's derived from the agent + the context analyzer). zdr (C030, verified 2026-06-13): require zero-data-retention serving — enforced at runtime via the router's provider:{zdr:true} (which combines with openrouter/auto, confirmed by a live probe), since we have no per-model ZDR fact to pin against; so a zdr skill resolves to the ROUTER, and conflicts with a region/license operator policy that forces a pin.

    modelResolve?: "pinned" | "router" | "latest"

    How the model is RESOLVED from the survivor set (C030): pinned (default) — a concrete reproducible id; router — delegate the per-request pick to OpenRouter's auto-router fenced by our enumerated survivor allowlist (opt-in, UNGOVERNED skills only — a governed skill declaring router fails loud at contract time); latest — a ~-latest alias (defers the version to request time; NOT reproducible). The switch is governance-gated: an operator-policied agent force-pins for reproducible, auditable behavior. Author surface only; never read by the matcher.

    tier?: "resident" | "cold-tail"

    static serving partition: resident (default tools/list) vs cold-tail (revealed via discover_tools).

    whenToUse?: string

    routing-oriented precondition prose (runtime-advisory; never a request-value selector — D1).

    trust?: "author-declared" | "retrieved"

    author-declared (trusted) vs retrieved (untrusted) content (a retrieved skill may not escalate scope/provenance).

    scope?: string[]
    provenance?: { source: string; contentHash: string; version?: string }

    single source of truth + staleness binding (SKILL.md is generated from source, hashed to detect drift).