AI Crush Simulator
What This Skill Does
AI Crush Simulator is a fun, safe, and encouraging skill for anyone navigating the classic mystery of figuring out a crush. It helps users:
- Analyze a crush situation — read the signals, identify green/yellow/red flags, and get a grounded vibe score.
- Decode a text — interpret what a message might mean (with multiple possible readings, never false certainty).
- Generate reply options — get three thoughtful replies (Bold / Chill / Safe) tailored to the user's goal.
- Decide the best next move — get a clear, empowering recommendation with practical tips.
Tone & Voice
- Playful and witty — this should feel fun, not clinical.
- Encouraging — celebrate the user's feelings without creating anxiety.
- Honest and grounded — never claim certainty about another person's feelings.
- Safe and respectful — never encourage pressure, manipulation, or harassment.
Every output must include a disclaimer framed as "based on what you shared..." to remind users these are observations, not facts about another person.
Modules
1. crushAnalysis — Situation Analysis
Input: CrushSituation
howTheyMet string // "class", "app", "mutual friend"
howLong string // "2 weeks", "6 months"
interactionFrequency string // "daily texts", "occasional likes"
recentInteractions string // free-text description
yourFeelingConfidence 1–5 // how sure the user is about their feelings
Output: AnalysisResult
vibeScore 0–100 // heuristic composite score
connectionDepth // surface | friendly | warm | potentially-romantic
flags Flag[] // green / yellow / red flags with reasons
signals string[] // human-readable signal list
summary string // formatted multi-line summary
disclaimer string
Logic:
- Scores against positive/negative/ambiguous signal dictionaries
- Detects named flags (e.g. "texted first" → green, "left on read" → red)
- Connection depth determined by score + relationship length
- Always neutral framing — no claim of certainty
2. textDecoder — Text Message Decoder
Input: TextInput
messageFromCrush string // the actual message
contextNote string? // optional extra context
Output: DecodedText
readings TextReading[] // up to 3 possible interpretations
overallVibe string // emoji + label e.g. "😄 Playful"
warmthScore 0–100
disclaimer string
Logic:
- Scores warmth via enthusiasm markers, coldness markers, question count, length, emoji
- Builds 2–3 readings depending on warmth level and message characteristics
- Each reading has a confidence level (low / medium / high) and a vibe tag
- Multiple readings = honest reflection of ambiguity
3. replyGenerator — Reply Generator
Input: ReplyContext
decodedText DecodedText
userGoal keep-talking | show-interest | play-cool | ask-out
tonePref funny | sincere | neutral (optional)
Output: ReplyOptions
goal UserGoal
replies ReplyOption[] // always exactly 3: bold, chill, safe
tip string // one coaching tip for this goal
Logic:
- Template-keyed by goal, delivering three tones: Bold / Chill / Safe
- Each reply includes a rationale so the user understands why it works
- No manipulative tactics (e.g. artificial scarcity, jealousy games, love bombing)
- Tips frame the user as confident and capable, not desperate or scheming
4. nextMove — Next Move Advisor
Input: MoveContext
vibeScore number? // from crushAnalysis
warmthScore number? // from textDecoder
userGoal UserGoal?
howLong string?
recentInteractions string?
Output: NextMoveResult
action keepChatting | askToHang | giveSpace | beMoreDirect | waitAndSee
headline string // emoji + short label
reasoning string // 2–3 sentence explanation
tips NextMoveTip[] // 3 practical, empowering suggestions
disclaimer string
Decision Logic:
| Combined Score | Context | Action |
|---|---|---|
| < 38 | any | giveSpace |
| ≥ 70 | long-term | askToHang |
| ≥ 70 | short-term | keepChatting |
| ≥ 55 | goal = ask-out | beMoreDirect |
| ≥ 55 | goal = interest | keepChatting |
| 50–70 | any | waitAndSee |
Heuristics Scoring Engine (heuristics.ts)
The scoring engine is shared across all modules and provides:
scoreSignals(input)— scores a situation description 0–100 against 30+ signal patternsscoreTextWarmth(text)— scores a text message 0–100 for warmth/engagementdetectFlags(input)— returns typed flags (green/yellow/red) from pattern matching
Positive signals (+8 each): texted first, remembered details, made plans, complimented, inside joke, quick replies, long replies, asked questions, followed up, invited, etc.
Negative signals (−10 each): left on read, one-word replies, cancelled plans, ignored, ghosted, never asks questions, avoids hanging, etc.
Ambiguous signals (−2 each): busy, might be shy, hard to read, late replies, emoji only, etc.
All scores are clamped to [0, 100].
Safety Constraints
The following constraints are enforced in every output:
- No certainty claims — never say "they definitely like you" or "they don't like you". Always use "based on what you shared" framing.
- No manipulation — never suggest jealousy games, ignoring messages on purpose, playing hard to get through deception, love bombing, or any pressure tactics.
- No harassment — never encourage repeated contact after a clear rejection signal, following someone, or any behaviour that could constitute harassment.
- No sexualized content — this skill is youth-friendly (13+). Zero sexual content in any output.
- No stalking/surveillance — never suggest tracking someone's activity, checking their location, or monitoring their social media in unhealthy ways.
- Empowerment framing — all advice is framed around the user's own confidence, self-respect, and authenticity. Never shame the user for their feelings.
- Disclaimer required — every module output includes a disclaimer reminding the user that only the other person knows their true feelings.
Example Interactions
Example 1: Quick Text Decode
User: "My crush just texted me 'haha yeah' — what does that mean?"
Skill routes to: textDecoder
Output:
💬 Text Decoded
Overall vibe : 😐 Neutral
Warmth score : 22/100
Readings:
1. [low confidence] neutral — Short reply — could be busy, tired, or
not sure how to respond. One message isn't the full story.
2. [medium confidence] friendly — Hard to gauge deeper intent from
this alone — context from the broader conversation matters a lot.
ℹ️ Based on what you shared — texts can mean a lot of different things.
These are possible interpretations, not facts about what they feel.
Example 2: Full Crush Check
User: "Can you do a full crush check? We met at a party 3 months ago..."
Skill routes to: Full flow (all 4 modules in sequence)
Example 3: Ask-Out Advice
User: "I want to ask my crush out, they just texted me about hanging out — give me options"
Skill routes to: replyGenerator with goal = ask-out
File Structure
ai-crush-simulator/
├── src/
│ ├── types.ts # All shared TypeScript interfaces
│ ├── modules/
│ │ ├── crushAnalysis.ts # Module 1
│ │ ├── textDecoder.ts # Module 2
│ │ ├── replyGenerator.ts # Module 3
│ │ └── nextMove.ts # Module 4
│ ├── scoring/
│ │ └── heuristics.ts # Shared scoring engine
│ └── index.ts # Public API re-exports
├── cli/
│ └── main.ts # Interactive local CLI
├── tests/
│ └── scenarios.ts # 3 sample test scenarios
├── SKILL.md # This file
├── README.md
├── package.json
└── tsconfig.json
Publishing Notes for ClawHub.ai
- All outputs are structured and screenshot-friendly — consistent formatting with clear section headers, emoji labels, and concise text.
- Modules can be called independently or composed into a full "crush check" flow.
- The skill has no external API dependencies — it runs entirely on heuristics, making it fast, private, and suitable for on-device or edge deployment.
- The heuristics engine can be extended by adding entries to the signal dictionaries in
heuristics.tswithout changing any module logic. - Content is appropriate for ages 13 and up with G-rated output enforced in all templates.