Skip to content

docs: add icon-jetbrains skill for authoring JetBrains plugin icons - #12711

Merged
kirillk merged 19 commits into
mainfrom
add-icon-jetbrains-skill
Jul 31, 2026
Merged

docs: add icon-jetbrains skill for authoring JetBrains plugin icons#12711
kirillk merged 19 commits into
mainfrom
add-icon-jetbrains-skill

Conversation

@kirillk

@kirillk kirillk commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Context

Creating and reviewing IntelliJ plugin icons for the JetBrains package requires knowing a lot of implicit conventions — canvas sizes per icon role, the New UI color palette, light/dark variant rules, how the IntelliJ SVG loader recolors by literal hex match, and where icons live in this repo. That knowledge wasn't written down anywhere, so agents and contributors had to rediscover it each time and frequently got it wrong (off-palette colors, missing _dark variants, currentColor, wrong sizes).

This PR adds an icon-jetbrains skill that captures those rules in one place and wires it into the JetBrains docs so it gets used whenever someone creates, modifies, or reviews an icon.

What this is for

  • Give agents and contributors a single, authoritative reference for authoring and reviewing JetBrains plugin SVG icons.
  • Encode the non-obvious constraints that keep icons theming correctly: canonical palette, light/dark pairs, per-role canvas sizes, kebab-case naming for plugin-local icons, and explicit fills instead of currentColor/CSS.
  • Make the skill discoverable: the JetBrains AGENTS.md and the plugin architecture docs point at it, and defer to it as the source of truth for icon authoring rather than duplicating (and drifting from) sizing/palette guidance.

The skill is documentation only — it changes no runtime behavior.

Gaps from the upstream skill that we fixed

This skill started as a port of JetBrains' upstream .agents/skills/icons skill, which is written for the IntelliJ Community monorepo. Adapting it to this repo — and applying it to our actual icons (see the follow-up icon PRs) — surfaced several gaps that we corrected here so the guidance is both accurate for this repo and more correct in general:

  • Made the examples real and verifiable. Upstream references icons by their expui/... paths and left some example path data truncated. Our examples use complete, valid path data and name real files in this repo, so an agent can grep and confirm them.
  • Added HiDPI/@2x guidance. Clarified that SVGs are resolution-independent (ship one vector per theme, never @2x raster variants) and that fine sub-pixel detail blurs at fractional scale — a point the upstream skill doesn't make.
  • Added stroke-scaling and round-cap rules the upstream skill lacks. Applying the skill to rescale imported (20/24-grid) icons revealed two failure modes it never warns about: (1) blanket-normalizing every stroke-width to 1 fattens hairlines and geometry-coupled strokes (badge rings), and (2) round caps overshoot the endpoint by half the stroke width, so endpoints at the canvas edge clip. The skill now teaches scaling non-primary strokes with the geometry, keeping endpoints within 0.5..15.5, and a dedicated "adapting/rescaling an existing icon" workflow.
  • Dropped the mandatory Apache/JetBrains copyright header rule, which doesn't apply to Kilo-authored assets in this repo.

How to Test

Manual/local verification

  • Reviewed the skill, palette, and example files render and read correctly.
  • Verified every SVG example snippet parses as valid XML.
  • Confirmed the JetBrains AGENTS.md and plugin architecture doc reference the skill and no longer duplicate its sizing/palette guidance.

Reviewer test steps

  1. Open .kilo/skills/icon-jetbrains/SKILL.md and confirm the roles, palette, naming, and placement guidance is coherent and matches this repo (flat icons/ folder, kebab-case names).
  2. Confirm packages/kilo-jetbrains/AGENTS.md and the JetBrains architecture doc point to the skill for icon authoring.

Blocked checks and substitute verification

  • None.

Checklist

  • Issue linked above, or exception explained
  • Tests/verification described
  • Screenshots/video included for visual changes, or marked N/A
  • Changeset considered for user-facing changes
  • I personally reviewed the diff and can explain the changes, including any AI-assisted work.

