Signet Runtime Adapter Contract Signet introduces a runtime adapter contract to decouple its cognitive maintenance layer from external harnesses like OpenClaw and Claude Code, defining canonical interfaces for providers, tools, and channels. The daemon-owned contract ensures harnesses implement a standard spec, with the runtime acting as a thin orchestration layer over the daemon API. Signet Runtime Adapter Contract Context Signet currently runs as a cognitive maintenance layer on top of external runtimes — OpenClaw, Claude Code, OpenCode. These are first-class harness integrations and remain so. The problem is that Signet’s capability growth is gated on what each harness exposes: if a harness deprecates a plugin interface, changes its hook model, or simply doesn’t support a new lifecycle event, Signet loses the surface. The deeper issue is definitional. Every harness integration has to answer the question “what does a Signet harness need to implement?” — right now there is no canonical answer. Each connector is a bespoke translation layer. The solution is a daemon-owned adapter contract that defines what it means to run a harness on Signet. When the daemon adds a new lifecycle capability, each harness adapter has a clear spec to implement against. The daemon API is the source of truth for the integration contract. Key constraints: - All actions in the runtime are Daemon API calls first. The runtime is a thin orchestration layer over the daemon HTTP API, not a parallel implementation of daemon functionality. - Harnesses are thin clients. They translate platform-specific events into Daemon API calls using the same interfaces the reference runtime uses. - SDKs for TypeScript, Rust, and Python continue to be first-class. The runtime expands what the SDKs expose, not replaces them. What the Runtime Is The Signet runtime is a session execution loop that: - Assembles context memory injection, system prompt, identity via daemon - Sends a turn to a configured LLM provider - Dispatches tool calls through a registered tool registry - Manages the session lifecycle start, prompt, end, compaction - Records behavioral signals back to the daemon FTS hits, continuity Every one of those steps is a daemon API call or a thin wrapper around one. The runtime doesn’t store state — the daemon does. The runtime’s only owned concern is the execution loop: taking a user message, assembling what the agent needs to respond, calling the model, handling tools, and returning output. Everything else is delegated. Core Interfaces These interfaces define the integration contract. Implementing them is what it means to be a Signet harness. Provider interface Provider { id: string complete messages: Message , opts?: CompletionOptions : Promise