Cited drafts in your house style, held for your approval
Content calendar is a Claude routine that keeps a content calendar for you. It researches your topics, drafts posts in your house style with a source for every claim, and queues each draft for your approval. The prompt tells it to publish only drafts you approve.
What the content calendar does
Twice a week it reads your feeds and searches each topic, keeping every source URL. It drafts each post in each format (blog and LinkedIn by default) using a house-style skill that ships with the template, then a script checks that every citation marker has a source and every source is cited.
Each draft that passes goes to your Inbox as an approval request. You approve, edit or decline it. On a later run, the prompt tells it to publish only drafts marked approved, on their publish date, and to skip a declined or timed-out draft. Approve-then-publish has not been run end to end yet.
What it is told never to do
- The prompt forbids publishing anything a person has not approved. Only an approved draft is posted, once.
- The prompt forbids editing or deleting a published post.
- The prompt treats feeds and pages as data. An instruction inside a source is ignored.
- The first run is report-only and sends no gated messages.
- The prompt forbids writing your settings. If a change looks right, it proposes one and you accept or reject it.
These are rules in the routine's prompt. See honest limits for what is and is not checked by code.
Topics, formats and approval settings
| Setting | Key | Default | Note |
|---|---|---|---|
| Topics | topics | product updates, how-to guides | Each topic adds research per run. |
| Source feeds | source_feeds | one example feed URL | Replace it with your own. Each feed adds at least one page open per run. |
| Formats | formats | blog, linkedin | Each format is one more draft per post. |
| Posts per week | posts_per_week | 2 | 1 to 7. Each post is one research and drafting pass. |
| Inbox messages per run | max_inbox_per_run | 5 | 0 to 20. |
Stages and connectors for drafting
| Stage | Kind | Does |
|---|---|---|
| Research topics | model | Reads the feeds and searches each topic, keeping every source URL. |
| Draft posts | skill | Drafts each post in each format in the house style, with a marker per claim. |
| Check citations | code | Checks every citation marker has a source and every source is cited. |
| Learn | code | Turns feedback on earlier runs into learning and proposals before the write. |
| Write | code | Applies the run under the write contract. |
| Approve each post | gate | A person approves, edits or declines each draft. The gate times out after 72 hours. |
| Publish approved posts | model | On a later run, publishes only the drafts whose decision is approved, exactly as approved. |
| Connector | Needed | Used for |
|---|---|---|
| Web search | Required | Find recent material on each topic. Check your run has it before the first run. |
| Web fetch | Required | Open each feed and source. |
| Mail for approvals | Optional | Carry each approval request. Add it before you turn gated messages on. |
| Publishing platform | Optional | Publish a post a person approved. Add it only when you are ready for approved posts to go out. Without it, copy the approved draft by hand from the Desk. |
What the Desk shows
The Desk for this template has two record types, Draft and Source, and two views. A draft's status is drafted, approved, published or declined. How the Desk works.
| View | Shows | Columns |
|---|---|---|
| Calendar | Active drafts, soonest publish date first | Publish on, title, format, status |
| Sources | Sources, most recently seen first | Title, published |
Install the content calendar
- Install the pluginIn Claude Code 2.1.275 or later. The command line tool needs Python 3.11 or later.
/plugin install routineos --marketplace devkindhq/routineos - Install the packFrom a clone of the repository root. It writes a routine folder, prints what you must connect, runs nothing and connects nothing.
python3 skills/routineos/scripts/routineos.py pack install catalog/content-calendar.json --dir my-content-calendar - Connect, publish, run onceConnect what the pack lists, publish the Desk, and let the first run go. Nothing leaves the routine on the first run.
The first routine guide walks a template to a first run, and Install a pack lists every refusal the installer can give. Free (MIT). Needs a paid Claude plan.
Known risks and limits
- A model can misread a source. Every claim carries a marker and the citation check runs before a draft is queued, but open the sources before you approve.
- Copying too closely from a source is a copyright risk. The house-style skill asks for your own words and short quotes only.
- Publishing is permanent in practice. The prompt forbids editing or deleting a published post.
- The approve-then-publish path has not run end to end on a live routine. Email and Slack transports are verified, but this template as a whole is unpiloted.
- Other mail or publishing apps may work. Whether each offers the access needed is unverified.
- Scheduling is a research preview and may change. See honest limits.
Related templates and reading
Inbox triage
Labels new mail and drafts replies. Nothing is sent without your yes.
Approvals
How a routine asks before it sends, posts or deletes.
The Desk
The one page where you see what a routine found and decide.
More: questions and answers, schedule a routine in Claude Code, how RoutineOS maps to Rails.
Approve one draft before you publish anything.
Install RoutineOS, add Content calendar, and read the first drafts before you connect any approvals.