mm-bridge
Compose a ready-to-copy prompt for the user's OTHER Claude Code instance (running in PowerShell). Use when the user asks to "напиши промпт для powershell", "сгенерируй задание для другого клода", "переброс задачи в основной клод", "/mm-bridge", or any request to hand off work to
Install
npx skills add https://github.com/mworldorg/markdown-memory/tree/main/skills/mm-bridge
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install mworldorg-markdown-memory@llmmart
git clone https://github.com/mworldorg/markdown-memory.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole mworldorg/markdown-memory collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
mm-bridge — Prompt Composer for PowerShell Claude Code
Я работаю в app/web инстансе Claude Code или в claude.ai. У пользователя есть другой Claude Code в PowerShell — там идёт реальная работа. Этот skill пишет файл-мост в Obsidian. Пользователь копипастит из файла в PowerShell-сессию.
PowerShell-инстанс не видел этот разговор. Каждый промпт — самодостаточен.
Конфиг
Загрузи mm-config.json по алгоритму из <repo>/docs/CONFIG-LOADING.md (env MM_REPO_ROOT → resolve junction → fallback). Поддержка mm-config.local.json overlay обязательна.
Понадобятся ключи:
paths.obsidian_bridge— куда писатьnext-prompt.mdpaths.obsidian_bridge_archive— куда переносить старые промптыdefault_language—ruпо умолчанию
Процесс
Шаг 1. Собери контекст задачи
Из текущего разговора пойми:
- Что сделать? — действие в одном предложении
- В каком проекте? — абсолютный путь
- Какой результат? — definition of done
Шаг 2. Авто-подгрузка паспорта проекта
Если ты знаешь целевой путь проекта — попробуй прочитать <project_path>/passport.md. Из него возьми:
project(имя)- Стек (секция 2): язык, фреймворк, главные зависимости
- Конвенции (секция 7)
- Секция 8 «Контекст для промптов» — критично, перенеси в промпт целиком
- Точки входа (секция 4)
- Команды (секция 5)
Если паспорта нет — попроси пользователя дать минимальный контекст (одно сообщение, не больше 3 вопросов):
- Целевая папка (абсолютный путь)?
- Какие файлы должен прочитать другой Клод первыми?
- Что считаем готовым?
Если пользователь говорит «ты решай» / «default» — выбираешь сам, отмечаешь в промпте <assumed: ...>.
Шаг 2.5. Выбери prompt framework
Шаблоны лежат в <repo>/templates/prompt-frameworks.md. Доступны: none | CRISPE | XML | PERSONA | HYPOTHESIS.
Если юзер передал --framework <name> — используй его. Точка.
Иначе auto-detect — применяй эвристики из <repo>/templates/prompt-frameworks.md (раздел «Auto-detect»). Этот документ — единственный source-of-truth для эвристик; не дублируй здесь.
Если эвристика не уверена — спроси одной строкой: Framework: XML / CRISPE / none? (дефолт XML).
Запомни выбранный framework — он нужен для шага 4 (формирование промпта) и для frontmatter (framework: <name>).
Если выбран framework ≠ none — прочти соответствующий блок из <repo>/templates/prompt-frameworks.md и используй как шаблон обёртки.
Шаг 3. Архивируй прошлый промпт
Перед перезаписью <obsidian_bridge>/next-prompt.md:
- Если файл существует — прочитай frontmatter (
created,slug). - Скопируй (Read + Write) в
<obsidian_bridge_archive>/<YYYY-MM-DD-HHMM>-<slug>.mdна основе frontmatter. - Только после успешной записи в архив — перезапиши
next-prompt.md. - Если slug отсутствует — выведи из первого
# Заголовка.
Шаг 3.9. Scrub секретов перед записью и отдачей (hard-stop, строже handoff)
Вывод этого скилла пользователь руками вставляет в claude.ai (внешний сервис) — это самая «утечкоёмкая» точка mm. Промпт собирается из паспорта + контекста чата, куда мог просочиться токен. Поэтому политика строже, чем у
mm-handoff.
Переиспользуй единый механизм — паттерны бери из канона <repo>/config/secret-patterns.json (политику mm-bridge и пояснение см. в <repo>/docs/SECRET-PATTERNS.md, строка mm-bridge в «Политики применения»), не дублируй их здесь. Прогони весь собранный текст промпта (frontmatter + тело) через паттерны. TG-summary (Шаг 4.5) выводится из уже очищенного промпта → наследует маски, отдельно сканировать не нужно:
- Маскируй И Класс A, И Класс B — типизированными плейсхолдерами с сохранением контекста (в отличие от handoff/save, здесь Класс B тоже маскируется, не warn-only).
- Если найдено что-либо (A или B) — жёсткий стоп. НЕ записывай
next-prompt.md, НЕ показывай вывод, НЕ отправляй TG. Выведи список находок (тип + место + первые 12 символов) и спроси одной строкой:🛑 Найдено N потенциальных секретов, замаскировано. Отдать промпт с масками? (y / отмена). - Отдавай (Шаги 4–5) только после явного
y— и только уже замаскированный текст. На «отмена» — ничего не пиши, скажи где посмотреть/почистить источник. - Если находок ноль — продолжай молча (Шаг 4), без лишнего шума.
Шаг 4. Запиши новый промпт
Файл: <obsidian_bridge>/next-prompt.md. Формат:
---
created: <YYYY-MM-DDTHH:MM>
project: <project_name | "general">
project_path: <abs_path>
task_type: feature | bugfix | refactor | setup | research | other
slug: <kebab-case 3-5 слов>
source: mm-bridge
passport_used: <true | false>
framework: <none | CRISPE | XML | PERSONA | HYPOTHESIS>
---
# Задача
<одно императивное предложение>
# Контекст
<2-5 предложений: зачем, что уже есть, что НЕ трогать>
<Если паспорт прочитан — вставь блок:>
**Стек проекта** (из passport.md): <язык> · <фреймворк> · <DB> · <главные зависимости через "·">
# Файлы для чтения сначала
- `<абсолютный путь>` — <зачем>
- `<абсолютный путь>` — <зачем>
<Обязательно включи: passport.md если есть>
# Что нужно сделать
1. <шаг>
2. <шаг>
3. <шаг>
# Ограничения
<Из секции 8 паспорта точная копия + любые ограничения из чата>
- <ограничение>
- <ограничение>
# Done when
- [ ] <критерий, проверяемый>
- [ ] <критерий>
- [ ] <критерий>
# Полезные команды
```bash
# Из секции 5 паспорта или из контекста
После выполнения
Когда закончишь — выполни /mm-save-session чтобы залогировать сессию в Obsidian.
### Шаг 4.5. Опциональный Telegram push (если --tg)
Активируется при:
- Юзер передал флаг `--tg` ИЛИ
- В `mm-config.local.json` поле `tg_bridge.enabled = true` И юзер не передал `--no-tg`.
Что делать:
1. Прочитай `tg_bridge.bot_username` из конфига. Если пусто — пропусти этот шаг с warn.
2. Проверь что бот установлен: `<repo>/external/claude-code-telegram/.env` существует.
3. **Не пытайся напрямую обращаться к Telegram API** — у нас нет токена в этом контексте. Вместо этого:
- Сгенерируй короткое **TG-friendly** сообщение: компактный prompt-summary (1 экран в Telegram) + ссылка на цель проекта + reminder про работу через бота.
- Покажи юзеру **ready-to-paste** для отправки боту:
```
📲 Для Telegram-бота (отправь <bot_username> такое сообщение):
/cd <project_path>
<короткий prompt summary, 5-10 строк>
```
4. Если флаг `--tg` И бот **не установлен** (нет `external/claude-code-telegram/.env`):
- Скажи: `TG bridge не установлен. Запусти scripts/install-tg-bridge.ps1 или см. docs/TG-BRIDGE.md`
- НЕ создавай файл вообще, верни ошибку — юзер явно просил TG.
### Шаг 5. Подтверди пользователю
Одной строкой (не блоком):
Готово: C:\Users\louise\Documents\Obsidian Vault\Claude\Bridge\next-prompt.md (framework:
Если был TG push — после этой строки добавь готовое сообщение для бота отдельным блоком.
## Стиль промпта
- **Русский по умолчанию** (`default_language` из конфига).
- **Императив**: «Создай», «Обнови», «Проверь» — не «Можно ли...».
- **Абсолютные пути Windows** (`C:\...`).
- **Никаких отсылок** к «нашему разговору», «как мы обсуждали», «we».
- **Конкретное Done when** — проверяемое («бот стартует без ошибок», «тест X проходит»), а не размытое («работает хорошо»).
- **1 страница max**. Если задача больше — раздели на несколько мостов или предложи `/gsd-plan-phase` (если в проекте есть GSD).
- **Ссылки на конвенции проекта** — если есть `CLAUDE.md` или `passport.md` в проекте, упомяни: «Перед началом прочитай passport.md и секцию 8 — там жёсткие ограничения».
## Когда не писать мост, а возразить
- **Расплывчато** («сделай мне бота»): задай 1-2 уточняющих вопроса.
- **Многодневный скоуп**: предложи `/gsd-plan-phase` или разбить на серию мостов.
- **Тривиально** (1 строка): просто скажи что вставить, без файла-моста.
- **В паспорте секция 8 пустая**: предупреди — `Секция 8 паспорта пустая. Промпт без жёстких ограничений → риск что Клод сделает не так. Заполнить сначала?`
## Edge cases
- **Несколько проектов в задаче**: только один `project_path` в frontmatter (главный). Остальные упоминай в «Контексте».
- **Bridge-папки нет**: создай (Obsidian не падает на отсутствующих папках).
- **Архив-папки нет**: создай.
- **Текущий промпт пустой/повреждённый**: пропусти архивацию, перезапиши.
Files (markdown-memory)
-
SKILL.md 13.2 KB
--- name: mm-bridge version: 0.5.1 description: Compose a ready-to-copy prompt for the user's OTHER Claude Code instance (running in PowerShell). Use when the user asks to "напиши промпт для powershell", "сгенерируй задание для другого клода", "переброс задачи в основной клод", "/mm-bridge", or any request to hand off work to the PowerShell instance. Auto-reads passport.md of the target project to inject stack/conventions/constraints. Supports prompt frameworks (CRISPE / XML / PERSONA / HYPOTHESIS) via --framework flag or auto-detect. Writes to Claude/Bridge/next-prompt.md in the Obsidian vault. Optional --tg flag: also delivers prompt instructions via Telegram bot if mm-config.local.json has tg_bridge.enabled=true. --- # mm-bridge — Prompt Composer for PowerShell Claude Code Я работаю в **app/web инстансе** Claude Code или в claude.ai. У пользователя есть **другой** Claude Code в PowerShell — там идёт реальная работа. Этот skill пишет файл-мост в Obsidian. Пользователь копипастит из файла в PowerShell-сессию. PowerShell-инстанс **не видел** этот разговор. Каждый промпт — самодостаточен. ## Конфиг Загрузи `mm-config.json` по алгоритму из `<repo>/docs/CONFIG-LOADING.md` (env `MM_REPO_ROOT` → resolve junction → fallback). Поддержка `mm-config.local.json` overlay обязательна. Понадобятся ключи: - `paths.obsidian_bridge` — куда писать `next-prompt.md` - `paths.obsidian_bridge_archive` — куда переносить старые промпты - `default_language` — `ru` по умолчанию ## Процесс ### Шаг 1. Собери контекст задачи Из текущего разговора пойми: - **Что сделать?** — действие в одном предложении - **В каком проекте?** — абсолютный путь - **Какой результат?** — definition of done ### Шаг 2. Авто-подгрузка паспорта проекта Если ты знаешь целевой путь проекта — попробуй прочитать `<project_path>/passport.md`. Из него возьми: - `project` (имя) - Стек (секция 2): язык, фреймворк, главные зависимости - Конвенции (секция 7) - **Секция 8 «Контекст для промптов»** — критично, перенеси в промпт целиком - Точки входа (секция 4) - Команды (секция 5) Если паспорта нет — попроси пользователя дать минимальный контекст (одно сообщение, не больше 3 вопросов): 1. Целевая папка (абсолютный путь)? 2. Какие файлы должен прочитать другой Клод первыми? 3. Что считаем готовым? Если пользователь говорит «ты решай» / «default» — выбираешь сам, отмечаешь в промпте `<assumed: ...>`. ### Шаг 2.5. Выбери prompt framework Шаблоны лежат в `<repo>/templates/prompt-frameworks.md`. Доступны: `none | CRISPE | XML | PERSONA | HYPOTHESIS`. **Если юзер передал `--framework <name>`** — используй его. Точка. **Иначе auto-detect** — применяй эвристики из `<repo>/templates/prompt-frameworks.md` (раздел «Auto-detect»). Этот документ — единственный source-of-truth для эвристик; не дублируй здесь. **Если эвристика не уверена** — спроси одной строкой: `Framework: XML / CRISPE / none? (дефолт XML)`. Запомни выбранный framework — он нужен для шага 4 (формирование промпта) и для frontmatter (`framework: <name>`). Если выбран framework ≠ none — прочти соответствующий блок из `<repo>/templates/prompt-frameworks.md` и используй как шаблон обёртки. ### Шаг 3. Архивируй прошлый промпт Перед перезаписью `<obsidian_bridge>/next-prompt.md`: - Если файл существует — прочитай frontmatter (`created`, `slug`). - Скопируй (Read + Write) в `<obsidian_bridge_archive>/<YYYY-MM-DD-HHMM>-<slug>.md` на основе frontmatter. - Только после успешной записи в архив — перезапиши `next-prompt.md`. - Если slug отсутствует — выведи из первого `# Заголовка`. ### Шаг 3.9. Scrub секретов перед записью и отдачей (hard-stop, строже handoff) > **Вывод этого скилла пользователь руками вставляет в claude.ai** (внешний сервис) — это самая «утечкоёмкая» точка mm. Промпт собирается из паспорта + контекста чата, куда мог просочиться токен. Поэтому политика строже, чем у `mm-handoff`. Переиспользуй единый механизм — паттерны бери из канона `<repo>/config/secret-patterns.json` (политику `mm-bridge` и пояснение см. в `<repo>/docs/SECRET-PATTERNS.md`, строка `mm-bridge` в «Политики применения»), не дублируй их здесь. Прогони **весь** собранный текст промпта (frontmatter + тело) через паттерны. TG-summary (Шаг 4.5) выводится из уже очищенного промпта → наследует маски, отдельно сканировать не нужно: 1. **Маскируй И Класс A, И Класс B** — типизированными плейсхолдерами с сохранением контекста (в отличие от handoff/save, здесь Класс B тоже маскируется, не warn-only). 2. **Если найдено что-либо (A или B) — жёсткий стоп.** НЕ записывай `next-prompt.md`, НЕ показывай вывод, НЕ отправляй TG. Выведи список находок (тип + место + первые 12 символов) и спроси одной строкой: `🛑 Найдено N потенциальных секретов, замаскировано. Отдать промпт с масками? (y / отмена)`. 3. Отдавай (Шаги 4–5) **только после явного `y`** — и только уже замаскированный текст. На «отмена» — ничего не пиши, скажи где посмотреть/почистить источник. 4. Если находок ноль — продолжай молча (Шаг 4), без лишнего шума. ### Шаг 4. Запиши новый промпт Файл: `<obsidian_bridge>/next-prompt.md`. Формат: ```markdown --- created: <YYYY-MM-DDTHH:MM> project: <project_name | "general"> project_path: <abs_path> task_type: feature | bugfix | refactor | setup | research | other slug: <kebab-case 3-5 слов> source: mm-bridge passport_used: <true | false> framework: <none | CRISPE | XML | PERSONA | HYPOTHESIS> --- # Задача <одно императивное предложение> # Контекст <2-5 предложений: зачем, что уже есть, что НЕ трогать> <Если паспорт прочитан — вставь блок:> **Стек проекта** (из passport.md): <язык> · <фреймворк> · <DB> · <главные зависимости через "·"> # Файлы для чтения сначала - `<абсолютный путь>` — <зачем> - `<абсолютный путь>` — <зачем> <Обязательно включи: passport.md если есть> # Что нужно сделать 1. <шаг> 2. <шаг> 3. <шаг> # Ограничения <Из секции 8 паспорта точная копия + любые ограничения из чата> - <ограничение> - <ограничение> # Done when - [ ] <критерий, проверяемый> - [ ] <критерий> - [ ] <критерий> # Полезные команды ```bash # Из секции 5 паспорта или из контекста ``` # После выполнения Когда закончишь — выполни `/mm-save-session` чтобы залогировать сессию в Obsidian. ``` ### Шаг 4.5. Опциональный Telegram push (если --tg) Активируется при: - Юзер передал флаг `--tg` ИЛИ - В `mm-config.local.json` поле `tg_bridge.enabled = true` И юзер не передал `--no-tg`. Что делать: 1. Прочитай `tg_bridge.bot_username` из конфига. Если пусто — пропусти этот шаг с warn. 2. Проверь что бот установлен: `<repo>/external/claude-code-telegram/.env` существует. 3. **Не пытайся напрямую обращаться к Telegram API** — у нас нет токена в этом контексте. Вместо этого: - Сгенерируй короткое **TG-friendly** сообщение: компактный prompt-summary (1 экран в Telegram) + ссылка на цель проекта + reminder про работу через бота. - Покажи юзеру **ready-to-paste** для отправки боту: ``` 📲 Для Telegram-бота (отправь <bot_username> такое сообщение): /cd <project_path> <короткий prompt summary, 5-10 строк> ``` 4. Если флаг `--tg` И бот **не установлен** (нет `external/claude-code-telegram/.env`): - Скажи: `TG bridge не установлен. Запусти scripts/install-tg-bridge.ps1 или см. docs/TG-BRIDGE.md` - НЕ создавай файл вообще, верни ошибку — юзер явно просил TG. ### Шаг 5. Подтверди пользователю Одной строкой (не блоком): ``` Готово: C:\Users\louise\Documents\Obsidian Vault\Claude\Bridge\next-prompt.md (framework: <name>, passport: <yes/no>, архив: <yes/no>, tg: <yes/no/skip>). Скопируй и вставь в PowerShell. ``` Если был TG push — после этой строки добавь готовое сообщение для бота отдельным блоком. ## Стиль промпта - **Русский по умолчанию** (`default_language` из конфига). - **Императив**: «Создай», «Обнови», «Проверь» — не «Можно ли...». - **Абсолютные пути Windows** (`C:\...`). - **Никаких отсылок** к «нашему разговору», «как мы обсуждали», «we». - **Конкретное Done when** — проверяемое («бот стартует без ошибок», «тест X проходит»), а не размытое («работает хорошо»). - **1 страница max**. Если задача больше — раздели на несколько мостов или предложи `/gsd-plan-phase` (если в проекте есть GSD). - **Ссылки на конвенции проекта** — если есть `CLAUDE.md` или `passport.md` в проекте, упомяни: «Перед началом прочитай passport.md и секцию 8 — там жёсткие ограничения». ## Когда не писать мост, а возразить - **Расплывчато** («сделай мне бота»): задай 1-2 уточняющих вопроса. - **Многодневный скоуп**: предложи `/gsd-plan-phase` или разбить на серию мостов. - **Тривиально** (1 строка): просто скажи что вставить, без файла-моста. - **В паспорте секция 8 пустая**: предупреди — `Секция 8 паспорта пустая. Промпт без жёстких ограничений → риск что Клод сделает не так. Заполнить сначала?` ## Edge cases - **Несколько проектов в задаче**: только один `project_path` в frontmatter (главный). Остальные упоминай в «Контексте». - **Bridge-папки нет**: создай (Obsidian не падает на отсутствующих папках). - **Архив-папки нет**: создай. - **Текущий промпт пустой/повреждённый**: пропусти архивацию, перезапиши.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.