From vault-cli
Synchronize task progress documentation from completed work in this conversation — daily note, task pages, PR + Jira links (gracefully)
How this command is triggered — by the user, by Claude, or both
Slash command
/vault-cli:sync-progressThis command is limited to the following tools:
The summary Claude sees in its command listing — used to decide when to auto-load this command
Synchronize progress documentation based on completed work in the conversation. Updates the daily note, task/goal pages, and (if integrations are available) records the matching PR and transitions Jira. This command **must stay inline** — it analyzes the parent conversation for completion signals; a sub-agent cannot see the conversation. ## Core principle From the Document-Driven Workflow: *update documents during work, not after*. This command automates that "update during work" step to prevent context loss across compactions. ## Runtime detection If any integration is absent, skip ...
Synchronize progress documentation based on completed work in the conversation. Updates the daily note, task/goal pages, and (if integrations are available) records the matching PR and transitions Jira.
This command must stay inline — it analyzes the parent conversation for completion signals; a sub-agent cannot see the conversation.
From the Document-Driven Workflow: update documents during work, not after. This command automates that "update during work" step to prevent context loss across compactions.
GH_AVAILABLE = `command -v gh` exits 0
JIRA_MCP_AVAILABLE = mcp__atlassian__getJiraIssue tool present
JIRA_CLOUD_ID = first id returned from mcp__atlassian__getAccessibleAtlassianResources (cached for session)
If any integration is absent, skip its section silently — never error.
Find the active vault:
vault-cli config list --output json
Match cwd against each path. If cwd is inside a vault → strong signal. Else scan the conversation for vault-tracked work ([[Task]] / [[Goal]] wikilinks, daily-note-shaped completions). If neither: ❌ No vault context detected. Run from a vault dir or describe vault-tracked work. and STOP.
Use daily_dir, tasks_dir, goals_dir from the matched vault.
Detect completion phrases:
Implicit indicators:
Extract from the conversation:
If NO completion detected, check whether a PR was created (Phase 3.3 detection rules):
No task completion or PR detected. Use /update instead for in-progress work. and STOP.File: {daily_dir}/YYYY-MM-DD.md. Add to ## What happened today:
### {Task Name} — Done ✅
**{1-2 sentence summary}**
**Key results:**
- {result 1}
- {result 2}
**Files updated:**
- [[File 1]] — {what changed}
**Decisions:**
- {key decision if any}
Rules:
### (h3); ## is reserved for the day's top-level structureOnly update if the conversation explicitly references a [[Task]] or [[Goal]]. Find or create ## Results / ## Progress:
### Results (YYYY-MM-DD)
{summary of findings/metrics}
Detect PRs:
gh pr create output containing https://github.com/<org>/<repo>/pull/<N>https://github.com/.../pull/\d+ URL referenced as "the PR" / "opened PR" / "created PR"gh pr view / gh pr list output the user acted onFor each detected PR:
## Pull Requests section on the task page (above ## Results if present, else near top)- [<org>/<repo>#<N>](<url>) — <title> (YYYY-MM-DD)**PR:** [<org>/<repo>#<N>](<url>)Never invent PR URLs — only record ones that appear verbatim in conversation/tool output.
Detect Jira ticket refs in conversation: [A-Z]+-\d+.
For each detected ticket:
mcp__atlassian__getJiraIssue(cloudId=JIRA_CLOUD_ID, issueIdOrKey=<key>) → current status. If the ticket does not exist (404 / not accessible) → skip silently.addCommentToJiraIssue(...). Same content as Phase 3.1's daily-note section (summary + key results + decisions + PR links), as Jira markdown. Deduplicate: if the last comment on the ticket already contains the same headline summary and a timestamp within the last hour, skip — avoids double-posting on re-runs of /vault-cli:sync-progress.getTransitionsForJiraIssue(...) → find "Done" (case-insensitive)transitionJiraIssue(...) → transitionIf JIRA_MCP_AVAILABLE is false: skip silently.
For each file written in Phase 3.1–3.4, record a structured record (in memory) for Phase 5:
path — absolute file pathvault — vault name (basename of the matching vault.path from vault-cli config list)relpath — file path minus the vault path, no leading slash, no .md suffixlink — obsidian://open?vault=<vault>&file=<percent-encoded relpath>. Percent-encode every character in relpath that is NOT in the unreserved set [A-Za-z0-9-_.~]. Common cases: space → %20, / → %2F, em-dash — → %E2%80%94, + → %2B, % → %25, : → %3A, & → %26, ? → %3F, # → %23. NEVER encode the literal ? or = separators between query-string keys. The vault value follows the same rule.title — basename of the file without .mdcategory — one of daily | task | goal | runbook | doc, classified by ancestor directory:
vault.daily_dir → dailyvault.tasks_dir → taskvault.goals_dir → goal/65 Runbooks/ or /70 Runbooks/ → runbookdocsection — the h2 section name where content landed (e.g. What happened today, Pull Requests, Results); empty if the whole file is newPhase 5 reads these structured records to emit clickable links — do not skip the schema and feed Phase 5 raw paths.
Skip the user-confirmation prompt when the evidence is unambiguous; only ask when something is fuzzy.
Auto-complete by calling vault-cli task complete "{name}" directly if AND ONLY IF ALL of the following hold:
# Success Criteria (or ## Success Criteria) heading AND every checkbox between it and the next ^# heading is [x]. Zero [ ] and zero [/] in that section.grep -E '^\s*-\s+\[[ /]\]' <task-file> returns zero lines.# Results (or ## Results (YYYY-MM-DD)) section exists with non-empty content# Pull Requests section exists with at least one PR link/vault-cli:sync-progress run is itself about to add such a section (see Phase 3) AND the conversation explicitly cites a shipped artifact: a released version (vX.Y.Z), a merged/closed PR URL, a successful scenario replay, a successful integration test run, or equivalent objective shipping signalIf all 4 hold, call vault-cli task complete directly. Report it in Phase 5. Do NOT ask.
If criteria 1–4 do NOT all hold but the conversation still signals completion (e.g. all checkboxes ticked but no Success Criteria section; or verification was discussed but not documented), use AskUserQuestion:
Question: "All N/N checkboxes ticked. Mark <task> as completed?"
Options: "Yes — mark completed" | "Hold — keep as in_progress"
If "Yes" → invoke Skill: vault-cli:complete-task.
Output a concise summary. Every updated file is rendered as a clickable obsidian:// link built from the Phase 3.5 records — wikilinks aren't clickable in chat, raw paths aren't openable.
Grouping order: Daily → Task → Goal → Runbook → Doc. Omit any group with zero entries. One bullet per file.
🔄 Synced progress for {Task / PR-only / multiple}
Updated:
- Daily: [{title}]({link})
- Task: [{title}]({link}) — {section}
- Goal: [{title}]({link}) — {section}
- Runbook: [{title}]({link}) — {section}
- Doc: [{title}]({link}) — {section}
PRs: [<org>/<repo>#<N>](<url>) ← only if any
Jira: <KEY> → Done ← only if any
Decisions: {if any} ← only if any
Completed: [{title}]({link}) ← only if Phase 4 auto-completed or user said Yes
Rules:
link from Phase 3.5 — do NOT hand-roll obsidian:// URLs in Phase 5— {section} if section is emptyWorked example:
🔄 Synced progress for Reclaim Disk Space on nuke-k3s-dev-0
Updated:
- Daily: [2026-05-24](obsidian://open?vault=Personal&file=60%20Periodic%20Notes%2FDaily%2F2026-05-24)
- Task: [Reclaim Disk Space on nuke-k3s-dev-0 — MT5 Bases Cache + BoltDB Growth 2026-05](obsidian://open?vault=Personal&file=24%20Tasks%2FReclaim%20Disk%20Space%20on%20nuke-k3s-dev-0%20%E2%80%94%20MT5%20Bases%20Cache%20%2B%20BoltDB%20Growth%202026-05) — Verification
- Goal: [Reduce Trading BoltDB Disk Footprint by 40%](obsidian://open?vault=Personal&file=23%20Goals%2FReduce%20Trading%20BoltDB%20Disk%20Footprint%20by%2040%25) — Tasks
- Runbook: [DiskOutOfSpace Nuke Host Volume Expansion](obsidian://open?vault=Personal&file=65%20Runbooks%2FDiskOutOfSpace%20Nuke%20Host%20Volume%20Expansion) — Expansion History
Completed: [Reclaim Disk Space on nuke-k3s-dev-0 — MT5 Bases Cache + BoltDB Growth 2026-05](obsidian://open?vault=Personal&file=24%20Tasks%2FReclaim%20Disk%20Space%20on%20nuke-k3s-dev-0%20%E2%80%94%20MT5%20Bases%20Cache%20%2B%20BoltDB%20Growth%202026-05)
If the Completed: task is already listed under Task: above, omit the Completed: line to avoid duplicate links — the report is for at-a-glance; the auto-complete is implied by Phase 4's separate console output.
If a task was completed in Phase 4 (auto via 4a OR confirmed via 4b), append the state-closer panel below the Phase 5 report — exactly this shape, verbatim, no rewording:
⚪ DONE
👤 You: approve: /vault-cli:session-close
⏰ Next: your reply
Why this closer is the only correct one here:
/vault-cli:next-task here. That command exists for the orchestrator (or the user opening a new session); it is not a follow-up to /vault-cli:sync-progress.Skip the closer entirely when Phase 4 did NOT complete a task — i.e. PR-only sync, progress-only sync, or any path where the active task is still in_progress. In those cases the session continues on the same task; emitting ⚪ DONE would be wrong.
npx claudepluginhub bborbe/vault-cli --plugin vault-cli/sync-progressAnalyzes git diff of manual changes, updates PLAN.md phases and WORKLOG.md entries to sync project state, and reports progress summary.