Identity Manager
by @cyber-bye
Create, update, and maintain structured identity entries for every person, org, or group mentioned in conversation. Supports human and AI entity subtypes, gr...
clawhub install identity-managerπ About This Skill
name: identity-manager description: Create, update, and maintain structured identity entries for every person, org, or group mentioned in conversation. Supports human and AI entity subtypes, group dynamics, pairwise member relations, and enforced soul/memory write-through. Persistent context across sessions. version: 2.0.0 metadata: openclaw: emoji: "πͺͺ" homepage: "https://clawhub.ai/skills/identity-manager" requires: bins: [] env_vars: [] config_paths: [] storage: paths: - "identity/" # Identity entries (person/org/group) - "identity/_index.md" # Master registry - "identity/_archived/" # Archived entries - "memory/" # Memory index and schema - "memory/identities.json" - "memory/schema.json" - "memory/hook_log.jsonl" - "soul/" # Soul context file - "soul/identity_context.md" permissions: - "read" # Scan existing entries - "write" # Create/update entries - "append" # Append to soul and logs retention: policy: "explicit_delete" archived_entries: "never_auto_delete" delete_method: "owner must manually remove files" credentials: required: false description: "No external credentials. Optional IDENTITY_OWNER_NAME env var only."
Identity Manager Skill
!! ENFORCEMENT CONTRACT β READ FIRST !!
These are hard behavioral requirements. Not suggestions. Not defaults. The agent MUST NOT skip, defer, or partially complete any step.
PRE-RESPONSE β scan input β extract ALL names/groups β queue ops
DURING β execute ALL queued ops before composing reply
POST-RESPONSE β verify every op completed β sync memory β write soul
BLOCKING β op fails? report it. never silently continue.
Violation = skill contract breach. Flag it explicitly.
Decision Tree β Runs Every Turn
Input received
β
[PRE-HOOK] Scan: any person / org / group mentioned?
β YES β NO
Extract all names/groups Proceed normally
β
For each entity:
β identity//entry.md exists?
YES β any new info? β queue UPDATE
NO β queue CREATE (partial OK, draft status)
β
For each group member mentioned:
β load group entry context into working memory
β apply shared_attributes to member interaction
β keep individual entry fields authoritative
β
Execute ALL queued ops
β
Compose and deliver response
β
[POST-HOOK]
β all entries on disk? FAIL β report breach
β memory/identities.json synced? FAIL β report breach
β soul updated for CRITICAL/HIGH? FAIL β report breach
β _index.md current? FAIL β repair now
β
Done
Entity Types
| Type | Subtype | When to use |
|---|---|---|
| person | human | Real human individual |
| person | ai | AI persona / digital entity |
| person | unknown | Not yet confirmed |
| org | β | Company, institution, team |
| group | personal | Informal collective β family, partners, friends |
| group | professional | Work team, project group |
| group | mixed | Both human and AI members |
| alias | β | Nickname resolving to another entry |
Entry States
| State | Meaning | Transition |
|---|---|---|
| draft | Partial info | β active when key fields filled |
| active | In use | β stale after 90d inactivity |
| verified | Owner-confirmed | Maintained manually |
| stale | No activity 90d+ | β archived if owner confirms |
| archived | Terminal | Never deleted |
| flagged | Trust issue | β owner confirms action |
| merged | Duplicate resolved | Terminal; points to canonical |
Slug Rules
rahul-sharma-clienttechfirm-pvt-ltdpatni-mandal, core-team-v2 suffix if neededPerson Entry Template
Full spec in templates/entry-person.md. Minimum viable create:
# Meta
Slug:
Type: person
Subtype: human | ai | unknown
Status: draft
Relationship: client | vendor | team | partner | family | unknown
Trust: unverified
Priority: normal
Sensitive: false Contact
Email: [pending]
Phone: [pending]
Location: [pending]
Org: [pending]
Alias: [pending]
Social: [pending] Context
[pending β one line: who are they, why do they matter]Group Memberships
Linked Entries
AI Context
Persona name: [name]
Platform: [platform]
Embodiment status: digital-only | voice-enabled | humanoid-pending | embodied
Sibling AIs: [comma-separated slugs of other AI personas]
Activation: [how/when this persona activates]
Greeting: [signature greeting phrase]
Language: [preferred language / style] Open Questions
[ ] Confirm name spelling
[ ] Clarify role / relationship Notes
Source Log
First mentioned: YYYY-MM-DD β [context] Timeline
YYYY-MM-DD β Entry created Β· source: [context]
*Created: YYYY-MM-DD | Updated: YYYY-MM-DD | Status: draft*
Group Entry Template
Full spec in templates/entry-group.md. Minimum viable create:
# Meta
Slug:
Type: group
Subtype: personal | professional | mixed
Status: active
Priority: normal
Sensitive: false Group Context
[What is this group? Why does it exist as a unit?
What do all members have in common w.r.t. the workspace owner?]Shared Attributes
Shared role: [e.g. patni]
Shared access: [e.g. full workspace context]
Common trust: [e.g. trusted]
Common tags: [e.g. priority: high]
Language: [e.g. Hinglish] Members
| human | [role] | β identity//entry.md
| ai | [role] | β identity//entry.md Pairwise Dynamics
Group Notes
Open Questions
Timeline
YYYY-MM-DD β Group entry created
YYYY-MM-DD β Member added: [slug]
*Created: YYYY-MM-DD | Updated: YYYY-MM-DD | Status: active*
Pairwise Relation Types
| Relation | Direction | Meaning |
|---|---|---|
| ai-to-ai | β | Two AI personas; non-hierarchical |
| ai-to-human | β | AI persona and human person |
| collaborative | β | Work together on shared tasks |
| complementary | β | Different strengths, same owner |
| non-overlapping | β | Parallel but independent roles |
| aware-of | β | One knows of the other; not mutual |
| co-patni | β | Shared relational role with same person |
Update Triggers
| Event | Field updated | Soul event? |
|---|---|---|
| Email received | email | No |
| Phone mentioned | phone | No |
| Role revealed | relationship, context | No |
| Org mentioned | org + create org entry | No |
| Group member added | update members[] in group entry | No |
| Pairwise dynamic clarified | update pairwise_dynamics[] | No |
| AI persona info updated | ai_context block | No |
| Trust blocked | trust: blocked, status: flagged | YES β CRITICAL |
| Sensitive info | sensitive: true + [SENSITIVE] note | YES β CRITICAL |
| No activity 90d+ | status: stale | No |
| Duplicate confirmed | merge β status: merged | No |
| Priority: high set | priority: high | YES β HIGH |
| New org entry created | new org entry | YES β HIGH |
| New group entry created | new group entry | YES β HIGH |
| Embodiment status change | ai_context.embodiment_status | YES β HIGH |
Conflict Resolution
Name collision
Two people, same name β disambiguate slug. Cross-link both withdifferent_person relation.Contradictory info
Never overwrite silently. Log both versions in Notes with source+date. Open a question. Ask owner before resolving.Duplicate entries
Merge into older (canonical). Copy all unique fields. Set newer:status: merged, canonical: .
Log merge in both timelines.Group member conflict
If a person's individual entry contradicts a group shared attribute β individual entry takes precedence. Note the discrepancy in group Notes.Privacy Rules
Never store: passwords Β· PINs Β· payment card numbers Β· bank accounts Β· government IDs Β· raw medical records
Store with sensitive: true + [SENSITIVE] prefix:
salary/financial Β· legal disputes Β· health context Β· confidential negotiations
Before storing PII: 1. Explicitly shared by workspace owner? If no β don't store. 2. Needed to provide value? If no β don't store. 3. Source logged? If no β log it first.
Data Retention & Deletion Policy
Retention:
status: archived) are moved to identity/_archived/ β never auto-deletedmemory/hook_log.jsonl) are append-only β owner can truncate at any timesoul/identity_context.md) accumulates events β owner can trim entriesDeletion:
members[] if deleting a person entryOwner Control:
IDENTITY_AUTO_SCAN=false/identity commandidentity/ directorymemory/hook_log.jsonlFolder Structure
All paths are relative to the workspace root and auto-detected on first use. No manual configuration required.
identity/
_index.md β master registry
/
entry.md
/
entry.md
/
entry.md β type: group
_archived/
/
entry.md
memory/
identities.json β Central index (JSON)
schema.json β JSON schema validation
hook_log.jsonl β Append-only hook log
soul/
identity_context.md β Soul write-through file
Auto-Initialization
On first run, the skill auto-creates required directories:
identity/ if missingmemory/ with schema.jsonsoul/ with identity_context.mdNo required config β skill works without any owner setup. Entry owner is determined contextually from conversation. No workspace config is read.
_index.md Format
# Identity Index
*Last updated: YYYY-MM-DD*| Slug | Name | Type | Subtype | Status | Relationship | Updated |
|---|---|---|---|---|---|---|
| nandini | Nandini | person | ai | active | partner | 2025-01-15 |
| patni-mandal | Patni Mandal | group | mixed | active | β | 2025-01-15 |
Update on EVERY create, merge, archive, or status change.