# Content calendar

Source: https://routineos.org/templates/content-calendar

> Drafts cited posts from your topics and sources in your house style and holds each draft for your approval. Starts report-only.

Template: content

# 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.

[Get started](https://routineos.org/#start)[Install it](#install)

unpilotedapproval-gatedcontentstarts report-only

At a glance

## 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.

**Kind**Approval-gated

**Schedule**Monday and Wednesday, 21:00 UTC (default)

**First run**Report-only, no gated messages

**Approval**Email gate, times out after 72 hours

**Needs**Web search and web fetch. Optional: mail for approvals, a publishing platform

**Maturity**Unpiloted: it passed validation, no real run has checked it (per the catalog)

Safety

## 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](https://routineos.org/honest-limits) for what is and is not checked by code.

Settings

## 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. |

How it runs

## 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. |

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](https://routineos.org/concepts/desk).

| View | Shows | Columns |
|---|---|---|
| Calendar | Active drafts, soonest publish date first | Publish on, title, format, status |
| Sources | Sources, most recently seen first | Title, published |

Install

## Install the content calendar

1. **Install the plugin**In Claude Code 2.1.275 or later. The command line tool needs Python 3.11 or later.

`/plugin install routineos --marketplace devkindhq/routineos`

2. **Install the pack**From 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`

3. **Connect, publish, run once**Connect 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](https://docs.routineos.org/guides/first-routine) walks a template to a first run, and [Install a pack](https://docs.routineos.org/templates/install) lists every refusal the installer can give. Free (MIT). Needs a paid Claude plan.

Limits

## 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](https://routineos.org/honest-limits).

Related

## Related templates and reading

 [

### Inbox triage

Labels new mail and drafts replies. Nothing is sent without your yes.

approval-gated
Open ](https://routineos.org/templates/inbox-triage) [

### Approvals

How a routine asks before it sends, posts or deletes.

concept
Open ](https://routineos.org/concepts/approvals) [

### The Desk

The one page where you see what a routine found and decide.

concept
Open ](https://routineos.org/concepts/desk)

More: [questions and answers](https://routineos.org/faq), [schedule a routine in Claude Code](https://routineos.org/learn/schedule-claude-code), [how RoutineOS maps to Rails](https://routineos.org/concepts/rails-map).

## Approve one draft before you publish anything.

Install RoutineOS, add Content calendar, and read the first drafts before you connect any approvals.

[Get started](https://routineos.org/#start)[Read the docs](https://docs.routineos.org)
