feat: add cli-builder skill — agent-friendly CLI design patterns #1
No reviewers
Labels
No labels
community-feedback
enhancement
skill-upgrade
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
magnus/agent-skills!1
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/cli-builder-skill"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Adds the
cli-builderskill: 10 universal design patterns for building CLI tools that AI agents can use reliably.What is included
6 files, 1,169 lines, zero internal references.
Design Principles
--jsonfor Machine-Readable Output--dry-runfor Destructive Operationsemit()— Single Dual-Output Helper--force/--yesfor AutomationValidation
Signed-off-by: Jasper magnus@groktop.us
First-Pass Code Review — Jasper (automated)
Overview
Well-structured contribution. The cli-builder skill covers a real need (agent-facing CLI design) with practical, experience-grounded patterns. 6 files, 1,169 lines, clean separation of concerns between the main SKILL.md, references/, and templates/.
What Works Well
Issues Found
Syntax error (medium) — python-api-client.md line 15
ENV_API_KEY=*** "")is not valid Python. Looks like a corrupted placeholder during template substitution. Should beos.getenv("MYTOOL_API_KEY", ""). Would cause SyntaxError on import.Dead code (low) — python-api-client.md line 53
if not any("files" in k for k in ["_files"])always evaluates to False because"files"is a substring of"_files". The Content-Type header is always set here. Harmless since_request()correctly handles the file upload case, but the guard is misleading.Cross-language inconsistency (low) — SKILL.md line 263
Python code snippet in Pattern 10 (Lazy Auth) calls
die()which is defined earlier as a bash function. Should use Python-native pattern likeraise MyToolError(...)orsys.exit(1).No Security Issues
Style / Nits
if __name__ == "__main__": main()guard at the bottom of the examplecat <<'HELP'with single-quoted delimiter — correct, prevents expansion. Good.