2 KiB
2 KiB
Action Approval Data Model
Actions are JSON files stored in /opt/homelab/actions/{status}/{action_id}.json.
Statuses
pending: Waiting for operator approval. AI agents create actions in this state.approved: Approved by operator, ready for execution.rejected: Rejected by operator, will not be executed.running: Currently being executed by an agent (e.g.materializer).completed: Successfully executed.failed: Execution failed.
Human-in-the-Loop (HIL) Protocol
- Request: Agent identifies a required change and writes a JSON to
actions/pending/. - Notification: System notifies the human operator.
- Audit: Human reviews
details.reasonanddetails.diff. - Authorization: Human moves file to
approved/. - Execution: Agent monitors
approved/and executes the task.
Schema
{
"action_id": "string",
"service": "string",
"node": "string",
"type": "deploy_service | restart_service | rollback | scale",
"risk": "nominal | guarded | critical",
"status": "pending | approved | rejected | ...",
"created_at": <unix_seconds>,
"updated_at": <unix_seconds>,
"details": {
"image": "string",
"reason": "string",
"diff": "string"
},
"transition_history": [
{
"from": "string | null",
"to": "string",
"timestamp": <unix_seconds>,
"by": "string (system | operator-tg-12345 | webui)"
}
]
}
Workflow
- A system component (e.g.
runtime-materializeror a future analyzer) creates a file inactions/pending/. telegram-botdetects the file, sends a message to allowed users.- Operator clicks "Approve" or "Reject".
telegram-botmoves the file toactions/approved/oractions/rejected/atomically, appending a transition totransition_history.- The responsible agent (e.g.
stability-agenton the target node) picks up theapprovedaction, moves it torunning, executes it, and finally moves it tocompletedorfailed.