ACP sessions
An ACP session is a conversation an ACP client holds with blueclaw acting as the agent.
session/new and session/load read _meta["kim.intern/session"], which carries the requester (email, personID, name, callingName, handle) and the addressing (platform, conversationID, conversationType, replyTargetID, isThread, responseLanguage); a session without a requester or conversation is refused. Each session/prompt reads _meta["kim.intern/message"], passes the same engagement gate the connectors use, and launches a task. Progress goes out as agent_thought_chunk and tool calls, the reply as agent_message_chunk with attachments as resource links.
An approval on an ACP turn first pauses the run and records the held call, then asks through session/request_permission with the options approve_once, approve_task (only when the tool has an approval scope) and reject_once. The tool call ID is the held call's ID: held- and the first eight bytes of the SHA-256 of the canonical call. A free-text answer goes through the extension method _kim.intern/approvalReply, which the turn router reads. After session/load, every run of that requester and conversation still waiting on approval is asked again under the same ID.