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:
…
Turn docs impact verdicts into page-by-page, section-level sync task briefs.
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.
Identify and assist with token, credential, and remote host authentication flows.
Triage microsoft/apm issues and produce one unified resolution comment.
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.
Safely run shell commands via MCP with session and process control.
Automatically diagnose bugs through logs, call chains, and cross-platform code analysis.