Atlassian Skill
Jira operations via acli , Confluence operations via REST API script.
- Environment Setup
1.1. Required Environment Variables
ATLASSIAN_SITE=https://your-instance.atlassian.net ATLASSIAN_EMAIL=your-email@example.com ATLASSIAN_API_TOKEN=your-api-token
1.2. API Token Creation
-
Access https://id.atlassian.com/manage-profile/security/api-tokens
-
Click "Create API token"
-
Select "Create classic API token" (NOT scoped)
Classic tokens work with both acli and REST API scripts.
- Jira Operations (acli)
2.1. Authentication
Check status
acli jira auth status
Login (if needed)
acli jira auth login
2.2. Work Items
View issue
acli jira workitem view <ISSUE-KEY>
Search issues (JQL)
acli jira workitem search --jql "assignee = currentUser() AND status = 'In Progress'"
Create issue
acli jira workitem create --project <PROJECT> --type Task --summary "Title"
Transition issue
acli jira workitem transition <ISSUE-KEY> --transition "Done"
Add comment
acli jira workitem comment add <ISSUE-KEY> --body "Comment text"
2.3. Boards and Sprints
List boards
acli jira board list
List sprints
acli jira sprint list --board <BOARD-ID>
2.4. Common JQL Patterns
Recently updated (last 7 days)
updated >= -7d AND assignee = currentUser()
In progress issues
status = "In Progress" AND project = <PROJECT>
Created this week
created >= startOfWeek() AND project = <PROJECT>
2.5. Date Range Search
Today's activities
acli jira workitem search
--jql "updated >= startOfDay() AND (assignee = currentUser() OR reporter = currentUser()) ORDER BY updated DESC"
--fields "key,summary,status"
Specific date range (YYYY-MM-DD)
acli jira workitem search
--jql "updated >= '2026-01-20' AND updated < '2026-01-21' AND (assignee = currentUser() OR reporter = currentUser()) ORDER BY updated DESC"
--fields "key,summary,status"
Relative days
acli jira workitem search
--jql "updated >= -7d AND assignee = currentUser() ORDER BY updated DESC"
--fields "key,summary,status"
JQL date functions:
Function Description
startOfDay() Today 00:00
startOfWeek() This week's Monday
-1d, -7d Relative days
'YYYY-MM-DD' Specific date
2.6. REST API via curl (acli fallback)
Use when acli is unavailable.
Get project issue types
Find valid issue type IDs for a project (required before creating issues)
curl -s "$ATLASSIAN_SITE/rest/api/3/issue/createmeta?projectKeys=<PROJECT>&expand=projects.issuetypes"
-u "$ATLASSIAN_EMAIL:$ATLASSIAN_API_TOKEN"
| python3 -c "import sys,json; data=json.load(sys.stdin); proj=data['projects'][0]; [print(f'{x["name"]} — {x["id"]} — subtask:{x.get("subtask","?")}') for x in proj['issuetypes']]"
Create subtask under a parent issue
issuetype id: use the subtask id from the project's issuetypes (e.g., 10003 for USDT project)
curl -s -X POST "$ATLASSIAN_SITE/rest/api/3/issue"
-u "$ATLASSIAN_EMAIL:$ATLASSIAN_API_TOKEN"
-H "Content-Type: application/json"
-d '{
"fields": {
"project": {"key": "<PROJECT>"},
"issuetype": {"id": "<SUBTASK_TYPE_ID>"},
"parent": {"key": "<PARENT-ISSUE-KEY>"},
"summary": "Subtask title"
}
}'
Response: {"id":"...","key":"<PROJECT>-NNN","self":"..."}
Search issues (JQL via POST)
curl -s -X POST "$ATLASSIAN_SITE/rest/api/3/search/jql"
-u "$ATLASSIAN_EMAIL:$ATLASSIAN_API_TOKEN"
-H "Content-Type: application/json"
-d '{"jql": "assignee = currentUser() AND status = "In Progress"", "fields": ["key","summary","status"]}'
View issue
curl -s "$ATLASSIAN_SITE/rest/api/3/issue/<ISSUE-KEY>"
-u "$ATLASSIAN_EMAIL:$ATLASSIAN_API_TOKEN" | python3 -m json.tool
- Confluence Operations (Script)
3.1. Convert Page to Markdown
uvx --with requests --with beautifulsoup4 --with html2text
python ~/ghq/github.com/i9wa4/dotfiles/agents/skills/atlassian/scripts/confluence-to-md.py <confluence_url>
Output: ~/Downloads/{timestamp}-confluence-{title}.md
3.2. URL Format
https://your-instance.atlassian.net/wiki/spaces/SPACE/pages/123456789/Page+Title
3.3. Features
-
Preserves bullet list structure
-
Converts draw.io diagrams to full URL
-
Maintains code blocks
-
Aligns table columns