/$$                 /$$       /$$
          | $$                | $$      | $$
  /$$$$$$$| $$   /$$ /$$   /$$| $$  /$$$$$$$
 /$$_____/| $$  /$$/| $$  | $$| $$ /$$__  $$
|  $$$$$$ | $$$$$$/ | $$  | $$| $$| $$  | $$
 \____  $$| $$_  $$ | $$  | $$| $$| $$  | $$
 /$$$$$$$/| $$ \  $$|  $$$$$$/| $$|  $$$$$$$
|_______/ |__/  \__/ \______/ |__/ \_______/
Skuld — WakaTime + Git → Jira worklogs
- Matches WakaTime branch names to Jira keys (e.g., SOT‑691)
- Filters to issues assigned to you (Jira /myself)
- Adds only the delta (WakaTime − already logged by you)
- Ticket status: auto‑transitions "To Do/Todo" → "In Progress" on upload and notes the change
- Posts a worklog with a [SKULD] header. Separate issue comments are disabled by default and can be enabled via config.
- Idempotent: won’t double‑post the same (issue, window, delta)
- Choose one method per machine to avoid PATH conflicts.
- macOS: use Homebrew.
- Linux: use npm.
 
- brew tap imprisonedmind/skuld
- brew install skuld
- Upgrade later with: brew update && brew upgrade skuld
Note on taps:
- brew tap imprisonedmind/skuld maps to the GitHub repo imprisonedmind/homebrew-skuld. Homebrew taps are separate repositories rooted at Formula/ and cannot point to a subdirectory inside another repo.
- The file skuld-cli/Formula/skuld.rb in this repo is a scaffold used for development/examples only; Homebrew does not use it. The actual tap formula lives in the homebrew-skuld repository.
- Prereqs: Node.js/npm and Python 3 available in your PATH.
- Global install:
- npm install -g skuld-cli
 
- Verify:
- skuld (shows a concise usage guide) or skuld --help
- The Node shim will try python3 (then python) and sets PYTHONPATH automatically.
 
- Configure your credentials:
- skuld start
- Provide Jira site/email/token and WakaTime API key (auto‑discovered from ~/.wakatime.cfg when possible).
 
- Map each repo → WakaTime project (required for sync):
- From inside the repo you will sync: skuld add
- This stores a per‑repo mapping in ~/.skuld.yaml and is required so sync only uses time from the current repo’s WakaTime project.
 
- The commands are the same for Homebrew and npm installs; both provide a skuld binary on PATH.
- Run with no args for a quick guide: skuld
- Preview (no writes):
- Run inside the repo: skuld sync --test (uses the window since your last successful sync) or specify a period like week.
- If the repo is not mapped yet, the command exits and prompts you to run skuld add here first.
- Also supports today and yesterday.
 
- Upload (writes to Jira):
- skuld sync
- By default, syncs everything since your last successful sync; you can also run skuld sync week or skuld sync today.
- Only posts when there’s time to add; adds a worklog. Issue comments are optional (see Configuration).
 
- 
Purpose: sometimes you create and work on a Git branch before a Jira ticket exists. Use Skuld to map branches to Jira keys after the fact so that time on those branches is correctly attributed during syncs. 
- 
List branches and mappings - skuld branches --list (run inside the repo or pass --project /path/to/repo)
- Shows recent WakaTime branches for this repo’s mapped WakaTime project (last 7 days by default) plus any already‑mapped branches.
- For longer history: skuld branches --list --days 30
 
- 
Interactive mapping - skuld branches --interactive
- Pick a branch from the list and enter a Jira key (e.g., SOT-728). Mapping is saved to ~/.skuld.yaml under this repo.
 
- 
Direct set/unset - Set: skuld branches --set "feature/my-branch" ABC-123
- Unset: skuld branches --unset "feature/my-branch"
 
- 
Where it’s stored - In ~/.skuld.yaml:
projects: "/absolute/path/to/repo": wakatimeProject: your-wakatime-project branchIssues: feature/my-branch: ABC-123
 
- In ~/.skuld.yaml:
- 
How sync uses it - During allocation, if a WakaTime branch name does not contain a Jira key, Skuld will use your branchIssues mapping to attribute time to the specified Jira issue.
 
Worklog Preview (dry-run)
Period: 2025-10-15T09:00:00 → 2025-10-15T17:30:00
-----------------------------------------------------------------------------------------
Issue: SOT-691
Name:  Use real data from mongoDB
Time to add:  1h 26m 28s
Total Time: 1h 26m 28s
Comment:
  [SKULD] - Adding `1h 26m 28s` on `15/10/25` at `1:28 PM`
  - SOT-691 Use real data from mongoDB
-----------------------------------------------------------------------------------------
The comment shown is attached to the worklog itself. Separate issue comments are disabled by default.
- Attribution: WakaTime per‑branch seconds (Summaries API) → branch names with issue keys.
- Ownership: Jira /rest/api/3/myself, then local filter of issue assignee by your account.
- Delta: For each issue and period: max(0, WakaTimeSeconds − YourLoggedSecondsInWindow).
- Uploads: Worklog with [SKULD] ADF comment; optional separate issue comment (disabled by default); idempotent.
Skuld reads ~/.skuld.yaml and backs it up to ~/.skuld.yaml.bak on changes. Minimal example:
jira:
  site: https://your-org.atlassian.net
  email: [email protected]
  apiToken: YOUR_JIRA_API_TOKEN
regex:
  issueKey: "[A-Z][A-Z0-9]+-\\d+"
wakatime:
  apiKey: YOUR_WAKATIME_API_KEY
projects:
  "/absolute/path/to/your/repo":
    wakatimeProject: your-wakatime-project
state:
  path: ~/.local/share/skuld/state.json
comment:
  # When true, also post a separate Jira issue comment mirroring the worklog text
  issueCommentsEnabled: false
# Branch mapping (optional)
projects:
  "/absolute/path/to/repo":
    wakatimeProject: your-wakatime-project
    branchIssues:
      feature/my-branch: ABC-123
MIT — see skuld-cli/LICENSE.
.png)
 7 hours ago
                                1
                        7 hours ago
                                1
                     
  


