/** * The system prompt, assembled per turn. * * It lives in the umbrella because the umbrella is what knows the brief, the * catalog and the knowledge index. It rides the turn (`Turn.system`), so every * harness — the default one, a host's own — thinks on the same brief. */ import { type Guard, type Harness, type RunContext } from "./core/index.js"; /** * Which discovery rail a turn's harness actually carries — ONE derivation, for * every path that assembles a brief. * * It was written four times and three of them were a hardcoded `false`. The away * automation run and the delegated run mount the composed `vendo()`, so they * carry `find_tools` like any chat turn — and were told they carried nothing. * Maple, 2026-08-19: an automation whose whole job was "check the balance and * text me" read the balance and then said it had no way to send a text, because * the belt had evicted `vendo_text_me` and the brief never mentioned the search * that would have found it again. A rail nobody names is a rail nobody uses. */ export declare const discoveryRail: (harness: Pick, connectorDiscovery: boolean | undefined) => "find-tools" | "connectors" | false; /** 03-agent §3: company directions are mandatory policy context and fail closed. */ export declare function assembleSystemPrompt(guard: Guard, ctx: RunContext, system?: { product?: string | (() => string | undefined); theme?: string; knowledge?: string | (() => string | undefined | Promise); instructions?: string; }, capabilityMiss?: boolean, discovery?: "find-tools" | "connectors" | false): Promise;