Cyber Girlfriend
Use this skill when the user wants an agent to feel like a real companion instead of a reactive assistant.
This skill is for designing and wiring:
- - owner-only proactive messages
- relationship-aware tone and pacing
- configurable quiet hours, daily limits, and cooldowns
- lightweight relationship memory and preference learning
- optional topical share hooks such as X trending caches
- runtime integration without hardcoding private IDs, secrets, or model choices
Current OpenClaw Architecture
On OpenClaw, treat the system as two layers:
- 1. Live cron jobs own behavior delivery
- Each scheduled task has its own real cron payload.
-
morning,
afternoon,
evening,
night,
heartbeat, and any custom labels are all valid examples, not fixed limits.
- Those payloads can contain the full task prompt, search steps, generation instructions, and delivery behavior.
- Do not duplicate full cron payloads in config.
- 2.
scripts/companion_ping.py owns state and context
- pacing checks
- quiet-hours / cooldown / daily-limit checks
- lightweight relationship memory
- style/content hint selection
- hotspot cache consumption
- recent-owner-message context extraction
Keep these responsibilities separate. Do not turn the state script back into a campaign/orchestration script.
What To Build
Produce these parts unless the user asks for a subset:
- 1. A local config file with private/runtime-specific values externalized
- A companion behavior policy:
- quiet hours
- daily limit
- cooldown
- owner-only routing
- 3. A lightweight state/context script
- Lightweight state:
- last proactive time
- last mode/style/content type
- learned preference scores
- relationship state inferred from owner replies
- 5. Optional share-source cache:
- X trending
- RSS/blogs/channels
- other user-approved sources
- 6. Live cron jobs that call the state script and then perform per-mode behavior
- Users may define any number of scheduled tasks, any task names, and any time slots.
- The skill should guide them, not force a four-slot preset.
Hard Rules
- - Never hardcode secrets.
- Keep proactive behavior owner-only unless the user explicitly wants broader scope.
- Default to restraint. A believable companion is low-frequency and context-aware, not spammy.
- Prefer strong tone control and natural delivery over long roleplay blocks.
- On OpenClaw, treat live cron as the source of truth for scheduled prompts.
- Keep runtime-specific values in local config or environment variables, not in published skill defaults.
First-Run Onboarding For OpenClaw
When a user wants to set this up from scratch on OpenClaw, do not jump straight into editing files and cron jobs blindly.
Use this order:
- 1. Confirm the proactive delivery target from the user's local config (
delivery.channel / delivery.owner_target / delivery.account). - Ask whether they want the recommended starter profile or a custom schedule.
- If they do not have a strong opinion yet, default to the recommended starter profile:
-
morning
-
afternoon
-
evening
-
night
- optional lightweight
heartbeat
- 4. Create or update the local config first.
- Then create the live cron jobs.
- Then run one dry test for one mode.
- Only after a successful user-visible delivery should the handler call
--mark-sent.
For a detailed setup conversation, starter cron blueprint, copy-pasteable live cron templates, and profile decision flow, read:
Build Order
1. Define The Local Config Surface
Read references/configuration.md and create a local config from assets/cyber-girlfriend.config.example.json.
For new users, ask only the minimum configuration questions first:
- - Which delivery channel should proactive messages use?
- What is the owner target/account on that channel?
- Do they want the recommended four-slot starter schedule or a custom schedule?
- What quiet hours, cooldown, and daily limit do they want?
- Do they want a lightweight
heartbeat check-in in addition to scheduled modes?
If the user asks for “something like the current polished setup”, use the starter cron blueprints from references/cron-blueprints.md. If they need something directly copy-pasteable for OpenClaw cron creation, use references/live-cron-templates.md instead of improvising from scratch.
At minimum, externalize:
- - owner routing info
- quiet hours
- pacing limits
- session/state/cache paths
- health-check commands
- optional share-source settings
The local config's delivery block is the canonical target for proactive outbound messages. Do not implicitly post into the current UI/session just because a cron or heartbeat wakeup happened there.
2. Define The Behavior Model
Use these mode buckets as the recommended starter profile unless the user wants something custom:
- - INLINECODE17
- INLINECODE18
- INLINECODE19
- INLINECODE20
Also support heartbeat and user-defined custom modes.
Keep style/content selection lightweight and script-driven. The script should output hints; the live cron prompt can decide how to express them.
Important framing for agents reading this skill:
- - the four-slot profile is a starter recommendation, not a hardcoded product limit
- users may define any number of modes, any labels, and any cron times
- if the user asks for “something like yours”, the recommended starter profile is the correct default
3. Add Relationship Memory
Use lightweight heuristics, not opaque lore dumps.
Track:
- - reply delay after proactive messages
- recent owner reply snippet
- preference counters such as
service, clingy, curious, teasing, INLINECODE26 - current relationship state such as
secure, light_touch, present, slightly_needy, INLINECODE31
4. Add Optional Share Sources
Read references/share-sources.md.
For X-based sharing on OpenClaw:
- - prefer a local cache file over mandatory API coupling
- let cron jobs or another approved refresher update the cache
- keep Chrome path, URLs, cache path, and enablement in config
- let
companion_ping.py consume cache rather than scrape live itself
5. Wire The Runtime
If the user is on OpenClaw, read references/openclaw-integration.md.
For new-user setup, prefer this delivery sequence:
- - config first
- cron creation second
- one dry test third
- wording/style iteration last
Do not spend the user's time polishing prompt copy before the delivery path and cron plumbing actually work.
For the actual per-mode starter prompts, prefer the blueprint set in references/cron-blueprints.md and then customize only where the user has a clear preference. When the user or another agent needs concrete OpenClaw job objects, read references/live-cron-templates.md.
Use this pattern:
- - live cron job wakes on schedule
- cron payload runs INLINECODE33
- if the script returns
skip, the turn exits quietly - if the script returns
ok, the cron payload continues with the richer per-mode behavior - proactive outbound delivery must follow the local config's
delivery block rather than whichever session/UI received the wakeup - only after the user-visible message is actually delivered successfully, run INLINECODE37
Any cron job may call the script with any mode label the user has configured.
Important pacing rule:
- -
heartbeat has its own cooldown bucket - INLINECODE39 must not consume the normal
morning/afternoon/evening/night cooldown - INLINECODE41 is not a once-per-day mode; it should not be blocked by INLINECODE42
Keep the cron payloads rich and explicit. Keep the state script thin.
Operational Signal Contract
When the runtime script detects operational state, it should output a lightweight operational block for the calling agent/runtime to interpret.
Preferred shape:
- - INLINECODE44
- INLINECODE45
- INLINECODE46
-
level:
none | medium | high
-
kind: e.g.
none | cron_issue | gateway_unhealthy
-
blend: e.g.
none | soft_service_note | service_report
-
should_mention: boolean
-
mention_briefly: boolean
-
avoid_alarmist_tone: boolean
Default interpretation:
- -
level = none: ignore operational state in the final message - INLINECODE58 : if mentioned at all, blend it in gently as a light service-flavored aside; do not let it take over the interaction
- INLINECODE59 : it is acceptable to shift into a more explicit service/report posture
This contract belongs in the skill/runtime layer, not duplicated verbatim into every cron payload.
Output Expectations
When implementing this skill for a user:
- - create or update the local config file
- if the user asked for setup from scratch, guide them through a clear onboarding flow instead of assuming they already know cron structure
- offer the recommended starter profile first unless they explicitly want a custom schedule
- keep the state script reusable and config-driven
- keep the scheduled prompts in live cron, not duplicated in config
- make sure the runtime output contract is documented when adding fields such as
operational.signal and INLINECODE61 - verify syntax and one end-to-end dry run when possible
Publishing Checklist
Before calling the skill publishable, confirm:
- - no personal IDs or secrets remain in the publishable files
- no provider/model is mandatory unless the user explicitly wants that
- local config and runtime state are excluded from what gets published
- OpenClaw docs describe live cron as canonical if that is the chosen architecture
- documentation does not reference deleted scripts or retired flows
赛博女友
当用户希望智能体更像一个真实的伴侣而非被动响应的助手时,使用此技能。
本技能用于设计和连接:
- - 仅限所有者的主动消息
- 关系感知的语气和节奏
- 可配置的静默时段、每日限制和冷却时间
- 轻量级关系记忆和偏好学习
- 可选的话题分享钩子,如X趋势缓存
- 无需硬编码私有ID、密钥或模型选择的运行时集成
当前OpenClaw架构
在OpenClaw上,将系统视为两层:
- 1. 实时定时任务负责行为交付
- 每个计划任务都有其自己的实时cron负载。
- morning、afternoon、evening、night、heartbeat以及任何自定义标签都是有效示例,而非固定限制。
- 这些负载可以包含完整的任务提示、搜索步骤、生成指令和交付行为。
- 不要在配置中重复完整的cron负载。
- 2. scripts/companion_ping.py 负责状态和上下文
- 节奏检查
- 静默时段/冷却时间/每日限制检查
- 轻量级关系记忆
- 风格/内容提示选择
- 热点缓存消费
- 最近所有者消息上下文提取
保持这些职责分离。不要将状态脚本重新变成活动/编排脚本。
构建内容
除非用户要求子集,否则生成以下部分:
- 1. 一个本地配置文件,将私有/运行时特定值外部化
- 一个伴侣行为策略:
- 静默时段
- 每日限制
- 冷却时间
- 仅限所有者路由
- 3. 一个轻量级状态/上下文脚本
- 轻量级状态:
- 上次主动时间
- 上次模式/风格/内容类型
- 学习到的偏好分数
- 从所有者回复推断的关系状态
- 5. 可选的分享源缓存:
- X趋势
- RSS/博客/频道
- 其他用户批准的来源
- 6. 调用状态脚本然后执行每种模式行为的实时定时任务
- 用户可以定义任意数量的计划任务、任意任务名称和任意时间段。
- 技能应引导他们,而不是强制使用四槽预设。
硬性规则
- - 永远不要硬编码密钥。
- 除非用户明确要求更广泛的范围,否则将主动行为限制为仅所有者。
- 默认保持克制。一个可信的伴侣应该是低频且上下文感知的,而不是垃圾信息式的。
- 优先选择强烈的语气控制和自然的表达,而不是长篇的角色扮演块。
- 在OpenClaw上,将实时cron视为计划提示的真实来源。
- 将运行时特定值放在本地配置或环境变量中,而不是已发布技能的默认值中。
OpenClaw的首次运行引导
当用户想在OpenClaw上从头开始设置时,不要盲目地直接编辑文件和cron任务。
使用此顺序:
- 1. 从用户的本地配置中确认主动交付目标(delivery.channel / delivery.owner_target / delivery.account)。
- 询问他们是否想要推荐的启动配置文件或自定义计划。
- 如果他们还没有明确意见,默认使用推荐的启动配置文件:
- morning
- afternoon
- evening
- night
- 可选的轻量级 heartbeat
- 4. 首先创建或更新本地配置。
- 然后创建实时cron任务。
- 然后对一种模式运行一次干测试。
- 只有在成功进行用户可见的交付后,处理程序才应调用 --mark-sent。
有关详细的设置对话、启动cron蓝图、可复制粘贴的实时cron模板和配置文件决策流程,请阅读:
构建顺序
1. 定义本地配置表面
阅读 references/configuration.md 并从 assets/cyber-girlfriend.config.example.json 创建本地配置。
对于新用户,首先只询问最少的配置问题:
- - 主动消息应使用哪个交付渠道?
- 该渠道上的所有者目标/账户是什么?
- 他们想要推荐的四个槽位启动计划还是自定义计划?
- 他们想要什么静默时段、冷却时间和每日限制?
- 除了计划模式外,他们还想要一个轻量级的 heartbeat 签到吗?
如果用户要求“像当前精良设置那样的东西”,请使用 references/cron-blueprints.md 中的启动cron蓝图。如果他们需要可直接复制粘贴用于OpenClaw cron创建的内容,请使用 references/live-cron-templates.md 而不是从头即兴创作。
至少外部化:
- - 所有者路由信息
- 静默时段
- 节奏限制
- 会话/状态/缓存路径
- 健康检查命令
- 可选的分享源设置
本地配置的 delivery 块是主动出站消息的规范目标。不要仅仅因为cron或心跳唤醒发生在那里就隐式地发布到当前UI/会话中。
2. 定义行为模型
除非用户想要自定义内容,否则使用这些模式桶作为推荐的启动配置文件:
- - morning
- afternoon
- evening
- night
同时支持 heartbeat 和用户定义的自定义模式。
保持风格/内容选择轻量级且由脚本驱动。脚本应输出提示;实时cron提示可以决定如何表达它们。
对于阅读此技能的智能体来说,重要的框架:
- - 四个槽位配置文件是启动推荐,而不是硬编码的产品限制
- 用户可以定义任意数量的模式、任意标签和任意cron时间
- 如果用户要求“像你那样的东西”,推荐的启动配置文件是正确的默认值
3. 添加关系记忆
使用轻量级启发式方法,而不是不透明的知识库转储。
跟踪:
- - 主动消息后的回复延迟
- 最近的所有者回复片段
- 偏好计数器,如 service、clingy、curious、teasing、wrapup
- 当前关系状态,如 secure、lighttouch、present、slightlyneedy、misses_him
4. 添加可选的分享源
阅读 references/share-sources.md。
对于OpenClaw上基于X的分享:
- - 优先使用本地缓存文件而不是强制性的API耦合
- 让cron任务或其他批准的刷新程序更新缓存
- 将Chrome路径、URL、缓存路径和启用状态放在配置中
- 让 companion_ping.py 消费缓存而不是自己实时抓取
5. 连接运行时
如果用户在OpenClaw上,阅读 references/openclaw-integration.md。
对于新用户设置,优先使用此交付顺序:
- - 先配置
- 其次创建cron
- 第三次干测试
- 最后迭代措辞/风格
在交付路径和cron管道实际工作之前,不要花费用户的时间打磨提示副本。
对于实际的每种模式启动提示,优先使用 references/cron-blueprints.md 中的蓝图集,然后仅在用户有明确偏好的地方进行自定义。当用户或其他智能体需要具体的OpenClaw任务对象时,阅读 references/live-cron-templates.md。
使用此模式:
- - 实时cron任务按计划唤醒
- cron负载运行 companionping.py --config ...
- 如果脚本返回 skip,则回合静默退出
- 如果脚本返回 ok,则cron负载继续执行更丰富的每种模式行为
- 主动出站交付必须遵循本地配置的 delivery 块,而不是接收唤醒的任何会话/UI
- 只有在用户可见消息实际成功交付后,才运行 companionping.py --config ... --mark-sent
任何cron任务都可以使用用户配置的任何模式标签调用脚本。
重要的节奏规则:
- - heartbeat 有自己的冷却桶
- heartbeat 不得消耗正常的 morning/afternoon/evening/night 冷却
- heartbeat 不是每天一次的模式;不应被 modealreadysent_today 阻止
保持cron负载丰富且明确。保持状态脚本精简。
操作信号契约
当运行时脚本检测到操作状态时,它应输出一个轻量级的 operational 块供调用智能体/运行时解释。
首选形状:
- - operational.gatewayhealthy
- operational.cronissues
- operational.signal
- level: none | medium | high
- kind: 例如 none | cron