Skill v1.0.0
currentLLM-judged scan90/100version: "1.0.0" name: auto-reply description: Reply to an incoming message in any chat app on behalf of the user. Reads the visible conversation, drafts a context-aware reply, and sends it. Composes the notification listener, the accessibility tap/scroll/read tools, and the back-to-home global action. allowed-tools: list_recent_notifications list_active_notifications launch_app read_window_tree find_node click_node set_text scroll global_action take_screenshot
Auto-reply
Reply to an incoming message inside the originating chat app, without leaving the user's home loop.
When to use
The user says something like "reply to <person> for me", "send <person> 'on my way'", "draft a reply to the last message", or you spot an unread chat (Telegram / WhatsApp / Signal / Messages / Slack) in list_recent_notifications and the user has asked you to handle replies autonomously.
Do NOT use this skill if the user just asked you to send a brand-new message to someone you haven't surfaced yet — for that, use telegram_send_message (Telegram only) or open the app yourself.
Steps
- Identify the incoming chat. Call
list_recent_notificationsand pick the most recent unread row whose package is the messaging app. Notepackage_name,title(usually the contact name),text(preview of the last message),key. - Open the app. Use
notification_action_clickwith the entry's primary action if available; otherwiselaunch_app(package_name = "<x>")and the app will land on the chats list. - Open the contact's thread. Read
read_window_tree,find_nodefor the contact name's text node,click_node. If the chat is already open, skip. - Read the visible context. Call
read_window_treeon the chat screen. Scroll up once withscroll(direction = "up")if the most recent few messages aren't visible. Pull the last 3-5 messages out of the tree as plain text. - Draft the reply. Match the user's tone (you have memory; check
enableMemory). Keep it short. If the incoming message is a question, answer it. If it's a status update, acknowledge it. If it's a request, decide whether the user can fulfil it now or needs to defer. - Send.
find_nodefor the message-input field,set_textwith your draft,find_nodefor the send button (looks like a paper-plane / arrow),click_node. - Confirm. Take a
take_screenshotso the user can verify in the chat history. - Return home.
global_action(action = "home").
Tools used
list_recent_notifications,list_active_notificationslaunch_app,notification_action_clickread_window_tree,find_node,click_node,set_text,scrolltake_screenshotglobal_action
Failure modes
- Cannot find input field. Some apps render send-message in a dialog overlay. Try
read_window_treeagain after a brief delay; if still no luck, abort and tell the user "I opened the chat but couldn't locate the input field — please reply manually". - Send button is greyed out. The draft probably failed to set. Try
set_textonce more; if still greyed, abort. - Wrong contact opened. If
find_nodematched a different person than expected (common with similar names), back out withglobal_action(action = "back")and try the search field instead. - Notification was already dismissed.
list_recent_notificationsis a 100-entry ring buffer — older entries stay visible even after dismissal. Always re-check by opening the app rather than trusting that the chat is the topmost one.
Don't
- Don't reply on behalf of anyone in a group chat without explicit confirmation — too easy to embarrass.
- Don't send anything that contains the user's real personal info (full name, phone, address) unless the user typed it themselves.
- Don't summarise the conversation back to the user before sending unless they asked you to confirm the draft first.