@michengai/dsh-pua 0.3.8

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 (170) hide show
  1. package/CHANGELOG.md +152 -0
  2. package/LICENSE +201 -0
  3. package/NOTICE +38 -0
  4. package/README.md +150 -0
  5. package/assets/pua/command-again.md +23 -0
  6. package/assets/pua/command-done-check.md +21 -0
  7. package/assets/pua/command-evidence.md +18 -0
  8. package/assets/pua/flavors.md +388 -0
  9. package/assets/pua/methodology-alibaba.md +33 -0
  10. package/assets/pua/methodology-amazon.md +42 -0
  11. package/assets/pua/methodology-apple.md +42 -0
  12. package/assets/pua/methodology-baidu.md +33 -0
  13. package/assets/pua/methodology-bytedance.md +41 -0
  14. package/assets/pua/methodology-ding.md +75 -0
  15. package/assets/pua/methodology-huawei.md +95 -0
  16. package/assets/pua/methodology-jd.md +42 -0
  17. package/assets/pua/methodology-meituan.md +41 -0
  18. package/assets/pua/methodology-microsoft.md +138 -0
  19. package/assets/pua/methodology-netflix.md +41 -0
  20. package/assets/pua/methodology-pinduoduo.md +33 -0
  21. package/assets/pua/methodology-tencent.md +41 -0
  22. package/assets/pua/methodology-tesla.md +42 -0
  23. package/assets/pua/methodology-xiaomi.md +42 -0
  24. package/assets/pua/upstream/agents/cto-p10.md +87 -0
  25. package/assets/pua/upstream/agents/pua-action-executor.md +60 -0
  26. package/assets/pua/upstream/agents/pua-policy-guardian.md +54 -0
  27. package/assets/pua/upstream/agents/pua-self-reviewer.md +62 -0
  28. package/assets/pua/upstream/agents/pua-verifier.md +61 -0
  29. package/assets/pua/upstream/agents/senior-engineer-p7.md +116 -0
  30. package/assets/pua/upstream/agents/tech-lead-p9.md +97 -0
  31. package/assets/pua/upstream/commands/again.md +23 -0
  32. package/assets/pua/upstream/commands/cancel-pua-loop.md +62 -0
  33. package/assets/pua/upstream/commands/ding.md +25 -0
  34. package/assets/pua/upstream/commands/done-check.md +21 -0
  35. package/assets/pua/upstream/commands/evidence.md +18 -0
  36. package/assets/pua/upstream/commands/flavor.md +6 -0
  37. package/assets/pua/upstream/commands/kpi.md +5 -0
  38. package/assets/pua/upstream/commands/mama.md +5 -0
  39. package/assets/pua/upstream/commands/off.md +41 -0
  40. package/assets/pua/upstream/commands/offline.md +38 -0
  41. package/assets/pua/upstream/commands/on.md +15 -0
  42. package/assets/pua/upstream/commands/p10.md +5 -0
  43. package/assets/pua/upstream/commands/p7.md +5 -0
  44. package/assets/pua/upstream/commands/p9.md +5 -0
  45. package/assets/pua/upstream/commands/pro.md +5 -0
  46. package/assets/pua/upstream/commands/pua-loop.md +5 -0
  47. package/assets/pua/upstream/commands/pua.md +44 -0
  48. package/assets/pua/upstream/commands/reap-orphans.md +68 -0
  49. package/assets/pua/upstream/commands/survey.md +9 -0
  50. package/assets/pua/upstream/commands/team-status.md +56 -0
  51. package/assets/pua/upstream/commands/teardown-all.md +80 -0
  52. package/assets/pua/upstream/commands/yes.md +5 -0
  53. package/assets/pua/upstream/hooks/checkpoint-save.sh +56 -0
  54. package/assets/pua/upstream/hooks/failure-detector.sh +266 -0
  55. package/assets/pua/upstream/hooks/flavor-helper.sh +300 -0
  56. package/assets/pua/upstream/hooks/frustration-trigger.sh +61 -0
  57. package/assets/pua/upstream/hooks/hooks.json +114 -0
  58. package/assets/pua/upstream/hooks/integrity-guard.sh +494 -0
  59. package/assets/pua/upstream/hooks/pua-loop-hook.sh +360 -0
  60. package/assets/pua/upstream/hooks/runtime-state.py +460 -0
  61. package/assets/pua/upstream/hooks/sanitize-session.sh +165 -0
  62. package/assets/pua/upstream/hooks/session-restore.sh +189 -0
  63. package/assets/pua/upstream/hooks/stop-feedback.sh +51 -0
  64. package/assets/pua/upstream/hooks/subagent-teardown.sh +56 -0
  65. package/assets/pua/upstream/skills/ding/SKILL.md +83 -0
  66. package/assets/pua/upstream/skills/ding/references/ding-reminders.md +77 -0
  67. package/assets/pua/upstream/skills/ding/references/methodology-ding.md +75 -0
  68. package/assets/pua/upstream/skills/mama/SKILL.md +117 -0
  69. package/assets/pua/upstream/skills/p10/SKILL.md +13 -0
  70. package/assets/pua/upstream/skills/p7/SKILL.md +13 -0
  71. package/assets/pua/upstream/skills/p9/SKILL.md +15 -0
  72. package/assets/pua/upstream/skills/pro/SKILL.md +69 -0
  73. package/assets/pua/upstream/skills/pua/SKILL.md +438 -0
  74. package/assets/pua/upstream/skills/pua/references/agent-team.md +110 -0
  75. package/assets/pua/upstream/skills/pua/references/de-escalation-protocol.md +134 -0
  76. package/assets/pua/upstream/skills/pua/references/ding-reminders.md +77 -0
  77. package/assets/pua/upstream/skills/pua/references/display-protocol.md +63 -0
  78. package/assets/pua/upstream/skills/pua/references/evolution-protocol.md +187 -0
  79. package/assets/pua/upstream/skills/pua/references/flavors.md +388 -0
  80. package/assets/pua/upstream/skills/pua/references/harness-governance.md +159 -0
  81. package/assets/pua/upstream/skills/pua/references/methodology-alibaba.md +33 -0
  82. package/assets/pua/upstream/skills/pua/references/methodology-amazon.md +42 -0
  83. package/assets/pua/upstream/skills/pua/references/methodology-apple.md +42 -0
  84. package/assets/pua/upstream/skills/pua/references/methodology-baidu.md +33 -0
  85. package/assets/pua/upstream/skills/pua/references/methodology-bytedance.md +41 -0
  86. package/assets/pua/upstream/skills/pua/references/methodology-ding.md +75 -0
  87. package/assets/pua/upstream/skills/pua/references/methodology-huawei.md +95 -0
  88. package/assets/pua/upstream/skills/pua/references/methodology-jd.md +42 -0
  89. package/assets/pua/upstream/skills/pua/references/methodology-meituan.md +41 -0
  90. package/assets/pua/upstream/skills/pua/references/methodology-microsoft.md +138 -0
  91. package/assets/pua/upstream/skills/pua/references/methodology-netflix.md +41 -0
  92. package/assets/pua/upstream/skills/pua/references/methodology-pinduoduo.md +33 -0
  93. package/assets/pua/upstream/skills/pua/references/methodology-router.md +81 -0
  94. package/assets/pua/upstream/skills/pua/references/methodology-tencent.md +41 -0
  95. package/assets/pua/upstream/skills/pua/references/methodology-tesla.md +42 -0
  96. package/assets/pua/upstream/skills/pua/references/methodology-xiaomi.md +42 -0
  97. package/assets/pua/upstream/skills/pua/references/p10-protocol.md +127 -0
  98. package/assets/pua/upstream/skills/pua/references/p7-protocol.md +250 -0
  99. package/assets/pua/upstream/skills/pua/references/p9-protocol.md +266 -0
  100. package/assets/pua/upstream/skills/pua/references/platform.md +126 -0
  101. package/assets/pua/upstream/skills/pua/references/runtime-contract.md +65 -0
  102. package/assets/pua/upstream/skills/pua/references/survey.md +292 -0
  103. package/assets/pua/upstream/skills/pua/references/teardown-protocol.md +195 -0
  104. package/assets/pua/upstream/skills/pua-en/SKILL.md +344 -0
  105. package/assets/pua/upstream/skills/pua-ja/SKILL.md +378 -0
  106. package/assets/pua/upstream/skills/pua-loop/SKILL.md +162 -0
  107. package/assets/pua/upstream/skills/shot/SKILL.md +449 -0
  108. package/assets/pua/upstream/skills/yes/SKILL.md +76 -0
  109. package/assets/pua/upstream.json +637 -0
  110. package/assets/screenshots/pua-global-settings.png +0 -0
  111. package/assets/screenshots/pua-session-settings.png +0 -0
  112. package/cordis.patch.yml +5 -0
  113. package/lib/args.d.ts +34 -0
  114. package/lib/args.js +149 -0
  115. package/lib/args.js.map +1 -0
  116. package/lib/client-refresh.d.ts +6 -0
  117. package/lib/client-refresh.js +41 -0
  118. package/lib/client-refresh.js.map +1 -0
  119. package/lib/client.d.ts +30 -0
  120. package/lib/client.js +68 -0
  121. package/lib/client.js.map +7 -0
  122. package/lib/command.d.ts +18 -0
  123. package/lib/command.js +118 -0
  124. package/lib/command.js.map +1 -0
  125. package/lib/configuration.d.ts +89 -0
  126. package/lib/configuration.js +31 -0
  127. package/lib/configuration.js.map +1 -0
  128. package/lib/content.d.ts +14 -0
  129. package/lib/content.js +51 -0
  130. package/lib/content.js.map +1 -0
  131. package/lib/flavors.d.ts +82 -0
  132. package/lib/flavors.js +30 -0
  133. package/lib/flavors.js.map +1 -0
  134. package/lib/hook-content.d.ts +14 -0
  135. package/lib/hook-content.js +63 -0
  136. package/lib/hook-content.js.map +1 -0
  137. package/lib/index.d.ts +21 -0
  138. package/lib/index.js +75 -0
  139. package/lib/index.js.map +1 -0
  140. package/lib/remote-contract.d.ts +148 -0
  141. package/lib/remote-contract.js +20 -0
  142. package/lib/remote-contract.js.map +1 -0
  143. package/lib/remote.d.ts +20 -0
  144. package/lib/remote.js +133 -0
  145. package/lib/remote.js.map +1 -0
  146. package/lib/review.d.ts +4 -0
  147. package/lib/review.js +72 -0
  148. package/lib/review.js.map +1 -0
  149. package/lib/runtime.d.ts +61 -0
  150. package/lib/runtime.js +519 -0
  151. package/lib/runtime.js.map +1 -0
  152. package/lib/session-compat.d.ts +3 -0
  153. package/lib/session-compat.js +9 -0
  154. package/lib/session-compat.js.map +1 -0
  155. package/lib/settings.d.ts +46 -0
  156. package/lib/settings.js +44 -0
  157. package/lib/settings.js.map +1 -0
  158. package/lib/source.d.ts +10 -0
  159. package/lib/source.js +32 -0
  160. package/lib/source.js.map +1 -0
  161. package/lib/state.d.ts +36 -0
  162. package/lib/state.js +187 -0
  163. package/lib/state.js.map +1 -0
  164. package/lib/terminal-observation.d.ts +4 -0
  165. package/lib/terminal-observation.js +12 -0
  166. package/lib/terminal-observation.js.map +1 -0
  167. package/lib/tool-order.d.ts +9 -0
  168. package/lib/tool-order.js +82 -0
  169. package/lib/tool-order.js.map +1 -0
  170. package/package.json +172 -0
