Skip to content
Back to skills

Exp Stop

ASecurity

Conclude and delete an experiment branch. Shows pending work and a diffstat for a final review, then deletes the current repository's experiment branc

  • 3 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 22, 2026
ai-agentsbashgit

Security analysis

A100/100

Scanned September 22, 2026

npx -y skills add petar-djukic/coding-skills --skill exp-stop --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Exp Stop?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Exp Stop
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/petar-djukic-exp-stop/badge)](https://www.skillsdirectory.com/skills/petar-djukic-exp-stop)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: "exp-stop"
description: "Conclude and delete an experiment branch. Shows pending work and a diffstat for a final review, then deletes the current repository's experiment branc"
---

# exp-stop command

Apply this command workflow. Treat any text after its invocation as the command input.

Conclude and delete an experiment branch. Shows pending work and a diffstat for a final review, then deletes the current repository's experiment branch, worktree, and local metadata. Handles both local-only and remote-backed (subtree-synced) experiments.

## Input

$ARGUMENTS

The argument is the experiment slug (e.g. `transformer-perf`). If no argument is given, list existing `exp/*` branches and ask the user to pick one.

## Phase 1 -- Verify and Detect Mode

1. Check that the worktree `../exp-<slug>` exists or the local branch `exp/<slug>` exists:
   ```bash
   git worktree list | grep "exp-<slug>"
   git branch --list "exp/<slug>"
   ```
   If neither exists, report that no experiment with this slug was found and stop.

2. Detect the mode: if `../exp-<slug>/.exp-sync.yaml` exists, this is a **remote-backed** experiment — read `remote_name`, `remote_url`, `upstream_branch`, `prefix`, and `push_branch` from it. Otherwise it is **local-only**.

3. Show the current state of the experiment — uncommitted changes and a diffstat against main:
   ```bash
   cd ../exp-<slug>
   git status --short
   ```
   ```bash
   git diff --stat main...exp/<slug>
   ```

4. Show the commit log for the experiment:
   ```bash
   git log --oneline main..exp/<slug>
   ```

5. **Remote-backed only** — show the subtree sync state so the user knows what has and has not crossed the boundary:
   ```bash
   cd ../exp-<slug>
   git fetch <remote_name>
   # local prefix vs the remote's upstream branch
   git diff --stat HEAD:<prefix> <remote_name>/<upstream_branch>
   # whether a push branch exists in the remote repository
   git ls-remote --heads <remote_name> <push_branch>
   ```
   Then state plainly: **deleting this experiment branch does not undo anything already pushed to `<remote_url>`.** Subtree pushes created branch `<push_branch>` in the remote repository; that content survives all local cleanup below.

6. Ask the user to confirm deletion. This is the last chance to distill keepers via `/gh-issue-push` + `/gh-issue-pop`, and (remote-backed) the last reminder to `git subtree push` any prefix changes that should reach the remote. Do not proceed without explicit confirmation.

## Phase 2 -- Delete (current repository only)

After user confirmation:

1. Delete this repository's remote branch:
   ```bash
   git push origin --delete exp/<slug>
   ```

2. Remove the worktree:
   ```bash
   git worktree remove --force ../exp-<slug>
   ```

3. Delete the local branch:
   ```bash
   git branch -D exp/<slug>
   ```

4. **Remote-backed only** — remove the sync remote from this machine's configuration:
   ```bash
   git remote remove <remote_name>
   ```

Default cleanup ends here: only the current repository's experiment branch, worktree, and local metadata are removed. **The external repository's `<push_branch>` is never deleted by default.** If — and only if — the user explicitly asks to delete it as well, confirm separately and run:

```bash
git push <remote_url> --delete <push_branch>
```

## Phase 3 -- Report

Print cleanup confirmation and instructions for other machines:

```
Experiment exp/<slug> deleted (this repo's remote branch, worktree, local branch<if remote-backed:>, sync remote</if>).
<if remote-backed:>
NOT deleted: branch <push_branch> in <remote_url> — content pushed there
survives this cleanup. Delete it manually only if you are sure.

Other machines that joined this experiment should run:
  git fetch --prune
  git worktree remove --force ../exp-<slug>
  git branch -D exp/<slug>
  git remote remove <remote_name>   # remote-backed only

Note: deletion removes the branch from lists, fetches, and fresh clones,
but commits stay SHA-addressable on GitHub until garbage collection.
GitHub Support can purge on request.
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.