Sync your .plan file with Jira Cloud
Project description
plajira
Sync your .plan file with Jira Cloud.
plajira is a command-line tool that bridges your personal .plan file with Jira, keeping your task tracking in sync without leaving your editor.
Features
- Zero intrusion: Your
.planfile is never modified by plajira - Git-aware: Only syncs items from commits that have been pushed
- Timestamp-aware: Detects conflicts when Jira was updated more recently
- Interactive: Every action requires confirmation
- Portable: Python standard library only (no external dependencies)
Installation
pip install plajira
Or install from source:
git clone https://github.com/plajira/plajira.git
cd plajira
pip install -e .
Quick Start
- Initialize plajira in a directory containing your
.planfile:
plajira init
- Copy
.env.exampleto.envand add your Jira credentials:
cp .env.example .env
# Edit .env with your Jira URL, email, and API token
- Run your first sync:
plajira sync
.plan File Format
> 2026-01-07
* foo feedback
+ implement bar
! review baz spreadsheet
? begin legend mode implementation
> 2026-01-08
* touch base on foo feedback
* implement bar
? continue legend mode implementation
~ old abandoned idea
Markers
| Marker | Meaning | Jira Status | Creates new issue? |
|---|---|---|---|
? |
In progress / planned | In Progress | Yes |
* |
Accomplished that day | Done | Yes |
! |
Idea for future work | Backlog | Yes |
+ |
Accomplished later (was ?) |
Done | No - transitions only |
~ |
Abandoned (was ?) |
Won't Do | No - transitions only |
Note: + and ~ are for transitioning items that were previously tracked as ?. They won't create new Jira issues.
Commands
plajira init
Initialize plajira configuration in the current directory.
plajira status
Preview what would happen on sync, with an interactive menu.
$ plajira status
Checking .plan for duplicate lines... OK
Parsing .plan... 34 items
Checking git status... all commits
New items:
• "research spec" [SUSPECTED DUPLICATE]
• "baz spreadsheet"
Status changes:
• CSD-42 "implement foobar": In Progress -> Done
Skipped: 3 Up to date: 28
[s] Sync [v] View skip list [l] List tracked [q] Quit
Press v to view the skip list, then u to unskip items interactively.
plajira sync
Synchronize your .plan with Jira.
$ plajira sync
New item: "implement foobar"
[y] Create new Jira issue
[n] Not now (ask again next sync)
[d] Duplicate - link to existing item
[s] Skip (don't track in Jira)
Choice [y]: y
✓ Created CSD-72 "implement foobar"
plajira link <text> <jira-key>
Manually link a .plan line to an existing Jira issue.
$ plajira link "implement foobar" CSD-42
Fetching CSD-42... found: "Implement foobar" (In Progress)
Link "implement foobar" -> CSD-42? [y/N]: y
✓ Linked.
plajira unlink <text>
Remove tracking for a line (doesn't affect Jira).
plajira list
Show all tracked items and skip list.
plajira unskip <text>
Remove a line from the skip list.
Configuration
Configuration is stored in .plajira (YAML format). Credentials are in .env.
.env
JIRA_URL=https://your-domain.atlassian.net
JIRA_EMAIL=your-email@example.com
JIRA_TOKEN=your-api-token
Get your API token from: https://id.atlassian.com/manage-profile/security/api-tokens
.plajira
The configuration file has two sections:
- config (user-editable): Jira settings, marker mappings, keywords
- state (managed by plajira): Tracked items and skip list
Duplicate Detection
plajira automatically detects suspected duplicates using:
- Continuation keywords ("continue", "finish", etc.)
- Word overlap (≥50% of significant words)
- Fuzzy matching (Levenshtein similarity ≥60%)
When a suspected duplicate is found, you can link it to an existing item instead of creating a new Jira issue.
Conflict Resolution
If someone else updates a Jira issue after you changed your .plan, plajira detects the conflict:
⚠️ CONFLICT: "implement foo" (CSD-42)
Your .plan shows: * (Done)
Changed: 2026-01-08 14:32
Jira shows: Blocked
Changed: 2026-01-08 16:45
Jira was updated MORE RECENTLY than your .plan change.
[s] Skip this item (recommended)
[v] View Jira issue in browser
[o] Override: force .plan status to Jira (dangerous!)
Choice [s/v/o]:
Requirements
- Python 3.8+
- Git repository with a remote tracking branch
- Jira Cloud account with API access
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file plajira-0.2.0.tar.gz.
File metadata
- Download URL: plajira-0.2.0.tar.gz
- Upload date:
- Size: 37.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd69788fdf3cf93d1384303fe3e0453d2e79160273f72750263f3846bab6fe6b
|
|
| MD5 |
908c59d267e2d89e2f0b5418a6261569
|
|
| BLAKE2b-256 |
8a59c6751f9620c0ec23c45e1387be2d8ef8ce9a7a1eaf384a50ef68c5627a74
|
File details
Details for the file plajira-0.2.0-py3-none-any.whl.
File metadata
- Download URL: plajira-0.2.0-py3-none-any.whl
- Upload date:
- Size: 34.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cd7f373a6bf0e611edb577c0aa6ef9391affbc3d171fe398bb063bd821b15056
|
|
| MD5 |
65e9d278028a6ea5efd57c81601ac321
|
|
| BLAKE2b-256 |
50568143fd535e85fb9ed54d86923eee85734521ffb0e7d76876b58377deb626
|