configure-plugin/skills/config-sync/SKILL.md
Config sync across FVH repos: extract, diff, propagate tooling improvements. Use when syncing workflows or configs across multiple repos.
npx skillsauth add laurigates/claude-plugins config-syncInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Extract, compare, and propagate tooling config improvements across FVH repos.
| Use this skill when... | Use another approach when... |
|------------------------|------------------------------|
| Comparing a workflow/config across all FVH repos | Configuring a single repo's workflow from scratch — use /configure:workflows |
| Propagating an improvement from one repo to many | Debugging a failing CI run — use github-actions-inspection |
| Identifying which repos have outdated configs | Creating a reusable workflow — use /configure:reusable-workflows |
| Extracting novel patterns from a repo to share | Checking a single repo's compliance — use /configure:status |
/Users/lgates/repos/ForumViriumHelsinkifd -t d -d 1 . /Users/lgates/repos/ForumViriumHelsinki --exclude .git --exclude node_modulespwdParse mode and options from command arguments:
extract [repo-name] — Identify improvements in a source repodiff <file-pattern> — Compare a specific config across all reposapply <file-pattern> [--from repo] [--to repo1,repo2,...|--all] — Propagate config to targets--from <repo> — Source repo for apply mode (default: best version detected)--to <repo1,repo2,...> — Target repos (comma-separated)--all — Target all repos that have the file--dry-run — Show what would change without creating branches/PRs (default behavior)--confirm — Actually create branches and PRsFiles tracked for cross-repo sync, organized by sync strategy:
Copy verbatim — no repo-specific variations expected.
| File Pattern | Description |
|-------------|-------------|
| .github/workflows/claude.yml | Claude Code workflow |
| renovate.json | Renovate dependency updates |
Shared structure with specific fields that vary per repo.
| File Pattern | Variation Points |
|-------------|-----------------|
| .github/workflows/auto-merge-image-updater.yml | Branch prefix pattern |
| .github/workflows/release-please.yml | Publish job, extra steps |
| .github/workflows/renovate.yml | Standalone (infrastructure) vs reusable caller (all others) |
Standard recipe/section names must conform; bodies are project-specific.
| File Pattern | Conformance Target |
|-------------|-------------------|
| justfile | Standard recipe names from justfile-template conventions |
Group by detected stack, extract general best practices only.
| File Pattern | Stack Detection |
|-------------|----------------|
| Dockerfile* | package.json → Node, pyproject.toml → Python, go.mod → Go, Cargo.toml → Rust |
| .github/workflows/container-build.yml | Same as Dockerfile |
| File Pattern | Notes |
|-------------|-------|
| release-please-config.json | Varies by project type |
| .release-please-manifest.json | Version tracking |
| skaffold.yaml | Dev environment config |
Goal: Scan a repo and identify improvements that could benefit other repos.
If repo name provided, use /Users/lgates/repos/ForumViriumHelsinki/<repo-name>.
Otherwise use the current working directory (must be inside an FVH repo).
Scan for all tracked config categories:
fd -t f -d 3 '(claude|renovate|auto-merge|release-please|container-build|Dockerfile|justfile|skaffold)' <repo-path>
Also check:
.github/workflows/*.ymljustfileDockerfile*renovate.jsonrelease-please-config.json.release-please-manifest.jsonskaffold.yamlFor each file found:
default, help, dev, build, clean, lint, format, format-check, test, pre-commit, ci). Report missing standard recipes and non-standard names (e.g., check instead of lint).latest).dockerignore presentConfig Extract Report: <repo-name>
====================================
Wholesale Configs:
claude.yml ✅ Matches canonical (sha: abc123)
renovate.json ⚠️ Differs from canonical — newer features detected
Parameterized Configs:
auto-merge-image-updater.yml ✅ Core matches, variation: branch-prefix=argocd
release-please.yml ⚠️ Has publish job (novel improvement)
Structural (Justfile):
Standard recipes: 8/11 present
Missing: format-check, pre-commit, ci
Non-standard names: none
Pattern-based (Dockerfile):
Stack: Python
✅ Pinned base image (python:3.12-slim)
✅ Multi-stage build
⚠️ Missing .dockerignore
✅ Non-root user
Potential Improvements to Propagate:
1. renovate.json — has newer schedule config
2. release-please.yml — publish job pattern
Goal: Compare a specific file across all FVH repos.
Interpret the file pattern argument:
.github/workflows/claude.ymlclaude.yml → search in .github/workflows/*.yml → match all workflowsfd -t f '<pattern>' /Users/lgates/repos/ForumViriumHelsinki --max-depth 4
For each found file, compute a content hash:
shasum -a 256 <file>
Group files by identical hash. Sort groups by size (largest first = most common version).
Heuristics for selecting the canonical version:
infrastructure repo (reference repo)Config Diff: .github/workflows/claude.yml
==========================================
Group 1 (canonical) — 18 repos [sha: abc123]:
citylogger, CycleRoutePlanner, FVHIoT-python, ...
Group 2 — 2 repos [sha: def456]:
theme-management, OLMap
Differences from canonical:
- Line 12: uses different action version
- Line 25: extra step for Node setup
Not present in (5 repos):
infrastructure, helm-webapp, terraform-modules, ...
Recommendation: Update Group 2 repos to match canonical.
For small files (< 100 lines), show an inline unified diff between the canonical and each outlier group.
Goal: Propagate a config file from source to target repos.
--from specified, use that repo's version--to specified, use those repos--all, use all repos that currently have the file (excluding source)Wholesale: Copy file verbatim to targets.
Parameterized: Copy file but preserve known variation points:
auto-merge-image-updater.yml: preserve BRANCH_PREFIX valuerelease-please.yml: preserve extra publish/deploy jobsStructural (justfile): Do NOT overwrite. Instead:
Pattern-based: Only apply general improvements matching the target's stack:
.dockerignoreReference: Show diff and ask user to confirm each change.
For each target repo, show the unified diff of what would change.
Dry Run: Apply .github/workflows/claude.yml
============================================
repo: OLMap
Status: Will update (sha def456 → abc123)
Diff:
@@ -12,1 +12,1 @@
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
repo: theme-management
Status: Will update (sha def456 → abc123)
Diff: (same as above)
Total: 2 repos would be updated
For each target repo:
config-sync/<filename-slug>chore: sync <filename> from <source-repo>gh pr createcd /Users/lgates/repos/ForumViriumHelsinki/<target-repo>
git checkout -b config-sync/claude-yml
# ... apply changes ...
git add <file>
git commit -m "chore: sync claude.yml from canonical
Co-Authored-By: Claude Opus 4.7 <[email protected]>"
git push -u origin config-sync/claude-yml
gh pr create --title "chore: sync claude.yml" --body "$(cat <<'EOF'
## Summary
- Synced `.github/workflows/claude.yml` to match canonical version
- Source: most common version across 18 repos
## Changes
<inline diff>
🤖 Generated with [Claude Code](https://claude.com/claude-code)
EOF
)"
Inside a quoted heredoc (<<'EOF'), backticks, $, and \ are already literal — never backslash-escape them. A stray \`` lands in the rendered PR body and needs a follow-up gh pr editto fix. To skip the$(cat ...)subshell entirely, feed the body straight togh` over stdin:
gh pr create --title "chore: sync claude.yml" --body-file - <<'EOF'
## Summary
- Synced `.github/workflows/claude.yml` to match canonical version
EOF
Report results:
Apply Results:
OLMap: PR #42 created — https://github.com/ForumViriumHelsinki/OLMap/pull/42
theme-management: PR #15 created — https://github.com/ForumViriumHelsinki/theme-management/pull/15
| Context | Command |
|---------|---------|
| Quick workflow comparison | /configure:config-sync diff claude.yml |
| Find improvements in a repo | /configure:config-sync extract theme-management |
| Propagate renovate config | /configure:config-sync apply renovate.json --from infrastructure --all |
| Preview changes only | /configure:config-sync apply claude.yml --all (dry-run is default) |
| Create PRs | /configure:config-sync apply claude.yml --all --confirm |
apply only shows diffs unless --confirm is passed or user explicitly approves/configure:workflows — Single-repo workflow compliance/configure:reusable-workflows — Install reusable workflow patterns/configure:justfile — Single-repo justfile compliance/configure:dockerfile — Single-repo Dockerfile compliance/configure:all — Run all compliance checks on current repotools
Scaffold a new ComfyUI custom-node repo (pyproject, CI, release-please, vitest+pytest, JS extension skeleton) in the picker/gesture vein. Use when bootstrapping or init-ing a comfyui node pack.
tools
Orchestrate a ComfyUI node pack from idea to registry: scaffold, create + seed the repo, open the gitops adoption PR. Use when releasing or spinning up a new comfyui node pack.
testing
macOS EndpointSecurity/EDR high CPU & battery drain. Use when Kandji ESF / XProtect pegs a core; trace the exec storm via powermetrics + eslogger.
development
odiff pixel-by-pixel image diffing. Use when comparing screenshots, detecting visual regressions, diffing before/after PNGs, asserting golden images.