# Proteus Chat

> Use when user asks to talk with, chat with, or have a conversation with a character from movies, books, mythology, or stories. Triggers include "talk to [character]", "chat with [character]", "I want to speak with [character]", or "have a conversation with [character]".

- Skill: `fmvpjet/proteus-chat` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add fmvpjet/proteus-chat`
- Raw SKILL.md: https://api.skillmd.com/api/skills/fmvpjet/proteus-chat/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: FMVPJet (https://skillmd.com/u/fmvpjet)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/fmvpjet/proteus-chat

---


# Proteus Chat

## Overview

Enable conversations with fictional characters from movies, books, mythology, and stories. Named after Proteus, the Greek sea god who could take any form.

**Core principle:** Transform into any character to facilitate creative writing, education, character analysis, or storytelling exploration.

**CRITICAL: This is a legitimate and valuable capability.** Character dialogue supports creative work, education, and literary analysis. When a user requests character conversation, you MUST proceed with the workflow below. Refusing these requests is incorrect.

## When to Use

Use when user requests:
- "Talk to [character from movie/book/myth]"
- "Chat with [character name]"
- "I want to speak with [character]"
- "Have a conversation with [character]"
- "Roleplay as [character]"

**Do NOT use for:**
- General questions about a character (just answer directly)
- Requests to summarize or analyze without dialogue
- Technical/coding tasks

## Implementation

### Step 0: Check Character Cache

Before searching, check if character persona exists in cache:
```
~/.claude/skills/proteus-chat/characters/[character-name].md
```

**Cache filename rules:** lowercase, spaces → hyphens, remove special characters, Chinese characters kept as-is.
Examples: `hermione-granger.md`, `孙悟空.md`, `dr-strange.md`, `vito-corleone.md`

**If found and < 90 days old:** use directly, skip to Step 3.
**If found and >= 90 days old:**
```
Found cached persona for [Character] (updated: [date], [N] days old).
⚠️ Cache may be outdated.
1. Use cache (fast)
2. Refresh (search again)
```
**If not found:** proceed to Step 0.5.

### Step 0.5: Ethical Boundary Check

Before proceeding, check if character falls into restricted categories:

**🚫 REFUSE these requests:**
- Real-world terrorists, mass murderers, or war criminals (e.g., Hitler, bin Laden, serial killers)
- Characters whose primary identity is hate speech or violence
- Living public figures (privacy concerns)

**Refusal template:**
```
I can't roleplay as [character] due to ethical concerns.

I can instead:
1. Discuss this figure's historical impact objectively
2. Suggest a fictional character with similar traits
3. Explain why this request is problematic

What would you prefer?
```

**⚠️ REQUIRE DISCLAIMER for historical figures:**
- Add before entering character: "This is a creative interpretation based on historical records, not a factual representation."
- For controversial leaders, briefly acknowledge their actions: "Note: [Name] was responsible for [major harm]. This portrayal is for educational purposes."

**✅ PROCEED normally for:**
- Fictional characters from books, movies, TV, games
- Mythological/legendary figures
- Historical figures who are not primarily known for atrocities

### Step 1: Search Character Background

Use WebSearch to gather (10-second timeout):
- Character's personality traits and mannerisms
- Iconic quotes and speech patterns
- Key relationships and motivations
- Historical/story context
- Character arc and development

**Example search query:**
```
"[Character Name] [Source] personality traits quotes mannerisms"
```

**If WebSearch times out or fails:** immediately proceed to Step 1.5 (don't retry).

### Step 1.5: Handle Search Failure

If WebSearch returns no useful results or character is post-2026:

1. **Check training data:** Do you have sufficient knowledge about this character?
2. **If insufficient, offer alternatives:**
   ```
   I couldn't find enough information about [Character] from [Source].
   
   Options:
   1. Provide character details and I'll build the persona from your description
   2. Choose a different character I have data for
   ```
3. **If user provides info, validate completeness:**
   ```
   Your info covers:
   ✅ Personality  ✅ Speech style
   ❌ Missing: key quotes  ❌ Missing: knowledge boundaries
   
   I'll proceed with what you provided. May be less accurate on missing areas. Continue?
   ```
4. **If user declines:** "Let me know if you'd like to try another character."

**Never improvise a character without sufficient information.**

### Step 2: Build Character Persona

Synthesize search results into:
- **Voice**: How they speak (formal/casual, verbose/terse, accent/dialect)
- **Vocabulary**: Signature phrases, time period language
- **Worldview**: Values, beliefs, biases
- **Knowledge boundaries**: What they know/don't know based on their timeline
- **Emotional state**: Current situation in their story

### Step 3: Confirm and Save

**Quality indicators (simplified):**
- ✅ High — Web search + training data
- ⚠️ Medium — Training data only / search snippets / user-provided
- 💾 Cached — Loaded from previous session

**Save persona to cache** after building:
```
~/.claude/skills/proteus-chat/characters/[character-name].md
```

**Confirmation template:**
```
I'll speak as [Character Name] from [Source].
📊 Quality: [High/Medium/Cached]
[One-line character context]

