Pillars ======= Declare Once ------------ Fabric agent definitions should be portable across supported runtimes. Framework specificity belongs in adapters and optional extras, not in the basic fabric agent schema. Data And Context Move Together ------------------------------ ``AgenticData`` should carry the current extended data value, active provider context, active runtime context, logging context, and tool/capability registry. It should extend ``VendorData``; it should not duplicate ``ExtendedData`` or provider behavior. Lazy by Default --------------- Optional frameworks, vendor SDKs, and tool packages must be imported only when their runner or tool is used. Capabilities Over Boilerplate ----------------------------- Agent runners and tools should declare capabilities with decorators collected by ``__init_subclass__``. Dynamic facade methods are allowed only when they route to declared capabilities. Clear Boundaries ---------------- This package does not own data primitives or vendor APIs. It composes ``extended-data`` and ``vendor-fabric`` when those capabilities are installed. Provider connectors and dispatch stay in ``vendor-fabric``; framework-specific and agent-facing wrappers built from those capabilities stay in this package. Testable Adapters ----------------- Every runner and tool adapter should have unit coverage for resolution, availability, and failure behavior. End-to-end tests can stay optional and marked by runtime. Frameworks Are Optional, Contracts Are Not ------------------------------------------ CrewAI, LangGraph, Strands, and local CLI runners can be optional installs. Their availability, missing dependency messages, fixture behavior, and runtime selection order must still be documented and tested.