Sync Downstream
SkillFiles & storageRefresh the downstream repos (beet_esp, beet_atproto) with beet's AGENTS.md marker block, skills tree and shared config files. Use after changing AGENTS.md, the skills, or rustfmt.toml.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Sync Downstream skill
What this skill tells your AI
The instructions your AI receives, as published by mrchantey/beet in .agents/skills/sync-downstream/SKILL.md and read by ahel’s review.
Beet has downstream repos (separate git repos building on beet via a path dependency). Each inherits beet's conventions rather than fracturing into its own: a verbatim copy of beet's AGENTS.md lives inside a marker block at the bottom of the downstream AGENTS.md, and beet's skills tree and shared config files are copied as-is. This skill refreshes all of that.
Downstream repos
/home/pete/me/beet_esp/home/pete/me/beet_atproto
Add new spinoffs to this list (and to the DOWNSTREAM array below) when they are created.
What is synced
rustfmt.toml: verbatim copy of beet's.AGENTS.mdinherited block: everything between the markers is replaced with beet's currentAGENTS.md(the working tree version, so in-flight edits propagate):
<!-- beet:sync:begin — beet's AGENTS.md, refreshed by the sync-downstream skill; do not hand-edit -->
<!-- beet:sync:end -->
CLAUDE.md -> AGENTS.mdsymlink..agents/skills: a mirror of beet's tree (rsync -a --delete), since the syncedAGENTS.mdpoints into it. The tree is beet-owned and clobbered on every sync; downstream-specific guidance belongs in the downstreamAGENTS.mdheader, never as a skill inside the mirrored tree.
The contract
- A downstream
AGENTS.mdis its repo-specific header followed by the synced block. Where the header conflicts with the block, the header wins; downstream deltas (target quirks, path-dep notes, test attribute spellings) belong in the header, never as edits inside the block. - Never hand-edit inside the markers; the next sync clobbers it.
- Leave all changes unstaged in every repo, including this one. Never commit.
- A downstream
AGENTS.mdmissing the markers is malformed: add the block (header first, markers at the end) rather than appending a second copy of anything.
Run it
BEET=/home/pete/me/beet
DOWNSTREAM=(/home/pete/me/beet_esp /home/pete/me/beet_atproto)
for repo in "${DOWNSTREAM[@]}"; do
cp "$BEET/rustfmt.toml" "$repo/rustfmt.toml"
awk -v src="$BEET/AGENTS.md" '
/<!-- beet:sync:begin/ { print; while ((getline line < src) > 0) print line; close(src); skip=1; next }
/<!-- beet:sync:end/ { skip=0 }
!skip { print }
' "$repo/AGENTS.md" > "$repo/AGENTS.md.tmp" && mv "$repo/AGENTS.md.tmp" "$repo/AGENTS.md"
ln -sf AGENTS.md "$repo/CLAUDE.md"
mkdir -p "$repo/.agents"
rsync -a --delete "$BEET/.agents/skills/" "$repo/.agents/skills/"
done
Afterwards spot-check one downstream repo: AGENTS.md header intact, exactly one block with beet's current text inside it, and .agents/skills matching beet's.
Candidates deliberately not synced
justfile,.cargo/config.toml,.gitignore: repo-shaped, they drift for real reasons..github/workflows/rust_ci.yml: revisit when the downstream repos gain remotes/CI.
Signals
- GitHub stars
- 134
- Forks
- 8
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
sync-downstream- Source
- github.com/mrchantey/beet