agentleFS
bks-labbks-lab/open-bridge/skills/tracker-sync/SKILL.md

tracker-sync

Skill13 starsChanged 13 days agoMITView on GitHub

Reconciles Bridge tasks (STATUS.md) with GitHub Project boards: snapshots boards into work/trackers/ and reports drift (in_sync, remote_ahead, local_ahead, drift). Never writes to a board itself; approved changes go through github-projects-manager. Trigger: "/tracker-sync", "sync my tasks", "reconcile tasks", "board reconcile", "task drift".

The file

We split this skill into the rules it gives an agent

2 rules. About 0 are common, 2 are distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    before/after working a board, to see what drifted

    line 32
  2. Distinctive:

    No auto-push. All board writes go through github-projects-manager, gated.

    line 101

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Tracker-Sync

Keeps The Bridge's task state and the GitHub Project boards aligned, with a persistent local snapshot as the pivot. Three deterministic engine subcommands (scripts/tracker-sync.py — a shared repo-root utility shipped with the Bridge repo itself, not a file inside this skill's own directory) plus one gated write path.

Provider scope: GitHub Projects V2 only for now — other trackers (e.g. ADO) are readable via trackers/*.md playbooks but are not covered by snapshot/diff/push.

Model — remote-authoritative. The team works in GitHub, so the board owns shared status. The Bridge mirrors it, surfaces drift, and stages your pushes. Pull is autonomous (read-only); every cross-write is a proposal:

  • never auto-write STATUS.md (a human decides what a remote change means)
  • never auto-push to GitHub (gated, batch-confirmed, via github-projects-manager)

When to use

  • "sync my tasks", "which task is in which state"
  • "pull the boards", "snapshot the projects", "give me a board dump"
  • before/after working a board, to see what drifted
  • /briefing calls the pull side automatically (see references/workflow.md)

Subcommands (verbs)

VerbWhatGate
pullrefresh snapshots from all enabled GitHub boardsautonomous (read-only)
status / diffrender the delta table (the control surface)read-only
pushapply local_ahead rows to GitHubgated, via github-projects-manager
syncpull → diff → offer pushgated at the push step only

How to run

pull (down — autonomous)

python3 scripts/tracker-sync.py pull            # all boards from ecosystem.yaml
python3 scripts/tracker-sync.py pull --project <slug>

Writes work/trackers/github/<slug>.json + work/trackers/_index.yaml with a pulled_at stamp. Best-effort: if gh is missing/unauthed it warns and skips — never blocks. The git history of work/trackers/ IS the dated dump history.

diff (the cockpit — read-only)

python3 scripts/tracker-sync.py diff            # table
python3 scripts/tracker-sync.py diff --format json
python3 scripts/tracker-sync.py diff --exit-code   # exit 2 if actionable drift

Each row is one linked issue, classified (see references/diff-model.md). Present the table, then offer the obvious next action per class:

ClassMeansOffer
in_synclocal == boardnothing
remote_aheadboard moved past local (e.g. a teammate moved it to Done)propose STATUS.md update (gated; never auto)
local_aheadlocal moved past boardpush (gated)
state_mismatchblocked/odd divergencesurface, ask
orphan_localSTATUS links an issue not in any snapshotre-pull / fix repo / unlink
board_staleissue closed/merged but its card never moved to Donepropose board-hygiene push (card → Done), gated
orphan_remoteyour open board item linked to no taskpropose link or new task

pull fetches each repo's closed issues/PRs and stamps item.closed; in diff the issue lifecycle wins over the board Status field (a closed issue on a New card is still done). --no-issue-state skips this for a faster pull.

push (up — GATED, via github-projects-manager)

  1. python3 scripts/tracker-sync.py plan --format json → list of Status-field ops.
  2. Show the batch. For EACH operation get explicit [y/n] (or one batch [y]).
  3. For each approved op, hand off to github-projects-manager (it reads workflow/projects/<slug>.yaml for the real field IDs + exact option names and runs the gh GraphQL mutation). NEVER write the board from this script.
  4. Re-pull and re-diff to confirm the row is now in_sync. Verify-before-claim.

Boards without a workflow/projects/<slug>.yaml registry can be pulled and diffed, but push degrades: plan emits to_option: null (no field-ID mapping). Surface that honestly and offer to scaffold the registry from workflow/projects/_template.yaml rather than pushing blind.

Config

Uses the same integrations.github block as /briefing Stream B (enabled, projects: ecosystem, assignee_me). Optional per-board sync_policy: in workflow/projects/<slug>.yaml (authority, auto_pull) — see references/diff-model.md. No config = remote-authoritative default.

Hard rules

  • Remote-authoritative: GitHub wins on Status; pull proposes, never overwrites STATUS.
  • No auto-push. All board writes go through github-projects-manager, gated.
  • Snapshots are USER data (work/trackers/) — never promoted upstream.
  • The engine is the only deterministic surface; judgement (what a drift means) stays with the skill + the human.

Related

  • scripts/tracker-sync.py — the engine · tests: scripts/tests/test-tracker-sync.sh
  • references/diff-model.md — full classification + phase-bucket rules
  • references/workflow.md — pull/diff/push playbook + /briefing integration
  • skills/github-projects-manager/ — the gated write executor (push handoff)
  • protocols/standing-orders/task-sync.md — the per-task sync.github resolver
  • trackers/README.md — normalized item schema (== the snapshot format)
  • workflow/projects/<slug>.yaml — board registry (fields, state_map, sync_policy)

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.