principle-separate-before-serializing-shared-state: скилл Claude Code
Правило проектирования для параллельных процессов: сначала разделяет изменяемое состояние между исполнителями, а блокировки и очереди применяет только при строгой необходимости.
npx skills add backnotprop/pstack --skill principle-separate-before-serializing-shared-state -a claude-codeЧто делает principle-separate-before-serializing-shared-state
Параллельная запись в общий файл, ветку или объект состояния часто приводит к гонкам данных, которые трудно воспроизвести. Этот скилл формулирует чёткое правило: вместо добавления мьютексов или инструкций нужно убрать саму общую точку записи. Каждому исполнителю выделяется собственный файл, ключ или каталог, а объединение данных переносится на этап чтения. Например, два процесса пишут в indexer-state.json и metrics-state.json, а не в общий state.json.
Структурная сериализация через lockfile, последовательные фазы, модель одного писателя или CAS подключается только тогда, когда один общий объект записи неизбежен. Требование «нам нужен лок» скилл предлагает считать признаком сомнительной архитектуры, а не ответом по умолчанию.
В метаданных скилла задан параметр disable-model-invocation: true. Из-за этого агент не вызывает его динамически как инструмент, а использует как постоянное архитектурное ограничение при работе с кодом.
Какие задачи решает
- устранить состояние гонки при одновременной записи в общие файлы
- разделить мутабельное состояние агентов по отдельным файлам или веткам
- выстроить структурную сериализацию доступа через lockfile или фазы
- перенести объединение независимых фактов на границу чтения
Примеры запросов агенту
- Проверь архитектуру параллельных воркеров по principle-separate-before-serializing-shared-state и раздели state.json
- Примени правило principle-separate-before-serializing-shared-state для организации записи логов индексатора
Как установить principle-separate-before-serializing-shared-state
1Через Skills CLI (Vercel)
npx skills add backnotprop/pstack --skill principle-separate-before-serializing-shared-state -a claude-code2Вручную: положить файлы
~/.claude/skills/principle-separate-before-serializing-shared-state/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/principle-separate-before-serializing-shared-state/
1Через Skills CLI (Vercel)
npx skills add backnotprop/pstack --skill principle-separate-before-serializing-shared-state -a codex2Вручную: положить файлы
.agents/skills/principle-separate-before-serializing-shared-state/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add backnotprop/pstack --skill principle-separate-before-serializing-shared-state -a cursor2Вручную: положить файлы
.cursor/skills/principle-separate-before-serializing-shared-state/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install backnotprop/pstack principle-separate-before-serializing-shared-state2Вручную: положить файлы
.github/skills/principle-separate-before-serializing-shared-state/SKILL.md1Через Skills CLI (Vercel)
npx skills add backnotprop/pstack --skill principle-separate-before-serializing-shared-state -a gemini-cli2Командой платформы
gemini skills install https://github.com/backnotprop/pstack --path skills/principle-separate-before-serializing-shared-stateВручную: положить файлы
.devin/skills/principle-separate-before-serializing-shared-state/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add backnotprop/pstack --skill principle-separate-before-serializing-shared-state -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о principle-separate-before-serializing-shared-state
Как установить principle-separate-before-serializing-shared-state в Claude Code?
Выполните в терминале команду npx skills add backnotprop/pstack --skill principle-separate-before-serializing-shared-state -a claude-code.
Зачем нужен этот скилл?
Он задаёт архитектурный принцип: при параллельной работе агентов нужно сначала изолировать изменяемые данные (например, отдельные файлы вместо одного общего), а блокировки применять только как крайнюю меру.
Что означает параметр disable-model-invocation: true в этом скилле?
Эта настройка запрещает модели автоматически вызывать скилл как отдельный инструмент, сохраняя его роль статического руководства по проектированию параллельных процессов.
Исходный текст
SKILL.md · MIT
--- name: principle-separate-before-serializing-shared-state description: "Apply when concurrent actors might write to the same file, branch, key, or state object. Eliminate the sharing first; serialize structurally only when one shared writer is a real invariant." disable-model-invocation: true --- # Separate Before Serializing Shared State When concurrent actors might share mutable state, first ask whether they need the same mutable object. If not, eliminate the sharing. When sharing is real, enforce serialization structurally: lockfiles, sequential phases, exclusive ownership. Instructions and conventions are not concurrency control. **Why:** Concurrent writes to shared state create race conditions that are intermittent, hard to reproduce, and expensive to debug. **Pattern:** 1. **Identify shared mutable state** (files both read and write, branches both push to, APIs both define and consume). 2. **Default: eliminate the shared write target.** Ask: do these actors need one canonical object, or are they publishing independent facts? Give each actor its own owned file, key, branch, or state directory, and merge only at the read/reporting boundary. Two workers writing their own `lastX` field into one `state.json` is still shared mutation. `indexer-state.json` + `metrics-state.json` is not. 3. **Only when one shared write target is a real invariant, serialize access structurally** (lockfiles, sequential phases, single-writer actor, or atomic compare-and-swap). Treat "we need a lock" as a design smell to check, not as the default answer.
© backnotprop · MIT · backnotprop/pstack