一键导入
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 스크립트 수정은 관련 소스 코드를 직접 참조한다