From devcats-reports
Generate a monthly performance report in Russian for ONE employee from Jira (jira.devcats.kg). The employee's email and the month are given in the request in natural language, e.g. «отчёт [email protected] за февраль», «report по [email protected] за прошлый месяц», «месячный отчёт сотрудника за март 2025». Use this skill whenever the user asks for an individual / per-person monthly report, «месячный отчёт по сотруднику», «отчёт за <месяц> по <email>», or names a single email together with a month — even if they don't say the word «отчёт» explicitly. This is the INDIVIDUAL monthly report and is configured independently from the team weekly report; do not reuse the weekly roster or its rules here.
How this skill is triggered — by the user, by Claude, or both
Slash command
/devcats-reports:ai-employee-monthly-reportThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generates a factual, natural-language **monthly** report on a **single
Generates a factual, natural-language monthly report on a single employee's Jira activity, written in Russian in the first person (as if the employee is reporting on their own month). The employee is identified by an email passed in the request, and the month is given in natural language.
This skill is deliberately separate from the team weekly report. It keeps its own status mapping and its own wording rules below, so you can tune individual reports without touching the team report and vice-versa.
If the request names several people or no email at all, this is probably not the right skill — ask the user for the one email, or point them to the team report.
Follow these steps in order.
Pull the employee email straight from the request. If it is missing, ask for it — never invent one.
Resolve the month window with the helper script (run it from the skill directory). It accepts natural-language month specs and prints the exact date range as JSON:
python scripts/month_window.py "февраль"
python scripts/month_window.py "март 2025"
python scripts/month_window.py "прошлый месяц"
python scripts/month_window.py # no arg -> current month
Output fields:
start — inclusive lower bound (YYYY-MM-01).end_exclusive — exclusive upper bound for JQL. For a finished month this is
the 1st of the next month; for the current month it is tomorrow, so
the window runs from the 1st through today inclusive («до текущей даты»).end_inclusive — the last day actually covered, for display only.label — human label like «февраль 2026», for the header/intro.is_current_month — whether the month is still in progress.The month rule, restated: always from the 1st of the month at 00:00, through the last day of the month — or, if it is the current month, through today inclusive. A month name without a year means the most recent past occurrence (if the named month is later than the current month, it belongs to last year).
Issue a single jira_search with this JQL, substituting the email and the two
dates from step 1 (covers tasks, bugs, and every other issue type, filtered by
the exact workflow statuses this team uses):
assignee = "EMAIL" AND updated >= "START" AND updated < "END_EXCLUSIVE" AND status in ("Done", "To release", "to merge", "On merge", "Cancelled", "To review", "to test", "Feature test", "Ready for Testing", "Pause", "Accepted", "In Progress") ORDER BY status DESC
Set fields to: summary,status,assignee,issuetype,updated,description.
A month can hold many issues, so set limit to 50 and paginate with start_at
if total exceeds what was returned — make sure you pull the whole month.
Notes on the response shape (Jira Server/DC at jira.devcats.kg):
issues[].key, issues[].summary, issues[].description.issues[].status.name is the only grouping key — match it
case-insensitively against the status lists in step 4.issues[].status.category completely. It does not match this
team's grouping (e.g. «Ready for Testing» carries category «В работе» but is a
Completed status here). Always group by status.name, never by category.issues[].issue_type.name (e.g. «Задача», «Ошибка»/bug, «Dev Task»).If a summary is too terse to understand at all, call jira_get_issue for that
key (fields: "summary,description,issuetype,status") just to grasp the gist.
Do this only for the few issues that need it. Use the description only to
extract the essence; never copy long descriptions into the report.
Compose the report in Russian using only factual data from Jira, written from the employee's point of view (first person — «я выполнил», «реализовал», «сейчас работаю над»). Rules:
status.name. Each
section starts with its own fixed opening line, used as the heading — do
not add separate short headers like «Завершённые задачи» / «Задачи в
работе».
status.name using the lists above — never by
status.category. In particular «Ready for Testing», «to test», «To review»,
«to merge», «On merge» and «Feature test» go to Completed, even though
some carry the Jira category «В работе».By default present the finished report in the chat. Only save it to a file if the user asks for one. If the month window is the current (in-progress) month, you may note the covered period (e.g. «за период с 1 по 3 июня») so it is clear the month is not yet over.
scripts/month_window.py — resolve a natural-language month into an exact
start / end_exclusive date window.npx claudepluginhub r-mobile/claude_skill_team_report --plugin devcats-reportsProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.