All free skills / Other majors
ansi-escapes 7.x
Use ansi-escapes 7.x from ESM code to generate terminal escape-code strings for cursor movement, screen and line control, hyperlinks, images, and iTerm2 features.
- For
ansi-escapes@7.3.0- Verified
- 2026-09-08, 5 examples executed
- Skill package
@modootoday/pmcp-ansi-escapes@7.0.0
Use this skill for free
No PMCP login or subscription is required. Download the original instructions, or install the content-only archive with your project's package manager.
Download SKILL.md · Download package archive
npm install --save-dev https://pmcp.build/skills/ansi-escapes/7/package.tgz
PMCP discovers the installed package's instructions. Connect your runtime after installation.
Archive integrity
sha512-LCTkfkpqG9LVWlofE4dY03WwrviJVDO+0eS8WGssIuYkdZdlWTLuih6nC6qEFhpC9FFDiFTR5hw2TkbSrtEMEg==Complete instructions
Verified against ansi-escapes@7.3.0 on 2026-09-08. 5 of 5 examples executed.
ansi-escapes 7.x
Runtime and module shape
ansi-escapes@^7.0.0 is ESM-only in practice. Use Node.js 18 or newer and import it with import, not require(). The package has no CLI or runtime runner: its APIs return strings, which the caller writes to a terminal or terminal emulator.
Both import styles are supported:
import assert from 'node:assert/strict';
import ansiEscapes, {cursorUp, cursorLeft} from 'ansi-escapes';
assert.equal(ansiEscapes.cursorUp(2), '\u001B[2A');
assert.equal(cursorUp(2) + cursorLeft, '\u001B[2A\u001B[G');
assert.equal(ansiEscapes.cursorLeft, cursorLeft);
The older major's default-object usage remains valid, but version 7 also exports the declarations as named exports. Do not assume the 6.x package metadata: version 7 requires Node >=18, is ESM-only, and exposes ./index.js together with its declarations.
Cursor movement and position
Available cursor APIs are:
cursorTo(x, y?)cursorMove(x, y?)cursorUp(count)cursorDown(count)cursorForward(count)cursorBackward(count)
Cursor constants are cursorLeft, cursorSavePosition, cursorRestorePosition, cursorGetPosition, cursorNextLine, cursorPrevLine, cursorHide, and cursorShow.
All of these produce strings. Combine them and write the result yourself; the package does not move the cursor directly. cursorMove(x, y?) emits the horizontal movement before the vertical movement when both components are present.
import assert from 'node:assert/strict';
import {
cursorTo,
cursorMove,
cursorUp,
cursorDown,
cursorForward,
cursorBackward,
cursorLeft,
cursorSavePosition,
cursorRestorePosition,
cursorGetPosition,
cursorNextLine,
cursorPrevLine,
cursorHide,
cursorShow,
} from 'ansi-escapes';
assert.equal(cursorTo(4), '\u001B[5G');
assert.equal(cursorTo(4, 2), '\u001B[3;5H');
assert.equal(cursorMove(2, -3), '\u001B[2C\u001B[3A');
assert.equal(cursorUp(2), '\u001B[2A');
assert.equal(cursorDown(2), '\u001B[2B');
assert.equal(cursorForward(2), '\u001B[2C');
assert.equal(cursorBackward(2), '\u001B[2D');
for (const value of [
cursorLeft,
cursorSavePosition,
cursorRestorePosition,
cursorGetPosition,
cursorNextLine,
cursorPrevLine,
cursorHide,
cursorShow,
]) {
assert.equal(typeof value, 'string');
}
Do not copy the older example that expects cursorLeft to be \u001B[1000D; version 7 produces a cursor-left escape represented as \u001B[G.
Erasing, scrolling, and screen control
The line and screen exports are:
eraseLines(count)eraseEndLine,eraseStartLine,eraseLineeraseDown,eraseUp,eraseScreenscrollUp,scrollDownclearScreen,clearTerminalenterAlternativeScreen,exitAlternativeScreenbeep
Use eraseLines(count) when the number of lines is dynamic. The other names are string constants.
import assert from 'node:assert/strict';
import ansiEscapes, {
eraseLines,
eraseEndLine,
eraseStartLine,
eraseLine,
eraseDown,
eraseUp,
eraseScreen,
scrollUp,
scrollDown,
clearScreen,
clearTerminal,
enterAlternativeScreen,
exitAlternativeScreen,
beep,
} from 'ansi-escapes';
assert.equal(typeof eraseLines(3), 'string');
for (const value of [
eraseEndLine,
eraseStartLine,
eraseLine,
eraseDown,
eraseUp,
eraseScreen,
scrollUp,
scrollDown,
clearScreen,
clearTerminal,
enterAlternativeScreen,
exitAlternativeScreen,
beep,
]) {
assert.equal(typeof value, 'string');
}
assert.equal(typeof ansiEscapes.clearTerminal, 'string');
Hyperlinks, images, and iTerm2 features
link(text, url) returns a terminal hyperlink escape sequence. Terminal support is provided by the terminal emulator, not by this package.
image(data, options?) returns an image escape sequence. The input is a Uint8Array; in Node, a Buffer is also a Uint8Array. Image options are optional, and preserveAspectRatio defaults to true.
The iTerm namespace provides iTerm.setCwd(path?) and iTerm.annotation(message, options?). These sequences are intended for iTerm2; generating them does not make another terminal support them.
import assert from 'node:assert/strict';
import ansiEscapes, {link, image, iTerm} from 'ansi-escapes';
const hyperlink = link('Click here', 'https://example.com');
assert.equal(typeof hyperlink, 'string');
assert.ok(hyperlink.includes('Click here'));
assert.ok(hyperlink.includes('https://example.com'));
const imageSequence = image(new Uint8Array([0, 1, 2, 3]));
assert.equal(typeof imageSequence, 'string');
assert.ok(imageSequence.length > 0);
const cwdSequence = iTerm.setCwd('/tmp');
assert.equal(typeof cwdSequence, 'string');
assert.ok(cwdSequence.length > 0);
const annotationSequence = iTerm.annotation('build complete');
assert.equal(typeof annotationSequence, 'string');
assert.ok(annotationSequence.length > 0);
assert.equal(typeof ansiEscapes.link, 'function');
Writing the result
The package only creates escape-code strings. Write them to an output stream or pass them to a terminal implementation:
import assert from 'node:assert/strict';
import ansiEscapes from 'ansi-escapes';
let output = '';
output += ansiEscapes.cursorUp(2) + ansiEscapes.cursorLeft;
assert.equal(output, '\u001B[2A\u001B[G');
Do not expect importing the package to alter the terminal, and do not wrap examples in describe, it, or expect; those are runner globals and are not available in a directly executed script.
Not covered
This skill does not cover terminal-by-terminal compatibility, the complete option shapes for image or iTerm annotations, the exact escape encoding of every export, browser integration, or how to read image data from a filesystem. It also does not cover a CLI or runner because ansi-escapes exposes no documented CLI or runtime runner.