CtrlK
BlogDocsLog inGet started
Tessl Logo

gamussa/presenterm

Create terminal-based presentation slides using presenterm's markdown format with themes, diagrams, code highlighting, and more

100

Does it follow best practices?

Validation for skill structure

Overview
Skills
Evals
Files
name:
presenterm
description:
Create terminal-based presentation slides using presenterm's markdown format. presenterm renders markdown files as slides in the terminal with themes, code highlighting, images, column layouts, speaker notes, and more. Use this skill whenever the user wants to create a presenterm presentation, terminal slides, markdown slides for presenterm, or mentions "presenterm" in any context. Also trigger when the user asks for "terminal presentation", "markdown presentation", "slide deck in markdown", or wants to convert content into presenterm format. Even if the user just says "create a presentation" and they have used presenterm before or the context suggests terminal-based slides, use this skill.

presenterm Slide Creator

Create presentations in presenterm's markdown format — a tool that renders markdown files as rich slides directly in the terminal.

Output: A single .md file that the user runs with presenterm slides.md.

For detailed references, see:

  • Mermaid diagrams — flowcharts, sequences, ER, state, class diagrams
  • D2 diagrams — architecture, styling, SQL tables, containers
  • Themes and styling — theme overrides, footers, color palettes, colored text
  • Design patterns — narrative arc, gradual consistency, antipatterns

Slide Structure

Frontmatter

---
title: "My Presentation Title"
sub_title: Optional subtitle
author: Author Name
theme:
  name: dark
---

Generates an introduction slide automatically. All fields optional. For multiple authors use authors: array.

Slide Separator

<!-- end_slide -->

Not ---. Use <!-- end_slide --> consistently.

Slide Titles (Setext Headers)

My Slide Title
===

Setext headers render centered with special styling. ATX headers (# H1) render as normal headings within a slide — NOT as slide titles.


Comment Commands

CommandPurpose
<!-- end_slide -->End current slide, start next
<!-- pause -->Content below appears on next keypress
<!-- jump_to_middle -->Vertically center subsequent content
<!-- new_line --> / <!-- new_lines: N -->Insert blank lines
<!-- column_layout: [3, 2] -->Define column layout with proportional widths
<!-- column: 0 -->Switch to column (zero-indexed)
<!-- reset_layout -->End column layout
<!-- incremental_lists: true -->Each bullet on separate keypress
<!-- alignment: center -->Align text: left, center, right
<!-- speaker_note: Your note -->Speaker note (visible in presenter mode) — no colons or em dashes inside the note text
<!-- font_size: 2 -->Font size 1-7 (kitty terminal only)
<!-- no_footer -->Hide footer on this slide
<!-- include: other.md -->Include content from another file

User comments (ignored): <!-- // note --> or <!-- comment: note -->


Column Layouts

<!-- column_layout: [2, 1] -->
<!-- column: 0 -->
Left content (2/3 width)
<!-- column: 1 -->
Right content (1/3 width)
<!-- reset_layout -->

Sizing: [2, 1] = total 3 units. Use [1, 1] for halves, [1, 3, 1] to center.


Code Blocks

Standard fenced code blocks with language identifiers. Key features:

Selective highlighting: ```rust {1,3,5-7} highlights specific lines.

Dynamic highlighting: ```rust {1,3|5-7|all} — each group on successive keypress.

Attributes: +exec (executable), +line_numbers, +no_background, +render (diagrams/LaTeX), +exec_replace, +acquire_terminal.

Hidden lines: Prefix with # to hide from display but include in execution.

External snippets:

```file +exec +line_numbers
path: snippet.rs
language: rust
start_line: 5
end_line: 10
```

Images and Diagrams

Static images: ![alt text](path/to/image.png) Image sizing: ![image:width:50%](photo.png) or ![image:width:300](photo.png)

Diagrams: Use +render attribute on fenced code blocks.

  • Mermaid (mermaid +render) — flowcharts, sequences, ER, state, class, Gantt, pie, mindmap. See references/mermaid.md.
  • D2 (d2 +render) — architecture, styled diagrams, SQL tables, containers. See references/d2.md.
  • LaTeX/Typst (latex +render / typst +render) — inline formulas.

Use D2 for polished architecture diagrams. Use Mermaid for variety (Gantt, mindmaps, pie charts).

Diagram sizing: Keep 5-10 nodes max. Use LR for wide, TD for tall. Match dark themes.


Themes

Set in frontmatter: theme: { name: catppuccin-mocha }. Safe defaults: catppuccin-mocha, dark. Use terminal-dark to inherit terminal colors.

Available: catppuccin-{latte,frappe,macchiato,mocha}, dark, light, gruvbox-dark, terminal-{dark,light}, tokyonight-{storm,moon,day,night}.

For overrides, footers, palettes, and colored text see references/themes.md.


Pauses and Incremental Content

Manual: <!-- pause --> between content blocks. Lists: <!-- incremental_lists: true --> before bullet list.


Running and Exporting

presenterm slides.md             # Development mode (hot reload)
presenterm -p slides.md          # Presentation mode
presenterm -x slides.md          # Enable code execution
presenterm -e slides.md          # Export to PDF
presenterm -E slides.md          # Export to HTML
presenterm -P slides.md          # Publish speaker notes

Config File Location (Platform-Specific)

presenterm reads config.yaml from a platform-specific directory — not ~/.config on macOS:

OSConfig directory
macOS~/Library/Application Support/presenterm/
Linux~/.config/presenterm/ (or $XDG_CONFIG_HOME/presenterm/)

If mermaid +render or d2 +render blocks show as plain code, the renderers are likely installed but the config is missing or in the wrong location. Create config.yaml in the correct directory:

snippet:
  render:
    threads: 4

mermaid:
  scale: 2

d2:
  scale: 2

Requires mmdc (Mermaid CLI) and d2 installed and on $PATH. Install with:

npm install -g @mermaid-js/mermaid-cli   # mmdc
brew install d2                           # d2

Options in Frontmatter

options:
  end_slide_shorthand: true    # Allow --- as slide separator
  implicit_slide_ends: true    # Auto-end slides on headings
  command_prefix: "cmd:"       # Require prefix for commands

Complete Example

---
title: "**Streaming** Data with _Kafka_"
sub_title: A quick introduction
author: Viktor Gamov
theme:
  name: catppuccin-mocha
  override:
    footer:
      style: template
      right: "{current_slide} / {total_slides}"
      height: 2
---

Why Streaming?
===

Every business is becoming a real-time business.

<!-- pause -->

Batch processing means **hours of delay**.
Event streaming means **milliseconds**.

<!-- end_slide -->

What is Kafka?
===

<!-- incremental_lists: true -->

* **Producers** send events to topics
* **Consumers** read events from topics
* **Brokers** store and replicate the data

<!-- end_slide -->

<!-- jump_to_middle -->

Demo Time
===

<!-- end_slide -->

Producer Code
===

```java {1-3|5-8|10-13|all}
import org.apache.kafka.clients.producer.*;

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");

Producer<String, String> producer =
    new KafkaProducer<>(props);

producer.send(new ProducerRecord<>(
    "my-topic", "key", "value"
));

producer.close();
<!-- end_slide -->

Summary

<!-- alignment: center -->

Thank you! Questions?

---

## Writing Guidelines

1. **Start with frontmatter** — Always include title, author, and theme.
2. **Use `<!-- end_slide -->`** consistently — Don't mix separators.
3. **Setext headers for titles** — `Title\n===` not `# Title`.
4. **Narrative Arc** — Setup, confrontation, resolution. See [design patterns](references/design-patterns.md).
5. **Progressive reveal** — Use pauses, incremental lists, dynamic highlighting.
6. **Column layouts** for side-by-side content.
7. **`<!-- jump_to_middle -->`** for section breaks.
8. **Speaker notes** — Script demos and mark cuttable sections. **Never use `:` (colons) or `—` (em dashes) inside speaker note text** — presenterm parses the comment value as YAML and will throw `mapping values are not allowed` errors. Use `-` (hyphen) instead of both.
9. **One idea per slide** — Avoid bullet walls.
10. **Dynamic code highlighting** — `{1-3|5-8|all}` to walk through code.
11. **Diagrams over text** — Mermaid for flowcharts, D2 for architecture.
12. **Match theme colors** in diagrams.
13. **Save as `.md`** — User runs with `presenterm filename.md`.

Install with Tessl CLI

npx tessl i gamussa/presenterm
Workspace
gamussa
Visibility
Public
Created
Last updated
Publish Source
CLI
Badge
gamussa/presenterm badge