import type { VendoComposition } from "./compose-context.js"; /** The tools the OPERATING PROMPT teaches by name — product knowledge, declared * here so the general harness carries none of it (tool-search.ts exempts only * its own capability-miss hand). * * `vendo_text_me` is here for the OTHER reason, and it is the first honoring of * a contract nothing implemented: types.ts's `loadout` doc says "Vendo's own * `vendo_*` tools are always active" and no code ever made it so. Maple's away * surface is 25 reads and 6 writes, so the 24-tool safest-first slice evicts * EVERY write — twice in two days (2026-08-18/19) an automation armed with a * live Text me grant answered "I don't have a way to send a text message". A * granted power the belt hides is a lie the person who granted it cannot see. * Restoring the whole contract belongs to the loadout redesign; the one tool * that broke production does not wait for it. * * `vendo_automate` joins it for the first reason AND the second. The text * channel's hidden grounding names the automation path on every single inbound * text — "to text the user later, set up an automation for it" (channel-turn.ts * TEXT_STYLE) — and arming is a write, so the same safest-first cut that buried * Text me made the one thing this channel advertises cost a `find_tools` round * on the first turn of every fresh thread. The exemption rides ON TOP of the * cap rather than raising it, so the offered set stays inside the 30-50 band * where selection accuracy is best (tool-search.ts). * * A name with nothing behind it costs nothing: `computeInitialLoadout` filters * the turn's OWN listings through this set (tool-search.ts), so on a deployment * that never opted into texts it simply never matches — no `channels` gate. */ export declare const PROMPT_TAUGHT_TOOLS: readonly string[]; /** Architecture §3 — the thinker, its runtime, and the two doors onto it. */ export declare const composeHarness: (composition: VendoComposition) => Pick;