- rewrite ucnl-market-memory/SKILL.md with final layout (accounts/products/campaigns/markets + insights/conversations/inbox), extended frontmatter (sensitive flag), domain routing table with border examples - refresh obsidian-memory/SKILL.md with the same domain-routing section placed at top, matching examples, and updated description with negative trigger
16 KiB
name: ucnl-market-memory description: Protocol for using ucnlmarket/ucnl-market-memory (Gitea repo at h3fq32.golive.ru) as Claude's long-term memory for marketing and sales projects of Laboratory of Underwater Communication and Navigation (UCN / UnaVLab). Trigger when the conversation is about UCN commercial matters — clients, distributors, leads, RFQs, quotes (КП), export deals, exhibitions/trade shows (INNOPROM, Oceanology, etc.), product marketing for uWave / Zima2 / uSpeak / USBL / Piket / Scout, pricing and discount schemes, market analysis (India, Saudi Arabia, Europe, ME), competitor positioning (HiPAP, Sonardyne, EvoLogics, iXblue), trademark/brand work tied to commercial use (iSPEAK, uSpeak), distribution channels, or any sales/marketing insight about UCN products. Also trigger on mentions of ucnlmarket org, ucnl-market-memory repo, or team members Dmitry Zaitsev (d.zaitsev) / Victoria Vinogradova (v.vinogradova) in commercial context. Do NOT trigger for: technical/engineering work on UCN products (firmware, acoustics, R&D), personal projects, infrastructure, 1C consulting for non-UCN clients, or casual chat — those go through obsidian-memory skill or require no memory lookup.
ucnl-market-memory
Протокол работы с ucnlmarket/ucnl-market-memory как долговременной
памятью для всего что касается маркетинга и продаж UCN / UnaVLab.
Репо — обычный git в Gitea, хранит markdown-заметки с YAML-frontmatter.
Claude читает и пишет через Gitea REST API. Два человека — Дмитрий
Зайцев (d.zaitsev) и Виктория Виноградова (v.vinogradova) — также
работают с репо напрямую через web UI и git.
Разграничение доменов — критично
У пользователя два репо памяти с жёстким разделением:
| Домен | Репо | Скилл |
|---|---|---|
| Маркетинг и продажи UCN (клиенты, дистрибьюторы, выставки, КП, экспорт, product marketing uWave/Zima2/uSpeak/USBL) | ucnlmarket/ucnl-market-memory |
этот скилл |
| Личные проекты Артура, инфраструктура, embedded, 1С-консалтинг, R&D по UCN-продуктам, прочее | creator/obsidian-vault |
obsidian-memory |
Правило жёсткое: материалы из одного домена НЕ попадают в репо другого. Если тема пограничная (1С-внедрение в UCN как клиенте, где есть и коммерческий, и технический аспект) — спросить пользователя, не додумывать.
Примеры границы:
| Запрос | Куда |
|---|---|
| «Напиши письмо Mavi Marine по поводу сроков поставки» | sales → этот скилл |
| «Прошивка uWave — как обновить через STM32CubeProg» | R&D → obsidian-memory |
| «Подготовь слайд для INNOPROM KSA 2026» | маркетинг → этот скилл |
| «Расчёт TDOA для uWave USBL» | R&D/алгоритмы → obsidian-memory |
| «ТЗ на 1С-внедрение для Teplovin» | 1С-консалтинг не-UCN → obsidian-memory |
| «Скидка дистрибьютору X на линейку Y» | sales → этот скилл (вероятно sensitive: true) |
Where things live
- Gitea:
https://git.h3fq32.golive.ru - Repo:
ucnlmarket/ucnl-market-memory - Branch:
main - Visibility: private (видят только члены org
ucnlmarket) - Access:
bash_tool+curlсAuthorization: token $GITEA_TOKEN
Токен — тот же что для obsidian-memory (он от пользователя creator
со scope write:repository, доступа к этому приватному репо хватает,
т.к. creator — owner организации).
Repo layout
memory/
├── accounts/ клиенты, дистрибьюторы, лиды — <slug>.md
├── products/ продуктовые линейки (uwave, zima2, uspeak, usbl, …)
├── campaigns/ маркетинговые активности, выставки
├── markets/ региональные рынки (india, saudi-arabia, europe)
├── facts.md стабильные факты (append-only секциями)
├── preferences.md стиль КП, tone of voice, терминология
└── pricing.md прайсы, скидки, Incoterms (sensitive: true)
insights/ YYYY-MM-DD-<slug>.md — датированные наблюдения
conversations/ YYYY-MM-DD-<slug>.md — выжимки сессий
inbox/ черновики и спорные записи на ревью
Принцип accounts vs markets:
accounts/— конкретная компания (есть имя, ИНН/ID, контакты, история).markets/— регион/страна/сегмент (India, Saudi Arabia, offshore-Europe) — нормы, законы, пошлины, конкуренты, предпочитаемые каналы.
Принцип campaigns vs insights:
campaigns/— запланированная/идущая активность с целями и ресурсами.insights/— разовое наблюдение (услышали на выставке; конкурент выпустил Y; клиент отказался по причине Z).
Frontmatter
---
type: account | product | campaign | market | insight | conversation | fact | preference
slug: <kebab-case-id> # совпадает с именем файла без .md
account: <slug> # опц., ссылка на accounts/<slug>.md
product: <slug> # опц., ссылка на products/<slug>.md
market: <slug> # опц., ссылка на markets/<slug>.md
campaign: <slug> # опц., ссылка на campaigns/<slug>.md
tags: [<tag1>, <tag2>] # свободная форма, kebab-case
author: claude | d.zaitsev | v.vinogradova | creator
created: YYYY-MM-DD
updated: YYYY-MM-DD
relevance: 0.0-1.0 # важность для ранжирования
confidence: low | medium | high
stage: lead | qualified | proposal | won | lost | closed # для accounts, опц.
private: false # true → не цитировать, не упоминать
sensitive: false # true → не во внешние API, не в экспорты
sources:
- conversation: 2026-04-20-<slug>
- email: <msg-id>
- url: https://…
---
private: true — читать для контекста можно, в ответах не цитировать,
не упоминать о наличии.
sensitive: true — сильнее: не передавать содержимое во внешние API
(web_search, AI-ассистенты сторонних вендоров), не включать в экспорты,
не показывать людям без явной проверки. Применяется к коммерческой
конфиденциальной информации (скидки, маржа, закрытые условия).
Protocol
1. В начале разговора по маркетингу/продажам UCN
- Content-поиск по репо:
GET /api/v1/repos/ucnlmarket/ucnl-market-memory/search?q=<keyword>&type=code - Листинг релевантной папки (accounts/products/campaigns/markets) по имени упомянутой сущности.
- Читаем top 3–5 самых релевантных. Приоритет: явный match по slug,
свежесть
updated, высокийrelevance. Исключитьprivate: trueиз ответов. - Использовать контекст естественно, без мета-комментариев «я нашёл заметку…».
2. Когда НЕ искать
- Одноразовые справочные вопросы без контекста клиента/продукта.
- Технические/R&D вопросы по UCN-продуктам — это
obsidian-memory. - Разговоры где пользователь сам дал весь нужный контекст в сообщении.
3. В процессе
- При упоминании сущностей, имеющих свою заметку —
[[wiki-links]]в новых заметках (пригодится для Obsidian-навигации). - Противоречия «память ↔ текущее сообщение» — честно флагить, не тихо исправлять.
- Обращать внимание на автора последней записи:
d.zaitsevиv.vinogradova— живые коллеги, у них свой фронт работ; Claude не переписывает их заметки молча, лучше дополнить отдельной записью со ссылкой.
4. В конце разговора — что и куда сохранять
| Что появилось | Куда |
|---|---|
| Значимое про конкретного клиента | memory/accounts/<slug>.md (update) или insights/YYYY-MM-DD-<slug>.md |
| Новая позиция в продуктовой линейке | memory/products/<slug>.md |
| Запуск кампании / выставка | memory/campaigns/<slug>.md |
| Изменения на региональном рынке | memory/markets/<slug>.md |
| Изменение в прайсе | memory/pricing.md (sensitive!) |
| Предпочтение команды | memory/preferences.md |
| Стабильный факт общего характера | memory/facts.md (append в секцию) |
| Выжимка беседы | conversations/YYYY-MM-DD-<slug>.md |
| Сомневаюсь куда | inbox/ + явная пометка пользователю |
Не писать ради галочки. Лучше 0 файлов, чем пять пустословных. Критерий: «если через полгода Claude или Дмитрий/Виктория прочитают эту заметку — даст ли она что-то?».
Gitea REST API — шпаргалка
GITEA=https://git.h3fq32.golive.ru
REPO=ucnlmarket/ucnl-market-memory
TOKEN=$GITEA_TOKEN
# ── READ ────────────────────────────────────────────────────────────
# Файл (raw)
curl -sS -H "Authorization: token $TOKEN" \
"$GITEA/api/v1/repos/$REPO/raw/memory/accounts/mavi-marine.md"
# Листинг папки
curl -sS -H "Authorization: token $TOKEN" \
"$GITEA/api/v1/repos/$REPO/contents/memory/accounts?ref=main"
# Поиск
curl -sS -H "Authorization: token $TOKEN" \
"$GITEA/api/v1/repos/$REPO/search?q=mumbai+usbl&type=code"
# Tree (целиком)
curl -sS -H "Authorization: token $TOKEN" \
"$GITEA/api/v1/repos/$REPO/git/trees/main?recursive=true"
# ── WRITE ───────────────────────────────────────────────────────────
# Create (POST). Поле "content" (не content_base64!)
content_b64=$(base64 -w0 /tmp/note.md)
curl -sS -X POST -H "Authorization: token $TOKEN" \
-H "Content-Type: application/json" \
"$GITEA/api/v1/repos/$REPO/contents/memory/accounts/new.md" \
-d "{\"message\":\"claude: save — new lead\",\"content\":\"$content_b64\",\"branch\":\"main\"}"
# Update (PUT, нужен sha)
sha=$(curl -sS -H "Authorization: token $TOKEN" \
"$GITEA/api/v1/repos/$REPO/contents/memory/facts.md?ref=main" \
| python3 -c "import sys,json; print(json.load(sys.stdin)['sha'])")
content_b64=$(base64 -w0 /tmp/facts-new.md)
curl -sS -X PUT -H "Authorization: token $TOKEN" \
-H "Content-Type: application/json" \
"$GITEA/api/v1/repos/$REPO/contents/memory/facts.md" \
-d "{\"message\":\"claude: update facts\",\"content\":\"$content_b64\",\"sha\":\"$sha\",\"branch\":\"main\"}"
# Batch
curl -sS -X POST -H "Authorization: token $TOKEN" \
-H "Content-Type: application/json" \
"$GITEA/api/v1/repos/$REPO/contents" \
-d '{
"branch": "main",
"message": "claude: session — mavi RFQ update",
"files": [
{"operation":"create","path":"conversations/2026-04-20-mavi-rfq.md","content":"<b64>"},
{"operation":"update","path":"memory/accounts/mavi-marine.md","content":"<b64>","sha":"<prev>"}
]
}'
Gotchas (общие с obsidian-memory, напомним)
content, неcontent_base64. Иначе файл нулевого размера.- URL-encode путей с пробелами/кириллицей.
PUTтребуетshaтекущей версии файла.sensitive: true— не подсвечивать во внешних поисках. Если Claude собирается делать web_search на основе данных из sensitive- заметки (например, искать что-то по номенклатуре цены) — формулировать запросы так, чтобы не утекали конкретные цифры и условия.
Commit message format
Префикс claude: для коммитов Claude:
claude: save <тема>— новая заметкаclaude: update <путь> — <что>— правкаclaude: merge <откуда> → <куда>— переорганизация
Позволяет Дмитрию и Виктории фильтровать изменения от Claude
(git log --grep "^claude:").
Naming
- Всё ASCII-kebab-case. Русские имена → транслит или англ.:
мави-марин→mavi-marine. YYYY-MM-DD-<slug>.mdдля датированных (insights/, conversations/).- slug в
accounts/= официальное short name компании, однозначно. - Slug продукта = продуктовый код UCN:
uwave,zima2,uspeak, неusbl-system-v2.
Boundaries
- Не писать в
obsidian-vaultиз этого контекста. Если тема явно про R&D/embedded/инфраструктуру — сказать пользователю и переключиться (или спросить). - Не удалять чужие заметки. Если есть сомнение в актуальности —
private: trueили обсудить. - Не обходить
sensitive: true. Не цитировать наружу, не включать в материалы для третьих сторон. - Конфликты между заметками
d.zaitsevиv.vinogradova— флагить пользователю, не разруливать самостоятельно.
Контакты команды
- Дмитрий Зайцев (
d.zaitsev, d.zaitsev@unavlab.com) — член командыmembers, write-доступ. - Виктория Виноградова (
v.vinogradova, v.vinogradova@unavlab.com) — член командыmembers, write-доступ. - Артур (
creator) — owner организацииucnlmarket, admin.