/configure:config-sync
Extract, compare, and propagate tooling config improvements across FVH repos.
When to Use This Skill
| 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 |
Context
- Workspace root:
/Users/lgates/repos/ForumViriumHelsinki - Repos: !
fd -t d -d 1 . /Users/lgates/repos/ForumViriumHelsinki --exclude .git --exclude node_modules - Current directory: !
pwd
Parameters
Parse mode and options from command arguments:
Modes
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
Options
--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 PRs
Config Categories
Tracked files fall into five sync tiers: Wholesale (copy verbatim: claude.yml, renovate.json), Parameterized (shared core + variation points), Structural (justfile recipe names), Pattern-based (Dockerfile*, by stack), and Reference (compare and report). Full file patterns, variation points, and stack detection: references/config-tiers.md — read it when classifying a file in Extract Step 3 or Apply Step 3.
Execution
Extract Mode
Goal: Scan a repo and identify improvements that could benefit other repos.
Step 1: Identify the source repo
If repo name provided, use /Users/lgates/repos/ForumViriumHelsinki/<repo-name>.
Otherwise use the current working directory (must be inside an FVH repo).
Step 2: Scan tooling files
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.yaml
Step 3: Compare against workspace patterns
For each file found:
- Wholesale tier: Hash the file content and compare against the most common version across all repos. Report if this repo has a newer/different version.
- Parameterized tier: Extract the shared core (strip known variation points) and compare structure.
- Structural tier (justfile): Check for standard recipes (
default,help,dev,build,clean,lint,format,format-check,test,pre-commit,ci). Report missing standard recipes and non-standard names (e.g.,checkinstead oflint). - Pattern-based tier: Detect tech stack, then check for best practices:
- Pinned base images (not
latest) .dockerignorepresent- Multi-stage builds
- Non-root user
- SHA-pinned GitHub Actions
- SBOM/provenance attestation
- Pinned base images (not
- Reference tier: Note divergences from the most common configuration.
Step 4: Generate extract report
Emit the report (wholesale/parameterized/structural/pattern-based sections, then "Potential Improvements to Propagate"). Template: references/report-templates.md.
Diff Mode
Goal: Compare a specific file across all FVH repos.
Step 1: Resolve file pattern
Interpret the file pattern argument:
- Full path:
.github/workflows/claude.yml - Short name:
claude.yml→ search in.github/workflows/ - Glob:
*.yml→ match all workflows
Step 2: Find the file across repos
fd -t f '<pattern>' /Users/lgates/repos/ForumViriumHelsinki --max-depth 4
Step 3: Group by content hash
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).
Step 4: Identify the "best" version
Heuristics for selecting the canonical version:
- Most common hash (majority rules)
- If tie: most recently modified
- If tie: from
infrastructurerepo (reference repo)
Step 5: Generate diff report
Report each hash group (canonical first, with repo list and differences), repos missing the file, and a recommendation. For small files (< 100 lines), show an inline unified diff between the canonical and each outlier group. Template: references/report-templates.md.
Apply Mode
Goal: Propagate a config file from source to target repos.
Step 1: Determine source
- If
--fromspecified, use that repo's version - Otherwise, run diff mode internally to find the canonical version
Step 2: Determine targets
- If
--tospecified, use those repos - If
--all, use all repos that currently have the file (excluding source) - Otherwise, ask the user which repos to target
Step 3: Determine sync strategy by tier
Wholesale: Copy file verbatim to targets.
Parameterized: Copy file but preserve known variation points:
auto-merge-image-updater.yml: preserveBRANCH_PREFIXvaluerelease-please.yml: preserve extra publish/deploy jobs
Structural (justfile): Do NOT overwrite. Instead:
- Add missing standard recipe stubs (commented templates)
- Suggest renaming non-conforming recipes
- Preserve all project-specific recipes and recipe bodies
Pattern-based: Only apply general improvements matching the target's stack:
- Pin unpinned base images
- Add missing
.dockerignore - Update SHA-pinned actions
- Do NOT change build args, multi-arch config, or app-specific steps
Reference: Show diff and ask user to confirm each change.
Step 4: Preview changes (default / --dry-run)
For each target repo, show the unified diff of what would change, plus a total. Template: references/report-templates.md.
Step 5: Execute changes (--confirm or user approval)
For each target repo:
- Create a branch:
config-sync/<filename-slug> - Copy/update the file
- Commit with conventional message:
chore: sync <filename> from <source-repo> - Push and create PR via
gh pr create
Full command sequence and the quoted-heredoc PR-body rule (never backslash-escape inside <<'EOF'): references/apply-execution.md. Report one line per repo with the PR link — template in references/report-templates.md.
Agentic Optimizations
| 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 |
Safety
- Dry-run by default:
applyonly shows diffs unless--confirmis passed or user explicitly approves - Never overwrites justfile recipe bodies: Only adds stubs and suggests renames
- Stack-aware Dockerfile sync: Only applies improvements matching the target's tech stack
- Preserves parameterized variation points: Known customizations are not overwritten
See Also
/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 repo
Scan to join WeChat group