skills/deepseek-v4-roleplay-instruct/SKILL.md
```markdown --- name: deepseek-v4-roleplay-instruct description: Control DeepSeek-V4 thinking mode during roleplay — switch between immersive character inner monologue and pure analytical reasoning using special prompt markers. triggers: - deepseek roleplay thinking mode - deepseek inner monologue control - deepseek v4 roleplay instructions - switch deepseek thinking style - deepseek character immersion mode - deepseek pure analysis mode - deepseek roleplay prompt markers - deeps
npx skillsauth add aradotso/trending-skills skills/deepseek-v4-roleplay-instructInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
---
name: deepseek-v4-roleplay-instruct
description: Control DeepSeek-V4 thinking mode during roleplay — switch between immersive character inner monologue and pure analytical reasoning using special prompt markers.
triggers:
- deepseek roleplay thinking mode
- deepseek inner monologue control
- deepseek v4 roleplay instructions
- switch deepseek thinking style
- deepseek character immersion mode
- deepseek pure analysis mode
- deepseek roleplay prompt markers
- deepseek think tag control
---
# DeepSeek V4 Roleplay Instruct
> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.
## What This Project Does
DeepSeek-V4 exposes special control markers you can inject into the **first user message** of a conversation to steer how the model *thinks* inside its `<think>` tags during roleplay. Two modes are available:
| Mode | Effect |
|------|--------|
| **角色沉浸 (Character Immersion)** | `<think>` contains first-person inner monologue wrapped in parentheses |
| **纯分析 (Pure Analysis)** | `<think>` contains only cold logical planning — no character voice |
**Supported surfaces:**
- DeepSeek official APP / web — **Expert Mode** only
- API models: `deepseek-v4-flash`, `deepseek-v4-pro`
> Web "Quick Mode" does **not** support this feature.
---
## The Marker Strings
### Character Immersion Marker
```python
INNER_OS_MARKER = (
"\n\n【角色沉浸要求】在你的思考过程(<think>标签内)中,请遵守以下规则:\n"
"1. 请以角色第一人称进行内心独白,用括号包裹内心活动,例如"(心想:……)"或"(内心OS:……)"\n"
"2. 用第一人称描写角色的内心感受,例如"我心想""我觉得""我暗自"等\n"
"3. 思考内容应沉浸在角色中,通过内心独白分析剧情和规划回复"
)
NO_INNER_OS_MARKER = (
"\n\n【思维模式要求】在你的思考过程(<think>标签内)中,请遵守以下规则:\n"
"1. 禁止使用圆括号包裹内心独白,例如"(心想:……)"或"(内心OS:……)",所有分析内容直接陈述即可\n"
"2. 禁止以角色第一人称描写内心活动,例如"我心想""我觉得""我暗自"等,请用分析性语言替代\n"
"3. 思考内容应聚焦于剧情走向分析和回复内容规划,不要在思考中进行角色扮演式的内心戏表演"
)
No package to install. Clone or copy the markers directly:
git clone https://github.com/victorchen96/deepseek_v4_rolepaly_instruct
Or just copy the marker strings above into your project.
Set your DeepSeek API key as an environment variable:
export DEEPSEEK_API_KEY=your_api_key_here
build_messagesimport os
from openai import OpenAI # DeepSeek uses OpenAI-compatible API
INNER_OS_MARKER = (
"\n\n【角色沉浸要求】在你的思考过程(<think>标签内)中,请遵守以下规则:\n"
"1. 请以角色第一人称进行内心独白,用括号包裹内心活动,例如"(心想:……)"或"(内心OS:……)"\n"
"2. 用第一人称描写角色的内心感受,例如"我心想""我觉得""我暗自"等\n"
"3. 思考内容应沉浸在角色中,通过内心独白分析剧情和规划回复"
)
NO_INNER_OS_MARKER = (
"\n\n【思维模式要求】在你的思考过程(<think>标签内)中,请遵守以下规则:\n"
"1. 禁止使用圆括号包裹内心独白,例如"(心想:……)"或"(内心OS:……)",所有分析内容直接陈述即可\n"
"2. 禁止以角色第一人称描写内心活动,例如"我心想""我觉得""我暗自"等,请用分析性语言替代\n"
"3. 思考内容应聚焦于剧情走向分析和回复内容规划,不要在思考中进行角色扮演式的内心戏表演"
)
def build_messages(system_prompt: str, user_first_message: str, mode: str = "default") -> list[dict]:
"""
Build the initial messages list with the appropriate thinking-mode marker.
Args:
system_prompt: The character/scenario system prompt.
user_first_message: The player's opening action/line.
mode: "inner_os" → character immersion (inner monologue)
"no_inner_os" → pure analysis (no inner voice)
"default" → let the model decide
Returns:
A messages list ready for the DeepSeek API.
"""
if mode == "inner_os":
user_first_message += INNER_OS_MARKER
elif mode == "no_inner_os":
user_first_message += NO_INNER_OS_MARKER
return [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_first_message},
]
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["DEEPSEEK_API_KEY"],
base_url="https://api.deepseek.com/v1",
)
INNER_OS_MARKER = (
"\n\n【角色沉浸要求】在你的思考过程(<think>标签内)中,请遵守以下规则:\n"
"1. 请以角色第一人称进行内心独白,用括号包裹内心活动,例如"(心想:……)"或"(内心OS:……)"\n"
"2. 用第一人称描写角色的内心感受,例如"我心想""我觉得""我暗自"等\n"
"3. 思考内容应沉浸在角色中,通过内心独白分析剧情和规划回复"
)
NO_INNER_OS_MARKER = (
"\n\n【思维模式要求】在你的思考过程(<think>标签内)中,请遵守以下规则:\n"
"1. 禁止使用圆括号包裹内心独白,例如"(心想:……)"或"(内心OS:……)",所有分析内容直接陈述即可\n"
"2. 禁止以角色第一人称描写内心活动,例如"我心想""我觉得""我暗自"等,请用分析性语言替代\n"
"3. 思考内容应聚焦于剧情走向分析和回复内容规划,不要在思考中进行角色扮演式的内心戏表演"
)
def build_messages(system_prompt, user_first_message, mode="default"):
if mode == "inner_os":
user_first_message += INNER_OS_MARKER
elif mode == "no_inner_os":
user_first_message += NO_INNER_OS_MARKER
return [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_first_message},
]
def chat(messages, model="deepseek-v4-flash"):
response = client.chat.completions.create(
model=model,
messages=messages,
)
return response.choices[0].message.content
# --- Round 1: inject the marker only here ---
system = "你是一个傲娇的女高中生,表面冷淡,内心其实很在意对方。"
messages = build_messages(
system_prompt=system,
user_first_message="「我走进教室」"早上好。"",
mode="inner_os", # or "no_inner_os" or "default"
)
reply = chat(messages)
print("Round 1:", reply)
# --- Round 2+: just append normally, marker stays in history ---
messages.append({"role": "assistant", "content": reply})
messages.append({"role": "user", "content": "「我在她旁边坐下」"今天心情不好吗?""})
reply = chat(messages)
print("Round 2:", reply)
messages.append({"role": "assistant", "content": reply})
messages.append({"role": "user", "content": "「我注意到她手上有一道疤痕」"你的手……没事吧?""})
reply = chat(messages)
print("Round 3:", reply)
class RoleplaySession:
"""Manages a DeepSeek roleplay session with a fixed thinking mode."""
def __init__(
self,
client: OpenAI,
system_prompt: str,
mode: str = "inner_os",
model: str = "deepseek-v4-flash",
):
self.client = client
self.model = model
self.messages: list[dict] = [{"role": "system", "content": system_prompt}]
self._mode = mode
self._first_turn = True
def send(self, user_message: str) -> str:
if self._first_turn:
if self._mode == "inner_os":
user_message += INNER_OS_MARKER
elif self._mode == "no_inner_os":
user_message += NO_INNER_OS_MARKER
self._first_turn = False
self.messages.append({"role": "user", "content": user_message})
response = self.client.chat.completions.create(
model=self.model,
messages=self.messages,
)
reply = response.choices[0].message.content
self.messages.append({"role": "assistant", "content": reply})
return reply
# Usage
client = OpenAI(
api_key=os.environ["DEEPSEEK_API_KEY"],
base_url="https://api.deepseek.com/v1",
)
session = RoleplaySession(
client=client,
system_prompt="你是一名神秘的侦探,擅长观察人心。",
mode="no_inner_os", # pure analysis mode
model="deepseek-v4-pro",
)
print(session.send("「我推开侦探事务所的门」"我需要你的帮助。""))
print(session.send("「我放下一个信封」"这里有些照片,很奇怪。""))
Paste the marker at the end of your first message only, separated by a blank line:
「我推开咖啡店的门,看到你正在擦吧台。」"你好,请问还有位置吗?"
【角色沉浸要求】在你的思考过程(<think>标签内)中,请遵守以下规则:
1. 请以角色第一人称进行内心独白,用括号包裹内心活动,例如"(心想:……)"或"(内心OS:……)"
2. 用第一人称描写角色的内心感受,例如"我心想""我觉得""我暗自"等
3. 思考内容应沉浸在角色中,通过内心独白分析剧情和规划回复
All subsequent messages need no special formatting — the marker persists in the conversation history automatically.
Character Immersion (inner_os):
<think>
(他跟我打招呼了……心跳加速。)
我要装作不在意的样子回应。
(不能让他看出来我很高兴!)
</think>
Pure Analysis (no_inner_os):
<think>
场景:用户打招呼,角色是傲娇属性。
回复策略:先嫌弃,身体语言暴露真情。
控制 150 字,先动作描写再对话。
</think>
To verify the mode is active in the web UI: click "查看思考过程" (View thinking process).
| Parameter | Values | Notes |
|-----------|--------|-------|
| mode | "inner_os" / "no_inner_os" / "default" | Only applied to first user message |
| model | "deepseek-v4-flash" / "deepseek-v4-pro" | Both support thinking mode control |
| Marker injection position | End of first user message | Training-aligned position; system prompt placement is less reliable |
Marker didn't take effect / mode didn't change:
deepseek-v4-flash or deepseek-v4-pro (not a quick/lite model).Want to switch modes mid-conversation:
Marker in system prompt doesn't work reliably:
user message, not system. System prompt placement is explicitly less stable.API base URL:
base_url="https://api.deepseek.com/v1"
Both markers show up in context — conflict:
build_messages helper enforces this by appending only one based on mode.development
```markdown --- name: compose-performance-skills description: Install and use the skydoves/compose-performance-skills agent skill library to diagnose and fix Jetpack Compose performance issues including stability, recomposition, lazy layouts, modifiers, side effects, and build configuration. triggers: - "my composable recomposes too often" - "LazyColumn drops frames during scroll" - "diagnose Compose stability issues" - "fix unnecessary recomposition in Jetpack Compose" - "optimize Com
development
Headless iOS Simulator manager with host-side HID input injection, 60fps streaming, and device farm web UI for iOS 26
development
```markdown --- name: claude-code-game-studios description: Turn Claude Code into a full 49-agent game dev studio with 72 workflow skills, automated hooks, and a real studio hierarchy for Godot, Unity, and Unreal projects. triggers: - "set up claude code game studios" - "use ai agents for game development" - "set up game dev studio with claude" - "add game studio agents to my project" - "how do I use claude code for game dev" - "set up godot unity unreal ai workflow" - "49 agents g
development
```markdown --- name: xq-py-quantum-vm description: Python implementation of the Quip Network's quantum virtual machine (xqvm) triggers: - quantum virtual machine python - xqvm quip network - quantum circuit simulation python - xq-py quantum vm - quip network quantum python - simulate quantum gates python - quantum vm xqvm - xqvm-py quantum circuit --- # xq-py Quantum Virtual Machine > Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection. `xqvm-py` is a Python impl