Skip to content
Back to skills

Leopold Stop

ASecurity

Take the seat back. Cleanly ends the autonomous run at the next turn boundary and writes a final summary. Nothing is interrupted mid-turn.

  • 8 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 5, 2026
ai-agentsbashgit

Security analysis

A100/100

Scanned September 5, 2026

npx -y skills add Jonhvmp/leopold --skill leopold-stop --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Leopold Stop?

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

Security grade badge for Leopold Stop
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jonhvmp-leopold-stop/badge)](https://www.skillsdirectory.com/skills/jonhvmp-leopold-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: leopold-stop
version: 0.1.0
description: "Take the seat back. Cleanly ends the autonomous run at the next turn boundary and writes a final summary. Nothing is interrupted mid-turn."
allowed-tools:
  - Read
  - Write
  - Bash
triggers:
  - leopold stop
  - stop leopold
  - take back the seat
---

# /leopold-stop

End the autonomous run cleanly.

A run is conducted by ONE session (its `owner` in `state.json`). Stopping it from
the session that owns it, or a run whose owner shows no sign of life, is a plain stop.
Stopping a run that another **live** session (or a live `leopold run`) is conducting
is refused unless the user asked for it: if the invocation carried `--force`, export
`LEOPOLD_FORCE=1` for this block.

Run:

```bash
LEO=.leopold
if [ ! -f "$LEO/state.json" ]; then echo "No Leopold run to stop."; exit 0; fi
LEO_HOME="$(leopold home 2>/dev/null || echo "${LEOPOLD_HOME:-$([ -d "${CLAUDE_HOME:-$HOME/.claude}/leopold" ] && echo "${CLAUDE_HOME:-$HOME/.claude}" || echo "${CODEX_HOME:-$HOME/.codex}")/leopold}")"
verdict="$([ -f "$LEO_HOME/scripts/leopold-owner.sh" ] && bash "$LEO_HOME/scripts/leopold-owner.sh" check "$PWD" || echo "FREE: owner check unavailable")"
case "$verdict" in
  BLOCKED*)
    if [ -z "${LEOPOLD_FORCE:-}" ]; then
      echo "REFUSED: $verdict"
      echo "This session does not conduct that run. Re-run /leopold-stop --force to stop it anyway."
      exit 0
    fi ;;
esac
ME="${CLAUDE_CODE_SESSION_ID:-${CODEX_THREAD_ID:-}}"
NOW="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
tmp="$(mktemp)"; jq --arg t "$NOW" '.active=false | .stopped_reason="user_stop"
  | (if (.owner | type) == "object" then .owner.released_at=$t else . end)' "$LEO/state.json" > "$tmp" && mv "$tmp" "$LEO/state.json"
printf '{"ts":"%s","event":"stop","reason":"user_stop","session":"%s","forced":%s}\n' \
  "$NOW" "${ME:0:8}" "$([ -n "${LEOPOLD_FORCE:-}" ] && echo true || echo false)" >> "$LEO/events.jsonl"
rm -f "$LEO/STOP" "$LEO/ALLOW_GIT" "$LEO/ALLOW_PUSH"
echo "Leopold run stopped (git re-locked; STOP and opt-in tokens cleared)."
```

If it printed `REFUSED`, repeat the verdict line to the user and stop there: the
line names the owning session, the engine and when it was last seen.

This sets the run inactive, so the Stop hook will allow the session to halt at
the next turn boundary. The blunt alternative is `touch .leopold/STOP`.

After stopping, give the user a short handoff: what was completed (done items in
`PLAN.md`), what decisions were made (`DECISIONS.md`), and what is staged and
ready for them to review and commit. Remember: Leopold never committed; that is
their call.

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.