refresh-dotfiles

Full sync of personal (yadm) and work (yadm-work) dotfiles. Pulls remote changes, commits and pushes local changes, and audits for untracked files that should be tracked. Use when the user says 'refresh yadm', 'sync dotfiles', 'dotfiles sync', or 'update dotfiles'.

6 stars

Best use case

refresh-dotfiles is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Full sync of personal (yadm) and work (yadm-work) dotfiles. Pulls remote changes, commits and pushes local changes, and audits for untracked files that should be tracked. Use when the user says 'refresh yadm', 'sync dotfiles', 'dotfiles sync', or 'update dotfiles'.

Teams using refresh-dotfiles should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/refresh-dotfiles/SKILL.md --create-dirs "https://raw.githubusercontent.com/tdhopper/dotfiles2.0/main/.claude/skills/refresh-dotfiles/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/refresh-dotfiles/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How refresh-dotfiles Compares

Feature / Agentrefresh-dotfilesStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Full sync of personal (yadm) and work (yadm-work) dotfiles. Pulls remote changes, commits and pushes local changes, and audits for untracked files that should be tracked. Use when the user says 'refresh yadm', 'sync dotfiles', 'dotfiles sync', or 'update dotfiles'.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Refresh Dotfiles

Full sync of both dotfile repositories. Run all steps in order.

## Definitions

```bash
# yadm-work is a fish function; in bash use this:
yadm-work() { git --git-dir="$HOME/.local/share/yadm-work/repo.git" --work-tree="$HOME" "$@"; }
```

- **yadm** — personal dotfiles (public GitHub)
- **yadm-work** — work dotfiles (private, employer Git host)

## Step 1: Pull both repos

```bash
yadm pull --rebase
yadm-work pull --rebase   # use the bash function above
```

If either pull has conflicts, stop and resolve them before continuing. Show the user conflicted files and help resolve.

## Step 2: Check status of both repos

```bash
yadm status
yadm-work status
```

Report:
- Modified tracked files (unstaged)
- Staged but uncommitted changes
- Commits ahead of remote (unpushed)

## Step 3: Commit and push local changes

For each repo that has uncommitted changes:

1. Show the diff to understand what changed
2. Stage modified tracked files: `yadm add -u` / `yadm-work add -u`
3. Commit with a descriptive message
4. Push to remote

Do NOT auto-add untracked files — those go through the audit in step 4.

## Step 4: Audit for untracked files

Check for dotfiles and configs that exist but aren't tracked by either repo. Focus on:

```bash
# Common locations to check
for f in \
  .claude/CLAUDE.md .claude/settings.json .claude/settings.local.json \
  .config/fish/*.fish .config/gh/config.yml .config/gh/hosts.yml \
  .gitconfig .gitconfig-work .gitconfig.local \
  .ssh/config .npmrc .ideavimrc \
; do
  [ -e "$HOME/$f" ] || continue
  in_yadm=$(cd ~ && yadm ls-files "$f" 2>/dev/null | wc -l)
  in_work=$(cd ~ && yadm-work ls-files "$f" 2>/dev/null | wc -l)
  if [ "$in_yadm" = "0" ] && [ "$in_work" = "0" ]; then
    echo "UNTRACKED: $f"
  fi
done
```

Also check for untracked skills:

```bash
cd ~ && ls -d .claude/skills/*/SKILL.md 2>/dev/null | while read f; do
  in_yadm=$(yadm ls-files "$f" 2>/dev/null | wc -l)
  in_work=$(yadm-work ls-files "$f" 2>/dev/null | wc -l)
  [ "$in_yadm" = "0" ] && [ "$in_work" = "0" ] && echo "UNTRACKED SKILL: $f"
done
```

If untracked files are found, use AskUserQuestion to ask the user where each should go:
- **yadm** — personal, public
- **yadm-work** — work-specific, private
- **Skip** — don't track
- **Delete** — remove the file

## Step 5: Final report

Show a summary:
- What was pulled (any new commits from remote?)
- What was committed and pushed
- Any new files now tracked
- Any remaining issues

## Classification guide

When deciding yadm vs yadm-work for a file:

| Signal | Repo |
|--------|------|
| References employer-specific tools, services, or internal platforms | yadm-work |
| General-purpose tool config (vim, git, fish, terminal) | yadm |
| Home network, personal projects, personal tools | yadm |
| MCP permissions for work services | yadm-work |
| Claude skills for work-specific workflows | yadm-work |

