Skip to content
Development
Skill

/sync-team-profiles

Fetch (or refresh) registered team-profile sources — git clone on first run, shallow git fetch + reset on subsequent runs — and register discovered profiles under a namespace. TRIGGER when the user says "sync team profiles", "pull the latest team profiles", "refresh team

From plugin
nyann
641 skills41 commands3 hooks
Install
$ npx -y skills add thettwe/nyann --skill sync-team-profiles --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/sync-team-profiles

Context preview

The summary Claude sees to decide when to auto-load this skill.

Fetch (or refresh) registered team-profile sources — git clone on first run, shallow git fetch + reset on subsequent runs — and register discovered profiles under a namespace. TRIGGER when the user says "sync team profiles", "pull the latest team profiles", "refresh team

SKILL.md

sync-team-profiles.SKILL.md
name: sync-team-profiles
description: >
  Fetch (or refresh) registered team-profile sources — git clone on
  first run, shallow git fetch + reset on subsequent runs — and
  register discovered profiles under a namespace.
  TRIGGER when the user says "sync team profiles", "pull the latest
  team profiles", "refresh team profiles", "update team profiles",
  "sync from <team-name> profile source", "fetch profiles from the
  team repo", "/nyann:sync-team-profiles".
  Do NOT trigger on "add a new team profile source" (that's
  `add-team-source` — registers without pulling). Do NOT trigger on
  "sync my branch" (that's the `sync` skill — feature-branch
  rebase/merge). Do NOT trigger on "install a profile" from a URL
  when no source is registered yet — walk the user through
  `add-team-source` first.

sync-team-profiles

Wraps `bin/sync-team-profiles.sh`. On first run it shallow-clones each registered team-profile source (`git clone --depth=1`); on subsequent runs it does a shallow fetch (`git fetch --depth=1`) and `git reset --hard FETCH_HEAD` to advance to the latest commit. Every profile under the cache is then validated against `profiles/_schema.json`, and valid profiles are registered under `<source-name>/<profile-name>`.

1. Pre-flight

  • Config at `~/.claude/nyann/config.json` must have at least one

entry in `team_profile_sources[]`. If empty, route to `add-team-source` first.

  • Uses the sync interval from each source. When the user says

"force refresh" / "ignore the interval" / "pull now", pass `--force`.

  • When the user names a specific source ("sync just the platform-

team profiles"), pass `--name <source>` so unrelated sources don't get pulled.

2. Invoke

bin/sync-team-profiles.sh \
  [--user-root <dir>] \
  [--force] \
  [--name <source>]

Network operation. Expect up to a few seconds per source. The backend is resilient — a failing source logs the error and moves on to the next.

3. Interpret the JSON summary

Top-level shape is four arrays (see `schemas/team-sync-result.schema.json`):

  • `synced[]` — sources that pulled this run. Each entry: `{name, synced_at}`.
  • `skipped[]` — sources within their interval window. Each entry:

`{name, reason: "within-interval", next_due}`. Tell the user the next-due timestamp; they can re-run with `--force` if they need to pull immediately.

  • `registered[]` — every profile that passed schema validation.

Each entry: `{source, name, namespaced, path}`. The `namespaced` field is what to use with `bootstrap-project --profile <namespaced>`.

  • `invalid[]` — anything that didn't make it through (fetch

failure, clone failure, hand-edited config with a bad ref/url, TOCTOU on the cache dir, profile that fails schema validation). Each entry: `{name|source, kind, error}` where `kind` is one of `invalid-name`, `invalid-ref`, `invalid-url`, `fetch-failed`, `clone-failed`, `toctou`, `invalid-schema`. Show these but don't treat any single one as fatal — the script logs and moves on to the next source.

4. After sync

  • Tell the user how many profiles are newly available.
  • Suggest `inspect-profile <source>/<name>` to see what a specific

team profile does.

  • Suggest `bootstrap-project --profile <source>/<name>` to apply

one to a repo.

5. When a source errors

  • `git clone` / `git fetch` failures are usually auth or network

issues and surface in `invalid[]` with `kind: clone-failed` or `fetch-failed`. The error string passes through `nyann::redact_url` before reaching the JSON, so any embedded `https://<token>@host` credentials are scrubbed — safe to relay verbatim. Don't try to auth-fix on the user's behalf.

  • Corrupted cache (`<user-root>/cache/<source>/` contains partial

data) — safe to delete the cache dir and re-run. Confirm before deleting; it's a file-system mutation.

When to hand off

  • "Add a new source" → `add-team-source`.
  • "My team profile collides with a starter profile" — by design,

user + team profiles can shadow starters. Clarify which version will win (user > team > starter) and let the user decide if the shadow is intentional.

  • "Drift detection: is my cached team profile out of sync with the

remote?" → that's `check-team-drift` (separate backend; not in this skill's scope).

Read more
Ships withnyann

ငြမ်း is Burmese for scaffolding. Nyann is the Claude Code plugin that picks expert git defaults for your stack — branching, working hooks (Husky / pre-commit.com / lefthook), commits, releases, CI, docs — then keeps the repo on those rails through every PR

Get the whole plugin

Other skills on nyann.