| name | hooks-session-end-issue-hook |
| description | Configure a Stop hook that surfaces unfinished todos at session end. Use when you want deferred work automatically flagged for GitHub issue creation. |
| args | [--no-verify] |
| allowed-tools | Read, Write, Edit, Glob, Grep, Bash, TodoWrite |
| argument-hint | --no-verify to skip gh auth verification |
| disable-model-invocation | true |
| created | "2026-02-27T00:00:00.000Z" |
| modified | "2026-07-18T00:00:00.000Z" |
| compatibility | claude-code |
| reviewed | "2026-03-30T00:00:00.000Z" |
/hooks:session-end-issue-hook
Configure a Stop hook that checks for unfinished TodoWrite todos at the end of each Claude response. If any pending or in-progress todos exist when you try to end the session, Claude is prompted to create GitHub issues for them before the conversation closes.
When to Use This Skill
| Use this skill when... | Use /hooks:hooks-configuration instead when... |
|---|
| You want unfinished todos deferred to GitHub issues | Configuring other hook types (PreToolUse, SessionEnd, etc.) |
| Preventing tasks from being forgotten at session end | Need general hooks knowledge or debugging |
| Projects with active issue trackers on GitHub | Understanding hook lifecycle events |
| Teams that rely on GitHub issues for work tracking | Writing custom hook logic from scratch |
Context
Detect current state:
- Settings file: !
find . -path '*/.claude/settings.json' -maxdepth 3
- Existing Stop hooks: !
find . -path '*/.claude/settings.json' -maxdepth 3 -exec jq -r '.hooks.Stop // empty' {} +
- gh auth: !
gh auth status
- jq available: !
jq --version
Parameters
| Flag | Default | Description |
|---|
--no-verify | off | Skip checking gh authentication status |
Execution
Step 1: Check prerequisites
Verify that jq is installed — the hook requires it to parse the session transcript. Report if missing.
Unless --no-verify is passed: verify gh is installed and authenticated (gh auth status). Report the auth state so the user knows whether GitHub issue creation will work when the hook fires.
Step 2: Locate hook script
The hook script ships with the hooks-plugin. Determine its path:
- If
${CLAUDE_PLUGIN_ROOT} is set: use ${CLAUDE_PLUGIN_ROOT}/hooks/session-end-issue-hook.sh
- Otherwise: look for the script relative to this skill's location ()