jira-confluence-push
Paste into Claude Code, Claude.ai, the desktop app, or the browser extension — ⌘/Ctrl+V. ✓ Copied. Switch to Claude and paste — ⌘/Ctrl+V.
Jira & Confluence Push
Take the structured outputs of action-item-tracker and decision-log-builder and push them to your project's Jira board and Confluence space. Every action item becomes a Jira issue. Every decision log entry appends to the Confluence decision register. No copy-pasting. No lost tickets.
When this skill applies
- User has a completed action register (from
action-item-tracker) and wants to create Jira issues - User has decision log entries (from
decision-log-builder) and wants to append them to a Confluence page - User wants to do both in a single workflow
- User has an Azure DevOps project and wants work items instead of Jira issues (
--backend ado) - User wants to preview what would be created before committing (
--dry-run)
Skip when: the user only wants a local file — use action-item-tracker or decision-log-builder. Skip when environment variables are not set — surface a clear error with setup instructions rather than silently failing.
Prerequisites
Set these environment variables before running this skill. The skill will check for them at Step 1 and halt with instructions if they are missing.
Atlassian Cloud (default)
ATLASSIAN_API_TOKEN=<your-api-token>
ATLASSIAN_BASE_URL=https://<your-org>.atlassian.net
ATLASSIAN_USER_EMAIL=<your-email>
Generate your API token at: https://id.atlassian.com/manage-profile/security/api-tokens
Azure DevOps (--backend ado)
AZURE_DEVOPS_PAT=<your-personal-access-token>
AZURE_DEVOPS_ORG=https://dev.azure.com/<your-org>
AZURE_DEVOPS_PROJECT=<your-project-name>
Workflow
Step 1 — Validate environment
Check that the required environment variables are set for the chosen backend. If any are missing:
- Print a clear, specific error listing which variables are missing
- Print setup instructions (see Prerequisites above)
- Halt — do not attempt any API calls
If --dry-run is set, skip the environment check for credentials but still validate the input structure.
Step 2 — Load and validate input
Read the provided action register and/or decision log. Validate:
- Every action item has an owner name (not
[OWNER TBD]) — halt on these unless--skip-unownedis passed - Every action item has a due date (not
[DATE TBD]) — warn but proceed; Jira issues can have no due date - Every decision log entry has a
DEC-NNNID, a decision statement, and a date - The Jira project key is valid (exists in the Atlassian environment) — confirm via API if not
--dry-run
Step 3 — Create Jira issues (or ADO work items)
For each action item in the register, create a Jira issue (or Azure DevOps work item):
Jira issue mapping:
| Action register field | Jira issue field |
|---|---|
| Action description | Summary |
| Owner name | Assignee (look up by display name via REST API) |
| Due date | Due date |
| Priority | Priority (High → High; Normal → Medium) |
| Related decision DEC-NNN | Description (linked, not a formal Jira link unless link type exists) |
| Notes | Description (additional context) |
| Source segment | Labels (meeting-action, <project-slug>) |
| Sprint | Sprint field (if --sprint is provided and sprint exists in project) |
| Epic | Epic Link (if --epic is provided) |
Issue type: default Task. Override with --issue-type Story|Bug|Sub-task if needed.
API endpoint (Jira Cloud):
POST /rest/api/3/issue
Authorization: Basic base64(email:api_token)
Content-Type: application/json
After each successful create, capture the returned key (e.g., PROJ-123) and write it back to the action register as the Jira Issue field.
Azure DevOps work item mapping:
| Action register field | ADO work item field |
|---|---|
| Action description | Title |
| Owner name | Assigned To |
| Due date | Target Date |
| Priority | Priority |
| Notes | Description |
Work item type: default Task. Use the PATCH batch API to create efficiently.
Step 4 — Append to Confluence (decision log)
If decision log entries are provided and --confluence-page-id is set:
- Fetch the current page content via
GET /wiki/api/v2/pages/<id>?body-format=storage - Parse the current body to find the decision log section (look for heading "Decision Log" or "Decisions")
- Convert the markdown decision entries to Confluence storage format (XHTML)
- Append new entries to the existing table or create the table if it doesn't exist
- Update the page via
PUT /wiki/api/v2/pages/<id>with the new body and incremented version
If no --confluence-page-id is provided but --dry-run is not set, prompt the user to provide the page ID or URL. Offer to create a new page in the space if the project space key is provided.
Confluence storage format for a decision entry:
<h3>DEC-<NNN> — <Decision title></h3>
<table>
<tr><th>Field</th><th>Value</th></tr>
<tr><td>Date</td><td><YYYY-MM-DD></td></tr>
<tr><td>Status</td><td>Accepted</td></tr>
<tr><td>Decision</td><td><statement></td></tr>
<tr><td>Driver</td><td><role></td></tr>
<tr><td>Approver</td><td><role></td></tr>
<tr><td>Actions</td><td><ACT-NNN links or Jira issue keys></td></tr>
</table>
Step 5 — Append meeting notes to Confluence
If --meeting-notes @file-path is provided and --confluence-page-id is set, append the normalized meeting record as a collapsible section at the top of the Confluence page (most recent meeting first).
Step 6 — Report results
After all API calls complete, print a results summary:
Push complete — <YYYY-MM-DD HH:MM>
Jira issues created:
ACT-001 → PROJ-123 (https://<org>.atlassian.net/browse/PROJ-123)
ACT-002 → PROJ-124
ACT-003 → [SKIPPED — OWNER TBD]
Confluence updates:
Decision log → 2 entries appended to page <page-id>
Meeting notes → appended as collapsible section
Failures:
ACT-004 → [FAILED] Assignee "Jane Smith" not found in Jira — created unassigned; assign manually
Write the updated action register (with Jira issue keys filled in) to the same path as the input file, or to action-register-pushed-<YYYY-MM-DD>.md if no input file path was provided.
Dry-run mode
When --dry-run is set:
- Print every API call that would be made (method, endpoint, request body) without executing it
- Print the Confluence content that would be appended (in readable markdown, not raw storage XML)
- Print a summary of what would be created/updated
- Do not make any API calls
Error handling
| Error | Handling |
|---|---|
| 401 Unauthorized | Print token setup instructions; halt |
| 403 Forbidden | User lacks permission for the project/page; list what's needed |
| 404 Project/Page not found | Suggest checking the key/ID; offer to list available projects |
| 409 Confluence version conflict | Re-fetch the page version and retry once; if it fails again, print the content for manual paste |
| Assignee not found | Create the issue unassigned; flag in results summary for manual assignment |
| Rate limit (429) | Wait and retry with exponential back-off up to 3 attempts; report if still failing |
Reference files
reference.md— Jira REST API v3 field reference, Confluence storage format guide, ADO work item field mapping, environment variable setup for common RBA project configurations
Technical details
- Plugin
- meeting-to-action
- Author
- Dakota Smith
- Skill name
jira-confluence-push- Maturity
- experimental
- Security review
- No security review
- Owners
-
- delivery
- Argument hint
[paste action register or @file-path] [--backend jira|ado] [--project <JIRA-PROJECT-KEY>] [--confluence-page-id <id>] [--epic <EPIC-KEY>] [--dry-run]- Allowed tools
-
ReadWriteGlobWebFetch(domain:api.atlassian.com)WebFetch(domain:dev.azure.com)
- Source
plugins/meeting-to-action/skills/jira-confluence-push/SKILL.md
Edit this skill on GitHub — opens GitHub's web editor. No git knowledge needed.