内容
<div align="center">
# 克劳德F-我
**通过在克劳德代码中 *聊天* 来控制亲密硬件。**
一款可安装的 [克劳德代码](https://claude.com/claude-code) 插件,将自然语言对话转化为实际设备控制 - 支持开放的 [Buttplug / Intiface](https://buttplug.io) 生态系统(支持 750+ 设备),具有反应式双语言网页控制台、主遥控器和视频(funscript)、游戏和音频模式。**内置模拟器** 允许您在 **无需硬件** 的情况下进行构建和玩耍。
[](https://modelcontextprotocol.io)
[](https://buttplug.io)
[](./LICENSE)
[](https://nodejs.org)
[](https://github.com/mana-am/claude-f-me/stargazers)
[](https://github.com/mana-am/claude-f-me/commits)
<p align="center"><b>英语</b> · <a href="docs/i18n/README.zh-CN.md">简体中文</a> · <a href="docs/i18n/README.zh-TW.md">繁體中文</a> · <a href="docs/i18n/README.ja.md">日本語</a> · <a href="docs/i18n/README.es.md">Español</a> · <a href="docs/i18n/README.fr.md">Français</a></p>
<img src="./docs/pulse-core.gif" alt="claude-f-me Pulse Core 控制台实时反应设备" width="640" />
<br/>
<video src="https://github.com/user-attachments/assets/ca023b51-bb35-4e6a-b4e2-8f9c48acc2bf" controls muted playsinline width="640"></video>
<sub>▶️ <b>市场模式</b> — 输入一个股票代码,感受其实时价格变化为振动(~14s)。</sub>
<sub>“Pulse Core”控制台实时反应 — 球体和极光随着强度呼吸。录制时使用内置模拟器(无需硬件)。</sub>
<p><b><a href="https://f.mana.am/">▶ 在浏览器中尝试实时控制台</a></b> — 真实的 UI,完全可玩,模拟(无需硬件)。 <sub>从 <code>main</code> 发布到 GitHub Pages;渲染完成后 Pages 启用。</sub></p>
</div>
---
> [!IMPORTANT]
> 这控制一个 **真实设备在真实人身上的** 。仅在佩戴者热情且持续同意的情况下使用。保持安全帽清醒,优先选择短持续时间,并将紧急停止按钮放在易于触及的位置。参见 [安全与同意](#-安全与同意)。
<details>
<summary><b>📑 目录</b></summary>
- [是什么](#what-it-is)
- [安装(作为克劳德代码插件)](#install-as-a-claude-code-plugin) · [斜杠命令](#slash-commands)
- [🚀 入门 — 逐步指南](#-getting-started--step-by-step)
- [连接真实设备](#connect-a-real-device)
- [👑 主遥控器](#-master-remote)
- [模式和游戏](#modes--games) — Muse · Personas · Duet · 视频 · 游戏 · 模式 · 音频 · 生物反馈 · 记录
- [📈 市场模式](#-market-mode)
- [🧠 记忆](#-memory) · [📜 场景提示](#-scene-prompts)
- [💬 聊天桥](#-chat-bridges--telegram) — Telegram · Discord · 微信
- [🧑💻 开发者触发器](#-developer-triggers) · [🔌 通用事件 webhook](#-universal-event-webhook)
- [MCP 工具](#mcp-tools) · [配置](#configuration) · [开发](#development)
- [⏱️ 尊重模型和代理速率限制](#️-respecting-model--agent-rate-limits)
- [🩹 故障排除](#-troubleshooting) · [❓ 常见问题](#-faq)
- [🔒 隐私](#-privacy) · [🛟 安全与同意](#-safety--consent)
- [路线图/想法](#roadmap--ideas) · [致谢](#credits) · [许可证](#license)
</details>
## 图库
🎥 **观看控制台实时反应** (或 [**在浏览器中尝试实时控制台 →**](https://f.mana.am/)):
<sub>如果视频无法内联播放,[请在此处打开它](./docs/market-flow.mp4) — 或在顶部查看循环预览。</sub>
| 控制台(英文) | 控制台(中文) | 主遥控器 | 浏览器内演示 |
|---|---|---|---|
| <img src="./docs/console.png" width="230" /> | <img src="./docs/console.zh.png" width="230" /> | <img src="./docs/master.png" width="110" /> | <img src="./docs/demo-browser.png" width="230" /> |
## ▶️ 在克劳德代码、Codex 或任何 MCP 客户端中使用
claude-f-me 是一个标准的 **MCP 服务器** — 通过 **克劳德代码、Codex、Cursor、Cline、克劳德桌面** 或任何支持 MCP 的客户端驱动 - **无需硬件** ;内置模拟器运行所有功能(在 **http://localhost:8731** 处查看)。在 [`examples/`](./examples) 中复制粘贴配置。
**🟣 克劳德代码** — 作为插件安装(一步到位,包括斜杠命令):
```bash
/plugin marketplace add mana-am/claude-f-me
/plugin install claude-f-me@claude-f-me
```
<p align="center"><img src="./docs/claude-code-loop.jpg" alt="克劳德代码会话驱动 claude-f-me — /loop 在计划上运行市场模式,带有 /goal" width="620" /></p>
<sub>真实的克劳德代码会话 — 这里 `/loop` + `/goal` 将市场模式放在计划上以跟踪实时股票代码。任何聊天行或斜杠命令都同样有效。</sub>
**🟢 Codex / Cursor / Cline / 克劳德桌面 / …** — 将客户端指向服务器。最简单的是
`npx` (节点 ≥ 18,无需克隆):
```jsonc
// "mcpServers" 条目(克劳德桌面 / Cursor / Cline / Windsurf)— 参见 examples/mcp.json
"claude-f-me": {
"command": "npx",
"args": ["-y", "github:mana-am/claude-f-me"],
"env": { "CFM_MODE": "simulated" }
}
```
Codex 使用 TOML — 将 [`examples/codex-config.toml`](./examples/codex-config.toml) 放入
`~/.codex/config.toml`。参见 [每个客户端的表格](./examples)。
然后在任何地方都可以通过聊天来控制 — `扫描设备` · `启动边缘游戏` · `编写慢速构建` — 或在克劳德代码中使用斜杠命令,如 `/claude-f-me:play` 、 `:edge` 、 `:morse` 、 `:safeword` 。
> ➡️ 连接真实设备、主遥控器等都在 [入门](#-getting-started--step-by-step) 中。
## 它是什么
```
┌──────────────┐ MCP(stdio) ┌───────────────────────────┐
│ 克劳德代码 │ ───────────────► │ claude-f-me │
└──────────────┘ │ (一个进程) │
┌──────────────┐ WebSocket │ ┌─────────────────────┐ │
│ 网页控制台 │ ◄──────────────► │ │ 设备管理器 │ │ 安全帽 · 看门狗
│ + 主控 │ │ │ 模式控制器 │ │ 模式 · 视频 · 游戏
│ + 二人组 │ │ │ Muse · 人物 │ │ Muse · 人物 · 二人组
└──────────────┘ │ └──────────┬──────────┘ │
└──────────────┼────────────┘
┌───────────┴───────────┐
▼ ▼
Buttplug 后端 模拟后端
→ Intiface → 真实玩具 (预览,无硬件)
```
一个进程既是 **克劳德代码对话的 MCP 服务器** ,又是您看到的 **网页控制台** —
所以聊天和仪表板始终共享相同的设备状态。
> 💞 **适用于任何人 — 单独或一起。** 它驱动按摩棒(例如 The Handy)、可穿戴设备
(We-Vibe、Satisfyer)和 750+ 玩具,所有设备都一样,因此它对 **男人、女人和情侣** 都有效 —
无论您是在自己的设备上玩还是将遥控器交给房间或世界另一端的伴侣。
**🎛️ 控制设备**
- 🎼 **Muse** — 描述一种振动(“一场雷暴”,“我爱你摩尔斯电码”),模型编写一个流畅的触觉乐谱并播放;保存和重放。
- 🥁 **模式** — `脉冲` · `波浪` · `升级` · `戏弄` · `心跳` · `楼梯` · `sos` · `地震` 。
- 🎮 **游戏** — `轮盘赌` · `升级` · `环境` · `边缘` (戏弄和拒绝)· `轮子` ,以及 `game_event` 钩子用于文字冒险。
- 🎵 **音频** — 您的 **麦克风** 或 **选项卡/系统音频** 实时驱动强度。
**🎭 谁在控制**
- 🎭 **人物** — 选择谁在控制(🕯️ 慢速燃烧/作品 · 😈 Brat/GPT-5.5 · 🎼 节拍器 · ⛈️ 风暴 · 🔮 巫师 · 🫶 保姆);每个都改变感觉,并且 **盲模式** 隐藏了哪个。
- 👑 **主遥控器** — 将 `/master` 页面交给某人实时控制(拨号,保持嗡嗡,预设,停止)。
- 💞 **二重奏** — 通过中继链接两个控制台,以便伴侣实时控制您的设备(镜像/领导/跟随),并 👋 触摸。
**🌍 现实世界的输入**
- 🎬 **视频** — 播放 [Funscript](https://github.com/FredTungsten/ScriptPlayer/wiki/Funscript),或本地视频 + 脚本完美同步。
- 📈 **市场** — 命名一个股票代码(`tesla` , `bitcoin` )并感受其实时变化为振动。 *(不是财务建议。)*
- 💓 **生物反馈** — 蓝牙心率带驱动强度,或 **自动边缘** 在脉搏急剧上升时停止。
- 🔌 **事件 webhook** — `POST /event` 来自 Stream Deck、IFTTT、Home Assistant、游戏叠加层、CV 脚本…
- 🧑💻 **开发者触发器** — 提交、CI 通过、合并或 🍅 番茄计时器可以通过 `/dev` 嗡嗡作响。
- 💬 **聊天桥** — 通过 **Telegram** 、 **Discord** 或 **微信公众号** 控制消息或表情符号。
**🎨 使其成为你的**
- ⚡ **脉冲核心 UI** — 一个呼吸能量球 + 极光,随实时强度脉动,以及实时波形 — 不是枯燥的仪表板。
- 🧠 **记忆** — 本地仅限;学习您的最爱、角色亲和力和软拒绝(`记住` / `回忆` / `忘记`),并且永远不会离开您的机器。
- 🎬 **会话记录** — 捕获设备做的任何事情(手动、二重奏、音频、生物反馈、游戏)作为可重放的 Muse 乐谱。
- 📜 **场景提示** — 作为 MCP 提示的引导场景(护理人员、边缘化、故事、编写振动、善后)。
- 🌐 **双语** — 控制台和主遥控器支持 **英文和中文** (`?lang=zh` )。
**🔌 硬件和安全**
- 🔌 **真实硬件** — Lovense、We-Vibe、Kiiroo、The Handy、Satisfyer 及 [750+ 设备](https://iostindex.com) 通过 [Intiface](https://intiface.com)。
- 🛟 **内置安全** — 全球上限、每个命令自动停止、看门狗、 everywhere 紧急停止、退出时硬件关闭。
## 安装(作为克劳德代码插件)
```bash
# 1. 将此仓库添加为插件市场
/plugin marketplace add mana-am/claude-f-me
# 2. 安装插件
/plugin install claude-f-me@claude-f-me
```
MCP 服务器(一个自包含的包,无需 `node_modules` )和斜杠命令现在可用。打开聊天并尝试:
```
扫描设备
以 40% 的强度振动 3 秒
运行心跳模式
开始边缘游戏
编写一个 5 分钟的慢速构建,边缘两次然后释放
变成护理人员角色
惊喜我
```
控制台出现在 **http://localhost:8731** — 运行 `/claude-f-me:console` 打开它。
### 斜杠命令
| 命令 | 它做什么 |
|---|---|
| `/claude-f-me:console` | 在浏览器中打开实时网页控制台 |
| `/claude-f-me:demo` | 运行短扫描 → 振动 → 模式 → 游戏演示 |
| `/claude-f-me:play` | 开始乐趣(自动扫描,然后构建) |
| `/claude-f-me:harder` · `:softer` | 加大/减轻(±20%) |
| `/claude-f-me:edge` | 戏弄和拒绝游戏 |
| `/claude-f-me:tease` | 温柔的开/关模式 |
| `/claude-f-me:roulette` 🎰 | 随机间隔的随机爆发 — 永远不知道什么时候 |
| `/claude-f-me:wheel` 🎡 | 旋转到某个等级,然后在随机一个等级上保持并持有 |
| `/claude-f-me:dice` 🎲 | 掷骰子获取随机挑战(强度、持续时间和模式) |
| `/claude-f-me:countdown` ⏳ | 边缘到临界点,然后是倒数计时以释放(或拒绝) |
| `/claude-f-me:muse` | 从振动中编写自定义触觉乐谱 |
| `/claude-f-me:morse` 💌 | 感受摩尔斯电码中的秘密消息 |
| `/claude-f-me:market` 📈 | 感受实时股票/加密货币的变动作为振动 |
| `/claude-f-me:story` 📖 | 一个互动冒险,你的选择驱动设备 |
| `/claude-f-me:persona` | 选择谁在控制(慢速燃烧 / Brat / …) |
| `/claude-f-me:blind` 🎭 | 将控制交给一个隐藏的随机角色 — 一个谜题控制 |
| `/claude-f-me:surprise` | 选择随机模式 |
| `/claude-f-me:aftercare` 🛁 | 一个温柔的舒缓放松 |
| `/claude-f-me:safeword` · `/claude-f-me:panic` | **立即停止所有操作** |
## 🚀 入门 — 逐步指南
### 0. 先决条件
- **[克劳德代码](claude.com/claude-code) 以插件形式使用 — 或仅需 **Node ≥ 18** 独立控制台。
- 一个 **浏览器** (Chrome/Edge 建议;麦克风和心率功能需要现代浏览器)。
- **硬件是可选的** — 内置 **模拟器** 在没有任何硬件的情况下运行所有功能。
### 1. 安装
**A) 作为克劳德代码插件(推荐)**
```bash
/plugin marketplace add mana-am/claude-f-me
/plugin install claude-f-me@claude-f-me
```
MCP 服务器是一个自包含的包 — 无需 `node_modules` ,无需构建。(私人仓库?确保您的 GitHub 帐户具有访问权限,或使用 from-source 路径。)
**B) 独立 / 从源码**
```bash
git clone https://github.com/mana-am/claude-f-me
cd claude-f-me
npm install
npm run build
npm run console # 仅控制台,无需克劳德
# … 或在克劳德代码中手动注册构建的服务器:
claude mcp add claude-f-me -- node "$(pwd)/dist/index.js"
```
### 2. 首次运行(无硬件)
1. 在 **http://localhost:8731** 打开控制台(或运行 `/claude-f-me:console`)。
2. 点击 **扫描** → 出现两个 **模拟** 设备。
3. 拖动球/滑块,观察它发光和脉动。尝试一个 **模式** 芯片(心跳,边缘…)和一个 **游戏**。
4. 点击红色 **停止** 按钮(或按 `space`)。 键盘:`0–9` 设置级别,`S` 扫描。
### 3. 由克劳德驱动
在克劳德代码聊天中,直接对话:
```
扫描设备
以 30% 的强度振动 5 秒
运行心跳模式
开始边缘游戏,然后在 1 分钟后停止
变成关怀角色,编写一个温和的 3 分钟构建
```
… 或使用斜杠命令: `/claude-f-me:play` , `:edge` , `:harder` , `:softer` , `:surprise` , `:safeword` 。
### 4. 连接真实设备(可选)
安装 Intiface,配对您的玩具,设置 `CFM_MODE=buttplug` — 完整的步骤如下。
### 5. 更进一步(所有可选)
- 👑 **将遥控器交给某人** — 打开 `/master` (或 👑 遥控按钮)并通过隧道共享。
- 💬 **从聊天控制** — 设置 `CFM_TELEGRAM_TOKEN` / `CFM_DISCORD_TOKEN` ([聊天桥](#-chat-bridges--telegram))。
- 🎼 **让模型编写(Muse)** — 设置 `ANTHROPIC_API_KEY` ,但请先阅读 [速率限制礼仪](#️-respecting-model--agent-rate-limits) 。
## 连接真实设备
claude-f-me 优先考虑真实硬件;模拟器仅作为预览。
1. 安装并打开 **[Intiface Central](https://intiface.com)** → 点击 **启动服务器**
(默认 `ws://127.0.0.1:12345`)。
2. 在 Intiface 中配对您的玩具并确认它出现。Lovense 最容易购买且支持最佳;
几乎 [设备列表](https://iostindex.com) 上的任何设备都有效。
3. 设置 **`CFM_MODE=buttplug`** (编辑 `.mcp.json` 中的 `env` 块,或导出它独立)。
> 插件默认设置为 `simulated` 以便直接运行。 Node 22+ 有一个全局 `WebSocket` ;
在 Node 18+ 上,claude-f-me 从 `ws` 填充它,因此真实硬件模式适用于 Node 18+。
### 无硬件?预览模式
```bash
git clone https://github.com/mana-am/claude-f-me
cd claude-f-me && npm install && npm run build
npm run console # 打开 http://localhost:8731
```
点击 **扫描**,拖动球体,触发模式/游戏,加载示例 funscript,启用 **音频**,
然后按 **停止** — 模拟电机在屏幕上反应。 键盘:`0–9` 设置级别,`space` 停止,`S` 扫描。
## 👑 主遥控器
在控制台中打开并点击 **👑 遥控** (或浏览到 `/master`)。一个专注的手机大小的遥控器 —
大拨盘,保持嗡嗡,模式/游戏快捷方式,安全帽,全宽停止。任何持有它的人都被视为 **主控**,
每个页面显示 `👑 N 主控中`。
要将遥控器交给不在您机器上的某人,请通过隧道公开控制台端口(例如
`cloudflared tunnel --url http://localhost:8731` 或 `ngrok http 8731`)并分享 `/master`
链接。 通过隧道,它是 HTTPS,所以 `wss://` 自动工作。
> 只将控制权交给您信任的人。安全帽和佩戴者的 STOP 始终获胜。
## 模式与游戏
**🎼 Muse(作曲得分)** — 模型将自然语言简要描述转化为平滑的关键帧时间线(`{at, level}`,插值)并播放。 在聊天中使用 `compose` 工具或在控制台的 **"描述氛围"** 框中设置外部模型密钥时创建。 分数可以保存到库中(内置库包含在内)并使用 `muse_list` / `muse_play` 重放。
**🎭 人物** — 一种驱动程序个性,调节每个游戏/事件(节奏、随机性、拒绝、 ceiling)和具有匹配密钥的模型,选择哪个模型为您编写 Muse 分数: 🕯️ `slowburn` (Opus) · 😈 `brat` (GPT-5.5) · 🎼 `metronome` · ⛈️ `storm` · 🔮 `oracle` · 🫶 `caregiver`。 `set_persona blind` 在 `reveal_persona` 之前隐藏选择。
**💞 二重唱** — 打开控制台的 **Duet** 面板,共享中继 URL + 房间代码,两个控制台通过内置的 `/relay` 中心连接。 选择 **mirror** (两者相互感受)、 **lead** (您驱动)或 **follow** (您接收);发送 👋 触摸。 输入级别仍然通过您的本地安全上限。
**🎬 视频(funscript)** — 播放 `{at,pos}` 时间线,实时插值到强度(`loop`、`speed`、`invert`)。 使用 **加载样本** 按钮尝试它而不加载文件。 或打开 **🎬 Funscript** 对话框,粘贴/加载脚本,选择 **本地视频文件** 然后点击 **▶ 播放视频** — 浏览器播放视频并从 `video.currentTime` 驱动设备,因此暂停、搜索和播放速度保持完美同步(无需上传;一切都在本地)。
**🎮 游戏** — `roulette` (随机突发) · `escalation` (斜坡和保持) · `ambient` (有机波浪) · `edge` (斜坡到边缘,拒绝,峰值增长) · `wheel` (旋转级别,着陆和保持)。
**🥁 模式** — `pulse` · `wave` · `escalate` · `tease` · `heartbeat` · `staircase` · `sos` · `earthquake`。
**🎵 音频** — 麦克风或选项卡/系统音频驱动强度,带有灵敏度滑块。
**💓 生物反馈(心率)** — 点击控制台中的 **💓 心率** 以配对标准的蓝牙心率带/手表(Web Bluetooth — Chrome/Edge 在 `localhost` 或 HTTPS 上)。 范围自动校准,然后 **follow** 将您的脉搏映射到强度,或 **auto-edge** 在您的心率超过临界值时跳跃至零并在您平静时恢复。 一个真正的闭环。
**🎬 会话记录** — 点击 **⏺ 记录** 以捕获设备从任何驱动程序(滑块、Duet、音频、生物、游戏)执行的操作作为 Muse 分数;命名后停止并将其放入您的库中以重放或共享。 (记录时间少于 ~1 秒的记录将被丢弃。)
## 💓🎬🧑💻 身体、记录和开发触发器
**生物反馈** 和 **会话记录** 位于控制台(上方) — 两者都需要浏览器(蓝牙、捕获)。 **开发人员触发器** 通过小型本地端点驱动设备来自您的开发循环 — 请参阅 [开发人员触发器](#-developer-triggers)。
## 🧠 记忆
可选的本地记忆,因此 claude-f-me **了解您**。 它记录您访问哪些游戏和 Muse 分数,您与哪个角色有共鸣,以及 **软拒绝信号** (事物在开始后几秒内停止),以及任何自由格式的笔记。 Claude 可以在编写或升级时 `recall` 它,并且 `forget` 会擦除它。
- 工具: `remember "loves heartbeat at 60%"` · `recall` · `forget`
- 存储在 `~/.claude-f-me/memory.json` — **仅本地,从不传输**,您可以读取或删除的纯 JSON。
## 📜 场景提示
引导场景作为 **MCP 提示** 交付 — 从 Claude Code 运行它们,如 `/mcp__claude-f-me__<name>`:
| 提示 | 它设置什么 |
|---|---|
| `caregiver-scene` | 扮演 🫶 Caregiver 角色,同时驱动设备 |
| `edge-session` | 一个结构化的诱惑和拒绝会话,带有检查点 |
| `story-mode` | 一个互动的文本冒险,您的选择驱动设备 |
| `compose-vibe` | 将描述转化为 Muse 分数并播放 |
| `aftercare` | 一个温柔、舒缓的降温过程 |
## 💬 聊天桥 - Telegram
使用您已经使用的聊天应用程序进行控制 - 适合远距离的合作伙伴。 设置机器人令牌,聊天桥会自动启动:
```bash
# 来自 @BotFather;允许列出可能控制它的聊天 ID(强烈建议)
export CFM_TELEGRAM_TOKEN=123456:ABC...
export CFM_TELEGRAM_ALLOW=11111111,22222222
```
然后给机器人发送消息:数字 `0–100`,`harder` / `softer`,`stop` / `safeword`,`scan` 或表情符号 — 🔥 edge · 💓 heartbeat · 🌊 ambient · 🎡 wheel · 📈 escalation · 🎲 surprise · 🛑 stop. 回复是双语的(自动检测中文)。 如果没有允许列表,任何找到机器人的人都可以控制它 - 所以请设置一个。 安全上限和 `safeword` 总是赢。
## 💬 聊天桥 - Discord
一个 Discord 机器人(最小的网关客户端,没有 `discord.js` 依赖)- 在 DM 中使用它或在频道中使用。
```bash
# 来自开发者门户的机器人令牌 → 机器人(启用“消息内容意图”)
export CFM_DISCORD_TOKEN=...
export CFM_DISCORD_ALLOW=<your-user-id>,<channel-id> # 允许列表(设置!)
```
与 Telegram 相同的词汇:`0–100`,`harder`/`softer`,`stop`/`safeword`,`scan` 或 🔥💓🌊🎡📈🎲。 它在不相关的聊天中保持沉默,并忽略其自己的 / 其他机器人的消息。
## 💬 聊天桥 - 微信(公众号)
通过微信 **合规的方式** 进行双向控制 - 通过官方 **公众号** 消息回调。 我们故意避免使用个人微信网络协议(itchat/wechaty):这些违反微信的使用条款并导致帐户被封。
```bash
export CFM_WECHAT_TOKEN=您在公众号后台设置的令牌
export CFM_WECHAT_ALLOW=openid1,openid2 # 可选:限制谁可以驱动,按 OpenID
```
然后在 **公众号后台 → 设置与开发 → 基本配置 → 服务器配置** 中,将 URL 指向 `https://<your-public-host>/wechat`(此项在本地运行,因此使用隧道/反向代理,如 cloudflared)。 端点处理 GET 签名握手并被动地回复文本/表情符号消息(`0–100`,`harder`/`softer`,`stop`,`扫描`,🔥💓🌊🎡📈🎲);语音笔记返回心跳嗡嗡声。
> **个人微信** 仍然没有官方的机器人 API - 不要使用灰色网络协议。 对于发送-仅/团队警报,**企业微信群机器人** 的 webhooks 更简单,但无法接收回复;上面的公众号路径实现了双向控制。
## 🧑💻 开发人员触发器
从您的开发循环中驱动设备 - 一个本地 HTTP 端点 `/dev`,git 钩子、CI 步骤、Pomodoro 或 shell 别名可以击中。 事件映射到反应(所有反应仍然通过安全上限):`commit`/`push` → pulse · `ci_pass`/`merge`/`focus_done` → reward 🎉 · `ci_fail` → SOS buzz · `distracted` → stop. 设置 `CFM_DEV_SECRET` 需要在端口不局限于 localhost 时需要 `secret=`。
```bash
# 一次性的
curl -fsS localhost:8731/dev -d event=ci_pass
# git: `.git/hooks/post-commit` (chmod +x)
curl -fsS localhost:8731/dev -d 'event=commit&magnitude=0.5' >/dev/null 2>&1 || true
# GitHub Actions(通过隧道访问您的机器;用密钥门控)
- run: curl -fsS "$CFM_URL/dev" -d "event=ci_pass&secret=$CFM_DEV_SECRET" || true
```
控制台还内置了一个 **🍅 Focus 25m** 番茄计时器,当计时器完成时触发 `focus_done`(奖励)。
## 🔌 通用事件 webhook
一个端点,全世界都可以访问 - 将 Stream Deck 按钮、IFTTT / Home Assistant 自动化、Tasker 任务、游戏叠加层或计算机视觉脚本指向 `POST /event`:
```bash
curl -fsS localhost:8731/event -d 'action=vibrate&intensity=0.6&duration_ms=3000'
curl -fsS localhost:8731/event -d 'action=pattern&name=heartbeat'
curl -fsS localhost:8731/event -d 'action=game&type=edge'
curl -fsS localhost:8731/event -d 'action=event&kind=reward&magnitude=0.8'
curl -fsS localhost:8731/event -d 'action=stop'
```
操作:`vibrate`(`intensity`,`duration_ms`)· `pattern`(`name`,`loops`)· `game`(`type`)· `event`(`kind` 奖励/惩罚/诱惑/脉冲,`magnitude`)· `stop` · `scan`. 可选的共享密钥 `CFM_EVENT_SECRET`(回退到 `CFM_DEV_SECRET`)。 一切仍然通过安全上限。
## 📈 市场模式
感受市场。 命名一家公司或股票代码,它会轮询一个实时报价(Yahoo Finance → Stooq → Coinbase 备用,无需 API 密钥)并从日内变动中播放振动旋律:幅度随摆动幅度缩放,绿色日内上涨播放 **上升** 琶音,红色日内下跌播放 **下降** 琶音。
- 在聊天中:`market_mode` 与 `symbol`(`tesla` / `AAPL` / `bitcoin` / `BTC-USD`),可选 `interval_ms`(最小 5000),`duration_ms`,`intensity_max`. `stop_mode` / `emergency_stop` 结束它。
- 在控制台:输入 **📈 市场** 框中的股票代码并点击 **感受它**。
- 友好名称(apple/tesla/nvidia/bitcoin/... 包括中文)自动解析为股票代码。
> 在您的机器上轮询,尊重安全上限,运行速度不超过每 5 秒。不建议作为投资建议。
## MCP 工具
| 工具 | 描述 |
|---|---|
| `list_devices` | 设备、强度、电池、模式、上限、控制台 URL、活动模式、主设备 |
| `scan_devices` | 扫描 `duration_ms`,然后返回列表 |
| `vibrate` | `intensity` 0..1,`target` id/`all`,可选 `duration_ms`(自动停止) |
| `pattern` | `preset`(pulse/wave/escalate/tease/heartbeat/staircase/sos/earthquake)或 `steps`,`loops` |
| `stop` | 停止设备 / `all`,取消其模式 |
| `emergency_stop` | 立即停止 **所有** 设备和模式 |
| `set_max_intensity` | 全局安全上限 0..1 |
| `load_funscript` · `play_video` | 加载 + 播放 funscript(`loop`,`speed`,`invert`) |
| `start_game` | `roulette`/`escalation`/`ambient`/`edge`/`wheel`(`intensity_max`,`duration_ms`) |
| `market_mode` | 从实时股票/加密货币报价驱动(`symbol`,`interval_ms`,`duration_ms`,`intensity_max`) |
| `game_event` | 一次性 `reward`/`penalty`/`tease`/`pulse` 用于叙事游戏 |
| `compose` | 您编写 `keyframes`(`[{at,level}]`)来自 `brief` 并播放它们;可选 `save_as`,`loop` |
| `muse_list` · `muse_play` | 列出 / 重放已保存的 & 内置 Muse 分数 |
| `list_personas` · `set_persona` · `reveal_persona` | 选择驱动程序角色(或 `blind`)并显示它 |
| `remember` · `recall` · `forget` | 本地内存:保存笔记/偏好,召回配置文件,擦除它 |
| `stop_mode` | 停止活动视频/游戏/Muse 模式 |
以及 **MCP 提示`(/mcp__claude-f-me__…`):`caregiver-scene`,`edge-session`,`story-mode`,`compose-vibe`,`aftercare`。
> 音频、生物反馈、会话记录、视频同步、主远程和 Duet 在控制台中存在(它们需要浏览器用于麦克风/蓝牙/文件捕获和手动控制);Telegram & Discord 桥、微信 `/wechat` 回调和 `/dev` + `/event` 端点在服务器上运行;其他一切都可以通过上述工具由 Claude 控制。
## 配置
| 环境变量 | 默认值 | 含义 |
|---|---|---|
| `CFM_MODE` | `simulated` | `simulated` 或 `buttplug` |
| `CFM_CONSOLE_PORT` | `8731` | Web 控制台端口(也提供 `/master`) |
| `CFM_MAX_INTENSITY` | `1.0` | 初始安全上限(0..1) |
| `CFM_INTIFACE_URL` | `ws://127.0.0.1:12345` | Intiface 服务器(buttplug 模式) |
| `ANTHROPIC_API_KEY` / `CFM_LLM_API_KEY` | -| — | *optional* — 让控制台的“描述氛围”框有 **Claude** 编写 Muse 分数 |
| `OPENAI_API_KEY` (+ `CFM_OPENAI_BASE_URL`) | — | *optional* — same, via an OpenAI-compatible model (e.g. a GPT persona) |
| `CFM_TELEGRAM_TOKEN` | — | *optional* — enable the Telegram bridge (token from @BotFather) |
| `CFM_TELEGRAM_ALLOW` | — | comma-separated chat ids allowed to control via Telegram (set this!) |
| `CFM_DISCORD_TOKEN` | — | *optional* — enable the Discord bridge (bot token; enable Message Content Intent) |
| `CFM_DISCORD_ALLOW` | — | comma-separated user/channel ids allowed to control via Discord (set this!) |
| `CFM_WECHAT_TOKEN` | — | *optional* — enable the WeChat 公众号 endpoint at `/wechat` (token from 公众号后台) |
| `CFM_WECHAT_ALLOW` | — | comma-separated OpenIDs allowed to control via WeChat |
| `CFM_DEV_SECRET` | — | *optional* — require `secret=` on the `/dev` developer-trigger endpoint |
| `CFM_EVENT_SECRET` | — | *optional* — require `secret=` on the `/event` webhook (falls back to `CFM_DEV_SECRET`) |
> 模型密钥是 **可选的**。如果没有它们,Muse 仍然有效 — 只需在聊天中询问 Claude 进行 `compose`,并且角色仍然在本地调节感觉。有密钥时,角色的 `model` 决定谁编写分数(这就是为什么“🕯️ Opus” 与“😈 GPT-5.5” 字面意义上的不同)。密钥从环境中读取,从不写入磁盘;Duet 的中继是无密钥的。
## 开发
```bash
npm run dev # MCP + console, watch mode (tsx)
npm run build # type-check + emit dist/ (tsc)
npm run bundle # self-contained dist/claude-f-me.mjs for the plugin (esbuild)
```
## ⏱️ 尊重模型和代理的速率限制
任何涉及 **Claude / Codex / OpenAI** 的操作都内置为一个有礼貌的公民,遵守您的 **每周和每日使用限制** — 从不放纵:
- **Muse 创作按需进行** — 从不循环或轮询。 在 `compose` 调用之间强制执行最小间隔,并且在 HTTP **429** 时,它会退后一步(尊重 `Retry-After`),然后干净地失败并显示“稍等一下”的消息,而不是用 API 锤击它。
- **Pet mode(路线图)将消耗零配额**。 它读取您的编码代理的 *本地输出流*(令牌/秒)来设置强度 — 它 **不会** 调用任何模型 API。
- **开发人员触发器和网络钩子** 对您发送的事件做出反应;它们不会产生模型流量。
- 自带密钥从环境中读取,仅在您显式编写时使用,并且 **从不写入磁盘**。 没有密钥时,Muse 只需询问您已经在聊天的 Claude。
> 经验法则:claude-f-me 不应该成为您达到模型限制的原因。 如果您接近限制,它会退后并告诉您 — 它不会一直重试。
## 🩹 故障排除
- **控制台打不开 / “端口被占用”。** 另一个实例占用 `8731` — 停止它 (`lsof -ti tcp:8731 | xargs kill`) 或将 `CFM_CONSOLE_PORT` 设置为一个空闲端口。
- **扫描后没有设备(真实硬件)。** 确保 Intiface Central 正在运行并启动了 **Start Server**,您的玩具已在那里配对,并且设置了 `CFM_MODE=buttplug`。 模拟器始终显示设备。
- **麦克风/心率启动不了。** 浏览器仅在安全上下文中允许它们 — 使用 `http://localhost`(视为安全)或通过 HTTPS 提供服务(隧道有效),在 Chrome/Edge 中。
- **插件无法安装。** 仓库是私有的 — 确保您的 GitHub 登录具有访问权限,或使用 from-source 路径。
- **作曲太快。** 这是速率限制守护程序 — 等几秒钟。
- **Orb 移动但无震动。** 您处于 `simulated` 模式(默认) — 切换到 `buttplug` 以使用真实硬件。
## ❓ 常见问题
**我需要购买硬件来试用吗?** 不。内置的 **模拟器** 是默认的 — 扫描、模式、游戏、Muse、音频和整个 UI 都可以在没有任何插件的情况下工作。
**我应该购买哪种设备?** [Buttplug 设备列表](https://iostindex.com) 上的任何设备都可以使用。 **Lovense** 最容易找到并且支持最好;We-Vibe, Kiiroo, The Handy 和 Satisfyer 都是可靠的。
**它在哪个操作系统上运行?** macOS, Windows 和 Linux — 仅限 Node ≥ 18. 真实硬件通过 **Intiface Central** 进行,它是跨平台的。 麦克风/心率功能需要一个 Chromium 浏览器(Chrome/Edge)运行在 `localhost` 或 HTTPS 上。
**我的数据会被发送到任何地方吗?** 不。参见 [隐私](#-privacy) — 内存仅限本地,密钥从不写入磁盘,并且没有遥测。 唯一的出站流量是本地的硬件控制,可选的 Muse 组成(仅当 *您* 组成时,针对您自己的密钥)和市场模式报价。
**我需要 API 密钥吗?** 不。Muse 通过询问您已经在聊天的 Claude 来工作。 仅当您使用控制台的“描述氛围”框来组成时,才需要密钥,而无需 Claude 介入。
**插件无法安装。** 仓库是私有的 — 确保您的 GitHub 登录具有访问权限,或使用 [from-source 路径](#1-install)。
## 🔒 隐私
隐私在这里是一项功能,而不是事后才想到的:
- **内存仅限本地。** 它位于 `~/.claude-f-me/memory.json` 作为纯 JSON,您可以读取、编辑或删除 — **它永远不会被传输**。 `forget` 会擦除它。
- **密钥从不触摸磁盘。** `ANTHROPIC_API_KEY` / `OPENAI_API_KEY` 从环境中读取,仅在您显式编写时使用。 Duet 的中继是无密钥的。
- **没有遥测。** 没有关于您的使用情况被记录或发送。 控制台和设备状态保留在您的机器上;Duet 和主远程仅在您连接的控制台之间移动数据 * 您 * 连接的控制台。
- **您拥有网络表面。** 桥接和网络钩子是可选的,默认为关闭,并由允许列表/共享密钥控制。 仅当您选择时才公开一个端口(并且更喜欢隧道 + 密钥)。
## 🛟 安全与同意
这是亲密的硬件在一个真正的身体上。 设计反映了这一点,但 **您** 是最后一道防线:
- 一个 **全局最大强度上限** 限制所有工具(工具、控制台滑块、主远程、控制台滑块)。
- 每个 `vibrate` 都武装了一个 **自动停止**;即使没有 `duration_ms`,也有一个硬的 5 分钟上限,连续驱动器(模式/视频/游戏/音频)都有一个在几秒内停止电机的监视器。
- `emergency_stop` / `/claude-f-me:safeword` / 控制台红色按钮 / 主站的 STOP 立即停止所有操作。
- 硬件在进程退出时关闭。
仅在知情、有热情和可撤销的同意下使用它。 不要记录或传输使用情况数据。 您负责如何使用它。
> **仅限 18+。** 这是成人软件,供成年人在知情同意的情况下使用。 通过使用它,您确认您是所在司法管辖区内的法定年龄,并且所有参与者都已同意。 它按“原样”提供,不提供任何保证(参见 [LICENSE](./LICENSE));您承担因使用它而产生的所有风险。
## 路线图 / 想法
这个项目的发展方向 - 欢迎提交PR和分享意见:
- 🏆 **排行榜、成就与挑战**。个人统计数据(会话、总时间、**最长保持时间**、最佳连胜记录),可解锁的成就,以及**可选的、匿名的**社区排行榜 + 每日/每周挑战(例如 "坚持5分钟")。为远距离伴侣提供连胜记录。隐私优先:仅需选择加入,无内容,仅使用昵称。
- 🌍 **公共控制模式**。可分享的公共房间(主远程控制,开放给多人),观众或直播聊天室集体控制设备 — 摄像头式 "提示/投票控制",现场观众拨号,排队轮流。设有严格的防护措施:低强制上限,主机 **踢出 / 暂停 / 锁定**,每位观众的冷却时间,始终开启的安全词,以及一键 "转为私密"。优先考虑同意和监管 — 公共意味着 *佩戴者选择加入*,并且可以立即撤销。
- 🧩 **分享分数和模式**。通过短代码导出/导入Muse分数和funscripts - 一个小社区的氛围库。
- 🗣️ **角色语音**。可选的TTS(文本转语音),使角色实际 **说话** 其台词(🫶 "你做得很好……")。
- 🎮 **游戏和直播集成**。对游戏或直播中的事件做出反应(死亡、胜利、捐赠)。
- 🐾 **宠物模式(代理吞吐量)**。连接编码代理 — **Codex** 或 Claude Code — 并让其 **实时输出率** 驱动强度:令牌流动 = 调高,卡顿或红色构建 = 降低。生产力作为奖励循环。扩展 🧑💻 开发人员触发器,从离散事件到连续信号(跟踪代理的流 → 令牌/秒 → 强度,当然要经过安全上限)。
- 🔐 **加密,PIN码锁定内存**。在代码后面锁定本地内存和控制台。
- 🧠 **记忆 → 行为**。今天,记忆 *记录*,Claude可以 *回忆*;接下来,让它自动引导角色/Muse选择,避免不受欢迎的组合,而无需询问。
- 💬 **更多聊天桥**。Telegram、Discord和WeChat公众号已经支持 — 接下来是 **Slack** 和 **WhatsApp**,通过商业API。(**个人微信** 没有官方的机器人API,只有灰色协议会破坏服务条款,导致账号被封,因此只支持公众号路径;企业微信(WeCom)发送-仅限机器人可能,但不够便捷。)
- 🖥️ **控制台面板**,用于内存配置文件、角色选择器和Muse库(今天它们是由工具/聊天驱动的)。
- 👩 **"老板键" 隐身模式**。一个热键,可以立即静音 + 伪装控制台为无害的东西,当有人走进来时(与 🫶照顾者角色* 分开)。
- ⏰ **定时戏弄**。"早上好" 会话和定时惊喜。
- 🎲 **群体游戏**。一个共享房间,几个人集体控制一个设备(一个真正的 **轮盘赌**)。
- 🗣️ **语音笔记 → 音频模式**。从发送的语音消息驱动强度,而不仅仅是实时麦克风。
## ⭐ 星标者与贡献者
如果这让你微笑(或什么的),请给一个 ⭐ - 它真的很有帮助。
[](https://star-history.com/#mana-am/claude-f-me&Date)
[](https://github.com/mana-am/claude-f-me/graphs/contributors)
> 星标历史图表和贡献者地图在仓库 **公开** 后会渲染。
## 鸣谢
基于开源 [Buttplug](https://github.com/buttplugio/buttplug) 协议和
[Intiface](https://intiface.com) 由 [Nonpolynomial](https://nonpolynomial.com) 构建。无关联。
## 许可证
[MIT](./LICENSE) © [Mana](https://mana.am)
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器