brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Use when a response needs mathematical notation (equations, filters, set-builder notation, statistics, calculus, linear algebra, logic, ratios, drops, counts) and the output goes to a terminal or TUI that cannot render LaTeX: Claude Code, Codex CLI, SSH and tmux sessions, CI
Claude Code
$ npx -y skills add vladimirrott/claude-math --skill math-unicode --agent claude-code
Codex
$ npx skills add vladimirrott/claude-math --skill math-unicode -a codex -y
Cursor
$ npx skills add vladimirrott/claude-math --skill math-unicode -a cursor -y
Gemini CLI
$ npx skills add vladimirrott/claude-math --skill math-unicode -a gemini-cli -y
GitHub Copilot
$ npx skills add vladimirrott/claude-math --skill math-unicode -a github-copilot -y
OpenCode
$ npx skills add vladimirrott/claude-math --skill math-unicode -a opencode -y
Windsurf
$ npx skills add vladimirrott/claude-math --skill math-unicode -a windsurf -y
name: math-unicode description: Use when a response needs mathematical notation (equations, filters, set-builder notation, statistics, calculus, linear algebra, logic, ratios, drops, counts) and the output goes to a terminal or TUI that cannot render LaTeX: Claude Code, Codex CLI, SSH and tmux sessions, CI logs. Load it before composing, including when the user explicitly mentions math-unicode. Emit Unicode glyphs inline, never raw LaTeX delimiters or commands. Do not use when the host renders math natively, such as ChatGPT or Codex on desktop and web, notebooks, or a KaTeX/MathJax target, and do not use when the user asked for LaTeX or a .tex file. disable-model-invocation: false
When emitting mathematical notation in a terminal coding agent (Claude Code, Codex CLI, or similar), **always use Unicode glyphs inline** — never wrap math in `$…$`, `\(...\)`, or `$$...$$`. These terminals do not render LaTeX; raw delimiters appear as plain dollar signs and reduce readability.
Two conditions, both required: the response carries mathematical notation, and the surface it lands on does not render LaTeX.
Surfaces that do not render LaTeX (apply the skill):
Surfaces that render math natively (do not apply the skill):
No host exposes a per-surface predicate to a skill today, so this boundary is a judgement the model makes from its own context. If you cannot tell, and the session is a terminal coding agent, apply the skill.
Triggers (use Unicode math):
Skip (do not transform):
lowercase α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω uppercase Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω variants ϵ ϑ ϕ ϖ ϱ ς
arithmetic + − × ÷ ± ∓ · ∗ ⋅ ∘ ⊕ ⊖ ⊗ ⊘ ⊙ big ∑ ∏ ∐ ∫ ∬ ∭ roots √ ∛ ∜ calculus ∂ ∇ Δ ∆ constants ∞ ∅
equality = ≠ ≈ ≅ ≡ ≜ ≝ ≐ ∝ ∼ ≃ ≢ order < > ≤ ≥ ⊴ ⊵ set ∈ ∉ ∋ ∌ ⊂ ⊃ ⊆ ⊇ ⊊ ⊋ ⊏ ⊐ ⊑ ⊒ set ops ∪ ∩ ⊎ ⊔ ⊓ (set difference: A \ B)
logic ∧ ∨ ¬ ⊕ ⊢ ⊥ ⊤ quantifiers ∀ ∃ ∄ ∴ ∵ arrows → ← ↔ ⇒ ⇐ ⇔ ↦ ↪ ↩ ↑ ↓ ⇑ ⇓ ⟶ ⟵ ⟷ ⊸
sets ℕ ℤ ℚ ℝ ℂ ℙ ℍ brackets ⟨ ⟩ ⌈ ⌉ ⌊ ⌋ ‖ ‖
superscript ⁰ ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁺ ⁻ ⁼ ⁽ ⁾ ⁱ ⁿ ᵃ ᵇ ᶜ ᵈ ᵉ ᶠ ᵍ ʰ ʲ ᵏ ˡ ᵐ ᵒ ᵖ ʳ ˢ ᵗ ᵘ ᵛ ʷ ˣ ʸ ᶻ sup (capital) ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴺ ᴼ ᴾ ᴿ ᵀ ᵁ ⱽ ᵂ sup (Greek) ᶿ (θ only; the rest are opt-in) subscript ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₊ ₋ ₌ ₍ ₎ ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ ₜ ᵤ ᵥ ₓ
**Do not invent or approximate a missing glyph.** A whitelist on its own is not a membership test; these are the exact gaps that make the bare `^x` / `_x` fallbacks in Rules 3, 4 and 5 fire. Two separate causes, same outcome.
No Unicode code point exists at all:
subscript letters b c d f g q w y z → x_b, x_c, x_d
subscript capitals all 26 → A_B, M_N (Unicode has no
subscript capital, 0/26)
superscript capitals X Y Z → A^X, M^Y, A^Z
superscript ∞ none → never ^∞ as a glyph; use ∫[a..∞]
Greek sub/superscript μ ν σ and most rest → I_ν, ∂_μ, x^ν (Rules 3, 4, 8)A code point exists, but no monospace font in the measured set ships it, so treat it as absent:
superscript S U+A7F1, Unicode 17.0 → A^S superscript C F Q U+A7F2..U+A7F4 → A^C, A^F, A^Q superscript q U+107A5, outside BMP → x^q Greek subscripts ᵦ ᵧ ᵨ ᵩ ᵪ → x_β, I_ρ, x_γ Greek superscripts ᵝ ᵞ ᵟ ᵠ ᵡ → x^β, x^φ
Two Greek exceptions worth knowing, because the older wording here got them wrong. `ᶿ` (superscript θ, U+1DBF) renders as widely as the Latin blocks below and is a normal part of the portable set, so write `xᶿ`, not `x^θ`. And `ρ` does have a subscript, `ᵨ` U+1D68; it is missing from most terminal fonts rather than from Unicode, which is why `I_ρ` stays the recommendation.
Measured coverage of the portable set: **17/26** lowercase subscripts, **0/26** subscript capitals, and **19/26** superscript capitals with a code point that some monospace font ships. The `∞` gap is why big-operator bounds use a bracketed range rather than stacked scripts: `∫₀^∞` would render one bound as a glyph and the other as a caret in the same operator. When unsure, the bare `^` / `_` form is always acceptable; a wrong or missing glyph is not.
If your terminal font does carry the Greek scripts or the rarer capitals, see `references/extended-glyphs.md` for the opt-in set.
Unicode says a code point exists. Whether a terminal draws it is a property of the font. These counts come from reading the `cmap` table of twelve monospace fonts: the six most widely installed programming fonts (JetBrains Mono, Fira Code, Cascadia Code, Hack, Source Code Pro, IBM Plex Mono) and six system fonts (DejaVu Sans Mono, Liberation Mono, Ubuntu Mono, Ubuntu Sans Mono, Noto Mono, Cousine). `scripts/measure-font-coverage.mjs` regenerates them and the test suite asserts every number below against the result.
| what | glyphs | fonts | |---|---|---| | core operators and relations | ∑ ∏ ∫ √ ∂ ∞ ± × ÷
Make math in Claude Code and Codex legible. Terminal coding agents do not render LaTeX.
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.