Comment thread .kilo/skills/icon-jetbrains/SKILL.md Outdated
Comment thread .kilo/skills/icon-jetbrains/SKILL.md Outdated
Comment thread .kilo/skills/icon-jetbrains/SKILL.md Outdated
Comment thread .kilo/skills/icon-jetbrains/SKILL.md Outdated
Comment thread .kilo/skills/icon-jetbrains/examples.md Outdated
@kilo-code-bot

kilo-code-bot Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: 1 Issue Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 1
Issue Details (click to expand)

SUGGESTION

File Line Issue
.kilo/skills/icon-jetbrains/SKILL.md 62 New round-cap rule: 0.5..15.5 is looser (not "stricter") than the 1 px keep-out on line 61, is only correct for stroke-width="1" on a 16×16 canvas (rule 6 allows 1.5/2; roles table has 20/14/12/9 canvases), and stroke-linejoin does not overshoot path endpoints — only stroke-linecap does. Same 0.5..15.5 figure repeats at lines 117 and 130.
Files Reviewed (1 file)
  • .kilo/skills/icon-jetbrains/SKILL.md - 1 issue

Notes

Incremental review of 5bd6fc0..2c8fe02 (1 file, 15 added lines). Docs-only; no runtime behavior, no CI-relevant changes.

What the new commit adds, and how it holds up:

  • Rule 6 stroke-width caveat (line 20) and the matching "common mistake" (line 129) are accurate and consistent with each other — blanket-normalizing every stroke-width to 1 does fatten hairlines and break fill-flush badge rings.
  • New "Adapting or rescaling an existing icon" section (lines 110-119) is internally consistent with rule 6 and rule 7: scale geometry and stroke widths uniformly first, re-weight only the primary glyph stroke, then treat pixel-grid snapping as a separate manual pass. No contradictions with the roles table or the placement guidance.
  • New round-cap bullet (line 62) is directionally right but numerically over-specified; see the inline comment.

No findings carried forward from the previous pass — all prior inline threads are on lines outside this incremental diff and GitHub reports them as outdated.

Fix these issues in Kilo Cloud

Previous Review Summaries (7 snapshots, latest commit 5bd6fc0)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit 5bd6fc0)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (2 files)
  • .kilo/skills/icon-jetbrains/SKILL.md
  • .kilo/skills/icon-jetbrains/examples.md

Notes

Incremental review of 049e270..5bd6fc0 (2 files, ~14 changed lines). Docs-only; no runtime behavior.

All four findings from the previous pass are resolved:

  • The tool-window quartet example now names the files that actually exist (kilo.svg / kilo_dark.svg + kilo@20x20.svg / kilo@20x20_dark.svg), and golden rule 8 swapped the non-existent tool-window-chat.svg for kilo@20x20.svg.
  • Rule 7 no longer claims fractional scales are "snapped by the IntelliJ renderer"; it now just says fine sub-pixel detail blurs at 125%/150%, which is accurate and consistent with keeping geometry simple.
  • examples.md placement text and the SKILL.md references entry now both acknowledge the icons/views/ subfolder, matching lines 26/45/106 and the real resource tree.
  • The self-contradicting note defending verbatim glyph reuse between the error circle and the warning triangle was removed.

Also confirmed: kebab-case is the correct rule for this repo — every SVG under packages/kilo-jetbrains/frontend/src/main/resources/icons/ (and icons/views/) is kebab-case, and the stacked camelCase rename PR #12713 is closed unmerged, so the earlier camelCase/kebab-case thread is settled.

The open thread on examples.md:171 (warning-triangle glyph copied byte-identically from the error badge) is outside the incremental diff and was not re-raised here.

Previous review (commit 049e270)

Status: 4 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 4
Issue Details (click to expand)

SUGGESTION

