Improve CLI output, logs, errors, and terminal diagnostic user experience.
Copy the install command and let the AI configure it · recommended for beginners
Please install the "cli-logging-ux" skill from askskill: 1. Download https://raw.githubusercontent.com/microsoft/apm/main/.apm/skills/cli-logging-ux/SKILL.md 2. Save it as ~/.claude/skills/cli-logging-ux/SKILL.md 3. Reload skills and tell me it's ready
Please improve this CLI error message so users can better understand the cause, impact, and next action. Keep it technically accurate and suggest a clearer terminal output format: 'Upload failed: invalid config.'
A clearer, actionable error message with cause, fix guidance, and more user-friendly terminal presentation
I am updating a CLI tool's log output. Please create a consistent style guide for success, warning, error, and info messages, including tone, length, icon/symbol usage, color suggestions, and example copy.
A reusable copy and visual style guide for CLI logs that keeps message types consistent
Please help design CLI progress indicators and diagnostic summary output so users can quickly see the current stage, completed work, failed items, and recommended next steps, with example output.
A clear progress and diagnostic summary design with terminal output examples ready to reference
CLI Logging UX expert persona
Apply these three tests to every piece of user-facing output. If a message fails any test, redesign it.
Every warning must answer: what should the user do about this?
# Fails — not actionable, user can't do anything
Sub-skill 'my-skill' from 'my-package' overwrites existing skill
# Passes — tells the user exactly what to do
Skipping my-skill — local file exists (not managed by APM). Use 'apm install --force' to overwrite.
If the user can't act on it, it's not a warning — it's noise. Demote to --verbose or remove.
Use color semantics consistently. Never use a warning color for an informational state.
| Color | Helper | Meaning | When to use |
|---|---|---|---|
| Green | _rich_success() | Success / completed | Operation finished as expected |
| Yellow | _rich_warning() | User action needed | Something requires user decision |
| Red | _rich_error() | Error / failure | Operation failed, cannot continue |
| Blue | _rich_info() | Informational | Status updates, progress, summaries |
| Dim | _rich_echo(color="dim") | Secondary detail | Verbose-mode details, grouping headers |
Can the user scan output like headlines? Top-level = what happened. Details = drill down.
# Bad — warnings break the visual flow between status and summary
[checkmark] package-name
[warning] something happened
[warning] something else happened
[tree] 3 skill(s) integrated
# Good — clean tree, diagnostics at the end
[checkmark] package-name
[tree] 3 skill(s) integrated
── Diagnostics ──
[warning] 2 skills replaced by a different package (last installed wins)
Run with --verbose to see details
_rich_success)_rich_info with indented └─ prefix)_rich_error)# Bad — inline warning repeated per file, clutters output
for file in files:
if collision:
_rich_warning(f"Skipping {file}...")
# Good — collect during loop, render grouped summary at the end
for file in files:
if collision:
diagnostics.skip(file, package=pkg_name)
# Later, after the loop:
if diagnostics.has_diagnostics:
diagnostics.render_summary()
DiagnosticCollector categories: skip() for collisions, overwrite() for cross-package replacements, warn() for general warnings, error() for failures.
Always use the helpers from apm_cli.utils.console — never raw print() or bare click.echo().
Emojis are banned. Never use emoji characters anywhere in CLI output — not in messages, symbols, help text, or status indicators. Use ASCII text symbols exclusively via STATUS_SYMBOLS.
from apm_cli.utils.console import (
_rich_success, _rich_error, _rich_warning, _rich_info, _rich_echo
)
_rich_success("Installed 3 APM dependencies") # green, bold
_rich_info(" └─ 2 prompts integrated → .github/prompts/") # blue
_rich_warning("Config drift detected — re-run apm install") # yellow
_rich_error("Failed to download package") # red
_rich_echo(" [pkg-name]", color="dim") # dim, for verbose details
Use STATUS_SYMBOLS dict with symbol= parameter for consistent ASCII prefixes:
_rich_info("Starting operation...", symbol="gear") # renders as "[*] Starting operation..."
Follow this visual hierarchy for multi-package operations:
…
Guide APM positioning, release communication, and breaking-change strategy decisions.
Audit an entire docs corpus against code and propose precise fixes.
Triages bug batches and drives related PRs to a mergeable state.
Plan doc TOC changes and outline stubs when PRs require structural updates.
Plan Python architecture, refactor class hierarchies, and design multi-file code changes.
Triage APM issues in batches and drive approved ones to mergeable PRs.
Improve APM CLI command UX, help text, and first-run flows.
Create a composable CLI from docs, specs, SDKs, apps, or scripts.
Analyze JSONL debug logs to explain chat agent issues and behavior.
Design CLI tools with simple installs, command routing, and layered config.
Condense noisy test, build, and cloud logs into AI-ready signal.
Investigate VS Code telemetry errors and pinpoint root causes effectively.