[{"data":1,"prerenderedAt":103},["ShallowReactive",2],{"search-en":3,"content-en-developer\u002Fdecisions\u002F049-plugin-platform-contract":4,"surround-en-\u002Fdeveloper\u002Fdecisions\u002F049-plugin-platform-contract":94},[],{"id":5,"title":6,"body":7,"description":86,"extension":87,"meta":88,"navigation":89,"path":90,"seo":91,"stem":92,"__hash__":93},"content_en\u002F3.developer\u002Fdecisions\u002F12.049-plugin-platform-contract.md","ADR-049: Plugin Platform Contract",{"type":8,"value":9,"toc":79},"minimark",[10,27,32,36,40,48,51,63,66,70],[11,12,13,21],"ul",{},[14,15,16,20],"li",{},[17,18,19],"strong",{},"Status:"," Accepted",[14,22,23,26],{},[17,24,25],{},"Date:"," 2026-07-15",[28,29,31],"h2",{"id":30},"context","Context",[33,34,35],"p",{},"Owlat already had typed registries for transports, agent steps, automations, UI surfaces, and other extension points. Opening them independently would duplicate identity, permission, ordering, and failure rules while making it possible for an extension to bypass a core safety boundary.",[28,37,39],{"id":38},"decision","Decision",[33,41,42,43,47],{},"Every plugin exports one data-only manifest through ",[44,45,46],"code",{},"@owlat\u002Fplugin-kit",". The host captures and validates one deeply frozen snapshot before codegen or composition. Manifest declarations request capabilities; an operator grant and the plugin feature flag are rechecked at each hosted operation.",[33,49,50],{},"The platform has three trust tiers:",[52,53,54,57,60],"ol",{},[14,55,56],{},"Bundled plugins composed at build time.",[14,58,59],{},"Connected apps reached through scoped APIs and signed hooks.",[14,61,62],{},"Sandboxed worker jobs that run host-registered commands without ambient credentials.",[33,64,65],{},"Plugins may append work or caution. They cannot replace core checks, manufacture approval, or force a send. Static codegen is the only composition point, and stale or invalid generated output fails the build.",[28,67,69],{"id":68},"consequences","Consequences",[33,71,72,73,78],{},"Plugin identity, attribution, permissions, flags, budgets, and ordering share one contract. Bundled code is still trusted deployment code rather than a sandbox; operators must use connected apps or workers for code they do not trust. See ",[74,75,77],"a",{"href":76},"\u002Fdeveloper\u002Fplugin-platform","Plugin Platform"," for the operational model.",{"title":80,"searchDepth":81,"depth":81,"links":82},"",2,[83,84,85],{"id":30,"depth":81,"text":31},{"id":38,"depth":81,"text":39},{"id":68,"depth":81,"text":69},"One immutable manifest and capability model govern Owlat's three extension trust tiers.","md",{},true,"\u002Fdeveloper\u002Fdecisions\u002F049-plugin-platform-contract",{"title":6,"description":86},"3.developer\u002Fdecisions\u002F12.049-plugin-platform-contract","eaLR4BeGSf05dawJj8bzlPxVa3Gtfk2WL51OLJX_UIQ",[95,99],{"title":96,"path":97,"stem":98,"children":-1},"ADR-010: Listing Engine","\u002Fdeveloper\u002Fdecisions\u002F010-listing-engine","3.developer\u002Fdecisions\u002F11.010-listing-engine",{"title":100,"path":101,"stem":102,"children":-1},"ADR-050: Host-Owned Draft Strategy Registry","\u002Fdeveloper\u002Fdecisions\u002F050-draft-strategy-registry","3.developer\u002Fdecisions\u002F13.050-draft-strategy-registry",1786915101463]