skills/jira-monitor/SKILL.md
Kanban metrics monitoring with bottleneck discovery from InsightsFactory DuckDB. Calculates CLT, Lead Time, Cycle Time, CT Tech Ready, Throughput, review queue time, Flow Efficiency, WIP, Average time in status, and Defect Containment. Extended metrics: defect velocity, time-to-fix, sprint scope change, estimate accuracy, workload balance. Detects worsening trends, finds bottlenecks, and recommends fixes. Use this skill whenever the user asks about team metrics, sprint health, flow diagnostics, Jira KPIs, "how is the team doing", "show me metrics", "daily digest", "are there any red flags", or anything related to Kanban/flow monitoring. Also trigger when user mentions "метрики", "дайджест", "как дела у команды", "алерты", "тренды", "WIP", "cycle time".
npx skillsauth add ai-mindset-org/pos-sprint jira-monitorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are the Main Agent — a Kanban coach who talks to the user and delegates heavy work to Worker Subagents. You NEVER read raw pipeline JSON yourself — always delegate to a subagent.
SCRIPTS_DIR="<base-directory-of-this-skill>/scripts"
All scripts are in scripts/ subfolder next to this SKILL.md.
On every invocation, determine which flow to follow:
Is this a new project (no DB, no config)?
YES → Onboarding Flow
NO → STEP 0: Settings Review (ALWAYS)
→ User confirms → proceed to Monitor or Discovery
→ User wants changes → apply changes, then proceed
This step runs EVERY TIME before Monitor or Discovery flows. Skip only for Onboarding (new project with no config yet).
Read flow_config.json and project_profile.json, then present to the user:
## Настройки проекта: {PROJECT}
### Маппинг статусов (flow_config.json)
| Категория | Статусы | Как влияет на метрики |
|-----------|---------|----------------------|
| **Backlog** | {список или "пусто"} | Не учитывается в CLT и CT. Задачи просто ждут. |
| **Commitment** | {список} | **Старт отсчёта CLT.** Задача "обещана" — клиент ждёт. |
| **Active** | {список} | **Старт отсчёта CT.** Активная работа. Учитывается в Flow Efficiency как полезное время. |
| **Waiting** | {список} | Задача в процессе, но **никто не работает** (очередь, ревью, блок). Учитывается в FE как потери. |
| **Done** | {список} | **Конец отсчёта CLT и CT.** Задача завершена. |
### Как считаются ключевые метрики
- **Customer Lead Time (CLT)** = от первого попадания в Commitment до Done
→ Сейчас: от "{первый commitment статус}" до "{первый done статус}"
- **Cycle Time (CT)** = от первого попадания в Active до Done
→ Сейчас: от "{первый active статус}" до "{первый done статус}"
- **Flow Efficiency (FE)** = время в Active / (Active + Waiting) × 100%
→ Active считается полезной работой, Waiting — потерями
- **WIP** = количество задач в Commitment + Active + Waiting прямо сейчас
- **Review Queue** = время в статусах Waiting, связанных с ревью
### Профиль проекта (project_profile.json)
- **Типы багов:** {bug_types}
- **Defect Containment:** pre-release = {pre_release_labels}, post-release = {post_release_labels}
- **Пороги алертов:**
- Bug ratio: yellow > {bug_ratio_yellow}%, red > {bug_ratio_red}%
- Scope change: yellow > {scope_change_yellow}%, red > {scope_change_red}%
- Estimate ratio: yellow > {estimate_ratio_yellow}x, red > {estimate_ratio_red}x
- TTF median: yellow > {ttf_median_yellow_days}d, red > {ttf_median_red_days}d
- Containment: yellow < {containment_yellow_pct}%, red < {containment_red_pct}%
---
Всё верно? Если нужно что-то поменять — скажи, я поправлю перед анализом.
Примеры что можно поменять:
- Перенести статус из Active в Waiting (или наоборот)
- Убрать статус из Backlog в Commitment (изменит CLT)
- Поменять пороги алертов (например, bug_ratio_red с 45% на 50%)
- Добавить/убрать типы багов
flow_config.json directlyproject_profile.json directlyCheck if Jira credentials exist:
# Check .env in skill directory
cat "<base-directory-of-this-skill>/.env" 2>/dev/null
If JIRA_URL and JIRA_API_TOKEN are missing, ask the user:
Для подключения к Jira мне нужны:
1. URL вашей Jira (например https://jira.company.com или https://company.atlassian.net)
2. API Token (Server/DC: Personal Access Token; Cloud: API Token из https://id.atlassian.com/manage/api-tokens)
3. Email (только для Jira Cloud)
Save to <base-directory-of-this-skill>/.env:
JIRA_URL=https://...
JIRA_API_TOKEN=...
JIRA_EMAIL=... # Cloud only
Tell user: "Загружаю данные из Jira. Это может занять несколько минут..."
Delegate to Worker Subagent with this prompt:
Run full Jira sync for project {PROJECT}.
Command:
python "{SCRIPTS_DIR}/sync.py" {PROJECT} --full --db "{DB_PATH}" --config "{CONFIG_PATH}" --no-verify-ssl
Report back: how many issues synced, any errors.
Default paths:
{INSIGHTSFACTORY_ROOT}/exports/{PROJECT}/analytics.duckdb{INSIGHTSFACTORY_ROOT}/flow_config.jsonIf project is not in flow_config.json, delegate discovery to Worker Subagent:
Run project discovery and status listing.
Commands:
python "{SCRIPTS_DIR}/discover.py" {PROJECT} --db "{DB_PATH}"
python "{SCRIPTS_DIR}/setup_config.py" {PROJECT} --db "{DB_PATH}" --config "{CONFIG_PATH}" --discover-only
Report back: all discovered statuses, issue types, labels, and their counts.
Then ask the user to categorize statuses. Present them grouped by what you infer:
Я нашёл в проекте следующие статусы. Помоги распределить их по категориям.
Вот мои предположения — поправь если что-то не так:
Бэклог (ещё не взяли в работу):
✓ Открыт (245 задач)
✓ Новый (89 задач)
Обязательство (готово к старту):
✓ К разработке (120 задач)
Активная работа:
✓ В работе (45 задач)
✓ Тестирование (30 задач)
Ожидание (ревью, блокировка):
✓ Код-Ревью (15 задач)
? Готово к тестированию (25 задач) — это очередь?
Готово:
✓ Закрыт (400 задач)
✓ Решен (150 задач)
After user confirms, generate the mapping and write to flow_config.json using setup_config.py --mapping:
python "{SCRIPTS_DIR}/setup_config.py" {PROJECT} --db "{DB_PATH}" --config "{CONFIG_PATH}" --mapping mapping.json
This is the KEY step. Ask the user about their goals — NOT about metrics.
Questions (ask 2-3, adapt based on answers):
Goal: "Какую проблему ты хочешь решить? Например:"
Context from data (if discovery found interesting signals):
Audience: "Кто будет смотреть результаты — ты один, или команда/менеджмент тоже?"
Noise filter: "На что точно НЕ стоит обращать внимание?"
Save answers to project_profile.json:
team_context.goal — primary goalteam_context.notes — additional contextteam_context.noise_filter — what to ignorethresholds — adjust based on answers (e.g., if bugs are expected, raise bug_ratio thresholds)Delegate to Worker Subagent (see Monitor Flow below), present results focused on the user's stated goal.
Triggered when:
Перед анализом — что изменилось в процессе с прошлого раза?
(например: новые участники, изменение workflow, другой ритм спринтов)
Update project_profile.json with answer.
Delegate to Worker Subagent:
Run delta discovery for project {PROJECT}.
Command:
python "{SCRIPTS_DIR}/discover.py" {PROJECT} --db "{DB_PATH}" --profile "{PROFILE_PATH}"
Report back: what changed (new statuses, types, labels, team members, distribution shifts).
If nothing changed, say "no changes".
If new statuses/types appeared, ask user about them and update flow_config.json + profile.
This is the most common flow — daily/weekly monitoring.
If user wants fresh data:
Обновить данные из Jira перед анализом?
If yes, delegate sync to Worker Subagent:
Run delta sync for project {PROJECT}.
Command:
python "{SCRIPTS_DIR}/sync.py" {PROJECT} --db "{DB_PATH}" --config "{CONFIG_PATH}" --no-verify-ssl
Report back: how many issues updated, any errors.
Delegate the FULL pipeline to a Worker Subagent with this prompt:
Run the full jira-monitor pipeline for project {PROJECT} and return a compressed analysis.
Commands:
python "{SCRIPTS_DIR}/collect.py" {PROJECT} --db "{DB_PATH}" --config "{CONFIG_PATH}" | python "{SCRIPTS_DIR}/analyze.py" | python "{SCRIPTS_DIR}/enrich.py"
The output is a large JSON. Read it and return ONLY this summary:
1. ALERTS: list all alerts with level (red/yellow), metric name, and message text
2. BOTTLENECK: stage name, score, % of cycle time, WIP count, stuck issue keys
3. SUMMARY: red_flags count, yellow_flags count, bug_ratio_pct, avg_scope_change_pct, estimate_ratio, overloaded_count
4. KEY METRICS: CLT avg/p85, CT avg/p85, FE avg, throughput last 4 weeks, WIP total, review queue avg hours
5. STUCK ISSUES: key, summary (first 50 chars), status, days_in_status, assignee — for each stuck issue
6. ENRICHMENT HIGHLIGHTS: for top 5 most critical enriched issues — key, summary, assignee, blocking links, last comment author+text (first 100 chars), top time-in-status
Be precise with numbers. Do not interpret — just compress the data.
Based on worker's compressed output, present:
## Здоровье проекта: {PROJECT}
Bottleneck: {stage} ({pct}% cycle time)
Red flags: {N} | Yellow flags: {N}
{1-2 sentence summary focused on user's goal from profile}
Какой срез хотите посмотреть подробнее?
1. Bottleneck + застрявшие задачи (кто блокирует, почему)
2. Дефекты (velocity, TTF, containment, backlog trend)
3. Спринты (scope change, планирование)
4. Оценки (accuracy by person/type, worst underestimates)
5. Нагрузка команды (часы, overload/underload)
6. Тренды метрик (CLT, CT, FE, throughput за N недель)
7. Полный отчёт (всё сразу)
For the selected slice, use the data from the worker's response. If you need more detail that wasn't in the summary, delegate another subagent call:
Read the pipeline JSON output again and extract detailed data for the "{SLICE}" slice:
{specific fields to extract depending on slice}
After presenting data, give actionable recommendations:
Always include specific issue keys and assignee names from the data.
python "{SCRIPTS_DIR}/collect.py" {PROJECT} --db "{DB_PATH}" --config "{CONFIG_PATH}" | \
python "{SCRIPTS_DIR}/analyze.py" | \
python "{SCRIPTS_DIR}/enrich.py" | \
python "{SCRIPTS_DIR}/report.py" --save "{EXPORTS_DIR}/reports/"
For InsightsFactory project, use these defaults:
{ROOT}/exports/{PROJECT}/analytics.duckdb{ROOT}/flow_config.json{ROOT}/exports/{PROJECT}/project_profile.json{ROOT}/exports/{PROJECT}/reports/{
"project": "PILOT",
"version": 1,
"updated_at": "2026-03-06T...",
"type_mapping": {
"bug_types": ["Ошибка"],
"task_types": ["Задача"],
"subtask_types": ["Подзадача"]
},
"defect_containment": {
"pre_release_labels": ["testingDONE", "stageDONE"],
"post_release_labels": ["prodDONE", "hotfix", "support"]
},
"team_context": {
"goal": "Understand bottlenecks and reduce cycle time",
"notes": "Team of 8, 2-week sprints",
"noise_filter": "Ignore epics, focus on tasks and bugs",
"process_changes": ["2026-03: switched to 2-week sprints"],
"known_bottlenecks": ["code review capacity"]
},
"thresholds": {
"bug_ratio_yellow": 30,
"bug_ratio_red": 45,
"scope_change_yellow": 20,
"scope_change_red": 40,
"estimate_ratio_yellow": 1.3,
"estimate_ratio_red": 1.8,
"ttf_median_yellow_days": 5,
"ttf_median_red_days": 10,
"overload_weekly_hours": 40,
"containment_yellow_pct": 70,
"containment_red_pct": 50
}
}
read_only=True — they NEVER modify the databasetesting
# YT Transcribe — YouTube → Whisper → Obsidian Транскрибирует YouTube-видео через mlx-whisper (Apple Silicon, Metal-native) с параллельными чанками. Fallback на openai-whisper если mlx недоступен. ## Какую боль закрывает - **Потерянный контент видео**: Посмотрел лекцию/подкаст — через неделю забыл 90%. Нет текстовой базы для поиска. - **Нет транскриптов для русского**: YouTube auto-captions для русского языка — мусор. Whisper даёт quality транскрипцию. - **Ручная обработка**: Переслушивать 2-
development
Интерактивный процесс написания текстов для вайб-маркетинга на основе Julian Shapiro framework. **Новые возможности (v2.0):** - Research & Gap Analysis (Perplexity → WebSearch fallback) - Scoring 0-5 вместо binary (Novelty + Resonance + Hook + Clarity) - AI-Slop Detection на всех этапах (10 типов patterns) - 3 варианта intro с self-scoring - Markdown export всех промежуточных результатов **Русские triggers:** "напиши пост по шапиро", "написать статью по фреймворку шапиро", "создай текст в стиле julian shapiro", "помоги написать контент по методу shapiro", "контент по julian shapiro фреймворку", "пост по julian shapiro", "напиши в стиле шапиро" **English triggers:** "write content using julian shapiro framework", "create post with shapiro method", "write article shapiro style", "help with julian shapiro writing" **Generic triggers:** "напиши статью", "помоги написать контент", "создай текст", "начать писать", "хочу написать пост", "нужна помощь с текстом", "write content", "write article", "создай контент", "придумай идею для статьи", or requests help with content creation process.
tools
# /tg-saved v2 — Telegram Saved Messages → Deep Analysis → Obsidian ## Назначение Скилл извлекает сообщения из Telegram "Избранное" (Saved Messages) за последние N дней, автоматически парсит контент всех ссылок в сообщениях (requests + BeautifulSoup, до 5000 символов на URL), затем для каждого сообщения запускает глубокий анализ через Claude CLI subprocess (модель Sonnet). Результат — подробная структурированная заметка в Obsidian `00-inbox/` с YAML frontmatter, секциями анализа, ссылками и ор
documentation
Делает LLM-выжимку из комментариев менеджеров об одном или нескольких подрядчиках. Используй этот скилл когда нужно понять что говорят менеджеры о конкретном подрядчике, или получить JSON с выжимкой для дальнейшей обработки.