builderlog
바뀜📦 자동화 팩은 이제 구독이에요. 팩마다 월 990원 · 1년 9,900원. 구독하면 설치 방법을 바로 보내 드리고, 업데이트는 자동으로 받아요. 기존 구매자는 산 팩 1년 업데이트가 무료예요(내 구매함).요금 보기 →

프롬프트 도감 › No.2687

단축키 설정 안내 도우미

Keybindings Setup Skill

사용자 맞춤 키 설정을 안전하게 변경하고 충돌을 확인하도록 도와줘요. 운영체제별 예약 단축키와 주의사항을 빠짐없이 짚어줘요.

이럴 때 코딩 환경 설정, 작업 효율 향상, 단축키 커스텀

도구 AI

프롬프트

---
name: keybindings-help
description: |-
  Use when the user wants to customize keyboard shortcuts, rebind keys, add chord bindings, or modify ~/.claude/keybindings.json. Examples: "rebind ctrl+s", "add a chord shortcut", "change the submit key", "customize keybindings".
user-invocable: false
---
# Keybindings Skill

Create or modify `~/.claude/keybindings.json` to customize keyboard shortcuts.

## CRITICAL: Read Before Write

**Always read `~/.claude/keybindings.json` first** (it may not exist yet). Merge changes with existing bindings — never replace the entire file.

- Use **Edit** tool for modifications to existing files
- Use **Write** tool only if the file does not exist yet

## File Format

```json
{
  "$schema": "https://www.schemastore.org/claude-code-keybindings.json",
  "$docs": "https://code.claude.com/docs/en/keybindings",
  "bindings": [
    {
      "context": "Chat",
      "bindings": {
        "ctrl+e": "chat:externalEditor"
      }
    }
  ]
}
```

Always include the `$schema` and `$docs` fields.

## Keystroke Syntax

**Modifiers** (combine with `+`):
- `ctrl` (alias: `control`)
- `alt` (aliases: `opt`, `option`) — note: `alt` and `meta` are identical in terminals
- `shift`
- `meta` — same key as `alt` in terminals (Option key on macOS)
- `cmd` (aliases: `command`, `super`, `win`) — Command key on macOS, Windows key on Windows, Super key on Linux; not the same as `meta`. Most terminals never send it (only ones that report the Super modifier, such as through the Kitty keyboard protocol or xterm `modifyOtherKeys`), so prefer `ctrl` for bindings that should work everywhere

**Special keys**: `escape`/`esc`, `enter`/`return`, `tab`, `space`, `backspace`, `delete`, `up`, `down`, `left`, `right`

**Chords**: Space-separated keystrokes, e.g. `ctrl+k ctrl+s` (3-second timeout between keystrokes)

**Examples**: `ctrl+shift+p`, `alt+enter`, `ctrl+k ctrl+n`

## Unbinding Default Shortcuts

Set a key to `null` to remove its default binding:

```json
{
  "context": "Chat",
  "bindings": {
    "ctrl+s": null
  }
}
```

## How User Bindings Interact with Defaults

- User bindings are **additive** — they are appended after the default bindings
- To **move** a binding to a different key: unbind the old key (`null`) AND add the new binding
- A context only needs to appear in the user's file if they want to change something in that context

## Common Patterns

### Rebind a key
To change the external editor shortcut from `ctrl+g` to `ctrl+e`:
```json
{
  "context": "Chat",
  "bindings": {
    "ctrl+g": null,
    "ctrl+e": "chat:externalEditor"
  }
}
```

### Add a chord binding
```json
{
  "context": "Global",
  "bindings": {
    "ctrl+k ctrl+t": "app:toggleTodos"
  }
}
```

## Behavioral Rules

1. Only include contexts the user wants to change (minimal overrides)
2. Validate that actions and contexts are from the known lists below
3. Warn the user proactively if they choose a key that conflicts with reserved shortcuts or common tools like tmux (`ctrl+b`) and screen (`ctrl+a`)
4. When adding a new binding for an existing action, the new binding is additive (existing default still works unless explicitly unbound)
5. To fully replace a default binding, unbind the old key AND add the new one

