Decisions
Why a harness adapter meets Link as it does, where the interface leaves a choice.
Switching harnesses
The two harnesses' contracts say which state a switch carries over ASP and which capabilities it leaves behind. Native file formats belong to each adapter, so the switch asks the contract rather than reading them.
Why does a switch say what stays behind, rather than carry it?
An export does not imply that another harness can import it. The contract declares both directions of ASP state separately, so a switch carries conversations where the source exports them and the destination imports them. It names the unsupported parts before changing anything; the source harness's own state stays available for a switch back.
Why does a switch ask before it leaves something?
A switch you didn't expect to lose something is the one surprise worth
asking about, so lnk agent use asks before it switches, and --yes
agrees ahead for a script.
Why is what stays behind computed from the two contracts?
Each contract declares state.export and state.import for its
conversations, native_memory, identity and notes for memory, and
features for skills and persona. Contract::left_behind computes the
answer from both contracts, tested without a harness running. An outside
adapter gets the same behavior by declaring the same fields; absent
state capabilities promise no conversation transfer.
Why does a switch carry conversations whole?
ASP represents a session as its ACP updates, so an export need not
replace a conversation with a summary. Each adapter's import determines
which updates it retains: the text projection keeps user and assistant
messages and omits other content. A sessions capability declares the
supported direction; it does not certify native-state fidelity.
Why is portable context independent of connection transport?
A native harness can keep its gateways while reading and contributing the same durable records. The typed protocol uses the existing authenticated bridge, store protocol, agent identity, leases and file CAS. The local file driver stays rooted in protected collections, so access needs neither a chat endpoint nor an unrestricted folder mount. Automatic agent startup grants storage only to harnesses declaring a restricted collection layout; their local file collections remain there.
Portable views
Portable views give common meaning to exposed event fields, sourced memory documents and finite cursors. Original JSON remains the archive. Native bindings and resume/context policy stay in adapter state, with no new session, memory or handoff service. Transcript roles and correlation establish no authority. Portable context documents the client.