Skip to content
Beta Multi-model support (OpenAI, Gemini, and more) launching soon.

jira-confluence-push

Installable Ships in meeting-to-action — or copy the raw skill below.
Open Claude.ai

Paste into Claude Code, Claude.ai, the desktop app, or the browser extension — ⌘/Ctrl+V.

ExperimentalNo security review

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:

  1. Print a clear, specific error listing which variables are missing
  2. Print setup instructions (see Prerequisites above)
  3. 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-unowned is 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-NNN ID, 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:

  1. Fetch the current page content via GET /wiki/api/v2/pages/<id>?body-format=storage
  2. Parse the current body to find the decision log section (look for heading "Decision Log" or "Decisions")
  3. Convert the markdown decision entries to Confluence storage format (XHTML)
  4. Append new entries to the existing table or create the table if it doesn't exist
  5. 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
  • Read
  • Write
  • Glob
  • WebFetch(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.