agentleFS
SpaghetticodersSpaghetticoders/developer-skills/skills/deliver/SKILL.md

deliver

Skill1 starsChanged 16 days agoMITView on GitHub

Turns a dirty working tree into disjoint, readable commits, with English messages. Never pushes unless told to, and when given a time it really commits and pushes at that time.

25 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use prune, create-issue and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • matthewpSkill

    prune

    Find and remove unused CSS in a Tideway project — classes defined in stylesheets but never referenced in markup. Use whenever the user wants to prune dead CSS, find unused styles or classes, clean up or slim a stylesheet, find orphaned BEM classes, or "tree-shake" hand-written CSS.

    Also in 3 projects that use this

  • sahinSkill

    create-issue

    Also in 3 projects that use this

  • BlockSkill

    plan

    Draft a TDD, PRD, or lightweight plan in the conversation without committing it.

    Also in 5 projects that use this

  • SentrySkill

    spec

    Produce a verified spec — problem, desired outcome, and acceptance criteria — before building. Use when given a GitHub/Linear issue link, when starting from a fuzzy in-conversation idea, or asked to "figure out what to do" / "scope this" / "what should I build" — whenever the *what* isn't yet pinned down. Grills the ambiguities, checks the premise against the code, and produces acceptance criteria you sign off on — then hands to design-first.

    Also in 4 projects that use this

  • AWSSkill

    ship

    Finalize dev work on an issue branch — update docs, push, and open a PR.

    Also in 5 projects that use this

  • AWSSkill

    wait-what

    Stop. That last message did not land: re-pitch it.

    Also in 3 projects that use this

The file

We split this skill into the rules it gives an agent

5 rules. 0 are common, 4 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 25 edited versions we read keep these.

  • 4

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    AI signatures in commits: the team decides, once: If the team doesn't want them (Co-Authored-By, "Generated with" in commits, PRs and …

    line 15
  2. Distinctive:

    If it prints anything, you wrote it in Italian.

    line 42
  3. Distinctive:

    every modified file is in exactly one group.

    line 51
  4. Distinctive:

    no group names files that haven't changed.

    line 52
  5. Distinctive:

    If the user says "commit at 17:54", the commit and the push must happen

    line 59

“Common” is measured: kept by at least 6 in 10 of the 25 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Delivering

The rules that don't change

  • Never push unless the user says so. A commit is proposed, not taken for granted: yesterday's authorisation doesn't hold today.
  • Messages in English, conventional commits.
  • Code comments in English, even where the file next door has them in another language.
  • AI signatures in commits: the team decides, once. If the team doesn't want them (Co-Authored-By, "Generated with" in commits, PRs and release notes), make it mechanical instead of trusting memory: turn attribution off in the Claude Code settings and add a commit-msg hook that rejects a message containing it.
# .git/hooks/commit-msg
grep -qiE 'co-authored-by:.*(claude|anthropic)|generated with' "$1" \
  && { echo "commit-msg: AI signature in the message"; exit 1; } || exit 0

Before committing

  1. Sweep the junk: find . -name '._*' -not -path './.git/*' -delete on ExFAT or network volumes, and check none of it made it into the index.
  2. Leave local files out. Some projects have changes that must never be committed (framework swaps for the simulator, local xcconfigs). They are listed in the project docs. After the commit, check they stayed out.
  3. Check the language of added comments, mechanically and not from memory. Example for people who work in Italian:
git diff | grep '^+' | grep -vE '^\+\+\+' | sed 's/^+//' | grep -E '^\s*(///|//)' \
  | grep -iE '\b(che|non|della|delle|una|perché|quindi|senza|già|questo|questa)\b'

If it prints anything, you wrote it in Italian. It happens because the conversation is in Italian and you write in the language you think in: the check catches it, good intentions don't.

Grouping

With many modified files, a single commit is unreadable. Partition them into disjoint groups, one theme per commit, and check before running:

  • every modified file is in exactly one group;
  • no group names files that haven't changed.

A file touched by two different themes goes into one group only: pick the one that tells the why, and mention the other in the message body.

Commits at a given time

If the user says "commit at 17:54", the commit and the push must happen really at that time, not earlier with a rewritten date.

Prepare the groups and the messages, schedule the run, and don't touch the files in those groups until it has fired: the command adds whatever it finds at that moment, so any other change in between would end up inside. Work on other files while you wait, and check the log afterwards.

And don't stage anything while you wait. git add <paths> followed by git commit -F <file> commits the whole index, not just the added paths: work done in the meantime and staged would end up in the scheduled commit with a message that has nothing to do with it. Before each scheduled time, check that git diff --cached --name-only prints nothing.

Verify afterwards, on the commits and not on the working state. A file that is still modified doesn't prove it wasn't committed earlier: git log --name-only --format=%h <base>..HEAD | grep '^ios/' is the right question.

The message

It says what changes and why, not which lines. If the fix comes from a measurement, the measurement goes in the body: that's what makes the commit useful six months from now.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.