Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Style terminal output with Chalk. Use when adding colors to CLI output, formatting log messages, building styled terminal UIs, or creating developer tools with colored output.
.claude/skills/terminalskills-chalk-advanced/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-10 | ✗→✓ | ▲ Improved | -4% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-03 | ✓→✓ | = Same ✓ | -22% | 0% |
| case-04 | ✓→✓ | = Same ✓ | -16% | 0% |
Chalk styles terminal strings with colors, bold, underline, and backgrounds. ESM-only since v5. Chain styles fluently. Widely used in CLIs for status messages, errors, and formatted output.
typescriptimport chalk from 'chalk' console.log(chalk.green('✓ Success')) console.log(chalk.red.bold('✗ Error: file not found')) console.log(chalk.yellow('⚠ Warning: deprecated API')) console.log(chalk.blue.underline('https://example.com')) console.log(chalk.gray(' (verbose details)')) // Background colors console.log(chalk.bgRed.white.bold(' ERROR ') + ' Something went wrong') console.log(chalk.bgGreen.black.bold(' PASS ') + ' All tests passed')
typescript// Define reusable styles const styles = { error: chalk.red.bold, success: chalk.green, warn: chalk.yellow, info: chalk.blue, dim: chalk.gray, highlight: chalk.cyan.bold, label: chalk.bgBlue.white.bold, } function log(level: keyof typeof styles, msg: string) { const prefix = { error: '✗', success: '✓', warn: '⚠', info: 'ℹ', dim: '·', highlight: '→', } console.log(`${styles[level](prefix[level] || '·')} ${msg}`) } log('success', 'Project created') log('error', 'Build failed') log('info', `Using ${styles.highlight('TypeScript')} template`)
typescript// Table-like output function printStats(stats: Record<string, number>) { const maxKey = Math.max(...Object.keys(stats).map(k => k.length)) for (const [key, value] of Object.entries(stats)) { const label = chalk.gray(key.padEnd(maxKey)) const val = value > 0 ? chalk.green(value.toString()) : chalk.red(value.toString()) console.log(` ${label} ${val}`) } } printStats({ 'Files changed': 12, 'Lines added': 847, 'Lines removed': 231, Warnings: 0, Errors: 0 })
import chalk from 'chalk', not require.NO_COLOR and FORCE_COLOR env vars automatically.chalk.red.bold.underline('text') — order doesn't matter. chalk{red Error:} {bold ${message}} | Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | pass→pass | 12,485 | 7,016 | -44% | 1 | 1 | 0% | 2,528 | 1,981 | -22% | 0 | 0 | — |
case-04 | pass→pass | 8,826 | 4,211 | -52% | 1 | 1 | 0% | 1,801 | 1,505 | -16% | 0 | 0 | — |
case-21 | pass→pass | 10,086 | 8,090 | -20% | 1 | 1 | 0% | 2,168 | 2,425 | +12% | 0 | 0 | — |
case-22 | pass→pass | 9,763 | 8,039 | -18% | 1 | 1 | 0% | 2,003 | 2,292 | +14% | 0 | 0 | — |
case-23 | pass→pass | 12,632 | 7,778 | -38% | 1 | 1 | 0% | 2,225 | 2,171 | -2% | 0 | 0 | — |
case-01 | fail→fail | 12,555 | 10,195 | -19% | 1 | 1 | 0% | 2,666 | 2,855 | +7% | 0 | 0 | — |
case-02 | pass→pass | 3,704 | 2,480 | -33% | 1 | 1 | 0% | 649 | 1,052 | +62% | 0 | 0 | — |
case-05 | pass→pass | 9,772 | 6,195 | -37% | 1 | 1 | 0% | 1,705 | 1,835 | +8% | 0 | 0 | — |
case-06 | pass→pass | 12,013 | 4,166 | -65% | 1 | 1 | 0% | 2,122 | 1,349 | -36% | 0 | 0 | — |
case-07 | pass→pass | 12,116 | 9,402 | -22% | 1 | 1 | 0% | 2,496 | 2,510 | +1% | 0 | 0 | — |
case-08 | pass→pass | 7,443 | 5,831 | -22% | 1 | 1 | 0% | 1,318 | 1,751 | +33% | 0 | 0 | — |
case-09 | pass→pass | 8,434 | 4,371 | -48% | 1 | 1 | 0% | 1,569 | 1,523 | -3% | 0 | 0 | — |
case-10 | fail→pass | 8,096 | 5,126 | -37% | 1 | 1 | 0% | 1,689 | 1,615 | -4% | 0 | 0 | — |
case-11 | pass→pass | 8,774 | 2,321 | -74% | 1 | 1 | 0% | 1,720 | 1,088 | -37% | 0 | 0 | — |
case-12 | fail→pass | 11,976 | 8,584 | -28% | 1 | 1 | 0% | 2,154 | 2,148 | -0% | 0 | 0 | — |
case-13 | pass→pass | 8,339 | 3,675 | -56% | 1 | 1 | 0% | 1,644 | 1,346 | -18% | 0 | 0 | — |
case-14 | pass→pass | 11,315 | 7,034 | -38% | 1 | 1 | 0% | 2,171 | 2,060 | -5% | 0 | 0 | — |
case-15 | pass→pass | 12,979 | 11,681 | -10% | 1 | 1 | 0% | 2,565 | 3,021 | +18% | 0 | 0 | — |
case-16 | pass→pass | 10,140 | 7,008 | -31% | 1 | 1 | 0% | 1,812 | 2,008 | +11% | 0 | 0 | — |
case-17 | pass→pass | 6,090 | 4,526 | -26% | 1 | 1 | 0% | 1,244 | 1,563 | +26% | 0 | 0 | — |
case-18 | fail→pass | 10,998 | 9,685 | -12% | 1 | 1 | 0% | 2,018 | 2,642 | +31% | 0 | 0 | — |
case-19 | pass→pass | 11,407 | 5,628 | -51% | 1 | 1 | 0% | 2,069 | 1,773 | -14% | 0 | 0 | — |
case-20 | pass→pass | 8,510 | 4,261 | -50% | 1 | 1 | 0% | 1,878 | 1,541 | -18% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +13 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.