Agent skill

Termui

by Arindam200 in Arindam200/termui

Quick reference for TermUI components, hooks, and theming. An agent skill from Arindam200/termui.

MITAuto-check passedFrontend & Design

Install Termui

skills CLI
$ npx skills add Arindam200/termui --skill termui -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Arindam200/termui termui --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Arindam200/termui.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/termui .claude/skills/termui && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
termui
GitHub stars
141
Token cost
~2.8k tokens
SKILL.md length
305 words
Files
2 (incl. references)
Skills in repo
2
Repo updated
First seen
Licence
MIT

At a glance

Quick reference for TermUI components, hooks, and theming. An agent skill from Arindam200/termui.

  • Working inside an existing TermUI project and needing to look up props
  • SKILL.md covers CLI, Component Categories, Hooks and Theming, plus 4 more sections
  • Calls npx; needs ANTHROPIC_API_KEY
  • Hook signatures

What it does

Termui is an agent skill from Arindam200/termui. Quick reference for TermUI components, hooks, and theming. Use when working inside an existing TermUI project and needing to look up props, hook signatures, theme tokens, or the CLI commands. Pairs with the cli-creator skill for building new CLIs from scratch. Trigger for questions like "what props does Table take", "how does useAsync work", "what are the theme tokens", "which spinner styles are available", "how do I stream AI output", "how do I build a chat UI", or any lookup about TermUI's API surface —…

Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/components.md`).

It sits in Frontend & Design, covering Theming and dark mode and Design tokens. The repository describes itself as: TypeScript terminal UI framework. The licence is MIT.

When your agent uses it

  • Working inside an existing TermUI project and needing to look up props
  • Hook signatures
  • The CLI commands
  • Questions like what props does Table take

Example prompts

  • “what props does Table take”
  • “how does useAsync work”
  • “what are the theme tokens”
  • “/termui”

Requirements

  • Node.js
  • A credential in ANTHROPIC_API_KEY

What it can do on your machine

Read from SKILL.md and the folder at commit 44de57b. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • ANTHROPIC_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Termui loads about 2.8k tokens when it runs, and up to ~9.2k if it reads all its reference files. Until then it costs about 155 tokens; SKILL.md has 305 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~155
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~9.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Arindam200/termui at commit 44de57b, republished under its MIT licence (© Arindam200). 305 words, ~2,791 tokens.

Download SKILL.mdSave it as .claude/skills/termui/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
termui
description
Quick reference for TermUI components, hooks, and theming. Use when working inside an existing TermUI project and needing to look up props, hook signatures, theme tokens, or the CLI commands. Pairs with the cli-creator skill for building new CLIs from scratch. Trigger for questions like "what props does Table take", "how does useAsync work", "what are the theme tokens", "which spinner styles are available", "how do I stream AI output", "how do I build a chat UI", or any lookup about TermUI's API surface — including the AI components (StreamingText, ChatThread, ToolCall, ThinkingBlock, DiffView, useChat).

TermUI Reference

TermUI is a TypeScript terminal UI framework built on React/Ink. 101 components + AI components, 8 themes, 12 hooks. Shadcn-style: npx termui add <component> copies source files into your project.

Always wrap the app root in <ThemeProvider>. Components read colors from the theme via useTheme().

CLI

bash
npx termui create my-app            # scaffold a new project (4 templates: minimal, cli, dashboard, wizard)
npx termui init                     # setup termui in an existing project
npx termui add spinner table select # add components (copies source into project)
npx termui list                     # browse all components
npx termui theme dracula            # switch project theme
npx termui preview <component>      # live preview

Component Categories

See references/components.md for full props on every component.

CategoryComponents
LayoutBox Stack Grid ScrollView Columns Center Divider Spacer AspectRatio
TypographyText Heading Code Link Badge Tag Markdown StreamingText JSONView Gradient BigText Digits
InputTextInput TextArea PasswordInput NumberInput SearchInput MaskedInput EmailInput PathInput
SelectionSelect MultiSelect RadioGroup Checkbox CheckboxGroup Toggle TreeSelect TagInput ColorPicker
DataTable DataGrid List VirtualList Tree DirectoryTree KeyValue Definition Card Panel DiffView
FeedbackSpinner ProgressBar ProgressCircle StatusMessage Toast Alert Banner Skeleton
NavigationTabs TabbedContent Breadcrumb Pagination CommandPalette Menu Sidebar
OverlaysModal Dialog Drawer Tooltip Popover
FormsForm FormField Wizard Confirm DatePicker TimePicker FilePicker
ChartsSparkline BarChart LineChart PieChart HeatMap Gauge
UtilityTimer Stopwatch Clock Clipboard KeyboardShortcuts Help ErrorBoundary Log Image QRCode
TemplatesSplashScreen AppShell WelcomeScreen LoginFlow SetupFlow UsageMonitor InfoBox BulletList HelpScreen
AIChatThread ChatMessage ToolCall ThinkingBlock ToolApproval TokenUsage ContextMeter ModelSelector FileChange

Hooks

All imported from termui/core:

tsx
// Keyboard input
useInput((input, key) => {
  if (key.upArrow) {
    /* ... */
  }
  if (key.escape) {
    /* ... */
  }
  if (key.ctrl && input === 'c') process.exit(0);
});

// Focus management
const { isFocused } = useFocus({ autoFocus: true, id: 'my-input' });
const { focus, focusNext, focusPrev } = useFocusManager();

// Theme
const theme = useTheme(); // read current theme
const setTheme = useThemeUpdater(); // switch theme at runtime

// Terminal
const { columns, rows, hasColor } = useTerminal();
const { columns, rows } = useResize(); // reactive to resize

// Animation & timing
const frame = useAnimation(12); // 12fps frame counter
useInterval(() => tick(), 1000); // runs every 1000ms

// Async state
const { data, loading, error } = useAsync(() => fetchData(), []);

// Declarative keybindings
useKeymap([
  { key: 'q', description: 'Quit', handler: () => process.exit(0) },
  { key: 'r', description: 'Refresh', handler: refresh },
]);

// Clipboard
const { copy, paste } = useClipboard();

Theming

tsx
import {
  ThemeProvider, AutoThemeProvider, createTheme, useTheme, useThemeUpdater,
  defaultTheme, draculaTheme, nordTheme, catppuccinTheme,
  monokaiTheme, solarizedTheme, tokyoNightTheme, oneDarkTheme,
} from 'termui/core';

// Wrap app
<ThemeProvider theme={draculaTheme}><App /></ThemeProvider>

// Auto dark/light
<AutoThemeProvider darkTheme={draculaTheme} lightTheme={nordTheme}><App /></AutoThemeProvider>

// Custom theme (merges with default)
const myTheme = createTheme({
  name: 'brand',
  colors: { primary: '#E11D48', accent: '#F97316', focusRing: '#E11D48' },
});

Token shape (all colors.* are hex strings): primary primaryForeground secondary secondaryForeground accent accentForeground success warning error info (each has a *Foreground variant) background foreground muted mutedForeground border focusRing selection selectionForeground

In a component: always fall back to theme tokens, never hardcode hex:

tsx
const theme = useTheme();
const color = props.color ?? theme.colors.primary;

Library Adapters

ts
import { intro, text, select, spinner, tasks } from 'termui/clack'; // @clack/prompts wrapper
import pc from 'termui/picocolors'; // picocolors + pc.hex(), pc.theme.primary()
import { matter, matterWithYaml } from 'termui/gray-matter';
import { useGit, GitStatus } from 'termui/git';
import { useKeychain } from 'termui/keychain';
import { EmbeddedTerminal } from 'termui/pty';
import { createCLI, createOutput, withGracefulExit } from 'termui/args';
import { useGitHub } from 'termui/github';
import { useChat, useCompletion } from 'termui/ai'; // AI streaming hooks
import { createConversationStore } from 'termui/ai'; // conversation persistence

AI Components

For building AI-powered CLIs (streaming chat, tool calls, diffs). All in packages/components/src/ai/.

StreamingText (typography)
tsx
// Token-by-token streaming output with blinking cursor
<StreamingText text={partialResponse} cursor="▌" />

// From an async iterator
<StreamingText stream={tokenStream} onComplete={(full) => saveMessage(full)} />

// Typing animation for pre-buffered text
<StreamingText text={fullText} animate speed={30} />
Markdown with streaming
tsx
// Pass streaming prop — handles partial code fences and appends cursor
<Markdown streaming cursor="▌">
  {partialMarkdownFromLLM}
</Markdown>
ChatThread + ChatMessage
tsx
<ChatThread maxHeight={30} autoScroll>
  <ChatMessage role="user" name="You">
    Explain React hooks
  </ChatMessage>
  <ChatMessage role="assistant" name="Claude" streaming>
    <StreamingText text={response} cursor="▌" />
  </ChatMessage>
  <ChatMessage role="system" collapsed>
    System prompt…
  </ChatMessage>
</ChatThread>
// role: 'user'|'assistant'|'system'|'error'
// streaming prop shows ●●● typing indicator while true
ToolCall
tsx
<ToolCall
  name="read_file"
  args={{ path: '/src/index.ts' }}
  status="running" // 'pending'|'running'|'success'|'error'
  result={fileContents}
  duration={230}
  collapsible
/>
ThinkingBlock
tsx
<ThinkingBlock
  content={thinkingTokens}
  streaming
  defaultCollapsed={true}
  label="Reasoning"
  tokenCount={1247}
/>
// Space/Enter to expand — shows "▶ Reasoning (1,247 tokens)" when collapsed
ToolApproval
tsx
<ToolApproval
  name="run_command"
  args={{ command: 'rm -rf node_modules' }}
  risk="medium" // 'low'|'medium'|'high'
  onApprove={() => {}}
  onDeny={() => {}}
  onAlwaysAllow={() => {}}
  timeout={30} // auto-deny after N seconds
/>
// Keys: y approve, n deny, a always-allow
TokenUsage + ContextMeter
tsx
// Inline token/cost summary
<TokenUsage prompt={1200} completion={850} model="claude-sonnet-4-6" showCost />
// ⟨ 1.2k in / 850 out · $0.003 ⟩

// Context window progress bar
<ContextMeter used={45000} limit={200000} label="Context" showPercent warnAt={80} criticalAt={95} />
ModelSelector
tsx
<ModelSelector
  models={[
    { id: 'claude-sonnet-4-6', name: 'Claude Sonnet', provider: 'anthropic', context: 200000 },
    { id: 'gpt-4o', name: 'GPT-4o', provider: 'openai', context: 128000 },
  ]}
  selected={model}
  onSelect={setModel}
  showContext
  groupByProvider
/>
FileChange
tsx
<FileChange
  changes={[
    { path: 'src/index.ts', type: 'modify', diff: unifiedDiff },
    { path: 'src/utils.ts', type: 'create', content: newContent },
    { path: 'old.ts', type: 'delete' },
  ]}
  onAccept={(path) => applyChange(path)}
  onReject={(path) => rejectChange(path)}
  onAcceptAll={() => applyAll()}
/>
// Keys: ↑↓ navigate files, Enter expand/collapse, y accept, n reject
DiffView (data category)
tsx
<DiffView
  oldText={original}
  newText={modified}
  filename="src/index.ts"
  language="typescript"
  mode="unified" // 'unified'|'split'|'inline'
  context={3}
  showLineNumbers
/>
termui/ai — provider-agnostic hooks
ts
import { useChat, useCompletion, createConversationStore } from 'termui/ai';

// Full chat with history
const { messages, sendMessage, isStreaming, abort, error, tokenUsage } = useChat({
  provider: 'anthropic', // 'anthropic'|'openai'|'ollama'|'custom'
  model: 'claude-sonnet-4-6',
  apiKey: process.env.ANTHROPIC_API_KEY,
  system: 'You are a helpful assistant.',
  onToolCall: async (call) => executeToolCall(call),
});

// Single-turn completion
const { complete, result, isStreaming } = useCompletion({ provider: 'anthropic', model: '...' });

// Conversation persistence
const store = createConversationStore({ dir: '~/.myapp/conversations', format: 'jsonl' });
await store.save(id, messages);
const history = await store.load(id);

Testing

tsx
import { renderToString, fireEvent, waitFor } from 'termui/testing';

const out = await renderToString(<Spinner label="Loading" />);
expect(out).toContain('Loading');

await fireEvent.keyPress({ upArrow: true });
await waitFor(() => expect(getRow()).toBe(1));

Key Constraints

  • ESM-only — "type": "module" required in package.json
  • Node.js 18+
  • React 18 peer dependency
  • Colors: Ink converts hex to ANSI; NO_COLOR / FORCE_COLOR env vars respected
  • useInput fires on every keystroke — guard with if (!isFocused) return in multi-input UIs

© Arindam200, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (references) in skills/termui of Arindam200/termui.

  • SKILL.md
  • references/components.md

Open the folder on GitHubat commit 44de57b

Compare with similar skills

Termui next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Termui compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Termui this skillArindam200/termui141—~2.8kAutomated safety check: PassMIT
Figma Design System Builderwarpdotdev/warp65k2 repos~4.4kAutomated safety check: PassAGPL-3.0
MCP Developmentcoollabsio/coolify63k1 repos~949Automated safety check: PassMIT
Scalar Design Systemscalar/scalar16k—~2.7kAutomated safety check: PassMIT
Refactoring UIs0xDk/refactoring-ui-skill586—~3.5kAutomated safety check: PassMIT
Liuguang Banlan UIsickn33/agentic-awesome-skills47k1 repos~2.5kAutomated safety check: PassMIT

Similar skills

  • Builds or updates a design system in Figma from a codebase in ordered phases: discovery, variables and tokens, components, theming and documentation, with checkpoints.

    65k GitHub starsUsed in 2 repos~4.4k tokens
    Frontend & DesignAuto-check passed
  • MCP Development

    coollabsio/coolify

    A skill your agent uses for Laravel MCP development. An agent skill from coollabsio/coolify.

    63k GitHub starsUsed in 1 repo~949 tokens
    Frontend & DesignAuto-check passed
  • Scalar's design system — design tokens, theming (@scalar/themes), CSS variables, and the @scalar/components library.

    16k GitHub stars~2.7k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Refactoring UI

    s0xDk/refactoring-ui-skill

    Design and improve user interfaces using the concrete rules from Refactoring UI (Wathan & Schoger) — constrained spacing/type/color/shadow scales, visual hierarchy through weight and color rather…

    586 GitHub stars~3.5k tokensUpdated 1 mo ago
    Frontend & DesignAuto-check passed
  • Liuguang Banlan UI

    sickn33/agentic-awesome-skills

    Implements an interface in one of two named color modes, iridescent white or colorful black, from a parameterized starter that reports measured color intensity.

    47k GitHub starsUsed in 1 repo~2.5k tokens
    Frontend & DesignAuto-check passed
  • Preline Theme Generator

    htmlstreamofficial/preline

    Generates light and dark Preline theme CSS from a brand color or mood, previews it, and validates token coverage through bundled local scripts.

    6.5k GitHub stars~619 tokensUpdated 1 mo ago
    Frontend & DesignAuto-check: warnings

More from Arindam200/termui

  • CLI Creator

    Arindam200/termui

    Build a complete, working CLI tool using TermUI components. An agent skill from Arindam200/termui.

    141 GitHub stars~2.1k tokensUpdated 5 mo ago
    Auto-check passed

Questions about Termui

What does Termui do?

Quick reference for TermUI components, hooks, and theming. An agent skill from Arindam200/termui. Termui is an agent skill from Arindam200/termui. Quick reference for TermUI components, hooks, and theming.

When should I use Termui?

Termui fits situations like: working inside an existing TermUI project and needing to look up props; hook signatures; the CLI commands; questions like what props does Table take.

How do I install Termui in Claude Code?

Run `npx skills add Arindam200/termui --skill termui -a claude-code`. Or copy the skill folder (skills/termui in Arindam200/termui) into .claude/skills/termui in your project. Claude Code loads it when a task matches its description.

How do I install Termui in Codex?

Run `npx skills add Arindam200/termui --skill termui -a codex`. Or copy the skill folder (skills/termui in Arindam200/termui) into .agents/skills/termui in your project. Codex loads it when a task matches its description.

Can I use Termui in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Arindam200/termui --skill termui -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/termui, .gemini/skills/termui, .github/skills/termui and .opencode/skills/termui in your project.

What does Termui need to run?

Going by SKILL.md and its folder, Termui needs the command-line tools its instructions call (npx) and credentials named ANTHROPIC_API_KEY. Our summary lists: Node.js; A credential in ANTHROPIC_API_KEY.

Does Termui access the network?

SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Termui safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Termui use?

Termui is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Termui use?

About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 6.4k tokens, read only when the agent opens those files.

What are the alternatives to Termui?

Skills that share tags, products or a category with Termui: Figma Design System Builder (warpdotdev/warp, 65k stars), MCP Development (coollabsio/coolify, 63k stars), Scalar Design System (scalar/scalar, 16k stars) and Refactoring UI (s0xDk/refactoring-ui-skill, 586 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Termui?

Arindam200 (a GitHub user) maintains it in Arindam200/termui, which has 141 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on April 29, 2026.

Source: Arindam200/termui on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.