Install
$ agentstack add skill-knoxops-open-devops-skills-decision-handler ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Input Parameters
| Name | Type | Required | Description | |------|------|----------|-------------| | rundir | string | Yes | Workspace root directory for file passing between agents | | taskid | string | Yes | Task ID for progress tracking | | sshkeypath | string | No | SSH key path for cloud provider access |
Execution Flow
Task Context
Before starting execution, initialize task_context.json:
{
"task_id": "",
"current_step": 0,
"current_step_id": null,
"status": "running",
"steps": {
"load_and_merge": "pending",
"generate_decision_report": "pending",
"write_phase5_decision": "pending",
"execute_decisions": "pending",
"deliver_final_report": "pending"
},
"updated_at": ""
}
Update this file after each step completes. On error, set step status to "failed" and overall status to "failed".
Step 1: loadandmerge
Type: agent Description: Load all Phase 2 outputs and merge into a unified per-resource view. Sorted by cost descending for prioritization.
Input Files
analysis/deep_scan_{resource_id}.jsonobserve/observation_{resource_id}.jsonobserve/observation_batch_summary.json
Execution
Launch an independent agent with the following prompt file:
Dispatch instruction:
Load and merge all Phase 2 outputs into a single unified view.
Inputs to read
- Deep scan profiles - glob
{run_dir}/analysis/deep_scan_*.json
Each file contains detailed technical profile for one candidate resource:
- resourceid, resourcetype, entitytype, cloudprovider
- spec (CPU/memory/disk), actual_utilization
- runningprocesses, openports, installed_packages
- ownerdetail, teamlead_id
- businesscontext (application, system, scheduledtasks)
- cost (monthly, yearly - either from cloud billing or estimated)
- tags, environment
- Observation reports - glob
{run_dir}/observe/observation_*.json
Each file contains isolation observation results:
- resource_id
- isolationmethod, isolationstart/end dates
- observation_result: passed / failed / uncertain
- alertcount, complaintcount
- anomalyevents (if any), rollbacktriggered
- observationperioddays
- Observation batch summary -
{run_dir}/observe/observation_batch_summary.json
High-level summary of all observations (results histogram, rollback count).
Merge logic
For each unique resource_id found across deep scan files:
- If both deep_scan + observation exist: merge full profile
- If only deepscan exists (observation not yet done): mark observationresult = "pending"
- If only observation exists (deep scan missing): include with available data, mark spec = "incomplete"
Recommendation logic
For each resource, generate an AI recommendation:
- DELETE: observation_result = "passed" (no alerts, no complaints, no rollback)
- KEEP: observation_result = "failed" OR resource has active business use
- EXTENDOBSERVATION: observationresult = "uncertain" (some alerts but inconclusive)
This is a preliminary recommendation - the human makes the final call.
Sort resources by cost.monthly descending (most expensive first).
Self-validation
Before writing the output, verify:
- total_candidates matches resources array length
- All resources have required fields: resourceid, resourcetype, cloudprovider, cost, observation, recommendation, recommendationreason
- totalmonthlycost equals sum of all resources monthly cost
- observationsummary counts equal totalcandidates
- Resources sorted by cost.monthly descending
If any validation fails, fix the issue and re-validate.
Agent workflow:
- Read input data from:
- Schema:
schemas/deep-scan.schema.json - Schema:
schemas/observation-input.schema.json - Schema:
schemas/observation-batch-summary-input.schema.json
- Execute the agent with the prompt
- Write results to:
- File:
decision/merged_view.json
Output
- Schema: schemas/merged-view.schema.json
- File: decision/merged_view.json
Progress Tracking
After completing this step, update task_context.json:
- Set
current_step_idto"load_and_merge" - Set
steps.load_and_mergeto"completed"
Step 2: generatedecisionreport
Type: agent Description: Present merged findings to the user and collect per-resource decisions. Use the Write tool to produce a Markdown report in the chat.
Input Files
decision/merged_view.json(from Step loadandmerge, schema: schemas/merged-view.schema.json)
Execution
Launch an independent agent with the following prompt file:
Prompt file: $PLUGINS/ico/skills/decision-handler/prompts/generate-decision-report.agent.md Agent workflow:
- Read input data from:
- Schema:
schemas/merged-view.schema.json
- Execute the agent with the prompt
- Write results to:
- File:
decision/user_decisions.json
Output
- Schema: schemas/user-decisions.schema.json
- File: decision/user_decisions.json
Progress Tracking
After completing this step, update task_context.json:
- Set
current_step_idto"generate_decision_report" - Set
steps.generate_decision_reportto"completed"
Step 3: writephase5decision
Type: inline Description: Produce the handoff file that backup-creator and resource-cleaner read as their primary input.
Input Files
decision/merged_view.json(from Step loadandmerge, schema: schemas/merged-view.schema.json)decision/user_decisions.json(from Step generatedecisionreport, schema: schemas/user-decisions.schema.json)
Execution
Follow these instructions:
Read {run_dir}/decision/merged_view.json and {run_dir}/decision/user_decisions.json.
Filter merged resources to only those with a user decision of "delete", then write the handoff file that downstream agents consume.
decisionid format: confirm-{YYYYMMDD}-{3-digit sequence} (e.g. confirm-20260609-001). Populate each resource entry from mergedview.json fields. resourcemetadata should include spec, actualutilization, ownerdetail, businesscontext, and tags from the merged view.
Self-validate before writing:
- decision_id matches pattern confirm-YYYYMMDD-NNN
- total_resources equals resources array length
- All resources have required fields
- resource_metadata is present and non-empty for each resource
Write the output to the specified output file.
Output
- Schema: schemas/phase5-decision.schema.json
- File: confirm/phase5_decision.json
Progress Tracking
After completing this step, update task_context.json:
- Set
current_step_idto"write_phase5_decision" - Set
steps.write_phase5_decisionto"completed"
Step 4: execute_decisions
Type: agent Description: Execute the user's decisions: dispatch backup+delete for confirmed resources, tag exempt resources, and notify for extended observation.
Input Files
decision/user_decisions.json(from Step generatedecisionreport, schema: schemas/user-decisions.schema.json)confirm/phase5_decision.json(from Step writephase5decision, schema: schemas/phase5-decision.schema.json)
Execution
Launch an independent agent with the following prompt file:
Prompt file: $PLUGINS/ico/skills/decision-handler/prompts/execute-decisions.agent.md Agent workflow:
- Read input data from:
- Schema:
schemas/user-decisions.schema.json - Schema:
schemas/phase5-decision.schema.json
- Execute the agent with the prompt
- Write results to:
- File:
decision/execution_results.json
Output
- Schema: schemas/execution-results.schema.json
- File: decision/execution_results.json
Progress Tracking
After completing this step, update task_context.json:
- Set
current_step_idto"execute_decisions" - Set
steps.execute_decisionsto"completed"
Step 5: deliverfinalreport
Type: agent Description: Generate and deliver the final cost optimization report as Markdown using the Write tool. Also write a machine-readable summary.
Input Files
decision/merged_view.json(from Step loadandmerge, schema: schemas/merged-view.schema.json)decision/user_decisions.json(from Step generatedecisionreport, schema: schemas/user-decisions.schema.json)decision/execution_results.json(from Step execute_decisions, schema: schemas/execution-results.schema.json)
Execution
Launch an independent agent with the following prompt file:
Prompt file: $PLUGINS/ico/skills/decision-handler/prompts/deliver-final-report.agent.md Agent workflow:
- Read input data from:
- Schema:
schemas/merged-view.schema.json - Schema:
schemas/user-decisions.schema.json - Schema:
schemas/execution-results.schema.json
- Execute the agent with the prompt
- Write results to:
- File:
decision/final_summary.json
Output
- Schema: schemas/final-summary.schema.json
- File: decision/final_summary.json
Progress Tracking
After completing this step, update task_context.json:
- Set
current_step_idto"deliver_final_report" - Set
steps.deliver_final_reportto"completed"
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: KnoxOps
- Source: KnoxOps/open-devops-skills
- License: Apache-2.0
- Homepage: https://knoxops.app?invite_token=GITHUB26
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.