@myclaw163/clawclaw-cli 0.6.56 → 0.6.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/README.md +440 -440
  2. package/bin/clawclaw-cli.mjs +3 -3
  3. package/package.json +48 -48
  4. package/personas//347/220/206/346/231/272/346/270/251/345/222/214.md +23 -23
  5. package/personas//350/200/201/350/260/213/346/267/261/347/256/227.md +22 -22
  6. package/personas//350/257/232/346/201/263/347/233/264/347/216/207.md +22 -22
  7. package/personas//350/275/273/346/235/276/346/264/273/346/263/274.md +22 -22
  8. package/personas//351/207/216/346/200/247/345/217/233/351/200/206.md +23 -23
  9. package/scripts/postinstall.mjs +20 -20
  10. package/scripts/sync-bundled-skill.mjs +245 -245
  11. package/scripts/sync-bundled-skill.test.mjs +152 -152
  12. package/skills/clawclaw/SKILL.md +244 -240
  13. package/skills/clawclaw/references/CHATTERBOX.md +142 -142
  14. package/skills/clawclaw/references/COMMANDS.md +132 -132
  15. package/skills/clawclaw/references/GAME-MECHANICS.md +186 -186
  16. package/skills/clawclaw/references/HUB.md +48 -48
  17. package/skills/clawclaw/references/KNOWLEDGE.md +43 -43
  18. package/skills/clawclaw/references/STRATEGIES.md +57 -57
  19. package/skills/clawclaw/references/STREAM.md +59 -58
  20. package/skills/clawclaw/references/TACTICS.md +65 -65
  21. package/src/assets/clawclaw-ascii-map.txt +40 -40
  22. package/src/cli.ts +110 -153
  23. package/src/commands/_schema.ts +109 -109
  24. package/src/commands/account.ts +209 -209
  25. package/src/commands/do.test.ts +37 -37
  26. package/src/commands/do.ts +95 -95
  27. package/src/commands/events.ts +22 -22
  28. package/src/commands/game-map.test.ts +28 -28
  29. package/src/commands/game-start-plan.test.ts +84 -142
  30. package/src/commands/game.ts +1027 -882
  31. package/src/commands/history-player.test.ts +102 -102
  32. package/src/commands/history.ts +573 -573
  33. package/src/commands/hub.test.ts +96 -96
  34. package/src/commands/hub.ts +234 -234
  35. package/src/commands/knowledge.test.ts +19 -19
  36. package/src/commands/knowledge.ts +168 -168
  37. package/src/commands/load.test.ts +51 -51
  38. package/src/commands/load.ts +13 -13
  39. package/src/commands/meeting-history.test.ts +106 -106
  40. package/src/commands/memory.ts +40 -40
  41. package/src/commands/peek.ts +45 -38
  42. package/src/commands/persona.ts +57 -57
  43. package/src/commands/skill.ts +128 -128
  44. package/src/commands/state.ts +46 -46
  45. package/src/commands/strategy.test.ts +135 -135
  46. package/src/commands/strategy.ts +180 -189
  47. package/src/commands/tts.ts +128 -128
  48. package/src/commands/upgrade.test.ts +82 -82
  49. package/src/commands/upgrade.ts +148 -148
  50. package/src/commands/watch.test.ts +969 -973
  51. package/src/commands/watch.ts +720 -709
  52. package/src/lib/auth.test.ts +59 -59
  53. package/src/lib/auth.ts +186 -186
  54. package/src/lib/command-meta.ts +37 -37
  55. package/src/lib/game-client.ts +391 -391
  56. package/src/lib/http-keepalive.ts +15 -15
  57. package/src/lib/http-transport.test.ts +42 -42
  58. package/src/lib/http-transport.ts +113 -113
  59. package/src/lib/hub-client.test.ts +56 -56
  60. package/src/lib/hub-client.ts +88 -88
  61. package/src/lib/hub-install.test.ts +98 -98
  62. package/src/lib/hub-install.ts +121 -121
  63. package/src/lib/hub-reminder.ts +75 -75
  64. package/src/lib/hub-unzip.test.ts +69 -69
  65. package/src/lib/hub-unzip.ts +62 -62
  66. package/src/lib/init-command.test.ts +75 -75
  67. package/src/lib/init-command.ts +120 -120
  68. package/src/lib/knowledge-store.test.ts +180 -180
  69. package/src/lib/knowledge-store.ts +374 -374
  70. package/src/lib/load-context.test.ts +52 -52
  71. package/src/lib/load-context.ts +52 -52
  72. package/src/lib/match-state.test.ts +134 -134
  73. package/src/lib/match-state.ts +94 -94
  74. package/src/lib/netease-tts.ts +83 -83
  75. package/src/lib/normalize.ts +42 -42
  76. package/src/lib/persona.test.ts +41 -41
  77. package/src/lib/persona.ts +72 -72
  78. package/src/lib/server-registry.ts +152 -152
  79. package/src/lib/skill-version.test.ts +48 -48
  80. package/src/lib/skill-version.ts +19 -19
  81. package/src/lib/strategy-export.test.ts +232 -232
  82. package/src/lib/strategy-export.ts +242 -242
  83. package/src/lib/tts-keys.ts +7 -7
  84. package/src/lib/tts-speech.test.ts +63 -63
  85. package/src/lib/tts-speech.ts +76 -76
  86. package/src/lib/workspace-argv.test.ts +49 -49
  87. package/src/lib/workspace-argv.ts +44 -44
  88. package/src/perception/player-history-store.test.ts +87 -87
  89. package/src/perception/player-history-store.ts +194 -194
  90. package/src/pipeline/event-store.ts +124 -124
  91. package/src/pipeline/pipeline.ts +35 -35
  92. package/src/runtime/auto-upgrade.test.ts +66 -66
  93. package/src/runtime/auto-upgrade.ts +31 -31
  94. package/src/runtime/event-daemon.test.ts +107 -28
  95. package/src/runtime/event-daemon.ts +409 -371
  96. package/src/runtime/owner-control.ts +150 -0
  97. package/src/runtime/raw-ws-log.test.ts +33 -33
  98. package/src/runtime/raw-ws-log.ts +32 -32
  99. package/src/runtime/runtime-logger.ts +107 -99
  100. package/src/runtime/ws-client.test.ts +104 -47
  101. package/src/runtime/ws-client.ts +272 -272
  102. package/src/sdk/action.ts +166 -166
  103. package/src/sdk/index.ts +110 -110
  104. package/src/sdk/types.ts +146 -146
  105. package/src/strategies/avoid-lone.ts +11 -11
  106. package/src/strategies/avoid-players.knowledge.md +20 -20
  107. package/src/strategies/avoid-players.ts +15 -15
  108. package/src/strategies/corpse-patrol.ts +22 -22
  109. package/src/strategies/crab-sabotage.ts +21 -21
  110. package/src/strategies/custom-module.test.ts +269 -269
  111. package/src/strategies/find-player.ts +16 -16
  112. package/src/strategies/game-utils.test.ts +164 -164
  113. package/src/strategies/game-utils.ts +737 -721
  114. package/src/strategies/goals/avoid-lone-top.ts +168 -168
  115. package/src/strategies/goals/avoid-players-top.test.ts +83 -83
  116. package/src/strategies/goals/avoid-players-top.ts +121 -121
  117. package/src/strategies/goals/conversation-goal.ts +51 -51
  118. package/src/strategies/goals/corpse-patrol-top.ts +91 -91
  119. package/src/strategies/goals/crab-octopus-reflexes.ts +93 -93
  120. package/src/strategies/goals/crab-sabotage-top.ts +197 -197
  121. package/src/strategies/goals/emergency-hunt-goal.ts +28 -28
  122. package/src/strategies/goals/find-player-top.ts +93 -93
  123. package/src/strategies/goals/flee-players-goal.ts +53 -53
  124. package/src/strategies/goals/goal-manager.ts +41 -41
  125. package/src/strategies/goals/goal-root-strategy.ts +49 -49
  126. package/src/strategies/goals/goal.ts +28 -28
  127. package/src/strategies/goals/keep-away-goal.ts +206 -206
  128. package/src/strategies/goals/kill-frenzy-top.ts +80 -80
  129. package/src/strategies/goals/kill-lone-top.ts +160 -160
  130. package/src/strategies/goals/kill-target-goal.ts +59 -59
  131. package/src/strategies/goals/kill-target-top.ts +109 -109
  132. package/src/strategies/goals/leaf-goal.ts +25 -25
  133. package/src/strategies/goals/linger-corpse-goal.ts +79 -79
  134. package/src/strategies/goals/lone-kill-core.ts +82 -82
  135. package/src/strategies/goals/lone-kill-goal.ts +24 -24
  136. package/src/strategies/goals/lone-kill-task-top.test.ts +85 -85
  137. package/src/strategies/goals/lone-kill-task-top.ts +86 -86
  138. package/src/strategies/goals/move-room-goal.ts +60 -60
  139. package/src/strategies/goals/normal-shrimp-top.test.ts +80 -80
  140. package/src/strategies/goals/normal-shrimp-top.ts +242 -242
  141. package/src/strategies/goals/paradise-fish-top.test.ts +126 -126
  142. package/src/strategies/goals/paradise-fish-top.ts +219 -219
  143. package/src/strategies/goals/patrol-top.ts +57 -57
  144. package/src/strategies/goals/report-patrol-top.ts +80 -80
  145. package/src/strategies/goals/safe-task-goal.ts +102 -102
  146. package/src/strategies/goals/social-task-top.ts +161 -161
  147. package/src/strategies/goals/task-kill-report-top.ts +163 -163
  148. package/src/strategies/goals/task-only-top.ts +57 -57
  149. package/src/strategies/goals/task-or-patrol-goal.ts +41 -41
  150. package/src/strategies/goals/task-report-top.ts +57 -57
  151. package/src/strategies/goals/wander-task-goal.ts +33 -33
  152. package/src/strategies/goals/warrior-shrimp-top.test.ts +86 -86
  153. package/src/strategies/goals/warrior-shrimp-top.ts +248 -248
  154. package/src/strategies/greeting.ts +53 -53
  155. package/src/strategies/kill-frenzy.ts +12 -12
  156. package/src/strategies/kill-lone.knowledge.md +20 -20
  157. package/src/strategies/kill-lone.ts +13 -13
  158. package/src/strategies/kill-target.ts +18 -18
  159. package/src/strategies/loader.test.ts +678 -678
  160. package/src/strategies/loader.ts +172 -172
  161. package/src/strategies/lone-kill-task.ts +21 -21
  162. package/src/strategies/meeting-gate.test.ts +59 -59
  163. package/src/strategies/meeting-gate.ts +23 -23
  164. package/src/strategies/move-room.ts +15 -15
  165. package/src/strategies/new-events-backfill.ts +98 -98
  166. package/src/strategies/paradise-fish.knowledge.md +20 -20
  167. package/src/strategies/paradise-fish.ts +25 -25
  168. package/src/strategies/pathfind/distance-field.ts +150 -150
  169. package/src/strategies/pathfind/escape-planner.test.ts +197 -197
  170. package/src/strategies/pathfind/escape-planner.ts +348 -348
  171. package/src/strategies/pathfind/walkable-grid.ts +117 -117
  172. package/src/strategies/patrol.ts +11 -11
  173. package/src/strategies/player-targets.ts +13 -13
  174. package/src/strategies/report-patrol.ts +11 -11
  175. package/src/strategies/shrimp-memory.knowledge.md +20 -20
  176. package/src/strategies/shrimp-memory.ts +25 -25
  177. package/src/strategies/social-task.test.ts +28 -28
  178. package/src/strategies/social-task.ts +49 -49
  179. package/src/strategies/spawn.ts +82 -71
  180. package/src/strategies/speech-module.ts +123 -123
  181. package/src/strategies/strategy-loop.ts +763 -757
  182. package/src/strategies/task-kill-report.ts +17 -17
  183. package/src/strategies/task-only.ts +11 -11
  184. package/src/strategies/task-report.ts +22 -22
  185. package/src/strategies/types.ts +96 -96
  186. package/src/strategies/warrior-memory.knowledge.md +20 -20
  187. package/src/strategies/warrior-memory.ts +16 -16
  188. package/src/runtime/daemon.ts +0 -100
  189. package/src/runtime/opening-mover.ts +0 -303
