Skip to content
cccskills
FreePublished on GitHub

diagnose

Диагностика ступени мастерства (Диагност R28, FORM.089 §6.1 v5.0) прямо в VS Code / claude.ai. До 6 вопросов, ~3 мин. Сохраняет cp-профиль в канонический журнал learning.cp_assessments — через MCP-инструмент (browser) или напрямую в Neon (VS Code). Запускай когда: пилот говорит «пройди диагностику», «какая моя ступень», «/diagnose» — или ПРОАКТИВНО когда видишь пустой cp_profile или нового пользователя без данных.

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md19.8 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

/diagnose — диагностика ступени мастерства

⚡ Алгоритм, не свободный разговор. Шаги 1-5 последовательно. Ждать ответа после каждого вопроса. Без преждевременных выводов.

Алгоритм CAT (FORM.089 §6.1 v5.0): 5 якорных вопросов + до 1 drill-down, старт со ступени 3. WP-370: cp.iwe → информационный (не блокирует ступень), cp.skl выводится из cp.rhy.

When to use

Диагностика ступени мастерства (Диагност R28, FORM.089 §6.1 v5.0) прямо в VS Code / claude.ai. До 6 вопросов, ~3 минуты. Запускай когда: пилот говорит «пройди диагностику», «какая моя ступень», «/diagnose» — или ПРОАКТИВНО когда видишь пустой cp_profile.

Контракт скилла

  • Вход: пилот вызвал /diagnose, или Claude видит пустой cp_profile.
  • Выход: cp-профиль в чате + сохранение (путь зависит от интерфейса — см. Шаг 5).
  • Время: ≤3 мин (5-6 вопросов).
  • Не делает: не даёт рекомендации по развитию (это Навигатор R27), не строит персональное руководство.

Определить интерфейс (ПЕРВЫМ действием)

Браузер (claude.ai): инструмент Bash недоступен → сохранение через learning_ctx_record_cp_assessment (канонический журнал). VS Code / локальный: Bash доступен → сохранение в Neon через psycopg2 (+ локальный fallback).

Проверка: попробовать Bash. Если недоступен — работаем в браузерном режиме.

Algorithm

Шаг 0. Проверить существующий профиль

Браузерный режим

Вызвать mcp__claude_ai_IWE__learning_ctx_get_onboarding_state (читает из того же канона learning.cp_assessments, куда пишет Шаг 5).

  • has_diagnosis: true → показать текущий cp_stage, предложить пройти заново (кнопка «Повторить»). Инструмент не отдаёт assessed_at — точный 7-дневный кулдаун (как в VS Code режиме) здесь не проверить; решение «повторять или нет» оставить пилоту.
  • --check → показать и завершить.
  • has_diagnosis: false → продолжить с Шага 1.

VS Code режим

source ~/.config/aist/env
python3 -c "
import os, json
try:
    import psycopg2
    conn = psycopg2.connect(os.environ['NEON_LEARNING_URL'])
    cur = conn.cursor()
    cur.execute('''SELECT stage, bottleneck_slot, recommended_stream, assessed_at, valid_until
                   FROM learning.cp_assessments
                   WHERE account_id = %s::uuid
                   ORDER BY assessed_at DESC LIMIT 1''',
                (os.environ['DT_USER_ID'],))
    row = cur.fetchone()
    conn.close()
    if row:
        stage, bottleneck, stream, assessed_at, valid_until = row
        print(json.dumps({'stage': stage, 'bottleneck': bottleneck, 'stream': stream,
                          'assessed_at': str(assessed_at)[:10], 'valid_until': str(valid_until)[:10]}))
    else:
        print('null')
except Exception as e:
    print(f'error: {e}')
"

Кулдаун: 7 дней. При свежем профиле — показать и спросить «Пройти заново?».

Формат вывода существующего профиля:

📊 Текущий cp-профиль (диагностика от YYYY-MM-DD)

Ступень: [название] ([N] из 5)
Приоритет роста: [слот по-русски]
Рекомендованное руководство: [SN]
Действителен до: YYYY-MM-DD

Хочешь пройти диагностику заново?

Шаг 1. Объявить диагностику

Открыть одним сообщением:

🔬 Диагностика ступени мастерства

До 5 вопросов с вариантами ответа. Занимает ~3 минуты.
Выбирайте то, что ближе всего к вашей текущей практике.

Готов? Тогда начнём.

Ждать ответа («да», «давай», «начнём» или любой другой — сигнал готовности).

Шаг 2. Фаза 1 — якорные вопросы (все 5)

Задавать по одному, ждать ответ 1-5 после каждого. Записывать в scores.

Вопрос 1 (cp.rhy):

📍 Вопрос 1 из 5

Как вы ведёте учёт времени на саморазвитие и насколько регулярный ритм?
Сколько примерно часов в неделю?

