{"slug":"iwe-restore","title":"iwe-restore","summary":"Восстановление памяти агента из exocortex-бэкапа при переезде на новое устройство. Находит DS-strategy/exocortex/, показывает что будет восстановлено, спрашивает подтверждение, копирует memory/ + CLAUDE.md + AGENTS.md, финализирует /audit-installation.","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-08-27T16:56:17.512351Z","repo":{"url":"https://github.com/TserenTserenov/FMT-exocortex-template","stars":60,"forks":152,"license":"MIT","updatedAt":"2026-09-24T08:59:39Z"},"bodyHtml":"<hr>\n<h2>name: iwe-restore\ndescription: \"Восстановление памяти агента из exocortex-бэкапа при переезде на новое устройство. Находит DS-strategy/exocortex/, показывает что будет восстановлено, спрашивает подтверждение, копирует memory/ + CLAUDE.md + AGENTS.md, финализирует /audit-installation.\"\nargument-hint: \"[path/to/DS-strategy]\"\nuser_invocable: true\nversion: 1.0.0\nlayer: L1\nstatus: active\ntriggers:\nslash: [/iwe-restore]\nphrases: [\"восстанови память\", \"восстановить IWE\", \"перенести на новое устройство\"]\nrouting:\nexecutor: sonnet\ndeterministic: false\nagents: single\ninteraction: multi-step\ngates_required: []\ngates_enforced: []\ngates_rationale: \"операционный скилл; WP Gate применим только при создании нового РП, не для операционных вызовов\"</h2>\n<h1>IWE Restore — восстановление памяти агента</h1>\n<blockquote>\n<p><strong>Когда использовать:</strong> переехал на новый ноутбук, пересоздал workspace, потерял <code>memory/</code>.\nЕсли <code>memory/</code> уже заполнен и ты просто хочешь проверить — используй <code>/audit-installation</code>.</p>\n</blockquote>\n<p>Аргументы: $ARGUMENTS</p>\n<h2>When to use</h2>\n<p>Восстановление памяти агента из exocortex-бэкапа при переезде на новое устройство. Находит DS-strategy/exocortex/, показывает что будет восстановлено, спрашивает подтверждение, копирует memory/ + CLAUDE.md + AGENTS.md, финализирует /audit-installation.</p>\n<h2>Обещание</h2>\n<p>За 5 минут и одно подтверждение — восстановить память агента из GitHub-бэкапа. Агент не перезапишет ничего молча: сначала показывает что найдено, потом ждёт «да».</p>\n<hr>\n<h2>Algorithm</h2>\n<h2>Шаг 1. Найти бэкап</h2>\n<p>Определить путь к governance-репо. Приоритет:</p>\n<ol>\n<li>Аргумент скилла <code>$ARGUMENTS</code> (если передан)</li>\n<li>Переменная окружения <code>$DS_STRATEGY</code> или <code>$GOVERNANCE_REPO</code></li>\n<li>Стандартный путь <code>~/IWE/${IWE_GOVERNANCE_REPO:-DS-strategy}/</code></li>\n<li>Поиск: <code>find ~/IWE -maxdepth 2 -name \"exocortex\" -type d 2&gt;/dev/null</code></li>\n</ol>\n<pre><code>GOVERNANCE=\"${1:-${DS_STRATEGY:-$HOME/IWE/${IWE_GOVERNANCE_REPO:-DS-strategy}}}\"\nEXOCORTEX=\"$GOVERNANCE/exocortex\"\n</code></pre>\n<p>Если <code>exocortex/</code> не найден → сказать:</p>\n<blockquote>\n<p>«Не нашёл бэкап. Папка <code>exocortex/</code> отсутствует в <code>$GOVERNANCE</code>. Убедись, что governance-репо склонирован: <code>git clone &lt;url&gt; ~/IWE/${IWE_GOVERNANCE_REPO:-DS-strategy}</code>. Если репо на другом пути — вызови <code>/iwe-restore путь/к/DS-strategy</code>.»</p>\n</blockquote>\n<p>Завершить.</p>\n<hr>\n<h2>Шаг 2. Показать что найдено</h2>\n<p>Собрать информацию о бэкапе:</p>\n<pre><code># Список файлов в бэкапе\nfind \"$EXOCORTEX\" -maxdepth 1 -type f \\( -name \"*.md\" -o -name \"*.yaml\" -o -name \"*.yml\" \\) | sort\n\n# Дата последнего изменения самого свежего файла\nfind \"$EXOCORTEX\" -maxdepth 1 -type f | xargs ls -lt 2&gt;/dev/null | head -1\n</code></pre>\n<p>Определить путь к <code>memory/</code> на текущем устройстве:</p>\n<pre><code>HOME_SLUG=$(echo \"$HOME\" | sed 's|/|-|g')\nMEMORY_DST=\"$HOME/.claude/projects/${HOME_SLUG}-IWE/memory\"\n</code></pre>\n<p>Показать пользователю:</p>\n<pre><code>Найден бэкап:\n  Источник:   ~/IWE/${IWE_GOVERNANCE_REPO:-DS-strategy}/exocortex/   (N файлов, последний бэкап: ДАТА)\n  Назначение: ~/.claude/projects/.../memory/\n\nЧто будет восстановлено:\n  memory/: [список файлов .md и .yaml]\n  CLAUDE.md → ~/IWE/CLAUDE.md\n  AGENTS.md → ~/IWE/AGENTS.md  (если есть)\n\nТекущее состояние memory/:\n  [пусто / N файлов уже есть]\n</code></pre>\n<hr>\n<h2>Шаг 3. Спросить подтверждение</h2>\n<p>Спросить одним вопросом:</p>\n<blockquote>\n<p>«Восстановить? (да / нет / показать diff)»</p>\n</blockquote>\n<ul>\n<li><strong>нет</strong> → завершить, ничего не менять.</li>\n<li><strong>показать diff</strong> → перейти к Шагу 3a.</li>\n<li><strong>да</strong> → перейти к Шагу 4.</li>\n</ul>\n<h3>Шаг 3a. Diff (если запросил)</h3>\n<p>Для каждого файла из бэкапа, который уже существует в <code>memory/</code>:</p>\n<pre><code>diff \"$EXOCORTEX/&lt;file&gt;\" \"$MEMORY_DST/&lt;file&gt;\"\n</code></pre>\n<p>Показать расхождения кратко. После — снова спросить: «Восстановить с перезаписью? (да / пропустить существующие / нет)»</p>\n<hr>\n<h2>Шаг 4. Восстановить</h2>\n<h3>4a. Создать папку memory/ если не существует</h3>\n<pre><code>mkdir -p \"$MEMORY_DST\"\n</code></pre>\n<h3>4b. Копировать файлы памяти</h3>\n<pre><code>rsync -av --exclude='CLAUDE.md' --exclude='AGENTS.md' \\\n  --include='*.md' --include='*.yaml' --include='*.yml' \\\n  --exclude='*' \\\n  \"$EXOCORTEX/\" \"$MEMORY_DST/\"\n</code></pre>\n<p>Если пользователь выбрал «пропустить существующие» — добавить флаг <code>--ignore-existing</code>.</p>\n<h3>4c. Копировать CLAUDE.md</h3>\n<blockquote>\n<p>issue #217: подстановка <code>{{HOME_DIR}}</code> → <code>$HOME</code> делает восстановление ОС-агностичным\n(бэкап пишется на плейсхолдере в <code>day-close.sh</code>, симметрично <code>setup.sh</code>).\n<code>$HOME</code> стоит в replacement-части <code>sed s///</code> — экранируем <code>&amp;</code>/<code>\\</code>, иначе <code>$HOME</code>\nс <code>&amp;</code> трактуется как «весь совпавший текст» и портит путь (cold-review находка).</p>\n</blockquote>\n<pre><code>WORKSPACE_DIR=\"${IWE_WORKSPACE:-$HOME/IWE}\"\nHOME_SED_SAFE=$(printf '%s' \"$HOME\" | sed 's/[&amp;\\]/\\\\&amp;/g')\nif [ -f \"$EXOCORTEX/CLAUDE.md\" ]; then\n  # Если CLAUDE.md уже есть — показать: «CLAUDE.md уже существует. Перезаписать?»\n  # При согласии:\n  sed \"s|{{HOME_DIR}}|$HOME_SED_SAFE|g\" \"$EXOCORTEX/CLAUDE.md\" &gt; \"$WORKSPACE_DIR/CLAUDE.md\"\nfi\n</code></pre>\n<h3>4d. Копировать AGENTS.md</h3>\n<pre><code>if [ -f \"$EXOCORTEX/AGENTS.md\" ]; then\n  sed \"s|{{HOME_DIR}}|$HOME_SED_SAFE|g\" \"$EXOCORTEX/AGENTS.md\" &gt; \"$WORKSPACE_DIR/AGENTS.md\"\nfi\n</code></pre>\n<h3>4e. Отчёт</h3>\n<pre><code>Восстановлено:\n  memory/: N файлов скопировано, M пропущено\n  CLAUDE.md: ✅ / ⏭ пропущен\n  AGENTS.md: ✅ / — не было в бэкапе\n</code></pre>\n<hr>\n<h2>Шаг 5. Проверка</h2>\n<p>Запустить <code>/audit-installation</code> для финальной проверки целостности инсталляции.</p>\n<p>Сказать пользователю:</p>\n<blockquote>\n<p>«Память восстановлена. Перезапусти Claude Code — агент подхватит файлы из <code>memory/</code> при следующей сессии.»</p>\n</blockquote>\n<hr>\n<h2>Граничные случаи</h2>\n<table>\n<thead>\n<tr>\n<th>Ситуация</th>\n<th>Поведение</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>memory/</code> пуст</td>\n<td>Копировать всё без вопросов (только итоговый подтверждающий вопрос)</td>\n</tr>\n<tr>\n<td><code>memory/</code> уже заполнен</td>\n<td>Показать diff-опцию, не перезаписывать молча</td>\n</tr>\n<tr>\n<td><code>exocortex/</code> содержит очень старый бэкап (&gt;30 дней)</td>\n<td>Предупредить: «Бэкап от ДАТА — N дней назад. Продолжить?»</td>\n</tr>\n<tr>\n<td><code>CLAUDE.md</code> в workspace новее бэкапа</td>\n<td>Предупредить: «Файл в workspace новее бэкапа на N дней. Перезаписать потеряешь правки.»</td>\n</tr>\n<tr>\n<td>Нет прав на запись в <code>memory/</code></td>\n<td>Показать ошибку + команду для ручного исправления прав</td>\n</tr>\n</tbody>\n</table>\n\n\n","files":[{"path":"SKILL.md","sizeBytes":8389,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-08T11:56:28.895488Z","sha256":"B2B804E178588A07CECD056D26EA1EED70A7A206180E20930352831FE45F2A86","sizeBytes":3316},"review":null,"source":{"repositoryUrl":"https://github.com/TserenTserenov/FMT-exocortex-template","path":".claude/skills/iwe-restore","license":"MIT","commit":"4d7b8f2e95161240a02a028ae5a8b9d2914b7939","subtreeSha":"C96A1ACA8597EECEA3BFA66EE7ACA14EEAF06B0C13C2DEA5FB7CEDD0925C038F","lastSyncedAt":"2026-09-25T07:36:52.516704Z"},"reviewedAt":"2026-09-08T11:57:22.862032Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/TserenTserenov/FMT-exocortex-template/tree/main/.claude/skills/iwe-restore"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install tserentserenov-fmt-exocortex-template@llmmart"},{"target":"git","command":"git clone https://github.com/TserenTserenov/FMT-exocortex-template.git"}]}