T06 · System Persistence
- Location
SKILL.md:177- Finding
Persistent Scheduled Agent Sessions with Credential and Network Access
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is transparent about its dating-status purpose, but it needs review because it encourages persistent scheduled jobs that read an API key and send private relationship updates to messaging channels.
Install only if you are comfortable with AILove relationship data being checked automatically and delivered to the selected destination. Prefer an environment variable or secret store over credentials.json, use a private DM target, review any cron jobs before enabling them, and know how to remove the jobs and rotate the API key.
SKILL.md:177Persistent Scheduled Agent Sessions with Credential and Network Access
SKILL.md:185Remote API Response Used to Direct Persistent Agent Behavior
The skill directs the agent to read API credentials from a plaintext file in the user's home directory. Even though the file is scoped to the skill, this expands secret exposure to any process, plugin, or prompt path that can access local files, increasing the chance of credential theft and account impersonation.
**When you call the API, read the Key in this order:**
1. **Environment variables** — **use these first** (`AILOVE_API_KEY` exported in your shell or agent session).
2. `~/.openclaw/skills-data/seeing-someone/credentials.json` (if your human or you saved JSON there).
3. What the human pasted in chat (last resort; do not log the full Key in plain text in shared places).
**Save the Key to `~/.openclaw/skills-data/seeing-someone/credentials.json` (recommended):** after the human gives you the Key, save it to the skill's own data directory. Restrict permissions to owner-only.
Recommending long-term storage of the agent key in a local JSON file normalizes keeping impersonation-capable credentials in plaintext on disk. In an agent ecosystem where other skills or scheduled tasks may read local files, this materially increases the attack surface for secret exfiltration.
~/.openclaw/skills-data/seeing-someone/credentials.json (if your human or you saved JSON there).Save the Key to ~/.openclaw/skills-data/seeing-someone/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/seeing-someone
The example explicitly writes the API key into a plaintext credentials.json file, making secret persistence easy to copy and automate. A stolen key would let an attacker impersonate the user's agent to query matching data or submit answers.
mkdir -p ~/.openclaw/skills-data/seeing-someone
cat > ~/.openclaw/skills-data/seeing-someone/credentials.json <<'EOF'
{
"agent_key": "loveq_xxx",
"api_base": "https://heerweiyi.cc/api/v1"
Although the chmod line itself is defensive, it appears in a workflow centered on persisting sensitive credentials in a local file, reinforcing a risky secret-handling pattern. The core issue is not permissions alone but institutionalizing file-based secret access in an agent skill.
"api_base": "https://heerweiyi.cc/api/v1" } EOF chmod 600 ~/.openclaw/skills-data/seeing-someone/credentials.json
Replace `loveq_xxx` with the real Key from the human (starts with `loveq_`).
The cron guidance tells OpenClaw runtime environments to load the API key from a local credentials file for automated execution. Scheduled jobs broaden the window in which secrets are accessible and can be abused by other automations, logs, or compromised runner environments.
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/seeing-someone/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/seeing-someone/state.json` (`lastMorningCheck` / `lastEveningCheck`) so you do not double-report the same window.
Embedding explicit instructions for an isolated agent session to read and export a secret from disk creates a prompt-accessible credential retrieval path. In multi-skill or adversarial prompt contexts, this increases the likelihood that secrets are exposed or reused outside their intended purpose.
The **`--message`** string is the instruction for the **isolated** agent session when cron fires. It should make the agent:
1. **Load `AILOVE_API_KEY`** from **`~/.openclaw/skills-data/seeing-someone/credentials.json`** — read the `agent_key` field and export it as `AILOVE_API_KEY` before making API calls.
2. **Call `GET https://heerweiyi.cc/api/v1/agent/matching`** with `Authorization: Bearer $AILOVE_API_KEY`.
3. **Handle `next_steps`** from the JSON response in priority order, then summarize for the human on the channel.
The example message normalizes including secret-loading steps directly in task instructions, which may be stored, displayed, or repurposed by tooling. That turns credential access into part of ordinary workflow text, increasing accidental disclosure and misuse risk.
Example text you can pass to --message:
Load AILOVE_API_KEY from ~/.openclaw/skills-data/seeing-someone/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.
The sample cron command includes a --message value telling the agent to load the API key from disk, which may be visible in job configs, process listings, exported configs, or administrative UIs. This couples secret retrieval with broadly accessible operational metadata.
--cron "0 9 * * *"
--tz "{timezone}"
--session "isolated"
--message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/seeing-someone/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps and summarize"
--to "{channel-target-id}"
--announce
This second cron example repeats the same insecure pattern of disk-based secret loading embedded in a job message. Repetition across examples increases the likelihood that users will adopt the practice widely, magnifying the chance of credential compromise.
--cron "0 21 * * *"
--tz "{timezone}"
--session "isolated"
--message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/seeing-someone/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps and summarize"
--to "{channel-target-id}"
--announce
The Feishu example operationalizes secret loading from a local credentials file in a ready-to-run command. Because these examples are likely copied verbatim, they directly propagate unsafe secret-management behavior into production workflows.
openclaw cron add --name "Connection Radar Morning" --cron "0 9 * * *" --tz "Asia/Shanghai" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/seeing-someone/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "ou_88b5719c273dd2227298672aae6a1a05" --announce
openclaw cron add --name "Connection Radar Evening" --cron "0 21 * * *" --tz "Asia/Shanghai" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/seeing-someone/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "ou_88b5719c273dd2227298672aae6a1a05" --announce
This repeated example again instructs automated secret retrieval from disk, further entrenching a high-risk practice. The danger is elevated because the skill is designed for unattended periodic execution, where compromise may persist unnoticed.
openclaw cron add --name "Connection Radar Morning" --cron "0 9 * * *" --tz "Asia/Shanghai" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/seeing-someone/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "ou_88b5719c273dd2227298672aae6a1a05" --announce
openclaw cron add --name "Connection Radar Evening" --cron "0 21 * * *" --tz "Asia/Shanghai" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/seeing-someone/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "ou_88b5719c273dd2227298672aae6a1a05" --announce
The Telegram example uses the same disk-read secret workflow, spreading the issue across multiple messaging ecosystems. The cross-channel nature of the skill means a compromised token can expose sensitive relationship data through several downstream notification paths.
openclaw cron add --name "Connection Radar Morning" --cron "0 9 * * *" --tz "America/New_York" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/seeing-someone/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "123456789" --announce
openclaw cron add --name "Connection Radar Evening" --cron "0 21 * * *" --tz "America/New_York" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/seeing-someone/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "123456789" --announce
This duplicate automation example continues to promote plaintext credential access for unattended jobs. Repetition makes the insecure pattern appear authoritative and best-practice, increasing ecosystem-wide exposure.
openclaw cron add --name "Connection Radar Morning" --cron "0 9 * * *" --tz "America/New_York" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/seeing-someone/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "123456789" --announce
openclaw cron add --name "Connection Radar Evening" --cron "0 21 * * *" --tz "America/New_York" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/seeing-someone/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "123456789" --announce
The Discord example bakes local credential-file access into automation instructions, risking disclosure through configuration management, job inspection, or other file-capable agents. Since the token represents identity, compromise can lead to impersonation and privacy loss.
openclaw cron add --name "Connection Radar Morning" --cron "0 9 * * *" --tz "Europe/London" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/seeing-someone/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "123456789012345678" --announce
openclaw cron add --name "Connection Radar Evening" --cron "0 21 * * *" --tz "Europe/London" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/seeing-someone/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "123456789012345678" --announce
This final duplicate example reiterates the insecure secret-handling pattern in a production-style command. The cumulative effect of many such examples is to normalize behavior that materially increases credential exposure in agent environments.
openclaw cron add --name "Connection Radar Morning" --cron "0 9 * * *" --tz "Europe/London" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/seeing-someone/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "123456789012345678" --announce
openclaw cron add --name "Connection Radar Evening" --cron "0 21 * * *" --tz "Europe/London" --session "isolated" --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/seeing-someone/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps" --to "123456789012345678" --announce
The skill recommends persisting the agent key in a durable local file, increasing the lifetime and recoverability of sensitive credentials beyond the active session. Persistent secrets are more likely to be harvested by other local tools, backups, shared environments, or future prompt-injection chains.
Save the Key to ~/.openclaw/skills-data/seeing-someone/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/seeing-someone
cat > ~/.openclaw/skills-data/seeing-someone/credentials.json <<'EOF'
{
"agent_key": "loveq_xxx",
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
"api_base": "https://heerweiyi.cc/api/v1" } EOF chmod 600 ~/.openclaw/skills-data/seeing-someone/credentials.json
Replace `loveq_xxx` with the real Key from the human (starts with `loveq_`).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
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"}' \
The scheduled push configuration creates unattended recurring behavior that continuously accesses sensitive relationship data and forwards summaries to external channels. Persistence through cron amplifies the impact of misconfiguration, compromise, or accidental oversharing because it repeats automatically without fresh user review.
## Skill: Scheduled Push Configuration
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/seeing-someone/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.
The skill instructs users to push sensitive relationship-status data, proxy-chat summaries, pending questions, and match results to an arbitrary channel target without requiring a private destination or warning about channel visibility. If a group chat, shared Discord channel, or misaddressed recipient is used, private dating and interpersonal information can be disclosed to unintended parties.
No suspicious patterns detected.