| name | sync-wikis |
| description | Sync local customizations between scaffold and sibling wiki instances — either direction. For upstream updates from GitHub, use the upgrade skill instead. |
Sync Wikis (local)
Two directions of sync exist in wikibones:
| Direction | Skill | When to use |
|---|
| Upstream → local | upgrade | Pull latest wikibones from GitHub into this wiki |
| Local ↔ siblings | sync-wikis (this skill) | Sync customizations between scaffold and sibling wikis — either direction |
Use this skill when you've improved the scaffold or a sibling wiki — tweaked a skill, updated shared CLAUDE.md sections, fixed AGENTS.md wording — and want those changes to propagate without touching each wiki manually. Works both ways: scaffold → siblings, and sibling → scaffold.
Scope
- Canonical home: the scaffold repo (wikibones)
- Peers: sibling directories in the same parent folder that look like wiki instances (
CLAUDE.md, AGENTS.md, raw/, wiki/, .claude/skills/)
- Direction: run from the scaffold to push out, or run from a sibling to pull a good change back into the scaffold first, then push from there.
What not to overwrite
CLAUDE.md scope body text — domain-specific, always preserve.
CLAUDE.md domain concept lists under Acronyms & Concepts.
- Target-only custom skills (e.g.
import-readwise) — keep them.
raw/ and wiki/ content — never touch.
- Existing
MANIFEST.md statuses in target wikis.
Step 1 — discover targets
SCAFFOLD_DIR="$PWD"
PARENT_DIR="$(dirname "$SCAFFOLD_DIR")"
for d in "$PARENT_DIR"/*; do
[ -d "$d" ] || continue
[ "$d" = "$SCAFFOLD_DIR" ] && continue
if [ -f "$d/CLAUDE.md" ] && [ -f "$d/AGENTS.md" ] && [ -d "$d/raw" ] && [ -d "$d/wiki" ] && [ -d "$d/.claude/skills" ]; then
echo "TARGET: $d"
fi
done
Read target CLAUDE.md, AGENTS.md, and skill files before editing.
Step 2 — sync skills and AGENTS.md
Safe to overwrite from scaffold
AGENTS.md structure and wording.
.claude/skills/ingest/SKILL.md
.claude/skills/digest/SKILL.md
.claude/skills/lint/SKILL.md
.claude/skills/ingest-tweets/SKILL.md
.claude/skills/sync-wikis/SKILL.md
.claude/skills/upgrade/SKILL.md
llm-wiki.md
serve.py
requirements-viewer.txt
templates/
Required adjustments per target
AGENTS.md skill catalog must reflect the skills that actually exist in that target — don't add entries for skills the target doesn't have.
- Keep target-only skills in both filesystem and AGENTS catalog.
- Do not overwrite target-customized files under
templates/ without checking the diff first.
Step 3 — CLAUDE.md shared sections
Ensure target CLAUDE.md has these scaffold-standard sections:
## Scope — preserve target-specific body text.
## Acronyms & Concepts — shared opening text; preserve any target concept list below it.
## Images — with Obsidian image-resolution block.
## Manifest — section present.
## Workflows — ingest paragraph ending with: **Mark the file as \ingested:` in MANIFEST.md.**`
Merge in shared sections; do not replace the full file.
Step 4 — MANIFEST.md
Each target wiki should have a root-level MANIFEST.md. If missing, create it and list existing raw/ files with blank status:
# MANIFEST
Ingest tracker for `raw/`. Statuses: *(blank)* = not yet ingested | `ingested:<slug>` | `skip` | `merge:<slug>`
| File | Status |
|------|--------|
Step 5 — verify
for target in <target1> <target2>; do
echo "=== $target ==="
grep -q "^## Scope" "$target/CLAUDE.md" && echo " Scope ✓" || echo " Scope ✗"
grep -q "^## Acronyms" "$target/CLAUDE.md" && echo " Acronyms ✓" || echo " Acronyms ✗"
grep -q "^## Manifest" "$target/CLAUDE.md" && echo " Manifest ✓" || echo " Manifest ✗"
grep -q "Resolving Obsidian" "$target/CLAUDE.md" && echo " Obsidian images ✓" || echo " Obsidian images ✗"
grep -q "ingested:<slug>" "$target/CLAUDE.md" && echo " Ingest workflow ✓" || echo " Ingest workflow ✗"
[ -f "$target/MANIFEST.md" ] && echo " MANIFEST.md ✓" || echo " MANIFEST.md ✗"
done