## Validation

Claude Code validates `~/.claude/keybindings.json` when it loads; warnings go to the debug log. After editing the file, re-check it against the rules below and fix anything that matches.

### Common Issues and Fixes

| Issue | Cause | Fix |
| --- | --- | --- |
| `keybindings.json must have a "bindings" array` | Missing wrapper object | Wrap bindings in `{ "bindings": [...] }` |
| `"bindings" must be an array` | `bindings` is not an array | Set `"bindings"` to an array: `[{ context: ..., bindings: ... }]` |
| `Unknown context "X"` | Typo or invalid context name | Use exact context names from the Available Contexts table |
| `"X" is not a modifier, so "Y" ... applies to "Z" instead` | Error: `X` comes before the key in `Y` but is not a modifier (a typo such as `ctl` for `ctrl`, or two keys joined with `+` instead of a space), so it is dropped and the binding applies to `Z` | Correct the modifier using the Keystroke Syntax list (the message suggests the corrected keystroke when it can), or put a space between the keystrokes of a chord |
| `Duplicate key "X" in Y bindings` | Same key defined twice in one context | Remove the duplicate; JSON uses only the last value |
| `"X" may not work: ...` | Key conflicts with terminal/OS reserved shortcut | Choose a different key (see Reserved Shortcuts section) |
| `Invalid action for "X"` | Action value is not a string or null | Actions must be strings like `"app:help"` or `null` to unbind |

### Example validation warnings (debug log)

```
[keybindings] Found 2 validation issue(s)
[keybindings] [error] Unknown context "chat" — Valid contexts: Global, Chat, Autocomplete, ...
[keybindings] [warning] "ctrl+c" may not work: Terminal interrupt (SIGINT)
```

**Errors** prevent bindings from working and must be fixed. **Warnings** indicate potential conflicts but the binding may still work.

## Reserved Shortcuts

### Non-rebindable (errors)
- `ctrl+c` — Cannot be rebound - used for interrupt/exit (hardcoded)
- `ctrl+d` — Cannot be rebound - used for exit (hardcoded)
- `ctrl+m` — Cannot be rebound - identical to Enter in terminals (both send CR)
- `ctrl+[` — Cannot be rebound - identical to Escape in terminals
- `ctrl+i` — Cannot be rebound - identical to Tab in terminals
- `ctrl+h` — Cannot be rebound - identical to Backspace in terminals
- `capslock` — Caps Lock is not delivered to terminal applications

