From liferay-headless
Build the weekly Headless team demo plan by picking a current and a fallback ticket per member from Jira and producing a Slack-ready announcement.
How this skill is triggered — by the user, by Claude, or both
Slash command
/liferay-headless:demo-planThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Each Monday the daily is replaced by a team demo. Every team member shows the work they currently own (or, if it is too early, the most recent piece they wrapped up). This skill produces the weekly announcement: it queries each member's open and recently closed Jira tickets and emits a Slack-ready message that the host can paste into the team channel.
Each Monday the daily is replaced by a team demo. Every team member shows the work they currently own (or, if it is too early, the most recent piece they wrapped up). This skill produces the weekly announcement: it queries each member's open and recently closed Jira tickets and emits a Slack-ready message that the host can paste into the team channel.
Before running, read both files — they are the source of truth for who is on the team and how to call Jira:
../../rules/team.md — member roster (Jira account IDs, Slack handles, GitHub handles). The Per-Member Lookup below iterates this table; the Slack handle on each outer bullet comes verbatim from this file.../../rules/jira-rest-api.md — how to authenticate curl against the Jira Cloud REST API. All Jira queries below go through curl, never through the Atlassian MCP.For every team member, run two Jira searches in parallel:
assignee = <accountId> AND project = LPD AND statusCategory = "In Progress" ORDER BY updated DESC, top 5 results.assignee = <accountId> AND project = LPD AND statusCategory = Done ORDER BY resolved DESC, top 3 results.Pull the summary, status, issuetype, updated, and resolutiondate fields. Wrap account IDs that contain : in double quotes inside the query.
A Slack-ready message copied to the clipboard. Do not post it from the skill — the host owns the announcement. After copying, tell the caller that the clipboard holds the message and that they need to convert each @handle into a real Slack mention before sending.
The message has this exact shape:
• @<slack-handle>
◦ Current: https://liferay.atlassian.net/browse/LPD-XXXXX — <summary>
◦ Fallback: https://liferay.atlassian.net/browse/LPD-YYYYY — <summary>
Every member gets the same two-line block — no exceptions, no alternate labels.
•): one per member, in roster order. <slack-handle> is the exact value from the Member Roster table for that member's accountId — never derive it from the Jira display name.Current: line: the parent Story/Task/Bug with the most recent updated timestamp from the Current WIP query. Skip Technical Task subtasks unless they're the only signal of progress, in which case use the parent Story's URL with the subtask's summary. Deprioritize Investigate / Poshi / flaky-test tickets — surface them only when nothing more substantive is open. If the member has zero In Progress tickets, pull Current: from the Recently closed query (most recent resolved).Fallback: line: the next-most-recent parent Story/Task/Bug from the Recently closed query, skipping Technical Task duplicates and the ticket already used on the Current: line. Recently closed feature work outranks old test fixes.https://liferay.atlassian.net/browse/LPD-XXXXX), one per inner bullet. No wrapping syntax — no <url|label>, no Markdown [label](url), no angle brackets, no trailing label after the URL. Slack auto-links the bare URL on its own; adding a label produces a duplicated LPD-XXXXX|LPD-XXXXX href. Do not embed extra ticket links inside the summary either.summary, capped at 10 words. Strip ticket prefixes/labels ([ACCEPTANCE], TEST FIX |, Technical Task |, [POSHI], etc.) and any leading Investigate/Fix boilerplate before counting. No trailing punctuation, no embedded ticket links.Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub liferay-headless/liferay-headless --plugin liferay-headless