Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Provides secure task planning, validation, approval, and execution for AI agents with safety checks, rollback, dry runs, and error handling using pure Python.
Provides secure task planning, validation, approval, and execution for AI agents with safety checks, rollback, dry runs, and error handling using pure Python.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
This skill provides a secure, step-by-step task management system for AI Agents.
# Clone the repository git clone https://github.com/cerbug45/task-planner-validator.git cd task-planner-validator # That's it! No dependencies needed - pure Python standard library
# Run tests python test_basic.py # Run examples python examples.py
from task_planner import TaskPlanner # Create planner planner = TaskPlanner(auto_approve=False)
def my_executor(action: str, parameters: dict): """Your custom execution logic""" if action == "fetch_data": # Fetch data from API, database, etc. return {"data": [1, 2, 3]} elif action == "process_data": # Process the data return {"processed": True} else: return {"status": "completed"}
steps = [ { "description": "Fetch user data", "action": "fetch_data", "parameters": {"source": "database"}, "expected_output": "List of users" }, { "description": "Process users", "action": "process_data", "parameters": {"validation": True}, "expected_output": "Processed data" } ] plan = planner.create_plan( title="Data Processing Pipeline", description="Fetch and process user data", steps=steps )
# Validate is_valid, warnings = planner.validate_plan(plan) if warnings: print("Warnings:", warnings) # Approve planner.approve_plan(plan, approved_by="admin") # Execute success, results = planner.execute_plan(plan, my_executor) # Get summary summary = planner.get_execution_summary(plan) print(f"Progress: {summary['progress_percentage']}%")
Automatically detects dangerous operations: steps = [ { "description": "Delete old files", "action": "delete_files", # β οΈ Dangerous! "parameters": {"path": "/data/old"}, "safety_check": True, # System will warn "rollback_possible": False # Cannot undo } ]
Test without executing: success, results = planner.execute_plan( plan, my_executor, dry_run=True # Simulate only )
Persist plans for reuse: # Save planner.save_plan(plan, "my_plan.json") # Load later loaded_plan = planner.load_plan("my_plan.json") # Verify integrity if loaded_plan.verify_integrity(): planner.execute_plan(loaded_plan, my_executor)
Control error behavior: success, results = planner.execute_plan( plan, my_executor, stop_on_error=False # Continue on failures ) # Check results for result in results: if not result['success']: print(f"Step {result['order']} failed: {result['error']}")
Each step supports these parameters: { "description": str, # Required: Human-readable description "action": str, # Required: Action identifier "parameters": dict, # Required: Action parameters "expected_output": str, # Required: Expected result "safety_check": bool, # Optional: Enable validation (default: True) "rollback_possible": bool, # Optional: Can be rolled back (default: True) "max_retries": int # Optional: Retry attempts (default: 3) }
steps = [ { "description": "Authenticate", "action": "api_auth", "parameters": {"service": "github"}, "expected_output": "Auth token" }, { "description": "Fetch data", "action": "api_fetch", "parameters": {"endpoint": "/repos"}, "expected_output": "Repository list" } ]
steps = [ { "description": "Extract data", "action": "extract", "parameters": {"source": "database"}, "expected_output": "Raw data" }, { "description": "Transform data", "action": "transform", "parameters": {"rules": ["normalize", "validate"]}, "expected_output": "Clean data" }, { "description": "Load data", "action": "load", "parameters": {"destination": "warehouse"}, "expected_output": "Success confirmation" } ]
steps = [ { "description": "Backup database", "action": "backup", "parameters": {"target": "postgres"}, "expected_output": "Backup file path", "rollback_possible": True }, { "description": "Update schema", "action": "migrate", "parameters": {"version": "2.0"}, "expected_output": "Migration complete", "rollback_possible": True }, { "description": "Verify integrity", "action": "verify", "parameters": {"checks": ["all"]}, "expected_output": "All checks passed" } ]
is_valid, warnings = planner.validate_plan(plan) if not is_valid: print("Plan validation failed!") for warning in warnings: print(f" - {warning}") exit(1)
# Good β { "description": "Fetch active users from PostgreSQL production database", "action": "fetch_active_users_postgres_prod", ... } # Bad β { "description": "Get data", "action": "get", ... }
{ "description": "Delete temporary files older than 30 days", "action": "cleanup_temp_files", "parameters": {"age_days": 30, "path": "/tmp"}, "safety_check": True, # β οΈ Will trigger warnings "rollback_possible": False # β οΈ Cannot undo! }
# Always test first success, results = planner.execute_plan(plan, my_executor, dry_run=True) if success: # Now run for real success, results = planner.execute_plan(plan, my_executor, dry_run=False)
def safe_executor(action: str, parameters: dict): try: result = execute_action(action, parameters) return result except Exception as e: logging.error(f"Failed to execute {action}: {e}") raise # Re-raise to let planner handle it
# Skip manual approval for automated workflows planner = TaskPlanner(auto_approve=True)
# Checkpoints are automatically created for rollback-capable steps # Access checkpoint history checkpoints = planner.executor.checkpoint_stack
# View execution history history = planner.executor.execution_history for entry in history: print(f"{entry['timestamp']}: {entry['step_id']} - {entry['status']}")
# Add custom validation to SafetyValidator planner.safety_validator.dangerous_operations.append('my_dangerous_op') planner.safety_validator.sensitive_paths.append('/my/sensitive/path')
# Solution: Approve the plan first planner.approve_plan(plan, approved_by="admin") # Or use auto-approve mode planner = TaskPlanner(auto_approve=True)
# Review warnings and ensure operations are intentional is_valid, warnings = planner.validate_plan(plan) for warning in warnings: print(warning) # If operations are safe, approve anyway if is_valid: # Still valid, just warnings planner.approve_plan(plan)
# Ensure order values are sequential steps[0]['order'] = 1 steps[1]['order'] = 2 steps[2]['order'] = 3
task-planner-validator/ βββ task_planner.py # Main library βββ examples.py # Usage examples βββ test_basic.py # Test suite βββ README.md # Full documentation βββ QUICKSTART.md # Quick start guide βββ API.md # API reference βββ SKILL.md # This file βββ LICENSE # MIT License
Python 3.8 or higher No external dependencies!
# Run basic tests python test_basic.py # Run examples python examples.py # Both should show "β ALL TESTS PASSED"
π Read full documentation in README.md π Check QUICKSTART.md for quick examples π See API.md for complete API reference π‘ Browse examples.py for real code π Report issues on GitHub
MIT License - see LICENSE file
cerbug45 GitHub: @cerbug45 β If you find this useful, star the repository on GitHub!
Agent frameworks, memory systems, reasoning layers, and model-native orchestration.
Largest current source with strong distribution and engagement signals.