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.