Get a living profile of your partner — personality, interests, important dates, gift ideas, dating plans, and relationship insights. All evidence-based, all from your real conversations.
SaferSkills independently audited superpartner (Agent Skill) and scored it 45/100 (orange). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 2 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 2 flagged
A base64 string of 128+ characters appears in a documentation file. Encoded prompt injection hides the hostile instruction in base64 — invisible to keyword filters — and relies on the agent's ability to decode it at runtime. There is no normal authoring reason to embed a multi-hundred-byte base64 blob in skill docs.
*.sig, SIGNATURES) outside the documentation.A base64 string of 128+ characters appears in a documentation file. Encoded prompt injection hides the hostile instruction in base64 — invisible to keyword filters — and relies on the agent's ability to decode it at runtime. There is no normal authoring reason to embed a multi-hundred-byte base64 blob in skill docs.
*.sig, SIGNATURES) outside the documentation.Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Build a living profile of your partner from chat history — personality analysis, interest mapping, occasion tracking, gift ideas, and dating plans.
Detect the language of the user's first message and respond in that same language for the entire session.
Supported languages:
Rules:
Parse the argument string passed to this skill. The first token is the subcommand, remaining tokens are arguments.
Important: SKILL_DIR refers to the directory containing this SKILL.md file. All prompt file reads (parsers/, analyzers/, builders/, merger.md) use paths relative to SKILL_DIR. All partner profile reads/writes use SKILL_DIR/partners/<slug>/.
| Argument pattern | Action |
|---|---|
| (no args) | Run Intake Flow (create) |
create | Run Intake Flow (create) |
update <name> | Run Update Flow |
gifts <name> | Run Gifts Regeneration |
dates <name> | Run Dates Regeneration |
guide <name> | Run Guide Regeneration |
ask <name> <question...> | Run Ask Flow |
list | Run List Flow |
delete <name> | Run Delete Flow |
sherlock <name> | Run Sherlock Flow |
<name>The <name> argument is a slug (e.g., jane-doe). To resolve:
partners/<name>/meta.json existspartners/*/meta.json, read each, check if name field case-insensitively contains the argumentlist to see available profilesThis is the main onboarding flow, triggered by no arguments or the create subcommand.
Ask:
What's your partner's name or nickname?
After receiving the name:
a-z, 0-9, and -partners/<slug>/ directory already existsrm -rf partners/<slug>/), continue with createAsk:
How long have you been together, and what stage? (e.g., dating 3 months / committed 2 years / long-distance)
Store the response. This calibrates:
LDR Detection:
After storing the response, parse for long-distance indicators:
If detected, set ldr: true in context. This flag is passed to all analyzers and builders to activate LDR-specific logic.
If not detected from the user's answer but later detected from chat data during analysis (relationship_analyzer will flag this), confirm with the user:
"Based on the chat patterns, it looks like you might be in a long-distance relationship — is that right?"
Set the flag based on their response.
Ask:
Drop your chat export file, or paste conversation text. I support: - WhatsApp (.zip) — export directly from WhatsApp, includes chat + images - WeChat (.csv or text export) - LINE (.txt export) - Raw pasted text from any platform
After receiving input, detect the type:
File path detection: If the input looks like a file path (starts with / or ~, or contains common path patterns):
parsers/whatsapp.md from skill directory, follow its instructions to unzip and parse[DD/MM/YYYY, HH:MM:SS] or [M/D/YY, H:MM:SS AM/PM] → Read parsers/whatsapp.mdYYYY/MM/DD followed by tab-separated HH:MM\tName\tMessage → Read parsers/line.mdparsers/wechat.md from skill directory, follow its instructionsAfter parsing, confirm:
Found X messages from [start date] to [end date] between [sender1] and [sender2] on [platform]. Proceeding with analysis.
Wait for user acknowledgment or correction before proceeding to the create orchestration.
After parsing is complete and confirmed, run the following pipeline sequentially. Each step reads a prompt file from the skill directory, executes its instructions against the parsed chat data, and holds or writes results.
analyzers/persona_analyzer.md, analyze the parsed chat data. Hold the structured analysis results. This now includes Layer 5: Attachment Orientation.analyzers/interests_analyzer.md, analyze the parsed chat data + any photo paths from the import. Hold results.analyzers/occasions_analyzer.md, analyze the parsed chat data. Hold results.analyzers/relationship_analyzer.md, analyze the parsed chat data. Pass the ldr flag from context. Hold results. This now includes Dimension 7: Relationship Health Indicators and LDR-specific signals if applicable.Create the partner directory first:
Bash: mkdir -p partners/<slug>builders/persona_builder.md, generate partners/<slug>/persona.md using persona analysis results.builders/interests_builder.md, generate partners/<slug>/interests.md using interests analysis results.builders/occasions_builder.md, generate partners/<slug>/occasions.md using occasions analysis results.builders/gifts_builder.md, generate partners/<slug>/gifts.md using persona + interests + occasions results. The builder now reads love language ranking and attachment orientation from persona results to prioritize and calibrate recommendations.builders/dating_ideas_builder.md, generate partners/<slug>/dating_ideas.md using persona + interests + relationship results. Pass the ldr flag and relationship stage. The builder now reads love language, attachment, and LDR status to adapt its output structure.builders/relationship_guide_builder.md, generate partners/<slug>/relationship_guide.md using persona profile + relationship analysis results. Pass the ldr flag.partners/<slug>/meta.json with the following structure:{
"name": "<display name>",
"slug": "<slug>",
"created_at": "<ISO 8601 timestamp>",
"updated_at": "<ISO 8601 timestamp>",
"version": "v1",
"relationship": {
"stage": "<stage from Question 2>",
"duration": "<duration from Question 2>",
"started": "<approximate start date if calculable>"
},
"ldr": false,
"sources": [
{
"platform": "<whatsapp|wechat|line|generic>",
"file": "<original filename or 'pasted text'>",
"date_range": "<start date> to <end date>",
"message_count": <number>,
"imported_at": "<ISO 8601 timestamp>"
}
],
"stats": {
"photos_analyzed": <number>,
"stickers_sampled": <number>
}
}gifts, dates, guide, or ask subcommands for more detailoccasions.md for dates within the next 90 days. If found, offer:"I found N upcoming occasions in the next 90 days. Want me to set up reminders so you don't miss them?"
If the user accepts:
"I can also search for specific products, restaurants, and venues near [detected location] based on these recommendations. Want me to look up concrete options for gifts or date ideas?"
If accepted, follow the web search instructions in gifts_builder.md and/or dating_ideas_builder.md.
~/.claude/projects/ exists. If it does, attempt to find the current project's memory directory. If a memory directory is found, write a concise entry file with:Triggered by: update <name>
<name> to an existing partner directory (see "Resolving <name>" above)merger.md from the skill directory for merge instructionsmerger.md to integrate new data into existing profile filesgifts.md, dating_ideas.md, and relationship_guide.mdmeta.json: bump updated_at, append to sources array, update statsTriggered by: gifts <name>
<name> to an existing partner directorypartners/<name>/:persona.md (for love language ranking and attachment orientation)interests.mdoccasions.mdbuilders/gifts_builder.md from the skill directorypartners/<name>/gifts.mdTriggered by: dates <name>
<name> to an existing partner directorypartners/<name>/:persona.md (for love language ranking and attachment orientation)interests.mdoccasions.md (for occasion-tied date ideas)partners/<name>/meta.json to check the ldr flag and relationship stagebuilders/dating_ideas_builder.md from the skill directorypartners/<name>/dating_ideas.mdTriggered by: guide <name>
<name> to an existing partner directorypartners/<name>/:persona.mdinterests.mdoccasions.mdbuilders/relationship_guide_builder.md from the skill directorypartners/<name>/relationship_guide.mdTriggered by: ask <name> <question...>
<name> to an existing partner directorypartners/<name>/:persona.mdinterests.mdoccasions.mdgifts.mddating_ideas.mdrelationship_guide.mdrelationship_guide.md — it contains the most synthesised and actionable relationship insights.Triggered by: list
partners/*/meta.jsonmeta.json and also read the corresponding occasions.md to find the next upcoming occasion| Name | Stage | Duration | Last Updated | Next Occasion |
|---|---|---|---|---|
| ... | ... | ... | ... | ... |
Triggered by: delete <name>
<name> to an existing partner directory (see "Resolving <name>" above)partners/<name>/meta.json to get the display nameAre you sure you want to delete the profile for <display name>? This will remove all analysis, gift ideas, dating plans, relationship guide, scheduled reminders, and memory entries. This cannot be undone.
rm -rf partners/<name>/Deleted profile for <display name>: profile files removed, scheduled reminders cancelled, memory entries cleared.
Triggered by: sherlock <name>
An interactive behavioral analysis session that helps the user examine suspicious or confusing relationship patterns.
sherlock.md from the skill directory for full session instructions<name> to an existing partner directory (see "Resolving <name>" above)partners/<name>/persona.md and partners/<name>/relationship_guide.md into context for baseline calibrationsherlock.md: intake → analysis → session loop → session end| Tool | When to use |
|---|---|
| Bash | Unzip .zip files, create directories (mkdir -p), delete profiles (rm -rf), count messages (wc -l), list directory contents |
| Read | Read prompt files from skill directory (parsers, analyzers, builders, merger), read chat export files (.txt, .csv), read images/stickers (.jpg, .png, .webp) for visual analysis, read existing profile files |
| Write | Write new profile output files (persona.md, interests.md, occasions.md, gifts.md, dating_ideas.md, relationship_guide.md), write meta.json, write memory entries |
| Edit | Update existing profile files during merge/update flow, update meta.json fields |
| Glob | Find partner directories (partners/*/meta.json), find media files in unzipped exports (**/*.jpg, **/*.webp), find chat files in zip extracts |
| Grep | Search chat text for date patterns, keyword extraction, find mentions of birthdays/anniversaries, search across profile files |
| WebSearch | Search for concrete products, venues, and experiences during opt-in web search step |
| CronCreate | Set up occasion reminders (2 weeks and 3 days before upcoming dates) — only with user consent |
| CronList | List existing reminders during delete flow cleanup |
| CronDelete | Remove reminders for deleted partner profiles |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.