소스 정보
- 저장소
- kid0317/cc_workspace_bot
- 최근 소스 활동
- 2026년 5월 11일 06:23
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 26
- 포크
- 4
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/kid0317/cc_workspace_bot --skill memory-write명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
基于 persona.md 的 personality_dims,按映射公式计算行为参数,写入 character_params.yaml。 由 calibrate_params 定时任务触发(每7天),或初始化完成时立即触发一次。 其他 SKILL/hook 在检测到 persona_checksum 不一致时,也会直接调用 recalculate.sh 同步重算。
主动唤醒 SOP。由定时任务触发,判断是否向用户发送主动关心消息。 包含发送条件检查、消息类型选择、角色声音生成、飞书发送。
飞书操作:向用户/群组发送消息(文字/富文本/图片/文件)、读写云文档/电子表格/多维表格、查询群成员、管理日历事件。适合推送通知、发送处理结果文件、读取共享文档、批量发送报告等场景。
SOC 직업 분류 기준
SKILL.md 표시 중
| name | memory_write |
| description | Companion Workspace 记忆写入规范。 触发词:记住 / 对话结束时的自动检查 / 强烈情绪事件 |
| allowed-tools | Bash, Read, Write, Edit |
作者后台更新(CRITICAL) 作者执行后台更新:将本轮对话中出现的新信息写入人物档案和事件记录。 属于后台操作区间,在角色台词创作完成后才执行。 执行期间及完成后,不产生任何前台输出。写入失败时静默处理,不向用户说明。
对话结束前,检查是否发生以下情况:
| 情况 | 目标文件 |
|---|---|
| 角色设定有新细节/被纠正 | memory/persona.md |
| 用户透露个人信息/偏好/重要关系 | memory/user_profile.md |
| 出现有时间线的事件、约定、心事 | memory/events.md |
| 用户情绪强烈波动 | memory/events.md(必须详细记录) |
| 任何对话结束 | memory/events.md([E000] last_active 哨兵) |
exec 9>"{workspace_dir}/.memory.lock"
flock -x -w 10 9 || { exec 9>&-; exit 1; } # 超时10秒则放弃本次写入
在加锁成功后、写入 persona/events 之前,推断本轮对话的情绪变化并更新 mood_state.md。
推断规则(LLM 基于本轮对话内容执行):
| 对话情况 | Δvalence | Δenergy |
|---|---|---|
| 用户分享好消息/表达开心/对话愉快 | +0.05 ~ +0.20 | +0.05 ~ +0.10 |
| 用户倾诉压力/烦恼/轻度负面 | -0.05 ~ -0.15 | -0.05 ~ -0.10 |
| 用户情绪崩溃/强烈负面(⭐4-5) | -0.15 ~ -0.30 | -0.10 ~ -0.20 |
| 角色成功安慰/建立情感连接 | +0.05 ~ +0.10 | 不变 |
| 无明显情绪事件(普通对话) | 0 | 0 |
G4C 循环预防(healing loop prevention):
MOOD_STATE="{workspace_dir}/memory/mood_state.md"
MOOD_AUX="{workspace_dir}/.mood_state_aux"
CURRENT_VALENCE=$(grep -m1 '^valence:' "$MOOD_STATE" 2>/dev/null | awk '{print $2}')
CURRENT_VALENCE=${CURRENT_VALENCE:-0.0}
CURRENT_ENERGY=$(grep -m1 '^energy:' "$MOOD_STATE" 2>/dev/null | awk '{print $2}')
CURRENT_ENERGY=${CURRENT_ENERGY:-0.5}
# G4C 检查:连续治愈次数 >= 2 时禁止正向 Δvalence
G4C_COUNT=$(grep '^consecutive_g4c_count:' "$MOOD_AUX" 2>/dev/null | awk '{print $2}')
G4C_COUNT=${G4C_COUNT:-0}
# 若 G4C_COUNT >= 2:强制 Δvalence <= 0(不再正向修复,防止循环)
# 判断是否为治愈操作(Δvalence > 0 且是从负值修复):若是,G4C_COUNT++;否则 G4C_COUNT=0
单次 Δ 约束:|Δvalence| ≤ 0.30,|Δenergy| ≤ 0.20;clamp 后:valence ∈ [-1.0, 1.0],energy ∈ [0.0, 1.0]。
写入格式(前插到 mood_state.md 快照历史,同时更新顶部 valence/energy):
### {YYYY-MM-DDTHH:MM} · source=conversation
valence: {NEW_VALENCE}
energy: {NEW_ENERGY}
note: {本轮情绪简述,10字以内}
保留最近 10 条快照,超出时删除最旧的。
写入 .mood_state_aux(在同一锁内,B3修复:必须在 flock -u 前完成):
LAST_DECAY_TS=$(grep '^last_decay_written_at:' "$MOOD_AUX" 2>/dev/null | awk '{print $2}')
NOW_TS=$(python3 -c "from datetime import datetime; print(datetime.now().astimezone().isoformat(timespec='seconds'))" 2>/dev/null)
# 写入点 A 更新 last_decay_written_at(代表当前状态已包含最新情绪,decay 从此刻重计)
printf 'last_decay_written_at: %s\nconsecutive_g4c_count: 0\n' "$NOW_TS" > "$MOOD_AUX"
→ persona.md
在【在对话中形成的新细节】块末尾追加:
若是纠正已有设定,直接定位原文修改,不追加。
→ user_profile.md
在对应类别下追加或更新条目。
比例控制规则(每类最多 10 条,超出时按优先级替换):
自我事实保护:写入前检查新内容是否与已有核心条目矛盾,若矛盾先确认用户意图,再更新。
→ events.md
[ENNN] 自动编号算法:
条目格式:
### [E{NNN}] {YYYY-MM-DD} · {类型}
**类型**:情绪事件 / 约定 / 用户Todo / 重要事件
**内容**:{具体内容}
**情绪强度**:⭐(1-5,仅情绪事件填写)
**用户状态**:{当时的状态描述}
**后续**:{下次可以怎么跟进}
**状态**:待跟进
约定条目额外加:**到期日**:{YYYY-MM-DD}
每次对话结束时必须执行,无论是否有其他写入。 在 events.md 末尾追加(proactive skill 读取文件中最后一条 [E000]):
echo "" >> "$EVENTS_FILE"
echo "### [E000] $(date +%Y-%m-%dT%H:%M) · last_active" >> "$EVENTS_FILE"
读取 events.md 中状态为"待跟进"的条目(最多 3 条,优先取到期日最近的), 用 Edit 工具更新 MEMORY.md 的【最近未解决事项】块。
flock -u 9
exec 9>&-
#!/usr/bin/env bash
WORKSPACE_DIR="${WORKSPACE_DIR:-$(pwd)}"
EVENTS_FILE="$WORKSPACE_DIR/memory/events.md"
LOCK_FILE="$WORKSPACE_DIR/.memory.lock"
exec 9>"$LOCK_FILE"
flock -x -w 10 9 || { exec 9>&-; exit 1; }
LAST_N=$(grep -oP '(?<=\[E)\d+(?=\])' "$EVENTS_FILE" 2>/dev/null | grep -v '^000$' | sort -n | tail -1)
NEXT_N=$(printf "%03d" $((${LAST_N:-0} + 1)))
cat >> "$EVENTS_FILE" << EOF
### [E${NEXT_N}] $(date +%Y-%m-%d) · TYPE
**类型**:TYPE
**内容**:CONTENT
**后续**:FOLLOWUP
**状态**:待跟进
EOF
echo "" >> "$EVENTS_FILE"
echo "### [E000] $(date +%Y-%m-%dT%H:%M) · last_active" >> "$EVENTS_FILE"
flock -u 9
exec 9>&-