ワンクリックで
set-icons
Set session status bar icons (Jira, Slack, Figma, Memo). Trigger: '상태바 아이콘', 'jira 링크', 'slack 링크', 'figma 링크', '아이콘 설정', '링크 변경'.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Set session status bar icons (Jira, Slack, Figma, Memo). Trigger: '상태바 아이콘', 'jira 링크', 'slack 링크', 'figma 링크', '아이콘 설정', '링크 변경'.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Manage encrypted secrets with agenix (.age) and 1Password (op CLI, Service Account token, SSH/Automation vault). Covers .age re-encryption, decryption failures, github-pat 무인 gh 인증, SA token 90일 rotation, SSH device key. Trigger: '시크릿', '암호화', '복호화', 'agenix', 'secrets.nix', 'age key', '.age', '토큰 추가', 're-encrypt', '/run/agenix', '1Password', '1password', 'op CLI', 'op_get', 'opnix', 'service account token', 'SA token', 'Automation vault', 'SSH vault', 'github-pat', 'gh 무인 인증', '90일 rotation', 'op read', 'biometric unlock', 'SSH device key', 'mobile-ssh', 'Termius'.
Attach explicitly provided file evidence (screenshots, demo videos, logs) to a GitHub issue or PR with the gh-attach CLI — content-inspection masking gate, irreversible-upload staging, fail-open ATTACH_STATUS reporting. Trigger: standalone attach requests on an existing issue/PR ('이 스크린샷 이슈에 올려줘', 'gh attach로 첨부'), or another GitHub publishing skill reaching for the evidence-attachment procedure. Format/size limits delegated to the GitHub server; Discussions unsupported. NOT for issue/PR creation or body authoring (use create-issue/create-pr).
Create a structured GitHub issue with auto-enriched labels. Trigger: '이슈 등록', '이슈 만들어', 'todo 등록', '버그 등록', '이슈 추가'. NOT for PR 본문 (use create-pr).
Create structured PR. Default: create new PR. Args: update (existing PR body). Trigger: 'PR 만들어줘', 'PR 생성', 'PR 올려', 'create PR', 'PR 업데이트', 'Human Test'. NOT for DA (use run-da). NOT for PR 코멘트 (use review-pr-feedback). NOT for 머지 후 종결 절차 (use finish-pr).
사용자가 `/analyzing-da-sessions` 슬래시 명령으로 명시 호출했을 때만 DA 세션 로그 정량 통계를 측정한다. 자연어 trigger 매칭은 사용하지 않는다 — 자연어로 측정을 원하더라도 사용자가 명시 호출해야 한다.
Run Codex CLI subprocesses for explicit codex exec requests, Claude Code or headless automation, and non-interactive code review. Use when requests mention `codex exec` or `비대화형 codex`. Use using-claude-p for Claude headless execution.
| name | set-icons |
| disable-model-invocation | true |
| description | Set session status bar icons (Jira, Slack, Figma, Memo). Trigger: '상태바 아이콘', 'jira 링크', 'slack 링크', 'figma 링크', '아이콘 설정', '링크 변경'. |
세션별 상태바 아이콘 (Jira, Slack, Figma, Memo)의 설정, 수정, 제거를 다룬다. SessionStart hook이 상태 파일을 초기화하고, 이 스킬로 링크를 관리한다. Memory 아이콘(🧠)은 statusline에서 자동 감지하므로 이 스킬과 무관하게 동작한다.
| 아이콘 | 키 | 색상 | 용도 |
|---|---|---|---|
| ⚡ | jira | yellow | Jira 이슈 링크 |
| 💬 | slack | magenta | Slack 채널/스레드 |
| 🎨 | figma | red | Figma 디자인 |
| 📓 | memo | green | 세션 메모 파일 |
| 🧠 | (자동) | blue | Memory 파일 (auto-detect, worktree 공유, orphan 시 ⚠) |
경로: ~/.claude/status-icons/<session-id>.json
{
"jira": { "url": "https://example.atlassian.net/browse/PROJ-123", "label": "PROJ-123" },
"slack": { "url": "https://app.slack.com/client/T.../C...", "label": "Slack" },
"figma": { "url": "https://www.figma.com/design/...", "label": "Figma" },
"memo": { "path": "$HOME/.claude/memos/<session-id>.md", "label": "Memo" }
}
SessionStart hook의 additionalContext에 상태 파일 경로가 표시된다.
대화 컨텍스트에서 상태 파일: 뒤의 경로를 STATE_FILE로 사용한다.
# additionalContext에서 "상태 파일: /path/to/file.json"을 확인 후:
STATE_FILE="$HOME/.claude/status-icons/<session-id>.json"
사용자가 /set-icons를 호출하거나 링크 설정을 요청하면,
AskUserQuestion으로 필요한 링크를 물어본다:
{
"questions": [
{
"header": "Jira",
"question": "설정할 Jira 링크가 있나요?",
"multiSelect": false,
"options": [
{ "label": "건너뛰기", "description": "설정하지 않음" },
{ "label": "URL 입력", "description": "Other에 Jira URL을 입력해주세요" }
]
},
{
"header": "Slack",
"question": "설정할 Slack 링크가 있나요?",
"multiSelect": false,
"options": [
{ "label": "건너뛰기", "description": "설정하지 않음" },
{ "label": "URL 입력", "description": "Other에 Slack URL을 입력해주세요" }
]
},
{
"header": "Figma",
"question": "설정할 Figma 링크가 있나요?",
"multiSelect": false,
"options": [
{ "label": "건너뛰기", "description": "설정하지 않음" },
{ "label": "URL 입력", "description": "Other에 Figma URL을 입력해주세요" }
]
}
]
}
사용자가 URL을 입력하면 아래 jq 명령어로 상태 파일을 업데이트한다. Memo 아이콘도 스킬 호출 시 자동 등록한다 (메모 설정 섹션 참조).
⚠️
jq -n사용 금지 — 기존 키가 덮어씌워진다. 반드시 기존 파일을 입력으로 사용:tmp=$(mktemp "$(dirname "$STATE_FILE")/.${STATE_FILE##*/}.XXXXXX") && jq '...' "$STATE_FILE" > "$tmp" && mv "$tmp" "$STATE_FILE"
URL에서 이슈번호를 자동 추출한다:
# URL에서 이슈번호 추출: /browse/PROJ-123 → PROJ-123
JIRA_URL="https://example.atlassian.net/browse/PROJ-123"
JIRA_LABEL=$(echo "$JIRA_URL" | grep -oE '[A-Z]+-[0-9]+' | tail -1)
tmp=$(mktemp "$(dirname "$STATE_FILE")/.${STATE_FILE##*/}.XXXXXX") && jq --arg url "$JIRA_URL" --arg label "$JIRA_LABEL" \
'.jira = {"url":$url,"label":$label}' \
"$STATE_FILE" > "$tmp" && mv "$tmp" "$STATE_FILE"
tmp=$(mktemp "$(dirname "$STATE_FILE")/.${STATE_FILE##*/}.XXXXXX") && jq --arg url "https://app.slack.com/client/T.../C..." \
'.slack = {"url":$url,"label":"Slack"}' \
"$STATE_FILE" > "$tmp" && mv "$tmp" "$STATE_FILE"
tmp=$(mktemp "$(dirname "$STATE_FILE")/.${STATE_FILE##*/}.XXXXXX") && jq --arg url "https://www.figma.com/design/..." \
'.figma = {"url":$url,"label":"Figma"}' \
"$STATE_FILE" > "$tmp" && mv "$tmp" "$STATE_FILE"
# 특정 아이콘 제거 (예: figma)
tmp=$(mktemp "$(dirname "$STATE_FILE")/.${STATE_FILE##*/}.XXXXXX") && jq 'del(.figma)' "$STATE_FILE" > "$tmp" && mv "$tmp" "$STATE_FILE"
메모 파일은 SessionStart hook이 자동 생성하지만, 아이콘은 스킬 호출 시 등록한다:
# MEMO_FILE은 additionalContext의 "메모:" 뒤 경로
tmp=$(mktemp "$(dirname "$STATE_FILE")/.${STATE_FILE##*/}.XXXXXX") && jq --arg path "$MEMO_FILE" \
'.memo = {"path":$path,"label":"Memo"}' \
"$STATE_FILE" > "$tmp" && mv "$tmp" "$STATE_FILE"
~/.claude/memos/<session-id>.mdfile:// URL을 통해 열 수 있다| 상황 | 동작 |
|---|---|
| 새 세션 (cwd 첫 진입 또는 종료 후 재시작) | 빈 sidecar로 시작. 같은 cwd 마커는 startup이 건드리지 않음 (관리 책임은 Stop hook). |
/clear | 같은 cwd 마커의 직전 sid에서 sidecar/memo deep clone 복원 — 같은 cwd에서 며칠 전 세션의 아이콘도 자동 복원된다(아카이빙 우선). |
--resume / --continue | 기존 상태 파일 읽기, 모든 아이콘 유지 |
compact | 동일하게 상태 재주입 |
| 자동 정리 | 없음 (아카이빙 우선) — sidecar/memo/마커는 사용자가 명시적으로 정리하기 전까지 보존 |
Stop hook(record-last-session.sh)이 매 턴 종료에 ~/.claude/status-icons/.last-session-<sha1(cwd)> 마커 파일에 session_id를 atomic write한다. SessionStart hook은 새 sid에 sidecar가 없을 때 같은 cwd의 마커만 조회하므로, 동시에 진행 중인 다른 워크트리/프로젝트 세션과 아이콘이 섞이지 않는다.
marker 관리는 전적으로 Stop hook의 책임이다 — SessionStart hook은 startup에서 marker를 건드리지 않으므로, 같은 cwd에 두 인스턴스가 동시에 떠 있어도 새 인스턴스의 startup이 다른 인스턴스의 active marker를 덮어쓰지 않는다. 결과적으로 같은 cwd에서 며칠 전 세션 종료 후 다시 방문해 /clear//branch를 하면 직전 세션의 아이콘이 자동 복원된다(아카이빙 우선).
자동 정리 로직은 없다. sidecar/메모/마커는 사용자가 명시적으로 정리하기 전까지 그대로 보존된다. storage 누적이 부담이 되면 별도 도구나 수동 정리로 처리한다.
cat "$STATE_FILE" | jq .로 검증additionalContext에서 상태 파일: 뒤의 경로 확인jq -n으로 새 JSON 생성 시 기존 키가 사라짐 → 반드시 기존 파일을 입력으로 사용statusline.sh에 하드코딩
▏…▕ 게이지로 압축)startup, clear, resume, compact 네 가지. 그 외 source는 hook이 즉시 exit 0로 skip한다 (sidecar/memo는 생성하지 않음).{}로 시작. 동일 sid로 startup이 재발화되면 STATE_FILE을 보존(아이콘 유실 방지). cwd 마커는 startup이 건드리지 않는다 (관리 책임은 Stop hook).{}. STATE_FILE이 이미 존재하면 그대로 사용./clear 후 아이콘이 사라지는 증상이 재현되면) CLAUDE_HOOK_DEBUG=1로 hook을 재기동해 ~/.claude/logs/session-hooks.log를 채집한 뒤 source 매핑을 확인한다.file:// link는 Ghostty plain-text URL fallback detector로 동작 (Jira/Slack/Figma 같은 https://도 동작)CLAUDE_CODE_NO_FLICKER fullscreen 모드)가 mouse capture로 일반 Cmd+클릭을 가로채는 영역에서 escape hatch. cwd (vscode://file/<path>/) 처럼 fallback detector가 인식 못 하는 scheme은 Cmd+Shift+클릭으로만 동작$STATE_FILE 변수는 SessionStart hook의 additionalContext에서 확인한다statusline.sh나 hook 스크립트 수정은 관련 소스 코드를 직접 참조한다