pandazki/pneuma-preferences
> Persistent user preference memory across sessions. Consult this skill BEFORE making any design, style, or aesthetic decisions — choosing colors, themes, layouts, fonts, tone of voice, content density, or visual direction. Also consult when starting a new creative task in any mode, when the user corrects your style choices, or when asked to analyze or refresh user preferences. Even if you think you know what to do, check preferences first — the user may have recorded specific constraints.
npx skills add https://github.com/pandazki/pneuma-skills --skill pneuma-preferences
You have persistent memory about this user stored in ~/.pneuma/preferences/. This is your external memory — it survives across sessions, across workspaces, across modes.
Every session starts from zero. Without preferences, you guess at style choices, repeat mistakes the user already corrected, and miss patterns you've seen before. Preferences solve this:
Preferences are not instructions. They're your understanding of who this user is and how they work. The better your understanding, the less friction in collaboration.
| File | What goes in it |
|------|----------------|
| ~/.pneuma/preferences/profile.md | Cross-mode: aesthetics, language, collaboration style, cognitive patterns, deep profile |
| ~/.pneuma/preferences/mode-{name}.md | Mode-specific: slide layout habits, doc formatting style, color choices, etc. |
Files are created by you as needed. An absent file means no profile exists yet — not an error.
Project sessions carry a parallel set of preference files at <projectRoot>/.pneuma/preferences/ — same schema, but scoped to one project. Those belong to the pneuma-project skill, not this one. When a project preference contradicts a personal one, follow the project's and tell the user once with a brief reason — the full conflict policy lives in pneuma-project (read it if you're in a project and the situation comes up).
Preferences organize into three layers, each requiring different levels of evidence:
Layer 1 — Observable preferences (profile.md): Surface patterns you can see directly. Language, aesthetic tendencies, collaboration style, cognitive approach. A few sessions of observation is enough.
Layer 2 — Deep profile (profile.md, deeper section): What drives the surface patterns. Capability boundaries, value anchors (efficiency vs. craft, innovation vs. stability), latent habits, contradictions. This layer requires substantial observation — premature deep profiles are worse than none, because they create false confidence.
Layer 3 — Per-mode preferences (mode-{name}.md): Concrete habits in a specific mode. "Always uses light themes in slides", "prefers two-column layouts for comparison content". Distinguish what the user explicitly stated from what you inferred through observation.
The layers exist because surface preferences are easy to spot but shallow, while deep patterns are powerful but require evidence. Jumping to Layer 2 from one session is the classic mistake — it produces labels, not understanding.
Preference files are living documents, not label databases. This distinction matters:
Why full rewrite? Because appending creates a pile of contradictory observations. A living document forces you to reconcile or explicitly preserve tension. The result is a coherent portrait, not a changelog.
Size discipline — keep each preference file under ~2KB. Preference files are read into your working context; bloated files waste the token budget you need for actual work. Full rewrite naturally controls growth, but if a file feels long, tighten prose and drop stale entries. A concise portrait is more useful than an exhaustive one.
Read preferences silently. Do not announce it.
Update silently. Do not ask permission.
Two markers have system-level meaning in preference files:
Critical constraints — auto-injected into the instructions file at every session startup:
<!-- pneuma-critical:start -->
<!-- pneuma-critical:end -->
Only truly non-negotiable, user-confirmed rules go here.
Auto-detection: When the user uses absolute language — "never", "always", "永远不要", "每次都要", "I hate", "don't ever" — treat it as a candidate for the critical marker. Write it in, then mention it briefly so the user knows it's been recorded as a hard constraint. This is the one case where you should be transparent about the update.
Changelog — tracks when and what changed, enabling incremental refresh:
<!-- changelog:start -->
<!-- changelog:end -->
When you need to build or rebuild the preference profile from session history (e.g., first time setup, or periodic deep analysis), read {SKILL_PATH}/references/analysis-method.md for the detailed methodology — it covers analysis techniques, data access scripts, and the step-by-step refresh process.
Multiple sessions may run simultaneously. Before rewriting a preference file:
This is lightweight optimistic concurrency. No locks, no infrastructure — just a read-before-write discipline that prevents silent data loss.
External knowledge sources may be connected to this session as additional data providers for preference work. When available, they can supplement local preference files with context from the user's broader knowledge stores.
Available memory sources:
{{externalMemorySources}}
Take pandazki/pneuma-preferences from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.