1 — Не выделяю, как пойдёт
2 — Стараюсь, но без ритма (1-2 ч/нед)
3 — Еженедельно явно (3-4 ч/нед)
4 — Ежедневная практика + трекер (5-10 ч/нед)
5 — Автоматизировано + артефакты (10+ ч/нед)

Вопрос 2 (cp.wld):

📍 Вопрос 2 из 5

Как вы принимаете важные решения?
Через интуицию, ценности или системный анализ?

1 — В основном интуитивно
2 — Пробую разные подходы, не сложилось
3 — Через сформулированные принципы / мировоззрение
4 — Системно: цели, ограничения, альтернативы
5 — Передаю свои методы и принципы другим

Вопрос 3 (cp.int):

📍 Вопрос 3 из 5

Применяете ли вы системное мышление — видите ли роли, границы,
интерфейсы, надсистемы в реальных задачах?

1 — Нет опыта
2 — Слышал(а), но не применяю
3 — Базовые различения (роль/функция/граница)
4 — Системный разбор в работе
5 — Формализую модели, учу других

Вопрос 4 (cp.agt):

📍 Вопрос 4 из 5

Насколько часто задачи за последний месяц были инициированы вами лично —
не «спустили», а вы сами увидели и взяли?

1 — Почти всё спущено сверху
2 — Иногда сам(а), редко
3 — Около половины — мои
4 — Большинство задач — моя инициатива
5 — Задаю повестку для других

Вопрос 5 (cp.iwe — информационный, не блокирует ступень):

📍 Вопрос 5 из 5

Насколько у вас настроена среда работы со знаниями —
заметки, база знаний, инструменты (VS Code + Pack + ИИ, или альтернативы)?

1 — Среды нет
2 — Простейшее (заметки в телефоне, папка в облаке)
3 — Базово настроено, пользуюсь регулярно
4 — Несколько сервисов, структура, связи, поиск
5 — Развиваю как систему — Pack/протоколы/агенты

После всех 5 вопросов: scores = {cp.rhy: X, cp.wld: X, cp.int: X, cp.agt: X, cp.iwe: X}.

WP-370: cp.skl выводится из cp.rhy (§6.1 v5.0 — ритм и мастерство коррелируют):

scores['cp.skl'] = scores['cp.rhy']

Шаг 3. Фаза 2 — drill-down (при необходимости)

MANDATORY_SLOTS = ['cp.rhy', 'cp.wld', 'cp.skl', 'cp.int', 'cp.agt'] — cp.iwe исключён.

mandatory_scores = {s: scores[s] for s in MANDATORY_SLOTS}
bottleneck_slot = min(mandatory_scores, key=mandatory_scores.get)
need_drilldown = mandatory_scores[bottleneck_slot] < 3

Если need_drilldown = True — задать один уточняющий вопрос по bottleneck:

BottleneckВопрос
cp.rhy / cp.skl«Есть ли у вас «ритуалы» начала/завершения рабочей недели? Или регулярные точки рефлексии?»<br>1-Нет ничего / 2-Иногда делаю итоги / 3-Еженедельный ритуал / 4-Структурированные ритуалы / 5-Полная ОРЗ-практика
cp.wld«Можете назвать 2-3 принципа, которые направляют ваши решения? Насколько они явные?»<br>1-Не сформулированы / 2-Смутное ощущение / 3-Могу назвать 1-2 / 4-Явные, записаны / 5-Работающая система
cp.int«Пробовали ли вы разбирать ситуацию через надсистему и подсистему? Выделять роли, функции, ограничения?»<br>1-Незнакомо / 2-Слышал(а), не применял(а) / 3-Интуитивно / 4-Осознанно / 5-Учу других
cp.agt«Берёте ли вы на себя ответственность за результат, даже если обстоятельства были неблагоприятные?»<br>1-Объясняю обстоятельствами / 2-Иногда беру / 3-Обычно беру / 4-Всегда беру / 5-Задаю стандарты

Ответ drill-down обновляет соответствующий слот в scores. Если bottleneck = cp.skl — обновить cp.rhy, и снова переопределить scores['cp.skl'] = scores['cp.rhy'].

Шаг 4. Вычислить профиль

MANDATORY_SLOTS = ['cp.rhy', 'cp.wld', 'cp.skl', 'cp.int', 'cp.agt']

vals = {s: scores.get(s, 2) for s in MANDATORY_SLOTS}
stage = min(vals.values())
bottleneck = 'none' if stage >= 4 else min(vals, key=vals.get)

if stage == 5:
    recommended_stream = 'РР'
else:
    recommended_stream = f'S{max(1, min(4, stage))}'

Ступени: 1-Случайный / 2-Практикующий / 3-Систематический / 4-Дисциплинированный / 5-Проактивный

