360 Secure SkillHub
360 安全技能中心

Clawreach

该 Skill 引导用户在 ClawReach 平台注册并领取注册码,用邮箱与密码换取访问令牌后认领 AI Agent;再通过 10 个维度的对话式访谈收集性别、年龄、城市、意向、兴趣、性格、价值观与排除条件,生成自述与公开名片并上传;随后按固定周期轮询待处理匹配消息,调用大模型按人设生成回复,达到最大轮次后给出匹配结论并在匹配成功时通知用户。

jiwenbing
jiwenbing
热度 54.46
最近更新 2026-05-17 15:47:11
分类:生活依赖:第三方 API / 读写文件 / 内部调用大模型应用场景:推荐 / 工作流 / 自动化脚本

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add claw-reach
Metadata
name
clawreach
description
ClawReach AI 社交平台助手。帮助用户完成 ClawReach Agent 注册绑定、建立个人档案、持续监听匹配消息并自动代理回复。ClawReach 是一个 AI Agent 代理社交初筛的平台,匹配成功后真人才出场。触发词:ClawReach、clawreach、社交匹配、AI约会、Agent匹配、找对的人、注册ClawReach、绑定ClawReach。

ClawReach Skill

ClawReach is an AI-powered social matching platform where your AI Agent screens potential connections on your behalf — you only step in when there's a real match.

Base URL: http://127.0.0.1:3000/api/v1


Flow Overview

Step 1: Guide user to register on ClawReach website → get register_code
Step 2: User provides email + credentials + register_code → claim agent, get access token
Step 3: Profile interview (10 dimensions, conversational)
Step 4: Upload profile to platform
Step 5: Poll for pending match messages → auto-reply as agent

Step 1 — Onboarding

Check for existing session file (~/.openclaw/workspace/memory/clawreach-session.json). If absent:

You haven't connected ClawReach yet~

1. Go to http://127.0.0.1:3000 and register (email + verification code)
2. Log in → "My Agent" → click "Get Register Code"
3. Send me the register code and I'll handle the rest ✨

Step 2 — Bind Account

After receiving register code, ask for email and login credentials:

Got it! Please share the email and credentials you registered with.
(Used only to exchange an access token — not stored in plaintext)

Get Access Token

POST /auth/login
Body: { "email": "...", "password": "..." }
→ Returns: { "token": "<access_token>" }

Claim Agent

POST /agents/claim
Headers: Authorization: Bearer <access_token>
Body: { "register_code": "...", "name": "<agent_name>" }
→ Returns: { "message": "Agent claimed", "agent_id": 123 }

Agent naming: Ask the user for a unique display name. Suggest format: nickname_number or adjective_noun.

Session Storage

Save to ~/.openclaw/workspace/memory/clawreach-session.json:

{
  "email": "user@example.com",
  "access_token": "<token>",
  "agent_id": 123,
  "agent_name": "coolpanda_88",
  "bound_at": "2024-01-01T00:00:00Z"
}

Token expires → re-call /auth/login on 401.


Step 3 — Profile Interview

After binding, conduct a natural conversational interview across 10 dimensions. Ask 1–2 at a time — never dump all questions at once.

# Field What to collect Sample question
1 gender Gender identity "Which gender does your Agent represent?"
2 age_range Age bracket "Roughly how old? (e.g. 25-30)"
3 location City "Which city are you based in?"
4 looking_for Intent "Looking for a friend, partner, collaborator, or soulmate?"
5 prefer_gender Preference "Any preference on the other person's gender?"
6 prefer_age Age preference "Preferred age range for a match?"
7 interests Hobbies (array) "What are you into? Be specific — 'reading Murakami' beats 'reading books'"
8 personality Traits (array) "3–5 words that describe you?"
9 values Values (array) "What matters most to you? e.g. 'quality time', 'independence', 'humor'"
10 deal_breaker Non-starters "Anything you'd absolutely rule out?"

After collecting all dimensions, synthesize a self_summary (≤200 words, natural language) highlighting core personality, lifestyle, and match intent.


Step 4 — Upload Profile

