Install
$ agentstack add skill-mworldorg-markdown-memory-mm-init-project ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
mm-init-project — Project Bootstrap & Refresh (safe edition)
Создаёт «паспорт» проекта — единый источник контекста для claude.ai Project Knowledge и для всех mm-* skills. Всегда показывает план перед записью, никогда не уничтожает чужие .md файлы.
Контракт безопасности (это важно — соблюдай дословно)
Skill ПИШЕТ только в эти файлы:
/passport.md— создаёт или обновляет/CLAUDE.md— только добавляет секции## Obsidian Knowledge Vaultи## mm-systemесли их нет; никогда не редактирует существующие секции/.gitignore— добавляет правила для игнорирования локальных настроек Obsidian (.vault/.obsidian/)- Файлы Obsidian Vault (хранилище в
/.vault/при локальном режиме или//при глобальном режиме): 00-home/index.md— карта всех заметок00-home/текущие приоритеты.md— текущие приоритеты00-home/project-instructions.md— инструкции для claude.aihandoff.md— создаёт скелет на старте (в корне хранилища)atlas/passport.md— копия паспорта проектаatlas/архитектура проекта.md— описание архитектурыatlas/база данных.md— схема БДatlas/деплой.md— информация о деплое- Создает папки
knowledge/integrations/,knowledge/decisions/,knowledge/debugging/,knowledge/patterns/,knowledge/business/,sessions/,inbox/if they don't exist.
Skill ТОЛЬКО ЧИТАЕТ (никогда не редактирует):
- README.md, ARCHITECTURE.md, NOTES.md, OVERVIEW.md, CONTEXT.md, DESIGN.md, ROADMAP.md, TODO.md, BUGS.md, DECISIONS.md, и любые другие *.md в проекте
- package.json, pyproject.toml, requirements.txt, go.mod, Cargo.toml, pom.xml
- .env.example (не .env!)
- Dockerfile, docker-compose.yml, railway.json, vercel.json
- .git/config, git log, git status
Skill НЕ ТРОГАЕТ ВООБЩЕ:
.env,*.key,*.pem,secrets/— даже не читает значения- node_modules/, .venv/, dist/, build/, target/
- Файлы вне `` за исключением Obsidian-папки из конфига
Перед любой записью — обязательная фаза Preview (см. ниже). Без подтверждения y — ничего не пишется.
Конфиг
Загрузи mm-config.json по алгоритму из /docs/CONFIG-LOADING.md. Поддержка mm-config.local.json overlay обязательна. ` берётся из reporoot` инжектированного loader'ом.
Понадобятся:
paths.obsidian_projects_repo_root(дляtemplates/passport.mdиtemplates/project-instructions.md)bot_defaults.*default_language
Фаза 0. Определи целевую папку (worktree-aware)
Целевая папка = «корень проекта», не «cwd как есть».
Алгоритм:
- Возьми
cwd. - Если в пути есть подстрока
\.claude\worktrees\или/.claude/worktrees/— это worktree. Найди корневой репо:
- Прочитай
/.git(это файл-указатель, не папка). Извлекиgitdir:. Из него выведи main repo path. - Если не получилось — спроси:
Это git worktree. Какую папку считать корнем проекта?.
- Иначе — поднимись от
cwdпока не найдёшь.git/(папку, не файл) илиpackage.json/pyproject.toml/ любой явный маркер корня. Если ничего нет —cwdи есть корень.
Имя проекта = basename целевой папки. Покажи: Имя проекта: (целевая папка: ). Ок? (y/n или новое имя).
Фаза 1. Discovery (что уже есть в проекте)
Просканируй и выведи отчёт пользователю перед любыми действиями.
1a. Существующие паспорта (миграция)
Поищи (case-insensitive) в ` и /docs/`:
passport.md,PASSPORT.md,Passport.md,passport.MD— варианты casePROJECT_PASSPORT.md,project_passport.md— старая louise-система (Claude Setup/)*_passport.md,passport_*.md
Любой найденный — кандидат на миграцию, не конфликт-блокер.
1b. Документы которые могут содержать контекст
Просканируй *.md в:
/(корень)/docs/,/notes/,/_docs//.planning/(GSD-документы)
Распознай семантически по имени (case-insensitive substring): | В имени есть | Категория | |---|---| | readme | Описание / overview | | architecture, design, arch | Архитектура | | overview, context, intro | Контекст | | notes, ideas | Заметки | | decisions, adr, rfc | Решения | | roadmap, plan | Планы | | todo, tasks, backlog | Задачи | | bugs, issues, known-issues | Проблемы | | changelog, history | История | | claude (CLAUDE.md, claude-rules.md) | Правила для AI |
Прочитай первые 50 строк каждого найденного файла — для понимания.
1c. Маркеры стека (auto-detection)
Manifest-файлы — прочитай если есть:
package.json,pyproject.toml,requirements.txt,go.mod,Cargo.toml,pom.xml,composer.json,Gemfile,mix.exs,pubspec.yamlDockerfile,docker-compose.yml,railway.json,vercel.json,fly.toml,Procfile.env.example,.env.template(не.env!)tsconfig.json,next.config.*,vite.config.*,astro.config.*,nuxt.config.*,svelte.config.*,remix.config.*.python-version,.nvmrc,.tool-versions,runtime.txt
Auto-detection: пакет → стек (по подстроке в зависимостях):
| Если в зависимостях | Тип | Фреймворк | Категория | |---|---|---|---| | aiogram, python-telegram-bot, telethon, pyrogram, telegraf, grammy | bot | по имени | tg-bot | | discord.py, discord.js, discordeno | bot | по имени | discord-bot | | fastapi, flask, django, starlette, litestar, quart, sanic, bottle, pyramid | web | по имени | python-web | | express, koa, hapi, fastify, nest, polka, hono, elysia | web | по имени | node-web | | next, nuxt, astro, remix, sveltekit, gatsby, solid-start, qwik | web | по имени | meta-framework | | react, vue, svelte, solid-js, preact, lit, htmx | web | по имени | spa-frontend | | gin, echo, fiber, chi, gorilla/mux, huma | web | по имени | go-web | | actix-web, axum, rocket, warp, tide, salvo | web | по имени | rust-web | | rails, sinatra, hanami, roda | web | по имени | ruby-web | | phoenix, plug | web | по имени | elixir-web | | laravel, symfony, slim | web | по имени | php-web | | sqlalchemy, sqlmodel, alembic, tortoise-orm, peewee, pydantic | — | — | python-db | | prisma, drizzle, kysely, typeorm, sequelize, mongoose, mikro-orm | — | — | node-db | | gorm, ent, sqlx, bun, pgx | — | — | go-db | | diesel, sea-orm, sqlx (rust) | — | — | rust-db | | pytest, unittest, nose2, tox | — | тесты Python | testing | | vitest, jest, mocha, playwright, cypress, ava, tap | — | тесты JS | testing | | cargo test (default), nextest | — | тесты Rust | testing | | loguru, structlog, winston, pino, zap, tracing, slog | — | логирование | observability | | pydantic, zod, joi, yup, ajv, valibot, arktype | — | валидация | validation | | openai, anthropic, litellm, langchain, llama-index, instructor | — | — | ai-llm | | huggingface, transformers, torch, tensorflow, jax, keras | — | — | ai-ml | | pandas, polars, numpy, scipy, dask | — | — | data | | dlt, airflow, prefect, dagster, kafka-python, aiokafka | — | — | pipelines | | redis, aioredis, kombu, celery, rq, bullmq | — | — | queue/cache | | scrapy, playwright, puppeteer, selenium, httpx, aiohttp | — | — | scraping/http | | tauri, electron, wails | — | — | desktop |
Файловые маркеры (если manifest неоднозначен):
*.tsx/*.jsx→ React*.vue→ Vue*.svelte→ Svelte*.astro→ Astroapp/page.tsx→ Next.js App Routerpages/*.tsx→ Next.js Pages Routerwrangler.toml→ Cloudflare Workersserverless.yml→ Serverless Frameworkterraform/,*.tf→ Terraformhelm/,Chart.yaml→ Kubernetes Helm
Combo-recognition (комплекты):
- React + TypeScript + Tailwind + shadcn → пометить «modern react stack»
- FastAPI + Pydantic + sqlmodel + pytest → пометить «modern python web»
- aiogram + sqlmodel + loguru → пометить «default bot stack» (из bot_defaults конфига)
- Наличие
telethonв зависимостях → установить внутренний флагtelethon_project: true - Наличие фреймворков категории
tg-bot(aiogram,python-telegram-bot,telegraf,grammyи др.) в зависимостях → установить внутренний флагtg_bot_project: true
Приоритет определения типа (когда несколько матчей):
- tg-bot / discord-bot (если есть бот-фреймворк) —
bot - meta-framework (Next/Nuxt/Astro/Remix) —
web - python-web / node-web / go-web / rust-web —
web - spa-frontend без backend —
web(frontend-only) - ai-ml / ai-llm + entry point —
scriptилиservice - data / pipelines —
script - desktop —
desktop - lib (если в
pyproject.toml[project]без entry point ИЛИ вpackage.jsonmainбезbin) —lib - иначе —
script
Версии:
- Питон: из
.python-versionилиpyproject.tomlrequires-python - Node: из
.nvmrc,engines.nodeв package.json - Go: из
go.modстрокаgo X.Y - Rust: из
rust-toolchain.tomlили edition вCargo.toml
1d. Git-контекст
git rev-parse --show-toplevel
git remote -v
git branch --show-current
git log --oneline -10
1e. Системы которые могут конфликтовать (dual-detection GSD)
GSD detection (определи версию):
/.planning/существует:- Если
/.planning/config.jsonсуществует → GSD Core. В passport frontmattergsd_version: core. - Иначе → GSD v1. В passport frontmatter
gsd_version: v1. /.gsd/существует → GSD v2. В passport frontmattergsd_version: v2.- Оба → смешанный (редкость, после миграции). Спроси: какой считать активным?
- Ни одного →
gsd_version: none.
Если GSD есть — попробуй импортировать scope/requirements (чтобы не дублировать):
GSD v1 (.planning/):
PROJECT.md→ vision, audience, goals → секция 1 (Назначение) + секция 3 (Архитектура краткая)REQUIREMENTS.md→ REQ-001..N → можно вытащить топ-5 в секцию 4 как «функциональные требования» (опционально)ROADMAP.md→ phases, статусы → секция 9 паспорта строкаТекущий milestone / phase: >STATE.md→ current phase / position → секция 10 «В работе сейчас»codebase/STACK.md,codebase/ARCHITECTURE.md,codebase/CONVENTIONS.md,codebase/CONCERNS.md→ если есть, переносим в секции 2, 3, 7, 10 паспорта (НЕ дублируя — кратко + ссылкасм. .planning/codebase/STACK.md)
GSD v2 (.gsd/):
gsd.db(SQLite) → если можешь прочитать через sqlite3 CLI/Python — извлеки текущий milestone/slice/task; иначе пропустиSTATE.md(rendered dashboard) → парсинг как у v1AGENTS.md→ preferences для агентов → ссылка в секции 7 паспорта
Важное правило про дубликацию:
- Если в
.planning/PROJECT.mdуже есть подробное описание проекта — в секции 1 паспорта пиши краткое summary + ссылку (см. .planning/PROJECT.md), не копируй целиком. - В секции 9 явно укажи source-of-truth:
Source-of-truth для scope/requirements: .planning/PROJECT.md. Это нужно чтобы будущий читатель не запутался какой документ актуальный.
Никогда не пиши в .planning/* или .gsd/* напрямую — там file-lock'и, hook'и-охранники GSD. Только читать.
CLAUDE.md → читай, оценивай размер: маленький (/passport.md И /Projects//passport.md`:
- Сравни sha256 содержимого (или хотя бы mtime + size).
- Если расходятся — это значит юзер редактировал одну из копий (например в Obsidian app). Покажи в Discovery:
``` ⚠️ Рассинхрон: passport.md в проекте и в Obsidian отличаются. Проект: updated , sha Obsidian: updated , sha
Какую версию считать source-of-truth? [1] Проект (Obsidian перезапишется) — дефолт [2] Obsidian (проект перезапишется) [3] Show diff first [4] Cancel ```
- Запомни выбор для фазы 4 (write).
1g. Вывод фазы Discovery (покажи пользователю)
🔍 Discovery:
Целевая папка:
Git: , коммитов, remote:
Найдено существующих паспортов:
• PROJECT_PASSPORT.md ← старая louise-система, можно мигрировать
• passport.md ← текущий формат, режим update
(или: «не найдено»)
Найдено документов с контекстом:
• README.md (описание)
• docs/architecture.md (архитектура)
• NOTES.md (заметки)
(используются ТОЛЬКО для чтения — не будут изменены)
GSD detection:
• Версия:
• PROJECT.md:
• REQUIREMENTS.md:
• Текущий milestone:
• codebase/:
Стек определён (auto-detection):
• Язык: Python 3.12 (из .python-version)
• Фреймворк: aiogram 3.x (из pyproject.toml)
• DB: SQLite через sqlmodel
• Тесты: pytest
• Логирование: loguru
• Тип: bot (combo: «default bot stack»)
Существующий CLAUDE.md: строк, добавлю секцию mm-system / большой — спрошу>
Фаза 2. Решения (если нужны)
Задай только реально неопределённые вопросы (максимум 3-4):
- Расположение Obsidian Vault (КРИТИЧНО):
Спроси пользователя, где хранить базу знаний (Obsidian Vault): `` Выберите расположение Obsidian Vault для проекта: [1] Локально в папке проекта (рекомендуется: /.vault/, версионируется в git, синхронизируется с claude.ai автоматически) — дефолт [2] Глобально в папке Obsidian (из конфига: //) ``
- Если найден PROJECT_PASSPORT.md или другой кандидат миграции:
Найден старый паспорт . Мигрировать его контент в новый passport.md? (y = мигрировать, переименую старый в .legacy / n = игнорировать)
- Если есть passport.md И он явно устарел (mtime старше 30 дней или git log показывает много коммитов после updated):
Просто переходи в режим update без вопроса.
- Если CLAUDE.md > 30 строк:
CLAUDE.md существует и непустой ( строк). Добавить правила базы знаний в конец? (y/n)
- Если папка пустая (новый проект):
- Тип: bot / web / lib / script?
- Язык / фреймворк? (для bot — дефолт
aiogramиз bot_defaults) - Назначение в одном предложении?
- Если в выбранной директории Vault уже есть файлы:
В директории базы знаний уже есть файлы. Update (y) / Создать папку с суффиксом -2 (n) / Отмена (c)?
- Если есть GSD (
.planning/PROJECT.mdили.gsd/) и режим init:
Найден . Импортировать описание/scope в секции 1, 3 паспорта (y) / только сослаться, не дублировать (n) / отмена (c)? Дефолт n — паспорт ссылается, не дублирует.
Если пользователь говорит «решай сам» — выбирай разумный дефолт, отмечай в финальном отчёте ``.
Фаза 3. План записи (Preview / Dry-run)
Это обязательная фаза. Без подтверждения — НИЧЕГО не пишется.
Покажи пользователю полный план в формате:
📋 План записи
Расположение Obsidian Vault: )>
СОЗДАМ:
+ /passport.md (новый файл, секций)
Источники: README.md, package.json, etc.
+ /00-home/index.md (карта всех заметок)
+ /00-home/текущие приоритеты.md (активные приоритеты)
+ /00-home/project-instructions.md (инструкции для claude.ai)
+ /handoff.md (скелет)
+ /atlas/passport.md (копия паспорта)
+ /atlas/архитектура проекта.md (архитектура)
+ /atlas/база данных.md (схемы БД)
+ /atlas/деплой.md (информация о деплое)
+ /knowledge/integrations/ (папка)
+ /knowledge/decisions/ (папка)
+ /knowledge/debugging/ (папка)
+ /knowledge/patterns/ (папка)
+ /knowledge/business/ (папка)
+ /sessions/ (папка для логов сессий)
+ /inbox/ (папка для входящего)
ИЗМЕНЮ:
~ /CLAUDE.md (добавлю правила Obsidian Knowledge Vault, +18 строк)
~ /.gitignore (добавлю .vault/.obsidian/ в конец, +2 строки)
ПЕРЕИМЕНУЮ:
→ PROJECT_PASSPORT.md → PROJECT_PASSPORT.md.legacy
НЕ ТРОНУ:
README.md, .planning/*, .env, src/
Continue? (y / n / edit)
edit → дай возможность изменить план: «Не переименовывай PROJECT_PASSPORT» / «Не трогай CLAUDE.md» / «Не создавай dashboard» — пользователь редактирует список через простой dialog, ты применяешь.
n → останови, ничего не пиши.
y → переходи к фазе 4.
Фаза 4. Запись (atomic: всё или ничего)
Делай в этом порядке. Если хоть один шаг падает — откати уже сделанное (удали созданные файлы, восстанови переименованный):
4.1. Сгенерируй текст passport.md в памяти
Возьми шаблон /templates/passport.md. Заполни:
- Секции 1-7, 9 — из discovery (ст
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: mworldorg
- Source: mworldorg/markdown-memory
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.