Keep the core small
Core contracts are synchronous, I/O-free, and have no third-party dependencies. Process execution, async runtime concerns, and the session journal belong outside the core. The workspace forbids unsafe_code.
Provider adapters depend on the SDK; generic runtime and transport code depend on the core. Provider names and hardcoded selection orders do not belong in generic registry logic.
Preserve ownership
Native configuration, authentication, plugin loading, skills, MCP discovery, and instruction handling belong to providers. uuldana-cli owns only its records and the data exposed at the process boundary.
Trusted adapters are reviewed code, not isolated plugins. A launch plan is descriptive and cannot structurally prevent a provider executable from writing files.
Never silently escalate
Approval, filesystem access, and network access are distinct. Honest mapping can become stricter, but may not exceed the requested policy or session ceiling. Failover never raises the ceiling. Native approvals are explicitly non-transferable.
Unknown means unknown
Missing capability evidence does not mean support. Inferred events do not mean exact native events. Platform configuration does not mean an executed passing test. A capability that was not proven against the real provider is Unknown, not Supported.
Frozen interfaces and additive growth
Contract 0.2 is frozen. Non-exhaustive enums, builders, default unsupported methods, custom capabilities, and extension events support controlled growth. Adapters with incompatible contract versions are rejected.
What is not promised
No universal plugin portability, hidden-state transfer, or cross-provider native resume is promised. uuldana-cli does not become an agent: changes that add an agent loop, a generic model wrapper, or simulated provider responses are out of scope.