## Important

- Always run commands from `$HOME` (`cd ~`) — yadm's work tree is `$HOME` and commands behave differently from subdirectories.
- Never track files containing secrets (.env, tokens, credentials, .ssh/id_*).
- The global `.gitignore` may block some files from being added to yadm-work — use `yadm-work add -f` to force-add ignored files.
- Don't credit yourself in commits or add coauthor headers.

Related Skills

managing-dotfiles

6
from tdhopper/dotfiles2.0

Use this skill when working with personal dotfiles managed by yadm. This includes pulling remote changes, committing and pushing dotfile changes, modifying configuration files (shell, editor, terminal, git, etc.), viewing tracked files, resolving merge conflicts, and maintaining the dotfiles repository. For work dotfiles, use the managing-work-dotfiles skill instead.

stop-slop

6
from tdhopper/dotfiles2.0

Use this skill when writing or editing prose to eliminate predictable AI writing patterns. Helps make writing more direct, authentic, and human.

sonos-control

6
from tdhopper/dotfiles2.0

Control Sonos speakers on Tim's home network. Use when the user wants to (1) play, pause, or stop music on Sonos speakers, (2) change volume on speakers, (3) skip tracks, (4) check what's playing, (5) see speaker status, (6) group or ungroup speakers, (7) any Sonos or music/audio playback task involving home speakers. Triggers on "sonos", "speakers", "play music", "what's playing", "volume", "turn up", "turn down", "pause music", "stop music".

slack-message

6
from tdhopper/dotfiles2.0

Draft and send Slack messages in Tim's natural voice. Use when the user wants to (1) post an update to a channel, (2) draft a Slack message, (3) share something on Slack, (4) send a DM, (5) reply in a thread. Applies Tim's Slack writing style and prose principles automatically.

skill-creator

6
from tdhopper/dotfiles2.0

Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.

sending-to-codex

6
from tdhopper/dotfiles2.0

Delegate tasks or ask questions to OpenAI's Codex CLI from within Claude Code. Use this skill when the user says "ask codex", "send to codex", "delegate to codex", "have codex do this", "get codex's opinion", "run this in codex", or wants to offload a coding task or question to the Codex agent. Supports both fire-and-forget coding tasks (fix bugs, add features, refactor) and research questions (analyze code, explain behavior, get a second opinion).

reviewing-writing

6
from tdhopper/dotfiles2.0

Review and critique writing using Michael Nielsen's principles on craft. Analyzes text for purpose focus, brevity, danger words, opening strength, originality, reader psychology, truthfulness, and title impact. Use when the user says "review my writing", "nielsen review", "writing review", "review this writing", "critique my writing", or asks for feedback on prose quality.

reviewing-code

6
from tdhopper/dotfiles2.0

Review pull requests, branch changes, or code diffs. Triggers on "review this PR", "review my changes", "code review", "review branch", or GitHub PR URLs. Focuses on bugs, tests, complexity, and performance - not linting.

resend-email

6
from tdhopper/dotfiles2.0

Send emails via Resend.com API. Use when the user wants to (1) send an email, (2) email someone, (3) send a message to an email address, (4) send email with attachments, (5) schedule an email for later. Requires RESEND_API_KEY environment variable.

omnifocus

6
from tdhopper/dotfiles2.0

Interact with OmniFocus task manager via the command-line interface (@stephendolan/omnifocus-cli). Use when the user wants to: (1) Add tasks or projects to OmniFocus, (2) List, view, or search tasks/projects, (3) Update or complete tasks, (4) Manage inbox items, (5) Work with tags and analyze tag usage, (6) Process or organize their OmniFocus database from the command line.

omnifocus-triage

6
from tdhopper/dotfiles2.0

Interactively process OmniFocus inbox items using AskUserQuestion. Use when the user wants to (1) triage their inbox, (2) process inbox items, (3) organize their OmniFocus inbox, (4) clear out their inbox, (5) do a GTD-style inbox review. Triggers on "triage inbox", "process inbox", "organize inbox", "clear inbox", "inbox zero".

Nightshift

6
from tdhopper/dotfiles2.0

Manage and interact with Nightshift, an AI-powered development automation tool that runs coding tasks during off-hours.