mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-14 02:42:04 +08:00
- 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.
331 lines
7.0 KiB
Markdown
331 lines
7.0 KiB
Markdown
# Autonomous Action Template
|
|
|
|
Template for action files in Autonomous execution mode.
|
|
|
|
## Purpose
|
|
|
|
Generate Action files for Autonomous execution mode, defining independent executable action units.
|
|
|
|
## Usage Context
|
|
|
|
| Phase | Usage |
|
|
|-------|-------|
|
|
| Phase 3 (Phase Generation) | Generated when `config.execution_mode === 'autonomous'` |
|
|
| Generation Trigger | Generate one action file for each `config.autonomous_config.actions` |
|
|
| Output Location | `.claude/skills/{skill-name}/phases/actions/{action-id}.md` |
|
|
|
|
---
|
|
|
|
## Template Structure
|
|
|
|
```markdown
|
|
# Action: {{action_name}}
|
|
|
|
{{action_description}}
|
|
|
|
## Purpose
|
|
|
|
{{purpose}}
|
|
|
|
## Preconditions
|
|
|
|
{{preconditions_list}}
|
|
|
|
## Scripts
|
|
|
|
\`\`\`yaml
|
|
# Declare scripts used in this action (optional)
|
|
# - script-id # Corresponds to scripts/script-id.py or .sh
|
|
\`\`\`
|
|
|
|
## Execution
|
|
|
|
\`\`\`javascript
|
|
async function execute(state) {
|
|
{{execution_code}}
|
|
|
|
// Script execution example
|
|
// const result = await ExecuteScript('script-id', { input: state.context.data });
|
|
// if (!result.success) throw new Error(result.stderr);
|
|
}
|
|
\`\`\`
|
|
|
|
## State Updates
|
|
|
|
\`\`\`javascript
|
|
return {
|
|
stateUpdates: {
|
|
{{state_updates}}
|
|
}
|
|
};
|
|
\`\`\`
|
|
|
|
## Error Handling
|
|
|
|
| Error Type | Recovery |
|
|
|------------|----------|
|
|
{{error_handling_table}}
|
|
|
|
## Next Actions (Hints)
|
|
|
|
{{next_actions_hints}}
|
|
```
|
|
|
|
## Variable Descriptions
|
|
|
|
| Variable | Description |
|
|
|----------|-------------|
|
|
| `{{action_name}}` | Action name |
|
|
| `{{action_description}}` | Action description |
|
|
| `{{purpose}}` | Detailed purpose |
|
|
| `{{preconditions_list}}` | List of preconditions |
|
|
| `{{execution_code}}` | Execution code |
|
|
| `{{state_updates}}` | State updates |
|
|
| `{{error_handling_table}}` | Error handling table |
|
|
| `{{next_actions_hints}}` | Next action hints |
|
|
|
|
## Action Lifecycle
|
|
|
|
```
|
|
State-driven execution flow:
|
|
|
|
state.status === 'pending'
|
|
|
|
|
v
|
|
+-- Init --+ <- 1 execution, environment preparation
|
|
| Create working directory
|
|
| Initialize context
|
|
| status -> running
|
|
+----+----+
|
|
|
|
|
v
|
|
+-- CRUD Loop --+ <- N iterations, core business
|
|
| Orchestrator selects action | List / Create / Edit / Delete
|
|
| execute(state) | Shared pattern: collect input -> operate context.items -> return updates
|
|
| Update state
|
|
+----+----+
|
|
|
|
|
v
|
|
+-- Complete --+ <- 1 execution, save results
|
|
| Serialize output
|
|
| status -> completed
|
|
+----------+
|
|
|
|
Shared state structure:
|
|
state.status -> 'pending' | 'running' | 'completed'
|
|
state.context.items -> Business data array
|
|
state.completed_actions -> List of executed action IDs
|
|
```
|
|
|
|
## Action Type Templates
|
|
|
|
### 1. Initialize Action (Init)
|
|
|
|
**Trigger condition**: `state.status === 'pending'`, executes once
|
|
|
|
```markdown
|
|
# Action: Initialize
|
|
|
|
Initialize Skill execution state.
|
|
|
|
## Purpose
|
|
|
|
Set initial state, prepare execution environment.
|
|
|
|
## Preconditions
|
|
|
|
- [ ] state.status === 'pending'
|
|
|
|
## Execution
|
|
|
|
\`\`\`javascript
|
|
async function execute(state) {
|
|
Bash(\`mkdir -p "\${workDir}"\`);
|
|
|
|
return {
|
|
stateUpdates: {
|
|
status: 'running',
|
|
started_at: new Date().toISOString(),
|
|
context: { items: [], metadata: {} }
|
|
}
|
|
};
|
|
}
|
|
\`\`\`
|
|
|
|
## Next Actions
|
|
|
|
- Success: Enter main processing loop (Orchestrator selects first CRUD action)
|
|
- Failure: action-abort
|
|
```
|
|
|
|
### 2. CRUD Actions (List / Create / Edit / Delete)
|
|
|
|
**Trigger condition**: `state.status === 'running'`, loop until user exits
|
|
|
|
> Example shows Create action demonstrating shared pattern. List / Edit / Delete follow same structure with different execution logic and state update fields.
|
|
|
|
```markdown
|
|
# Action: Create Item
|
|
|
|
Create new item.
|
|
|
|
## Purpose
|
|
|
|
Collect user input, append new record to context.items.
|
|
|
|
## Preconditions
|
|
|
|
- [ ] state.status === 'running'
|
|
|
|
## Execution
|
|
|
|
\`\`\`javascript
|
|
async function execute(state) {
|
|
// 1. Collect input
|
|
const input = await AskUserQuestion({
|
|
questions: [{
|
|
question: "Please enter item name:",
|
|
header: "Name",
|
|
multiSelect: false,
|
|
options: [{ label: "Manual input", description: "Enter custom name" }]
|
|
}]
|
|
});
|
|
|
|
// 2. Operate context.items (core logic differs by action type)
|
|
const newItem = {
|
|
id: Date.now().toString(),
|
|
name: input["Name"],
|
|
status: 'pending',
|
|
created_at: new Date().toISOString()
|
|
};
|
|
|
|
// 3. Return state update
|
|
return {
|
|
stateUpdates: {
|
|
context: {
|
|
...state.context,
|
|
items: [...(state.context.items || []), newItem]
|
|
},
|
|
last_action: 'create'
|
|
}
|
|
};
|
|
}
|
|
\`\`\`
|
|
|
|
## Next Actions
|
|
|
|
- Continue operations: Orchestrator selects next action based on state
|
|
- User exit: action-complete
|
|
```
|
|
|
|
**Other CRUD Actions Differences:**
|
|
|
|
| Action | Core Logic | Extra Preconditions | Key State Field |
|
|
|--------|-----------|-------------------|-----------------|
|
|
| List | `items.forEach(-> console.log)` | None | `current_view: 'list'` |
|
|
| Create | `items.push(newItem)` | None | `last_created_id` |
|
|
| Edit | `items.map(-> replace matching)` | `selected_item_id !== null` | `updated_at` |
|
|
| Delete | `items.filter(-> exclude matching)` | `selected_item_id !== null` | Confirm dialog -> execute |
|
|
|
|
### 3. Complete Action
|
|
|
|
**Trigger condition**: User explicitly exits or termination condition met, executes once
|
|
|
|
```markdown
|
|
# Action: Complete
|
|
|
|
Complete task and exit.
|
|
|
|
## Purpose
|
|
|
|
Serialize final state, end Skill execution.
|
|
|
|
## Preconditions
|
|
|
|
- [ ] state.status === 'running'
|
|
|
|
## Execution
|
|
|
|
\`\`\`javascript
|
|
async function execute(state) {
|
|
Write(\`\${workDir}/final-output.json\`, JSON.stringify(state.context, null, 2));
|
|
|
|
const summary = {
|
|
total_items: state.context.items?.length || 0,
|
|
duration: Date.now() - new Date(state.started_at).getTime(),
|
|
actions_executed: state.completed_actions.length
|
|
};
|
|
|
|
console.log(\`Task complete: \${summary.total_items} items, \${summary.actions_executed} operations\`);
|
|
|
|
return {
|
|
stateUpdates: {
|
|
status: 'completed',
|
|
completed_at: new Date().toISOString(),
|
|
summary
|
|
}
|
|
};
|
|
}
|
|
\`\`\`
|
|
|
|
## Next Actions
|
|
|
|
- None (terminal state)
|
|
```
|
|
|
|
## Generation Function
|
|
|
|
```javascript
|
|
function generateAction(actionConfig, skillConfig) {
|
|
return `# Action: ${actionConfig.name}
|
|
|
|
${actionConfig.description || `Execute ${actionConfig.name} operation`}
|
|
|
|
## Purpose
|
|
|
|
${actionConfig.purpose || 'TODO: Describe detailed purpose of this action'}
|
|
|
|
## Preconditions
|
|
|
|
${actionConfig.preconditions?.map(p => `- [ ] ${p}`).join('\n') || '- [ ] No special preconditions'}
|
|
|
|
## Execution
|
|
|
|
\`\`\`javascript
|
|
async function execute(state) {
|
|
// TODO: Implement action logic
|
|
|
|
return {
|
|
stateUpdates: {
|
|
completed_actions: [...state.completed_actions, '${actionConfig.id}']
|
|
}
|
|
};
|
|
}
|
|
\`\`\`
|
|
|
|
## State Updates
|
|
|
|
\`\`\`javascript
|
|
return {
|
|
stateUpdates: {
|
|
// TODO: Define state updates
|
|
${actionConfig.effects?.map(e => ` // Effect: ${e}`).join('\n') || ''}
|
|
}
|
|
};
|
|
\`\`\`
|
|
|
|
## Error Handling
|
|
|
|
| Error Type | Recovery |
|
|
|------------|----------|
|
|
| Data validation failed | Return error, no state update |
|
|
| Execution exception | Log error, increment error_count |
|
|
|
|
## Next Actions (Hints)
|
|
|
|
- Success: Orchestrator decides based on state
|
|
- Failure: Retry or action-abort
|
|
`;
|
|
}
|
|
```
|