plugins/self-terminate/skills/self-terminate/SKILL.md
Gracefully terminate the Claude Code session by sending SIGINT to the Claude process. Works for local CLI sessions and Claude Code Web (remote sessions). Use when you make a change that requires a restart, or when the user requests termination.
npx skillsauth add nsheaps/ai-mktpl self-terminateInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill enables Claude to gracefully terminate its own session by sending a SIGINT signal to its process.
This plugin includes a PreToolUse hook that automatically validates git state before termination:
✅ Automatically checks:
❌ Blocks termination if:
The hook provides clear error messages explaining what needs to be resolved before termination can proceed.
Claude runs as a process that spawns shell subprocesses for Bash commands. The parent PID ($PPID) of any spawned shell is the Claude process itself.
Sending SIGINT (signal 2) to the Claude process triggers a graceful shutdown, similar to pressing Ctrl+C.
The easiest way is to execute the provided script:
/path/to/plugins/self-terminate/bin/self-terminate.sh
Or if the plugin is installed:
~/.claude/plugins/self-terminate/bin/self-terminate.sh
If the script is unavailable, Claude can terminate itself manually:
echo "Shell PID: $$"
echo "Claude PID (parent): $PPID"
ps -o pid,ppid,comm -p $$ -p $PPID
ps -o comm= -p $PPID
This should output claude or similar.
kill -INT $PPID
A typical Claude Code process tree looks like:
iTerm/Terminal
└── shell (user's interactive shell)
└── claude (PID: XXXXX) ← Target this
└── /bin/zsh (spawned for Bash commands)
└── (your command)
After termination:
claudeScript says parent is not Claude: You may be running in a nested shell or different environment. Check pstree -p $$ to see the full process tree.
Signal ignored: Some environments may mask signals. Try kill -TERM $PPID as an alternative.
In Claude Code Web environments, stop hooks may validate state before shutdown:
Example stop hook location: ~/.claude/stop-hook-git-check.sh
| Environment Variable | Purpose |
| ------------------------ | ------------------------------------ |
| CLAUDE_CODE_REMOTE | Set to "true" in Claude Code Web |
| CLAUDE_PROJECT_DIR | Repository root (available in hooks) |
| CLAUDE_CODE_SESSION_ID | Current session UUID |
For Claude Code Web sessions, you can also terminate by:
tools
Manually reproduce what the github-app plugin's SessionStart hook does to make a GitHub App installation token usable in the current session — materialize the PEM, generate the token, isolate GH_CONFIG_DIR, write the runtime env file, and wire CLAUDE_ENV_FILE so every Bash call sees GH_TOKEN/GITHUB_TOKEN. Use when the hook did not run, the token is missing from the environment, or a shell/teammate needs the token wired up by hand. <example>GH_TOKEN isn't set even though github-app is configured</example> <example>the github-app SessionStart hook didn't run, set up the token manually</example> <example>wire the github app token into CLAUDE_ENV_FILE</example> <example>gh keeps falling back to the wrong account, isolate GH_CONFIG_DIR</example>
tools
Manually configure the GitHub App bot git identity the way the github-app plugin's SessionStart hook does — resolve the app slug and bot user ID, build the <slug>[bot] name and noreply email, set GIT_AUTHOR_*/GIT_COMMITTER_* env vars, and write an isolated GIT_CONFIG_GLOBAL with the gh auth git-credential helper. Use when commits are attributed to the wrong account, "Author identity unknown" appears, or git identity must be set up by hand. <example>my commits are showing up as the handler, not the bot</example> <example>git says Author identity unknown after the github-app hook ran</example> <example>configure the github app bot git identity manually</example> <example>set up the gh credential helper for git push</example>
tools
Manages spec files for requirements capture and validation
tools
# Bash Chaining Alternatives This skill teaches you how to work around the bash command chaining restriction enforced by this plugin. ## Why Chaining is Blocked The `bash-command-rejection` plugin blocks these operators: | Operator | Name | Why Blocked | | -------- | ---------- | ----------------------------------------------------------------------------------- | | `&&` | AND chain | Runs cmd2 only if cmd1 su