agentsclimarketplace

Mm bridge

Skill mworldorg/markdown-memory/skills/mm-bridge

A cross-platform, file-based persistent memory and prompt bridge for Claude Code, claude.ai, and Antigravity IDE. Synchronizes project passports, handoffs, and session logs in an Obsidian Vault, connecting web planning with local CLI execution. Install via: npx markdown-memory

Install
npx -y skills add mworldorg/markdown-memory --skill mm-bridge

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 23 stars23 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

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.

SKILL.md

13.2 KB, as published. Nobody here has run it

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_languageru по умолчанию

Процесс

Шаг 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. Формат:

---
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 не падает на отсутствующих папках).
- **Архив-папки нет**: создай.
- **Текущий промпт пустой/повреждённый**: пропусти архивацию, перезапиши.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.