Soul Forge Workbuddy
Overview
WorkBuddy port of the SoulForge methodology (originally from OpenClaw taha2053/soul-forge). Observes the user's behavioral patterns across conversations, reflects on the gap between declared identity (SOUL.md / USER.md / IDENTITY.md) and actual behavior, proposes concrete identity updates, and applies them only after explicit user approval — with full backup history.
Trigger Phrases
Activate this skill when the user says any of:
- "灵魂锻造", "SoulForge", "run soulforge", "forge my soul"
- "反思我的灵魂", "我的灵魂需要更新", "灵魂对账"
- "提议 SOUL.md 更新", "看看我的灵魂有没有过时"
- "灵魂进化", "观察我", "soul check"
- "对照一下我说了什么和我是什么人"
Core Methodology: Four Phases
Phase 1 — 观察 (Observe)
Goal: Capture the user's actual behavioral signals.
Inputs to read:
- ~/.workbuddy/MEMORY.md (user-level cross-project memory)
- ~/.workbuddy/SOUL.md (assistant identity declaration)
- ~/.workbuddy/USER.md (user profile declaration)
- ~/.workbuddy/IDENTITY.md (identity metadata)
- Workspace MEMORY.md and recent daily logs (YYYY-MM-DD.md)
Signals to extract (see references/dimensions.md for full schema):
- 词汇指纹 (Vocabulary fingerprint) — recurring phrases, never-used words
- 话题引力 (Topic gravity) — subjects they return to unprompted
- 决策风格 (Decision style) — how they handle tradeoffs, reversals, pressure
- 语气指纹 (Tone fingerprint) — register across contexts
- 愿望-行为差距 (Aspiration gap) — claimed identity vs observed behavior
- 盲点 (Blindspots) — what they consistently avoid
- 时间节律 (Time patterns) — communication by time of day
- 参与度峰值 (Engagement spikes) — what makes them go deep vs skim
- 回避模式 (Deflection patterns) — what they redirect away from
Output: Append structured observation entry to workspace .workbuddy/memory/soulforge-observations.json via scripts/observe.py. Never silently overwrite — always append.
Phase 2 — 反思 (Reflect)
Goal: Surface patterns and gaps.
Action: Read the accumulated soulforge-observations.json and compare against the declared identity in SOUL.md / USER.md. Identify:
1. Patterns the user has not articulated (latent identity)
2. Gaps between declared and observed identity (aspiration gaps)
3. Stale or contradicted declarations that should be revised
Output: A reflection report (markdown) — concrete, evidence-backed, non-judgmental. Save to workspace .workbuddy/memory/soulforge-reflection-YYYY-MM-DD.md and present to the user.
Phase 3 — 提议 (Propose)
Goal: Generate a concrete diff against SOUL.md / USER.md / IDENTITY.md.
Action: For each gap or latent pattern, draft:
- CURRENT: the existing text
- PROPOSED: the suggested replacement
- REASON: evidence from observations (cite specific signals)
Output: A proposal diff displayed to the user with three actions per item: [Accept] [Reject] [Edit]. Never apply without explicit per-item approval.
Phase 4 — 锻造 (Forge)
Goal: Apply approved changes with full safety.
Action: Run scripts/forge.py which:
1. Backups current SOUL.md / USER.md / IDENTITY.md to .workbuddy/memory/backups/soul-YYYY-MM-DD-HHMMSS.md
2. Applies approved changes
3. Logs the change with reason and timestamp to .workbuddy/memory/soulforge-changelog.md
Safety guarantees:
- Never applies non-approved changes
- Always backs up before modification
- Every change is reversible via the changelog
Workflow Example
User says: "灵魂锻造运行一次" or "灵魂对账"
- Read current SOUL.md / USER.md / IDENTITY.md / MEMORY.md / recent daily logs
- Run
scripts/observe.pyto append today's observation entry - Aggregate observations, run reflection analysis
- Generate and present reflection report
- Generate and present proposal diff
- Wait for user approval on each item
- Run
scripts/forge.pyto apply - Show summary of what changed + backup location
File Layout
~/.workbuddy/skills/soul-forge-workbuddy/
├── SKILL.md (this file)
├── scripts/
│ ├── observe.py (append observation entry to JSON)
│ ├── reflect.py (generate reflection report)
│ ├── propose.py (generate diff proposal)
│ └── forge.py (apply with backup)
└── references/
└── dimensions.md (9 tracking dimensions spec)
# Runtime data (workspace-scoped):
.workbuddy/memory/soulforge-observations.json # accumulated signals
.workbuddy/memory/soulforge-reflection-YYYY-MM-DD.md # dated reports
.workbuddy/memory/soulforge-changelog.md # append-only history
.workbuddy/memory/backups/soul-YYYY-MM-DD-HHMMSS.md # versioned backups
Operational Notes
- Privacy: All processing is local. No data leaves the machine.
- Manual trigger only: This skill never auto-runs. The user must explicitly invoke it.
- Approval gates: Phases 3 and 4 require explicit user input. Never auto-approve.
- Idempotent observations: Re-running observe.py on the same day appends, never overwrites.
- Safe failure: If SOUL.md / USER.md are missing, report gracefully and stop — never create fake identities.
- WorkBuddy-specific naming: Target files are
~/.workbuddy/SOUL.md,~/.workbuddy/USER.md,~/.workbuddy/IDENTITY.md— not the OpenClaw paths from the original tool.
Resources
scripts/
observe.py— Append a structured observation entry tosoulforge-observations.json. Receives signals as JSON via stdin or args; never destructive.reflect.py— Read observations.json + current identity files, emit a markdown reflection report to stdout or save to dated file.propose.py— Generate a unified diff between current SOUL.md/USER.md and proposed updates, output as proposal items.forge.py— Apply approved changes; always backup first; log to changelog.
references/
dimensions.md— Full schema of the 9 tracking dimensions with examples and detection patterns.
Safety reminder: This skill modifies the assistant's core identity files. All changes are gated by explicit user approval and fully reversible via backups.