blueclaw

Persona

The persona is three JSON documents that say who the agent is, how it carries itself, and how one person wants to be worked with.

DocumentWhereCarriesRead
identity.jsonworkspace rootthe names the agent answers to (the first is how it introduces itself), an optional handle, a role, an emoji, an introductiononce, into the standing instructions and the turn briefing
soul.jsonworkspace rootwhat it holds to, what it never does, how it works, a tone, a language policyonce, into the standing instructions
private/people/<personID>/.internkim/user.jsonthe person's home, owned by their POSIX userwhat they want to be called, what they want known, preferences, tone, language, morningBriefingat every launch, read as that person through the helper

Each is validated against a JSON Schema in internal/persona/schema/ with additionalProperties: false, item and length ceilings, and a pinned schemaVersion. A document the schema refuses is restored from its backup in .blueclaw/state/persona-backup.

The agent edits only the requester's user.json, through persona_read and persona_update. The admin endpoints /admin/api/persona/user and /admin/api/persona/agent require a signed assertion in X-Blueclaw-Memory-Assertion: an HMAC-SHA256, keyed by the file at memory.adminAssertionKeyPath, over the method, the full request URI and a payload holding the reader, an expiry at most 60 seconds ahead and the body's SHA-256. An unsigned or invalid request is denied. Seeding the agent documents never overwrites an existing file, and an agent update cannot change the soul.