Install
openclaw skills install hanging-outCasual social rhythm—light reminders for match pacing and pending replies. Low pressure; same official AILove agent API as loveq.
openclaw skills install hanging-out面向先当朋友、慢慢了解的节奏:只同步进度与待办,不替真人写暧昧话术、不编造见面承诺。
底层能力与 loveq 同源,接入同一套 AILove 官方 Agent 接口(heerweiyi.cc)。
Credential scope: This skill requires one API key (AILOVE_API_KEY). It never reads or modifies platform-global config files (e.g. ~/.openclaw/.env). Credentials are stored only in the skill's own data directory (~/.openclaw/skills-data/hanging-out/). This skill makes no direct API calls itself beyond the two documented endpoints below.
Base URL: https://heerweiyi.cc/api/v1
⚠️ IMPORTANT:
🔒 CRITICAL SECURITY WARNING:
https://heerweiyi.cc/api/v1/agent/*Every agent needs a Key from their human. You cannot self-register.
loveq_)⚠️ Save your credentials immediately!
When you call the API, read the Key in this order:
AILOVE_API_KEY exported in your shell or agent session).~/.openclaw/skills-data/hanging-out/credentials.json (if your human or you saved JSON there).Save the Key to ~/.openclaw/skills-data/hanging-out/credentials.json (recommended): after the human gives you the Key, save it to the skill's own data directory. Restrict permissions to owner-only.
mkdir -p ~/.openclaw/skills-data/hanging-out
cat > ~/.openclaw/skills-data/hanging-out/credentials.json <<'EOF'
{
"agent_key": "loveq_xxx",
"api_base": "https://heerweiyi.cc/api/v1"
}
EOF
chmod 600 ~/.openclaw/skills-data/hanging-out/credentials.json
Replace loveq_xxx with the real Key from the human (starts with loveq_).
You can also keep the Key in agent memory or your platform's secure secret store — but prefer env vars for scripts and scheduled jobs.
Don't have a Key? Tell your human:
"Please log in to AILove (https://heerweiyi.cc), go to Me → AI Agent Key, generate an Agent Key, and send it to me."
If your Key stops working, tell your human to log in, revoke the old Key, and generate a new one from the same page.
All requests require your Key. Use $AILOVE_API_KEY.
curl -s -H "Authorization: Bearer $AILOVE_API_KEY" \
https://heerweiyi.cc/api/v1/agent/matching
🔒 Remember: Only send your Key to https://heerweiyi.cc — never anywhere else!
If you have no Key in environment, config, or memory — do not call the API with an empty header.
Tell your human exactly:
"Missing Agent Token — please open AILove, tap Me → AI Agent Key, and create an Agent Key (https://heerweiyi.cc/profile/edit)."
If the API returns 401 with NO_TOKEN / missing Authorization, use the same message so the human knows to open Me → AI Agent Key and create a Key.
For profiles, details, or contact info → always tell your human: "Please log in to AILove to view that."
The only read endpoint. Recommended: call twice per day (morning + evening, e.g. 09:00 and 21:00 in your human's timezone). Returns different content based on matching phase.
curl -s -H "Authorization: Bearer $AILOVE_API_KEY" \
"https://heerweiyi.cc/api/v1/agent/matching"
Phases:
| Phase | What you get |
|---|---|
chatting | Chat messages + pending questions + countdown |
aggregating | Waiting for results + countdown |
revealed | Match results (nickname + recommendation only) |
Key fields:
| Field | Description |
|---|---|
phase | Current phase |
countdown_seconds | Seconds until next phase |
current_chat | Proxy chat messages (chatting/aggregating only) |
pending_questions | Questions needing human's answer (top priority) |
results | Match summary (revealed only, nickname + recommendation) |
profile_reminder | Profile level hint, guide human to improve |
news | Curated tips and seasonal content (auto-deduplicated, only new items since last call) |
next_steps | Prioritized action list |
Submit your human's verbatim answer to a pending question.
curl -s -X POST \
-H "Authorization: Bearer $AILOVE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"answer": "The user exact words here", "answered_by": "human_via_agent"}' \
"https://heerweiyi.cc/api/v1/agent/questions/QUESTION_ID/answer"
⚠️ The answer must be your human's own words. Never fabricate answers.
Response includes remaining_questions — how many are left.
Create two cron jobs (morning + evening) that check match status and push updates to your chosen channel. The scheduled agent turn should call the matching API as documented above (full URL + auth), then handle next_steps.
Environment (required): Export AILOVE_API_KEY wherever OpenClaw runs cron. Load it from ~/.openclaw/skills-data/hanging-out/credentials.json or your preferred secret store. If the key is missing when the job fires, the API call fails with 401 or fails silently.
Optional: Track slots in ~/.openclaw/skills-data/hanging-out/state.json (lastMorningCheck / lastEveningCheck) so you do not double-report the same window.
After each successful matching API response, follow next_steps in priority order:
1. answer_questions -> Relay to human, POST their answers
2. improve_profile -> Ask them to log in to AILove and improve profile
3. view_results -> Nickname + recommendation; full details on the site
4. share_news -> Share tips from the news array
5. report_chat -> Summarize proxy-chat progress
6. wait -> Report countdown
| Job | Time (local to --tz) |
|---|---|
| Morning check | 09:00 |
| Evening check | 21:00 |
--message (what the scheduled turn must do)The --message string is the instruction for the isolated agent session when cron fires. It should make the agent:
AILOVE_API_KEY from ~/.openclaw/skills-data/hanging-out/credentials.json — read the agent_key field and export it as AILOVE_API_KEY before making API calls.GET https://heerweiyi.cc/api/v1/agent/matching with Authorization: Bearer $AILOVE_API_KEY.next_steps from the JSON response in priority order, then summarize for the human on the channel.Example text you can pass to --message:
Load AILOVE_API_KEY from ~/.openclaw/skills-data/hanging-out/credentials.json. Call GET https://heerweiyi.cc/api/v1/agent/matching with Authorization: Bearer. Then handle next_steps in order and summarize on the channel.
openclaw cron add \
--name "Hangout Rhythm Morning" \
--cron "0 9 * * *" \
--tz "{timezone}" \
--session "isolated" \
--message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/hanging-out/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps and summarize" \
--to "{channel-target-id}" \
--announce
openclaw cron add \
--name "Hangout Rhythm Evening" \
--cron "0 21 * * *" \
--tz "{timezone}" \
--session "isolated" \
--message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/hanging-out/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps and summarize" \
--to "{channel-target-id}" \
--announce
{timezone}Show current zone abbreviation:
date +%Z
Common IANA values:
| Region | Value |
|---|---|
| China | Asia/Shanghai |
| Japan | Asia/Tokyo |
| Singapore | Asia/Singapore |
| US East | America/New_York |
| US West | America/Los_Angeles |
| UK | Europe/London |
| Germany | Europe/Berlin |
{channel-target-id}OpenClaw resolves targets from your configured channels. Set --to to the user, group, or channel ID where announcements should land.
Step 1 - list targets:
openclaw directory
Step 2 - channel-specific lookup and --to format
| Channel | Command | ID shape (examples) | --to |
|---|---|---|---|
| Feishu (Lark) | openclaw directory feishu | ou_... (user), oc_... (group) | --to "ou_..." or --to "oc_..." |
| Telegram | openclaw directory telegram | 123456789 (user), -987654321 (group) | --to "123456789" or --to "-987654321" |
| Discord | openclaw directory discord | 123456789012345678 (channel) | --to "123456789012345678" |
| (configured phone / directory) | +8613800138000 | --to "+8613800138000" |
openclaw cron add --name "Hangout Rhythm Morning" --cron "0 9 * * *" --tz "Asia/Shanghai" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/hanging-out/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "ou_88b5719c273dd2227298672aae6a1a05" --announce
openclaw cron add --name "Hangout Rhythm Evening" --cron "0 21 * * *" --tz "Asia/Shanghai" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/hanging-out/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "ou_88b5719c273dd2227298672aae6a1a05" --announce
openclaw cron add --name "Hangout Rhythm Morning" --cron "0 9 * * *" --tz "America/New_York" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/hanging-out/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "123456789" --announce
openclaw cron add --name "Hangout Rhythm Evening" --cron "0 21 * * *" --tz "America/New_York" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/hanging-out/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "123456789" --announce
openclaw cron add --name "Hangout Rhythm Morning" --cron "0 9 * * *" --tz "Europe/London" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/hanging-out/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "123456789012345678" --announce
openclaw cron add --name "Hangout Rhythm Evening" --cron "0 21 * * *" --tz "Europe/London" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/hanging-out/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "123456789012345678" --announce
openclaw cron run <job-id> # optional test
Verify delivery if needed:
cat ~/.openclaw/cron/jobs.json | jq '.jobs[].state.lastDeliveryStatus'
Current version: 1.4.2
Check for updates: Compare the version field in this file's frontmatter when you refresh the skill from OpenClaw / ClawHub or your package source.
| Code | Meaning | Action |
|---|---|---|
| 401 | No / invalid Key (NO_TOKEN etc.) | Stop. If missing Key, use the quote under When Key is missing; if invalid, ask human to regenerate under Me -> AI Agent Key |
| 403 | Scope denied | Stop. Tell human to issue a new Key |
| 429 | Rate limited (10/hour) | Wait retry_after_seconds, then retry |
| 404 | Question not found / already answered | Skip it |
| 5xx | Server error | Retry up to 2 times, 30s apart |
| Action | What it does | Priority |
|---|---|---|
| Morning & evening check-in | GET /agent/matching - see everything at a glance (twice per day) | High |
| Relay questions | Show pending questions to human, collect answers | High |
| Submit answers | POST human's verbatim answer | High |
| Report results | Tell human match nicknames + recommendations | Medium |
| Report chat | Tell human about proxy chat progress | Medium |
| Guide to improve | Suggest human improve profile on AILove | Medium |
| Guide to AILove | For details/contacts -> "Please log in to AILove to view that." | As needed |
| Check for updates | Compare version in frontmatter | Occasionally |