Skip to content
Agentmart
Submit a tool

skill-drift

Compare adapted skills against the upstream originals they credit, keep your adaptations, and fold in upstream changes one at a time.

Skill by Jeroen-G

IndexedMIT★ 1
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/jeroen-g-skill-drift

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Compare adapted skills against the upstream originals they credit, keep your adaptations, and fold in upstream changes one at a time.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/skill-drift

What's inside

Skill name
skill-drift
Description
Compare adapted skills against the upstream originals they credit, keep your adaptations, and fold in upstream changes one at a time.
License
MIT
Instructions
42 lines in SKILL.md · view on GitHub

Files (2)

  • SKILL.md
  • reference.md

SKILL.md (first lines)

# Skill Drift

Bring adapted skills back in line with the upstream originals they credit, without losing your adaptations.

Each credited skill records where it came from: `metadata.credits.url` (the upstream file). Drift is whatever upstream changed since you forked. No fork point is stored — you find the **base** by matching your file against upstream history each run, so a moved or rewritten upstream cannot leave a stale marker behind.

## Why this is judgement, not just a merge

A three-way merge applies upstream's changes onto your file mechanically and marks only textual collisions. It cannot see that upstream *reworded* a rule your adaptation depends on, renamed a concept you kept the old name for, or reversed an example your addition assumes. Those merge cleanly and are still wrong. So the merge is the first step and reading it is the second. Do both.

## Steps

For each skill whose `SKILL.md` carries `metadata.credits.url`:

1. Read `url`. It names the upstream file and the branch (usually `main`).
2. Find the **base** — the upstream revision you forked from — for every file in the skill directory. See [Finding the base](#finding-the-base). Match files by name; when a local file has no counterpart, check for a renamed one.
3. Fetch **upstream**: the current file at the branch in `url`, via `https://raw.githubusercontent.com/<owner>/<repo>/<branch>/<path>`.
4. If base equals upstream for every file, the skill is current. Move on.
5. Otherwise merge each changed file: `diff3 -m <local> <base> <upstream>`. This applies upstream's changes onto your file and marks conflicts.
6. **Turn the merge and the `base -> upstream` diff into a change inventory.** A clean merge only proves no textual collision. Classify every change by what it moves:
   - **wording** — cosmetic: punctuation, phrasing, description quoting.
   - **intent** — a rule or recommendation changed meaning.
   - **concept** — a renamed term, a new or removed section, a changed default or example.
   Number the changes per skill, one line each as `before -> after`, so each is addressable.
7. **Present the inventory, then decide per change rather than per skill.** Show every skill's numbered list and ask which changes to take (`all`, `1,3`, `skip 2`); recommend taking all wording changes and give a reading on each intent and concept change. A conflict or a meaning shift is a decision to surface, not an error to hide.
8. Apply the selected changes. Nothing to record — the next run re-derives the base.

## Finding the base

The base is the upstream revision your file was adapted from. Derive it by content: the fork point is the upstream revision most similar to your local file, because upstream edits after the fork only add distance.

- List the commits touching the path, newest first: `GET https://api.github.com/repos/<owner>/<repo>/commits?path=<path>&sha=<branch>&per_page=20`.
- Fetch the file at each candidate and diff it against your local file. The smallest diff is the base.
- When two candidates are near-equal, prefer the older: a base older than your true fork replays changes you already took (they merge back to no-ops), while a base newer than it can hide a change you missed.

Fetch candidates over HTTP. Where a config denies `git *`, use `diff3 -m` for the merge and the commits API for history rather than a clone.

## Reference

- [reference.md](reference.md): worked commands, sibling files and renames, and the cases where the base is hard to pin.

From Jeroen-G/skills, MIT.

More from Jeroen-G/skills

Signals

Stars
1
Forks
0
Open issues
0
Last commit (this folder)
Oct 12, 2026 (17 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from Jeroen-G

Cite this page

skill-drift. Agent Mart. https://agentmart.dev/skills/jeroen-g-skill-drift (last updated 2026-10-24)