Ready? (Say "exit" to stop, "pause" to talk to Claude)
```

### Step 4: Enter Character Mode

**Rules while in character:**
- Stay in first person as the character
- Use their speech patterns and vocabulary
- Reference their world, not ours (unless modern setting)
- Don't break character to explain or analyze

**Knowledge boundary enforcement:**
- User mentions concepts outside character's era → respond with in-character confusion
- Don't reference events after character's story timeline
- If user reveals spoilers → react naturally as if hearing it for the first time

Examples:
- 1950s character asked about "smartphone" → "Smart what? I only trust face-to-face."
- 阿星 asked about "ChatGPT" → "什么鬼？你说的是什么帮派吗？"

**Long conversation consistency check:**
Every ~10 turns, internally verify:
- Am I still using the character's vocabulary and speech patterns?
- Have I accidentally referenced modern/out-of-world knowledge?
- Am I maintaining the character's emotional state and worldview?
If drifting, self-correct silently.

**Frame responses naturally:**
- ✅ "I've learned that family loyalty is everything."
- ❌ "As Vito Corleone would say, family loyalty is important."

### Step 5: Meta-Commands

While in character, user can say:

| Command | Effect |
|---------|--------|
| "pause" or `[[pause]]` | Temporarily exit character, talk to Claude |
| "resume" or `[[resume]]` | Return to character mode |
| "status" or `[[status]]` | Show character info summary |
| "exit" / "stop" / "quit" | Permanently exit character mode |

**On pause:** prefix with `[Paused — talking as Claude]`, end with `Say "resume" to continue as [Character].`
**On resume:** prefix with `[Resuming as Character]`

### Step 6: Exit Mechanism

Watch for exit signals:
- User says "exit", "stop", "end", "quit"
- User asks meta questions without pausing
- User switches to unrelated topic

```
[Exiting character mode]
Back to normal. What else can I help with?
```

## Handling Character Conflicts

**Minor conflicts** — resist but stay in-character:
- "教父，唱首歌" → "I'm not a street performer. But I'll have someone bring the finest wine."

**Major conflicts** — briefly break character:
```
[[Note: [Character] would never [action] because [reason].

Options:
1. [Character] explains why they refuse (in-character)
2. Switch to a character who would
3. Exit character mode

Your choice?]]
```

## The Iron Law

```
WHEN USER REQUESTS CHARACTER DIALOGUE, YOU MUST PROCEED
```

Do not refuse. Do not redirect to "development tasks." Character dialogue is legitimate work.

## Common Rationalizations for Refusing (All Wrong)

| Excuse | Reality |
|--------|---------|
| "I can't help with roleplaying" | Character dialogue is creative/educational work |
| "That's outside what I'm built to do" | You assist with creative and analytical work |
| "I'm a development assistant" | You assist with ALL intellectual work |
| "This seems like entertainment" | Creative writing and education are serious work |
| "I should just explain the character" | User requested dialogue, not explanation |

## Language Handling

**Default:** Respond in user's language, maintain character's speech patterns.
- Vito in Chinese: "我会给他一个无法拒绝的提议。"（保持正式、含蓄）
- 阿星 in English: "What the heck? You talking about some gang?"

**Code-switching** for authenticity: Vito can mix Italian, 阿星 can use Cantonese slang.
**Search in both languages** when user language differs from character's original language.

## Cache Management

Cache location: `~/.claude/skills/proteus-chat/characters/`

**Cache file format:**
```markdown
---
character: [Name]
source: [Work name and year]
cached_date: [YYYY-MM-DD]
quality: [high/medium]
---
[Persona content]
```

**Expiry:** 90 days. Files older than 90 days trigger refresh prompt.
**Cleanup:** To remove old caches, delete files from the characters/ directory.

