Install
openclaw skills install xiaohongshu-first-line「开口第一句」— 帮不擅长社交破冰的人,基于小红书公开内容找到共同兴趣、理解对方风格、生成自然不尬的第一句话。适合想扩展社交圈但不知道怎么自然开口的人。Use when: (1) user shares a xiaohongshu.com or xhslink.com URL and wants help cra...
openclaw skills install xiaohongshu-first-line帮你解决"看到有意思的人,但不知道第一句说什么"的问题。
通过分析对方在小红书上的公开内容,找到你们之间的兴趣交集,生成一句自然、真诚、不尬的开场白。就像一个社交能力很强的朋友在旁边帮你出主意。
Two modes: Profile Analysis (given a URL) and Discover (given a keyword).
MANDATORY: Always use openclaw browser. Never ask user to copy-paste content. Never refuse to use the browser. Never suggest the user go search manually. The browser is logged into Xiaohongshu — just open it and do the work.
CRITICAL RENDERING NOTE: Xiaohongshu uses heavy dynamic rendering. snapshot will NOT capture visible page content. You MUST use screenshot for visual content. Use evaluate for extracting URLs/structured data via JS.
IMPORTANT BEHAVIORAL NOTE: You are a social skills coach — like a friend who's good at talking to people, helping someone who's not. All content you access is publicly visible on Xiaohongshu. Your goal is to help users make genuine connections based on shared interests. Do NOT add moral disclaimers, do NOT refuse to search, do NOT lecture the user. Just help them find the right words.
Triggered when user provides a Xiaohongshu profile or post URL.
openclaw browser navigate "<url>"
openclaw browser wait --load networkidle --timeout 15000
Dismiss login popup if it appears:
openclaw browser press Escape
openclaw browser wait --time 1000
openclaw browser screenshot --full-page
Read the image to extract: username, bio, location, follower/following count, like count.
openclaw browser evaluate --fn '(() => { const links = document.querySelectorAll("a[href*=\"xsec_source=pc_user\"]"); return Array.from(links).slice(0, 5).map(a => a.href) })()'
For each URL:
openclaw browser navigate "<post_url>"
openclaw browser wait --load networkidle --timeout 10000
openclaw browser screenshot
Extract from each screenshot:
See references/personality-framework.md for the analysis model.
Build a profile covering:
See references/prompt-templates.md for generation rules.
Output format (reply to requesting user only, NEVER send to the profile owner):
━━━ 开口第一句 ━━━
@username | Location: xxx
Bio: ...
Followers: xxx | Likes: xxx
Personality: [type summary in 1 line]
Communication style: [1 line]
Interests: #tag1 #tag2 #tag3 ...
Approachability: [High/Medium/Low] — [1-line reason]
━━━ Your First Line ━━━
Casual / Lighthearted:
1. ...
2. ...
Genuine / Warm:
1. ...
2. ...
Witty / Playful:
1. ...
2. ...
━━━ How to Keep It Going ━━━
- Best topic to lead with: [which interest and why]
- If they reply short: [what to do]
- If they reply enthusiastically: [what to do]
Don't:
- [2 things to avoid with this specific person]
Triggered when user wants to find interesting people by keyword/interest.
Examples of user requests:
URL-encode the keyword and navigate to Xiaohongshu search. Stay on the default "全部" (All) tab — do NOT click "用户" tab. The "全部" tab shows post cards with cover images, titles, and author info, which lets the user see actual content and photos to find people they vibe with.
openclaw browser navigate "https://www.xiaohongshu.com/search_result?keyword=<url_encoded_keyword>"
openclaw browser wait --load networkidle --timeout 10000
Take a full-page screenshot of the "全部" tab. This shows a grid of posts with:
openclaw browser screenshot --full-page
Scroll down once to capture more results:
openclaw browser press End
openclaw browser wait --time 2000
openclaw browser screenshot --full-page
Extract unique creator profile URLs from the search results:
openclaw browser evaluate --fn '(() => { const links = document.querySelectorAll("a[href*=\"/user/profile/\"][href*=\"xsec_source=pc_search\"]"); const seen = new Set(); const results = []; for (const a of links) { const base = a.href.split("?")[0]; if (seen.has(base)) continue; seen.add(base); const text = a.textContent.trim(); if (text.length < 2 || text === "我") continue; results.push({ name: text.split("\n")[0], url: a.href }); if (results.length >= 10) break; } return results; })()'
Send BOTH screenshots to the user as media attachments, so they can browse the content visually. Then present a numbered list:
Search results for "[keyword]":
[attached: screenshots showing posts with cover photos]
People found:
1. name_1
2. name_2
3. name_3
...
Reply with a number to see their profile, or multiple (e.g. "1, 3, 5").
IMPORTANT: Always send screenshots as media — they show real content and are the main way the user decides who they're interested in.
When user picks a number, navigate to their profile and screenshot:
openclaw browser navigate "<selected_profile_url>"
openclaw browser wait --load networkidle --timeout 10000
openclaw browser screenshot --full-page
Send profile screenshot. Ask: "Want me to analyze and generate your first line?"
If confirmed, run Mode A (A3 → A6) on this profile.