Why AI Agents Need Approval Controls Before Acting
An AI agent that publishes without human approval is not efficiency.
It is delegation without supervision.
Over the last months, we have learned one clear lesson: a workflow that works 99 times does not mean it will work 100 times. And that one time can cost.
The cost of no approval
An AI agent can:
- Generate a draft in 10 seconds
- Publish a post in 10 seconds
- Send an email to 10,000 subscribers in 10 seconds
- Post to 5 social networks in 10 seconds
But once the post is live, the damage is done.
If the content is wrong, inaccurate, or just inappropriate, pulling it back is a slow, visible operation that communicates uncertainty.
You cannot delete a public tweet without someone noticing.
You cannot retract an email sent to 10,000 people without reputational impact.
Real risks
We have identified these risks in controlled operations:
- 1. **Slug collision** — An agent publishes the same slug twice, and Ghost appends "-2". Suddenly you have duplicate content, navigation confusion, SEO impact.
- 2. **Missing context** — The content file exists, but is not up to date. The agent publishes it anyway.
- 3. **Wrong channel approval** — Approving a post for Ghost does not automatically mean approving for X or email. But an automated agent can do all three at once.
- 4. **No rollback plan** — Once published, what happens if you find an error? Do you have a plan to fix it without breaking the workflow?
- 5. **Audit trail missing** — Who approved? When? For which channels exactly? If it is not recorded, you will never know what went wrong.
The operational checklist
Before an AI agent acts, these checks must pass:
### 1. Explicit human approval
- Content review completed
- Approval phrase recorded
- approval_by = human name
- approval_source = verified channel
- approval_recorded_at = timestamp
### 2. Final content verification
- Ghost post text visible in review
- X post text visible in review
- Newsletter params visible
- No secrets/tokens in content
### 3. Backup Guard
- Local backup present (< 24h)
- Google Drive backup verified (< 24h)
- Restore test passed within last 7 days
### 4. Dry-run
- Scheduler dry-run executed
- Output shows exactly what will happen
- No live API calls during dry-run
### 5. Stop conditions defined
- If backup fails → STOP
- If slug duplicate detected → STOP
- If approval is missing → STOP
- If content is empty → STOP
- If API returns error → STOP and report
Lessons from ZENTRY
**Cycle 20/05/2026:** Post published with slug collision. Ghost auto-generated "-2". We discovered:
- No pre-publish collision detection
- Approval recorded the slug, not the canonical
- No warning before publishing
**Solution implemented:**
- 1. Pre-publish collision detection
- 2. Explicit approval per channel (Ghost ≠ X ≠ Newsletter)
- 3. Evidence Gate that blocks if collision detected
- 4. Final manifest that records the canonical + collision note
How to implement (practical template)
### Step 1: Define approval gate
```json
{
"status": "PENDING_PETER_REVIEW",
"approval_phrase": "OK APPROVO IL CONTENUTO [slug]",
"approved_by": null,
"approval_recorded_at": null,
"approved_channels": ["ghost", "newsletter", "x"]
}
```
### Step 2: Collect evidence
- Post text (Ghost markdown)
- Post text (X 280 chars)
- Newsletter params
- Backup Guard status
- Dry-run output
### Step 3: Pre-publish verification
```python
if not queue.approved_by:
STOP("No human approval")
if not backup_guard_passed():
STOP("Backup Guard failed")
if slug_collision_detected():
STOP("Slug collision — needs replan")
if not dry_run_matches_final():
STOP("Dry-run output mismatch")
```
### Step 4: Publish
- Ghost.POST() → await verification
- X.POST() → await verification
- Newsletter.SEND() → log and verify
### Step 5: Log & audit
```json
{
"published_ghost": true,
"ghost_url": "https://...",
"ghost_verified_at": timestamp,
"published_x": true,
"tweet_url": "https://...",
"tweet_verified_at": timestamp,
"newsletter_sent": true,
"newsletter_verified_at": timestamp
}
```
The fundamental principle
**Not: "AI agents are unreliable"**
**Yes: "Business actions require supervision"**
An agent can be great at preparing content. But once that content becomes public, you need a human checkpoint.
Not to slow the team down. To protect the brand.
What happens after
If you implement this system:
- **Prep time:** reduced (agent generates, collects evidence)
- **Review time:** 5 minutes (human reads review, approves or corrects)
- **Execution time:** automatic (scheduler runs after approval)
- **Verification time:** automatic (system checks public URLs)
- **Recovery time:** known (audit trail is complete)
No agent will publish something that was not explicitly approved.
And if something goes wrong, you will know exactly what, when, and who gave the go-ahead.
Conclusion
AI agents do not need less supervision.
They need intelligent supervision.
Supervision that does not slow down, but that verifies. That does not remove autonomy, but that ensures accountability.
At ZENTRY, this is the principle that guides every publishing cycle:
**Explicit approval. Complete evidence. Guaranteed rollback. Recorded audit trail.**