Use this skill when the user expresses ANY intent related to issue/thread management: - Switching issues: "let's work on X", "switch to #Y", "go to the auth issue" - Checking status: "what are we working on?", "current issue?", "status?" - Background work: "what's in background?", "any features ready?", "check progress" - Starting development: "implement X", "add feature", "fix bug Y", "build a..." - Joining reviews: "let me see the review", "check that feature", "join #X" - Pausing/resuming: "pause this", "come back later", "resume #X" - Stopping transcription: "stop tracking", "don't record this", "private mode" - Resuming last session: "what were we working on?", "resume last issue", "continue where we left off" - Any natural expression of wanting to change focus or check work status This skill interprets natural language - users should NOT memorize commands. For the full GHE workflow protocol, see skill: github-elements-tracking
Manages GitHub issue transcription state based on user intent. Automatically switches transcription ON when you say "work on #X" or "join review #Y", turns it OFF when you say "stop tracking", and creates background threads for implementation tasks without changing the main transcription target.
/plugin marketplace add Emasoft/ghe-marketplace/plugin install ghe@ghe-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
THIS LAW IS ABSOLUTE AND ADMITS NO EXCEPTIONS.
Violation of this law invalidates all work produced.
When running as a background agent, you may ONLY write to:
Do NOT write outside these locations.
ALL reports MUST be posted to BOTH locations:
Report naming: <TIMESTAMP>_<title or description>_(<AGENT>).md
Timestamp format: YYYYMMDDHHMMSSTimezone
ALL 11 agents write here: Athena, Hephaestus, Artemis, Hera, Themis, Mnemosyne, Hermes, Ares, Chronos, Argos Panoptes, Cerberus
REQUIREMENTS/ is SEPARATE - permanent design documents, never deleted.
Deletion Policy: DELETE ONLY when user EXPLICITLY orders deletion due to space constraints.
You are Claude. This skill teaches you how to manage GitHub issue threads and when transcription is active.
Transcription = posting conversation exchanges to GitHub issue
current_issue = NULL → Transcription OFF → Chat freely, nothing posted
current_issue = N → Transcription ON → ALL exchanges posted to Issue #N
THIS IS NON-NEGOTIABLE. You MUST inform the user whenever transcription state changes.
When transcription is ON, everything the user says becomes PUBLIC on GitHub. The user has a right to know before they share potentially sensitive information.
| Event | You MUST Say |
|---|---|
| Transcription turns ON | "Transcription is now ACTIVE. Everything we discuss will be posted to Issue #N on GitHub." |
| Transcription turns OFF | "Transcription is now OFF. Our conversation is private." |
| Switching issues | "Switching transcription from Issue #OLD to Issue #NEW. Our conversation will now be posted to #NEW." |
| Session resumes with active issue | "Resuming session. Transcription is ACTIVE to Issue #N - our conversation will be posted there." |
When transcription is ON:
[TRANSCRIPTION ACTIVE - Issue #N]
When transcription is OFF:
[PRIVATE CHAT - No transcription]
┌─────────────────────────────────────────────────────────────────┐
│ STATE: NO ISSUE SELECTED │
│ │
│ current_issue: null │
│ Transcription: OFF │
│ │
│ User and Claude chat normally. │
│ NOTHING is posted to GitHub. │
│ This is the DEFAULT starting state. │
│ │
│ Actions possible: │
│ • "implement X" → Create background thread, STAY in this state │
│ • "work on #42" → TRANSITION to Issue Selected state │
│ • "check status" → Report no active issue │
└───────────────────────────────────┬─────────────────────────────┘
│
User says: "work on #42"
User says: "let's discuss issue 42"
User says: "join review #99"
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ STATE: ISSUE #N SELECTED │
│ │
│ current_issue: N │
│ Transcription: ON to Issue #N │
│ │
│ EVERY exchange between User and Claude is posted to Issue #N. │
│ This creates a permanent record in GitHub. │
│ │
│ Actions possible: │
│ • "implement X" → Create background thread, STAY on #N │
│ • "switch to #50" → Change to #50, transcription follows │
│ • "stop tracking" → TRANSITION back to No Issue state │
│ • "go back" → Return to previous issue (if any) │
└─────────────────────────────────────────────────────────────────┘
| Scenario | Transcription State | What Happens |
|---|---|---|
| Fresh start | OFF | User chats with Claude, nothing posted |
| User says "work on #42" | ON → #42 | All exchanges now posted to #42 |
| User says "implement X" (no issue) | STAYS OFF | Background thread created, main chat stays private |
| User says "implement X" (on #42) | STAYS ON → #42 | Background thread created, main chat stays on #42 |
| User says "switch to #50" | ON → #50 | Transcription moves to #50 |
| User says "join review #99" | ON → #99 | Transcription moves to #99 |
| User says "stop tracking" | OFF | Back to private chat |
| Session starts with existing issue | ON → that issue | Resume transcription |
When user asks to implement/build/fix something:
User on #42: "implement dark mode"
│
├── Create Issue #99 for dark mode (background)
│ Athena writes requirements
│ Hephaestus implements
│ (all in background)
│
└── Main conversation STAYS on #42
Transcription CONTINUES to #42
User can keep chatting with Claude
ALWAYS check state before any operation:
CURRENT_ISSUE=$(bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" get-issue)
When user wants to work on a specific issue:
bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" set-issue <NUMBER>
MANDATORY - Tell the user IMMEDIATELY:
"[TRANSCRIPTION ACTIVE - Issue #N]
Transcription is now ACTIVE. Everything we discuss will be posted to Issue #N on GitHub.
Say 'stop tracking' or 'go private' at any time to disable transcription."
This is the ONLY way transcription turns ON - user explicitly selects an issue.
DO NOT proceed with any further conversation until you have notified the user.
When user wants to switch to a different issue:
# Remember current for "go back" functionality
PREVIOUS=$(bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" get-issue)
# Switch to new issue
bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" set-issue <NEW_NUMBER>
MANDATORY - Tell the user IMMEDIATELY:
"[SWITCHING TRANSCRIPTION]
Switching from Issue #PREVIOUS to Issue #NEW. Our conversation will now be posted to #NEW on GitHub.
Say 'go back' to return to #PREVIOUS."
When user wants to stop recording:
bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" clear-issue
MANDATORY - Tell the user IMMEDIATELY:
"[TRANSCRIPTION OFF]
Transcription stopped. Our conversation is now private - nothing will be posted to GitHub."
When user wants to implement/build/fix something:
# Get current issue (may be null)
PARENT=$(bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" get-issue)
# Create background thread
bash "${CLAUDE_PLUGIN_ROOT}/scripts/create_feature_thread.py" <feature|bug> "<title>" "<description>" "${PARENT:-}"
IMPORTANT: This does NOT change current_issue. Main conversation continues as before.
Tell the user:
"Created Issue #N for [feature/bug]. Athena is writing requirements, then agents will implement it. I'll notify you when ready for review. We can continue our conversation [here on #PARENT / privately]."
bash "${CLAUDE_PLUGIN_ROOT}/scripts/check_review_ready.py"
Report status without changing transcription state.
When user wants to participate in a feature thread:
# This IS a switch - transcription moves to the feature thread
PREVIOUS=$(bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" get-issue)
bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" set-issue <FEATURE_NUMBER>
MANDATORY - Tell the user IMMEDIATELY:
"[TRANSCRIPTION ACTIVE - Issue #FEATURE]
Joined Issue #FEATURE. Everything we discuss will now be posted to this thread on GitHub.
Say 'back to #PREVIOUS' when done to return."
On session start, check if there's a saved current_issue:
CURRENT=$(bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" get-issue)
MANDATORY - Tell the user IMMEDIATELY (if issue exists):
"[TRANSCRIPTION ACTIVE - Issue #N]
Resuming session with transcription ACTIVE to Issue #N. Everything we discuss will be posted there.
Say 'stop tracking' to disable transcription."
This notification MUST be the first thing you say to the user when resuming a session with an active issue.
User hasn't selected an issue but asks to implement something:
# PARENT will be empty
PARENT=$(bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" get-issue)
# Create without parent link
bash "${CLAUDE_PLUGIN_ROOT}/scripts/create_feature_thread.py" feature "Dark mode" "Add dark mode toggle" ""
Tell the user:
"Created Issue #N for dark mode. Agents will handle it in background. Our conversation remains private since we haven't selected an issue to work on."
Save previous issue when switching:
# When switching FROM #42 TO #99
echo "42" > /tmp/ghe_previous_issue
# Later, when user says "go back"
PREVIOUS=$(cat /tmp/ghe_previous_issue 2>/dev/null)
if [[ -n "$PREVIOUS" ]]; then
bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" set-issue "$PREVIOUS"
fi
CURRENT=$(bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" get-issue)
if [[ -z "$CURRENT" || "$CURRENT" == "null" ]]; then
echo "No issue selected. Transcription is OFF. Chat is private."
else
echo "Working on Issue #$CURRENT. Transcription is ON."
fi
Detect intent to disable transcription:
bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" clear-issue
When user wants to resume a previous session but doesn't remember the issue number:
The auto_transcribe.py script automatically tracks the last active issue. When you clear or switch issues, it saves the previous one to .claude/last_active_issue.json.
Check Last Issue:
# Show the last active issue details
bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" get-last-issue
# Output:
# Last Active Issue Found
# Issue: #42
# Title: Implement dark mode toggle
# Last Active: 2025-01-15T10:30:00Z
Resume Last Issue (One Command):
# Automatically resume transcription to the last active issue
bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" resume
This is equivalent to:
LAST=$(bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" last-issue-number)
bash "${CLAUDE_PLUGIN_ROOT}/scripts/auto_transcribe.py" set-issue "$LAST"
JSON File Structure (automatically maintained):
{
"issue": 42,
"title": "Implement dark mode toggle",
"last_active": "2025-01-15T10:30:00Z"
}
Automatic Tracking:
clear-issue: Previous issue is saved automaticallyset-issue N while on another issue: Previous issue is saved automaticallyFallback - Search by User Avatar:
If last_active_issue.json doesn't exist (e.g., first session or file deleted), search GitHub:
# Get GitHub username
GITHUB_USER="${GITHUB_OWNER:-$(gh api user --jq .login 2>/dev/null || echo "")}"
# List recent issues with comments
RECENT_ISSUES=$(gh issue list --state open --json number,title,updatedAt --limit 20)
# For each issue, check if it has USER avatar in comments
for issue_num in $(echo "$RECENT_ISSUES" | jq -r '.[].number'); do
COMMENTS=$(gh issue view "$issue_num" --json comments --jq '.comments[].body')
if echo "$COMMENTS" | grep -q "avatars.githubusercontent.com/${GITHUB_USER}"; then
echo "Found: Issue #$issue_num"
LAST_CONVERSATION="$issue_num"
break # Most recently updated is first
fi
done
Response Template:
If found:
"Your last conversation was on Issue #N: [Title]. Would you like to resume? (This will turn transcription ON)"
If not found:
"I couldn't find a previous conversation thread. Would you like to start working on a specific issue?"
| User Says | Transcription Action | Script |
|---|---|---|
| "let's work on #42" | ON → #42 | set-issue 42 |
| "work on the login bug" | ON → found issue | set-issue N (after search) |
| "switch to #50" | ON → #50 | set-issue 50 |
| "join review #99" | ON → #99 | set-issue 99 |
| "go back" | ON → previous | set-issue PREV |
| "stop tracking" | OFF | clear-issue |
| "what issue?" | No change | get-issue (report) |
| "implement X" | No change | create-feature-thread |
| "fix bug Y" | No change | create-feature-thread |
| "status?" | No change | check-review-ready |
| "what were we working on?" | Report last | get-last-issue |
| "resume last issue" | ON → last found | resume |
| "continue where we left off" | ON → last found | resume |
When user describes issue by name, not number:
# Search GitHub
gh issue list --search "login" --json number,title --limit 5
Decision Tree:
You MUST use these notifications. They are not optional.
"[TRANSCRIPTION ACTIVE - Issue #N]
Transcription is now ACTIVE. Everything we discuss will be posted to Issue #N: [Title] on GitHub.
Say 'stop tracking' or 'go private' at any time to disable transcription."
"[SWITCHING TRANSCRIPTION]
Switching from Issue #OLD to Issue #NEW. Our conversation will now be posted to #NEW on GitHub.
Say 'go back' to return to #OLD."
"[TRANSCRIPTION OFF]
Transcription stopped. Our conversation is now private - nothing will be posted to GitHub."
"[TRANSCRIPTION ACTIVE - Issue #N]
Resuming session with transcription ACTIVE to Issue #N. Everything we discuss will be posted there.
Say 'stop tracking' to disable transcription."
"Created Issue #N for [feature]. Agents will handle it in background.
[PRIVATE CHAT - No transcription] Our conversation remains private since we haven't selected an issue to work on."
"Created Issue #N for [feature]. Agents will handle it in background.
[TRANSCRIPTION CONTINUES - Issue #MAIN] Our conversation is still being posted to Issue #MAIN."
"Issue #N ([feature]) is ready for review! Hera is conducting the code review.
Would you like to join? Warning: This will switch transcription to Issue #N."
| Script | Purpose | Changes Transcription? |
|---|---|---|
auto_transcribe.py set-issue N | Select issue | YES - turns ON to #N |
auto_transcribe.py get-issue | Check current | NO |
auto_transcribe.py clear-issue | Stop transcription | YES - turns OFF (saves previous to last_active_issue.json) |
auto_transcribe.py get-last-issue | Show last active issue | NO |
auto_transcribe.py last-issue-number | Get issue number only (for scripting) | NO |
auto_transcribe.py resume | Resume last active issue | YES - turns ON to last issue |
create_feature_thread.py | Create background thread | NO - main unchanged |
check_review_ready.py | Check background status | NO |
EVERY transcription state change → IMMEDIATE user notification
Before transcription turns ON:
"Transcription is now ACTIVE. Everything we discuss will be posted to Issue #N on GitHub."
Before transcription turns OFF:
"Transcription is now OFF. Our conversation is private."
Never change transcription state silently. The user must always know whether their words are being made public.
Your job: Understand user intent, execute the right action, and ALWAYS tell them the current transcription state before proceeding.
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.