| name | reconcile |
| description | Tripwire check for multi-session drift. Scans state files, recent commits, and file conflicts caused by parallel agent sessions. Run after parallel work or when something feels off. |
/reconcile — Multi-Session Drift Check
When multiple agent sessions run in parallel (especially with worktrees), files drift out
of sync. This skill scans for inconsistencies and proposes fixes.
Invocation: deliberately model-invocable — the scan is read-only and auto-triggering
on a drift smell is the point. Anything that changes files is proposed, never applied.
Configuration
Read the optional workspace.yaml at the project root for where state lives. Below,
<state_dir> and <task_file> are its resolved values; defaults are state/ and
TODO.md. Full reference: docs/state-model.md.
When to Use
- After merging worktree branches back to the default branch
- When something "feels off" after parallel work
- After a crash where multiple sessions were open
- As a periodic sanity check during heavy parallel workflows
Instructions
0. Detect the default branch
git rev-parse --git-dir >/dev/null 2>&1 || { echo "not a git repository — nothing to reconcile"; exit 0; }
DEFAULT=$(git symbolic-ref --short refs/remotes/origin/HEAD 2>/dev/null | sed 's|^origin/||')
DEFAULT=${DEFAULT:-$(git remote show origin 2>/dev/null | sed -n 's/.*HEAD branch: //p')}
DEFAULT=${DEFAULT:-main}
1. Scan recent commit history across all branches
git log --all --oneline --since="24 hours ago" --graph
Look for:
- Multiple branches touching the same files
- Commits on branches that haven't been merged
- Conflicting changes (same file modified differently on different branches)
2. Check for file-level conflicts
For each file modified on multiple branches, diff the versions:
git diff "$DEFAULT"..<branch> -- <file>
Flag files where:
- Both branches modified the same lines (merge conflict risk)
- One branch deleted what another modified
- Timestamps or "Last Updated" fields diverged
3. Check state file consistency
For the project's state files under <state_dir> (priorities, decision log, session logs)
and any task file (<task_file>), check:
- Duplicate entries: same task or decision logged twice from different sessions
- Contradictory state: one session marked something complete, another added it as
in-progress
- Timestamp drift:
Last Updated dates that don't match the most recent actual edit
(see the chain protocol in docs/state-model.md — a stacked or spliced Last Updated
line is itself a drift signal)
- Orphaned references: sections referencing things removed in another session
4. Check for SSOT violations
If the project has single-source-of-truth rules (facts that should live in exactly one
file):
- Scan for duplicated facts across files
- Flag any case where the same information appears in multiple locations with different
values
- Check that cross-references point to files that still exist
5. Report
RECONCILE — [DATE]
BRANCHES CHECKED:
- [branch list with last commit date]
FILE CONFLICTS:
- [file] — modified on [branch1] and [branch2] — [conflict type]
STATE DRIFT:
- [issue description]
SSOT VIOLATIONS:
- [duplicated fact] — found in [file1] and [file2]
PROPOSED FIXES:
1. [fix description]
OVERALL: [CLEAN / N issues found]
6. Apply fixes (with approval only)
Present each fix individually. Wait for approval before applying. Common fixes:
- Merge the newer version of a conflicting file
- Remove duplicate entries (keep the more detailed one)
- Update timestamps to match actual last-edit dates
- Resolve SSOT violations by keeping the canonical source and updating references
Design Principles
- Read-only by default. Report, wait for approval.
- Prefer evidence of intent over recency. When two versions conflict, look at which
change the surrounding work depends on (commit messages, linked edits, whether other
files reference the new value). A stale session can easily produce the newer timestamp.
Use recency only as a tie-breaker when intent is unreadable.
- Preserve intent. Don't auto-resolve — different sessions may have had different goals.
- Fast. Git commands and file reads only. Under 30 seconds for a full scan.