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

    Interface SulukPolicy

    An OPERATOR governance policy (C028) — a member of the x-suluk-policy map, keyed by operator/fleet name. Every field is STATIC, locally decidable, and NARROW-ONLY: applying a policy can only REMOVE capability an agent self-declared (effective = INTERSECT(policy, agent)), never grant. No field may reference request/DOM/header/body values (D1; the #20 tripwire is declined here too). appliesTo binds BY AGENT NAME (#/x-suluk-agents/<key>).

    interface SulukPolicy {
        appliesTo?: string[];
        scopeAllowlist?: string[];
        agents?: { deny?: string[]; allow?: string[] };
        tools?: { deny?: string[]; allow?: string[] };
        retrievalTools?: { deny?: string[]; allow?: string[] };
        capTier?: "resident" | "cold-tail";
        modelAllowlist?: string[];
        maxDepthCap?: number;
        forbidNesting?: boolean;
        costCeiling?: {
            amount: number;
            amountUnit: "micro-usd" | "cents" | "usd";
            basis?: string;
            enforcedBy: "adapter" | "runtime";
        };
        [ext: `x-${string}`]: unknown;
    }

    Indexable

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

    Properties

    appliesTo?: string[]

    by-name refs into x-suluk-agents keys this policy governs (NEVER a request predicate). Empty/absent ⇒ all agents.

    scopeAllowlist?: string[]

    operator's max scope ceiling — effective agent scope = INTERSECT(agent.scope, scopeAllowlist).

    agents?: { deny?: string[]; allow?: string[] }

    deny/allow sub-agent keys (an allow-list, when present, is the only permitted set).

    tools?: { deny?: string[]; allow?: string[] }

    deny/allow route (tool) keys.

    retrievalTools?: { deny?: string[]; allow?: string[] }

    deny/allow the retrieval/untrusted tier's tools specifically (its non-deterministic blast radius).

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

    pin the MAX tier — a cold-tail skill under capTier: resident is downgraded (and flagged).

    modelAllowlist?: string[]

    the only model ids permitted — effective skill model[] = INTERSECT(skill.model, modelAllowlist).

    maxDepthCap?: number

    an upper bound on recursion depth — effective maxDepth = min(agent.maxDepth, maxDepthCap).

    forbidNesting?: boolean

    forbid sub-agents entirely (⇒ effective maxDepth 0).

    costCeiling?: {
        amount: number;
        amountUnit: "micro-usd" | "cents" | "usd";
        basis?: string;
        enforcedBy: "adapter" | "runtime";
    }

    The operator's DECLARED cost cap — the third of cap/estimate/actual (estimate = the agent's own x-suluk-cost, actual = the C026 reconciled charge). The SCHEMA DECLARES this number; it does NOT enforce it — enforcedBy names who does (a runtime admission-gate / adapter). Required so a reader can never mistake declaration for enforcement (C026 PROVISIONAL honesty).