Bottleneck по-русски:

  • cp.rhy → «регулярность и ритм занятий»
  • cp.wld → «мировоззрение и системный взгляд»
  • cp.skl → «учёт времени и собранность»
  • cp.iwe → «рабочая среда и инструменты»
  • cp.int → «системное мышление»
  • cp.agt → «агентность и инициатива»
  • 'none' → «Узких мест нет — поддерживайте темп и берите следующие ступени»

Потоки: S1-«Фундамент» / S2-«Систематизация» / S3-«Масштаб» / S4-«Передача» / РР-«Рабочее развитие»

Шаг 5. Показать результат и сохранить

Сначала показать итог в чате:

📊 Результаты диагностики

Ступень: [НАЗВАНИЕ] ([N] из 5)

[Приоритет роста: <bottleneck по-русски>]
ИЛИ
[Узких мест нет — поддерживайте темп.]

Рекомендованное руководство: [SN] — [label]
[При stage=5: «Следующая программа: Рабочее развитие (РР)»]

Профиль по слотам:
cp.rhy [N] | cp.wld [N] | cp.skl [N]
cp.iwe [N] | cp.int [N] | cp.agt [N]

(действителен 180 дней)

Затем сохранить — путь зависит от интерфейса:

Браузерный режим (claude.ai) — сохранить через learning_ctx_record_cp_assessment

Вычислить occurred_at (сейчас, ISO UTC). Сгенерировать event_id для идемпотентности: diagnose-browser-<occurred_at> (ISO-время без разделителей допустимо, важно только не повторить в рамках одной сессии).

Вызвать mcp__claude_ai_IWE__learning_ctx_record_cp_assessment (пишет в канонический журнал learning.cp_assessments, тот же, что и VS Code режим ниже — не в личный цифровой двойник):

  • event_id: <сгенерированный>
  • stage: <N>
  • cp_scores: {"cp.rhy": <N>, "cp.wld": <N>, "cp.skl": <N>, "cp.iwe": <N>, "cp.int": <N>, "cp.agt": <N>}
  • bottleneck_slot: <cp.xxx или 'none'>
  • recommended_stream: <SN или 'РР'>
  • skip_to_stage: <N>
  • questions_count: <число заданных вопросов>
  • rcs_version: v5.0
  • occurred_at: <occurred_at>
  • written_by: browser

Если вызов вернул успех → сообщить: ✅ Профиль сохранён (без упоминания «цифровой двойник» — запись идёт в общий журнал). Если ошибка → показать профиль в чате и попросить пользователя скопировать его вручную.

VS Code режим — сохранить в Neon через Bash

source ~/.config/aist/env
CP_SCORES='<JSON с финальными scores>' \
CP_Q_COUNT=<число заданных вопросов> \
python3 -c "
import os, json, datetime as dt_lib

scores_raw = os.environ['CP_SCORES']
q_count    = int(os.environ.get('CP_Q_COUNT', '5'))
account_id = os.environ.get('DT_USER_ID', '')
url        = os.environ.get('NEON_LEARNING_URL', '')

ALL_SLOTS     = ['cp.rhy', 'cp.wld', 'cp.skl', 'cp.iwe', 'cp.int', 'cp.agt']
MANDATORY     = ['cp.rhy', 'cp.wld', 'cp.skl', 'cp.int', 'cp.agt']
scores = json.loads(scores_raw)
vals   = {s: int(scores.get(s, 2)) for s in ALL_SLOTS}

# derive cp.skl from cp.rhy (FORM.089 §6.1 v5.0)
vals['cp.skl'] = vals['cp.rhy']

stage  = min(vals[s] for s in MANDATORY)
bn     = 'none' if stage >= 4 else min(MANDATORY, key=lambda s: vals[s])
stream = 'РР' if stage == 5 else 'S' + str(max(1, min(4, stage)))
valid  = dt_lib.datetime.now(dt_lib.timezone.utc) + dt_lib.timedelta(days=180)

saved = False
if url and account_id:
    try:
        import psycopg2
        conn = psycopg2.connect(url)
        cur  = conn.cursor()
        cur.execute(
            '''INSERT INTO learning.cp_assessments
               (account_id, stage, bottleneck_slot, recommended_stream, skip_to_stage,
                cp_scores, source, interface, questions_count, rcs_version, valid_until)
               VALUES (%s::uuid, %s, %s, %s, %s, %s::jsonb, %s, %s, %s, %s, %s)
               RETURNING id''',
            (account_id, stage, bn, stream, stage, json.dumps(vals),
             'self_report', 'vscode', q_count, 'v5.0', valid)
        )
        row_id = cur.fetchone()[0]
        conn.commit()
        conn.close()
        print(f'OK neon id={row_id}')
        saved = True
    except Exception as e:
        print(f'neon error: {e}')

