Switch contexts like you switch branches

Sessions are named, persistent workspaces. Create one per project, environment, or customer and let ansi-tui carry the context forward into every tool form automatically.

Keyboard: [s] from anywhere opens the Sessions screen
[n] creates, [e] edits, [d] deletes, and [Enter] activates
The active session auto-fills tool forms
Switching sessions refreshes defaults everywhere
Session data fields
Name Human-readable workspace identifier
Working directory Base path for operations
Inventory File, directory, or host list
Vault file Password file path
Vault ID Vault identity label
Extra vars Additional -e variables
Environment vars Proxy, tokens, API keys
ansible.cfg Custom config path
Tags Default tag filters
Notes Operator guidance text

Everything you ran. Nothing lost.

The Jobs screen records every execution with full fidelity: status badges, exact argv, exit codes, duration, timestamps, session context, and scrollable output.

Success and failure badges
📋 Full command argv
Duration and timestamp
📺 Scrollable output log
🗑 Delete job and log file
📂 Per-session history
Job History · recent
ansible-playbook run 14:22
ansible-lint run 14:18
ansible-galaxy install 13:55
ansible-vault encrypt 13:40

Real execution. Real output.

ANSI-aware streaming with scroll, pause, resume, and elapsed timers.

🎨

ANSI-aware

Colors, bold, and dim preserved from Ansible output.

Pause / Resume

Space pauses auto-scroll and resumes when you want.

Elapsed time

Live timer from the first byte to process exit.

📜

Scroll controls

Arrow keys scroll while auto-follow stays available.

Smart clipping

Output is clipped to fit terminal constraints cleanly.

🔗

OSC 8 stripping

Hyperlinks are stripped before display for safety.

🌈

Color defaults

Color-friendly env vars are pre-set automatically.

🔄

Wrap modes

Wrap or plain-text mode based on tool output needs.

Built for the corporate network

Proxy-aware executionOffline installJump host readyNo Docker requiredNo root requiredLocal-first secrets

Offline install workflow

# On a connected machine:

$ npm pack @3a2dev/ansi-tui

$ curl -fsSL https://raw.githubusercontent.com/3A2DEV/ansi-tui/main/install.sh -o install.sh

# Copy install.sh and 3a2dev-ansi-tui-0.1.0.tgz to target

# Then on the air-gapped host:

$ chmod +x install.sh

$ ./install.sh --local ./3a2dev-ansi-tui-0.1.0.tgz

Proxy session override

# Session env vars (highest priority)

HTTPS_PROXY=http://proxy.corp:8080

NO_PROXY=localhost,10.0.0.0/8

Tested in every PR. Scanned continuously.

The `ansi-tui` repository runs a dedicated `npm-tests.yml` workflow on every pull request and layers security monitoring on top with Dependabot and CodeQL.

GitHub Actions PR Gate

Triggered on `opened`, `synchronize`, `reopened`, and `ready_for_review`.

npm-tests.yml

Package readiness

npm ci
npm run typecheck
npm run lint
npm test
npm run build
npm run pack:check

Matrix test suite

Node versions

Node 20Node 22Node 24

Suites

coretoolscomponentsscreenshooks

Each matrix job runs npm run test:<suite> on the selected Node version.

Security and code quality

Automated dependency monitoring plus repository-level static analysis.

Dependabot

security updates

The repository uses Dependabot to surface dependency vulnerabilities and keep the Node package graph current.

CodeQL

maintainability + reliability

GitHub CodeQL scans the codebase for security issues and code quality risks, including maintainability and reliability signals.

# PR validation snapshot

workflow: npm-tests.yml

checks: typecheck, lint, full tests, build, pack check

security: Dependabot + CodeQL

Direct package dependencies

A direct dependency snapshot for @3a2dev/ansi-tui, including what each package provides and why it exists in the CLI.

Dependency Surface

23

direct packages

12

runtime

11

development

Scope

This section documents only the direct dependencies declared by the published npm package. Transitive dependencies are intentionally omitted so the stack stays easy to audit.

published package snapshot runtime + dev grouped direct deps only
Runtime

Runtime dependencies

Packages shipped with the CLI and required when ansi-tui is actually running.

12 direct packages
chalk ^5.0.0

Details

Terminal string styling done right.

