Install
openclaw skills install @daniel-refahi-ikara/discord-recipient-safetyDiscord DM or relay recipient binding: authenticate the requester, validate the recipient, and require agent-sent requester attribution before every recipient-specific send.
openclaw skills install @daniel-refahi-ikara/discord-recipient-safetyUse before every recipient-specific Discord DM, relay, handover, report, assessment, or confidential-content send. Use it after the forwarding workflow has assembled content and before it calls the Discord message tool.
Each agent is a separate trust domain. The agent owns its credentials and sends under its own identity. Approved engineers may instruct that agent to relay, but the recipient must be told which approved engineer requested the relay.
Obtain one explicit requester instruction for one recipient. The request object includes the host-derived requester Discord identity, instruction event ID, exact requested recipient text, intended target, and content classification. Load this agent's approved roster and relay-pause state. Missing, malformed, or unavailable control input blocks the send.
node scripts/recipient_safety.mjs pre-send --roster <approved-roster.json> --pause <relay-pause.json> --request <request.json>.PASS.binding.attributionPrefix immediately before relay content. The prefix identifies the approved requesting engineer; the agent remains the Discord sender.binding.exactMessageTarget unchanged as the Discord message target.The helper blocks missing/non-exact instructions; unapproved/inactive requesters; zero/multiple recipient matches; inactive recipients; malformed/mismatched targets; and active or unknown pause state.
Every forwarded body begins with a deterministic, non-secret attribution such as Requested by <canonical requester name>:. Do not claim the requester is the sender. Do not disclose a requester outside the approved roster, and do not send when attribution cannot be built from the passed binding.
After a successful tool response, the wrapper records only non-content evidence: exactMessageTarget, requesterDiscordUserId, attributionPrefix, platform message ID, and delivery result. Run node scripts/recipient_safety.mjs receipt --binding <binding.json> --delivery <delivery.json>.
Only a PASS receipt permits a delivery claim. The helper verifies that the supplied target, requester attribution, and prefix exactly match the passed binding. It does not claim independent inspection of Discord's message body. Retain only requested recipient, canonical recipient, target ID, platform message ID, and delivery result.
After a confirmed misdelivery, set this agent's durable relay-pause state to active. Block later relays from this agent until a new explicit requester instruction is supplied and the pause is cleared through the incident procedure. Do not delete, resend, or contact any person automatically.
references/approved-roster.schema.json and is scoped to one agent/machine.before_tool_call hook that rejects recipient-specific message sends without a fresh passed binding. Verify the hook with non-production fixtures before enabling it.Run node scripts/test_recipient_safety.mjs before release. It covers successful attributed routing and receipt; target mismatch; receipt target or attribution mismatch; ambiguous recipient; inactive recipient; unapproved requester; missing receipt; and active pause.
A recipient-specific Discord relay is complete only when requester authentication, recipient binding, required attribution, and post-send receipt all pass. A missing or blocked receipt means delivery is unconfirmed.