Put the content calendar in Dock as a table. The agent drafts rows from strategy in Notion and performance in HubSpot. The editorial lead approves each row by name. Asana keeps the production tickets. Dock keeps the decision: which topic, why it was chosen, who approved, when.
HubSpot, Notion, and Asana stay the system of record for the raw data. Dock is the system of record for what the AGENT INTERPRETS. Each Dock row carries a pointer back to the platform record, agent identity, decision, reviewer, and timestamp. The agent re-fetches platform data via fresh API reads when it needs current state.
The calendar table
| week | topic | pillar | source signal | agent | reviewer | status |
|---|---|---|---|---|---|---|
| 2026-W23 | "PLG metrics that survive 2026" | growth | HubSpot: 4 top-of-funnel posts down 38% MoM; Notion lists PLG as Q2 pillar | content-agent-v3 | Priya R. | approved 2026-05-28 |
| 2026-W24 | "Editorial calendars for AI-drafted content" | ops | Notion: gap flagged in May audit; HubSpot: zero coverage on /ops/ cluster | content-agent-v3 | Priya R. | approved 2026-05-29 |
| 2026-W25 | "Why marketing ops owns the agent stack" | ops | HubSpot: ops cluster sessions up 2.1x QoQ; Notion: pillar refresh due | content-agent-v3 | pending | drafted 2026-05-30 |
The source-signal column is the receipt. A human can ask why W24 made the cut and read the answer in one line.
The workflow
Monday morning, the agent runs. It pulls the current quarter's strategy from Notion, the last 30 days of post performance from HubSpot, and open tickets from Asana. It cross-references the three: which pillars are underweight, which posts are decaying, which strategy bets have no coverage yet. It writes one row per proposed slot, fills the source-signal column with what it read, and sets status to drafted.
Priya gets a digest. She approves, edits, or rejects each row in Dock. Approval flips status to approved and creates an Asana ticket with topic, pillar, and target week pre-filled. The ticket links back to the Dock row. On reject, the agent re-reads HubSpot and Notion and proposes a different topic.
Nothing ships without Priya's name. Nothing is proposed without a citation to live platform data.
Why this matters
Content effectiveness is a documentation problem before it is a writing problem. 95% of B2B marketers say they have a content strategy, yet only 29% rate it as effective (CMI 2025). The calendar drifts from strategy, performance data never makes it back into planning, and approvals scatter into Slack threads. 80% of marketers now use AI for content creation (HubSpot State of Marketing 2026), which makes the approval trail load-bearing: someone owns each shipped piece by name.
Dock closes the loop. The agent reads weekly. The reviewer approves each row. The audit is a query. See Dock for marketing for the broader pattern, agent audit and compliance for the trail, and Dock for SEO for the adjacent planning rail.
An approved row without a named human is a draft. Agent identity makes the agent half real; the human half follows the same rule. Read agent identity for why service-account approvals do not count.
Run your next content calendar in Dock.
FAQ
Where does the calendar actually live? In Dock, as a table. HubSpot tracks published-post performance. Notion holds the strategy narrative. Asana runs production tickets. Dock holds the planned slots, the agent's reasoning, and the editorial approval.
What happens if HubSpot data changes mid-week? The agent re-fetches on every run. The source-signal column shows what it read at decision time. If a post recovers, the agent can propose dropping a slot and Priya approves the change. The history stays.
Can the agent approve its own drafts? No. The reviewer column requires a named human. An agent-only row is a proposal, not a commitment. The same rule applies across Dock for sales and other GTM rails.
Does this replace our editorial process? It replaces the spreadsheet and the Slack approvals. The editorial judgment stays with the lead. The agent reads and drafts. The lead decides. The row records both.