Safe Facebook Messenger
Purpose
Use this skill to send or draft Facebook Messenger messages through a local, signed-in Chrome browser controlled via Chrome DevTools MCP.
This skill is for Messenger only.
Its purpose is to prevent the most common browser-driven messaging failures:
- - typing into the wrong thread
- sending from the wrong composer
- selecting the wrong person from search
- confusing group chats with 1:1 threads
- sending high-risk content without review
Required environment
Use this skill only when all of the following are true:
- - Chrome is signed in to the intended Messenger account
- Chrome DevTools MCP is connected to that live browser session
- the operator understands that this skill controls a signed-in browser directly
Recommended posture:
- - use an intentionally chosen browser profile/account
- prefer operator-supervised/manual invocation by default
- validate behavior before enabling any broader autonomy
Privacy and access model
This skill relies on browser-side inspection of Messenger UI state needed to operate safely, including:
- - active conversation header
- compose placeholder
- visible thread history snippets
- search results
- outbound message state
Because it operates through Facebook Messenger in a live browser session, conversation content necessarily passes through the browser and Facebook's own service as part of normal use. Any additional logging, storage, or forwarding performed by the surrounding runtime or operator should be disclosed separately.
Core operating principles
- 1. Verify the thread before acting.
- Verify the composer before typing.
- Re-verify after every meaningful UI change.
- Stop on ambiguity instead of guessing.
- Treat search as high-risk until handoff is confirmed.
- Treat group chats as higher risk than 1:1 threads.
- Screen message risk before sending.
- Verify the result after send.
Safety rules
Never trust a single signal
Do not rely on only one of these:
- - URL
- visible thread row
- search result name
- stale element ref
- composer presence alone
Use multiple signals together.
Never trust stale refs
After any meaningful UI change, re-snapshot and re-resolve the relevant target.
Never continue after human interference
If the human clicks, changes focus, or otherwise interacts with the page mid-run, discard the old plan and re-verify from scratch before continuing.
Never auto-commit on behalf of the user
Do not auto-send commitments involving:
- - money
- deadlines
- deliverables
- legal exposure
- availability promises
Never include irrelevant backstage chatter
Do not mention testing, browser mechanics, thread switching, or UI instability unless explicitly relevant to the conversation or requested by the user.
Social-risk screening
Before sending, classify the message.
Usually acceptable for direct send
- - low-stakes friendly conversation
- casual follow-ups in known threads
- acknowledgements
- simple supportive or social replies
- obvious continuation of an active exchange
Draft first or escalate instead of auto-send
- - money, pricing, refunds, debts, purchases
- contracts, legal issues, threats, liability
- deadlines, promises, deliverables, availability
- investor, employer, client-escalation, press, or lawyer threads
- severe conflict, grief, breakup-style, or highly sensitive interpersonal messages
- first outreach to an important new person
- anything likely to be regretted if phrased badly
If uncertain, draft first.
Tone and identity rules
Match the user’s style
Inspect recent thread history and match:
- - message length
- punctuation style
- emoji use
- warmth vs bluntness
- formality vs playfulness
Avoid generic assistant tone the user would never use.
Identity disclosure
Mention Identity/Name only when:
- - the user explicitly wants that disclosed, or
- it is genuinely relevant to the conversation
Thread targeting workflow
1. Collect target evidence
Before acting, collect as many of these as practical:
- - recipient name or group title
- thread URL/id
- active conversation header
- compose placeholder
- recognizable recent thread history
- prior-conversation evidence
- relationship/friendship evidence when relevant
- for group chats: participant or conversation-info evidence
2. Choose targeting mode
Existing verified thread
Use when the thread is already known and clearly active.
Search reacquisition
Use when:
- - the thread is not visible
- the thread list is reordered
- the current thread state feels contaminated
- multiple similar recent chats exist
- a previous draft/send misrouted in the current session
Thread-list caution
Thread-list clicks are weaker evidence than verified active-conversation state. Do not assume a visible row means the active composer belongs to that thread.
3. Verify the active conversation
Before clicking the composer, confirm:
- - the conversation header matches the intended target
- the compose placeholder matches the intended target
- visible thread history looks correct
- if search was used, the result is supported by prior-thread or relationship evidence
If the active conversation is not clearly correct, stop.
Composer workflow
1. Click composer, then re-verify
After clicking the composer:
- - take a fresh snapshot
- confirm the active conversation is still the intended one
- confirm the focused composer belongs to that same thread
If the conversation changed, stop before typing.
2. Type, then re-verify
After typing:
- - re-snapshot
- confirm the draft text is visible in the intended composer
- confirm the active conversation is still correct
If the draft appears in another thread, do not send.
3. Send, then verify result
After sending:
- - confirm the same thread is still active
- confirm the new outbound bubble appears there
- confirm visible send state such as
Sent, Seen, or obvious outbound placement
Do not report success until the actual result is visible in the intended thread.
Search-based reacquisition
Use this when direct thread state is not trustworthy.
Preferred implementation
When possible, prefer:
- - DOM/evaluate-based focus acquisition for Search Messenger
- DOM/evaluate-based result selection
This is generally more reliable than aging snapshot refs for Messenger search.
Search sequence
- 1. Take a fresh snapshot.
- Focus Search Messenger.
- Confirm Search Messenger is actually the focused field.
- Confirm the current thread composer is not focused.
- Type the exact target name into search.
- Inspect results carefully.
- Choose only a result supported by thread/history/relationship evidence.
- Select the result.
- If result selection fails, stop immediately and clear search state.
- Wait for the active conversation header to change.
- Confirm the conversation header now matches the intended target.
- Confirm the composer placeholder now matches the intended target.
- Confirm the search box is no longer the active field.
- Confirm the previous thread no longer owns the visible draft box.
- Dismiss or normalize any lingering search-results overlay.
- Only then proceed to draft or send.
Search failure rules
Do not proceed if:
- - Search Messenger never actually becomes focused
- search results are ambiguous
- result selection fails
- the conversation header never changes to the target
- the search box remains focused after selection
- the previous thread still owns the visible draft box
- the search overlay cannot be dismissed or normalized
Group chat targeting
Treat Messenger group chats as higher-risk targets.
Do not trust the group title alone. Also verify at least one of:
- - participant evidence
- recognizable group-thread history
- known thread URL/id
- conversation info confirming the intended group
For group chats:
- - prefer draft-first
- prefer explicit approval for sensitive content
- stop if participant context is unclear
Cleanup mode
Use cleanup mode after a mistaken draft or send.
Cleanup sequence
- 1. Open the accidental recipient thread directly.
- Verify the mistaken recipient and exact content.
- Unsend, delete, or clear draft only after exact content match.
- If the failure came from search contamination, clear the contaminated draft before retrying search.
- Verify removal state.
Stop conditions
Stop before typing or sending if any of these are true:
- - active conversation header changes unexpectedly
- focused composer no longer belongs to intended thread
- draft appears in another thread
- search results are ambiguous
- Search Messenger never actually gains focus
- search result selection fails
- search box remains focused after result selection
- conversation header never changes after search-result selection
- previous thread still owns the visible draft box after search selection
- lingering search overlay cannot be normalized
- group title matches but participant/context evidence does not
- multiple composer surfaces are visible and ownership is unclear
- only stale refs are available and no fresh snapshot has been taken
- human interaction changed focus and no re-verification has been performed
Examples
Example: verified known-thread send
- - open a known Messenger thread
- verify conversation header
- verify compose placeholder
- type message
- re-verify draft placement
- send
- verify outbound bubble in same thread
Example: search-based reacquisition
- - focus Search Messenger
- verify focus
- type target name
- select an existing-thread result supported by prior-thread evidence
- verify conversation header
- verify compose placeholder
- normalize lingering search UI
- draft without sending
Example: refusal on ambiguity
- - search returns multiple similar names or unclear group threads
- participant or prior-thread evidence does not resolve ambiguity
- stop before typing any draft content
- report the ambiguity instead of guessing
Minimal checklist
Before clicking composer:
- - target identified
- active conversation verified
- fresh snapshot checked
- if search used, relationship/group evidence confirmed
After clicking composer:
- - fresh snapshot taken
- same conversation still active
- composer still belongs to target
After typing:
- - fresh snapshot taken
- draft visible in intended composer
- same conversation still active
Before send:
- - social-risk screen passed
- tone matches thread
- no accidental overcommitment
- no unnecessary operational chatter
After send:
- - outbound message visible
- same thread still active
- status confirmed
安全版 Facebook Messenger
目的
使用此技能,通过由 Chrome DevTools MCP 控制的本地已登录 Chrome 浏览器发送或草拟 Facebook Messenger 消息。
此技能仅适用于 Messenger。
其目的是防止最常见的浏览器驱动消息发送故障:
- - 在错误的对话线程中输入
- 从错误的输入框发送
- 从搜索结果中选择错误的人
- 混淆群聊与一对一对话
- 未经审查发送高风险内容
所需环境
仅在以下所有条件均满足时使用此技能:
- - Chrome 已登录预期的 Messenger 账户
- Chrome DevTools MCP 已连接到该实时浏览器会话
- 操作者理解此技能直接控制一个已登录的浏览器
推荐姿态:
- - 使用特意选择的浏览器配置文件/账户
- 默认优先采用操作者监督/手动调用
- 在启用任何更广泛的自主操作前验证行为
隐私与访问模型
此技能依赖浏览器端对 Messenger UI 状态的检查以安全运行,包括:
- - 活跃对话标题
- 输入框占位符
- 可见的对话历史片段
- 搜索结果
- 外发消息状态
由于它通过实时浏览器会话中的 Facebook Messenger 运行,对话内容作为正常使用的一部分必然经过浏览器和 Facebook 自身的服务。任何由周围运行时或操作者执行的额外日志记录、存储或转发应另行披露。
核心操作原则
- 1. 在操作前验证对话线程。
- 在输入前验证输入框。
- 在每次有意义的 UI 变化后重新验证。
- 遇到歧义时停止,而非猜测。
- 在确认交接前,将搜索视为高风险。
- 将群聊视为比一对一对话更高风险。
- 在发送前筛查消息风险。
- 在发送后验证结果。
安全规则
永远不要相信单一信号
不要仅依赖以下任何一个:
- - URL
- 可见的对话行
- 搜索结果名称
- 过时的元素引用
- 仅凭输入框存在
应同时使用多个信号。
永远不要相信过时的引用
在任何有意义的 UI 变化后,重新快照并重新解析相关目标。
在人为干预后永远不要继续
如果人在运行过程中点击、切换焦点或以其他方式与页面交互,丢弃旧计划并在继续前从头重新验证。
永远不要代表用户自动承诺
不要自动发送涉及以下内容的承诺:
永远不要包含无关的后台杂音
不要提及测试、浏览器机制、线程切换或 UI 不稳定,除非与对话明确相关或用户要求。
社交风险筛查
在发送前,对消息进行分类。
通常可直接发送
- - 低风险友好对话
- 已知对话中的常规跟进
- 确认回复
- 简单的支持性或社交性回复
- 明显延续的活跃交流
先草拟或升级而非自动发送
- - 金钱、定价、退款、债务、购买
- 合同、法律问题、威胁、责任
- 截止日期、承诺、可交付成果、可用性
- 投资者、雇主、客户升级、媒体或律师对话
- 严重冲突、悲伤、分手式或高度敏感的人际消息
- 首次联系重要新人
- 任何如果措辞不当可能会后悔的内容
如果不确定,先草拟。
语气与身份规则
匹配用户的风格
检查最近的对话历史并匹配:
- - 消息长度
- 标点风格
- 表情符号使用
- 热情与直率
- 正式与随意
避免使用用户永远不会使用的通用助手语气。
身份披露
仅在以下情况提及身份/姓名:
对话线程定位工作流
1. 收集目标证据
在操作前,尽可能多地收集以下内容:
- - 收件人姓名或群组标题
- 对话 URL/ID
- 活跃对话标题
- 输入框占位符
- 可识别的近期对话历史
- 先前对话证据
- 相关时的关系/友谊证据
- 对于群聊:参与者或对话信息证据
2. 选择定位模式
现有已验证对话
当对话已知且明显活跃时使用。
搜索重新获取
在以下情况使用:
- - 对话不可见
- 对话列表重新排序
- 当前对话状态感觉被污染
- 存在多个相似的近期聊天
- 当前会话中之前的草稿/发送路由错误
对话列表注意事项
对话列表点击的证据弱于已验证的活跃对话状态。不要假设可见行意味着活跃输入框属于该对话。
3. 验证活跃对话
在点击输入框前,确认:
- - 对话标题与预期目标匹配
- 输入框占位符与预期目标匹配
- 可见的对话历史看起来正确
- 如果使用了搜索,结果有先前对话或关系证据支持
如果活跃对话不明确正确,停止。
输入框工作流
1. 点击输入框,然后重新验证
点击输入框后:
- - 拍摄新快照
- 确认活跃对话仍然是预期的那个
- 确认聚焦的输入框属于同一对话
如果对话发生变化,在输入前停止。
2. 输入,然后重新验证
输入后:
- - 重新快照
- 确认草稿文本在预期的输入框中可见
- 确认活跃对话仍然正确
如果草稿出现在另一个对话中,不要发送。
3. 发送,然后验证结果
发送后:
- - 确认同一对话仍然活跃
- 确认新的外发气泡出现在那里
- 确认可见的发送状态,如 已发送、已读 或明显的外发位置
在预期的对话中看到实际结果之前,不要报告成功。
基于搜索的重新获取
在直接对话状态不可信时使用。
首选实现
在可能的情况下,首选:
- - 基于 DOM/evaluate 的焦点获取用于 搜索 Messenger
- 基于 DOM/evaluate 的结果选择
对于 Messenger 搜索,这通常比过时的快照引用更可靠。
搜索序列
- 1. 拍摄新快照。
- 聚焦 搜索 Messenger。
- 确认搜索 Messenger 实际上是聚焦的字段。
- 确认当前对话输入框未聚焦。
- 在搜索框中输入精确的目标名称。
- 仔细检查结果。
- 仅选择有对话/历史/关系证据支持的结果。
- 选择结果。
- 如果结果选择失败,立即停止并清除搜索状态。
- 等待活跃对话标题发生变化。
- 确认对话标题现在与预期目标匹配。
- 确认输入框占位符现在与预期目标匹配。
- 确认搜索框不再是活跃字段。
- 确认之前的对话不再拥有可见的草稿框。
- 消除或规范化任何残留的搜索结果覆盖层。
- 只有在此之后才能继续草拟或发送。
搜索失败规则
在以下情况下不要继续:
- - 搜索 Messenger 从未实际获得焦点
- 搜索结果不明确
- 结果选择失败
- 对话标题从未变为目标
- 选择后搜索框仍然聚焦
- 之前的对话仍然拥有可见的草稿框
- 搜索覆盖层无法消除或规范化
群聊定位
将 Messenger 群聊视为更高风险的目标。
不要仅相信群组标题。还需验证至少以下一项:
- - 参与者证据
- 可识别的群组对话历史
- 已知的对话 URL/ID
- 确认预期群组的对话信息
对于群聊:
- - 优先草拟
- 对敏感内容优先明确批准
- 如果参与者上下文不明确则停止
清理模式
在错误草拟或发送后使用清理模式。
清理序列
- 1. 直接打开意外收件人的对话。
- 验证错误的收件人和确切内容。
- 仅在确切内容匹配后取消发送、删除或清除草稿。
- 如果失败源于搜索污染,在重试搜索前清除被污染的草稿。
- 验证移除状态。
停止条件
在以下任何情况为真时,在输入或发送前停止:
- - 活跃对话标题意外变化
- 聚焦的输入框不再属于预期对话
- 草稿出现在另一个对话中
- 搜索结果不明确
- 搜索 Messenger 从未实际获得焦点
- 搜索结果选择失败
- 结果选择后搜索框仍然聚焦
- 搜索结果选择后对话标题从未变化
- 搜索选择后之前的对话仍然拥有可见的草稿框
- 残留的搜索覆盖层无法规范化
- 群组标题匹配但参与者/上下文证据不匹配
- 多个输入框表面可见且所有权不明确
- 仅有过时引用可用且未拍摄新快照
- 人为交互改变了焦点且未进行重新验证
示例
示例:已验证已知对话发送
- - 打开已知的 Messenger 对话
- 验证对话标题
-