IntelliJ `AnAction` 클래스를 구현하거나 수정하고 `plugin.xml`에 등록하도록 안내합니다. 표시 이름과 설명은 메시지 번들에 두고, 필요하면 아이콘을 설정하며, 이벤트 코루틴 범위에서 중단 함수를 실행해 동기식 처리로 IDE가 멈추는 일을 방지합니다.
- IDE 메뉴에 새 동작 추가
- 동작 등록이나 아이콘 변경
- 동작 이름과 설명 정리
IntelliJ New UI용 SVG 아이콘을 만들거나 검토하고, 밝은 테마와 어두운 테마 버전을 정리합니다. 용도에 맞는 캔버스 크기, 색상, 도형, 파일 위치와 Classic 아이콘 매핑도 확인합니다.
Create or review IntelliJ New UI SVG icons and theme variants.
실행 점수 미검증
설치 방법 보기이 스킬은 IntelliJ New UI에서 사용할 SVG 아이콘의 제작과 검토를 돕습니다. 아이콘 용도에 맞는 캔버스 크기, 파일 위치와 이름, 선과 도형의 표현을 확인하고 공식 팔레트에 따른 밝은 테마와 어두운 테마 버전을 준비하도록 안내합니다. Classic UI 아이콘을 대체할 때는 기존 파일을 보존하고 *IconMappings.json에 대응 관계를 추가하는 방법도 다룹니다. 도구 창 아이콘은 크기가 다른 파일들이 같은 모티프를 사용하는지도 확인합니다.
IntelliJ 플러그인이나 플랫폼에 아이콘을 추가하거나, 기존 아이콘의 테마 지원과 New UI 표시를 검토할 때 유용합니다. 규칙에 따라 SVG의 색상과 크기가 어떻게 처리되는지 확인할 때도 사용할 수 있습니다.
아이콘은 SVG로 만들며 이미지, 그라데이션, 필터, 포함 글꼴은 사용하지 않습니다. Apache 2.0 저작권 주석을 보존합니다. 색상과 배치 세부 사항은 함께 제공되는 palette.md 등을 참고합니다.
이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.
AI가 SKILL.md의 내용에서 주의가 필요한 작업과 도입 전제를 확인했습니다. 점수는 실제로 실행한 결과(실행 검증)만으로 매깁니다.
점수에는 넣지 않았습니다. 2026년 10월 28일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Guidance for authoring SVG icons for the New UI.
Background: the IDE maintains Classic UI and New UI in parallel. Code branches with ExperimentalUI.isNewUI(); icons follow the same split. Old icons stay in their original resource folders for Classic-UI compatibility. New-UI icons live under expui/ folders and are substituted for the old ones at runtime by icon mappers.
addFile.svg) and one for the dark theme with the _dark suffix (addFile_dark.svg). Geometry must be identical between them; only the palette swaps.
name.svg / name_dark.svg) and a 20×20 New-UI stripe variant (name@20x20.svg / name@20x20_dark.svg), they must share the same metaphor. The stripe is only one surface — the 16×16 base also appears in Search Everywhere, Find Action, context menus, the Services tool window, recent locations, and the View ▸ Tool Windows menu. Changing only the @20x20 leaves users seeing two different icons for the same tool window depending on where they encounter it. Always update all four files together (and the same applies to plugin-local icons like toolWindowChat.svg + toolWindowChat@20x20.svg).<path>, <rect>, <circle>, <line>, <polyline>, <polygon>). Text must be converted to outlines.fill="none" on the root <svg> and set fill / stroke explicitly per shape — never rely on CSS or currentColor.stroke-width="1", stroke-linecap="round", stroke-linejoin="round" (or stroke-miterlimit="10" for hard joins). Heavier strokes are reserved for hero glyphs inside a circle badge (e.g. status checkmarks) and use stroke-width="1.5" or "2".x.5) and fills on whole pixels so the icon stays crisp at 1× rendering.| Role | Canvas | Filename pattern | Reference dir |
|---|---|---|---|
| Action icons (menus, popups, toolbars) | 16×16 | name.svg + name_dark.svg | expui/actions/, expui/general/ |
| Tree node icons (PSI, structure view) | 16×16 | name.svg + name_dark.svg | expui/nodes/ |
| Tool-window stripe icons (legacy/16) | 16×16 | name.svg + name_dark.svg | expui/toolwindows/ |
| Tool-window stripe icons (New UI) | 20×20 | name@20x20.svg + name@20x20_dark.svg | expui/toolwindows/ |
| Main toolbar (New UI) | 20×20 | name@20x20.svg + name@20x20_dark.svg | expui/general/, expui/run/, expui/toolbar/ |
| Editor gutter icons | 14×14 (small marks 12×12, 9×9) | name.svg + name_dark.svg | expui/gutter/ |
| Status bar / inline status | 16×16 | name.svg + name_dark.svg | expui/status/, expui/inline/ |
| Breakpoint marks | 14×14 (12×12 for sub-marks) | name.svg + name_dark.svg | expui/breakpoints/ |
| Run-config tags & disclosure chevrons | 16×16 (chevron*.svg may be 9×9 to 16×16) | name.svg + name_dark.svg | expui/run/, expui/general/ |
| Welcome/onboarding & logos (system) | 16, 20, 28, 48 (per surface) | name.svg + name_dark.svg | expui/ide/, expui/welcome/ |
When in doubt, find a sibling icon in the same folder and copy its width / height / viewBox.
Two placements exist and both are valid — pick based on whether a Classic-UI icon already exists:
_dark sibling) under an expui/<role>/ resource root. Callers reference it directly through the plugin's generated <Plugin>Icons class.expui/<role>/ path, and add a mapping entry to the nearest *IconMappings.json. At runtime, when ExperimentalUI.isNewUI() is true, the mapper substitutes the New UI file for the Classic one so no caller has to change its icon reference.Mapping-file shape (excerpt from community/platform/icons/src/PlatformIconMappings.json):
{
"expui": {
"actions": {
"addFile.svg": "actions/addFile.svg",
"checked.svg": ["actions/checked.svg", "actions/setDefault.svg"]
}
}
}
Key = path relative to the expui/ root (the New UI file). Value = the Classic path(s) that should resolve to it. A single New UI icon may back multiple Classic paths.
<!-- Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<!-- shapes, ordered back-to-front -->
</svg>
The dark variant is the same file with light-palette colors swapped for their dark-theme partner — see palette.md. Never change geometry between the two.
(cx=8, cy=8) for 16×16 and (cx=10, cy=10) for 20×20.1..15). For 20×20 use 2 px of padding. Stripe icons must stay visually balanced inside their 20×20 cell.nodes/class.svg): a light-tinted fill at radius 6.5 with a stroke in the accent color, plus a glyph filled with the same accent.
<circle cx="8" cy="8" r="6.5" fill="<accent-bg-light>" stroke="<accent-light>"/> then glyph fill="<accent-light>".fill="<accent-bg-dark>" stroke="<accent-dark>" and glyph filled with <accent-dark>.#6C707E light / #CED0D6 dark) at stroke-width="1". Use #818594 (light) / #6F737A (dark) for "secondary" stroke glyphs like dropdown chevrons.white.#5E4D33 inside #F2C55C warning) — never plain white.actions/addFile.svg): the base glyph uses the neutral gray, and the small "modifier" (+, ✕, ↻, gear) uses the primary blue accent. Light gray + blue accent → dark gray + blue accent in the dark variant.*_stroke.svg): outline-only, same neutral stroke color, no fills.The full lookup is in palette.md. Most icons only need:
| Role | Light | Dark |
|---|---|---|
| Primary stroke / fill | #6C707E | #CED0D6 |
| Secondary stroke | #818594 | #6F737A |
| Disabled / faint fill | #EBECF0 | #43454A |
| Accent — Blue | #3574F0 | #548AF7 |
| Accent — Blue (bg) | #EDF3FF / #E7EFFD | #25324D |
| Accent — Red | #DB3B4B | #DB5C5C |
| Accent — Red (bg) | #FFF7F7 | #402929 |
| Status — Error fill | #E55765 | #DB5C5C |
| Status — Warning fill | #FFAF0F | #F2C55C |
| Status — Success fill | #55A76A | #57965C |
| Accent — Green | #208A3C | #57965C |
| Accent — Green (bg) | #F2FCF3 | #253627 |
| Accent — Orange | #E66D17 | #C77D55 |
| Accent — Orange (bg) | #FFF4EB | #45322B |
| Accent — Yellow/Gold | #FFAF0F / #C27D04 | #F2C55C / #D6AE58 |
| Accent — Purple | #834DF0 | #B589EC |
| Accent — Purple (bg) | #FAF5FF | #2F2936 |
| White on dark badge | white | matching muted-dark fill (e.g. #5E4D33) |
Do not use plain #000000 or off-the-palette grays.
community/platform/icons/src/expui/<role>/ and read their SVG sources. Mirror their stroke/fill mix.width/height/viewBox matching the role, and fill="none" on <svg>._dark filename and swap each color for its dark-theme partner from the palette mapping. Keep paths byte-identical otherwise.expui/<role>/ resource folder; reference it from the plugin's <Plugin>Icons class.expui/<role>/, add a mapping entry to the nearest *IconMappings.json. Callers keep referencing the old path.currentColor, CSS, or <style> blocks. The IntelliJ icon loader requires explicit colors on every shape so it can do palette-based recoloring._dark variant. The icon will look fine in Light theme then turn invisible in Dark.#000) or pure-white (#FFF) fills outside the status-badge glyph pattern. They break under accent recoloring.*IconMappings.json entry when replacing a Classic icon — the Classic icon will keep showing in New UI mode.community/platform/icons/src/expui/ — when reviewing, diff your new icon against a sibling there.Icons guidelines.svg is a design sheet (visual reference only; not machine-readable). When it disagrees with the folder, trust the folder.아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
IntelliJ `AnAction` 클래스를 구현하거나 수정하고 `plugin.xml`에 등록하도록 안내합니다. 표시 이름과 설명은 메시지 번들에 두고, 필요하면 아이콘을 설정하며, 이벤트 코루틴 범위에서 중단 함수를 실행해 동기식 처리로 IDE가 멈추는 일을 방지합니다.
IntelliJ JPS 테스트 모듈을 Bazel로 옮기고 Bazel에서만 발생하는 실패를 조사하는 안내서입니다. 의존성, 플러그인, 테스트 데이터와 runfiles 문제를 확인하고 생성된 대상과 이전된 테스트를 검증합니다.
IntelliJ 프로젝트 규칙에 맞춰 Kotlin과 Java 코드를 작성하거나 검토합니다. 언어 선택, 서식, 봉인 타입, 스레드 주석, 제어 흐름 예외 처리를 확인합니다.
이 가이드는 IntelliJ 프로젝트의 변경 사항을 목적별로 나누고 프로젝트 형식에 맞는 커밋 메시지를 작성하도록 돕습니다. 티켓이 있으면 번호와 변경 설명을, 없으면 레이블과 하위 시스템명을 사용하며 필요에 따라 이유와 판단을 본문에 담습니다.
여러 Python 타입 검사기로 코드 조각이나 파일의 타입 추론과 오류 판정을 비교합니다. 도구별 결과, 실행 시간, 진단 내용을 Markdown 보고서로 모아 저장할 수 있습니다.
Compose Desktop 화면을 구성할 때 컴포저블은 렌더링을 맡고 프레젠터나 코디네이터는 앱 결정을 맡도록 구조를 정리합니다. 상태 소유권, Effect, 재사용 컴포넌트 API, 지연 목록 키, 애니메이션과 성능을 개별 UI 변경에 맞춰 살펴봅니다.