File Line Issue
.kilo/skills/icon-jetbrains/SKILL.md 15 Quartet example tool-window-chat.svg / tool-window-chat@20x20.svg doesn't exist; the only real quartet is the kilo.svg / kilo@20x20.svg set (same stale name on line 22)
.kilo/skills/icon-jetbrains/SKILL.md 21 New HiDPI sentence claims fractional scales (125%/150%) are "snapped by the IntelliJ renderer", which conflicts with IntelliJ's fractional JBUIScale support; rule 7 now bundles three unrelated requirements
.kilo/skills/icon-jetbrains/examples.md 3 "Place generated icons flat into .../icons/" contradicts SKILL.md lines 26/45/106, which route chat/session view icons to icons/views/
.kilo/skills/icon-jetbrains/examples.md 178 Note still asserts the ! glyph is correctly reused between the circle error badge and the warning triangle, then restates the re-balance rule that reuse violates (tracked in the active thread on line 171)
Files Reviewed (2 files)
  • .kilo/skills/icon-jetbrains/SKILL.md - 2 issues
  • .kilo/skills/icon-jetbrains/examples.md - 2 issues

Notes

Incremental review of 55ea1c2..049e270 (2 files, ~45 changed lines). Docs-only change; no runtime behavior.

Resolved since the last pass:

  • The upstream-only expui/ tree, *IconMappings.json mapping shape, and $INTELLIJ_REPO lookup steps are gone from both files, so the workflow no longer instructs readers to use paths that don't exist here. The roles table and "Where the SVGs live" now describe only this repo's flat icons/ layout.
  • Golden rule 1 and the naming rule now use kebab-case consistently, matching every SVG in packages/kilo-jetbrains/frontend/src/main/resources/icons/.

Fix these issues in Kilo Cloud

Previous review (commit 55ea1c2)

Status: 2 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 2
Issue Details (click to expand)

SUGGESTION

File Line Issue
.kilo/skills/icon-jetbrains/SKILL.md 15 Quartet example tool-window-chat.svg / tool-window-chat@20x20.svg doesn't exist in the repo; the real quartet is the kilo.svg / kilo@20x20.svg pair set
.kilo/skills/icon-jetbrains/examples.md 180 New note claims the ! glyph is shared verbatim between the circle error badge and the warning triangle, then closes by restating the re-balance rule that the reuse violates; upstream source isn't cited
Files Reviewed (3 files)
  • .kilo/skills/icon-jetbrains/SKILL.md - 1 issue
  • .kilo/skills/icon-jetbrains/examples.md - 1 issue
  • packages/kilo-jetbrains/AGENTS.md - no issues

Notes

Incremental review of a1c7108..55ea1c2 (3 files, ~4 changed lines).

Resolved since the last pass:

Fix these issues in Kilo Cloud

Previous review (commit a1c7108)

Status: 1 Issue Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 1
Issue Details (click to expand)

SUGGESTION

File Line Issue
.kilo/skills/icon-jetbrains/SKILL.md 22 camelCase rule claims it "matches the naming convention used by all icons" in the plugin icons folder, but every SVG there is still kebab-case and #12713 (open, targeting this branch) is what renames them; the same line then says the opposite
Files Reviewed (1 file)
  • .kilo/skills/icon-jetbrains/SKILL.md - 1 issue

Notes

Incremental review of aa79e0f..a1c7108 — the only change is two lines in .kilo/skills/icon-jetbrains/SKILL.md.

Resolved since the last pass:

