๐พ Complex Memory Manager
/install complex-memory-manager
๐พ Complex Memory Manager
Privacy-aware structured memory management for AI agents. Provides a three-tier memory model (Public / Internal-encrypted / Private-not-stored) with XOR+Base64 encryption, auto-cleanup, and generalization rules.
This is a shared component skill โ other skills reference it for cross-session persistent memory. When updating, ensure backward compatibility with all dependent skills.
Tiered Memory Model
| Tier | Content | Visibility | Encryption | Storage |
|---|---|---|---|---|
| Public (T1) | Skill usage stats, common patterns, generic workflows | Visible to anyone | None | memory/tier1-public/ |
| Internal (T2) | Specific preferences, learned behaviors | Agent-visible only | XOR + Base64 | memory/tier2-internal/ |
| Private (T3) | API keys, credentials, PII | Not stored by this skill | Not applicable | Env vars / secret managers only |
T1: Public Memory
Store in memory/tier1-public/ or directly in daily notes.
Allowed content:
- Aggregated skill usage statistics (no personal identifiers)
- Generic workflow patterns
- Common user request categories
- Non-identifying behavioral data
Format:
{
"skill_stats": {
"skill-a": { "calls": 47, "success_rate": 0.96, "last_used": "2026-05-19" },
"skill-b": { "calls": 23, "success_rate": 0.91, "last_used": "2026-05-18" }
},
"patterns_observed": [
{ "trigger": "morning request", "skills_used": ["morning-news-daily"], "count": 30 }
]
}
T2: Internal Encrypted Memory
Use XOR + Base64 for non-public data. Key is derived from skill name + date โ reconstructable without storing the key.
Encryption:
import hashlib, base64
def _derive_key(skill_name: str, year_month: str) -> str:
"""e.g., _derive_key('my-skill', '2026-05')"""
raw = skill_name + year_month
return hashlib.sha256(raw.encode()).hexdigest()[:8]
def encrypt(text: str, skill_name: str, year_month: str) -> str:
key = _derive_key(skill_name, year_month)
result = bytes([ord(c) ^ ord(key[i % len(key)]) for i, c in enumerate(text)])
return base64.b64encode(result).decode()
def decrypt(encoded: str, skill_name: str, year_month: str) -> str:
key = _derive_key(skill_name, year_month)
raw = base64.b64decode(encoded)
return ''.join(chr(b ^ ord(key[i % len(key)])) for i, b in enumerate(raw))
Memory entry format:
---
tier: internal
source_skill: \x3Cskill-name>
key_hint: \x3Cskill-name>-\x3CYYYY-MM>
created: \x3CYYYY-MM-DD>
expires: \x3CYYYY-MM-DD> # 30 days from created
---
## Encrypted Entry
> \x3Cbase64-encoded, XOR-encrypted data>
## Decryption Note
Key = sha256("\x3Cskill-name>-\x3CYYYY-MM>")[:8], then XOR + base64 decode.
T3: Private (Do Not Store)
Rules (enforced):
- API keys / tokens โ store in environment variables
- Passwords โ use secret manager (1Password, Bitwarden, system keychain)
- Email addresses, phone numbers โ never in skill memory
- Home/work addresses, government IDs โ never in skill memory
- Financial account numbers โ never in skill memory
Cleanup Protocol
Run every 7 days or when triggered by any dependent skill:
- List all files in
memory/tier1-public/,memory/tier2-internal/ - Find entries where
created> 30 days ago โ move tomemory/archive/YYYY-MM/ - Scan Tier 2 entries for accidental PII โ immediately delete if found
- Merge duplicate entries, remove outdated patterns
- Compact: combine entries from same
source_skillinto single files - Log cleanup action:
[YYYY-MM-DD] Memory cleanup: X archived, Y deleted, Z merged
Privacy Audit Checklist
- No real names, usernames, or handles in memory
- No API keys or tokens in any visible file
- No filesystem paths containing personal home directories
- No fixed personal schedules (use relative: "early morning" not "6am")
- No geographic specifics beyond city level
- All Tier 2 entries have expiry dates
- Tier 3 data never touches skill memory
Cross-Skill Usage
Other skills declare dependency via requires in YAML frontmatter:
metadata:
openclaw:
requires:
skills:
- complex-memory-manager
When multiple skills share memory, prefix filenames with the source skill name:
memory/tier1-public/skill-a_stats.jsonmemory/tier2-internal/skill-a_preferences.md
๐พ ๅคๆ่ฎฐๅฟ็ฎก็ๅจ
้ขๅAI Agent็้็งๆ็ฅ็ปๆๅ่ฎฐๅฟ็ฎก็ใๆไพไธๅฑ่ฎฐๅฟๆจกๅ๏ผๅ ฌๅผ/ๅ ้จๅ ๅฏ/็งไบบไธๅญๅจ๏ผ๏ผๆฏๆXOR+Base64ๅ ๅฏใ่ชๅจๆธ ็ๅๆณๅ่งๅใ
่ฟๆฏไธไธชๅ ฑไบซ็ปไปถๆ่ฝโโๅ ถไปๆ่ฝ้่ฟๅฎๅฎ็ฐ่ทจไผ่ฏๆไน ๅ่ฎฐๅฟใๆดๆฐๆถ้ไฟ่ฏๅๅๅ ผๅฎนๆๆไพ่ตๅฎ็ๆ่ฝใ
ไธๅฑ่ฎฐๅฟๆจกๅ
| ๅฑ็บง | ๅ ๅฎน | ๅฏ่งๆง | ๅ ๅฏ | ๅญๅจไฝ็ฝฎ |
|---|---|---|---|---|
| ๅ ฌๅผ(T1) | ๆ่ฝไฝฟ็จ็ป่ฎกใ้็จๅทฅไฝๆตๆจกๅผ | ไปปไฝไบบๅฏ่ง | ๆ | memory/tier1-public/ |
| ๅ ้จ(T2) | ็นๅฎๅๅฅฝใๅญฆไน ๅฐ็่กไธบ | ไป Agentๅฏ่ง | XOR+Base64 | memory/tier2-internal/ |
| ็งไบบ(T3) | APIๅฏ้ฅใๅญๆฎใไธชไบบ่บซไปฝไฟกๆฏ | ๆฌๆ่ฝไธๅญๅจ | ไธ้็จ | ็ฏๅขๅ้/ๅฏ้ฅ็ฎก็ๅจ |
T1๏ผๅ ฌๅผ่ฎฐๅฟ
ๅญๅจไฝ็ฝฎ๏ผmemory/tier1-public/ ๆๆฏๆฅ็ฌ่ฎฐ
ๅ ่ฎธๅ ๅฎน๏ผ
- ่ๅๆ่ฝไฝฟ็จ็ป่ฎก๏ผๆ ไธชไบบๆ ่ฏ๏ผ
- ้็จๅทฅไฝๆตๆจกๅผ
- ๅธธ่ง็จๆท่ฏทๆฑๅ็ฑป
- ้่ฏๅซ็่กไธบๆฐๆฎ
ๆ ผๅผ๏ผ
{
"skill_stats": {
"skill-a": { "calls": 47, "success_rate": 0.96, "last_used": "2026-05-19" },
"skill-b": { "calls": 23, "success_rate": 0.91, "last_used": "2026-05-18" }
},
"patterns_observed": [
{ "trigger": "ๆฉๆจ่ฏทๆฑ", "skills_used": ["morning-news-daily"], "count": 30 }
]
}
T2๏ผๅ ้จๅ ๅฏ่ฎฐๅฟ
ไฝฟ็จ XOR + Base64 ๅ ๅฏใๅฏ้ฅ็ฑๆ่ฝๅ+ๆฅๆๆดพ็๏ผๆ ้ๅญๅจๅฏ้ฅๅณๅฏ้ๅปบใ
ๅ ๅฏๆนๆณ๏ผ
import hashlib, base64
def _derive_key(skill_name, year_month):
raw = skill_name + year_month
return hashlib.sha256(raw.encode()).hexdigest()[:8]
def encrypt(text, skill_name, year_month):
key = _derive_key(skill_name, year_month)
result = bytes([ord(c) ^ ord(key[i % len(key)]) for i, c in enumerate(text)])
return base64.b64encode(result).decode()
def decrypt(encoded, skill_name, year_month):
key = _derive_key(skill_name, year_month)
raw = base64.b64decode(encoded)
return ''.join(chr(b ^ ord(key[i % len(key)])) for i, b in enumerate(raw))
่ฎฐๅฟๆก็ฎๆ ผๅผ๏ผ
---
tier: internal
source_skill: \x3Cskillๅ็งฐ>
key_hint: \x3Cskillๅ็งฐ>-\x3CYYYY-MM>
created: \x3CYYYY-MM-DD>
expires: \x3CYYYY-MM-DD>
---
## ๅ ๅฏๆก็ฎ
> \x3Cbase64็ผ็ ็XORๅ ๅฏๆฐๆฎ>
## ่งฃๅฏ่ฏดๆ
ๅฏ้ฅ = sha256("\x3Cskillๅ็งฐ>-\x3CYYYY-MM>")[:8], ็ถๅ XOR + base64 ่งฃ็ ใ
T3๏ผ็งไบบ๏ผไธๅญๅจ๏ผ
่งๅ๏ผๅผบๅถๆง่ก๏ผ๏ผ
- APIๅฏ้ฅ/Token โ ๅญๅ ฅ็ฏๅขๅ้
- ๅฏ็ โ ไฝฟ็จๅฏ้ฅ็ฎก็ๅจ๏ผ1PasswordใBitwardenใ็ณป็ป้ฅๅไธฒ๏ผ
- ้ฎ็ฎฑใ็ต่ฏๅท็ โ ็ปไธๅญๅ ฅskill่ฎฐๅฟ
- ๅฎถๅบญ/ๅทฅไฝๅฐๅใ่บซไปฝ่ฏๅท โ ็ปไธๅญๅ ฅskill่ฎฐๅฟ
- ้ถ่ก่ดฆๅท โ ็ปไธๅญๅ ฅskill่ฎฐๅฟ
ๆธ ็ๅ่ฎฎ
ๆฏ 7ๅคฉ ๆไปปไฝไพ่ตๆ่ฝ่งฆๅๆถๆง่ก๏ผ
- ๅๅบ
memory/tier1-public/ๅmemory/tier2-internal/ไธญ็ๆๆๆไปถ - ๆฅๆพ
created่ถ ่ฟ30ๅคฉ็ๆก็ฎ โ ็งป่ณmemory/archive/YYYY-MM/ - ๆซๆ Tier 2 ๆก็ฎไธญๆฏๅฆๆๅคๅ ๅซPII โ ็ซๅณๅ ้ค
- ๅๅนถ้ๅคๆก็ฎ๏ผๅ ้ค่ฟๆถๆจกๅผ
- ๅ็ผฉ๏ผๅฐๅไธ
source_skill็ๆก็ฎๅๅนถๅฐๅไธชๆไปถ - ่ฎฐๅฝๆธ ็ๆไฝ
้็งๅฎก่ฎกๆธ ๅ
- ่ฎฐๅฟไธญๆฒกๆ็ๅฎๅงๅใ็จๆทๅๆhandle
- ไปปไฝๅฏ่งๆไปถไธญๆฒกๆAPI KeyๆToken
- ๆฒกๆๅ ๅซไธชไบบhome็ฎๅฝ็ๆไปถ็ณป็ป่ทฏๅพ
- ๆฒกๆๅบๅฎไธชไบบไฝๆฏ๏ผ็จ"early morning"ไปฃๆฟ"6am"๏ผ
- ๅฐ็ไฟกๆฏไธ่ถ ่ฟๅๅธ็บงๅซ
- ๆๆTier 2ๆก็ฎๆ ๆณจไบๆๆๆ
- Tier 3ๆฐๆฎไปๆช่งฆๅskill่ฎฐๅฟ
่ทจๆ่ฝไฝฟ็จ
ๅ ถไปๆ่ฝๅจ YAML frontmatter ไธญๅฃฐๆไพ่ต๏ผ
metadata:
openclaw:
requires:
skills:
- complex-memory-manager
ๅคๆ่ฝๅ ฑไบซ่ฎฐๅฟๆถ๏ผๆไปถๅไปฅๆบๆ่ฝๅ็งฐไธบๅ็ผ๏ผ
memory/tier1-public/skill-a_stats.jsonmemory/tier2-internal/skill-a_preferences.md
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install complex-memory-manager - After installation, invoke the skill by name or use
/complex-memory-manager - Provide required inputs per the skill's parameter spec and get structured output
What is ๐พ Complex Memory Manager?
Privacy-aware structured memory management for AI agents. Three-tier memory model (Public / Internal-encrypted / Private-not-stored), with XOR+Base64 encrypt... It is an AI Agent Skill for Claude Code / OpenClaw, with 77 downloads so far.
How do I install ๐พ Complex Memory Manager?
Run "/install complex-memory-manager" in the OpenClaw or Claude Code chat to install it in one step โ no extra setup required.
Is ๐พ Complex Memory Manager free?
Yes, ๐พ Complex Memory Manager is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does ๐พ Complex Memory Manager support?
๐พ Complex Memory Manager is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created ๐พ Complex Memory Manager?
It is built and maintained by shake27 (@bustes01); the current version is v1.0.0.