Initial commit
This commit is contained in:
12
.claude-plugin/plugin.json
Normal file
12
.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"name": "headless-cli-agents",
|
||||
"description": "Comprehensive guide for running AI coding agents in non-interactive mode for automation, CI/CD pipelines, and scripting",
|
||||
"version": "1.0.0",
|
||||
"author": {
|
||||
"name": "Timur Khakhalev",
|
||||
"email": "timur.khakhalev@gmail.com"
|
||||
},
|
||||
"skills": [
|
||||
"./"
|
||||
]
|
||||
}
|
||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# headless-cli-agents
|
||||
|
||||
Comprehensive guide for running AI coding agents in non-interactive mode for automation, CI/CD pipelines, and scripting
|
||||
277
SKILL.md
Normal file
277
SKILL.md
Normal file
@@ -0,0 +1,277 @@
|
||||
---
|
||||
name: headless-cli-agents
|
||||
description: This skill provides comprehensive guidance for running AI coding agents in non-interactive (headless) mode for automation, CI/CD pipelines, and scripting. Use when integrating Claude Code, Codex, Gemini, OpenCode, Qwen, or Droid CLI into automated workflows where human interaction is not desired.
|
||||
---
|
||||
|
||||
# Headless CLI Agents
|
||||
|
||||
## Overview
|
||||
|
||||
This skill enables the use of AI coding agents in non-interactive mode for automation scenarios. It provides command references, safety considerations, and practical examples for integrating AI agents into CI/CD pipelines, shell scripts, and other automated workflows.
|
||||
|
||||
## Quick Reference
|
||||
|
||||
| Agent | Basic Command | Automation Flag | Best For |
|
||||
|-------|--------------|----------------|----------|
|
||||
| Claude Code | `claude -p "prompt"` | Auto-approved by default | General coding tasks |
|
||||
| OpenAI Codex | `codex exec "prompt"` | `--full-auto` | Complex refactoring |
|
||||
| Google Gemini | `gemini -p "prompt"` | `--yolo` (if available) | Analysis tasks |
|
||||
| OpenCode | `opencode -p "prompt"` | Auto-approved by default | Multi-provider support |
|
||||
| Qwen Code | `qwen -p "prompt"` | `--yolo` | Local model support |
|
||||
| Factory Droid | `droid exec "prompt"` | `--auto <level>` | Controlled automation |
|
||||
|
||||
## When to Use Headless Mode
|
||||
|
||||
Use this skill when:
|
||||
- **CI/CD Pipelines**: Automated code reviews, test generation, documentation
|
||||
- **Shell Scripts**: Repetitive coding tasks, bulk operations
|
||||
- **Cron Jobs**: Scheduled maintenance, analysis tasks
|
||||
- **Git Hooks**: Pre-commit validation, post-commit analysis
|
||||
- **DevOps Automation**: Infrastructure as code, deployment preparation
|
||||
|
||||
## Core Concepts
|
||||
|
||||
### 1. Agent Selection
|
||||
|
||||
Choose the appropriate agent based on your requirements:
|
||||
|
||||
**Claude Code CLI** - Best for general-purpose coding with excellent code understanding
|
||||
```bash
|
||||
# Basic usage
|
||||
claude -p "Review this code for security issues"
|
||||
|
||||
# With additional context
|
||||
claude -p "Generate tests for authentication module" --add-dir ./tests
|
||||
```
|
||||
|
||||
**OpenAI Codex CLI** - Best for complex refactoring and code transformation
|
||||
```bash
|
||||
# Automated refactoring
|
||||
codex exec --full-auto "Refactor this module to use async/await"
|
||||
|
||||
# Outside git repos
|
||||
codex exec --skip-git-repo-check --full-auto "Create API documentation"
|
||||
```
|
||||
|
||||
**Google Gemini CLI** - Best for analysis and documentation tasks
|
||||
```bash
|
||||
# Analysis with structured output
|
||||
gemini -p "Analyze codebase architecture" --output-format json
|
||||
|
||||
# Documentation generation
|
||||
cat src/ | gemini -p "Generate comprehensive API documentation"
|
||||
```
|
||||
|
||||
### 2. Safety and Autonomy Levels
|
||||
|
||||
Different agents provide varying levels of automation control:
|
||||
|
||||
**Read-Only Mode (Safest)**
|
||||
```bash
|
||||
# Analysis without changes
|
||||
droid exec "Analyze security vulnerabilities"
|
||||
gemini -p "Review code quality metrics"
|
||||
```
|
||||
|
||||
**Low-Risk Changes**
|
||||
```bash
|
||||
# Documentation and comments
|
||||
droid exec "Add docstrings to all functions" --auto low
|
||||
codex exec --full-auto "Update README with installation instructions"
|
||||
```
|
||||
|
||||
**Development Operations**
|
||||
```bash
|
||||
# Package installation, test running
|
||||
droid exec "Install dependencies and run tests" --auto medium
|
||||
codex exec --full-auto "Fix failing unit tests"
|
||||
```
|
||||
|
||||
**High-Risk Changes (Use Carefully)**
|
||||
```bash
|
||||
# Production deployments, major refactoring
|
||||
droid exec "Implement OAuth2 migration" --auto high
|
||||
# Only in isolated environments
|
||||
codex exec --yolo "Complete system refactoring"
|
||||
```
|
||||
|
||||
### 3. Input/Output Patterns
|
||||
|
||||
**Piping Content**
|
||||
```bash
|
||||
# Analyze git diff
|
||||
git diff | claude -p "Review these changes for bugs"
|
||||
|
||||
# Process error logs
|
||||
cat error.log | qwen -p "Categorize and summarize these errors"
|
||||
|
||||
# Multiple files
|
||||
find . -name "*.py" | xargs claude -p "Check for anti-patterns"
|
||||
```
|
||||
|
||||
**File-based Prompts**
|
||||
```bash
|
||||
# Read from prompt file
|
||||
droid exec -f migration_prompt.md
|
||||
|
||||
# JSON output for parsing
|
||||
gemini -p "List all API endpoints" --output-format json
|
||||
```
|
||||
|
||||
**Structured Output**
|
||||
```bash
|
||||
# Machine-readable output
|
||||
opencode -p "Count lines of code" -f json
|
||||
claude -p "Generate test coverage report" > coverage_report.md
|
||||
```
|
||||
|
||||
## Common Workflows
|
||||
|
||||
### Code Review Automation
|
||||
```bash
|
||||
# Quick security scan
|
||||
find . -name "*.py" | xargs claude -p "Check for security vulnerabilities"
|
||||
|
||||
# Performance analysis
|
||||
git diff | codex exec --full-auto "Analyze performance impact of changes"
|
||||
|
||||
# Documentation consistency
|
||||
droid exec "Verify all functions have docstrings" --auto low
|
||||
```
|
||||
|
||||
### Test Generation
|
||||
```bash
|
||||
# Unit tests for specific module
|
||||
claude -p "Generate comprehensive unit tests for auth.py using pytest"
|
||||
|
||||
# Integration tests
|
||||
codex exec --full-auto "Create API integration tests with realistic data"
|
||||
|
||||
# Test coverage analysis
|
||||
qwen -p "Analyze test coverage and suggest missing test cases"
|
||||
```
|
||||
|
||||
### Documentation Automation
|
||||
```bash
|
||||
# API documentation
|
||||
find src/ -name "*.py" | gemini -p "Generate OpenAPI specification"
|
||||
|
||||
# README generation
|
||||
claude -p "Create comprehensive README with setup, usage, and examples"
|
||||
|
||||
# Changelog from commits
|
||||
git log --oneline | qwen -p "Generate changelog from commit history"
|
||||
```
|
||||
|
||||
## Integration Patterns
|
||||
|
||||
### CI/CD Integration
|
||||
|
||||
**GitHub Actions**
|
||||
```yaml
|
||||
- name: AI Code Review
|
||||
run: |
|
||||
git diff origin/main...HEAD | claude -p "Review for security and performance issues"
|
||||
```
|
||||
|
||||
**GitLab CI**
|
||||
```yaml
|
||||
script:
|
||||
- gemini -p "Generate test suite for new features" --output-format json > test_plan.json
|
||||
```
|
||||
|
||||
### Pre-commit Hooks
|
||||
```bash
|
||||
#!/bin/sh
|
||||
# .git/hooks/pre-commit
|
||||
git diff --cached | claude -p "Check staged changes for obvious bugs"
|
||||
if [ $? -ne 0 ]; then exit 1; fi
|
||||
```
|
||||
|
||||
### Monitoring and Alerts
|
||||
```bash
|
||||
# Daily code quality report
|
||||
claude -p "Generate daily code quality report" | mail -s "Code Quality" team@example.com
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Security
|
||||
- Never use `--yolo` or equivalent flags in production environments
|
||||
- Validate AI-generated code before deployment
|
||||
- Use read-only mode for security-sensitive analysis
|
||||
- Implement human review for high-risk changes
|
||||
|
||||
### Performance
|
||||
- Limit the scope of analysis (specific files vs entire codebase)
|
||||
- Use structured output formats for programmatic processing
|
||||
- Cache results when appropriate
|
||||
- Monitor API usage and costs
|
||||
|
||||
### Reliability
|
||||
- Include fallback mechanisms for AI agent failures
|
||||
- Validate generated code with linters and tests
|
||||
- Use specific, well-defined prompts for consistent results
|
||||
- Implement retry logic for network issues
|
||||
|
||||
### Error Handling
|
||||
```bash
|
||||
# Robust script pattern
|
||||
if ! claude -p "Generate tests" > tests.py; then
|
||||
echo "AI generation failed, using fallback"
|
||||
cp fallback_tests.py tests.py
|
||||
fi
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
**Agent not found**: Ensure CLI tools are installed and in PATH
|
||||
```bash
|
||||
which claude codex gemini opencode qwen droid
|
||||
```
|
||||
|
||||
**Authentication errors**: Verify API keys and tokens
|
||||
```bash
|
||||
claude auth status
|
||||
codex auth verify
|
||||
```
|
||||
|
||||
**Permission denied**: Check file permissions and working directory
|
||||
```bash
|
||||
ls -la
|
||||
pwd
|
||||
```
|
||||
|
||||
**Context limit exceeded**: Reduce analysis scope or use specific files
|
||||
```bash
|
||||
# Instead of entire codebase
|
||||
claude -p "Analyze main.py only"
|
||||
|
||||
# Or use specific patterns
|
||||
find src/ -name "*.py" -maxdepth 2 | claude -p "Review these files"
|
||||
```
|
||||
|
||||
### Debug Mode
|
||||
Most agents support verbose output:
|
||||
```bash
|
||||
claude --verbose -p "Debug prompt"
|
||||
codex exec --debug "Debug task"
|
||||
```
|
||||
|
||||
## Resources
|
||||
|
||||
### references/
|
||||
|
||||
**agent-specific-commands.md** - Detailed command documentation for all six CLI agents including flags, options, and specific usage patterns. Load this when you need comprehensive syntax reference for a particular agent.
|
||||
|
||||
**use-case-examples.md** - Practical examples for CI/CD pipelines, shell scripts, and automation workflows. Load this when implementing specific automation scenarios or need concrete implementation patterns.
|
||||
|
||||
### scripts/
|
||||
|
||||
**validate-agent-setup.py** - Optional helper script to verify agent installations, API authentication, and basic functionality. Execute this to check if the required CLI agents are properly configured before using them in automation.
|
||||
|
||||
---
|
||||
|
||||
**References contain detailed command documentation and practical examples that complement this guide.**
|
||||
61
plugin.lock.json
Normal file
61
plugin.lock.json
Normal file
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"$schema": "internal://schemas/plugin.lock.v1.json",
|
||||
"pluginId": "gh:timurkhakhalev/cc-plugins:headless-cli-agents",
|
||||
"normalized": {
|
||||
"repo": null,
|
||||
"ref": "refs/tags/v20251128.0",
|
||||
"commit": "87c67967a1cc2c9b76bf166118b8a371a0e25b0f",
|
||||
"treeHash": "d4a3d8dea3696e472573ae6682853d892a39935b4b59cf07e2563eebb8c498da",
|
||||
"generatedAt": "2025-11-28T10:28:41.738773Z",
|
||||
"toolVersion": "publish_plugins.py@0.2.0"
|
||||
},
|
||||
"origin": {
|
||||
"remote": "git@github.com:zhongweili/42plugin-data.git",
|
||||
"branch": "master",
|
||||
"commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390",
|
||||
"repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data"
|
||||
},
|
||||
"manifest": {
|
||||
"name": "headless-cli-agents",
|
||||
"description": "Comprehensive guide for running AI coding agents in non-interactive mode for automation, CI/CD pipelines, and scripting",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
"content": {
|
||||
"files": [
|
||||
{
|
||||
"path": "README.md",
|
||||
"sha256": "f1c8f2e76cbe34a301a2682222bf0749e43236567dafe1b01a50fb23f36b8533"
|
||||
},
|
||||
{
|
||||
"path": "SKILL.md",
|
||||
"sha256": "7ce88f695ee1d3db69400b6848cf3eb125ee06327d825730f8c38400c5606411"
|
||||
},
|
||||
{
|
||||
"path": "references/api_reference.md",
|
||||
"sha256": "96126526510569488ab86e78bdd24d543a7b046489d3f6c34041a9d732ae0606"
|
||||
},
|
||||
{
|
||||
"path": "references/agent-specific-commands.md",
|
||||
"sha256": "63d7eb2a993feb9f00f24b92e3d500310020ce6dcc3bb7fed1c7c542003318ae"
|
||||
},
|
||||
{
|
||||
"path": "references/use-case-examples.md",
|
||||
"sha256": "874f19b33226f5ea4f741c89b55a87b172911a9c6d227b6b1bee122ff23b3b78"
|
||||
},
|
||||
{
|
||||
"path": "scripts/validate-agent-setup.py",
|
||||
"sha256": "21280b2006a793f3cfba0f2f51a6ac9db4d6f38dd414d85c9040f1902c322914"
|
||||
},
|
||||
{
|
||||
"path": ".claude-plugin/plugin.json",
|
||||
"sha256": "fe3e6d3ca4013e30cd72937ee15023d466486f8a9e0d656688941fb561cb1ed0"
|
||||
}
|
||||
],
|
||||
"dirSha256": "d4a3d8dea3696e472573ae6682853d892a39935b4b59cf07e2563eebb8c498da"
|
||||
},
|
||||
"security": {
|
||||
"scannedAt": null,
|
||||
"scannerVersion": null,
|
||||
"flags": []
|
||||
}
|
||||
}
|
||||
260
references/agent-specific-commands.md
Normal file
260
references/agent-specific-commands.md
Normal file
@@ -0,0 +1,260 @@
|
||||
# CLI Agent Commands Reference
|
||||
|
||||
## Claude Code CLI (Anthropic)
|
||||
|
||||
### Basic Headless Usage
|
||||
```bash
|
||||
claude -p "Your prompt here"
|
||||
```
|
||||
|
||||
### Key Flags
|
||||
- `-p` or `--prompt`: Execute one-shot prompt and exit
|
||||
- `--add-dir <path>`: Add additional directory to workspace context
|
||||
- `--model <model>`: Specify model (optional)
|
||||
|
||||
### Examples
|
||||
```bash
|
||||
# Basic one-shot query
|
||||
claude -p "Explain this function"
|
||||
|
||||
# Pipe input to Claude
|
||||
cat error.log | claude -p "Summarize these errors"
|
||||
|
||||
# Multiple directory context
|
||||
claude -p "Review the API design" --add-dir ../api-specs
|
||||
```
|
||||
|
||||
### Authentication
|
||||
Requires configured API key or OAuth token. Run `claude --help` for setup options.
|
||||
|
||||
---
|
||||
|
||||
## OpenAI Codex CLI
|
||||
|
||||
### Basic Headless Usage
|
||||
```bash
|
||||
codex exec "Your prompt here"
|
||||
codex e "Your prompt here" # Short alias
|
||||
```
|
||||
|
||||
### Key Flags
|
||||
- `--full-auto`: Unattended operation with workspace-write sandbox
|
||||
- `--dangerously-bypass-approvals-and-sandbox` or `--yolo`: Complete hands-off mode (use carefully)
|
||||
- `--skip-git-repo-check`: Allow execution outside Git repositories
|
||||
- `--cd <path>`: Set working directory
|
||||
- `--model <model>` or `-m`: Specify model (e.g., `-m gpt-5-codex`)
|
||||
|
||||
### Examples
|
||||
```bash
|
||||
# Automated refactoring
|
||||
codex exec --full-auto "Update all README links to HTTPS"
|
||||
|
||||
# Outside Git repo
|
||||
codex exec --skip-git-repo-check --full-auto "Create hello world HTML"
|
||||
|
||||
# Different working directory
|
||||
codex exec --cd /path/to/project "Fix failing tests"
|
||||
```
|
||||
|
||||
### Input Methods
|
||||
```bash
|
||||
# Pipe prompt from file
|
||||
codex exec - < prompt.txt
|
||||
|
||||
# Standard input
|
||||
echo "Review this code" | codex exec -
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Google Gemini CLI
|
||||
|
||||
### Basic Headless Usage
|
||||
```bash
|
||||
gemini --prompt "Your prompt here"
|
||||
gemini -p "Your prompt here" # Short form
|
||||
```
|
||||
|
||||
### Key Flags
|
||||
- `--prompt` or `-p`: Execute prompt and exit
|
||||
- `--output-format <format>`: Output format (json, stream-json)
|
||||
- `--model <model>`: Specify model variant
|
||||
|
||||
### Examples
|
||||
```bash
|
||||
# Basic query
|
||||
gemini -p "Summarize API design in this repo"
|
||||
|
||||
# Pipe input with prompt
|
||||
echo "List TODO comments" | gemini -p "-"
|
||||
|
||||
# JSON output
|
||||
gemini -p "Analyze code structure" --output-format json
|
||||
|
||||
# Process file with instruction
|
||||
cat DESIGN.md | gemini -p "Improve this design document"
|
||||
```
|
||||
|
||||
### Authentication
|
||||
Requires Google account authentication or API key setup.
|
||||
|
||||
---
|
||||
|
||||
## OpenCode CLI
|
||||
|
||||
### Basic Headless Usage
|
||||
```bash
|
||||
opencode -p "Your prompt here"
|
||||
opencode --prompt "Your prompt here"
|
||||
```
|
||||
|
||||
### Key Flags
|
||||
- `-p` or `--prompt`: Execute single prompt and exit
|
||||
- `-f <format>` or `--format`: Output format (json)
|
||||
- `-q` or `--quiet`: Suppress loading spinner
|
||||
- `--cwd <path>`: Set working directory
|
||||
|
||||
### Examples
|
||||
```bash
|
||||
# Basic query
|
||||
opencode -p "Explain Go context usage"
|
||||
|
||||
# JSON output
|
||||
opencode -p "How many files in project?" -f json
|
||||
|
||||
# Quiet mode for scripting
|
||||
opencode -p "Review code" -q
|
||||
|
||||
# Different working directory
|
||||
opencode -p "Analyze this project" --cwd /path/to/project
|
||||
```
|
||||
|
||||
### Environment Setup
|
||||
Requires API keys for providers (OpenAI, Anthropic, etc.) in environment variables.
|
||||
|
||||
---
|
||||
|
||||
## Alibaba Qwen Code CLI
|
||||
|
||||
### Basic Headless Usage
|
||||
```bash
|
||||
qwen -p "Your prompt here"
|
||||
```
|
||||
|
||||
### Key Flags
|
||||
- `-p` or `--prompt`: Execute one-shot prompt
|
||||
- `--output-format <format>`: Output format (json)
|
||||
- `--model <model>`: Specify Qwen model variant
|
||||
- `--yolo`: Bypass confirmations (similar to other agents)
|
||||
|
||||
### Examples
|
||||
```bash
|
||||
# Code review
|
||||
qwen -p "Review this code for potential bugs"
|
||||
|
||||
# Generate tests
|
||||
qwen -p "Generate unit tests for utils.py"
|
||||
|
||||
# Pipe diff for review
|
||||
git diff | qwen -p "Review this diff for errors"
|
||||
|
||||
# JSON output
|
||||
qwen -p "List project files" --output-format json
|
||||
```
|
||||
|
||||
### Authentication
|
||||
- First-time setup: Run `qwen` interactively to login with Qwen.ai OAuth
|
||||
- Cached credentials: Used automatically for subsequent `-p` calls
|
||||
- Local models: Set OPENAI_API_KEY and related env vars for local LLM servers
|
||||
|
||||
---
|
||||
|
||||
## Factory Droid CLI
|
||||
|
||||
### Basic Headless Usage
|
||||
```bash
|
||||
droid exec "Your prompt here"
|
||||
```
|
||||
|
||||
### Key Flags
|
||||
- `--auto <level>`: Set autonomy level (low, medium, high)
|
||||
- `--skip-permissions-unsafe`: Bypass all permission checks (use carefully)
|
||||
- `--cwd <path>`: Set working directory
|
||||
- `-f <file>`: Read prompt from file
|
||||
- `-o <format>`: Output format (json)
|
||||
|
||||
### Autonomy Levels
|
||||
- **Default (no flag)**: Read-only mode, safe for analysis
|
||||
- `--auto low`: Allow low-risk file edits (documentation, simple refactors)
|
||||
- `--auto medium`: Allow development operations (install packages, run tests)
|
||||
- `--auto high`: Permit production-level changes (full access)
|
||||
|
||||
### Examples
|
||||
```bash
|
||||
# Read-only analysis
|
||||
droid exec "List all TODO comments across the project"
|
||||
|
||||
# Low-risk edits
|
||||
droid exec "Fix typos in README.md" --auto low
|
||||
|
||||
# Development operations
|
||||
droid exec "Fix failing unit tests" --auto medium
|
||||
|
||||
# High-risk changes
|
||||
droid exec "Implement OAuth2 migration" --auto high
|
||||
|
||||
# Read prompt from file
|
||||
droid exec -f prompt.md
|
||||
|
||||
# JSON output
|
||||
droid exec "Analyze codebase" -o json
|
||||
|
||||
# Different working directory
|
||||
droid exec "Review this code" --cwd /path/to/project
|
||||
```
|
||||
|
||||
### Safety Notes
|
||||
- Default mode is read-only for safety
|
||||
- Use `--skip-permissions-unsafe` only in sandboxed environments
|
||||
- Consider autonomy levels carefully based on use case
|
||||
|
||||
---
|
||||
|
||||
## Common Patterns
|
||||
|
||||
### piping Input
|
||||
Most agents support piping input:
|
||||
```bash
|
||||
# Pipe file content
|
||||
cat file.txt | agent -p "Process this"
|
||||
|
||||
# Pipe command output
|
||||
git log --oneline | agent -p "Summarize commits"
|
||||
```
|
||||
|
||||
### Reading from Files
|
||||
```bash
|
||||
# Direct file reading (if supported)
|
||||
agent -f prompt.txt
|
||||
|
||||
# Using cat and pipe
|
||||
cat prompt.txt | agent -p "-"
|
||||
```
|
||||
|
||||
### JSON Output
|
||||
For scripting and automation:
|
||||
```bash
|
||||
# JSON output format
|
||||
agent -p "Query" --output-format json
|
||||
agent -p "Query" -f json
|
||||
agent -p "Query" -o json
|
||||
```
|
||||
|
||||
### Automation Flags
|
||||
For completely unattended operation:
|
||||
```bash
|
||||
# Various automation flags per agent
|
||||
codex --full-auto "Task"
|
||||
droid --auto medium "Task"
|
||||
gemini --yolo "Task" # if available
|
||||
```
|
||||
34
references/api_reference.md
Normal file
34
references/api_reference.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# Reference Documentation for Headless Cli Agents
|
||||
|
||||
This is a placeholder for detailed reference documentation.
|
||||
Replace with actual reference content or delete if not needed.
|
||||
|
||||
Example real reference docs from other skills:
|
||||
- product-management/references/communication.md - Comprehensive guide for status updates
|
||||
- product-management/references/context_building.md - Deep-dive on gathering context
|
||||
- bigquery/references/ - API references and query examples
|
||||
|
||||
## When Reference Docs Are Useful
|
||||
|
||||
Reference docs are ideal for:
|
||||
- Comprehensive API documentation
|
||||
- Detailed workflow guides
|
||||
- Complex multi-step processes
|
||||
- Information too lengthy for main SKILL.md
|
||||
- Content that's only needed for specific use cases
|
||||
|
||||
## Structure Suggestions
|
||||
|
||||
### API Reference Example
|
||||
- Overview
|
||||
- Authentication
|
||||
- Endpoints with examples
|
||||
- Error codes
|
||||
- Rate limits
|
||||
|
||||
### Workflow Guide Example
|
||||
- Prerequisites
|
||||
- Step-by-step instructions
|
||||
- Common patterns
|
||||
- Troubleshooting
|
||||
- Best practices
|
||||
363
references/use-case-examples.md
Normal file
363
references/use-case-examples.md
Normal file
@@ -0,0 +1,363 @@
|
||||
# CLI Agents Use Case Examples
|
||||
|
||||
## CI/CD Pipeline Examples
|
||||
|
||||
### GitHub Actions - Code Review
|
||||
|
||||
```yaml
|
||||
name: AI Code Review
|
||||
on:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
ai-review:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup Claude Code CLI
|
||||
run: |
|
||||
curl -fsSL https://claude.ai/install.sh | sh
|
||||
echo "$CLAUDE_API_KEY" | claude auth login
|
||||
env:
|
||||
CLAUDE_API_KEY: ${{ secrets.CLAUDE_API_KEY }}
|
||||
|
||||
- name: Review PR Changes
|
||||
run: |
|
||||
git diff origin/main...HEAD | claude -p "Review these changes for potential bugs, security issues, and best practices. Focus on: 1) Error handling 2) Performance 3) Security 4) Code quality"
|
||||
|
||||
- name: Check for TODO Comments
|
||||
run: |
|
||||
find . -name "*.py" -o -name "*.js" -o -name "*.ts" | xargs grep -l "TODO\|FIXME" | claude -p "Review these files containing TODO/FIXME comments and suggest implementation approaches"
|
||||
```
|
||||
|
||||
### GitLab CI - Documentation Generation
|
||||
|
||||
```yaml
|
||||
stages:
|
||||
- analyze
|
||||
- build
|
||||
|
||||
code-analysis:
|
||||
stage: analyze
|
||||
image: node:18
|
||||
before_script:
|
||||
- npm install -g @anthropic-ai/claude-cli
|
||||
script:
|
||||
- |
|
||||
claude -p "Generate comprehensive API documentation for this codebase. Focus on: 1) Endpoints 2) Request/response formats 3) Authentication 4) Error codes" > API_DOCUMENTATION.md
|
||||
claude -p "Create a README with setup instructions, usage examples, and contribution guidelines" > README_ENHANCED.md
|
||||
artifacts:
|
||||
paths:
|
||||
- API_DOCUMENTATION.md
|
||||
- README_ENHANCED.md
|
||||
```
|
||||
|
||||
### Jenkins Pipeline - Test Generation
|
||||
|
||||
```groovy
|
||||
pipeline {
|
||||
agent any
|
||||
|
||||
stages {
|
||||
stage('AI Test Generation') {
|
||||
steps {
|
||||
script {
|
||||
sh '''
|
||||
# Generate unit tests for untested functions
|
||||
find src -name "*.py" -exec grep -L "def test_" {} \\; | codex exec --full-auto --skip-git-repo-check "Generate comprehensive unit tests for these files using pytest framework. Include edge cases and error handling."
|
||||
|
||||
# Generate integration tests
|
||||
codex exec --full-auto "Create integration tests for the main API endpoints. Test authentication, data flow, and error scenarios."
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Run Tests') {
|
||||
steps {
|
||||
sh 'python -m pytest'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Shell Scripting Examples
|
||||
|
||||
### Code Quality Check Script
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# quality-check.sh - Automated code quality analysis
|
||||
|
||||
set -e
|
||||
|
||||
echo "🔍 Running AI-powered code quality checks..."
|
||||
|
||||
# Check for security vulnerabilities
|
||||
echo "🔒 Checking for security issues..."
|
||||
find . -name "*.py" -o -name "*.js" -o -name "*.ts" | \
|
||||
xargs grep -l "password\|secret\|token\|key" | \
|
||||
claude -p "Analyze these files for potential security vulnerabilities. Look for: 1) Hardcoded credentials 2) Insecure data handling 3) Missing input validation 4) Authentication bypasses"
|
||||
|
||||
# Check for performance issues
|
||||
echo "⚡ Analyzing performance patterns..."
|
||||
find . -name "*.py" | head -10 | \
|
||||
claude -p "Review these files for performance bottlenecks. Focus on: 1) Database queries 2) Loops and recursion 3) Memory usage 4) Async operations"
|
||||
|
||||
# Generate quality report
|
||||
echo "📋 Generating quality report..."
|
||||
claude -p "Create a comprehensive code quality report summarizing: 1) Security findings 2) Performance issues 3) Code style violations 4) Recommendations for improvement" > QUALITY_REPORT.md
|
||||
|
||||
echo "✅ Quality check completed. See QUALITY_REPORT.md"
|
||||
```
|
||||
|
||||
### Automated Refactoring Script
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# refactor.sh - Automated code refactoring
|
||||
|
||||
PROJECT_DIR=${1:-.}
|
||||
REFACTOR_TYPE=${2:-"general"}
|
||||
|
||||
echo "🔧 Starting automated refactoring in $PROJECT_DIR..."
|
||||
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
case "$REFACTOR_TYPE" in
|
||||
"security")
|
||||
codex exec --full-auto "Review all files for security issues and implement fixes: 1) Input sanitization 2) Output encoding 3) Authentication improvements 4) Secure headers"
|
||||
;;
|
||||
"performance")
|
||||
codex exec --full-auto "Optimize code for performance: 1) Database query optimization 2) Caching strategies 3) Async/await patterns 4) Resource cleanup"
|
||||
;;
|
||||
"documentation")
|
||||
codex exec --full-auto "Add comprehensive documentation: 1) Function docstrings 2) Type hints 3) Usage examples 4) README updates"
|
||||
;;
|
||||
*)
|
||||
codex exec --full-auto "General code refactoring: 1) Improve naming conventions 2) Reduce complexity 3) Add error handling 4) Code organization"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "✅ Refactoring completed"
|
||||
```
|
||||
|
||||
### Dependency Update Script
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# update-dependencies.sh - Smart dependency management
|
||||
|
||||
echo "📦 Analyzing and updating dependencies..."
|
||||
|
||||
# Check for security updates
|
||||
gemini -p "Analyze package.json/requirements.txt for security vulnerabilities and outdated dependencies. Suggest specific version updates with migration notes." > DEPENDENCY_ANALYSIS.md
|
||||
|
||||
# Update packages (if safe)
|
||||
if [ "$1" = "--auto" ]; then
|
||||
echo "🚀 Auto-updating dependencies..."
|
||||
droid exec "Update all dependencies to latest safe versions. Create migration plan for breaking changes." --auto medium
|
||||
fi
|
||||
|
||||
# Generate changelog
|
||||
claude -p "Create a changelog entry documenting dependency updates, security improvements, and potential breaking changes." > CHANGELOG.md
|
||||
|
||||
echo "✅ Dependency analysis completed"
|
||||
```
|
||||
|
||||
## Automation Workflow Examples
|
||||
|
||||
### Pre-commit Hook
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# .git/hooks/pre-commit
|
||||
|
||||
echo "🤖 Running AI pre-commit checks..."
|
||||
|
||||
# Check commit message
|
||||
commit_msg=$(git log -1 --pretty=%B)
|
||||
echo "$commit_msg" | claude -p "Validate this commit message. Check for: 1) Clear description 2) Proper format 3) Issue references 4) Breaking change indicators"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ Commit message validation failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Quick code review of staged changes
|
||||
git diff --cached | claude -p "Quick review of staged changes. Check for: 1) Obvious bugs 2) Syntax errors 3) Missing tests 4) Security issues"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ Code review found issues"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Pre-commit checks passed"
|
||||
```
|
||||
|
||||
### Release Preparation Script
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# prepare-release.sh - Automated release preparation
|
||||
|
||||
VERSION=${1:-"patch"}
|
||||
RELEASE_BRANCH=${2:-"release"}
|
||||
|
||||
echo "🚀 Preparing release for version bump: $VERSION"
|
||||
|
||||
# Create release branch
|
||||
git checkout -b "$RELEASE_BRANCH"
|
||||
|
||||
# Update version numbers
|
||||
codex exec --full-auto "Update all version numbers in the project for a $VERSION release: 1) package.json 2) __init__.py files 3) Docker files 4) Documentation"
|
||||
|
||||
# Generate release notes
|
||||
git log --oneline $(git describe --tags --abbrev=0)..HEAD | \
|
||||
qwen -p "Create comprehensive release notes from these commits. Categorize by: 1) Features 2) Bug fixes 3) Breaking changes 4) Security improvements" > RELEASE_NOTES.md
|
||||
|
||||
# Update documentation
|
||||
droid exec "Update all documentation for new release: 1) API docs 2) README 3) Installation guides 4) Migration guides" --auto low
|
||||
|
||||
echo "✅ Release preparation completed"
|
||||
echo "📋 Review RELEASE_NOTES.md and commit changes"
|
||||
```
|
||||
|
||||
### Database Migration Helper
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# migrate-db.sh - AI-assisted database migrations
|
||||
|
||||
MIGRATION_NAME=${1:-"auto_migration"}
|
||||
|
||||
echo "🗄️ Generating migration: $MIGRATION_NAME"
|
||||
|
||||
# Analyze schema changes
|
||||
find models/ -name "*.py" | \
|
||||
claude -p "Analyze these model files for schema changes since last migration. Identify: 1) New tables 2) Column changes 3) Index changes 4) Relationship updates"
|
||||
|
||||
# Generate migration file
|
||||
codex exec --full-auto "Create a database migration file named ${MIGRATION_NAME}.py. Include: 1) Forward migration 2) Rollback migration 3) Data transformations 4) Safety checks"
|
||||
|
||||
# Generate test data
|
||||
gemini -p "Generate test data and validation queries for the new migration. Include: 1) Sample records 2) Constraint tests 3) Performance test queries"
|
||||
|
||||
echo "✅ Migration generated. Review and run: python manage.py migrate"
|
||||
```
|
||||
|
||||
## Monitoring and Maintenance Examples
|
||||
|
||||
### Log Analysis Script
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# analyze-logs.sh - AI-powered log analysis
|
||||
|
||||
LOG_FILE=${1:-"app.log"}
|
||||
TIMEFRAME=${2:-"24h"}
|
||||
|
||||
echo "📊 Analyzing logs from $LOG_FILE (last $TIMEFRAME)..."
|
||||
|
||||
# Extract errors and warnings
|
||||
grep -E "(ERROR|WARN|CRITICAL)" "$LOG_FILE" | \
|
||||
qwen -p "Analyze these log entries for: 1) Error patterns 2) Root causes 3) Frequency analysis 4) Recommended fixes" > ERROR_ANALYSIS.md
|
||||
|
||||
# Performance analysis
|
||||
grep -E "(slow|timeout|memory|performance)" "$LOG_FILE" | \
|
||||
claude -p "Identify performance issues from these logs. Focus on: 1) Slow queries 2) Memory leaks 3) Timeout patterns 4) Resource bottlenecks" > PERFORMANCE_ISSUES.md
|
||||
|
||||
# Generate summary
|
||||
gemini -p "Create an executive summary of log analysis including: 1) Critical issues 2) Performance impact 3) Security concerns 4) Action items" > LOG_SUMMARY.md
|
||||
|
||||
echo "✅ Log analysis completed. Check *.md files"
|
||||
```
|
||||
|
||||
### Health Check Automation
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# health-check.sh - Automated system health analysis
|
||||
|
||||
echo "🏥 Running AI-powered health checks..."
|
||||
|
||||
# Code health
|
||||
find . -name "*.py" | head -20 | \
|
||||
droid exec "Analyze code health indicators: 1) Code complexity 2) Test coverage gaps 3) Dead code 4) Anti-patterns" --auto low > CODE_HEALTH.md
|
||||
|
||||
# Dependency health
|
||||
claude -p "Analyze project dependencies for: 1) Security vulnerabilities 2) License compliance 3) Version conflicts 4) Maintenance status" > DEPENDENCY_HEALTH.md
|
||||
|
||||
# Architecture health
|
||||
gemini -p "Review project architecture for: 1) Design patterns 2) Coupling issues 3) Scalability concerns 4) Technical debt" > ARCHITECTURE_HEALTH.md
|
||||
|
||||
# Generate actionable report
|
||||
claude -p "Create a prioritized action plan based on health checks. Include: 1) Critical fixes 2) Improvements 3) Technical debt roadmap 4) Resource allocation" > HEALTH_ACTION_PLAN.md
|
||||
|
||||
echo "✅ Health check completed. Review generated reports"
|
||||
```
|
||||
|
||||
## Integration Examples
|
||||
|
||||
### Slack Integration
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# slack-ai-notify.sh - Send AI analysis to Slack
|
||||
|
||||
WEBHOOK_URL=${SLACK_WEBHOOK_URL}
|
||||
PROJECT_DIR=${1:-"."}
|
||||
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
# Analyze recent changes
|
||||
git diff HEAD~1 | \
|
||||
claude -p "Analyze recent changes and create a concise summary for team notification. Include: 1) Key changes 2) Impact 3) Any action needed" > CHANGE_SUMMARY.txt
|
||||
|
||||
# Send to Slack
|
||||
curl -X POST -H 'Content-type: application/json' \
|
||||
--data "{\"text\":\"$(cat CHANGE_SUMMARY.txt)\"}" \
|
||||
"$WEBHOOK_URL"
|
||||
|
||||
echo "📢 AI summary sent to Slack"
|
||||
```
|
||||
|
||||
### Email Reports
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# email-ai-report.sh - Generate and email AI reports
|
||||
|
||||
EMAIL=${1:-"team@example.com"}
|
||||
REPORT_TYPE=${2:-"weekly"}
|
||||
|
||||
echo "📧 Generating $REPORT_TYPE report..."
|
||||
|
||||
case "$REPORT_TYPE" in
|
||||
"weekly")
|
||||
git log --since="1 week ago" --oneline | \
|
||||
qwen -p "Create a weekly development report. Include: 1) Features completed 2) Bugs fixed 3) Code quality metrics 4) Team achievements" > weekly_report.md
|
||||
;;
|
||||
"security")
|
||||
find . -name "*.py" -o -name "*.js" | \
|
||||
claude -p "Generate a security audit report. Include: 1) Vulnerabilities found 2) Risk assessment 3) Remediation steps 4) Best practices" > security_report.md
|
||||
;;
|
||||
esac
|
||||
|
||||
# Send email (using mail command or your preferred method)
|
||||
mail -s "AI-generated $REPORT_TYPE report" "$EMAIL" < "${REPORT_TYPE}_report.md"
|
||||
|
||||
echo "✅ Report emailed to $EMAIL"
|
||||
```
|
||||
270
scripts/validate-agent-setup.py
Executable file
270
scripts/validate-agent-setup.py
Executable file
@@ -0,0 +1,270 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
CLI Agent Setup Validation Script
|
||||
|
||||
This script checks if various AI coding CLI agents are properly installed,
|
||||
configured, and authenticated for headless operation.
|
||||
|
||||
Usage:
|
||||
python validate-agent-setup.py [agent_name]
|
||||
|
||||
If agent_name is provided, only that agent will be checked.
|
||||
Otherwise, all available agents will be validated.
|
||||
"""
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
import json
|
||||
import os
|
||||
from typing import Dict, List, Tuple, Optional
|
||||
|
||||
# Agent configuration
|
||||
AGENTS = {
|
||||
"claude": {
|
||||
"commands": ["claude", "claude -p 'test'"],
|
||||
"install_url": "https://claude.ai/install",
|
||||
"auth_check": "claude auth status",
|
||||
"description": "Anthropic Claude Code CLI"
|
||||
},
|
||||
"codex": {
|
||||
"commands": ["codex", "codex exec 'test'"],
|
||||
"install_url": "https://platform.openai.com/docs/cli",
|
||||
"auth_check": "codex auth verify",
|
||||
"description": "OpenAI Codex CLI"
|
||||
},
|
||||
"gemini": {
|
||||
"commands": ["gemini", "gemini -p 'test'"],
|
||||
"install_url": "https://geminicli.com/docs/installation",
|
||||
"auth_check": "gemini auth status",
|
||||
"description": "Google Gemini CLI"
|
||||
},
|
||||
"opencode": {
|
||||
"commands": ["opencode", "opencode -p 'test'"],
|
||||
"install_url": "https://github.com/opencode-ai/opencode",
|
||||
"auth_check": "echo 'Check environment variables for API keys'",
|
||||
"description": "OpenCode CLI (multi-provider)"
|
||||
},
|
||||
"qwen": {
|
||||
"commands": ["qwen", "qwen -p 'test'"],
|
||||
"install_url": "https://github.com/QwenLM/qwen-code",
|
||||
"auth_check": "qwen auth status",
|
||||
"description": "Alibaba Qwen Code CLI"
|
||||
},
|
||||
"droid": {
|
||||
"commands": ["droid", "droid exec 'test'"],
|
||||
"install_url": "https://docs.factory.ai/cli/installation",
|
||||
"auth_check": "droid auth status",
|
||||
"description": "Factory Droid CLI"
|
||||
}
|
||||
}
|
||||
|
||||
def run_command(cmd: str, timeout: int = 30) -> Tuple[int, str, str]:
|
||||
"""Run a command and return exit code, stdout, stderr"""
|
||||
try:
|
||||
result = subprocess.run(
|
||||
cmd.split() if isinstance(cmd, str) else cmd,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=timeout
|
||||
)
|
||||
return result.returncode, result.stdout, result.stderr
|
||||
except subprocess.TimeoutExpired:
|
||||
return -1, "", "Command timed out"
|
||||
except Exception as e:
|
||||
return -1, "", str(e)
|
||||
|
||||
def check_agent_installation(agent_name: str, config: Dict) -> Dict:
|
||||
"""Check if an agent is properly installed"""
|
||||
results = {
|
||||
"agent": agent_name,
|
||||
"description": config["description"],
|
||||
"installed": False,
|
||||
"version": None,
|
||||
"auth_status": "unknown",
|
||||
"basic_test": False,
|
||||
"errors": [],
|
||||
"recommendations": []
|
||||
}
|
||||
|
||||
# Check if command exists
|
||||
cmd = config["commands"][0]
|
||||
exit_code, stdout, stderr = run_command(f"which {cmd}")
|
||||
|
||||
if exit_code != 0:
|
||||
results["errors"].append(f"Command '{cmd}' not found in PATH")
|
||||
results["recommendations"].append(f"Install from: {config['install_url']}")
|
||||
return results
|
||||
|
||||
results["installed"] = True
|
||||
results["version"] = stdout.strip() or "Unknown version"
|
||||
|
||||
# Check authentication
|
||||
if "auth_check" in config:
|
||||
exit_code, auth_stdout, auth_stderr = run_command(config["auth_check"])
|
||||
if exit_code == 0:
|
||||
results["auth_status"] = "authenticated"
|
||||
else:
|
||||
results["auth_status"] = "not_authenticated"
|
||||
results["errors"].append(f"Authentication check failed: {auth_stderr}")
|
||||
results["recommendations"].append("Run authentication command for this agent")
|
||||
|
||||
# Basic functionality test (try to get help)
|
||||
exit_code, help_stdout, help_stderr = run_command(f"{cmd} --help", timeout=10)
|
||||
if exit_code == 0:
|
||||
results["basic_test"] = True
|
||||
|
||||
return results
|
||||
|
||||
def check_environment_requirements() -> Dict:
|
||||
"""Check general environment requirements"""
|
||||
results = {
|
||||
"python_version": sys.version,
|
||||
"working_directory": os.getcwd(),
|
||||
"environment_variables": {},
|
||||
"recommendations": []
|
||||
}
|
||||
|
||||
# Check for common environment variables
|
||||
env_vars = [
|
||||
"ANTHROPIC_API_KEY",
|
||||
"OPENAI_API_KEY",
|
||||
"GOOGLE_API_KEY",
|
||||
"OPENAI_BASE_URL",
|
||||
"CLAUDE_API_KEY"
|
||||
]
|
||||
|
||||
for var in env_vars:
|
||||
value = os.environ.get(var)
|
||||
results["environment_variables"][var] = "SET" if value else "NOT_SET"
|
||||
|
||||
# Check git availability
|
||||
exit_code, stdout, stderr = run_command("git --version")
|
||||
if exit_code != 0:
|
||||
results["recommendations"].append("Install git for better agent integration")
|
||||
|
||||
return results
|
||||
|
||||
def print_results(results: List[Dict], env_info: Dict, format_type: str = "table"):
|
||||
"""Print validation results in specified format"""
|
||||
|
||||
if format_type == "json":
|
||||
output = {
|
||||
"environment": env_info,
|
||||
"agents": results
|
||||
}
|
||||
print(json.dumps(output, indent=2))
|
||||
return
|
||||
|
||||
# Table format
|
||||
print("\n" + "="*80)
|
||||
print("🤖 CLI AGENT SETUP VALIDATION")
|
||||
print("="*80)
|
||||
|
||||
print(f"\n📁 Working Directory: {env_info['working_directory']}")
|
||||
print(f"🐍 Python Version: {env_info['python_version'].split()[0]}")
|
||||
|
||||
print("\n🔑 Environment Variables:")
|
||||
for var, status in env_info["environment_variables"].items():
|
||||
status_icon = "✅" if status == "SET" else "❌"
|
||||
print(f" {status_icon} {var}: {status}")
|
||||
|
||||
print("\n" + "="*80)
|
||||
print("AGENT STATUS")
|
||||
print("="*80)
|
||||
|
||||
for result in results:
|
||||
agent = result["agent"]
|
||||
description = result["description"]
|
||||
|
||||
# Status icons
|
||||
install_icon = "✅" if result["installed"] else "❌"
|
||||
auth_icon = "✅" if result["auth_status"] == "authenticated" else "❌" if result["auth_status"] == "not_authenticated" else "⚠️"
|
||||
test_icon = "✅" if result["basic_test"] else "❌"
|
||||
|
||||
print(f"\n{install_icon} {agent.upper()}: {description}")
|
||||
print(f" 📦 Installed: {'Yes' if result['installed'] else 'No'}")
|
||||
print(f" 🔐 Auth Status: {result['auth_status']}")
|
||||
print(f" 🧪 Basic Test: {'Pass' if result['basic_test'] else 'Fail'}")
|
||||
|
||||
if result["version"]:
|
||||
print(f" 📋 Version: {result['version']}")
|
||||
|
||||
if result["errors"]:
|
||||
print(" ❌ Errors:")
|
||||
for error in result["errors"]:
|
||||
print(f" • {error}")
|
||||
|
||||
if result["recommendations"]:
|
||||
print(" 💡 Recommendations:")
|
||||
for rec in result["recommendations"]:
|
||||
print(f" • {rec}")
|
||||
|
||||
print("\n" + "="*80)
|
||||
print("SUMMARY")
|
||||
print("="*80)
|
||||
|
||||
installed_count = sum(1 for r in results if r["installed"])
|
||||
auth_count = sum(1 for r in results if r["auth_status"] == "authenticated")
|
||||
|
||||
print(f"📦 Agents Installed: {installed_count}/{len(results)}")
|
||||
print(f"🔐 Agents Authenticated: {auth_count}/{len(results)}")
|
||||
|
||||
if env_info["recommendations"]:
|
||||
print("\n💡 General Recommendations:")
|
||||
for rec in env_info["recommendations"]:
|
||||
print(f" • {rec}")
|
||||
|
||||
def main():
|
||||
"""Main validation function"""
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description="Validate CLI agent setup")
|
||||
parser.add_argument("agent", nargs="?", choices=list(AGENTS.keys()),
|
||||
help="Specific agent to check (default: all)")
|
||||
parser.add_argument("--format", choices=["table", "json"], default="table",
|
||||
help="Output format (default: table)")
|
||||
parser.add_argument("--quiet", action="store_true",
|
||||
help="Only show summary")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# Check environment
|
||||
env_info = check_environment_requirements()
|
||||
|
||||
# Check agents
|
||||
if args.agent:
|
||||
agents_to_check = {args.agent: AGENTS[args.agent]}
|
||||
else:
|
||||
agents_to_check = AGENTS
|
||||
|
||||
results = []
|
||||
for agent_name, config in agents_to_check.items():
|
||||
result = check_agent_installation(agent_name, config)
|
||||
results.append(result)
|
||||
|
||||
if not args.quiet:
|
||||
print(f"Checking {agent_name}...", end=" ")
|
||||
if result["installed"]:
|
||||
print("✅ Found")
|
||||
else:
|
||||
print("❌ Not found")
|
||||
|
||||
# Print results
|
||||
if not args.quiet:
|
||||
print_results(results, env_info, args.format)
|
||||
else:
|
||||
# Quiet summary
|
||||
installed = sum(1 for r in results if r["installed"])
|
||||
authenticated = sum(1 for r in results if r["auth_status"] == "authenticated")
|
||||
print(f"Installed: {installed}/{len(results)} | Authenticated: {authenticated}/{len(results)}")
|
||||
|
||||
# Exit code based on results
|
||||
if not any(r["installed"] for r in results):
|
||||
sys.exit(2) # No agents installed
|
||||
elif not all(r["installed"] for r in results):
|
||||
sys.exit(1) # Some agents missing
|
||||
else:
|
||||
sys.exit(0) # All good
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user