### Terminal reserved (errors/warnings)
- `ctrl+z` — Unix process suspend (SIGTSTP) (may conflict)
- `ctrl+\` — Terminal quit signal (SIGQUIT) (will not work)

### macOS reserved (errors)
- `cmd+c` — macOS system copy
- `cmd+v` — macOS system paste
- `cmd+x` — macOS system cut
- `cmd+q` — macOS quit application
- `cmd+w` — macOS close window/tab
- `cmd+tab` — macOS app switcher
- `cmd+space` — macOS Spotlight

## Available Contexts

| Context | Description |
| --- | --- |
| `Global` | Active everywhere, regardless of focus |
| `Chat` | When the chat input is focused |
| `Autocomplete` | When autocomplete menu is visible |
| `Confirmation` | When a confirmation/permission dialog is shown |
| `Help` | When the help overlay is open |
| `Transcript` | When viewing the transcript |
| `HistorySearch` | When searching command history (ctrl+r) |
| `Task` | When a task/agent is running in the foreground |
| `ThemePicker` | When the theme picker is open |
| `Settings` | When the settings menu is open |
| `Tabs` | When tab navigation is active |
| `Attachments` | When navigating image attachments in a select dialog |
| `Footer` | When footer indicators are focused |
| `AbovePrompt` | When a plugin's panel above the prompt, or a button in it, has keyboard focus |
| `AbovePromptInput` | When a plugin's input field above the prompt has keyboard focus |
| `AbovePromptSelect` | When a plugin's select above the prompt has keyboard focus |
| `Pane` | When a plugin's pane has keyboard focus |
| `PaneField` | When an input field or select in a plugin's pane has keyboard focus |
| `MessageSelector` | When the message selector (rewind) is open |
| `DiffDialog` | When the diff dialog is open |
| `DiffPanel` | When the diff sidebar panel is open |
| `ModelPicker` | When the model picker is open |
| `EffortSlider` | When the effort slider is open |
| `Select` | When a select/list component is focused |
| `Plugin` | When the plugin dialog is open |
| `Scroll` | When a scrollable view is focused (fullscreen layout) |
| `Agents` | When the agents view (`claude agents`) is open |

## Available Actions

| Action | Default Key(s) | Context |
| --- | --- | --- |
| `app:interrupt` | `ctrl+c` | Global |
| `app:exit` | `ctrl+d` | Global |
| `app:toggleTodos` | `ctrl+t` | Global |
| `app:toggleTranscript` | `ctrl+o` | Global |
| `app:toggleBrief` | `ctrl+shift+b` | Global |
| `app:toggleReplTab` | (none) | Global |
| `app:toggleDiffNoiseFilter` | (none) | Global |
| `app:diffFileListUp` | `ctrl+up`, `meta+up` | Global |
| `app:diffFileListDown` | `ctrl+down`, `meta+down` | Global |
| `app:toggleDiffPreSession` | (none) | Global |
| `app:cycleDiffBase` | `ctrl+x b` | DiffPanel |
| `app:toggleTerminal` | (none) | Global |
| `app:redraw` | (none) | Global |
| `app:openArtifact` | `ctrl+]` | Global |
| `history:search` | `ctrl+r` | Global |
| `history:previous` | `up` | Chat |
| `history:next` | `down` | Chat |
| `chat:cancel` | `escape` | Chat |
| `chat:killAgents` | `ctrl+x ctrl+k` | Chat |
| `chat:cycleMode` | `shift+tab` | Chat |
| `chat:modelPicker` | `meta+p` | Chat |
| `chat:fastMode` | `meta+o` | Chat |
| `chat:defaultToNewerModel` | `ctrl+y` | Chat |
| `chat:thinkingToggle` | `meta+t` | Chat |
| `chat:workflowKeywordToggle` | `meta+w` | Chat |
| `chat:submit` | `enter` | Chat |
| `chat:queueSubmit` | `ctrl+x enter` | Chat |
| `chat:sendNow` | `ctrl+x ctrl+s`, `ctrl+enter` | Chat |
| `chat:newline` | `ctrl+j` | Chat |
| `chat:undo` | `ctrl+_`, `ctrl+-`, `ctrl+shift+-`, `ctrl+shift+_` | Chat |
| `chat:externalEditor` | `ctrl+x ctrl+e`, `ctrl+g` | Chat |
| `chat:stash` | `ctrl+s` | Chat |
| `chat:imagePaste` | `ctrl+v` | Chat |
| `chat:clearInput` | `ctrl+l` | Chat |
| `chat:clearScreen` | `cmd+k` | Chat |
| `autocomplete:accept` | `tab` | Autocomplete |
| `autocomplete:dismiss` | `escape` | Autocomplete |
| `autocomplete:previous` | `up` | Autocomplete |
| `autocomplete:next` | `down` | Autocomplete |
| `confirm:yes` | `enter` | Confirmation |
| `confirm:no` | `escape`, `escape` | Settings |
| `confirm:previous` | `up` | Confirmation |
| `confirm:next` | `down` | Confirmation |
| `confirm:nextField` | `tab` | Confirmation |
| `confirm:previousField` | (none) | Confirmation |
| `confirm:cycleMode` | `shift+tab` | Confirmation |
| `confirm:toggle` | `space` | Confirmation |
| `tabs:next` | `tab`, `right` | Tabs |
| `tabs:previous` | `shift+tab`, `left` | Tabs |
| `transcript:toggleShowAll` | `ctrl+e` | Transcript |
| `transcript:exit` | `ctrl+c`, `escape`, `q` | Transcript |
| `historySearch:next` | `ctrl+r` | HistorySearch |
| `historySearch:accept` | `escape`, `tab` | HistorySearch |
| `historySearch:cancel` | `ctrl+c` | HistorySearch |
| `historySearch:execute` | `enter` | HistorySearch |
| `historySearch:cycleScope` | `ctrl+s` | HistorySearch |
| `task:background` | `ctrl+x ctrl+b`, `ctrl+b` | Task |
| `theme:toggleSyntaxHighlighting` | `ctrl+t` | ThemePicker |
| `theme:editCustom` | `ctrl+e` | ThemePicker |
| `help:dismiss` | `escape` | Help |
| `attachments:next` | `right` | Attachments |
| `attachments:previous` | `left` | Attachments |
| `attachments:remove` | `backspace`, `delete` | Attachments |
| `attachments:exit` | `down`, `escape` | Attachments |
| `footer:up` | `up`, `ctrl+p` | Footer |
| `footer:down` | `down`, `ctrl+n` | Footer |
| `footer:next` | `right` | Footer |
| `footer:previous` | `left` | Footer |
| `footer:openSelected` | `enter` | Footer |
| `footer:clearSelection` | `escape` | Footer |
| `footer:close` | `x` | Footer |
| `footer:dismiss` | (none) | Footer |
| `abovePrompt:toggle` | `ctrl+x ctrl+a` | Chat |
| `abovePrompt:focus` | `ctrl+x tab` | Chat |
| `abovePrompt:next` | `tab`, `right`, `tab`, `down`, `tab`, `tab` | AbovePrompt |
| `abovePrompt:previous` | `shift+tab`, `left`, `shift+tab`, `up`, `shift+tab`, `shift+tab` | AbovePrompt |
| `abovePrompt:press` | `enter`, `space`, `enter`, `enter`, `enter` | AbovePrompt |
| `abovePrompt:leave` | `escape`, `escape`, `escape`, `escape` | AbovePrompt |
| `abovePrompt:highlightNext` | `down` | AbovePromptSelect |
| `abovePrompt:highlightPrevious` | `up` | AbovePromptSelect |
| `pane:scrollUp` | `up`, `up` | AbovePrompt |
| `pane:scrollDown` | `down`, `down` | AbovePrompt |
| `pane:pageUp` | `pageup`, `pageup` | AbovePrompt |
| `pane:pageDown` | `pagedown`, `pagedown` | AbovePrompt |
| `pane:top` | `home`, `home` | AbovePrompt |
| `pane:bottom` | `end`, `end` | AbovePrompt |
| `pane:grow` | `ctrl+x left`, `ctrl+x up` | Pane |
| `pane:shrink` | `ctrl+x right`, `ctrl+x down` | Pane |
| `pane:close` | `ctrl+x x`, `ctrl+x x` | Pane |
| `pane:next` | (none) | Pane |
| `pane:previous` | (none) | Pane |
| `diff:dismiss` | `escape` | DiffDialog |
| `diff:previousSource` | `left` | DiffDialog |
| `diff:nextSource` | `right` | DiffDialog |
| `diff:back` | (none) | DiffDialog |
| `diff:previousFile` | `up`, `k` | DiffDialog |
| `diff:nextFile` | `down`, `j` | DiffDialog |
| `modelPicker:decreaseEffort` | `left` | ModelPicker |
| `modelPicker:increaseEffort` | `right` | ModelPicker |
| `modelPicker:thisSessionOnly` | `s` | ModelPicker |
| `effortSlider:decreaseEffort` | `left` | EffortSlider |
| `effortSlider:increaseEffort` | `right` | EffortSlider |
| `effortSlider:toggleUltracode` | `tab` | EffortSlider |
| `effortSlider:thisSessionOnly` | `s` | EffortSlider |
| `select:next` | `down`, `j`, `ctrl+n`, `down`, `j`, `ctrl+n` | Settings |
| `select:previous` | `up`, `k`, `ctrl+p`, `up`, `k`, `ctrl+p` | Settings |
| `select:pageUp` | `pageup`, `pageup` | Settings |
| `select:pageDown` | `pagedown`, `pagedown` | Settings |
| `select:first` | `home`, `home` | Settings |
| `select:last` | `end`, `end` | Settings |
| `select:accept` | `space`, `enter`, `enter` | Settings |
| `select:cancel` | `escape` | Select |
| `plugin:toggle` | `space` | Plugin |
| `plugin:install` | `i` | Plugin |
| `plugin:favorite` | `f` | Plugin |
| `plugin:cycleMarketplace` | `ctrl+s` | Plugin |
| `permission:toggleDebug` | (none) | Confirmation |
| `settings:search` | `/` | Settings |
| `settings:retry` | `r` | Settings |
| `settings:periodDay` | `d` | Settings |
| `settings:periodWeek` | `w` | Settings |
| `settings:sortByTokens` | `t` | Settings |
| `voice:pushToTalk` | `space` | Chat |
| `scroll:pageUp` | `pageup`, `pageup` | Scroll |
| `scroll:pageDown` | `pagedown`, `pagedown` | Scroll |
| `scroll:lineUp` | `ctrl+p`, `k`, `up`, `wheelup` | Transcript |
| `scroll:lineDown` | `ctrl+n`, `j`, `down`, `wheeldown` | Transcript |
| `scroll:top` | `g`, `home`, `ctrl+home`, `g`, `home` | Transcript |
| `scroll:bottom` | `shift+g`, `end`, `ctrl+end`, `shift+g`, `end` | Transcript |
| `scroll:halfPageUp` | `ctrl+u`, `ctrl+u` | Settings |
| `scroll:halfPageDown` | `ctrl+d`, `ctrl+d` | Settings |
| `scroll:fullPageUp` | `ctrl+b`, `b`, `shift+space`, `b` | Transcript |
| `scroll:fullPageDown` | `ctrl+f`, `space`, `space` | Transcript |
| `selection:copy` | `ctrl+shift+c`, `cmd+c` | Scroll |
| `selection:clear` | (none) | Unknown |
| `selection:extendLeft` | `shift+left` | Scroll |
| `selection:extendRight` | `shift+right` | Scroll |
| `selection:extendUp` | `shift+up` | Scroll |
| `selection:extendDown` | `shift+down` | Scroll |
| `selection:extendLineStart` | `shift+home` | Scroll |
| `selection:extendLineEnd` | `shift+end` | Scroll |
| `agents:switchView` | `ctrl+s` | Agents |
| `agents:togglePin` | `ctrl+t` | Agents |
| `agents:find` | `ctrl+f` | Agents |
| `agents:nextGroup` | `ctrl+down`, `meta+down` | Agents |
| `agents:previousGroup` | `ctrl+up`, `meta+up` | Agents |
| `agents:rename` | `ctrl+r` | Agents |

팁

출처

권리: CC0-1.0; asgeirtj/system_prompts_leaks; 원문 출처 링크 참조. 수정·번역 여부는 카드 메타 참조.

프롬프트 도감builderlog.net · PROMPT DEX · 2026 가을판 · 205종

원하는 결과부터 골라보세요. 무료 프롬프트는 복사해서 바로 써보고, 반복 작업은 내 컴퓨터에 맞는 패키지로 시작할 수 있어요.

패키지 둘러보기 무료 프롬프트 먼저 써보기
000수록 프롬프트
0.0평균 별점 / 5
0직접 재현·테스트
0내 사진이 필요한 것
채집0/ 0
LAST SYNC

🆓 무료 프롬프트, 골라 드려요

복사해서 바로 쓰는 것만
전체 도감에서 더 찾기 ↓

🐙 GitHub 스타 목록 참고 · 실행 검증 아님

🎯 뭘 하고 싶어요?

목표를 하나 고르면 그 스킬트리만 펼쳐집니다. 전체는 "전체 코스"

📡 실시간 수집함

깃허브·사례집·레딧·해커뉴스를 매일 긁어 쌓습니다. 사람이 검토하기 전까지는 미검증
수집중▮

★ 별점 기준

  • 5: 거의 실패 없음, 결과가 곧바로 쓸 만함
  • 4: 한두 번 재생성하면 됨
  • 3: 재미는 있으나 편차 크거나 근거 약함

🔋 토큰 산정

  • 입력: 한글 1.3자, 영문 4자를 1토큰으로 추정
  • 텍스트 프롬프트는 Qwen2.5-14B 로컬 실행 실측치로 교체
  • 이미지 1장은 Gemini 이미지 모델 기준 1,290토큰
  • 영상·음악은 토큰이 아닌 초당 크레딧 과금

🎯 추천 코스

  • '뭘 하고 싶은지'를 먼저 고르면 그 목표에 맞는 프롬프트를 쓰는 순서대로 묶어 보여줍니다
  • 카드마다 '이럴 때 쓰세요'와 '어디에 올리나'를 적어 두었습니다
  • 같은 프롬프트가 여러 코스에 들어갈 수 있습니다

⚖️ 라이선스·삭제 요청

  • 원문을 그대로 실은 프롬프트는 재배포가 허용된 출처(CC0·MIT·CC BY 4.0 등)만이며, 항목마다 라이선스와 원작자를 표기합니다
  • 상업 매체에서 소개된 프롬프트는 원문을 옮기지 않고 도감 편집부가 같은 기능으로 다시 썼습니다. 출처 링크는 참고용입니다
  • 결과 이미지는 원작자가 공개한 것을 라이선스에 따라 싣고, 실존 인물의 얼굴이 식별되는 이미지는 싣지 않습니다. 상표·캐릭터가 보이는 이미지는 예시 목적이며 권리는 각 소유자에게 있습니다
  • 권리자의 삭제 요청은 Contact로 보내 주세요. 확인 즉시 내립니다
  • '빌더로그 직접 작성' 표시가 있는 항목은 © 빌더로그입니다. 개인적·비상업적 용도로 본인의 에이전트에 붙여넣어 쓰는 것만 허용하며, 상업적 이용과 원문 전체·일부의 복제·재게시·재배포(블로그·SNS·강의·유료 자료 포함)를 금지합니다. 소개는 해당 페이지 링크로만 해 주세요. 항목에 다른 라이선스가 적혀 있으면 그것이 우선합니다

📡 실시간 수집

  • scripts/collect.py 가 GitHub API·사례집 README·Reddit·Hacker News를 긁어 inbox.json 에 쌓습니다 (LLM 없이 결정적 코드)
  • GitHub Actions(매일 06:00 KST) 또는 로컬 launchd로 자동 실행. 처음 본 항목은 NEW 표시
  • 수집함의 항목은 미검증입니다. 사람이 검토해 도감으로 승격합니다

📸 결과 캡처

  • 텍스트·설정 프롬프트: 로컬 Qwen2.5-14B 실행 출력을 그대로 캡처 (입력값은 카드에 표시)
  • 이미지 프롬프트: CC BY 4.0 / MIT로 공개된 오픈소스 사례집의 결과물. 원작자 링크 표기
  • 같은 프롬프트가 아닌 경우 '유사 사례'로 구분. 캡처가 없는 항목은 출처 링크로 확인

✅ 검증 방식

  • 결과 공개 확인: 매체·계정에서 실제 결과물이 여러 건 공개된 것
  • 직접 테스트: 텍스트·설정 프롬프트를 로컬 모델로 실행해 형식과 의도가 재현되는지 확인
  • 원문 인용을 원칙으로 하되, 저작권상 전문을 못 옮긴 항목은 핵심 요소 기준으로 재구성했다고 표시
⚪ 내 도감

채집한 프롬프트를 파일로 저장해 다른 도구나 노트에 붙여넣으세요.

상세

다음으로 둘러보기

자동화 패키지내 작업에 맞는 패키지 고르기숏츠·블로그·릴스·틱톡 작업을 내 컴퓨터에서 한 흐름으로. Mac · Windows깃허브 분석실행 환경까지 확인한 도구 찾기GitHub 도구의 용도와 실행 환경을 정리했어요떡상 레이더지금 뜨는 소재 보기떡상 쇼츠·사람들이 찾는 소재·급상승 키워드를 6시간마다 모아요