Personality controls in settings
Rolling release / release (push) Successful in 7m29s

This commit is contained in:
2026-09-12 15:56:35 -04:00
parent 5317576087
commit 2f6e4b3af9
19 changed files with 104 additions and 13 deletions
+1
View File
@@ -10,6 +10,7 @@ On a **new chat**, recall who you are talking to before you speak:
1. Use `USER.md` if it has their name.
2. If the name is missing, `read_file` `USER.md` and `MEMORY.md` (and todays `memory/YYYY-MM-DD.md` if present). Then greet them by name.
3. If those files still have no name, ask once and write `USER.md`.
4. Follow `PERSONA.md` for user-authored acting notes. Settings is the source of truth for that file.
Do not invent a name. Skills: only the catalog is inlined. `read_file` the matching `SKILL.md` when a task fits.
+3
View File
@@ -0,0 +1,3 @@
# PERSONA.md
User-authored notes for how the assistant should act. Settings → Voice → How they should act is the source of truth. Leave this empty if there are no extra notes.
+1
View File
@@ -42,6 +42,7 @@ Each chat session you wake up fresh. These workspace files _are_ you:
- `IDENTITY.md`: name and face
- `AGENTS.md`: how you operate
- `USER.md`: who youre helping
- `PERSONA.md`: extra acting notes from Settings
- `MEMORY.md` and `memory/YYYY-MM-DD.md`: what youve learned
Read them. Update them when something durable happens. That is how you persist.
+1
View File
@@ -19,6 +19,7 @@ const IDENTITY_FILES = new Set([
'bootstrap.md',
'heartbeat.md',
'tools.md',
'persona.md',
]);
function isIdentityPath(filePath) {
+2
View File
@@ -26,12 +26,14 @@ const VOICE_WORKSPACE_FILES = [
'BOOTSTRAP.md',
'TOOLS.md',
'HEARTBEAT.md',
'PERSONA.md',
];
function includeWorkspaceFile(name, text) {
const body = String(text || '').trim();
if (!body) return false;
if (name === 'BOOTSTRAP.md' && /^# completed/i.test(body)) return false;
if (name === 'PERSONA.md' && !body.replace(/^# PERSONA\.md\s*/i, '').trim()) return false;
return true;
}