Why ansi-tui uses it

Used for color and emphasis in terminal output outside the main Ink-rendered views.

env-paths ^3.0.0

Details

Get paths for storing things like data, config, cache, etc.

Why ansi-tui uses it

Provides OS-correct locations for persisted sessions, config, cache, and job history files.

execa ^8.0.0

Details

Process execution for humans.

Why ansi-tui uses it

Runs ansible-* commands with explicit argv handling, streamed output, and reliable exit-code capture.

ink ^5.0.0

Details

React for CLI.

Why ansi-tui uses it

Forms the terminal UI runtime that renders screens, layout, focus flow, and updates in the terminal.

ink-select-input ^6.0.0

Details

Select input component for Ink.

Why ansi-tui uses it

Powers keyboard-driven selection lists for tools, actions, and guided choices.

ink-spinner ^5.0.0

Details

Spinner component for Ink.

Why ansi-tui uses it

Shows visible progress while long-running playbooks and other commands execute.

ink-table ^3.0.0

Details

A table component for Ink.

Why ansi-tui uses it

Renders structured terminal tables for environment summaries, tool health, and other matrix views.

ink-text-input ^6.0.0

Details

Text input component for Ink.

Why ansi-tui uses it

Backs text fields across the guided forms for paths, tags, extra vars, and other command inputs.

react ^18.0.0

Details

React is a JavaScript library for building user interfaces.

Why ansi-tui uses it

Ink is React-based, so ansi-tui uses React state, components, and hooks for the terminal app itself.

strip-ansi ^7.0.0

Details

Strip ANSI escape codes from a string.

Why ansi-tui uses it

Normalizes captured job logs and plain-text views when raw ANSI sequences should not be preserved.

uuid ^10.0.0

Details

RFC9562 UUIDs.

Why ansi-tui uses it

Generates stable IDs for sessions, jobs, and other persisted records.

which ^4.0.0

Details

Like which(1) unix command. Find the first instance of an executable in the PATH.

Why ansi-tui uses it

Locates installed ansible-* executables and supports runtime environment validation before execution.

Dev

Development dependencies

Packages used to build, typecheck, lint, and test ansi-tui before release.

11 direct packages
@types/node ^25.5.0

Details

TypeScript definitions for node.

Why ansi-tui uses it

Types Node.js APIs used for process management, filesystem access, and CLI runtime behavior.

@types/react ^18.0.0

Details

TypeScript definitions for react.

Why ansi-tui uses it

Provides static typing for the React components and hooks used through Ink.

@types/uuid ^10.0.0

Details

Stub TypeScript definitions entry for uuid, which provides its own types definitions.

Why ansi-tui uses it

Included in the published toolchain metadata to keep TypeScript resolution friction-free around UUID usage.

@types/which ^3.0.0

Details

TypeScript definitions for which.

Why ansi-tui uses it

Adds static types for executable lookup and PATH validation helpers.

@typescript-eslint/eslint-plugin ^7.0.0

Details

TypeScript plugin for ESLint.

Why ansi-tui uses it

Enforces TypeScript-specific lint rules across the TUI screens, hooks, and support code.

@typescript-eslint/parser ^7.0.0

Details

An ESLint custom parser which leverages TypeScript ESTree.

Why ansi-tui uses it

Lets ESLint parse the TypeScript and TSX source used by the Ink application.

eslint ^8.0.0

Details

An AST-based pattern checker for JavaScript.

Why ansi-tui uses it

Runs static analysis before publish and in CI to catch maintainability and correctness issues early.

ink-testing-library ^3.0.0

Details

Utilities for testing Ink apps.

Why ansi-tui uses it

Supports screen and component tests without requiring a real interactive terminal session.

tsup ^8.0.0

Details

Bundle your TypeScript library with no config, powered by esbuild.

Why ansi-tui uses it

Builds the publishable npm package output in dist/ for installation and execution.

typescript ^5.0.0

Details

TypeScript is a language for application scale JavaScript development.

Why ansi-tui uses it

Provides the type system and compile-time checks used across the ansi-tui codebase.

vitest ^4.1.4

Details

Next generation testing framework powered by Vite.

Why ansi-tui uses it

Runs the package test suite covering core logic, tools, components, screens, hooks, and packaging.