How this skill is triggered — by the user, by Claude, or both
Slash command
/punch:sync-worklogThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Worklog-only mode. Same as `/punch:sync` but **skips issue status transitions and Jira comments**. Use this when you only want to log time.
Worklog-only mode. Same as /punch:sync but skips issue status transitions and Jira comments. Use this when you only want to log time.
For the full experience (worklogs + issue updates + comments), use /punch:sync instead.
/punch:sync-worklog today
/punch:sync-worklog this-week
/punch:sync-worklog 2026-03-10
/punch:sync-worklog 2026-03-10..2026-03-12
Trigger keywords: "워크로그만", "시간만 기록", "log time only"
Punch is tool-agnostic. It uses whatever GitLab/Jira tools are available from any source.
Actually call a read-only tool. If it returns data → [✓] ready.
GitLab — try: mcp__gitlab__*, mcp__punch-gitlab__*, user-*gitlab*, or any tool that lists commits/projects.
Jira — try: mcp__jira__*, mcp__punch-jira__*, user-Confluence-jira_*, user-*jira*, or any tool named jira_search/jira_add_worklog.
Auth error → [✗] auth failed.
Read these MCP config files (ignore errors for missing files):
| File | What to look for |
|---|---|
~/.cursor/mcp.json | Keys containing gitlab/GitLab → GitLab; jira/atlassian/Confluence → Jira |
~/.claude/mcp.json | Same patterns |
~/.claude.json | Under projects.*.mcpServers → project-scoped registrations |
If found in config but tool call failed → [~] registered, not connected.
Neither Layer 1 nor 2 → [-] missing.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Punch Sync-Worklog
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Connections:
├─ GitLab [✓] ready via Cursor plugin
└─ Jira [✓] ready via Confluence MCP
| Status | Action |
|---|---|
[✓] ready | Proceed normally |
[~] registered | Ask user to reload Cursor/restart CLI, then re-detect |
[✗] auth failed | Suggest token check |
[-] missing | Guide to /punch:setup |
Remember the detected tool names for use in subsequent steps.
Fallback for partial connectivity: If only GitLab is available, offer a "dry run" — show what would be logged without actually writing to Jira.
From the user's arguments:
today (default if empty) — today onlythis-week — Monday through todayYYYY-MM-DD — specific dateYYYY-MM-DD..YYYY-MM-DD — date rangeIMPORTANT: Always use GitLab API first. Never fall back to local git without trying the API.
git remote -v to extract a GitLab project path. This is only a hint.get_project) to get the project ID./punch:setup. Do NOT silently fall back to git log.CRITICAL: Use GitLab API (MCP tools) for ALL activity fetching. Never use git log as the primary source.
| Category | API Call | What it captures |
|---|---|---|
| Commits | list_commits (project_id, since, until, author) | Code pushed |
| MR Created | list_merge_requests (state=all, created_after) | MR preparation |
| MR Merged | list_merge_requests (state=merged, updated_after) | Final review + merge |
| Code Review | MR notes/discussions API | Reviewing others' MRs |
| Issue Activity | Events API or issue notes | Issue triage |
Only use git log if ALL GitLab API calls fail. Always show a warning:
[!] GitLab API 호출 실패 — 로컬 git log로 대체합니다.
MR, 코드 리뷰, 이슈 활동은 확인할 수 없습니다.
Show what was found and let the user choose what to include:
GitLab Activity — 2026-03-12:
├─ Commits 7 PROJ-101: fix dropdown alignment
├─ MR Created 1 !42 [PROJ-101] Dashboard widget
├─ MR Merged 1 !38 [PROJ-205] API response fix
├─ Code Review 3 Comments on !45, !47
└─ Issue Activity 2 Commented on PROJ-310
어떤 활동을 포함할까요? (기본: 전부)
Use AskUserQuestion or wait for freeform reply:
Extract keys from all selected activities:
feature/PROJ-42-user-settings → PROJ-42PROJ-101: fix layout → PROJ-101[PROJ-205] Add feature → PROJ-205Regex: [A-Z][A-Z0-9_]+-\d+
Group unrecognized activity under "Unlinked".
For each issue key, call jira_get_worklog. Flag entries where:
"Punch:" (previously synced by this plugin)Before generating worklog comments, learn from the user's existing entries.
jira_get_worklog on those to find the user's recent entries. Style Detection:
└─ 기존 워크로그에서 양식을 분석 중...
Style dimensions to detect:
| Dimension | Examples | Possible values |
|---|---|---|
| Language | "커밋 3건", "3 commits" | Korean / English / Mixed |
| Format | bullet list, free text, prefix tag | bullets / freetext / tag-prefix |
| Detail level | "작업함" vs "PROJ-101 드롭다운 정렬 수정, 반응형 처리 포함" | minimal / moderate / detailed |
| Prefix | [DEV], Punch:, none | detected prefix or none |
| Time reference | includes commit count, MR numbers, etc. | with-refs / without-refs |
style_profile object: Detected style:
Language: Korean
Format: freetext
Detail: moderate
Prefix: none
References: includes MR numbers
Example: "SVG viewport 줌/패닝 개선 및 엣지 케이스 수정"
기존 워크로그 스타일을 감지했습니다:
→ 한국어, 간결한 자유 텍스트, MR 번호 포함
이 스타일로 작성할까요? [Yes / 다른 스타일로]
"Punch: {activity summary in English}"IMPORTANT: The learned style applies to the comment field in jira_add_worklog. All other fields (time_spent, started) remain unchanged.
Per-activity defaults:
| Activity | Default Time |
|---|---|
| Commit (with interval) | Gap to next commit, capped at 2h |
| Commit (isolated) | 30m |
| MR Created | 30m |
| MR Merged | 15m |
| Code Review comment | 15m per comment |
| Issue comment | 15m |
| Issue created | 20m |
| Issue closed | 10m |
Strategies:
Show Strategy A. If user says "좀 다른데" or estimates look off, offer B or C.
CRITICAL: This is the approval gate. Do NOT call jira_add_worklog before this step.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Worklog Preview — 2026-03-12
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Entries:
├─ 1 PROJ-101 3h 45m 5 commits, MR !42
│ "Dashboard 위젯 구현 및 MR !42 머지"
│
├─ 2 PROJ-205 1h 30m 2 commits
│ "API 응답 처리 수정"
│
├─ 3 PROJ-310 15m 1 issue comment
│ "성능 튜닝 이슈 코멘트"
│
└─ 4 PROJ-415 30m 2 review comments on !45
"!45 코드 리뷰 (2건)"
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
4 entries · Total: 6h
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[!] PROJ-101: 이미 오늘 2h 워크로그 있음 (중복 가능)
이대로 기록할까요? 번호로 수정/제외 가능합니다.
Wait for user response:
NEVER call jira_add_worklog without explicit approval.
For each approved entry, call jira_add_worklog:
issue_key: the Jira issue keytime_spent: confirmed time in Jira format (3h, 1h 30m)started: target date ISO format (2026-03-12T09:00:00.000+0900)
comment: generated using the learned style from Step 7Show progress as each entry is recorded:
Recording...
├─ PROJ-101 3h 45m [✓] done
├─ PROJ-205 1h 30m [✓] done
├─ PROJ-310 15m [✓] done
└─ PROJ-415 30m [✓] done
Save a record of this sync to ~/.punch/history.json for future dedup and reporting:
{
"syncs": [
{
"date": "2026-03-12",
"synced_at": "2026-03-12T18:30:00+09:00",
"entries": [
{ "issue": "PROJ-101", "time": "3h 45m", "activities": 7 },
{ "issue": "PROJ-205", "time": "1h 30m", "activities": 2 }
],
"total": "6h",
"style_profile": { "lang": "ko", "format": "freetext", "detail": "moderate" }
}
]
}
Create ~/.punch/ directory if it doesn't exist.
On subsequent runs, check history first to detect already-synced dates and warn:
[!] 2026-03-12 은 이미 동기화되었습니다 (6h, 4 issues).
다시 동기화하면 중복 워크로그가 생길 수 있습니다.
계속할까요? [Yes / Skip / 다른 날짜로]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Punch — Complete!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Results:
├─ PROJ-101 3h 45m
├─ PROJ-205 1h 30m
├─ PROJ-310 15m
└─ PROJ-415 30m
─────────────────────
Total 6h across 4 issues
├─ Style 한국어, 자유 텍스트
└─ History ~/.punch/history.json
Tip: /punch:worklog-report today 로 확인
Punch stores user preferences in ~/.punch/prefs.json:
{
"default_strategy": "A",
"style_profile": { "lang": "ko", "format": "freetext", "detail": "moderate" },
"excluded_categories": [],
"default_projects": ["group/project-name"],
"timezone": "+09:00"
}
On first run, preferences are auto-detected. On subsequent runs, they're loaded and applied. The user can override any preference per-session.
/punch:setupnpx claudepluginhub ighost-p/punch --plugin punchTime tracking, worklogs, and time reports. TRIGGERS: 'log time', 'time spent on', 'log hours', 'log work', 'worklog', 'time tracking', 'timesheet', 'how much time', 'time logged', 'time report', 'export timesheet', 'set estimate', 'remaining estimate', 'original estimate'. Use for time-related queries and operations on issues. NOT FOR: SLA tracking (use jira-jsm), date-based issue searches (use jira-search), issue field updates unrelated to time (use jira-issue).
Manages Jira worklogs using jirac CLI: lists worklogs, adds time entries with optional comments, deletes by ID for issues. Useful for time tracking on Jira tickets.
Generates summarized weekly timesheet reports from Azure DevOps work items, rolling up hours in Feature > User Story > Task hierarchy or by date. Validates config and gathers parameters interactively.