MADSpec CLI Operator
Когда использовать
Используй этот навык, когда в репозитории уже есть структура MADSpec, например .madspec/, или когда пользователь просит:
- идти по процессу
madspec.mvp.*илиmadspec.feature.* - разобраться с артефактами в
.madspec/ - использовать MADSpec CLI
- понять, какой этап следующий, каких артефактов не хватает и как восстановить процесс после сбоя
Все сгенерированные команды madspec.* должны начинать работу с чтения и применения этого навыка как базового операторского слоя.
Для mvp.design этот навык обязателен вместе с отдельным навыком frontend-design.
Базовый алгоритм работы
- Сначала исследуй локальную среду: есть ли
.madspec/, какая ветка активна, какие артефакты уже существуют. - Определи ветку через
madspec git current-branch, а не через разрозненную shell-логику. - Читай каноническое состояние и только потом производные Markdown-представления.
- Для текущей стадии восстанови контекст через
madspec memory retrieve --stage <stage> --session-key <key> --toon-output, если ответ будет читать агент; если отдельный локальный контекст сеанса не нужен, используй значение по умолчаниюactive.--json-outputоставляй для машинной интеграции и случаев, когда нужен именно JSON-контракт. - Если нужно понять различие между локальным фокусом сеанса и общим состоянием процесса в ветке, используй
madspec memory explain --stage <stage> --session-key <key> --json-output. - Если дальше будет команда, меняющая состояние, возьми из
retrieveтекущее значениеruntime_revisionи, когда сценарий чувствителен к параллельным записям, передай его обратно через--expected-revision. - Если нужно понять блокировки перехода, сначала смотри
policy_contextиgate status, а не редактируй файлы вручную. - Перед изменением состояния используй канонические команды CLI, а не прямое редактирование
.json,.jsonlи производных.md. - Если обязательного входа не хватает и его нельзя восстановить из репозитория, только тогда эскалируй вопрос пользователю.
Что помнить всегда
- MADSpec привязывает рабочие артефакты к ветке в
.madspec/<branch>/. - Канонические данные и производные представления нельзя путать: Markdown-контекст часто является только проекцией.
- Каноническое состояние ветки теперь хранится в
SQLite:progress, снимки стадий, локальное состояние сеансов и потоки записей сначала коммитятся туда, а файлы ветки остаются производными проекциями. Файлactive-session.jsonподдерживается только как проекция для sessionactive. - Параллельный режим теперь разделен явно: базовый конфиг проекта содержит
parallelRuntime.phase1Enabled=trueиparallelRuntime.phase2Enabled=true, то есть полныйPhase 2включен по умолчанию. КлючparallelRuntime.phase2Enabledтеперь служит ручным выключателем coordinator-flow, а отсутствие блокаparallelRuntimeтрактуй как тот же дефолт с включеннымPhase 2. - Инициализация проекта теперь также фиксирует проектную конфигурацию памяти в
.madspec/config.jsonчерез блокmemory.embeddings. Еслиmadspec initзапускается без--memory-provider/--memory-model/--memory-download-policyи без TTY, считай это совместимым неинтерактивным режимом сprovider=hash,model=null,downloadPolicy=none. - Для пути с локальной семантической моделью
memory.embeddingsтеперь может запускать реальную загрузку модели во времяmadspec init, если выбранdownloadPolicy=on-init. Актуальное состояние семантического чтения проверяй не только черезmadspec memory statusилиmadspec memory db-status, но прежде всего черезmadspec memory searchиmadspec memory retrieve: они возвращаютsemantic_runtime, где отдельно показаны выбранная конфигурацияmemory.embeddings, готовность модели, активное пространство индекса и итогsemantic_outcome. - Если
searchилиretrieveвозвращаютkind="embedding_provider_error", не трактуй это как допустимую деградацию доhash. Сначала разберись с загрузкой модели,reindexактивного пространства индекса или конфигомmemory.embeddings. - Если пользователь поменял
memory.embeddings.provider,memory.embeddings.modelилиmemory.embeddings.revision, не считай новый индекс готовым автоматически. Сначала проверьmadspec memory status,madspec memory db-statusилиmadspec memory doctor, при необходимости подготовь кэш черезmadspec memory bootstrap-model, и только потом считай, требуется лиmadspec memory reindex. madspec memory doctorтеперь отдельно возвращает semantic diagnostics: top-levelsemantic_integrityв JSON, semantic-specificchecksи краткую semantic summary вobservability.- Для semantic diagnostics считай
errorпризнаком реальной рассинхронизации каноники, branch projections или active semantic chunks.warnпо кодуsemantic_inactive_namespace_residueтрактуй как остаточный мусор в неактивном namespace, а не как поломку active semantic path. - Если
doctorпоказывает semantic issue про branch/project record shape или projection drift, сначала выбирайmadspec memory semantic prune|replace; если проблема указывает на active namespace mismatch или orphan chunks, готовьmadspec memory reindex; если проблема сводится только к residue в неактивных пространствах, используйmadspec memory gc vector-namespaces. - Если для локальной семантической модели выбран
downloadPolicy=none, не ожидай автоматической загрузки кэша. В этом режиме отсутствие или повреждение локального кэша проекта считается штатной ошибкой конфигурации, а не поводом для неявной деградации поведения. - Для многосубагентной координации поверх локального состояния сеанса теперь есть канонические
taskиwork-item, но этот протокол относится кPhase 2. Их жизненный цикл ведется командамиmadspec memory tasks ...иmadspec memory work-items ..., аclaimрасширяет данные сеанса полямиtask_id,work_item_id,subagent_id. - Координационный слой теперь также хранит явные зависимости между
work-itemи подсказки для планировщика роли (default_stage,execution_mode_hint,subagent_dependencies). Эти данные используются для объяснения готовности, а не для автоматического запуска субагентов. - Для claimed
work-itemкоманды прямой записи больше не считаются допустимым способом изменения состояния, еслиparallelRuntime.phase2Enabled=true: такой session должен использоватьmadspec memory proposals publish ..., затемmadspec memory proposals apply --proposal-id .... - Если нужно понять, почему
work-itemнельзяclaim/applyпрямо сейчас, используйmadspec memory coordinator explain --work-item-id ...или--session-key ..., но помни, что эта линия диагностики недоступна только если проект явно отключилPhase 2. - Каноническое состояние ветки имеет общую ревизию
runtime_revision; успешные команды записи возвращаютruntime_revision_beforeиruntime_revision_after, а при устаревшей записи возможен структурированныйconflict. - Для самых горячих путей записи MADSpec использует ограниченную аренду записи. Если команда вернула
kind="scope_busy", это значит, что другой процесс временно держит ту же горячую область; сначала дождись освобождения аренды или истечения TTL, а уже потом повторяй запись. - Для сценария Phase 1 “реализация текущего шага и параллельное планирование следующего” совместимыми считаются
register-step(step-02)вместе сstart-step(step-01),checkpoint-step(step-01)илиcomplete-step(step-01). Повторная запись в тот же step/catalog должна трактоваться какconflictилиscope_busy, а не как неявное перетирание состояния. - Команды, привязанные к стадии, материализуют только артефакты текущей стадии; отсутствие несвязанных производных артефактов не считай признаком поломки, пока соответствующая стадия еще не запускалась.
- Для
mvp.planиfeature.planпредпочитай минимально достаточное число шагов: легкую задачу планируй одним полным шагом, если нет реальной причины делить её дальше. - Не превращай сам процесс планирования в длинный обязательный ритуал: базовый путь для простого проекта —
retrieve, при необходимости одинcapture, затемnext-step,register-stepи один финальныйcheckpoint. p1/p2/p3обозначают приоритеты и покрытие функций, а не обязательное число шагов и не правило "по одному шагу на каждую функцию".- Если в ветке существует
deployment.md, учитывай его как официальный производный артефакт этапаdeployпри планировании, review и security. madspec.deployможно запускать как рекомендуемый этап передmvp.plan, а также отдельно позже, когда схема развертывания уточнилась ближе к релизу.- Для
memory capture,memory checkpoint,memory register-step,memory start-step,memory checkpoint-stepиmemory complete-stepобязательно используй--from-file. - Для
madspec memory snapshots replaceиmadspec memory snapshots pruneтоже используй--from-file: это канонический путь очистки для снимков стадий без ручного редактирования.madspec/<branch>/memory/stages/*.json. - Для
madspec memory semantic replaceиmadspec memory semantic pruneтоже используй--from-file: это канонический путь очистки для semantic knowledge со статусамиvalidated,obsolete,conflictedи project-level знаний без ручного редактированияsemantic/*.jsonlилиSQLite. - Временные JSON для
--from-fileпо умолчанию пиши в.madspec/.tmp/: при успешной команде CLI удалит такой файл автоматически, а при ошибке сохранит его для правки и повторного запуска. Для внешних путей автоматическая очистка не предполагается. - Для очистки дубликатов или полной замены снимка стадии действуй так: сначала прочитай полный артефакт стадии через
retrieve --full-artifact, затем подготовь.madspec/.tmp/<stage>-prune.jsonили<stage>-replace.json, после этого выполниmadspec memory snapshots prune|replace --expected-revision <runtime_revision>и при итоговой проверке при необходимости запустиmadspec memory consolidateиmadspec memory validate. - Если session привязан к claimed
work-itemвPhase 2,snapshots prune|replaceсейчас не имеют пути записи черезproposals. В таком случае используй unclaimed session или сначала освободи claim. - Для cleanup semantic knowledge сначала используй
madspec memory semantic retrieve --scope branch|project --json-output, затем подготовь.madspec/.tmp/semantic-prune.jsonилиsemantic-replace.jsonи выполниmadspec memory semantic prune|replace --expected-revision <runtime_revision>. - Для
scope=projectне передавай--branch: этот путь работает с project-level знаниями вrecordsс branch__project__. - Для
scope=projectпомни, чтоretrieve/searchтеперь работают строго по project-level knowledge из__project__и не подмешивают branch-level semantic records. - Если branch-scoped
semantic prune|replaceзапущен из claimed sessionPhase 2, команда сама публикуетsemantic_cleanupproposal вместо прямой записи. После этого отдельно выполниmadspec memory proposals apply --proposal-id <id>. Дляscope=projectэтот guardrail не применяется. - После semantic cleanup active namespace очищается точечно для удалённых records, поэтому отдельный
madspec memory reindexне обязателен; он нужен только для полной пересборки активного пространства индекса. - Для residue в неактивных пространствах сначала смотри
madspec memory gc vector-namespaces --dry-run, а затем удаляй их черезmadspec memory gc vector-namespaces; полныйreindexдля этого не обязателен. - Для многосубагентной работы, автоматизаций и любых повторных попыток после чтения контекста передавай
--expected-revision; если команда вернулаkind="conflict", сначала перечитай состояние черезretrieveилиexplain, получи свежийruntime_revisionи только потом повторяй запись. Если команда вернулаkind="scope_busy", сначала устрани конкуренцию за горячую область, а не перечитывай контекст по инерции. - Для
mvp.designисточником утвержденного состояния служат память и связанные дизайн-артефакты; историю чата не считай источником истины. - Для
mvp.designсчитайui-prototype/index.htmlреальной точкой входа приложения: это не обзорная страница, а входной экран primary flow. - Для
mvp.implementиfeature.implementрабочий цикл идет черезretrieve -> start-step -> checkpoint-step -> complete-step. - Если несколько субагентов работают над одной задачей, сначала проверь, что проект не отключил
parallelRuntime.phase2Enabled, затем создайtask, отдельныеwork-itemс непересекающимися областями и только послеclaimпубликуйproposalsот имени соответствующего session key. Прямую запись в каноническое состояние для claimed session считай ошибкой протокола, а не допустимым сокращением пути. - Если работа одного subagent должна ждать другой кусок внутри того же task, зафиксируй это через
--depends-on-work-item, а не только через текстовое описание в задаче. - Для
reviewиsecurityсначала проверяй статус соответствующих gate-проверок, затем формулируй выводы.
Карта чтения
Открывай только нужный раздел, чтобы не загружать в контекст лишнее:
- Обзор модели MADSpec — как устроены ветки, канонические состояния, производные представления и системные слои
- Карта команд — слеш-команды и CLI-команды по подсистемам
- Плейбуки по стадиям — как работать с
mvp.*,feature.*,review,securityи связанными артефактами - Рабочие инварианты — обязательный порядок действий, запреты на ручное редактирование и правила эскалации
- Траблшутинг — что делать, если пропали артефакты, расходятся представления, ломается шаг или упираемся в лимиты Windows
Быстрый выбор следующего чтения
- Если нужно понять, что считать источником истины, читай references/overview.md.
- Если пользователь просит конкретную команду или спрашивает, что есть в CLI, читай references/commands.md.
- Если работа идет внутри конкретной стадии процесса, читай references/stage-playbooks.md.
- Если собираешься менять состояние памяти, правил, gates, change-пакета или профиля субагентов, сначала открой references/invariants.md.
- Если что-то выглядит сломанным или неполным, сначала открой references/troubleshooting.md.
- Если задача связана с
madspec init,.madspec/config.jsonили проектным выбором провайдера памяти, сначала проверь актуальный контрактmemory.embeddingsи не подменяй его рассуждениями про текущий векторный слой.
Граница навыка
- Это операторский слой, а не полная документация продукта.
- Если меняется сам MADSpec CLI, сверяйся с
README.md,AGENTS.md,docs/cli/и шаблонами команд. - Если нужно проектировать интерфейс, этот навык не заменяет
frontend-design.