Enhance CLI agent-friendliness for AI/LLM usage
Please select the appropriate template for submitting your issue from the dropdown above.
Summary
As AI agents and LLMs increasingly use CLI tools directly, we should enhance glab to better support programmatic agent usage. While glab already has excellent MCP server support, agents often invoke CLI tools directly and need runtime discovery of capabilities and alternatives.
Background
Research shows emerging patterns for agent-friendly CLI design (see The Hidden Users: Designing CLI Tools for AI Agents):
- Runtime capability discovery via flags like
--agent-info - Structured JSON output everywhere
- Clear alternatives to interactive commands
- Machine-readable error responses
- Consistent exit codes with documented meanings
What glab already does well:
-
✅ MCP server support (glab mcp serve) -
✅ JSON output on most commands (--output json) -
✅ NO_PROMPT=truefor non-interactive mode -
✅ MCP annotations for interactive commands
What's missing: Runtime discovery mechanism for agents to learn about these capabilities.
Proposals
Tier 1: Quick Wins (High Impact, Low Effort)
1. Add --agent-info Discovery Flag
Add a glab --agent-info flag that returns structured JSON with capabilities:
{
"version": "1.84.0",
"mcp_server_available": true,
"json_output_supported": true,
"environment_hints": {
"NO_PROMPT": "Set to true to disable interactive prompts",
"NO_COLOR": "Disable ANSI color codes",
"GITLAB_TOKEN": "Provide authentication token"
},
"interactive_commands": [
{"cmd": "ci view", "use_instead": "ci get <id> --output json"},
{"cmd": "config edit", "use_instead": "config set <key> <value>"},
{"cmd": "duo ask", "use_instead": "duo ask --prompt 'question'"}
],
"json_output_commands": ["mr list", "issue list", "ci list", "ci get"],
"docs_url": "https://docs.gitlab.com/cli/"
}
Benefits: Agents can discover capabilities at runtime without external documentation.
2. Improve Error Messages for Interactive Commands
When agents try interactive commands without TTY, provide helpful alternatives:
Error: 'glab ci view' requires an interactive terminal.
💡 For programmatic access, try:
glab ci get 12345 --output json
glab ci list --output json
Or use the MCP server: glab mcp serve
Implementation: Check f.IO().IsTerminal() in interactive commands and provide guidance.
3. Add Agent Usage Section to Help
Enhance glab --help to include:
AGENT USAGE
For AI agents and automation:
- Use --output json for structured data
- Set NO_PROMPT=true to disable interactive prompts
- Run 'glab --agent-info' for capabilities and alternatives
- Use 'glab mcp serve' for Model Context Protocol support
Tier 2: Medium-Term Improvements
4. Document and Standardize Exit Codes
Consistent exit codes across all commands:
-
0= Success -
1= General error -
2= Usage error (bad flags) -
3= Authentication error -
4= Not found -
130= Interrupted
Document in help text: "Exit codes: 0=success, 1=error, 3=auth, 4=not found"
5. Audit JSON Output Support
Ensure all list, view, get commands support --output json consistently.
6. Add glab doctor Command
Diagnostic command for troubleshooting agent issues:
$ glab doctor
✓ Authentication: Configured (gitlab.com)
✓ JSON output: Supported
✓ MCP server: Available
✓ Network: Reachable
✓ Git repo: Detected (gitlab-org/cli)
! Warning: Running in CI environment (detected CI=true)
Tier 3: Future Enhancements
7. Structured Error Responses
When using --output json, return structured errors:
{
"error": {
"code": "authentication_failed",
"message": "Invalid or expired token",
"retryable": false,
"category": "auth",
"suggestion": "Run 'glab auth login' or set GITLAB_TOKEN"
}
}
8. Machine-Readable Help
Add glab <command> --help --format json for programmatic help parsing.
Priority
| Feature | Impact | Effort | Priority |
|---|---|---|---|
--agent-info flag |
High | Low | P1 |
| Better error messages | High | Low | P1 |
| Agent section in help | Medium | Low | P1 |
| Consistent exit codes | Medium | Medium | P2 |
glab doctor command |
Medium | Medium | P2 |
| Structured errors | Medium | High | P3 |
Related
- Existing MCP implementation:
internal/commands/mcp/serve/ - MCP annotations:
internal/mcpannotations/annotations.go - Environment variables already documented in root command help