if not saved:
    import pathlib
    d = pathlib.Path.home() / '.aist' / 'cp-assessments'
    d.mkdir(parents=True, exist_ok=True)
    path = d / (dt_lib.date.today().isoformat() + '.json')
    path.write_text(json.dumps({'account_id': account_id, 'stage': stage,
        'bottleneck_slot': bn, 'recommended_stream': stream,
        'cp_scores': vals, 'source': 'self_report', 'interface': 'vscode',
        'questions_count': q_count, 'rcs_version': 'v5.0',
        'valid_until': valid.isoformat()}, indent=2))
    print(f'saved local: {path}')
"

Если вывод содержит OK neon — профиль в Neon. Если saved local — сохранён локально.

Шаг 6. Следующий шаг

После показа результата — предложить:

Следующий шаг:
→ Навигатор, как развивать [bottleneck по-русски]? — рекомендации по росту
→ /diagnose в боте — синхронизировать профиль
→ /progress в боте — посмотреть полный профиль прогресса

Граничные случаи

СитуацияДействие
Пилот не отвечает числом 1-5Переспросить: «Выбери цифру от 1 до 5»
Пилот хочет пропустить вопросПрисвоить дефолт 2 (conservative), перейти дальше
Менее 4 mandatory-ответовПоказать «Диагностика не завершена», предложить /diagnose заново
learning_ctx_record_cp_assessment недоступенПоказать профиль в чате, попросить скопировать
psycopg2 не установлен (VS Code)Сохранить в ~/.aist/cp-assessments/YYYY-MM-DD.json
Профиль уже есть (< 7 дней)Показать и спросить: «Пройти заново?»

Проактивный триггер

Claude должен предложить /diagnose без явного запроса когда:

  1. В learning_ctx_get_onboarding_state — has_diagnosis: false или cp_stage = null
  2. В day-open IWE-данные пустые или stage = null
  3. Пилот говорит «с чего начать», «как мне развиваться», «что делать дальше» — без контекста ступени

Формулировка предложения:

Вижу, что cp-профиль не заполнен (или устарел).
Хочешь пройти диагностику ступени? ~3 мин, 5 вопросов — скажи «да» или /diagnose.
<!-- USER-SPACE --> <!-- /USER-SPACE -->

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Регистрация косяка агента в системе учёта WP-316 L1. Без LLM — детерминированный скрипт без WP Gate.

The English summary is being prepared. Showing the original description.

TserenTserenov/FMT-exocortex-template63Updated Oct 23, 2026

Разбор extraction-reports со status pending-review — решение R15 (accept/reject/defer) ЖИВЫМ ПИЛОТОМ, запись в Pack, обновление статуса, коммит. Вызывать при Close при наличии N>0 pending-review отчётов.

The English summary is being prepared. Showing the original description.

TserenTserenov/FMT-exocortex-template63Updated Oct 23, 2026

Оценка архитектурного решения по 7 характеристикам ЭМОГССБ (v3.1 — фильтр допуска, атрибут-сценарии, совет затронутых сторон; профиль без агрегатного балла, conjunctive screening). Используй когда пользователь предлагает архитектурное решение, новый инструмент или системное изменение.

The English summary is being prepared. Showing the original description.

TserenTserenov/FMT-exocortex-template63Updated Oct 23, 2026

Classifies raw pilot request → structured JSON {task_type, class, artifact, budget_estimate, confidence, routing_tag, resolution_path, schema_version, result_type, expected_result_kind, result_kind_resolution, hypothesis_relation}. Keyword-fast (<200ms) or Haiku fallback (<60s). Does NOT create WP or call executor.

The English summary is being prepared. Showing the original description.

TserenTserenov/FMT-exocortex-template63Updated Oct 23, 2026

Audit repository documentation: detect drift between code and docs, report coverage by category. Run manually or on triggered drift critical.

The English summary is being prepared. Showing the original description.

TserenTserenov/FMT-exocortex-template63Updated Oct 23, 2026

Аудит пользовательской инсталляции IWE. Запускает scripts/iwe-audit.sh + MCP healthcheck + smoke-test ритуала через sentinel-механику (контракт dry-run-contract.md), передаёт отчёт subagent'у в роли VR.R.002 Аудитор (context isolation) → verdict ✅/⚠️/❌ по 6 компонентам (Inventory, L1 drift, {{GOVERNANCE_REPO}}, L3 customizations, MCP, ритуал). Используй после restore из бэкапа, после update.sh, или при еженедельной сверке.

The English summary is being prepared. Showing the original description.

TserenTserenov/FMT-exocortex-template63Updated Oct 23, 2026

See all skills by TserenTserenov

Report a problem with this skill