Files
Claude-Code-Workflow/.claude/skills/skill-generator/specs/cli-integration.md
catlog22 9762445876 refactor: Convert skill-generator from Chinese to English and remove emoji icons
- Convert all markdown files from Chinese to English
- Remove all emoji/icon decorations (🔧📋⚙️🏁🔍📚)
- Update all section headers, descriptions, and documentation
- Keep all content logic, structure, code examples unchanged
- Maintain template variables and file paths as-is

Files converted (9 files total):
- SKILL.md: Output structure comments
- templates/skill-md.md: All Chinese descriptions and comments
- specs/reference-docs-spec.md: All section headers and explanations
- phases/01-requirements-discovery.md through 05-validation.md (5 files)
- specs/execution-modes.md, skill-requirements.md, cli-integration.md, scripting-integration.md (4 files)
- templates/sequential-phase.md, autonomous-orchestrator.md, autonomous-action.md, code-analysis-action.md, llm-action.md, script-template.md (6 files)

All 16 files in skill-generator are now fully in English.
2026-01-29 15:42:46 +08:00

443 lines
9.5 KiB
Markdown

# CLI Integration Specification
CCW CLI integration specification that defines how to properly call external CLI tools within Skills.
---
## Execution Modes
### 1. Synchronous Execution (Blocking)
Suitable for scenarios that need immediate results.
```javascript
// Agent call - synchronous
const result = Task({
subagent_type: 'universal-executor',
prompt: 'Execute task...',
run_in_background: false // Key: synchronous execution
});
// Result immediately available
console.log(result);
```
### 2. Asynchronous Execution (Background)
Suitable for long-running CLI commands.
```javascript
// CLI call - asynchronous
const task = Bash({
command: 'ccw cli -p "..." --tool gemini --mode analysis',
run_in_background: true // Key: background execution
});
// Returns immediately without waiting for result
// task.task_id available for later queries
```
---
## CCW CLI Call Specification
### Basic Command Structure
```bash
ccw cli -p "<PROMPT>" --tool <gemini|qwen|codex> --mode <analysis|write>
```
### Parameter Description
| Parameter | Required | Description |
|-----------|----------|-------------|
| `-p "<prompt>"` | Yes | Prompt text (use double quotes) |
| `--tool <tool>` | Yes | Tool selection: gemini, qwen, codex |
| `--mode <mode>` | Yes | Execution mode: analysis, write |
| `--cd <path>` | - | Working directory |
| `--includeDirs <dirs>` | - | Additional directories (comma-separated) |
| `--resume [id]` | - | Resume session |
### Mode Selection
```
- Analysis/Documentation tasks?
→ --mode analysis (read-only)
- Implementation/Modification tasks?
→ --mode write (read-write)
```
---
## Agent Types and Selection
### universal-executor
General-purpose executor, the most commonly used agent type.
```javascript
Task({
subagent_type: 'universal-executor',
prompt: `
Execute task:
1. Read configuration file
2. Analyze dependencies
3. Generate report to ${outputPath}
`,
run_in_background: false
});
```
**Applicable Scenarios**:
- Multi-step task execution
- File operations (read/write/edit)
- Tasks that require tool invocation
### Explore
Code exploration agent for quick codebase understanding.
```javascript
Task({
subagent_type: 'Explore',
prompt: `
Explore src/ directory:
- Identify main modules
- Understand directory structure
- Find entry points
Thoroughness: medium
`,
run_in_background: false
});
```
**Applicable Scenarios**:
- Codebase exploration
- File discovery
- Structure understanding
### cli-explore-agent
Deep code analysis agent.
```javascript
Task({
subagent_type: 'cli-explore-agent',
prompt: `
Deep analysis of src/auth/ module:
- Authentication flow
- Session management
- Security mechanisms
`,
run_in_background: false
});
```
**Applicable Scenarios**:
- Deep code understanding
- Design pattern identification
- Complex logic analysis
---
## Session Management
### Session Recovery
```javascript
// Save session ID
const session = Bash({
command: 'ccw cli -p "Initial analysis..." --tool gemini --mode analysis',
run_in_background: true
});
// Resume later
const continuation = Bash({
command: `ccw cli -p "Continue analysis..." --tool gemini --mode analysis --resume ${session.id}`,
run_in_background: true
});
```
### Multi-Session Merge
```javascript
// Merge context from multiple sessions
const merged = Bash({
command: `ccw cli -p "Aggregate analysis..." --tool gemini --mode analysis --resume ${id1},${id2}`,
run_in_background: true
});
```
---
## CLI Integration Patterns in Skills
### Pattern 1: Single Call
Simple tasks completed in one call.
```javascript
// Phase execution
async function executePhase(context) {
const result = Bash({
command: `ccw cli -p "
PURPOSE: Analyze project structure
TASK: Identify modules, dependencies, entry points
MODE: analysis
CONTEXT: @src/**/*
EXPECTED: JSON format structure report
" --tool gemini --mode analysis --cd ${context.projectRoot}`,
run_in_background: true,
timeout: 600000
});
// Wait for completion
return await waitForCompletion(result.task_id);
}
```
### Pattern 2: Chained Calls
Multi-step tasks where each step depends on previous results.
```javascript
async function executeChain(context) {
// Step 1: Collect
const collectId = await runCLI('collect', context);
// Step 2: Analyze (depends on Step 1)
const analyzeId = await runCLI('analyze', context, `--resume ${collectId}`);
// Step 3: Generate (depends on Step 2)
const generateId = await runCLI('generate', context, `--resume ${analyzeId}`);
return generateId;
}
async function runCLI(step, context, resumeFlag = '') {
const prompts = {
collect: 'PURPOSE: Collect code files...',
analyze: 'PURPOSE: Analyze code patterns...',
generate: 'PURPOSE: Generate documentation...'
};
const result = Bash({
command: `ccw cli -p "${prompts[step]}" --tool gemini --mode analysis ${resumeFlag}`,
run_in_background: true
});
return await waitForCompletion(result.task_id);
}
```
### Pattern 3: Parallel Calls
Independent tasks executed in parallel.
```javascript
async function executeParallel(context) {
const tasks = [
{ type: 'structure', tool: 'gemini' },
{ type: 'dependencies', tool: 'gemini' },
{ type: 'patterns', tool: 'qwen' }
];
// Start tasks in parallel
const taskIds = tasks.map(task =>
Bash({
command: `ccw cli -p "Analyze ${task.type}..." --tool ${task.tool} --mode analysis`,
run_in_background: true
}).task_id
);
// Wait for all to complete
const results = await Promise.all(
taskIds.map(id => waitForCompletion(id))
);
return results;
}
```
### Pattern 4: Fallback Chain
Automatically switch tools on failure.
```javascript
async function executeWithFallback(context) {
const tools = ['gemini', 'qwen', 'codex'];
let result = null;
for (const tool of tools) {
try {
result = await runWithTool(tool, context);
if (result.success) break;
} catch (error) {
console.log(`${tool} failed, trying next...`);
}
}
if (!result?.success) {
throw new Error('All tools failed');
}
return result;
}
async function runWithTool(tool, context) {
const task = Bash({
command: `ccw cli -p "..." --tool ${tool} --mode analysis`,
run_in_background: true,
timeout: 600000
});
return await waitForCompletion(task.task_id);
}
```
---
## Prompt Template Integration
### Reference Protocol Templates
```bash
# Analysis mode - use --rule to auto-load protocol and template (appended to prompt)
ccw cli -p "
CONSTRAINTS: ...
..." --tool gemini --mode analysis --rule analysis-code-patterns
# Write mode - use --rule to auto-load protocol and template (appended to prompt)
ccw cli -p "
CONSTRAINTS: ...
..." --tool codex --mode write --rule development-feature
```
### Dynamic Template Building
```javascript
function buildPrompt(config) {
const { purpose, task, mode, context, expected, constraints } = config;
return `
PURPOSE: ${purpose}
TASK: ${task.map(t => `${t}`).join('\n')}
MODE: ${mode}
CONTEXT: ${context}
EXPECTED: ${expected}
CONSTRAINTS: ${constraints || ''}
`; // Use --rule option to auto-append protocol + template
}
```
---
## Timeout Configuration
### Recommended Timeout Values
| Task Type | Timeout (ms) | Description |
|-----------|--------------|-------------|
| Quick analysis | 300000 | 5 minutes |
| Standard analysis | 600000 | 10 minutes |
| Deep analysis | 1200000 | 20 minutes |
| Code generation | 1800000 | 30 minutes |
| Complex tasks | 3600000 | 60 minutes |
### Special Codex Handling
Codex requires longer timeout (recommend 3x).
```javascript
const timeout = tool === 'codex' ? baseTimeout * 3 : baseTimeout;
Bash({
command: `ccw cli -p "..." --tool ${tool} --mode write`,
run_in_background: true,
timeout: timeout
});
```
---
## Error Handling
### Common Errors
| Error | Cause | Handler |
|-------|-------|---------|
| ETIMEDOUT | Network timeout | Retry or switch tool |
| Exit code 1 | Command execution failed | Check parameters, switch tool |
| Context overflow | Input context too large | Reduce input scope |
### Retry Strategy
```javascript
async function executeWithRetry(command, maxRetries = 3) {
let lastError = null;
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
const task = Bash({
command,
run_in_background: true,
timeout: 600000
});
return await waitForCompletion(task.task_id);
} catch (error) {
lastError = error;
console.log(`Attempt ${attempt} failed: ${error.message}`);
// Exponential backoff
if (attempt < maxRetries) {
await sleep(Math.pow(2, attempt) * 1000);
}
}
}
throw lastError;
}
```
---
## Best Practices
### 1. run_in_background Rule
```
Agent calls (Task):
run_in_background: false → Synchronous, get result immediately
CLI calls (Bash + ccw cli):
run_in_background: true → Asynchronous, run in background
```
### 2. Tool Selection
```
Analysis tasks: gemini > qwen
Generation tasks: codex > gemini > qwen
Code modification: codex > gemini
```
### 3. Session Management
- Use `--resume` for related tasks to maintain context
- Do not use `--resume` for independent tasks
### 4. Prompt Specification
- Always use PURPOSE/TASK/MODE/CONTEXT/EXPECTED/CONSTRAINTS structure
- Use `--rule <template>` to auto-append protocol + template to prompt
- Template name format: `category-function` (e.g., `analysis-code-patterns`)
### 5. Result Processing
- Persist important results to workDir
- Brief returns: path + summary, avoid context overflow
- JSON format convenient for downstream processing