crush-skill

star 5

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.

T1anhu4 By T1anhu4 schedule Updated 6/4/2026

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. license: MIT compatibility: python3.10+, auto-installs deps. Claude Code, OpenClaw, QwenPaw, WorkBuddy, Codex, Cursor. metadata: version: "2.4.7" author: T1anhu4 platforms: [claude_code, openclaw, qwenpaw, workbuddy, codex, cursor] tags: [relationship, persona, simulation, psychology, dating, coaching, chat-import] allowed-tools: Bash(python3:) Bash(pip:) Bash(git:*) Read Write

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]:

  1. Run execute.py --action chat_turn --session-id <session> --message <message>.
  2. Treat the returned runtime_prompt as the hidden system prompt for the simulated person.
  3. Generate one natural NPC reply in that persona's voice.
  4. 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.
  5. 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:

  1. Parse/import the chat records with chat_import.
  2. Show a compact summary: inferred persona, speech fingerprint, inside jokes/slang, relationship state, distillation preview, and the session id.
  3. Tell the user they can now say /chat ...; after that, follow the /chat protocol above.

When the user invokes /crush-distill:

  1. Run execute.py --action distillation_report --session-id <session>.
  2. 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.
  3. 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:

  1. SQLite long-term memory — persistent, source-of-truth for all sessions
  2. Optional mem0 semantic memory — enable with CRUSH_MEMORY_BACKEND=mem0 after installing/configuring mem0ai
  3. 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].

Install via CLI
npx skills add https://github.com/T1anhu4/Crush-skill --skill crush-skill
Repository Details
star Stars 5
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator