A content calendar is a shared schedule of what will be published, where, when, by whom, and in what state. That is enough when people can spot a missing image, ask who approved the caption, and repair an ambiguous row in conversation.
An AI agent cannot safely fill those gaps with instinct. Its calendar needs to work as an execution contract: every publishing slot must identify the approved strategy, required inputs, expected artifacts, dependencies, approval authority, and delivery evidence. Without those fields, automation makes an under-specified process move faster, which is not quite the triumph it sounds like.
This guide gives you a minimum agent-readable schema, the rules that govern each state change, and a worked example you can adapt to your own stack.
Key Takeaways
- A calendar row that says "Ready" is a planning artifact. An agent needs a slot that separately records what was produced, who approved which exact version, and what the destination returned.
- Keep production, approval and delivery in three status fields. Approval binds to a slot version and specific artifact IDs, so a material edit after approval must increment the version and reset approval to pending.
- Count states, not rows. A full calendar with blocked slots is not throughput, and
scheduledis notpublisheduntil a receipt or public URL exists.
A date grid plans content. An execution contract controls it.
A conventional content calendar usually records a topic, owner, channel, format, date, assets, and status. Mature project tools add assignments, dependencies, centralized assets, rescheduling, and approvals; Asana's social media calendar is a strong example of that human-first model.
Those fields remain useful. The problem is that an agent needs to know not only what the row says, but whether the row is eligible to advance.
Consider this familiar entry:
|
Topic |
Channel |
Publish date |
Owner |
Status |
|---|---|---|---|---|
|
Brand memory |
|
August 11 |
Social lead |
Ready |
"Ready" could mean the brief is ready, the copy is ready, every asset is ready, the founder approved the final version, or the post is already scheduled. A person can ask. An agent may choose the wrong interpretation and continue.
The executable version must answer five separate questions:
- What is the approved job? The slot links to strategy and defines the reader, objective, message, evidence, and next action.
- What must exist? Required copy, visuals, source material, account details, and acceptance checks are explicit.
- What is the current production state? Briefing and asset creation have their own status.
- Who may authorize delivery? Approval names the authority and binds it to exact versions.
- What proves delivery? Scheduling and publishing remain separate until a receipt or public URL confirms the result.
That last distinction matters. A full calendar is not the same thing as a shipping system.
The minimum agent-readable content calendar schema
Use one stable record for the calendar and one stable record for each publishing job. Keep the strategic plan outside the calendar, then reference it. This avoids copying old strategy into every row while preserving the reason each slot exists.
Calendar-level fields
|
Field |
Required |
What it controls |
|---|---|---|
|
|
Yes |
Controlled migration when the contract changes |
|
|
Yes |
Identity across tools and views |
|
|
Yes |
Material revisions to the plan |
|
|
Yes |
One interpretation of dates and times |
|
|
Yes |
Link to the approved strategy source |
|
|
Yes |
The destination-specific publishing jobs |
Slot-level fields
|
Field |
Required |
What it controls |
|---|---|---|
|
|
Yes |
Stable identity across edits, retries, and receipts |
|
|
Yes |
The exact revision being produced or approved |
|
|
Yes |
Connection to a campaign or strategic idea |
|
|
Yes |
The progress this asset should help someone make |
|
|
Yes |
The business or communication job |
|
|
Yes |
Destination-specific requirements |
|
|
Yes |
The artifact contract |
|
|
Yes |
Message, evidence, constraints, and next action |
|
|
Yes |
Versioned copy, visual, or video outputs |
|
|
Yes, may be empty |
Missing inputs that block progress |
|
|
Yes |
Brief and asset progression |
|
|
Yes |
Authority and approved versions |
|
|
Yes |
Schedule, publish, and receipt state |
|
|
Yes |
The accountable human or team |
|
|
Yes |
Freshness and conflict checks |
Stable identity is not clerical fussiness. The iCalendar standard uses a persistent UID to correlate one calendar component across modifications and a SEQUENCE value for significant revisions. A content workflow needs a richer record, but the same design principle applies: changing Tuesday to Wednesday should revise the existing slot, not create a second publishing job. See RFC 5545 for the underlying calendar concepts.
Plain JSON is not enough
Putting a loose calendar into JSON makes it machine-readable, not execution-safe. In JSON Schema, properties are optional unless they appear in required, and undeclared properties are allowed unless the schema constrains them. The JSON Schema object reference documents both defaults.
At the execution boundary, use three kinds of constraint:
- Required fields: Core identity, brief, state, approval, and delivery fields cannot be omitted.
- Controlled fields: Reject unknown execution fields rather than quietly accepting both
publish_dateandscheduled_at. - Conditional fields: Require evidence appropriate to the state. JSON Schema supports dependent and conditional validation for this purpose; see its conditional validation reference.
For example:
- If approval is required,
approver_idmust exist. - If approval is
approved, the record must includeapproved_by,approved_at, the approved slot version, and approved artifact IDs. - If delivery is
scheduled, the record must include a scheduled time, timezone, destination account, and approved artifact version. - If delivery is
published, the record must include a publication time and a verifiable receipt or public URL.
These are workflow recommendations, not a universal industry standard. Their purpose is practical: an agent should be able to reject an incomplete action instead of guessing its way through it.
Use three states, not one overloaded status
Separate the work into production, approval, and delivery. Each state answers a different operational question.
|
State group |
Example values |
Question answered |
|---|---|---|
|
|
|
Do the required artifacts exist and pass their checks? |
|
|
|
Has the correct authority approved these exact versions? |
|
|
|
What happened at the destination? |
The transition rules matter more than the labels:
- A slot becomes
brief_readyonly when its reader job, message, evidence, next action, and asset requirements validate. - It becomes
assets_readyonly when every required artifact exists and passes its acceptance checks. - Approval binds to the current slot version and specific artifact versions.
- A material edit after approval increments the slot version and resets approval to
pending. - Delivery becomes
scheduledonly after required approval and destination details exist. - A retry reuses the same slot identity and delivery idempotency key.
- Delivery becomes
publishedonly after readback produces a receipt, URL, or equivalent proof.
The Model Context Protocol tools specification uses JSON Schema for tool inputs and recommends human control over tool invocations. It does not define a content calendar or grant publishing permission. Your calendar still needs to state who can approve what.
A worked content calendar example
Suppose a SaaS founder wants to explain how reusable brand context reduces repeated setup. The strategy theme is valid, but it is not yet a post. The slot below turns it into one destination-specific job.
{ "schema_version": "1.0", "calendar_id": "august-launch", "calendar_version": 3, "timezone": "Europe/London", "strategy_ref": "august-launch-v2", "slots": [ { "slot_id": "aug-launch-001", "version": 2, "theme": "Reusable brand context", "reader_job": "Understand what must be saved before repeat creative generation", "objective": "educate", "channel": "linkedin", "format": "carousel", "scheduled_at": "2026-08-11T10:30:00+01:00", "brief": { "message": "A reusable source of brand truth should precede repeated generation.", "hook": "Map the inputs a founder should stop entering repeatedly.", "evidence_refs": ["current-product-context"], "allowed_claims": [ "The product builds reusable brand context from supported brand and product sources." ], "prohibited_claims": [ "Perfect brand adherence", "Guaranteed production-time reduction" ], "cta": "Review the brand-context workflow", "brand_ref": "current-brand-record", "asset_requirements": [ "Five-slide carousel", "Authentic interface proof for brand inputs" ], "acceptance_checks": [ "Every product claim has an owned source", "No invented performance result" ] }, "artifacts": [ { "artifact_id": "copy-001-v2", "type": "carousel_copy", "status": "verified" }, { "artifact_id": "visual-001-v1", "type": "carousel_images", "status": "verified" } ], "dependencies": [], "production_status": "assets_ready", "approval": { "required": true, "approver_id": "founder", "status": "approved", "approved_by": "founder", "approved_at": "2026-08-09T14:12:00Z", "approved_slot_version": 2, "approved_artifact_ids": [ "copy-001-v2", "visual-001-v1" ] }, "delivery": { "status": "scheduled", "destination_account_id": "linkedin-brand-account", "idempotency_key": "aug-launch-001-v2-linkedin", "receipt": null }, "owner_id": "social-lead", "updated_at": "2026-08-09T14:12:00Z" } ]}
This record makes the hidden decisions inspectable:
- The theme cannot enter production until it becomes a specific message for a specific reader.
- Claims are separated into allowed and prohibited sets, so positioning does not quietly become a performance promise.
- Approval covers
copy-001-v2andvisual-001-v1, not every future edit. scheduledis visibly unfinished becausereceiptis still empty.
Now imagine the social lead changes the carousel's central claim after approval. The safe response is not to update the copy and leave the green approval badge in place. Increment the slot to version 3, save the revised copy as a new artifact, reset approval to pending, and block scheduling until version 3 is approved.
That is the hardest part of an agent-run calendar: not generating the next asset, but preserving authority as the asset changes.
Measure executable throughput, not calendar fullness
A calendar can look busy while most of its rows are blocked. Count states separately.
For a simple planning example:
- 3 themes × 2 channel-specific assets per theme = 6 planned slots.
- If one slot lacks required product proof, the current throughput is 5 ready slots and 1 blocked slot.
- It is not "6 pieces created," and it says nothing about engagement or conversion.
Track at least:
- planned slots;
- brief-ready slots;
- blocked slots, grouped by dependency;
- assets ready for approval;
- approved slots;
- scheduled slots;
- published slots with delivery evidence;
- failed deliveries awaiting a controlled retry.
This exposes the actual constraint. If briefs are ready but approvals stall, more generation will only make the approval queue taller.
When a project calendar and scheduler are the better choice
Not every team needs a strict agent-readable layer.
A human-first project calendar is stronger when the main problem is cross-functional coordination: comments, flexible exceptions, shifting assignments, rich review conversations, and work that changes shape often. A social scheduler is stronger when the plan is already settled and the main job is drafting, approval, scheduling, and rescheduling.
Choose a validated execution contract when the same plan must reliably drive repeated briefs, generation, checks, approvals, and delivery across tools. For many teams, the best architecture is hybrid:
- a friendly project view for humans;
- a validated structured record underneath;
- a publishing tool for destination-specific delivery.
The structured record should be the execution authority. The visual board should not become a second, conflicting source of truth.
Where Advibly fits, and where it does not
Once a slot defines the brand source, message, required creative, channel, approval, and publishing time, Advibly can cover verified parts of the create-to-publish workflow. Advibly Publish generates brand-context-based posts, videos, and ads, places content on a calendar, and supports publishing to connected social accounts.
For agent-led creative work, Advibly MCP publicly documents tools for brand access and updates, image and video generation, asset retrieval, and credit management. Its public tool list does not document calendar creation, approvals, scheduling, or publishing. The schema in this guide is therefore a vendor-neutral operating model, not an Advibly import format or a claim that an agent can manage the full calendar through Advibly MCP.
The honest bridge is narrower and more useful: use the contract to produce validated briefs and approved slots; use Advibly for the brand-context and creative-generation jobs it documents, then use its calendar publishing surface where that workflow fits. Keep human approval explicit whenever the content, claim, destination, or account warrants it.
A preflight check for every publishing slot
Before an agent advances a slot, verify:
- The slot has a stable ID and current version.
- It references the approved strategy.
- The reader job, message, evidence, next action, and format are explicit.
- Required source material and authentic product proof exist.
- Every artifact has its own ID, version, and acceptance result.
- Dependencies are empty or visibly blocking.
- Approval names the authority and exact approved versions.
- Any material post-approval edit resets approval.
- Schedule time includes an offset and the calendar defines a timezone.
- The destination account is explicit.
- Retries reuse the same identity and idempotency key.
- Published status requires verifiable delivery evidence.
If a slot cannot pass this check, do not let the agent improvise. Keep it blocked, name the missing input, and preserve the last valid state.