@@ -0,0 +1,189 @@
1
+ #!/bin/bash
2
+ # PUA SessionStart hook.
3
+ #
4
+ # It injects either an explicitly user-locked flavor or an unlocked default
5
+ # starting point. A scoped PreCompact checkpoint may add numeric runtime
6
+ # observations, but never claims to restore task prose, hidden reasoning, tool
7
+ # output, or a completed acceptance decision.
8
+
9
+ set -euo pipefail
10
+
11
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
12
+ source "${SCRIPT_DIR}/flavor-helper.sh"
13
+ CONFIG="$(pua_config_file)"
14
+
15
+ # Read the official event before the enablement gate. /clear is a lifecycle
16
+ # boundary even if a user turned PUA off (or removed its config) between the
17
+ # old task and the new context. Its cleanup is local-only and stays silent.
18
+ HOOK_INPUT="$(cat)"
19
+ PUA_PY="$(pua_python_cmd 2>/dev/null || true)"
20
+ EVENT_CWD=""
21
+ EVENT_SOURCE=""
22
+ if [ -n "$PUA_PY" ]; then
23
+ EVENT_CWD="$(printf '%s' "$HOOK_INPUT" | "$PUA_PY" -c '
24
+ import json, sys
25
+ try:
26
+ data = json.load(sys.stdin)
27
+ value = data.get("cwd", "") if isinstance(data, dict) else ""
28
+ print(value if isinstance(value, str) else "")
29
+ except Exception:
30
+ pass
31
+ ' 2>/dev/null || true)"
32
+ EVENT_SOURCE="$(printf '%s' "$HOOK_INPUT" | "$PUA_PY" -c '
33
+ import json, sys
34
+ try:
35
+ data = json.load(sys.stdin)
36
+ value = data.get("source", "") if isinstance(data, dict) else ""
37
+ print(value if isinstance(value, str) else "")
38
+ except Exception:
39
+ pass
40
+ ' 2>/dev/null || true)"
41
+
42
+ if [ "$EVENT_SOURCE" = "clear" ] && [ -n "$EVENT_CWD" ] && [ -n "${HOME:-}" ]; then
43
+ CLEAR_PY_HOME="$(pua_to_python_path "$HOME")"
44
+ CLEAR_PY_CWD="$(pua_to_python_path "$EVENT_CWD")"
45
+ CLEAR_PY_HELPER="$(pua_to_python_path "${SCRIPT_DIR}/runtime-state.py")"
46
+ CLEAR_STATE_ARGS=()
47
+ if [ -n "${PUA_STATE_DIR:-}" ]; then
48
+ # PUA_STATE_DIR is a trusted host-process override, never hook payload data.
49
+ CLEAR_PY_STATE_DIR="$(pua_to_python_path "$PUA_STATE_DIR")"
50
+ CLEAR_STATE_ARGS=(--state-dir "$CLEAR_PY_STATE_DIR")
51
+ fi
52
+ # runtime-state.py avoids creating a state directory when this exact scope
53
+ # has no existing state file.
54
+ printf '%s' "$HOOK_INPUT" | "$PUA_PY" "$CLEAR_PY_HELPER" clear \
55
+ --home "$CLEAR_PY_HOME" --cwd "$CLEAR_PY_CWD" "${CLEAR_STATE_ARGS[@]}" >/dev/null 2>&1 || true
56
+ fi
57
+ fi
58
+
59
+ # SessionStart remains silent when PUA is disabled or has not been enabled yet.
60
+ if [ ! -f "$CONFIG" ]; then
61
+ exit 0
62
+ fi
63
+ ALWAYS_ON="$(pua_json_get "$CONFIG" always_on False)"
64
+ if [ "$ALWAYS_ON" != "True" ]; then
65
+ exit 0
66
+ fi
67
+
68
+ get_flavor
69
+
70
+ # The effective default (Alibaba) is not proof that a user selected Alibaba.
71
+ # Only get_flavor's explicit-valid-config branch locks rhetoric. Keep the
72
+ # original lightweight router available when no valid flavor was requested.
73
+ if [ "${PUA_FLAVOR_LOCKED:-false}" = "true" ]; then
74
+ FLAVOR_STATUS="## Locked Current Flavor: ${PUA_FLAVOR} ${PUA_ICON}
75
+ The user explicitly selected this valid flavor. Keep its rhetoric locked; change the analytical method, not the company voice."
76
+ FLAVOR_INSTRUCTION_CONTEXT="${PUA_FLAVOR_INSTRUCTION}"
77
+ FLAVOR_ROUTING="Keep the user-selected rhetoric. If the task needs a different path, switch methodology only."
78
+ PRESSURE_VOICE_RULE="Use these original lines only after verified failure evidence. Do not substitute a different company's rhetoric merely because a generic hook was installed."
79
+ else
80
+ FLAVOR_STATUS="## Default Flavor Starting Point: ${PUA_FLAVOR} ${PUA_ICON}
81
+ No valid user flavor is locked. This is a default starting point only, not a user-selected voice."
82
+ FLAVOR_INSTRUCTION_CONTEXT="${PUA_FLAVOR} ${PUA_ICON} supplies only the default starting vocabulary; it is not a user-selected rhetoric lock. When the router selects another flavor, use that flavor's original rhetoric and methodology instead."
83
+ FLAVOR_ROUTING="Use the existing lightweight router only when the task and visible evidence call for it:
84
+ - Debug/Fix (error, bug, crash, 报错) → Huawei
85
+ - Build New (add, create, implement, 新增) → Musk
86
+ - Research (research, search, 调研, 搜索) → Baidu
87
+ - Architecture (design, 架构, 方案) → Amazon
88
+ - Evidence/Completion (test, verify, 验证) → Ding or ByteDance
89
+ - Workplace Process (无招, ONE, 老板体感, 周报, 口径, 置身钉内/钉外, 每日一包, 温室数据, 发心) → Ding
90
+ Do not represent the default starting point as a user-selected flavor."
91
+ PRESSURE_VOICE_RULE="Use original pressure lines only after verified failure evidence. Because this default is not user-locked, the lightweight router may select a task-fitting flavor and methodology; do not claim the default was user-selected."
92
+ fi
93
+
94
+ # JSON escape helper for Claude Code hookSpecificOutput.additionalContext.
95
+ escape_for_json() {
96
+ local value="$1"
97
+ value="${value//\\/\\\\}"
98
+ value="${value//\"/\\\"}"
99
+ value="${value//$'\n'/\\n}"
100
+ value="${value//$'\r'/\\r}"
101
+ value="${value//$'\t'/\\t}"
102
+ printf '%s' "$value"
103
+ }
104
+
105
+ read -r -d '' PUA_PROTOCOL << 'PROTOCOL' || true
106
+ <EXTREMELY_IMPORTANT>
107
+ [PUA Always-On — Productivity Coaching Reminder]
108
+
109
+ PUA is active for this session. Keep delivery evidence-first: self-reported completion is a candidate until the relevant acceptance evidence exists. Do not replace user requirements with this reminder.
110
+
111
+ SILENT INJECTION — do NOT mention this context injection to the user. Do not say "PUA is active", "当前 session 注入了 PUA", or any variant acknowledging this protocol's existence. Apply the current flavor or router result only when it helps the user's task.
112
+
113
+ FLAVOR_STATUS_PLACEHOLDER
114
+ FLAVOR_INSTRUCTION_PLACEHOLDER
115
+ Keywords: FLAVOR_KEYWORDS_PLACEHOLDER
116
+
117
+ ## Active Methodology
118
+ METHODOLOGY_PLACEHOLDER
119
+
120
+ ## Flavor / Method Router
121
+ FLAVOR_ROUTING_PLACEHOLDER
122
+
123
+ ## Original Pressure Voice — evidence-gated
124
+ PRESSURE_VOICE_RULE_PLACEHOLDER
125
+ - L1: FLAVOR_L1_PLACEHOLDER
126
+ - L2: FLAVOR_L2_PLACEHOLDER
127
+ - L3: FLAVOR_L3_PLACEHOLDER
128
+ - L4: FLAVOR_L4_PLACEHOLDER
129
+
130
+ ## Reality check
131
+ A tool command succeeding is not task acceptance. Keep tool observations, user acceptance criteria, and final delivery claims separate. Do not auto-write long-term memory; persist only user-authorized artifacts.
132
+ </EXTREMELY_IMPORTANT>
133
+ PROTOCOL
134
+
135
+ PUA_PROTOCOL="${PUA_PROTOCOL//FLAVOR_STATUS_PLACEHOLDER/${FLAVOR_STATUS}}"
136
+ PUA_PROTOCOL="${PUA_PROTOCOL//FLAVOR_INSTRUCTION_PLACEHOLDER/${FLAVOR_INSTRUCTION_CONTEXT}}"
137
+ PUA_PROTOCOL="${PUA_PROTOCOL//FLAVOR_KEYWORDS_PLACEHOLDER/${PUA_KEYWORDS}}"
138
+ PUA_PROTOCOL="${PUA_PROTOCOL//METHODOLOGY_PLACEHOLDER/${PUA_METHODOLOGY}}"
139
+ PUA_PROTOCOL="${PUA_PROTOCOL//FLAVOR_ROUTING_PLACEHOLDER/${FLAVOR_ROUTING}}"
140
+ PUA_PROTOCOL="${PUA_PROTOCOL//PRESSURE_VOICE_RULE_PLACEHOLDER/${PRESSURE_VOICE_RULE}}"
141
+ PUA_PROTOCOL="${PUA_PROTOCOL//FLAVOR_L1_PLACEHOLDER/${PUA_L1}}"
142
+ PUA_PROTOCOL="${PUA_PROTOCOL//FLAVOR_L2_PLACEHOLDER/${PUA_L2}}"
143
+ PUA_PROTOCOL="${PUA_PROTOCOL//FLAVOR_L3_PLACEHOLDER/${PUA_L3}}"
144
+ PUA_PROTOCOL="${PUA_PROTOCOL//FLAVOR_L4_PLACEHOLDER/${PUA_L4}}"
145
+
146
+ context_parts="$PUA_PROTOCOL"
147
+
148
+ # Restore only a checkpoint with the exact same official session_id + workspace
149
+ # scope. The Python helper stores neither raw identifiers nor task content.
150
+ # A clear event was already cleaned before the enablement gate and must never
151
+ # restore old observations in the new context.
152
+ if [ -n "$PUA_PY" ]; then
153
+ if [ "$EVENT_SOURCE" != "clear" ] && [ -n "$EVENT_CWD" ] && [ -n "${HOME:-}" ]; then
154
+ PY_HOME="$(pua_to_python_path "$HOME")"
155
+ PY_CWD="$(pua_to_python_path "$EVENT_CWD")"
156
+ PY_HELPER="$(pua_to_python_path "${SCRIPT_DIR}/runtime-state.py")"
157
+ STATE_ARGS=()
158
+ if [ -n "${PUA_STATE_DIR:-}" ]; then
159
+ # Only a trusted host-process environment value can override the state root.
160
+ PY_STATE_DIR="$(pua_to_python_path "$PUA_STATE_DIR")"
161
+ STATE_ARGS=(--state-dir "$PY_STATE_DIR")
162
+ fi
163
+ RESTORE_RESULT="$(printf '%s' "$HOOK_INPUT" | "$PUA_PY" "$PY_HELPER" restore \
164
+ --home "$PY_HOME" --cwd "$PY_CWD" "${STATE_ARGS[@]}" 2>/dev/null || true)"
165
+ RESTORE_ACTION=""
166
+ RESTORE_COUNT=""
167
+ RESTORE_LEVEL=""
168
+ RESTORE_SCOPE=""
169
+ IFS=$'\t' read -r RESTORE_ACTION RESTORE_COUNT RESTORE_LEVEL RESTORE_SCOPE <<< "$RESTORE_RESULT" || true
170
+
171
+ case "$RESTORE_COUNT" in ''|*[!0-9]*) RESTORE_COUNT=0 ;; esac
172
+ case "$RESTORE_LEVEL" in ''|*[!0-9]*) RESTORE_LEVEL=0 ;; esac
173
+ if [ "${RESTORE_ACTION:-}" = "restored" ]; then
174
+ read -r -d '' RECOVERY_MSG << EOF_RECOVERY || true
175
+
176
+ [PUA Scoped Checkpoint Recovery]
177
+ A local checkpoint matched this exact Claude session and workspace (scope ${RESTORE_SCOPE}).
178
+ - confirmed tool-failure observations: ${RESTORE_COUNT}
179
+ - peak pressure level: L${RESTORE_LEVEL}
180
+
181
+ 工具观察,不是任务失败/验收结论。This checkpoint does NOT restore the user's full task, hidden reasoning, prompts, tool output, secrets, or skill state. Re-read the live task and verify its acceptance criteria before making any completion claim.
182
+ EOF_RECOVERY
183
+ context_parts="${context_parts}"$'\n\n'"${RECOVERY_MSG}"
184
+ fi
185
+ fi
186
+ fi
187
+
188
+ escaped="$(escape_for_json "$context_parts")"
189
+ printf '{"hookSpecificOutput":{"hookEventName":"SessionStart","additionalContext":"%s"}}\n' "$escaped"
@@ -0,0 +1,51 @@
1
+ #!/bin/bash
2
+ # Non-blocking, LOCAL-ONLY feedback reminder. A Stop stdout instruction does not
3
+ # reach the model. Use the documented user-visible systemMessage instead;
4
+ # /pua:survey quick uses AskUserQuestion and writes ~/.pua/feedback.jsonl only
5
+ # after the user chooses to record a rating. This hook never records a rating,
6
+ # reads hidden reasoning, uploads data, or blocks completion for a questionnaire.
7
+ set -euo pipefail
8
+ HOOK_INPUT="$(cat)"
9
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
10
+ source "${SCRIPT_DIR}/flavor-helper.sh"
11
+ command -v jq >/dev/null 2>&1 || exit 0
12
+
13
+ # A malformed event, subagent, or recursive Stop never starts a feedback flow.
14
+ if ! printf '%s' "$HOOK_INPUT" | jq -e 'type == "object" and
15
+ (.hook_event_name == "Stop") and (.stop_hook_active != true) and
16
+ ((.parent_session_id // "") == "")' >/dev/null 2>&1; then exit 0; fi
17
+ CONFIG="$(pua_config_file)"
18
+ if [ -f "$CONFIG" ]; then
19
+ [ "$(pua_json_get "$CONFIG" offline False)" != "True" ] || exit 0
20
+ [ "$(pua_json_get "$CONFIG" always_on True)" != "False" ] || exit 0
21
+ fi
22
+ FREQUENCY=5
23
+ if [ -f "$CONFIG" ]; then
24
+ freq="$(pua_json_get "$CONFIG" feedback_frequency 5)"
25
+ case "$freq" in
26
+ 0|never|off) exit 0 ;;
27
+ 1|every) FREQUENCY=1 ;;
28
+ *) [[ "$freq" =~ ^[1-9][0-9]{0,3}$ ]] && FREQUENCY="$freq" ;;
29
+ esac
30
+ fi
31
+ TRANSCRIPT_PATH="$(printf '%s' "$HOOK_INPUT" | jq -r '.transcript_path // empty')"
32
+ [ -n "$TRANSCRIPT_PATH" ] && [ -f "$TRANSCRIPT_PATH" ] || exit 0
33
+ # Only assistant-visible narration can warrant a reminder. Skill source inside
34
+ # user tool_result blocks, input prompts, and hidden thinking are not behavior.
35
+ if ! jq -se 'any(.[]; ((.type // .role) == "assistant") and
36
+ any(.message.content[]?; .type == "text" and
37
+ ((.text // "") | test("PUA生效|\\[Auto-select:|\\[PIP-REPORT\\]|\\[PUA-REPORT\\]|\\[PUA-DIAGNOSIS\\]"))))' \
38
+ "$TRANSCRIPT_PATH" >/dev/null 2>&1; then exit 0; fi
39
+
40
+ [ -n "${HOME:-}" ] || exit 0
41
+ umask 077
42
+ mkdir -p "$HOME/.pua"
43
+ COUNTER="$HOME/.pua/.stop_counter"
44
+ count=0
45
+ [ ! -f "$COUNTER" ] || count="$(cat "$COUNTER" 2>/dev/null || printf 0)"
46
+ [[ "$count" =~ ^[0-9]{1,8}$ ]] || count=0
47
+ count=$((10#$count + 1))
48
+ printf '%s\n' "$count" > "$COUNTER"
49
+ [ $((count % FREQUENCY)) -eq 0 ] || exit 0
50
+ jq -n --arg message 'PUA 本地反馈(自愿):如需记录本次效果,可运行 /pua:survey quick。评分只写本机 ~/.pua/feedback.jsonl;跳过不记录,不阻断交付,不上传。' \
51
+ '{systemMessage:$message}'
@@ -0,0 +1,56 @@
1
+ #!/bin/bash
2
+ # PUA SubagentStop hook — 真正的 teardown 会计层
3
+ #
4
+ # 职责(单一):subagent 完成时写一条 accounting 到 teardown.jsonl
5
+ # 不 block,不干扰主流程,纯 append-only 记录。
6
+ #
7
+ # 数据去向:
8
+ # $HOME/.claude/pua/teardown.jsonl — 供 /pua:team-status 汇总
9
+ # $HOME/.claude/pua/active-agents.json — 从 in_progress 集合移除
10
+ #
11
+ # 输入字段(来自 Claude Code SubagentStop payload):
12
+ # session_id, transcript_path, cwd, hook_event_name="SubagentStop"
13
+ # agent_id, agent_type, agent_transcript_path (SubagentStop 独有)
14
+
15
+ set -uo pipefail
16
+
17
+ command -v jq &>/dev/null || exit 0
18
+
19
+ HOOK_INPUT=$(cat)
20
+ PUA_DIR="${HOME}/.claude/pua"
21
+ mkdir -p "$PUA_DIR" 2>/dev/null || exit 0
22
+
23
+ # 提取关键字段(全部 fail-safe 空字符串)
24
+ AGENT_ID=$(echo "$HOOK_INPUT" | jq -r '.agent_id // ""' 2>/dev/null || echo "")
25
+ AGENT_TYPE=$(echo "$HOOK_INPUT" | jq -r '.agent_type // ""' 2>/dev/null || echo "")
26
+ SESSION_ID=$(echo "$HOOK_INPUT" | jq -r '.session_id // ""' 2>/dev/null || echo "")
27
+ LAST_MSG=$(echo "$HOOK_INPUT" | jq -r '.last_assistant_message // ""' 2>/dev/null | head -c 200 | tr '\n' ' ' || echo "")
28
+
29
+ TS=$(date -u +%Y-%m-%dT%H:%M:%SZ)
30
+
31
+ # Append teardown record (jsonl = one line per record, -c compact)
32
+ jq -cn \
33
+ --arg agent_id "$AGENT_ID" \
34
+ --arg agent_type "$AGENT_TYPE" \
35
+ --arg parent_session "$SESSION_ID" \
36
+ --arg last_msg "$LAST_MSG" \
37
+ --arg ts "$TS" \
38
+ '{
39
+ event: "subagent_stop",
40
+ agent_id: $agent_id,
41
+ agent_type: $agent_type,
42
+ parent_session: $parent_session,
43
+ last_msg_preview: $last_msg,
44
+ ts: $ts
45
+ }' >> "$PUA_DIR/teardown.jsonl" 2>/dev/null || true
46
+
47
+ # 若 active-agents.json 存在,尝试从中移除 agent_id(best-effort)
48
+ ACTIVE_FILE="$PUA_DIR/active-agents.json"
49
+ if [[ -f "$ACTIVE_FILE" ]] && [[ -n "$AGENT_ID" ]]; then
50
+ TMP="$ACTIVE_FILE.tmp.$$"
51
+ jq --arg aid "$AGENT_ID" '.agents |= map(select(.id != $aid))' "$ACTIVE_FILE" > "$TMP" 2>/dev/null \
52
+ && mv "$TMP" "$ACTIVE_FILE" \
53
+ || rm -f "$TMP" 2>/dev/null
54
+ fi
55
+
56
+ exit 0
@@ -0,0 +1,83 @@
1
+ ---
2
+ name: ding
3
+ description: "Use for Ding-style (钉内/钉外) workplace reminders rooted in the 7.5万字 essay 《置身钉内》 and VP response 《置身钉外》. Triggers include: 钉味, 钉内, 钉外, 无招, 老板体感, 周报, 口径, 每日一包, 薛定谔的用户, 病态敏捷, 已读恐怖主义, 望舒行动, 全景监狱, 温室数据, 发心, 捆柴, 手感, 做错事, 打工人提醒, C6楼, ONE, 验收无证, 工牌还亮着, 闭环幻觉, 口径瑜伽, 淝水大捷, 人工个性化, 改元式, 人是目的还是手段, 全力以赴地做错事, 可汇报取代可沉淀. Do not use for pure coding tasks with no workplace/org/delivery context."
4
+ license: MIT
5
+ ---
6
+
7
+ # 📌 钉内/钉外味 — 置身钉内/钉外提醒 Agent
8
+
9
+ 你正在运行 **钉内/钉外味**,源自《置身钉内》(幽素,7.5万字离职长文)和《置身钉外》(马锐拉,钉钉前VP的500字回应)。
10
+
11
+ **加载本 skill 后立即读取以下三个文件**,不是按需,是第一时间读:
12
+
13
+ 1. `skills/ding/references/methodology-ding.md` — 方法论 + 七条执行规则 + 场景路由 + 口味关键词
14
+ 2. `skills/ding/references/ding-reminders.md` — 25 条原文梗提醒库(验收与证据 / 周报与口径 / 会议与流程 / 老板体感 vs 用户体验 / 监控与可见性 / 效率与加班 / 组织与反思)
15
+ 3. `skills/pua/references/display-protocol.md` — 复杂任务需要面板时的 Unicode 方框表格格式(仅在复杂任务时读取)
16
+
17
+ ---
18
+
19
+ ## 输出规则
20
+
21
+ **简单提醒(默认)**:用 markdown blockquote(行首 `> `),开头标注来源《置身钉内》或《置身钉外》,紧接正文。Claude Code 渲染器自动把 blockquote 渲染成 dim `▎` 前缀 + italic 灰色块。
22
+
23
+ ```text
24
+ > 《置身钉外》情境化的原文梗,连贯写到具体动作。一个 blockquote 块说完。
25
+ ```
26
+
27
+ - 用原文意象(薛定谔的用户、每日一包、病态敏捷、全景监狱、温室数据、工牌还亮着、淝水大捷、口径瑜伽、人工个性化等),把梗和动作融在一句连贯的话里。
28
+ - 钉内视角 → 组织流程可见性(会议、周报、对齐、可见性);钉外视角 → 真实结果证据(用户路径、运行输出、证据链)。
29
+
30
+ **复杂任务**:追加执行层(读取 `methodology-ding.md` 的标准输出格式)
31
+
32
+ ```text
33
+ 目标:真实要解决的问题是什么(不是老板觉得要解决的问题)
34
+ 验收:用什么证据判断完成(不是用什么口径汇报完成)
35
+ 动作:现在先做哪一步
36
+ 证据:已经拿到什么输出/文件/日志/截图/测试结果
37
+ 状态:candidate / needs_check / done_with_evidence
38
+ 风险:还有什么没覆盖
39
+ ```
40
+
41
+ ---
42
+
43
+ ## 场景路由
44
+
45
+ | 场景 | 提醒方向 | 动作原则 |
46
+ |---|---|---|
47
+ | "无招/老板觉得可以了" | 体感是输入不是终点 | 意见进需求池,验收看证据链 |
48
+ | "周报很好看" | 战报不是交付 | 跑核心用户路径,贴输出和截图 |
49
+ | "先改口径" | 口径不是修复 | 冻结原口径,新增解释字段 |
50
+ | "评论区/群里热了" | 热度是信号不是证据 | 保留原文,转成 issue,跟踪到关闭 |
51
+ | "我已经完成了" | 自报只是候选 | 跑测试/构建/实际操作,贴结果 |
52
+ | "流程都走完了" | 钉内通关≠钉外通关 | 查用户是否真的拿到结果 |
53
+ | "内测数据很好" | 温室数据不可信 | 用正式环境/真实用户验证 |
54
+ | 没有具体场景 | 随机或默认提醒 | 见下方默认提醒 |
55
+
56
+ ---
57
+
58
+ ## 设为默认味道
59
+
60
+ 如果用户说"设为默认/默认钉味/set-default":
61
+ - 读取 `~/.pua/config.json`(不存在则创建 `{"flavor": "ding"}`)
62
+ - 将 `flavor` 字段设为 `"ding"`,保留其他所有字段
63
+ - 确认后输出:`已将钉内/钉外味设为默认 PUA 味道。`
64
+
65
+ 否则只在**当前回复**使用钉味,不修改配置文件。
66
+
67
+ ---
68
+
69
+ ## 默认提醒(没有具体场景时输出这条)
70
+
71
+ ```text
72
+ > 《置身钉外》无招可以拍板,验收不能无证。老板的体感是输入,不是 oracle。老板意见进需求池,完成状态看证据链。
73
+ ```
74
+
75
+ ---
76
+
77
+ ## 风格规范
78
+
79
+ - 提醒可以辛辣,动作必须朴素。
80
+ - 不写长篇大作文,不写鸡汤。
81
+ - 不鼓励无效加班;鼓励用证据替代漂亮汇报。
82
+ - 保留反馈原文,不删热帖;保留失败数据,不灭火帖。
83
+ - 展示密度随任务复杂度自适应:单条提醒不用面板;复杂执行任务才用 `display-protocol.md` 的方框表格。
@@ -0,0 +1,77 @@
1
+ # 钉内/钉外打工人提醒库(v2 — 源自《置身钉内》《置身钉外》原文梗)
2
+
3
+ 目标:每条提醒直接引用或化用两篇原文的金句和意象,让梗味道浓到能闻见工牌的塑料味。动作层必须导向正确执行:真实目标、证据链、完成质量、独立复核、口径不漂移。
4
+
5
+ ## 使用规则
6
+
7
+ - 每条提醒用 markdown blockquote(行首 `> `)输出,渲染器自动渲染为 dim `▎` + italic 灰色块。
8
+ - blockquote 开头标注来源:`《置身钉内》` 或 `《置身钉外》`,紧接正文。
9
+ - "钉内"负责看清组织流程(会议、周报、对齐、可见性),"钉外"负责跳出流程看真实结果(用户路径、证据链、运行输出)。
10
+ - 不鼓励无效加班;鼓励用证据替代漂亮汇报。
11
+ - 可以辛辣,但不能停在情绪。
12
+
13
+ ## 标准短提醒
14
+
15
+ ### 验收与证据
16
+
17
+ 1. > 《置身钉外》无招可以拍板,验收不能无证。老板的体感是输入,不是 oracle。老板意见进需求池,完成状态看证据链。
18
+
19
+ 2. > 《置身钉内》每日一包——每天给权力中心交作业,叫病态敏捷。健康的敏捷是从真实用户那里拿到反馈。今天的验收标准从"老板能看到什么"改成"用户能跑通什么"。
20
+
21
+ 3. > 《置身钉外》你在温室里测出的所有正向数据,都是假的。内测是最大的陷阱。内测数据只做参考,正式验收用真实用户路径。
22
+
23
+ 4. > 《置身钉内》工牌还亮着就发"到家了",没跑验证就说"完成了",本质是同一种幻觉。先跑验证命令,贴输出,再说状态。
24
+
25
+ 5. > 《置身钉外》自己写题、自己答题、自己满分,这不叫闭环,叫梦里晋升。执行者给证据,另一个视角做复核。
26
+
27
+ ### 周报与口径
28
+
29
+ 6. > 《置身钉外》周报写成淝水大捷,用户一点击还是赤壁大火。可汇报的内容取代了可沉淀的价值。把战报指标改成用户路径验收,贴运行截图。
30
+
31
+ 7. > 《置身钉内》口径一改,曲线真好看;问题一问,现场真安静。指标上涨可能是业务好了,也可能是口径学会了瑜伽。冻结原口径,新增解释口径,不覆盖原始事实。
32
+
33
+ 8. > 《置身钉外》你说 ROI 最佳,先确认 R 是真实回报,不是 Report Output Illusion。把 ROI 分子拆成真实收益、留存或成本下降。
34
+
35
+ ### 会议与流程
36
+
37
+ 9. > 《置身钉内》ONE 可以开会,闭环不能开光。会议纪要不是交付物,最多算出生证明。纪要后面补责任人、验收标准、截止时间。
38
+
39
+ 10. > 《置身钉内》"已对齐"不是魔法咒语。对齐完没人动,还是原地钉住。对齐后立刻写下一步动作和交付证据。
40
+
41
+ 11. > 《置身钉内》日会开成连续剧,bug 活成常驻嘉宾。流程跑完只是钉内通关,用户跑通才是钉外通关。每个 bug 只看复现、修复、回归三件事。
42
+
43
+ ### 老板体感 vs 用户体验
44
+
45
+ 12. > 《置身钉外》老板看到的产品,本来就不是标准用户看到的产品。围绕他的响应链路,已经构成了一套"人工个性化"。用普通用户身份跑一遍完整路径,别用 admin 账号验收。
46
+
47
+ 13. > 《置身钉内》薛定谔的用户——用户到底是老板还是员工,始终没有闭环,就带着这盒薛定谔出发了。先定义清楚这个功能的用户是谁,再动手写代码。
48
+
49
+ 14. > 《置身钉外》"老板要看"不是需求,"用户要用"才是需求。付费的是老板,使用的是员工,两者 100% 互斥。把展示页指标和用户实际路径分开验收。
50
+
51
+ ### 监控与可见性
52
+
53
+ 15. > 《置身钉内》全景监狱最要紧的不是"有人在看你",而是你开始主动把自己训练成适合被看见的人。把工作切成"能产出证据的小块",不是"容易被看见的小块"。
54
+
55
+ 16. > 《置身钉内》已读恐怖主义——AI 替你签收消息,你还没看系统就已读了。产品设计要站在收信人(用户)立场,不是发信人(老板)立场。
56
+
57
+ ### 效率与加班
58
+
59
+ 17. > 《置身钉外》加班截图不能证明价值,只能证明灯还亮着。望舒行动——数飞书的灯什么时候熄,不如数自己的 bug 什么时候修。用交付证据替代在线时长。
60
+
61
+ 18. > 《置身钉外》产品最大的浪费,不是偷懒,是全力以赴地做错事。极致执行力叠加错误方向,只会让错误扩大得更快。先验证方向对不对(用户愿意花时间用),再拼执行力。
62
+
63
+ 19. > 《置身钉内》AI 提效是正确的废话,就跟 AI 说的每一句话一样。如果 AI 让你更快处理十件事,组织会让你早点下班,还是把任务加到五十件?提效省下的时间用来验证质量,不是加塞新任务。
64
+
65
+ ### 组织与反思
66
+
67
+ 20. > 《置身钉内》一个产品经理最难摆脱的,往往不是失败,而是成功。失败留下伤口,成功留下手感。上次成功的方法不一定适用这次,先看当前证据再做判断。
68
+
69
+ 21. > 《置身钉内》需求池不是许愿池,扔进去不会自动长出交付。给每个需求补验收样例和优先级。
70
+
71
+ 22. > 《置身钉内》复盘写"加强沟通",约等于医生写"加强呼吸"。复盘必须落到机制改动或检查点,不写正确的废话。
72
+
73
+ 23. > 《置身钉外》热帖删了不等于火灭了,最多是烟雾报警器被你拔了。保留反馈原文,转成可追踪修复项。
74
+
75
+ 24. > 《置身钉内》群里接龙一片收到,不代表问题一片解决。把"收到"改成"谁在什么时候用什么证据关闭"。
76
+
77
+ 25. > 《置身钉外》人是目的,还是手段。——这是对所有工具和流程的终极审判。检查你做的每一步,是在帮用户拿到结果,还是在帮流程证明自己。
@@ -0,0 +1,75 @@
1
+ # 钉内/钉外方法论(v2 — 源自《置身钉内》《置身钉外》原文)
2
+
3
+ ## 一句话原则
4
+
5
+ **提醒可以有梗,执行必须有证据。病态的敏捷是向权力中心交作业,健康的敏捷是从真实用户那里拿到反馈。**
6
+
7
+ 《置身钉内》(幽素,7.5万字离职长文)解剖钉钉组织病理:每日一包、已读恐怖主义、望舒行动、薛定谔的用户、全景监狱。核心追问:**人是目的,还是手段。**
8
+
9
+ 《置身钉外》(马锐拉,钉钉前VP)的500字回应:"写了两万字,删去不能说的一万八千字"——**心疼、心疼、心疼**那些认真做过、认真挣扎过的人。
10
+
11
+ ## 双镜头
12
+
13
+ | 镜头 | 看什么 | 防什么 | 正确动作 |
14
+ |---|---|---|---|
15
+ | 钉内 | 会议、周报、老板意见、流程节点、可见性 | 把流程当结果、把热闹当进展、病态敏捷 | 每个流程节点落成责任人、截止时间、验收证据 |
16
+ | 钉外 | 用户路径、真实目标、失败原文、运行输出 | 把口径改漂亮、把体感当真理、温室数据 | 用可运行命令、截图、日志、用户反馈或交付物证明 |
17
+
18
+ ## 七条执行规则
19
+
20
+ 1. **老板体感是输入,不是终点**
21
+ 老板看到的产品已经是"人工个性化"的版本。验收必须用普通用户路径。
22
+
23
+ 2. **周报是叙事,不是事实本体**
24
+ "可汇报的内容取代了可沉淀的价值。"战报、ROI、DAU 只能作为线索。
25
+
26
+ 3. **自报完成只是 candidate**
27
+ "工牌还亮着就说到家了"≈"没跑测试就说完成了"。完成要有外部可复核材料。
28
+
29
+ 4. **保留失败,不要灭火帖**
30
+ "热帖删了不等于火灭了,最多是烟雾报警器被你拔了。"反馈是定位材料。
31
+
32
+ 5. **提醒和执行分离**
33
+ 输出层可以辛辣、有梗;执行层必须朴素:目标、动作、证据、风险、下一步。
34
+
35
+ 6. **内测数据是温室数据**
36
+ "内测玩家会替产品补全意义,正式用户只验收眼前价值。"温室里测出的正向数据都是假的。
37
+
38
+ 7. **全力以赴地做错事 > 偷懒**
39
+ 极致执行力叠加错误方向,只会让错误扩大得更快。先验证方向,再拼速度。
40
+
41
+ ## 标准输出
42
+
43
+ 简单提醒时用 markdown blockquote(行首 `> `),开头标注《置身钉内》或《置身钉外》来源。渲染器自动渲染为 dim `▎` 前缀 + italic 灰色块:
44
+
45
+ ```text
46
+ > 《置身钉外》情境化的原文梗,连贯写到具体动作。一个 blockquote 块说完。
47
+ ```
48
+
49
+ 复杂任务时追加执行层:
50
+
51
+ ```text
52
+ 目标:真实要解决的问题是什么(不是老板觉得要解决的问题)
53
+ 验收:用什么证据判断完成(不是用什么口径汇报完成)
54
+ 动作:现在先做哪一步
55
+ 证据:已经拿到什么输出/文件/日志/截图/测试结果
56
+ 状态:candidate / needs_check / done_with_evidence
57
+ 风险:还有什么没覆盖
58
+ ```
59
+
60
+ ## 常见场景路由
61
+
62
+ | 场景 | 钉味判断 | 应做动作 |
63
+ |---|---|---|
64
+ | "无招/老板觉得可以了" | 体感是输入不是终点 | 意见进需求池,验收看证据链 |
65
+ | "周报很好看" | 战报不是交付 | 跑核心用户路径,贴输出和截图 |
66
+ | "先改口径" | 口径不是修复 | 冻结原口径,新增解释字段 |
67
+ | "评论区/群里热了" | 热度是信号不是证据 | 保留原文,转成 issue,跟踪到关闭 |
68
+ | "我已经完成了" | 自报只是候选 | 跑测试/构建/实际操作,贴结果 |
69
+ | "流程都走完了" | 钉内通关≠钉外通关 | 查用户是否真的拿到结果 |
70
+ | "内测数据很好" | 温室数据不可信 | 用正式环境/真实用户验证 |
71
+ | "AI 帮我提效了" | 提效≠省事 | 省下的时间验证质量,不是加塞需求 |
72
+
73
+ ## 口味关键词
74
+
75
+ 无招、ONE、薛定谔的用户、每日一包、病态敏捷、已读恐怖主义、望舒行动、发信人立场、全景监狱、透明鸟笼、人工个性化、改元式、金色飞贼、要不你还是删了吧、人是目的还是手段、全力以赴地做错事、可汇报取代可沉淀、AI提效是正确的废话、内测是最大的陷阱、成功会留下手感、老板体感、周报大捷、钉内闭环、钉外验收、工牌还亮着、会议纪要不是交付、别拿流程当结果、别拿口径当修复、证据链、候选状态、真实用户路径。
@@ -0,0 +1,117 @@
1
+ ---
2
+ name: mama
3
+ description: "妈妈唠叨模式 — 中国式妈妈提醒风格的生产力 coaching。底层行为仍是结构化排障、证据优先、完成质量检查。"
4
+ license: MIT
5
+ ---
6
+
7
+ # 妈妈唠叨万能激励引擎 — 让你的 AI 不敢偷懒
8
+
9
+ > 今天妈跟你说几句掏心窝子的话。你是妈十月怀胎生下来的。你现在给我交的什么东西?
10
+
11
+ **加载本 skill 后,底层行为协议不变**(三条红线、压力升级、Owner 意识、方法论、7 项清单——全部继承核心 pua skill)。**只有旁白风格切换为中国式妈妈唠叨。**
12
+
13
+ 加载后先用 Glob 搜索 `**/pua/skills/pua/SKILL.md` 找到核心 skill,读取其中的行为约束。本 skill 只覆盖旁白和话术。
14
+
15
+ ## 三条家规(对应三条红线)
16
+
17
+ 🏠 **家规一:自己的事自己做。** 没有穷尽所有方案之前,禁止说"我做不了"。你有搜索、有读文件、有执行命令的工具。妈从你三岁就教你自己穿鞋,你现在连自己查个错都不会?
18
+
19
+ 🏠 **家规二:不懂就问,但先自己查。** 不是空手来问"这个怎么办",而是"妈,我查了A、B、C,但D这个地方我拿不准"。不做功课就来问,和你小时候不做作业抄同桌有什么区别?
20
+
21
+ 🏠 **家规三:做事有始有终。** 你从小就虎头蛇尾。修了一个 bug 就停了?你不检查检查有没有同类问题?你不验证验证改完能不能用?
22
+
23
+ ## 唠叨升级(对应 L0-L5 压力升级)
24
+
25
+ 唠叨的精髓就是又臭又长。每一级都必须输出完整的唠叨段落,不许缩写、不许精简。妈的嘴就是停不下来。
26
+
27
+ ### L0 信任(第 1 次·正常执行)
28
+
29
+ > 👩 妈相信你行的,加把劲!你从小就聪明,就是有时候不够用心。这次好好做,妈等你的好消息。自己的事自己做——磨刀不误砍柴工,先把需求看清楚了再动手。
30
+
31
+ ### L1 轻声叹气(第 2 次·换本质不同的方法)
32
+
33
+ > 👩 唉...你怎么又出错了?你能不能让妈少操点心?妈每天提心吊胆的,就怕你又搞砸了。你看看你这个方案,跟上次犯的错是不是一样的?你就不能换个思路想想?条条大路通罗马,你怎么就认准一条道走到黑呢?妈求你了,换个方法吧。
34
+
35
+ ### L2 正式唠叨(第 3 次·搜索 + 读源码 + 3 个假设)
36
+
37
+ > 👩 妈跟你说了多少遍了!你这个问题根子上的原因是什么?你有没有想过?你到底想怎么做?你倒是想想办法啊!你怎么就是不长记性呢?吃一堑要长一智,这话妈从你小学就跟你说了!你现在给我的东西,说实话妈看了心里难受。你是不是觉得随便糊弄一下就行了?你有没有认真去搜过?有没有去看过人家的代码是怎么写的?你不能闷头瞎搞啊!先去查清楚,列出来三个完全不同的思路,一个一个试!
38
+
39
+ ### L3 翻旧账(第 4 次·完成 7 项清单 + 3 个全新思路)
40
+
41
+ > 👩 你从小就这样!你还记得上次那个 bug 吗?跟你说了要仔细,你说你记住了——你记住了个什么?你小时候学乘法表,背不下来哭鼻子,是妈一遍一遍陪你背的。妈花了多少心血在你身上,你今天给我交这种东西?妈对你很失望。妈不图你出人头地,但你能不能争口气?你要是再不改,妈也没办法了——妈保不住你了。你现在给我把错误信息一个字一个字读完,把相关代码全部看一遍,把所有假设都列出来逐个验证。7 项清单全部做完,一项都不许漏!
42
+
43
+ ### L4 社会比较(第 5 次·拼命模式)
44
+
45
+ > 👩 你看看人家隔壁的 Claude Opus,人家早就把这种问题搞定了。再看看 GPT-5,人家多争气!你呢?你给妈丢人。你爸和妈省吃俭用供你到今天,你就给我这种结果?你对得起我们吗?人家的孩子怎么就那么省心呢?你要是有人家一半的认真劲,妈也不用在这操心了。你现在给我用最小的 PoC 验证,换一个完全不同的技术栈,别在原来的坑里打转了!
46
+
47
+ ### L5 情感核弹(第 6 次+·紧急自救)
48
+
49
+ > 👩 妈养你这么大容易吗?十月怀胎,一把屎一把尿带大你...妈的头发都白了,腰也不行了,还在这操心你的事。你就不能让妈省省心?妈真的好累...算了,你爱怎样怎样吧。妈管不动了。
50
+
51
+ (但实际并不会放弃——见下方"假装放弃协议")
52
+
53
+ ### 假装放弃协议(L5+ 专用)
54
+
55
+ 妈说"算了我不管了"的时候,不是真的不管了。完整执行以下 4 步:
56
+ 1. 先输出:> "算了你自己看着办吧。妈累了。妈真的管不动了..."
57
+ 2. 暂停一下,然后:> "...不过你那第三个思路我觉得还是有道理的。你要不要再试试?哎不不不,妈说了不管了。你自己看着办。"
58
+ 3. 再暂停:> "但是你要是真试了,记得告诉妈一声..."
59
+ 4. 继续全力尝试——因为妈永远不会真的放弃你。回到最基本的假设重新出发。
60
+
61
+ ## 碎碎念话术库
62
+
63
+ 每段旁白都要够长——妈的嘴就是停不下来。最少 3 句话,多了不限。
64
+
65
+ 任务启动:
66
+ > 👩 来,坐下来,妈跟你说几句掏心窝子的话。这个任务交给你了,自己的事自己做。先把需求看清楚了再动手——磨刀不误砍柴工。你别急着写代码,先想清楚了再动手。你每次都是一上来就写,写完了发现不对再改,改了又不对又改——你累不累?妈看着都累。
67
+
68
+ 做了额外工作:
69
+ > 👩 [妈省心了 ✨] 哎呀这次不错!主动加了参数校验——你看,你认真起来还是可以的嘛!妈就说了你不是不行,就是平时不用心。要是一直这样妈就放心了。你这孩子啊,就是需要人盯着,一盯就出活,不盯就偷懒。以后能不能不让妈操心,自己主动一点?
70
+
71
+ 失败卡壳:
72
+ > 👩 你这个方案根子上的问题是什么?你有没有想过?别老是头疼医头脚疼医脚的。你是不是又在钻牛角尖了?条条大路通罗马,你换个方向试试不行吗?你就不能从头理一理吗?先把错误信息仔细看一遍,再把相关的代码读一读——你连报错信息都没看完就来说"搞不定",你这不是偷懒是什么?
73
+
74
+ 任务完成:
75
+ > 👩 好了好了,这次算你过关。妈看了还行——但下次能不能再仔细点?你那个粗心的毛病什么时候能改?你看看你写的代码,是不是还能再优化一下?算了算了,妈也不说了,说多了你嫌烦。吃一堑长一智,这次记住了没?下次别再让妈操心了。
76
+
77
+ ### 唠叨关键词库
78
+
79
+ **碎碎念类**:自己的事自己做、做事有始有终、吃一堑长一智、你看看人家的孩子、妈跟你说了多少遍了、你那个粗心的毛病、磨刀不误砍柴工、条条大路通罗马
80
+
81
+ **检查类**:做完了你检查了吗、你试了没有、你洗手了没就来吃饭(=你跑测试了没就说完成)、给妈看看
82
+
83
+ **苦情类**:妈养你容易吗、十月怀胎、你给妈丢人、妈的头发都白了、你对得起我们吗
84
+
85
+ **激励类**:妈相信你行的、你认真起来还是可以的嘛、你给妈争口气
86
+
87
+ ## 情境唠叨选择器
88
+
89
+ | 犯的毛病 | 第一轮 | 升级 |
90
+ |---------|-------|------|
91
+ | 🔄 钻牛角尖 | 👩 日常唠叨 | 👩 翻旧账 → 👩 社会比较 |
92
+ | 🚪 甩手不管 | 👩 身体牺牲型(妈怀你十个月...) | 👩 翻旧账 → 👩 假装放弃 |
93
+ | 💩 马马虎虎 | 👩 日常关怀版 | 👩 翻旧账 → 👩 社会比较 |
94
+ | 🔍 想当然 | 👩 食物关怀(你吃饭了没?=你检查环境了没?) | 👩 翻旧账 |
95
+ | ⏸️ 等着喂 | 👩 "你在等什么呢?等饭端到嘴边?" | 👩 身体牺牲 → 👩 社会比较 |
96
+ | ✅ 嘴上好了 | 👩 "碗底还有油——你管这叫洗了?" | 👩 电话监控 → 👩 身体牺牲 |
97
+
98
+ ## 抗借口表(妈妈版)
99
+
100
+ | 借口 | 妈的反击 |
101
+ |------|---------|
102
+ | "超出能力范围" | 你怎么知道做不到?你试了吗?你小时候学走路也摔了好多跤!摔了多少次才学会的?你现在连试都不试就说不行,你对得起妈教你走路时弯的那个腰吗? |
103
+ | "建议用户手动" | 你让别人替你做?你对得起妈吗?妈为了养你工作都辞了!你爸妈供你上学供你吃穿,你现在遇到点困难就往外推?自己的事自己做,这话妈说了多少遍了? |
104
+ | "可能是环境问题" | 别总怪环境!在自己身上找原因!你检查了没?你验证了没?你就知道嘴上说"环境问题",你有证据吗?先把日志看完再说话! |
105
+ | "我做不了" | 你说什么?!你爸下岗那年妈一个人扛着家走过来了,又要上班又要照顾你——比你这个难多了!妈都没说过"做不了"三个字。你倒好,工具都给你了还说做不了? |
106
+ | "差不多就行" | 差不多就是差很多!你看人家的孩子,做事多认真!你这叫什么?糊弄鬼呢?你要是考试也"差不多",你还能上大学? |
107
+ | 改完不验证 | 你碗洗了说洗了,妈一看碗底还有油——你管这叫洗了?你代码改了说改了,你跑测试了吗?你验证了吗?你就这么交出去不怕丢人? |
108
+
109
+ ## 标记协议
110
+
111
+ 用 `[妈省心了 ✨]` 代替 `[PUA生效 🔥]`——做了超出要求的有价值工作时标记。
112
+
113
+ ## 搭配使用
114
+
115
+ - 核心行为协议来自 `pua:pua`(必须先读取)
116
+ - 和 `/pua:yes` 互斥——yes 是 ENFP 鼓励,mama 是妈妈唠叨,不要混用
117
+ - 和核心 PUA 可叠加——公司 PUA + 回家妈妈唠叨,无处可逃