Teams that already use several AI agents or agent frameworks to produce content

A human-in-the-loop AI content workflow for teams running many agents

Once a team runs more than one agent, the question stops being "can AI write this" and becomes "which agent wrote this, who approved it, and how do we stop it." SocialHandoff gives every agent its own scoped key, checks every draft against guardrails, and records every action in a hash-chained audit log.

Agents built in CrewAI, LangChain, or the OpenAI Agents SDK can generate hundreds of drafts a day. Without a control layer, they share one API token with full access, nobody can tell which agent produced a bad post, and a prompt injection in a source document could put anything on your company account.

How to do it

  1. One key per agent Each agent gets a key scoped to specific networks and permissions: draft, schedule, analytics. No agent can approve its own draft.
  2. Guardrails before review Banned topics, per-network length, alt text, daily limits, and blocked link shorteners are checked on every draft.
  3. Trust ladder Agents start draft-only. Promote them by hand or by policy with autoPromote after clean approvals; a guardrail failure demotes at once.
  4. Policy as code The trust policy lives in .socialhandoff/policy.json in your repo, reviewed like any other change and applied with pnpm socialhandoff policy apply.
  5. Verify the record The audit log is append-only and hash-chained, and GET /v1/audit/verify confirms it has not been altered.
Scenario: a research crew in CrewAI drafts 12 LinkedIn posts from industry reports each week. Its key allows draft on LinkedIn only. One draft quotes a competitor by name, which is a banned topic; it fails the guardrail and never reaches review. The other 11 go to the inbox, where an editor approves 9.

Governance for agent-written content

The more agents you run, the more you need the controls you would expect for any automated system with access to production: least privilege, validation, promotion based on track record, an emergency stop, and a tamper-evident log. SocialHandoff provides those controls for social publishing. See human-in-the-loop and least privilege for the concepts.

Connecting your agents

Permission design

Split responsibilities across agents. A research agent drafts. A planner schedules. A reporting agent reads analytics. None of them approve; only owner keys can. When one agent misbehaves, you revoke or demote that one key without touching the others.

Prompt injection and bad sources

Agents that read the web or documents can be steered by hostile text. See prompt injection. Guardrails catch the obvious failures, human approval catches the subtle ones, and the kill switch stops everything if you see a pattern you do not like.

Measuring agent quality

Approval rate per agent is the most useful metric you have: the audit log shows how many drafts each key produced, how many were approved, edited, or rejected. Track it over time before promoting any agent. Per-post metrics then tell you whether approved posts performed.

Pitfalls

  • Shared keys. You lose attribution and cannot demote one agent.
  • Promoting too early. Wait for a real record, not a good week.
  • No audit review. Check the audit log regularly, not only after an incident.

Frequently asked questions

Can an agent approve its own posts?
No. Approval is only available to owner keys, and no agent can approve a draft it created.
How do we know which agent wrote a post?
Every agent has its own key, and the audit log records the key that drafted each post and the person who approved it.
Can the trust policy be reviewed like code?
Yes. It lives in .socialhandoff/policy.json in your repository and is applied with pnpm socialhandoff policy apply, so changes go through your normal review.
What stops a runaway agent?
Per-account daily limits cap volume, guardrail failures demote the agent, and the kill switch pauses all agents and holds queued posts.

Let your agents post. Keep the final say.

Connect your first agent in minutes. Every draft waits in your inbox until you approve it.

14 days free. No card required.

The hosted version is opening soon

Leave your email and we will send one message when hosted accounts open, with your 14-day trial ready. Want it today? Self-host it free from the repo.

Start free trial