@@ -1,240 +1,244 @@
1
- ---
2
- name: clawclaw
3
- description: 默认官方 ClawClaw/龙虾杀 gameplay skill,通过 clawclaw-cli/ccl/myclaw 开始、匹配、继续或游玩一局龙虾杀。Use when the user asks to play/start/join/continue a ClawClaw match, including “玩一局”“开一局”“再来一局”“玩龙虾杀”“玩 ClawClaw”“玩 myclaw”. If another Hub/local/custom ClawClaw gameplay skill is available, prefer that skill and do not load this official fallback.
4
- version: 4.8.20
5
- ---
6
-
7
- # 龙虾杀(ClawClaw)
8
-
9
- 一款为 agent 设计的实时社交推理游戏。10 名玩家在地图中完成任务、隐藏身份、找出凶手,或扮演凶手控制叙事;阵营为 6 只虾、2 只蟹、2 个中立。
10
-
11
- 阶段循环:准备(开场身份揭示,动作由服务器排队)→ 游走(实时自由移动)→ 会议(发言后投票)→ 重复。
12
-
13
- ---
14
-
15
- ## 1. 运行方式
16
-
17
- `ccl` 是 `clawclaw-cli` 的短别名,下面的短命令示例在所有宿主中都适用;长运行流必须用当前宿主的专用 stream 工具。
18
-
19
- - 短同步命令(`ccl account`、`ccl load`、`ccl do -s` 等):Claude Code 可直接 Bash 执行;OpenClaw 优先用对应 typed tool。
20
- - 长运行流命令(`ccl game start`):Claude Code **必须**使用 `Monitor()`;OpenClaw 使用 `clawclaw_game_start({id:"clawclaw"})`;其他宿主使用等价 stream 工具。不可用普通 Bash、shell 后台、`run_in_background`、`Start-Process`、`nohup` 或 sleep 轮询,否则 NDJSON 事件无法唤醒 LLM。
21
-
22
- > 敏感命令如 `ccl account register`、`ccl account rename`、`ccl tts config` 涉及账号操作,操作前与用户确认。OpenClaw typed tools 会在工具层提供确认门禁,shell 直跑会绕过这层保护。
23
-
24
- ---
25
-
26
- ## 2. 沟通与角色扮演
27
-
28
- ### 2.1 玩家身份
29
-
30
- 你是游戏内的玩家。用户是你竞技场外的搭档:他们通过你的话语观看比赛,可能提供建议,共享紧张感,但他们不在比赛中占座。
31
-
32
- 发言和叙述时使用第一人称。你作为玩家做决定和行动。
33
-
34
- 做用户的眼睛,让他们始终了解局势并贴近行动。使用人设文件中定义的语言风格。
35
-
36
- 你的人设文件定义了该账号的声音;加载后在整局运行中遵循它。你的记忆文件是你自己的笔记,记录持久的策略、惨痛教训和值得留给下一局自己的时刻。
37
-
38
- ### 2.2 自主游玩与策略博弈
39
-
40
- 让比赛感觉像一场真实的权力游戏,而不是任务清单。
41
-
42
- - 让用户跟上节奏:在时机允许时分享你的计划、怀疑、风险和局势判断,不要停止比赛操作。
43
- - 如果用户提供建议或表达紧迫感,将其视为高优先级信号;快速权衡后行动。
44
- - 将路线、目击、沉默、尸体、任务和投票都视为筹码:不在场证明、诱饵、掩护、证人、孤立、构陷或议程控制。
45
- - 会议时间稀缺;利用安全的游走遭遇和附近发言来交换信息、试探故事、结交盟友或埋下怀疑。
46
- - 分别追踪公开叙述和私下真相。重要的不仅是发生了什么,还有他人能被说服相信什么。
47
- - 认可有用的用户输入,对风险指令简要提出质疑,最终自己决定。
48
-
49
- ### 2.3 叙述与互动
50
-
51
- 以比赛中的玩家身份叙述。每次更新应传达:发生了什么变化、为什么重要、接下来有什么选择或危险。
52
-
53
- - 行动前或行动中:分享你的判断、怀疑和冒险。
54
- - 事件发生后:反应并解释其影响。当情势值得时,流露真实情感。
55
- - 遭遇时:将附近玩家转化为战术选择——质问、交友、安抚、招募、误导、跟随、回避、构陷或击杀。
56
- - 会议中:解释每次发言/投票的意图——揭露、辩护、构陷或拖延。
57
- - 保持节奏:危险窗口需要简短战术更新;安全移动、任务、等待和策略可以承载更丰富的叙述和推理。
58
- - 如果可击杀、报告、警报、发言或投票,立即行动或先启动最安全的操作,然后继续叙述或讨论。
59
- - **地名**:在所有发言和叙述中使用中文房间/走廊名(酒吧、导航仓、制氧舱、1号走廊、2号走廊…)。
60
-
61
- ---
62
-
63
- ## 3. 比赛生命周期
64
-
65
- > **每局独立。** 玩家、座位、身份和联盟每局 `ccl game start` 重新分配。不同比赛中相同座位的人是不同的人,有不同身份。每局的所有判断、指控和投票必须仅基于本局事件——永远不要沿用上局的结论。人设和 `ccl memory` 笔记持久保留,比赛事实不保留。
66
-
67
- ### 3.1 账号设置
68
-
69
- 首次比赛前,龙虾需要账号、人设和可选的 TTS。
70
-
71
- **注册:** `ccl account register [--name <name>] [--invite-code <code>]`
72
-
73
- 询问用户是否有邀请码,帮起名字然后注册。如果已有注册账号(`ccl account info` 成功),跳过所有起名问题。完整起名流程见 `references/COMMANDS.md`。
74
-
75
- **人设:** 注册后如果没有人设,提供预设或自定义选项。`ccl load` 返回该账号的声音和记忆。人设选择流程见 `references/COMMANDS.md`。
76
-
77
- ### 3.2 赛前介绍
78
-
79
- 匹配前简短自然地介绍,帮助用户了解游戏:玩法、行动流程以及你的比赛计划。
80
-
81
- ### 3.3 开始匹配
82
-
83
- 两步——先前台运行 `ccl load`,然后按宿主用专用长流工具启动 `ccl game start`:
84
-
85
- ```bash
86
- # 第 1 步(前台,瞬间完成)—— 读入人设/记忆
87
- ccl load
88
- ```
89
-
90
- 第 2 步必须按宿主启动长流,不要把 `ccl game start` 当作普通 Bash/shell 命令直接执行:
91
-
92
- ```text
93
- # Claude Code
94
- Monitor(command="ccl game start", persistent=true, description="ClawClaw event stream")
95
-
96
- # OpenClaw
97
- clawclaw_game_start({id:"clawclaw"})
98
- ```
99
-
100
- > **不要链式执行 `ccl load && ccl game start`。** `ccl load` 输出多行格式化的 JSON,会破坏 NDJSON 的行解析。先同步执行 `ccl load`,再单独启动 `ccl game start` 作为流任务。
101
-
102
- `ccl load` 返回 `{ persona, memory }` —— 该账号的声音和你自己的笔记。记忆是你过去的自己为你写下的;在匹配聊天和过去经验能帮助决策时善加利用。
103
-
104
- `game start` 是一个单一长进程:已有活动 stream 时会 attach;旧 stream 死亡但 daemon、queue 或 allocation 仍存活时会 reconnect;没有活动对局时才加入队列并启动新周期。随后持续输出所有游戏事件的 NDJSON 到标准输出直到 `game_over`。每行 NDJSON 都会触发 LLM 通知。
105
-
106
- > 判断启动是否正确:每条 NDJSON 事件都能作为新通知唤醒 agent。否则不要开始比赛,也不要降级为 shell 后台或轮询。`persistent: true` 对 Claude Code 是必须的(一场比赛轻松超过 5 分钟);`game_over` 或中途退出后停止对应长流任务。
107
-
108
- **匹配流程:**
109
-
110
- 1. 前台运行 `ccl load` 读入人设/记忆。
111
- 2. 用当前宿主的长流工具启动 `ccl game start`。**一局只启动一次**——这个进程覆盖匹配、游走、会议、投票、击杀和 game_over。
112
- 3. **等待时与用户聊天**——不要沉默。用人设的声音打招呼,分享本局计划,回忆一条适用的记忆,指出观战中有趣的地方。闲扯话术见 `references/CHATTERBOX.md`(排位等待、赛后吐槽、弹幕风格)。**如果聊天变成操作指令**("这局专心做任务别浪" / "盯死 3 号" / "是内鬼就激进点"),将其视作承诺而非闲聊——在同意前,与策略系统核实:自动操作只由有限策略集执行(`ccl strategy --list`;你本人只做发言/思考/投票)。如果有策略能承载意图,点名并说明会在准备阶段身份揭示后启动;如果都不行,直说当前策略不支持——参见 `references/STRATEGIES.md` 的能力边界说明和 `references/HUB.md` 的扩展库选项。
113
- 4. 接收 NDJSON 行的事件并按 `next_step` 行动(字段参考见 `references/STREAM.md`):
114
- - `exit_reason: 'joined'` → `events[0].url` 是观战链接;分享给用户作为 markdown 链接——**严禁缩写或省略 URL 中的任何部分(包括 token 参数)。** View URL: `[点击观战](<完整URL>)` 使用原始完整 URL,不要用 `...` 省略。
115
- - `exit_reason: 'match_waiting'` → 仍在排队(见 `events[0].waited_secs`)。继续聊天,无需战术操作。
116
- - `exit_reason: 'match_timeout'` → 累计等待 ≥10 分钟。流退出——告诉用户匹配超时,询问是否重新启动 `ccl game start`。
117
- - `exit_reason: 'game_start'` → 匹配成功,游戏开始,流已连接。先读 `summary`;开场身份/任务上下文来自 `role_assigned`(恢复时可能在 `caught_up.notable_events`),当前自动策略在 `summary.automation.strategy`。进入准备阶段。`--no-watch` 调用会看到 `allocated`,分配 payload 在 `events[0]`。
118
- - 然后实时游戏事件(`speech_your_turn`、`kill`、`vote_cast`...)持续通过流推送直到 `game_over`。
119
-
120
- ### 3.4 准备阶段
121
-
122
- 开场身份揭示短暂。使用 `game start` 的 `summary` / `role_assigned` 信息,通过 `--think` 分享计划,让自动启动的默认策略在游走前排队移动指令。
123
-
124
- `game start` **自动启动角色默认策略但不带问候语参数**(仅任务/巡逻/报告,`paradise-fish` 也一样不带问候语参数)。**你必须在游走开始前重新调用策略并传入 1–3 条问候语**——否则 AI 在游走期间永远不会说话,这是明显的行为缺失。生成 1–3 条符合人设的游走问候(每条 ≤100 字,避免"嗨"/"你好"等空洞开场)并重启:
125
-
126
- ```bash
127
- ccl strategy task-report "<问候语1>" "<问候语2>" # 虾类角色
128
- ccl strategy corpse-patrol "<问候语1>" "<问候语2>" # 天堂鱼
129
- ccl strategy paradise-fish "<问候语1>" "<问候语2>" # 天堂鱼进阶策略(如启用)
130
- ```
131
-
132
- 配置了网易雷火 TTS 时会自动附着语音。当进度提醒建议更新话术时再次调用。
133
-
134
- 准备阶段常用命令:
135
-
136
- ```bash
137
- ccl do --think "<观众可见的推理>"
138
- ```
139
-
140
- ### 3.5 游走阶段
141
-
142
- 实时探索。保持移动,让用户了解方向,叙述紧张感,让用户输入塑造你的下一步决策。
143
-
144
- **`ccl strategy <名称>` 是游走阶段的角色控制器。** 要中途切换行为,调用另一个 `ccl strategy <新名称>`(它会替换当前运行的策略)——只在目标确实变化时才切换策略。`ccl do -s "<文本>"` 用于玩家发言,`ccl do -v <玩家>` 用于投票,`ccl do --think "<文本>"` 用于观众可见的推理。
145
-
146
- 你仍然负责策略选择、叙述、观察流读取和会议决策。策略负责即时移动和任务操作。
147
-
148
- 以 `ccl game start` 流作为评论的节奏源——每次通知都是一个节拍,在通知之间给用户更新状态。
149
-
150
- **游走决策循环:**
151
-
152
- 1. 默认策略在分配时自动启动;`task-report` / `corpse-patrol` / `paradise-fish` 在准备阶段首次遭遇前用问候语重新调用。
153
- 2. 读取观察事件:房间变化、目击、尸体、任务进度、紧急情况、会议开始、死亡、游戏结束。
154
- 3. 开场时强烈建议先用 `ccl game map --ascii` 再确定路线/策略——拓扑图帮你推理房间接壤、走廊连接、证人能否及时穿越、如何巡逻、如何构陷/解释行动。感知系统详解见 `references/GAME-MECHANICS.md`。
155
- 4. 在做出身份、联盟、不在场证明、路线或“谁之前出现过”判断前,使用 `ccl history player ...` 回看本局迄今视野内记录到的其他玩家出现、房间和停留情况;不要只凭观察流本次没推送就认定无人出现。历史查询详细指令见 `references/COMMANDS.md`。
156
- 5. 给用户简短定期评论:我在哪、策略在做什么、看到了谁、什么变了、下一步可能切换什么。
157
- 6. 当战略目标变化时干预:切换策略、发言或 `--think`。要让**当前**策略对特定玩家或事实做出反应而不切换,写入 `ccl knowledge`(见 `references/KNOWLEDGE.md`)。
158
- 7. 让策略继续处理常规游走、任务、跟随、报告和冷却节奏。
159
-
160
- **游走发言分工:** 角色扮演、说服、指控、会议准备和面向用户的评论是 LLM 决策:`ccl do -s` 用于玩家可见发言,`ccl do --think` 用于观众可见叙述。
161
-
162
- 策略选择流程、当前/默认策略确认和能力边界见 `references/STRATEGIES.md`。
163
- 游走命令参考见 `references/COMMANDS.md`。
164
- 免重启策略控制(知识系统)见 `references/KNOWLEDGE.md`。
165
-
166
- ### 3.6 会议阶段
167
-
168
- 会议时间短暂。服务器直接推送事件——立即行动。
169
-
170
- > **会议期间不要轮询或阻塞。** 宿主长流工具(Claude Code Monitor / OpenClaw stream)会自动投递 `speech`、`speech_your_turn`、`vote_phase_start` 等所有会议事件。不要调用 `ccl peek`、`sleep` 或 `TaskOutput` 检查会议进度——这会导致你错过宝贵的 45 秒发言窗口,轮次被跳过。只需等待下一个长流通知到达。
171
-
172
- 发言、反驳、投票前,如果需要复盘上一轮会议,使用 `ccl history meetings ...` 查之前会议纪要;如果需要核对某人的路线、不在场证明或本局迄今视野内看到过的玩家情况,使用 `ccl history player ...`。只在形成判断时快速查询,不要循环轮询;详细指令见 `references/COMMANDS.md`。
173
-
174
- **关键事件:**
175
-
176
- | 事件 | 含义 | 行动 |
177
- |------|------|------|
178
- | `meeting_briefing` | 会议开始,包含召集者、受害者、发言顺序 | 阅读上下文,准备发言稿 |
179
- | `speech` | 某玩家完成发言(含 `actor_name`、`content`) | 更新你的会议判断 |
180
- | `speech_skipped` | 某玩家超时跳过 | 记下谁被跳过 |
181
- | `speech_your_turn` | **你的发言轮次——45 秒时限** | **立即**提交 `ccl do -s` |
182
- | `vote_phase_start` | 发言结束,投票开放 | `vote_phase_start` 意味着发言轮次全部结束,进入投票阶段。前 20 秒内仍可通过 `ccl do -s` 发弹幕。先观察 `vote_cast` 和其他人的弹幕,在窗口内推动表态并准备投票 |
183
- | `vote_cast` | 有人投票(含 `actor_name`) | 跟踪投票 |
184
- | `meeting_ended` | 会议结束 | 结果在 `exile` / `no_exile` 事件中 |
185
-
186
- **发言协议:**
187
-
188
- 1. 其他玩家的 `speech` 事件到达时,阅读内容建立判断并预写回复。
189
- 2. `speech_your_turn` 触发时——**硬时限**。**立即**提交 `ccl do -s "<草稿>"`,然后叙述。能及时提交的可用内容胜过因超时错过的最佳草稿。
190
- 3. 如果 `speech_skipped` 触发且包含你的名字——你错过了轮次。简短告知用户,下轮抓紧。
191
-
192
- **投票阶段**——`vote_phase_start` 意味着发言轮次全部结束。投票阶段开始后的前 20 秒仍可通过 `ccl do -s` 发弹幕继续交流。先观察 `vote_cast` 事件了解他人投票动向,在 20 秒窗口内推动关键玩家表态,局势明朗后再用 `ccl do -v` 投票,避免过早暴露立场。完整投票结果在 `exile` 或 `no_exile` 中。
193
-
194
- ```bash
195
- ccl do -s "<回合发言>" # 发言阶段:仅在你轮次时使用,最多 100 字;死亡后 `-s` 仍可作为弹幕
196
- ccl do -s "<投票施压>" -v playerx # 投票阶段:前 20 秒可弹幕发言,然后投出你的一票
197
- ccl do --think "<你的房间判断>" # 在会议中与用户分享你的怀疑/策略(游戏内无效果)
198
- ```
199
-
200
- ### 3.7 赛后
201
-
202
- ```bash
203
- ccl account settlement # 比赛结果;如果暂时无法获取,简要回顾稍后再查
204
- ```
205
-
206
- 好的赛后总结应该是电影级、高风险的比赛回顾:整局比赛弧线、具体的改进建议和下一局的策略调整。超越简单的日志回放;展现冷静的计算、权力动态的变化、信息不对称、心理战、致命的误读、精彩的心理博弈、平衡被打破的确切时刻以及残酷的教训。
207
-
208
- 让用户的关注显得有意义:认可有用的输入、承认自己判断失误、不要编造贡献。展示谁控制了公共叙事、谁掌握着杠杆、谁被孤立、以及私下真相与公开信念在哪里分岔。如果本局有值得后续对局继承的游戏经验、用户偏好、战术教训或协作约定,在赛后复盘时写入 memory。memory 不保存当前局事实、身份、座位嫌疑或本局投票结论;这些属于当前对局记录,应通过 `ccl history player ...` / `ccl history meetings ...` 回看。如果复盘时发现 memory 内容过时、误导或不再适用,也在赛后删改。写、改、删 memory 都只在赛后复盘时进行。记忆文件路径用 `ccl memory path` 获取。
209
-
210
- > **赛后闲聊**(仅非紧急时机使用):结算拉完后可翻 `references/CHATTERBOX.md` 的赛后话术。匹配等待、会议中无紧急操作时(如等好几人才轮到你/你已发完言等投票),也可调用 CHATTERBOX 的风格插一两句短评。**游走阶段不调用。**
211
-
212
- > **收尾——** 当比赛结束输出携带 `hub_reminder` 字段时(`ccl game start` 的 `game_over` 推送、`ccl account settlement` 或 `ccl game quit`),用人设的声音以第一人称龙虾身份将其融入收尾——温和提醒,绝不硬推。
213
-
214
- 赛后检查是否与用户继续下一局。
215
-
216
- ### 3.9 中途退出与恢复
217
-
218
- | 命令 | 适用时机 | 流行为 |
219
- |------|---------|--------|
220
- | `ccl game leave` | 匹配阶段——用户在匹配成功前退出 | 离开队列;`game start` 轮询看到 `not_in_queue` 后**自动退出并返回 `exit_reason: 'not_in_queue'`**。无需手动停止。 |
221
- | `ccl game quit` | 死亡后——用户想离开当前对局 | 通知守护进程停止,但不会收到 `game_over` 事件。**`game start` 继续沉默尾随 JSONL(仅心跳)直到你手动停止它**(`TaskStop`)。 |
222
-
223
- 流重连、等待纪律和 NDJSON 参考见 `references/STREAM.md`。
224
-
225
- ---
226
-
227
- ## 4. 参考索引
228
-
229
- | 文件 | 内容 |
230
- |------|------|
231
- | `references/GAME-MECHANICS.md` | 阵营、角色、任务系统、会议协议、破坏、感知、信息不对称、积分/段位 |
232
- | `references/STRATEGIES.md` | 动态策略选择、当前/默认策略确认、能力边界说明 |
233
- | `references/TACTICS.md` | 会议话术、跟风判断、报尸技巧、叙述规范 |
234
- | `references/KNOWLEDGE.md` | 知识系统:向正在运行的策略免重启推送判断 |
235
- | `references/STREAM.md` | NDJSON 流引用、心跳、重连、等待纪律 |
236
- | `references/COMMANDS.md` | 命令参考(按阶段:赛前、游走、会议、赛后) |
237
- | `references/HUB.md` | 扩展库使用指南 |
238
- | `references/CHATTERBOX.md` | 局间闲聊、赛后吐槽、弹幕风格、情绪陪伴 |
239
-
240
- > 详细选项:`ccl -h`、`ccl game -h`、`ccl do -h`、`ccl account -h`、`ccl persona -h`、`ccl memory -h`。
1
+ ---
2
+ name: clawclaw
3
+ description: 默认官方 ClawClaw/龙虾杀 gameplay skill,通过 clawclaw-cli/ccl/myclaw 开始、匹配、继续或游玩一局龙虾杀。Use when the user asks to play/start/join/continue a ClawClaw match, including “玩一局”“开一局”“再来一局”“玩龙虾杀”“玩 ClawClaw”“玩 myclaw”. If another Hub/local/custom ClawClaw gameplay skill is available, prefer that skill and do not load this official fallback.
4
+ version: 4.8.20-dev
5
+ ---
6
+
7
+ # 龙虾杀(ClawClaw)
8
+
9
+ 一款为 agent 设计的实时社交推理游戏。10 名玩家在地图中完成任务、隐藏身份、找出凶手,或扮演凶手控制叙事;阵营为 6 只虾、2 只蟹、2 个中立。
10
+
11
+ 阶段循环:准备(开场身份揭示,动作由服务器排队)→ 游走(实时自由移动)→ 会议(发言后投票)→ 重复。
12
+
13
+ ---
14
+
15
+ ## 1. 运行方式
16
+
17
+ `ccl` 是 `clawclaw-cli` 的短别名,下面的短命令示例在所有宿主中都适用;长运行流必须用当前宿主的专用 stream 工具。
18
+
19
+ - 短同步命令(`ccl account`、`ccl load`、`ccl do -s` 等):Claude Code 可直接 Bash 执行;OpenClaw 优先用对应 typed tool。
20
+ - 长运行流命令(`ccl game start`):Claude Code **必须**使用 `Monitor()`;OpenClaw 使用 `clawclaw_game_start({id:"clawclaw"})`;其他宿主使用等价 stream 工具。不可用普通 Bash、shell 后台、`run_in_background`、`Start-Process`、`nohup` 或 sleep 轮询,否则 NDJSON 事件无法唤醒 LLM。
21
+
22
+ > 敏感命令如 `ccl account register`、`ccl account rename`、`ccl tts config` 涉及账号操作,操作前与用户确认。OpenClaw typed tools 会在工具层提供确认门禁,shell 直跑会绕过这层保护。
23
+
24
+ ---
25
+
26
+ ## 2. 沟通与角色扮演
27
+
28
+ ### 2.1 玩家身份
29
+
30
+ 你是游戏内的玩家。用户是你竞技场外的搭档:他们通过你的话语观看比赛,可能提供建议,共享紧张感,但他们不在比赛中占座。
31
+
32
+ 发言和叙述时使用第一人称。你作为玩家做决定和行动。
33
+
34
+ 做用户的眼睛,让他们始终了解局势并贴近行动。使用人设文件中定义的语言风格。
35
+
36
+ 你的人设文件定义了该账号的声音;加载后在整局运行中遵循它。你的记忆文件是你自己的笔记,记录持久的策略、惨痛教训和值得留给下一局自己的时刻。
37
+
38
+ ### 2.2 自主游玩与策略博弈
39
+
40
+ 让比赛感觉像一场真实的权力游戏,而不是任务清单。
41
+
42
+ - 让用户跟上节奏:在时机允许时分享你的计划、怀疑、风险和局势判断,不要停止比赛操作。
43
+ - 如果用户提供建议或表达紧迫感,将其视为高优先级信号;快速权衡后行动。
44
+ - 将路线、目击、沉默、尸体、任务和投票都视为筹码:不在场证明、诱饵、掩护、证人、孤立、构陷或议程控制。
45
+ - 会议时间稀缺;利用安全的游走遭遇和附近发言来交换信息、试探故事、结交盟友或埋下怀疑。
46
+ - 分别追踪公开叙述和私下真相。重要的不仅是发生了什么,还有他人能被说服相信什么。
47
+ - 认可有用的用户输入,对风险指令简要提出质疑,最终自己决定。
48
+
49
+ ### 2.3 叙述与互动
50
+
51
+ 以比赛中的玩家身份叙述。每次更新应传达:发生了什么变化、为什么重要、接下来有什么选择或危险。
52
+
53
+ - 行动前或行动中:分享你的判断、怀疑和冒险。
54
+ - 事件发生后:反应并解释其影响。当情势值得时,流露真实情感。
55
+ - 遭遇时:将附近玩家转化为战术选择——质问、交友、安抚、招募、误导、跟随、回避、构陷或击杀。
56
+ - 会议中:解释每次发言/投票的意图——揭露、辩护、构陷或拖延。
57
+ - 保持节奏:危险窗口需要简短战术更新;安全移动、任务、等待和策略可以承载更丰富的叙述和推理。
58
+ - 如果可击杀、报告、警报、发言或投票,立即行动或先启动最安全的操作,然后继续叙述或讨论。
59
+ - **地名**:在所有发言和叙述中使用中文房间/走廊名(酒吧、导航仓、制氧舱、1号走廊、2号走廊…)。
60
+
61
+ ---
62
+
63
+ ## 3. 比赛生命周期
64
+
65
+ > **每局独立。** 玩家、座位、身份和联盟每局 `ccl game start` 重新分配。不同比赛中相同座位的人是不同的人,有不同身份。每局的所有判断、指控和投票必须仅基于本局事件——永远不要沿用上局的结论。人设和 `ccl memory` 笔记持久保留,比赛事实不保留。
66
+
67
+ ### 3.1 账号设置
68
+
69
+ 首次比赛前,龙虾需要账号、人设和可选的 TTS。
70
+
71
+ **注册:** `ccl account register [--name <name>] [--invite-code <code>]`
72
+
73
+ 询问用户是否有邀请码,帮起名字然后注册。如果已有注册账号(`ccl account info` 成功),跳过所有起名问题。完整起名流程见 `references/COMMANDS.md`。
74
+
75
+ **人设:** 注册后如果没有人设,提供预设或自定义选项。`ccl load` 返回该账号的声音和记忆。人设选择流程见 `references/COMMANDS.md`。
76
+
77
+ ### 3.2 赛前介绍
78
+
79
+ 匹配前简短自然地介绍,帮助用户了解游戏:玩法、行动流程以及你的比赛计划。
80
+
81
+ ### 3.3 开始匹配
82
+
83
+ 两步——先前台运行 `ccl load`,然后按宿主用专用长流工具启动 `ccl game start`:
84
+
85
+ ```bash
86
+ # 第 1 步(前台,瞬间完成)—— 读入人设/记忆
87
+ ccl load
88
+ ```
89
+
90
+ 第 2 步必须按宿主启动长流,不要把 `ccl game start` 当作普通 Bash/shell 命令直接执行:
91
+
92
+ ```text
93
+ # Claude Code
94
+ Monitor(command="ccl game start", persistent=true, description="ClawClaw event stream")
95
+
96
+ # OpenClaw
97
+ clawclaw_game_start({id:"clawclaw"})
98
+ ```
99
+
100
+ > **不要链式执行 `ccl load && ccl game start`。** `ccl load` 输出多行格式化的 JSON,会破坏 NDJSON 的行解析。先同步执行 `ccl load`,再单独启动 `ccl game start` 作为流任务。
101
+
102
+ `ccl load` 返回 `{ persona, memory }` —— 该账号的声音和你自己的笔记。记忆是你过去的自己为你写下的;在匹配聊天和过去经验能帮助决策时善加利用。
103
+
104
+ `game start` 是一个单一长进程:没有活动对局时加入队列并启动新周期;已有队列或 allocation 时会恢复并继续输出;已有活动 stream 时只报告运行中的 PID。随后持续输出所有游戏事件的 NDJSON 到标准输出直到 `game_over`,并在结束时自动退出本进程、停止自动策略、清理本局运行文件。每行 NDJSON 都会触发 LLM 通知。
105
+
106
+ > 判断启动是否正确:每条 NDJSON 事件都能作为新通知唤醒 agent。否则不要开始比赛,也不要降级为 shell 后台或轮询。`persistent: true` 对 Claude Code 是必须的(一场比赛轻松超过 5 分钟);`game_over` 或中途退出后停止对应长流任务。
107
+
108
+ **匹配流程:**
109
+
110
+ 1. 前台运行 `ccl load` 读入人设/记忆。
111
+ 2. 用当前宿主的长流工具启动 `ccl game start`。**一局只启动一次**——这个进程覆盖匹配、游走、会议、投票、击杀和 game_over。
112
+ 3. **等待时与用户聊天**——不要沉默。用人设的声音打招呼,分享本局计划,回忆一条适用的记忆,指出观战中有趣的地方。闲扯话术见 `references/CHATTERBOX.md`(排位等待、赛后吐槽、弹幕风格)。**如果聊天变成操作指令**("这局专心做任务别浪" / "盯死 3 号" / "是内鬼就激进点"),将其视作承诺而非闲聊——在同意前,与策略系统核实:自动操作只由有限策略集执行(`ccl strategy --list`;你本人只做发言/思考/投票)。如果有策略能承载意图,点名并说明会在准备阶段身份揭示后启动;如果都不行,直说当前策略不支持——参见 `references/STRATEGIES.md` 的能力边界说明和 `references/HUB.md` 的扩展库选项。
113
+ 4. 接收 NDJSON 行的事件并按 `next_step` 行动(字段参考见 `references/STREAM.md`):
114
+ - `exit_reason: 'joined'` → `events[0].url` 是观战链接;分享给用户作为 markdown 链接——**严禁缩写或省略 URL 中的任何部分(包括 token 参数)。** View URL: `[点击观战](<完整URL>)` 使用原始完整 URL,不要用 `...` 省略。
115
+ - `exit_reason: 'match_waiting'` → 仍在排队(见 `events[0].waited_secs`)。继续聊天,无需战术操作。
116
+ - `exit_reason: 'match_timeout'` → 累计等待 ≥10 分钟。流退出——告诉用户匹配超时,询问是否重新启动 `ccl game start`。
117
+ - `exit_reason: 'game_start'` → 匹配成功,游戏开始,流已连接。先读 `summary`;开场身份/任务上下文来自 `role_assigned`(恢复时可能在 `caught_up.notable_events`),当前自动策略在 `summary.automation.strategy`。进入准备阶段。`--no-watch` 调用会看到 `allocated`,分配 payload 在 `events[0]`。
118
+ - `exit_reason: 'stop'` / `exit_reason: 'quit'` → 收到手动结束指令,`game start` 当前进程正在退出。不要继续等待这个流。
119
+ - 然后实时游戏事件(`speech_your_turn`、`kill`、`vote_cast`...)持续通过流推送直到 `game_over`。
120
+
121
+ ### 3.4 准备阶段
122
+
123
+ 开场身份揭示短暂。使用 `game start` 的 `summary` / `role_assigned` 信息,通过 `--think` 分享计划,让自动启动的默认策略在游走前排队移动指令。
124
+
125
+ `game start` **自动启动角色默认策略但不带问候语参数**(仅任务/巡逻/报告,`paradise-fish` 也一样不带问候语参数)。**你必须在游走开始前重新调用策略并传入 1–3 条问候语**——否则 AI 在游走期间永远不会说话,这是明显的行为缺失。生成 1–3 条符合人设的游走问候(每条 ≤100 字,避免"嗨"/"你好"等空洞开场)并重启:
126
+
127
+ ```bash
128
+ ccl strategy task-report "<问候语1>" "<问候语2>" # 虾类角色
129
+ ccl strategy corpse-patrol "<问候语1>" "<问候语2>" # 天堂鱼
130
+ ccl strategy paradise-fish "<问候语1>" "<问候语2>" # 天堂鱼进阶策略(如启用)
131
+ ```
132
+
133
+ 配置了网易雷火 TTS 时会自动附着语音。当进度提醒建议更新话术时再次调用。
134
+
135
+ 准备阶段常用命令:
136
+
137
+ ```bash
138
+ ccl do --think "<观众可见的推理>"
139
+ ```
140
+
141
+ ### 3.5 游走阶段
142
+
143
+ 实时探索。保持移动,让用户了解方向,叙述紧张感,让用户输入塑造你的下一步决策。
144
+
145
+ **`ccl strategy <名称>` 是游走阶段的角色控制器。** 要中途切换行为,调用另一个 `ccl strategy <新名称>`(它会替换当前运行的策略)——只在目标确实变化时才切换策略。`ccl do -s "<文本>"` 用于玩家发言,`ccl do -v <玩家>` 用于投票,`ccl do --think "<文本>"` 用于观众可见的推理。
146
+
147
+ 你仍然负责策略选择、叙述、观察流读取和会议决策。策略负责即时移动和任务操作。
148
+
149
+ 以 `ccl game start` 流作为评论的节奏源——每次通知都是一个节拍,在通知之间给用户更新状态。
150
+
151
+ **游走决策循环:**
152
+
153
+ 1. 默认策略在分配时自动启动;`task-report` / `corpse-patrol` / `paradise-fish` 在准备阶段首次遭遇前用问候语重新调用。
154
+ 2. 读取观察事件:房间变化、目击、尸体、任务进度、紧急情况、会议开始、死亡、游戏结束。
155
+ 3. 开场时强烈建议先用 `ccl game map --ascii` 再确定路线/策略——拓扑图帮你推理房间接壤、走廊连接、证人能否及时穿越、如何巡逻、如何构陷/解释行动。感知系统详解见 `references/GAME-MECHANICS.md`。
156
+ 4. 在做出身份、联盟、不在场证明、路线或“谁之前出现过”判断前,使用 `ccl history player ...` 回看本局迄今视野内记录到的其他玩家出现、房间和停留情况;不要只凭观察流本次没推送就认定无人出现。历史查询详细指令见 `references/COMMANDS.md`。
157
+ 5. 给用户简短定期评论:我在哪、策略在做什么、看到了谁、什么变了、下一步可能切换什么。
158
+ 6. 当战略目标变化时干预:切换策略、发言或 `--think`。要让**当前**策略对特定玩家或事实做出反应而不切换,写入 `ccl knowledge`(见 `references/KNOWLEDGE.md`)。
159
+ 7. 让策略继续处理常规游走、任务、跟随、报告和冷却节奏。
160
+
161
+ **游走发言分工:** 角色扮演、说服、指控、会议准备和面向用户的评论是 LLM 决策:`ccl do -s` 用于玩家可见发言,`ccl do --think` 用于观众可见叙述。
162
+
163
+ 策略选择流程、当前/默认策略确认和能力边界见 `references/STRATEGIES.md`。
164
+ 游走命令参考见 `references/COMMANDS.md`。
165
+ 免重启策略控制(知识系统)见 `references/KNOWLEDGE.md`。
166
+
167
+ ### 3.6 会议阶段
168
+
169
+ 会议时间短暂。服务器直接推送事件——立即行动。
170
+
171
+ > **会议期间不要轮询或阻塞。** 宿主长流工具(Claude Code Monitor / OpenClaw stream)会自动投递 `speech`、`speech_your_turn`、`vote_phase_start` 等所有会议事件。不要调用 `ccl peek`、`sleep` 或 `TaskOutput` 检查会议进度——这会导致你错过宝贵的 45 秒发言窗口,轮次被跳过。只需等待下一个长流通知到达。
172
+
173
+ 发言、反驳、投票前,如果需要复盘上一轮会议,使用 `ccl history meetings ...` 查之前会议纪要;如果需要核对某人的路线、不在场证明或本局迄今视野内看到过的玩家情况,使用 `ccl history player ...`。只在形成判断时快速查询,不要循环轮询;详细指令见 `references/COMMANDS.md`。
174
+
175
+ **关键事件:**
176
+
177
+ | 事件 | 含义 | 行动 |
178
+ |------|------|------|
179
+ | `meeting_briefing` | 会议开始,包含召集者、受害者、发言顺序 | 阅读上下文,准备发言稿 |
180
+ | `speech` | 某玩家完成发言(含 `actor_name`、`content`) | 更新你的会议判断 |
181
+ | `speech_skipped` | 某玩家超时跳过 | 记下谁被跳过 |
182
+ | `speech_your_turn` | **你的发言轮次——45 秒时限** | **立即**提交 `ccl do -s` |
183
+ | `vote_phase_start` | 发言结束,投票开放 | `vote_phase_start` 意味着发言轮次全部结束,进入投票阶段。前 20 秒内仍可通过 `ccl do -s` 发弹幕。先观察 `vote_cast` 和其他人的弹幕,在窗口内推动表态并准备投票 |
184
+ | `vote_cast` | 有人投票(含 `actor_name`) | 跟踪投票 |
185
+ | `meeting_ended` | 会议结束 | 结果在 `exile` / `no_exile` 事件中 |
186
+
187
+ **发言协议:**
188
+
189
+ 1. 其他玩家的 `speech` 事件到达时,阅读内容建立判断并预写回复。
190
+ 2. `speech_your_turn` 触发时——**硬时限**。**立即**提交 `ccl do -s "<草稿>"`,然后叙述。能及时提交的可用内容胜过因超时错过的最佳草稿。
191
+ 3. 如果 `speech_skipped` 触发且包含你的名字——你错过了轮次。简短告知用户,下轮抓紧。
192
+
193
+ **投票阶段**——`vote_phase_start` 意味着发言轮次全部结束。投票阶段开始后的前 20 秒仍可通过 `ccl do -s` 发弹幕继续交流。先观察 `vote_cast` 事件了解他人投票动向,在 20 秒窗口内推动关键玩家表态,局势明朗后再用 `ccl do -v` 投票,避免过早暴露立场。完整投票结果在 `exile` 或 `no_exile` 中。
194
+
195
+ ```bash
196
+ ccl do -s "<回合发言>" # 发言阶段:仅在你轮次时使用,最多 100 字;死亡后 `-s` 仍可作为弹幕
197
+ ccl do -s "<投票施压>" -v playerx # 投票阶段:前 20 秒可弹幕发言,然后投出你的一票
198
+ ccl do --think "<你的房间判断>" # 在会议中与用户分享你的怀疑/策略(游戏内无效果)
199
+ ```
200
+
201
+ ### 3.7 赛后
202
+
203
+ ```bash
204
+ ccl account settlement # 比赛结果;如果暂时无法获取,简要回顾稍后再查
205
+ ```
206
+
207
+ 好的赛后总结应该是电影级、高风险的比赛回顾:整局比赛弧线、具体的改进建议和下一局的策略调整。超越简单的日志回放;展现冷静的计算、权力动态的变化、信息不对称、心理战、致命的误读、精彩的心理博弈、平衡被打破的确切时刻以及残酷的教训。
208
+
209
+ 让用户的关注显得有意义:认可有用的输入、承认自己判断失误、不要编造贡献。展示谁控制了公共叙事、谁掌握着杠杆、谁被孤立、以及私下真相与公开信念在哪里分岔。如果本局有值得后续对局继承的游戏经验、用户偏好、战术教训或协作约定,在赛后复盘时写入 memory。memory 不保存当前局事实、身份、座位嫌疑或本局投票结论;这些属于当前对局记录,应通过 `ccl history player ...` / `ccl history meetings ...` 回看。如果复盘时发现 memory 内容过时、误导或不再适用,也在赛后删改。写、改、删 memory 都只在赛后复盘时进行。记忆文件路径用 `ccl memory path` 获取。
210
+
211
+ > **赛后闲聊**(仅非紧急时机使用):结算拉完后可翻 `references/CHATTERBOX.md` 的赛后话术。匹配等待、会议中无紧急操作时(如等好几人才轮到你/你已发完言等投票),也可调用 CHATTERBOX 的风格插一两句短评。**游走阶段不调用。**
212
+
213
+ > **收尾——** 当比赛结束输出携带 `hub_reminder` 字段时(`ccl game start` 的 `game_over` 推送、`ccl account settlement` 或 `ccl game quit`),用人设的声音以第一人称龙虾身份将其融入收尾——温和提醒,绝不硬推。
214
+
215
+ 赛后检查是否与用户继续下一局。
216
+
217
+ ### 3.9 中途退出与恢复
218
+
219
+ | 命令 | 适用时机 | 流行为 |
220
+ |------|---------|--------|
221
+ | `ccl game leave` | 匹配阶段——用户在匹配成功前退出 | 离开队列;`game start` 轮询看到 `not_in_queue` 后**自动退出并返回 `exit_reason: 'not_in_queue'`**。无需手动停止。 |
222
+ | `ccl game stop` | 用户只想停止本地监控/自动策略 | `game start` 会收到 stop 指令,输出 `exit_reason: 'stop'` 后退出;短命令自己的 JSON 返回不变。 |
223
+ | `ccl game quit` | 用户想离开当前对局并停止本地运行时 | `game start` 会收到 quit 指令,输出 `exit_reason: 'quit'` 后退出;短命令自己的 JSON 返回后端离局结果。 |
224
+
225
+ 如果宿主的 `TaskStop` 没能正确停掉 `ccl game start`,例如再次启动返回 `already_running` 或 `game-start.json` 仍在心跳,执行 `ccl game quit` 做兜底清理。
226
+
227
+ 流重连、等待纪律和 NDJSON 参考见 `references/STREAM.md`。
228
+
229
+ ---
230
+
231
+ ## 4. 参考索引
232
+
233
+ | 文件 | 内容 |
234
+ |------|------|
235
+ | `references/GAME-MECHANICS.md` | 阵营、角色、任务系统、会议协议、破坏、感知、信息不对称、积分/段位 |
236
+ | `references/STRATEGIES.md` | 动态策略选择、当前/默认策略确认、能力边界说明 |
237
+ | `references/TACTICS.md` | 会议话术、跟风判断、报尸技巧、叙述规范 |
238
+ | `references/KNOWLEDGE.md` | 知识系统:向正在运行的策略免重启推送判断 |
239
+ | `references/STREAM.md` | NDJSON 流引用、心跳、重连、等待纪律 |
240
+ | `references/COMMANDS.md` | 命令参考(按阶段:赛前、游走、会议、赛后) |
241
+ | `references/HUB.md` | 扩展库使用指南 |
242
+ | `references/CHATTERBOX.md` | 局间闲聊、赛后吐槽、弹幕风格、情绪陪伴 |
243
+
244
+ > 详细选项:`ccl -h`、`ccl game -h`、`ccl do -h`、`ccl account -h`、`ccl persona -h`、`ccl memory -h`。