Two earlier suggestions remain open as active inline comments on files untouched by these commits (duplicate-identical warning-dark glyph paths in examples.md, and the expui//*IconMappings.json deferral bullet in packages/kilo-jetbrains/AGENTS.md); they are not re-reported here.

Fix these issues in Kilo Cloud

Previous review (commit aa79e0f)

Status: 4 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 3
Issue Details (click to expand)

WARNING

File Line Issue
.kilo/skills/icon-jetbrains/SKILL.md 22 Filename rule flipped to kebab-case, reversing the maintainer's "keep the requirements in the skills" decision and conflicting with the open stacked PR #12713 that renames all plugin icons to camelCase; the skill's own examples (addFile.svg, toolWindowChat.svg) are still camelCase

SUGGESTION

File Line Issue
.kilo/skills/icon-jetbrains/SKILL.md 128 Workflow step 6 says "flat ... no role subfolder", contradicting lines 26/45 which route in-view icons to icons/views/ (where most plugin SVGs actually live)
.kilo/skills/icon-jetbrains/examples.md 173 Warning-dark glyph paths are byte-identical to the error-badge glyph in section 5, suggesting they came from status/error.svg rather than warning_dark.svg; geometry isn't re-balanced for the triangle
packages/kilo-jetbrains/AGENTS.md 585 Bullet defers expui/ placement and *IconMappings.json wiring to the skill, which states neither applies in this repo; the com.intellij.iconMapper mention is now gone from both files
Files Reviewed (4 files)
  • .kilo/skills/icon-jetbrains/SKILL.md - 2 issues
  • .kilo/skills/icon-jetbrains/examples.md - 1 issue
  • packages/kilo-docs/pages/contributing/architecture/jetbrains-plugin.md - 0 issues
  • packages/kilo-jetbrains/AGENTS.md - 1 issue

Notes

Incremental review of fa8d5d1..aa79e0f (docs/skill files only). Resolved since the last pass: truncated d="…" path data in examples.md is now complete and parseable; the duplicated/conflicting sizing table in packages/kilo-jetbrains/AGENTS.md now defers to the skill; the expui/ and *IconMappings.json instructions are scoped as upstream-only with the real flat repo path documented; and the icon-skill pointer in jetbrains-plugin.md moved into its own ## Icon skill section. Verified in-repo that packages/kilo-jetbrains/ contains no expui/ tree, no *IconMappings.json, and no iconMapper registration, so the upstream-only scoping is accurate.

Fix these issues in Kilo Cloud

Previous review (commit fa8d5d1)

Status: 4 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 3
Issue Details (click to expand)

WARNING

File Line Issue
.kilo/skills/icon-jetbrains/SKILL.md 22 camelCase filename rule still conflicts with the kebab-case convention used by all 47 icons in packages/kilo-jetbrains/frontend/src/main/resources/icons/

SUGGESTION

File Line Issue
.kilo/skills/icon-jetbrains/SKILL.md 30 Roles table sizing still disagrees with the tool-window sizes in packages/kilo-jetbrains/AGENTS.md (cross-links now exist in both directions, but the numbers differ)
.kilo/skills/icon-jetbrains/examples.md 70 Path data truncated with in 8 places while the file presents the blocks as copyable templates
packages/kilo-docs/pages/contributing/architecture/jetbrains-plugin.md 129 Icon-skill pointer inserted inside ## Development checks, splitting the Java-21 note from the checks table it introduces
Files Reviewed (5 files)
  • .kilo/skills/icon-jetbrains/SKILL.md - 2 issues
  • .kilo/skills/icon-jetbrains/examples.md - 1 issue
  • .kilo/skills/icon-jetbrains/palette.md - 0 issues
  • packages/kilo-docs/pages/contributing/architecture/jetbrains-plugin.md - 1 issue
  • packages/kilo-jetbrains/AGENTS.md - 0 issues

Notes

Incremental review of ce8781c..fa8d5d1. Resolved since the last pass: the Apache 2.0 header mandate was removed, and workflow step 1 now delegates source lookup to the ## IntelliJ Platform Source Lookup section in packages/kilo-jetbrains/AGENTS.md instead of the nonexistent community/platform/icons/src/expui/ path. Note that the remaining expui/<role>/ placement instructions (lines 45-46, 123-124) and *IconMappings.json steps still describe a layout that does not exist in this repo, where plugin icons live flat under frontend/src/main/resources/icons/; those lines are unchanged by these commits, so they are reported here as context only. Docs-only change, no CI-covered concerns raised.

Fix these issues in Kilo Cloud

Previous review (commit ce8781c)

Status: 5 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 3
SUGGESTION 2
Issue Details (click to expand)

WARNING

File Line Issue
.kilo/skills/icon-jetbrains/SKILL.md 22 Mandatory Apache 2.0 header contradicts the skill's own header-free examples and all 47 existing plugin icons; also a licensing decision, not a formatting rule
.kilo/skills/icon-jetbrains/SKILL.md 23 camelCase filename rule conflicts with the kebab-case convention used by every icon in packages/kilo-jetbrains/frontend/src/main/resources/icons/
.kilo/skills/icon-jetbrains/SKILL.md 118 Workflow step 1 points at community/platform/icons/src/expui/, which does not exist in this repo; no expui/ tree or *IconMappings.json exists under packages/kilo-jetbrains/ either

SUGGESTION

File Line Issue
.kilo/skills/icon-jetbrains/SKILL.md 31 Roles table overlaps and partly disagrees with the existing icon guidance in packages/kilo-jetbrains/AGENTS.md (classic tool-window size); cross-link to avoid drift
.kilo/skills/icon-jetbrains/examples.md 70 Path data truncated with in 8 places while the file presents the blocks as copyable templates
Files Reviewed (3 files)
  • .kilo/skills/icon-jetbrains/SKILL.md - 4 issues
  • .kilo/skills/icon-jetbrains/examples.md - 1 issue
  • .kilo/skills/icon-jetbrains/palette.md - 0 issues

Notes

Docs-only change; no CI-covered concerns raised. The palette tables were spot-checked for internal consistency against the light→dark swap map and matched. Findings are all about applicability of the copied upstream guidance to this repo, where the JetBrains plugin loads flat kebab-case icons from frontend/src/main/resources/icons/ rather than an expui/ tree.

Fix these issues in Kilo Cloud


Reviewed by claude-opus-5 · Input: 26 · Output: 7.4K · Cached: 631.5K

Review guidance: REVIEW.md from base branch main

Comment thread .kilo/skills/icon-jetbrains/SKILL.md Outdated
Comment thread packages/kilo-docs/pages/contributing/architecture/jetbrains-plugin.md Outdated
@Kilo-Org Kilo-Org deleted a comment from kilo-code-bot Bot Jul 30, 2026
kilo-code-bot Bot added 6 commits July 30, 2026 19:41
…thoring

Remove duplicated sizing, dark variant, and palette guidance from
packages/kilo-jetbrains/AGENTS.md that conflicted with the skill
(e.g. 13×13 classic vs the correct 16×16 legacy tool-window size).

AGENTS.md now explicitly defers to the skill for all SVG authoring
details and retains only Kotlin/runtime integration guidance.
…of truth

Remove duplicated sizing, dark variant, and New UI support details from
AGENTS.md that conflicted with the authoritative Icon roles table in the
icon-jetbrains skill. Replace with a single reference pointing to the skill.
- Change golden rule #8 from camelCase to kebab-case to match the
  actual convention used by all 47+ icons in the plugin
- Acknowledge the icons/views/ subfolder in the roles intro and
  placement section
Comment thread .kilo/skills/icon-jetbrains/SKILL.md Outdated
Comment thread .kilo/skills/icon-jetbrains/SKILL.md Outdated
Comment thread .kilo/skills/icon-jetbrains/examples.md
Comment thread packages/kilo-jetbrains/AGENTS.md Outdated
kilo-code-bot Bot added 4 commits July 30, 2026 20:08
- Revert golden rule #8 from kebab-case back to camelCase, aligning
  with the decision in PR #12713 which renames all plugin icons to
  camelCase.
- Update workflow step 6 to mention the icons/views/ subfolder for
  in-view chat/session icons, fixing the contradiction with lines 26/45.
Comment thread .kilo/skills/icon-jetbrains/SKILL.md Outdated
Comment thread .kilo/skills/icon-jetbrains/SKILL.md Outdated
Comment thread .kilo/skills/icon-jetbrains/examples.md Outdated
@kirillk kirillk changed the title docs: add JetBrains icon skill docs: add icon-jetbrains skill for authoring JetBrains plugin icons Jul 30, 2026
Comment thread .kilo/skills/icon-jetbrains/SKILL.md Outdated
Comment thread .kilo/skills/icon-jetbrains/SKILL.md Outdated
Comment thread .kilo/skills/icon-jetbrains/examples.md Outdated
- **One semantic meaning per icon.** A status badge, an accent dot, or a "+" overlay is fine; two unrelated glyphs in one icon is not.
- **Optical centering, not geometric.** Plus/arrow/refresh glyphs sit slightly above center; round badges (class, method, status) are centered on `(cx=8, cy=8)` for 16×16 and `(cx=10, cy=10)` for 20×20.
- **Outer keep-out**: leave at least **1 px** of empty padding on each side of a 16×16 icon (so meaningful geometry lives within `1..15`). For 20×20 use **2 px** of padding. Stripe icons must stay visually balanced inside their 20×20 cell.
- **Round caps overshoot the endpoint.** A round `stroke-linecap`/`stroke-linejoin` extends **half the stroke width past the endpoint**, so a 1px round-capped stroke ending at `0` or `16` is clipped by the canvas. Keep stroke endpoints within `0.5..15.5` (this is stricter than the fill keep-out).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: The 0.5..15.5 bound only holds for 1px strokes, and it is looser — not stricter — than the keep-out rule above it.

Three things a reader following this literally will get wrong:

  1. "stricter than the fill keep-out" is inverted. Line 61 requires meaningful geometry within 1..15 (1 px padding per side). 0.5..15.5 is a wider range, so it permits geometry the keep-out forbids — a 1px stroke centered at 0.5 visually spans 0..1 and touches the canvas edge, consuming the entire padding. Better to frame it as a different constraint (stroke centerline vs. rendered extent), or reconcile it with the 1 px keep-out.
  2. The number is stroke-width dependent. Half the stroke width is 0.5 only at stroke-width="1". Rule 6 explicitly allows 1.5 and 2 for badge hero glyphs, where the safe range becomes 0.75..15.25 and 1..15. Phrasing it as "keep endpoints at least half the stroke width in from each edge" stays correct for all three weights and also generalizes to the non-16 canvases in the roles table (20×20, 14×14, 12×12, 9×9) — as written, 0.5..15.5 here and the same figure at lines 117 and 130 silently assume 16×16 with a 1px stroke.
  3. stroke-linejoin doesn't overshoot an endpoint. A round join is inscribed within the stroke width at a vertex between two segments; only stroke-linecap extends past a path endpoint (stroke-miterlimit is what governs spikes at joins). Dropping stroke-linejoin from this bullet keeps the claim accurate.

Reply with @kilocode-bot fix it to have Kilo Code address this issue.

@Drixled
Drixled self-requested a review July 31, 2026 15:28
@Drixled
Drixled requested review from Drixled and removed request for Drixled July 31, 2026 15:29
@kirillk
kirillk enabled auto-merge July 31, 2026 16:15
@kirillk
kirillk merged commit ed8d537 into main Jul 31, 2026
31 of 32 checks passed
@kirillk
kirillk deleted the add-icon-jetbrains-skill branch July 31, 2026 16:25
t7tran pushed a commit to t7tran/kilocode that referenced this pull request Aug 14, 2026
docs: add icon-jetbrains skill for authoring JetBrains plugin icons
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants