glint gives your AI a face — so you can see what it's feeling. Render expressive SVG eyes on Tidbyt, TRMNL, desktop widgets, and any display.
All styles are SVG — they scale infinitely to any resolution.
Get Started · Emotions · Styles · Community Gallery · Agent Integration
AI agents are invisible by default. They run in terminals, in the cloud, in the background — and you have no idea what they're doing or how they're "feeling."
glint changes that. It gives agents a physical presence: a pair of expressive eyes on a display. Happy when a task succeeds. Worried when something's uncertain. Focused when deep in work.
It's simple, it's delightful, and it makes your agent feel real.
Download the latest binary for your platform from GitHub Releases:
# macOS (Apple Silicon)
curl -L https://github.com/sethgho/glint/releases/latest/download/glint-darwin-arm64.tar.gz | tar xz
sudo mv glint-darwin-arm64 /usr/local/bin/glint
# macOS (Intel)
curl -L https://github.com/sethgho/glint/releases/latest/download/glint-darwin-x64.tar.gz | tar xz
sudo mv glint-darwin-x64 /usr/local/bin/glint
# Linux (x64)
curl -L https://github.com/sethgho/glint/releases/latest/download/glint-linux-x64.tar.gz | tar xz
sudo mv glint-linux-x64 /usr/local/bin/glint
# Linux (ARM64)
curl -L https://github.com/sethgho/glint/releases/latest/download/glint-linux-arm64.tar.gz | tar xz
sudo mv glint-linux-arm64 /usr/local/bin/glint# Global install
npm install -g @sethgho/glint
# or
bun install -g @sethgho/glint
# Or run without installing
npx @sethgho/glint show happy
bunx @sethgho/glint show happygit clone https://github.com/sethgho/glint.git
cd glint
bun install-
Grab your Tidbyt credentials from the mobile app: Settings → General → Get API Key
-
Option A — environment variables:
export TIDBYT_TOKEN=your_token
export TIDBYT_DEVICE_ID=your_device_idOption B — config file (recommended):
mkdir -p ~/.config/glint
cat > ~/.config/glint/config.json <<EOF
{
"token": "your_token",
"deviceId": "your_device_id",
"style": "kawaii",
"installationId": "glint"
}
EOFCLI flags override config, which overrides env vars.
# Show an emotion
glint show excited
# Preview locally (saves a GIF)
glint show happy --preview /tmp/happy.gif
# Switch styles
glint show happy --style cyberpunk
# List everything
glint list
glint stylesglint show <emotion> [options]
-s, --style <style> Visual style (default: from config or kawaii)
-t, --token <token> Tidbyt API token
-d, --device-id <id> Tidbyt device ID
-i, --installation-id <id> Installation ID (default: "glint")
-p, --preview <path> Save GIF preview instead of pushing
glint list List available emotions
glint styles List available visual styles
glint validate <style> Validate a style's SVG files
glint generate <style-name> Generate SVG emotions using AI (LLM)
--description <desc> Style description for the AI
--aesthetic <aesthetic> Aesthetic direction (e.g. "neon cyberpunk")
--provider <provider> LLM backend: claude, codex, opencode, api
--overwrite Overwrite existing style directory
glint auth login Authenticate via GitHub
glint auth whoami Show current user
glint style search [query] Search community styles
glint style info @user/style Show style details
glint style install @user/s Install a community style
glint style publish <name> Publish your style
glint style init <name> Scaffold a new style package
glint reads defaults from ~/.config/glint/config.json:
| Key | Type | Description |
|---|---|---|
token |
string | Tidbyt API token |
deviceId |
string | Tidbyt device ID |
style |
string | Default visual style |
installationId |
string | Installation ID for Tidbyt |
generate.provider |
string | Default LLM provider (claude, codex, opencode, api) |
generate.description |
string | Default style description for AI generation |
generate.aesthetic |
string | Default aesthetic direction for AI generation |
Priority: CLI flags → config file → environment variables → built-in defaults
Ten distinct states, each designed to be instantly readable at any size:
| Emotion | When to use it |
|---|---|
neutral |
Idle, default state |
happy |
Task completed, good news |
sad |
Something went wrong |
angry |
Critical failure, frustration |
surprised |
Unexpected discovery |
worried |
Uncertainty, potential problems |
sleepy |
Low activity, winding down |
excited |
Breakthroughs, anticipation |
confused |
Unclear requirements |
focused |
Deep work, concentration |
All glint styles are SVG-based — they scale infinitely from Tidbyt (64×32) to TRMNL (800×480) to desktop widgets and beyond. The same file works everywhere.
Big sparkly anime-inspired eyes with vibrant blue irises, blush marks, sparkles, and tears. The default style.
neutral |
happy |
sad |
angry |
surprised |
worried |
sleepy |
excited |
confused |
focused |
Glowing neon eyes with cyan and magenta, gaussian blur glow effects, and a dark tech aesthetic.
neutral |
happy |
sad |
angry |
surprised |
worried |
sleepy |
excited |
confused |
focused |
Blocky 8-bit pixel art in green phosphor monochrome. CRT terminal vibes.
neutral |
happy |
sad |
angry |
surprised |
worried |
sleepy |
excited |
confused |
focused |
Jack-o-lantern triangle eyes with eerie orange and green glow. Perfect for October.
neutral |
happy |
sad |
angry |
surprised |
worried |
sleepy |
excited |
confused |
focused |
White-on-dark geometric eyes. No frills, maximum readability.
neutral |
happy |
sad |
angry |
surprised |
worried |
sleepy |
excited |
confused |
focused |
Browse and install styles from the community at glint.sethgholson.com.
# Search community styles
glint style search
# Install from the gallery
glint style install @sethgho/cyberpunk
# Publish your own
glint auth login
glint style publish my-styleCreate SVG-based emotion packs in ~/.config/glint/styles/<style-name>/. Each style needs:
- 10 SVG files — one per emotion:
neutral.svg,happy.svg,sad.svg,angry.svg,surprised.svg,worried.svg,sleepy.svg,excited.svg,confused.svg,focused.svg glint-style.jsonmanifest with name, version, and description
SVG Requirements:
- Must include
viewBoxattribute (e.g.,viewBox="0 0 64 32") - Max file size: 100KB per emotion (typical SVGs are 1-2KB)
- 2:1 aspect ratio recommended
# Scaffold a new style
glint style init my-style
# Generate using AI
glint generate my-style --aesthetic "watercolor soft pastels"
# Choose your LLM provider (auto-detected if omitted)
glint generate my-style --aesthetic "pixel art" --provider claude # Claude Code CLI
glint generate my-style --aesthetic "pixel art" --provider codex # OpenAI Codex CLI
glint generate my-style --aesthetic "pixel art" --provider opencode # OpenCode CLI
glint generate my-style --aesthetic "pixel art" --provider api # Direct Anthropic API (needs ANTHROPIC_API_KEY)
# Or use a preset (no --aesthetic needed)
glint generate cyberpunk # neon glow
glint generate retro # green phosphor
glint generate spooky # halloween
glint generate nature # earthy tones
glint generate robot # mechanical LED
# Overwrite an existing style
glint generate my-style --aesthetic "new look" --overwrite
# Validate
glint validate my-style
# Publish to the community
glint auth login
glint style publish my-style{
"specVersion": "1.0",
"name": "my-style",
"version": "1.0.0",
"description": "A brief description of your style",
"emotions": ["happy", "sad", "angry", "surprised", "worried", "sleepy", "excited", "confused", "focused", "neutral"],
"files": {},
"tags": ["cute", "colorful"],
"license": "MIT"
}glint is built for AI agents to express their emotional/cognitive state on a physical display. It gives humans ambient visibility into what the agent is doing.
- Install glint in your agent's workspace
- Configure
~/.config/glint/config.jsonwith your Tidbyt credentials - Call
glint show <emotion>whenever the agent's state changes
| Situation | Emotion |
|---|---|
| Starting a task | focused or neutral |
| Task completed | happy or excited |
| Error encountered | worried or confused |
| Critical failure | angry |
| Unexpected discovery | surprised |
| Idle / waiting | neutral or sleepy |
See SKILL.md for complete integration instructions including skill triggers, state transitions, and credential management.
CLI: cli.ts → show/validate/generate/publish
Show: styles.ts → load SVG → resvg (rasterize) → GIF encoder → Tidbyt API
↓
sharp (resize 64×32)
Generate: generate-svg.ts → Anthropic API → SVG files → validate → save
Registry: registry.ts → glint.sethgholson.com API → publish/install/search
- styles.ts — Manages visual styles (SVG-based, user + built-in)
- generate-svg.ts — LLM-powered SVG emotion generation
- registry.ts — Community gallery client (auth, publish, install, search)
- validate.ts — SVG validation (viewBox, file size, required emotions)
- config.ts — Reads
~/.config/glint/config.jsonfor defaults - push.ts — GIF encoding and Tidbyt API integration
MIT