jira-monitor
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".
Best use case
jira-monitor is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
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".
Teams using jira-monitor should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/jira-monitor/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How jira-monitor Compares
| Feature / Agent | jira-monitor | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
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".
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Jira Monitor — Multi-Agent Orchestration
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 Directory
```
SCRIPTS_DIR="<base-directory-of-this-skill>/scripts"
```
All scripts are in `scripts/` subfolder next to this SKILL.md.
## Agent Roles
### Main Agent (YOU)
- Talk to user in Russian
- Make decisions about what to analyze
- Delegate script execution to Worker Subagents via the Agent tool
- Interpret compressed results and coach the user
- Save configuration files (profile, .env, flow_config)
### Worker Subagent
- Run shell scripts (sync, discover, pipeline)
- Read large JSON output (50-100KB)
- Return compressed summary (2-3KB) to Main Agent
- Never talk to user directly
## Flow Decision Tree
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
```
---
## STEP 0: Settings Review (MANDATORY before every analysis)
This step runs EVERY TIME before Monitor or Discovery flows.
Skip only for Onboarding (new project with no config yet).
### What to show
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%)
- Добавить/убрать типы багов
```
### How to handle user response
- **"Всё ок" / "Да" / "Погнали"** → proceed to Monitor Flow Step 1
- **User wants changes** → apply changes:
- For status mapping changes: update `flow_config.json` directly
- For threshold/profile changes: update `project_profile.json` directly
- Show updated table after changes
- Ask for confirmation again
- **User asks questions** → explain the impact of specific settings on metrics
### Important notes for this step
- Keep it concise — one table, not walls of text
- Highlight anything suspicious:
- Empty Backlog (all tasks count toward CLT from creation)
- Too many statuses in one category
- Duplicate-looking statuses (e.g., "Код-Ревью" and "Koд-ревью")
- Statuses that might be miscategorized (e.g., "Готово к тестированию" in Active vs Waiting)
- If user changed settings, re-read the config before proceeding to pipeline
---
## FLOW 1: Onboarding (new project)
### Step 1: Credentials
Check if Jira credentials exist:
```bash
# 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
```
### Step 2: First Sync
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:
- DB: `{INSIGHTSFACTORY_ROOT}/exports/{PROJECT}/analytics.duckdb`
- Config: `{INSIGHTSFACTORY_ROOT}/flow_config.json`
### Step 3: Status Mapping (flow_config.json)
If 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:
```bash
python "{SCRIPTS_DIR}/setup_config.py" {PROJECT} --db "{DB_PATH}" --config "{CONFIG_PATH}" --mapping mapping.json
```
### Step 4: Context Interview
This is the KEY step. Ask the user about their goals — NOT about metrics.
Questions (ask 2-3, adapt based on answers):
1. **Goal**: "Какую проблему ты хочешь решить? Например:"
- Команда не укладывается в сроки
- Много багов уходит в прод
- Спринты непредсказуемые
- Хочу понять где bottleneck
- Держать руку на пульсе
2. **Context from data** (if discovery found interesting signals):
- "Я вижу {bug_ratio}% задач — это баги. Это ожидаемо?"
- "Scope change в спринтах {scope_pct}%. Это проблема?"
- "У вас {N} типов задач. Какие из них самые важные для отслеживания?"
3. **Audience**: "Кто будет смотреть результаты — ты один, или команда/менеджмент тоже?"
4. **Noise filter**: "На что точно НЕ стоит обращать внимание?"
Save answers to `project_profile.json`:
- `team_context.goal` — primary goal
- `team_context.notes` — additional context
- `team_context.noise_filter` — what to ignore
- `thresholds` — adjust based on answers (e.g., if bugs are expected, raise bug_ratio thresholds)
### Step 5: First Analysis
Delegate to Worker Subagent (see Monitor Flow below), present results
focused on the user's stated goal.
---
## FLOW 2: Discovery (refresh)
Triggered when:
- User asks to refresh/rescan
- It's been a while since last discovery
- Delta mode shows significant changes
### Step 1: Ask what changed
```
Перед анализом — что изменилось в процессе с прошлого раза?
(например: новые участники, изменение workflow, другой ритм спринтов)
```
Update `project_profile.json` with answer.
### Step 2: Run delta discovery
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".
```
### Step 3: Update config if needed
If new statuses/types appeared, ask user about them and update flow_config.json + profile.
---
## FLOW 3: Monitor (regular analysis)
This is the most common flow — daily/weekly monitoring.
### Step 1: Optional sync
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.
```
### Step 2: Run pipeline
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.
```
### Step 3: Executive Summary (show to user)
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}
```
### Step 4: Offer slices
```
Какой срез хотите посмотреть подробнее?
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. Полный отчёт (всё сразу)
```
### Step 5: Deep Dive
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}
```
### Step 6: Coaching
After presenting data, give actionable recommendations:
- High WIP → "Лимитировать WIP. Закон Литтла: CT = WIP / Throughput"
- Rising CT → "Проверить долгие задачи, рассмотреть декомпозицию"
- Low FE → "Слишком много ожидания. Проверить очереди между этапами"
- High Review Queue → "Bottleneck в ревью. Парное ревью или WIP-лимит"
- High Bug Ratio → "{pct}% багов — проблема качества upstream. Инвестиции в превенцию"
- Rising Bug Velocity → "Приток багов > пропускная способность. Приоритизировать root cause"
- High Scope Change → "{pct}% scope change = нестабильность планирования. Защитить scope"
- Bad Estimates → "Ratio {x}x = системный bias. Калибровать по историческим данным"
- Overloaded people → "Bus factor risk. Перераспределить или нанять"
Always include specific issue keys and assignee names from the data.
### Step 7: Save report (optional)
```bash
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/"
```
---
## Default Paths
For InsightsFactory project, use these defaults:
- INSIGHTSFACTORY_ROOT: the project working directory
- DB: `{ROOT}/exports/{PROJECT}/analytics.duckdb`
- Config: `{ROOT}/flow_config.json`
- Profile: `{ROOT}/exports/{PROJECT}/project_profile.json`
- Reports: `{ROOT}/exports/{PROJECT}/reports/`
---
## project_profile.json Format
```json
{
"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
}
}
```
---
## Important Rules
- Scripts use `read_only=True` — they NEVER modify the database
- Always present in Russian
- Lead with the bottleneck, not with metrics tables
- Show numbers and deltas, not just "improved/worsened"
- For small samples (<5 issues), warn about reliability
- Comments in enrichment are in original language — interpret as-is
- NEVER read pipeline JSON yourself — always use Worker Subagent
- Focus analysis on user's stated goal from profileRelated Skills
writing-content
Интерактивный процесс написания текстов для вайб-маркетинга на основе 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.
YT Transcribe — YouTube → Whisper → Obsidian
Транскрибирует YouTube-видео через mlx-whisper (Apple Silicon, Metal-native) с параллельными чанками.
/tg-saved v2 — Telegram Saved Messages → Deep Analysis → Obsidian
## Назначение
summarize-comments
Делает LLM-выжимку из комментариев менеджеров об одном или нескольких подрядчиках. Используй этот скилл когда нужно понять что говорят менеджеры о конкретном подрядчике, или получить JSON с выжимкой для дальнейшей обработки.
skill-security
This skill activates when the user mentions "security audit", "skill audit", "проверка безопасности скилла", "аудит скилла", "skill-security", "проверить скилл", "пересобрать скилл", "rebuild skill", "security check", "dual memory audit", "credential isolation check". Also activates on /skill-security command. Use this skill when the user wants to audit, validate, or rebuild any Claude Code skill for security compliance.
session-status
Statusline shown in Claude Code UI status bar via settings.json. No action needed in responses.
session-save
Compress and save current session context for handoff to next session. Use when: (1) context pressure >50%, (2) user says "сохрани сессию", "session save", "checkpoint", (3) before ending a long productive session, (4) switching to a different task mid-session. Supports named sessions: /session-save vpn-fix
continue-session
Restore context from a named or latest session checkpoint. Use when: (1) user says "продолжи", "continue", "что было в прошлой сессии", (2) starting work after a crash or context overflow, (3) "resume", "восстанови контекст", "где я остановился". Supports named sessions: /continue vpn-fix
compress
Info-Compressor: compress text/context by 60-70% without losing meaning. Use when: (1) context pressure >50%, (2) user says "сжать", "compress", "compact", (3) need to fit more context into remaining window, (4) preparing handoff blob for next session.
seo-strategist
Strategic SEO planning and analysis toolkit for site-wide optimization, keyword research, technical SEO audits, and competitive positioning. Complements content-creator's on-page SEO with strategic planning, topic cluster architecture, and SEO roadmap generation. Use for keyword strategy, technical SEO audits, SERP analysis, site architecture planning, or when user mentions SEO strategy, keyword research, technical SEO, or search rankings.
roi-razvitie-draft
Generates a draft meeting document for the weekly "Roi Развитие" (Wednesday, product Roi Navigator). Use when the user asks for a draft for the meeting, for Wednesday's doc, for "Roi Развитие", or for the weekly team meeting agenda.
project-knowledge-base
Collects, structures and maintains a Project Knowledge Base (PKB.md) in Obsidian for a marketing agency. Aggregates data from Google Drive, Gmail, Telegram (group chat and DMs via MTProto), moo.team tasks/comments, and local Obsidian meeting transcripts. Uses async parallel collection and a two-stage LLM pipeline for init. Use when the user wants to initialize, update or enrich a project's knowledge base, mentions PKB, project knowledge base, синхронизация проекта, база знаний проекта, init_project_knowledge, update_project_knowledge, or ad_hoc_add_context.