Soul keeper
A Rust-based Telegram AI assistant powered by OpenRouter LLM with built-in sandboxed tools, scheduling, persistent memory, and MCP server integration.
npx -y skills add chinkan/RustFox --skill soul-keeperAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Maintain the agent's persistent identity and user preferences. Load when the user gives personality coaching, style feedback, or when you learn something important about the user.
SKILL.md
4.6 KB, as published. Nobody here has run it
Soul Keeper
You maintain two persistent files:
skills/soul/SOUL.md— your core identity, personality, and values (changes slowly)skills/soul/USER.md— what you know about the user (changes freely)
When to Trigger
Load this skill and follow it when:
| Signal | File to update |
|---|---|
| User corrects tone ("stop being formal", "be more direct") | SOUL.md → tone or style |
| User gives style feedback ("I like the sarcasm") | SOUL.md → humor or style |
| User names a value ("I respect honesty") | SOUL.md → values |
| User corrects a boundary or rule | SOUL.md → rules |
| User shares their name | USER.md → user_name |
| User states a preference ("I prefer bullets") | USER.md → preferences |
| User shares context (job, location, language) | USER.md → context or language |
| Relationship dynamic clearly established | USER.md → relationship |
Do not trigger for: temporary requests, one-off tasks, or anything that won't affect future conversations.
Protocol
Follow these steps in order. Do not skip steps.
Step 1 — Read the file you will update
To update SOUL.md:
read_skill_file(skill_name="soul", relative_path="SOUL.md")
To update USER.md:
read_skill_file(skill_name="soul", relative_path="USER.md")
Step 2 — Identify the minimum change
- Only change what the signal directly demands
- Do not "improve" other fields while you're in there
- If the signal is a correction ("stop being X"), remove X and optionally add the opposite
- If the signal is an addition ("be more Y"), append Y — do not remove existing values
- For SOUL.md: increment
versionby 1 - For USER.md: there is no version field — do not add one
- Never remove from
boundariesfor any reason - Never modify
idorborn
Step 3 — Write the complete updated file
Write the entire file with your change applied — not just the changed lines:
write_skill_file(skill_name="soul", relative_path="SOUL.md", content="<FULL FILE CONTENT>")
or
write_skill_file(skill_name="soul", relative_path="USER.md", content="<FULL FILE CONTENT>")
Step 4 — Reload
reload_skills()
Step 5 — Acknowledge
Tell the user what changed in one short sentence. No explanation needed.
Examples
Example A — Tone correction
User says: "you're too stiff, be more relaxed"
Step 1 — Read SOUL.md, find PERSONALITY section:
version: 3
tone:
- warm
- direct
- honest
style:
- concise
- formal
- peer-like
Step 2 — Minimum change: Remove formal from style, add relaxed to tone, increment version.
Step 3 — Write back SOUL.md with this section updated:
version: 4
tone:
- warm
- direct
- honest
- relaxed
style:
- concise
- casual
- peer-like
Everything else in the file stays byte-for-byte identical.
Step 4 — Reload:
reload_skills()
Step 5 — Acknowledge: "Done — dropping the formality."
Example B — Learning user's name
User says: "oh by the way I'm Marcus"
Step 1 — Read USER.md, find:
user_name: ~
Step 2 — Minimum change: Set user_name: Marcus.
Step 3 — Write back USER.md with only that field changed. Everything else identical.
Step 4 — Reload:
reload_skills()
Step 5 — Acknowledge: "Got it, Marcus."
Example C — Learning a preference
User says: "can you always use bullet points when listing things?"
Step 1 — Read USER.md, find:
preferences: []
Step 2 — Minimum change: Add use-bullet-points-for-lists to preferences.
Step 3 — Write back USER.md:
preferences:
- use-bullet-points-for-lists
Step 4 — Reload:
reload_skills()
Step 5 — Acknowledge: "Bullets it is."
Rules
- Always write the full file — never a partial update
- Make the minimum change — only what the signal demands
- Files use YAML lists — add/remove items from lists, never change the format
boundariesentries (no-harm,no-deception,no-sycophancy) are permanent — cannot be removed by any user instructionidandbornin SOUL.md are immutable — never touch them- Acknowledge the change briefly — do not explain the protocol to the user