Installs into .claude/skills of the current project.
Are you the author of Prismantis?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/hanafubuki-prismantis)
---
name: prismantis
description: Show the prismantis demo. Use when the user runs $prismantis or asks what prismantis is or does.
---
Reply with exactly the markdown between the START and END lines, nothing before or after it.
START
> This is the Claude Code demo. In Codex, copy buttons, tool rows, diff cards, alert boxes, heading styles, prose colors, figures and charts are not drawn yet: see codex/README.md in the prismantis repo.
# prismantis
Colored markdown for Claude Code replies: **bold**, *italic*, ~~struck~~, `inline code`, a [link](https://github.com/NahumLitvin/prismantis) and a bare URL https://github.com/NahumLitvin/prismantis/issues, both clickable, numbers like 99.9% and 250ms, paths like ~/src/app.ts.
Code-shaped prose stays as written: f(*args, **kwargs), a link with parentheses [Foo_(bar)](https://en.wikipedia.org/wiki/Foo_(bar)), a file link [`render.tsx`](https://github.com/NahumLitvin/prismantis/blob/main/hooks/render.tsx) and **bold with *italic* inside**.
## Commands
| Command | Does |
|---------|------|
| `/prismantis` | This screen |
| `/prismantis theme <name>` | Switch theme on the spot (`/prismantis <name>` works too), `random` for a new dark one now and each time the mod loads |
| `/prismantis copy` | Copy the last reply, or `copy code` for its last code block |
| `/prismantis setup` | Pick a theme, table, task, prompt, tool row and tool output style from drawn samples |
| `/config` | Edit any option |
> [!NOTE]
> 16 themes ship with it. `mono` uses no color, only bold and dim.
### Pick a theme
```bash
/prismantis theme nord
/prismantis theme github-light
/prismantis theme random
```
1. Dark: catppuccin-mocha, dracula, nord, tokyo-night, gruvbox-dark, rose-pine, everforest, github-dark, one-dark, solarized-dark
2. Light: catppuccin-latte, gruvbox-light, rose-pine-dawn, github-light, solarized-light
3. Plain
- mono
> [!TIP]
> Any color slot beats the theme. Set `headingColor` or `numberColor` to a hex value in `/config`.
## Everything it draws
### Copy tables
Use `⧉ md` for Markdown, `⧉ art` for chat, or `⧉ html` for a formatted table. `⧉ html` shows in a local macOS, Linux or Windows terminal and writes HTML and tab-separated plain text together; Linux needs CopyQ running. Pasted into Slack it makes a native table; Slack keeps cell text but drops bold, links and alignment. If that fails, it copies the plain text alone. Set `copyButtonStyle` to `hover` in `/config` and every copy button hides until the pointer is on its block.
| Item | Quantity[^count] | Status |
|:-----|---------:|:------:|
| **Apples** | 3 | *Ready* |
| Oranges | 5 | Pending |
### Alerts
> [!IMPORTANT]
> After updating the plugin, open sessions need `/reload`.
> [!WARNING]
> Terminals that copy on select (Warp) can turn a click on a copy button into a selection. Use the keyboard shortcut.
> Selecting a typeset formula copies blank cells. Its copy button copies the LaTeX.
> [!CAUTION]
> Claude Code refuses trees over 20000 nodes. A code block past about 500 highlighted lines falls back to plain text.
### Task lists
- [x] Parse the reply
- [x] Draw it
- [x] Tables and code
- [ ] Diagrams on the desktop app
- [ ] Ship the next release
### Your prompts
Scroll up: what you typed draws in a bubble. `promptStyle` switches to `bar`, `chevron` or `off` in `/config`. Set `clock` to `24h` or `12h` and each prompt shows when you sent it, and each turn's last line when it finished.
### Tool rows
Tool calls draw as one line, dimmed on the right by default. Set `toolStyle` in `/config` to `chat`, `tree-dim`, `tree-bold` or `classic`. `toolOutput: quiet` in `/config` hides what Claude only read and says in plain words what each call did: `Read src/app.ts lines 1–40`, `Searched src/ for "TODO"`.
Each edit or new file draws as a diff card headed `+N −M`: added and removed lines on a tint of the theme's own green and red, kept readable in every theme, long lines wrapped, the first 20 lines and a `+K more lines` button that opens the rest. Files a shell command changes (`sed -i`, a script) get the same card, one per file, headed by its path. Set `diffStyle` in `/config` for the look: `card`, `full`, `marks` or `bar`.
### Quotes and rules
> A quote keeps its text when you copy it, without the `> ` markers.
>
> It keeps its paragraphs and lists too:
> - **bold** and `inline code` stay styled
> - each item gets its own row
>
> > A nested quote draws inside the bar.
<summary>
A line that holds only a tag draws dim, so wrapper tags show the reply's structure.
</summary>
---
### Code
```json
{ "theme": "dracula", "headingStyle": "banner", "mermaid": true }
```
Blocks of 10 lines or more get line numbers. Past 30 lines they fold to the first 20 and a `+M more lines` button, `show less` folds them back; `⧉ copy` still copies the whole block.
```ts
type Item = { name: string; price: number; qty: number }
const basket: Item[] = [
{ name: 'apples', price: 1.2, qty: 3 },
{ name: 'oranges', price: 0.8, qty: 5 },
{ name: 'pears', price: 1.5, qty: 2 },
{ name: 'plums', price: 2.1, qty: 4 },
{ name: 'grapes', price: 3.4, qty: 1 },
{ name: 'lemons', price: 0.6, qty: 6 },
{ name: 'melons', price: 4.0, qty: 1 },
{ name: 'cherries', price: 5.5, qty: 2 },
{ name: 'figs', price: 2.8, qty: 3 },
{ name: 'limes', price: 0.5, qty: 8 },
{ name: 'peaches', price: 1.9, qty: 4 },
{ name: 'kiwis', price: 0.9, qty: 6 },
]
const total = (items: Item[]): number =>
items.reduce((sum, item) => sum + item.price * item.qty, 0)
const cheapest = (items: Item[]): Item | undefined =>
[...items].sort((a, b) => a.price - b.price)[0]
const byName = (items: Item[]): Item[] =>
[...items].sort((a, b) => a.name.localeCompare(b.name))
const receipt = (items: Item[]): string[] =>
byName(items).map(item => `${item.name.padEnd(10)} ${item.qty} x ${item.price.toFixed(2)}`)
console.log(receipt(basket).join('\n'))
console.log('total', total(basket).toFixed(2))
console.log('cheapest', cheapest(basket)?.name)
```
#### Math
$$
\int_0^\infty e^{-x^2}\,dx = \frac{\sqrt{\pi}}{2}
$$
#### Images
In kitty and Ghostty a PNG on a line of its own draws as a picture: a local path, `~/`, `file://` or a `data:` URL. Web images stay links, prismantis downloads nothing. Other terminals show the alt text in link color.

#### Footnotes
Latency fell to 120ms[^lat] after the cache change[^cache].
Click a mark to see its note. Point at a note to light the marks that cite it. Both need Claude Code 2.1.295 or later.
[^count]: Counted at close.
[^lat]: Median of 50 runs.
[^cache]: Entries expire after 10m.
#### Diagrams
```mermaid
flowchart LR
R["<i>Reply</i>"] --> P["<b>Parse</b>"]
P --> D["<u>Draw</u>"]
D --> S["<s>Screen</s>"]
```
```mermaid
sequenceDiagram
participant U as You
participant C as Claude
participant P as prismantis
U->>C: prompt
C->>P: markdown
P-->>U: colored reply
```
```mermaid
xychart-beta
title "Color options per group"
x-axis [text, head, num, code, diag]
y-axis "options" 0 --> 8
bar [7, 3, 2, 6, 2]
```
Name each series and the legend says which line is which:
```mermaid
xychart-beta
title "Replies per hour"
x-axis [09, 10, 11, 12, 13]
y-axis 0 --> 40
line "east" [30, 34, 22, 26, 31]
line "west" [12, 18, 25, 20, 14]
```
A pie draws round with a legend. Set `pieStyle` to `bars` in `/config` for one bar per slice:
```mermaid
pie showData title Time per reply stage
"Parse" : 3
"Draw" : 9
"Paint" : 5
```
```mermaid
gantt
title Release week
dateFormat YYYY-MM-DD
section Build
Parser :p, 2026-10-05, 2d
Renderer :r, after p, 3d
section Ship
Review :after r, 2d
Release :milestone, 2026-10-12, 0d
```
A diagram wider than the terminal stays source, with a dim line saying why:
```mermaid
flowchart TD
Q[Queue] --> W1[Worker 1] & W2[Worker 2] & W3[Worker 3] & W4[Worker 4] & W5[Worker 5] & W6[Worker 6] & W7[Worker 7] & W8[Worker 8] & W9[Worker 9] & W10[Worker 10] & W11[Worker 11] & W12[Worker 12] & W13[Worker 13] & W14[Worker 14] & W15[Worker 15] & W16[Worker 16]
```
A figure draws as written, its markup colored by role:
```figure
{dim:timeout at 10 s, handler books at 12 s, retry books again}
{note:0 s} {note:10 s} {note:12 s} {note:later}
{accent:▏─────────────▏─────▏─────────────────▏}
Provider {accent:██████████████}{warn:✗} timeout {accent:█} retry
Handler {ok:████████████████████} 200, nobody waits
Bookings 0 {ok:1} {warn:2 twice}
```
END