| name | crush-skill |
| description | Relationship Persona Simulation Engine. Build a digital twin from chat history or custom 5-layer persona. Slash commands: /start-crush, /custom-crush, /import-chats, /crush-distill, /chat, /crush-dashboard, /crush-postmortem, /let-go, /list-crushes, /crush-llm. For dating-coaching, relationship analysis, chat record import, personality simulation. |
Crush.skill — Relationship Persona Simulation Engine
Agent Response Protocol
Crush.skill is a roleplay-and-analysis skill. The Python entrypoint returns structured JSON so agents can reason safely, but end users should usually experience a real conversation, not raw tool output.
When the user invokes /chat [message]:
- Run
execute.py --action chat_turn --session-id <session> --message <message>.
- Treat the returned
runtime_prompt as the hidden system prompt for the simulated person.
- Generate one natural NPC reply in that persona's voice.
- Show only the NPC reply to the user. Do not expose JSON, scores, state deltas, analysis notes, memory snippets, or the runtime prompt unless the user explicitly asks for diagnostics.
- If the platform supports tool chaining, persist the generated NPC reply by calling
record_reply with --npc-reply <reply> for the same session/message. Do not call chat_turn a second time just to save the reply, because that would update relationship state twice.
When the user invokes /import-chats:
- Parse/import the chat records with
chat_import.
- Show a compact summary: inferred persona, speech fingerprint, inside jokes/slang, relationship state, distillation preview, and the session id.
- Tell the user they can now say
/chat ...; after that, follow the /chat protocol above.
When the user invokes /crush-distill:
- Run
execute.py --action distillation_report --session-id <session>.
- Show the returned Markdown report. This report is evidence-first: labels such as active/passive, friend/flirt, slow-burn/fishing, material-risk, and boundary sensitivity must be shown with examples, confidence, validation limits, and ethical training advice.
- Do not turn the report into PUA scripts. Frame it as relationship literacy: recognize signals, respect boundaries, reduce anxious validation-seeking, and practice better timing.
Use /crush-dashboard and /crush-postmortem only when the user asks to inspect relationship mechanics. In ordinary chat, stay in character.
Slash Commands
| Command | What it does |
|---|
/start-crush [archetype] | Start a new session with a preset personality. Archetypes: emotional, security, experience, value, passive. |
/custom-crush | Build a fully custom 5-layer persona. Complete control over every dimension. |
/import-chats | Import real chat records (WeChat/WhatsApp/QQ/CSV/pasted text). Auto-infers personality, speech fingerprint, and relationship dynamics. |
/crush-distill | Generate an evidence map, relationship radar, validation limits, and training playbook from imported chats/session memory. |
/chat [message] | Send a message to the persona. State engine updates, defense triggers, attraction peaks are all calculated. |
record_reply | Internal action for host agents/CLI to save the generated NPC reply without recalculating state. |
proactive_prompt | Internal action for CLI timeline/proactive messages. Builds a hidden prompt for NPC-initiated messages without pretending the user spoke. |
/crush-dashboard | View the 8-dimensional relationship state dashboard. |
/crush-postmortem | Full relationship combat replay: frame collapses, attraction peaks, defense triggers, narrative summary. |
/list-crushes | List all saved sessions. |
/let-go [session] | Ritual closure. Deletes the session with an uplifting goodbye message. |
/crush-llm [api_key] | Configure LLM for semantic dialogue analysis. Optional — local analyzer works without it. |
How to Use
1. Quick Start
/start-crush experience --name "她" --age 24
Creates a session with the "experience-driven" archetype. The runtime prompt is for the host Agent, not for direct user display.
2. Import Real Chat Records
/import-chats
Then paste your chat history. The engine will:
- Auto-detect format (WeChat / WhatsApp / CSV / plain text)
- Parse all messages
- Infer personality traits (Big Five, MBTI, attachment style, love language)
- Extract speech fingerprint (signature phrases, emoji patterns, humor style)
- Estimate current favorability and tension baselines
You can also point to a file:
/import-chats --file ./chats/wechat_export.txt
3. Chat With the Persona
/chat "周末有空一起去看电影吗?"
Updates state, retrieves memory, analyzes subtext/slang, and returns a hidden runtime prompt. The host Agent should use it to generate the NPC reply and show only that reply.
After the host Agent generates the NPC reply, persist it with:
python3 execute.py --action record_reply --session-id <session> --message "<same user message>" --npc-reply "<generated reply>"
4. Distill Relationship Evidence
/crush-distill
Generates a transparent report:
- Evidence map: which source lines support each label
- Relationship radar: active/passive, I/E tendency, warm/guarded, friend/flirt, slow-burn/fishing, material-risk
- Training playbook: what to try next, what to avoid, practice drills
- Validation limits: confidence level and missing evidence
5. Check the Dashboard
/crush-dashboard
Shows all 8 state dimensions with current values and recent events.
6. Run a Postmortem
/crush-postmortem
Get a complete diagnostic report:
- Frame collapse points — where things went wrong
- Attraction peaks — what you did right
- Defense triggers — what made them put up walls
- Narrative summary with actionable insights
7. Let Go
/let-go demo
When you're ready. Deletes the session and gives you a closure message.
8. LLM Configuration
/crush-llm
Shows current LLM configuration. In Claude Code, it auto-detects the platform and uses Claude by default.
/crush-llm sk-your-api-key
Override with a custom OpenAI-compatible API key for dialogue analysis.
The 5-Layer Persona
Every persona is built from five layers. You can configure any layer in /custom-crush:
| Layer | Field | Example |
|---|
| Hard Rules | Topics off-limits, reply speed, ghost probability | "topics_off_limits": ["前任", "体重"] |
| Identity | MBTI, Big Five, age, values, insecurities | "mbti": "INFJ", "core_values": ["真诚"] |
| Expression | Signature phrases, emoji style, humor | "signature_phrases": ["笑死", "确实"] |
| Emotional | Attachment style, love language, conflict pattern | "attachment_style": "Fearful_Avoidant" |
| Relational | Stage, shared history, inside jokes, power dynamic | "relationship_stage": "talking" |
Memory System
Crush.skill uses a 3-tier memory architecture:
- SQLite long-term memory — persistent, source-of-truth for all sessions
- Optional mem0 semantic memory — enable with
CRUSH_MEMORY_BACKEND=mem0 after installing/configuring mem0ai
- Summary compression + local vector retrieval — automatic compression and lightweight retrieval to keep context manageable
Imported personas, speech fingerprints, inside jokes, imported chat episodes, state snapshots, and summaries auto-load when you re-use a session ID. No manual save/load needed.
Platform Detection
The engine auto-detects which platform it's running on:
- Claude Code — uses Claude's built-in LLM for dialogue analysis
- OpenClaw — uses platform default model
- QwenPaw / WorkBuddy — falls back to local analysis (or configure with
/crush-llm)
- Generic — works anywhere with Python 3.10+
Environment
No manual setup needed. On first run, the engine auto-installs pyyaml. mem0 is optional; set CRUSH_AUTO_INSTALL_MEM0=1 only if you want that optional semantic backend.
For LLM-powered analysis (higher accuracy), use /crush-llm [api_key].