plugins/agentic-behavior/skills/exit/SKILL.md
Gracefully exit 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 need to exit the session cleanly, or when the user requests exit/termination.
npx skillsauth add nsheaps/ai-mktpl exitInstall 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 exit its own session by sending a SIGINT signal to its process.
/restart skill for restarting (exit + launcher picks up again)This plugin includes a PreToolUse hook that validates git state before exit. The hook intercepts Bash tool calls that invoke exit.sh or kill -INT and checks the working directory.
Checks performed:
If any check fails, the hook blocks the tool call (exit 2) and provides a message explaining what needs to be resolved.
Note: The manual method (kill -INT $PPID) is also intercepted by the hook. However, if you bypass the Bash tool entirely (e.g., running a signal from outside Claude), the hook cannot intercept it.
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:
${CLAUDE_PLUGIN_ROOT}/bin/exit.sh
Or via the installed plugin cache path (varies by installation):
~/.claude/plugins/cache/ai-mktpl/agentic-behavior/*/bin/exit.sh
If the script is unavailable, Claude can exit 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 exit:
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 exit 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