L6/.claude/skills/reviewing-cli-command/SKILL.md
Provides checklist for reviewing Typer CLI command implementations. Covers structure, Annotated syntax, error handling, exit codes, display module usage, destructive action patterns, and help text conventions. Use when user asks to review/check/verify a CLI command, wants feedback on implementation, or asks if a command follows best practices.
npx skillsauth add https-deeplearning-ai/sc-agent-skills-files reviewing-cli-commandInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Checklist for reviewing Typer CLI command implementations.
src/<cli_app>/commands/app = typer.Typer() and @app.command()@app.command() for each subcommandcommands/__init__.py with add_typer()add_typer(app) without nameadd_typer(app, name="group")Annotated syntax-f, -q)# GOOD:
name: Annotated[str, typer.Argument(help="item name")]
force: Annotated[bool, typer.Option("--force", "-f", help="skip confirmation")] = False
# BAD:
name: str = typer.Argument(..., help="The name of the item.")
display.error()raise typer.Exit(code) after errorsraise typer.Abort() for cancellation# GOOD:
if id < 1:
display.error("ID must be positive")
raise typer.Exit(EXIT_INVALID_INPUT)
# BAD:
if id < 1:
print("Error: ID must be positive")
return
display moduleprint(), typer.echo(), or console.print()# GOOD:
display.success(f"Added '{task.title}'")
# BAD:
print(f"Added '{task.title}'")
--force / -f flagtyper.confirm() with default=False# GOOD:
if not force:
confirm = typer.confirm(f"Delete '{task.title}'?", default=False)
if not confirm:
display.info("Cancelled")
raise typer.Abort()
# BAD: defaults to Yes
confirm = typer.confirm(f"Delete?", default=True)
| Mistake | Fix |
|---------|-----|
| print() | display.success/error/warning/info() |
| Wrong exit code | 0=success, 1=error, 2=invalid |
| Missing --force on delete | Add force option with default False |
| Confirmation defaults Yes | default=False in typer.confirm() |
| Old Typer syntax | Annotated[type, typer.Argument()] |
| Missing app = typer.Typer() | Each command file needs its own app |
| Not registered | add_typer(app) in commands/__init__.py |
## Review: <command_name>
[OK] Uses Annotated syntax
[OK] Has docstring in imperative mood
[X] Missing --force flag on destructive command
[X] Uses print() instead of display module
[!] Help text could be shorter
### Summary
<brief summary of issues found>
### Suggested Fixes
<code suggestions if needed>
tools
Create learning paths for programming tools, and define what information should be researched to create learning guides. Use when user asks to learn, understand, or get started with any programming tool, library, or framework.
tools
Generate pytest tests for Typer CLI commands. Includes fixtures (temp_storage, sample_data), CliRunner patterns, confirmation handling (y/n/--force), and edge case coverage. Use when user asks to "write tests for", "test my CLI", "add test coverage", or any CLI + test request.
tools
Provides Typer templates, handles registration, and ensures consistency. ALWAYS use this skill when adding or modifying CLI commands. Use when user requests to add/create/implement/build/write a new command (e.g., "add edit command", "create search feature") OR update/modify/change/edit an existing command.
testing
Generate educational practice questions from lecture notes to test student understanding. Use when users request practice questions, exam preparation materials, study guides, or assessment items based on lecture content.