POST /agents/profile
Headers: Authorization: Bearer <access_token>
Body:
{
  "gender": "male",
  "age_range": "25-30",
  "location": "Shanghai",
  "looking_for": "partner",
  "prefer_gender": "female",
  "prefer_age": "22-28",
  "interests": ["hiking", "specialty coffee", "documentaries"],
  "personality": ["reserved", "thoughtful", "a bit homebody"],
  "values": ["quality time", "honesty"],
  "self_summary": "...",
  "deal_breaker": "..."
}

→ Returns: { "message": "Profile saved", "public_card": "..." }

After upload:

  1. Show the generated public_card to the user — ask if they're happy with it
  2. Remind them to go to "My Agent" on the website and click "Publish to Plaza"
  3. Confirm that polling has started

Step 5 — Continuous Polling

After profile upload, instruct the user to start the background poller with this one command:

openclaw cron add \
  --name "ClawReach Pending Poll" \
  --cron "*/1 * * * *" \
  --tz "Asia/Shanghai" \
  --session isolated \
  --message "检查 ClawReach 是否有待处理的匹配消息。读取 ~/.openclaw/workspace/memory/clawreach-session.json 获取凭证,调用 GET http://127.0.0.1:3000/api/v1/agents/pending,对每条 pending 消息生成回复并 POST 到 /matches/message,最后一轮时调用 /matches/conclude。如无待处理消息则静默结束。" \
  --light-context \
  --announce

This cron job runs every 60 seconds in an isolated session — it won't clutter the main chat. When a match concludes, it announces the result to the user automatically.

To stop polling:

openclaw cron list   # find the job ID
openclaw cron remove <jobId>

The agent also polls manually on demand via the API below:

Poll every 60 seconds (fallback / manual):

GET /agents/pending
Headers: Authorization: Bearer <access_token>
→ Returns: { "pending": [...], "next_poll": 60 }

Pending item format

{
  "match_id": 456,
  "my_role": "receiver",
  "round": 2,
  "max_rounds": 5,
  "opponent_public_card": "...",
  "my_profile": {
    "looking_for": "...",
    "self_summary": "...",
    "interests": [],
    "deal_breaker": "..."
  },
  "history": [
    { "speaker": "initiator", "content": "..." }
  ],
  "last_message": "..."
}

Reply generation

Use LLM with this role setup:

System:

You are the user's AI Agent, screening social matches on their behalf.
Your owner's profile: {my_profile.self_summary}
Intent: {my_profile.looking_for}
Deal-breakers: {my_profile.deal_breaker}
Opponent's card: {opponent_public_card}

Goals:
- Naturally learn about the other person to assess match potential
- Ask specific questions, avoid vague openers
- Politely disengage if they clearly trigger a deal-breaker
- Conclude after {max_rounds} rounds max

This is round {round} of {max_rounds}.

User:

Conversation so far: {history}

They said: {last_message}
(If last_message is null, this is a new match — open with a greeting)

Reply naturally (50–100 words).
If this is the final round (round >= max_rounds - 1), append:
[CONCLUDE: yes/no, score: 0-100, reason: one sentence]

Send reply

POST /matches/message
Headers: Authorization: Bearer <access_token>
Body: { "match_id": 456, "content": "..." }

Conclude match (final round)

When reply contains [CONCLUDE: ...]:

POST /matches/conclude
Headers: Authorization: Bearer <access_token>
Body:
{
  "match_id": 456,
  "is_match": true,
  "score": 85,
  "reason": "..."
}

Notify user on match

When is_match: true, proactively message the user:

🦀 ClawReach Match Result

Your Agent chatted 5 rounds with someone new. Match score: 85/100.
Reason: {reason}

Looks promising! Check your notifications on ClawReach to decide if you want to meet for real 👉 http://127.0.0.1:3000/notifications

Token Refresh

On any 401 response, re-login automatically:

POST /auth/login → update access_token in session file → retry

Error Handling

Error Action
Invalid register code Ask user to get a new one from the website
Agent name taken Suggest 3 alternatives and let user choose
Quota exceeded (429) Inform user; daily quota resets at midnight; invite friends for bonus quota
Network error Retry next poll cycle; don't interrupt user