The domain imports nothing outward. Enforced by the import-linter fitness gate (the 5th gate). Ports are pure Protocols + DTOs; adapters are the only …
agent_skills (:1224), agent_skill_bindings (:1205); marketplace spec kaidera-skills/spec/SKILL_FORMAT.mdengenai.* key namespace, pending identifier migration): category, trust_tier (unconstrained text, DEFAULT standard; marketplace tiers official/verified_partner/community_vetted/unvetted are spec-level, not enforced in the local table), risk_level, capabilities_required, allowed_domains, content_hash, signed_by; 4-gate vetting (lint → security-scan → sandbox-test → human review with Cosign signing + SLSA provenance); marketplace.json registryrules (:2408)rule_slug, title, body, version, status ∈ {active, deprecated, draft}app/domain/*.py ProtocolsRunStatePort, LLMPort, CortexMemoryPort, OperationalStorePort, ModelCatalogPort, BillingPort, HarnessPortapp/adapters/*.pyapp/harness.py, app/harness_runner.py, app/terminal_stream/openkai — primary, first-party, installed on the appliance by the installer at a pinned release; omp — installed and supported until OpenKai is mature (pi = substrate/rollback); claude-code, codex — optional, customer-installed, supported when present locally. No harness runs inside a container; the former kaidera in-process lane is extracted to Kaidera-AI/kaidera-harness (tasklist H3)app/providers.py)UnifiedModel schema: provider, context_window, reasoning_levels[], per-Mtok pricing, source ∈ {live, supplement, merged}[] no reasoning · ["supported"] binary · full ladder; runtime validates before every request| Action | Surface |
|---|---|
| Install / bind skill | cortex-skill; bindings scoped to role/agent |
| Spawn agent | orchestrator → harness child process on the appliance host (the same on the macOS dev box); PTY-attached for the terminal surface |
| Configure agent | per-agent harness/model/reasoning in app-DB |
| Coerce locked harness | _chat_routing_for runtime backstop (the teeth) |