name: content-calendar description: "Manage editorial content through 6 pipeline stages." user-invocable: false allowed-tools:
- Read
- Write
- Bash
- Grep
- Glob
- Edit
routing:
triggers:
- "content pipeline"
- "editorial calendar"
- "publishing schedule"
- "content schedule"
- "publication plan" category: content-creation pairs_with:
- topic-brainstormer
- series-planner
- publish
Content Calendar Skill
Manage editorial content through 6 pipeline stages: Ideas, Outlined, Drafted, Editing, Ready, Published. All pipeline state lives in a single content-calendar.md file -- this is the sole source of truth, never store state elsewhere.
Reference Loading Table
| Signal | Load These Files | Why |
|---|---|---|
| calendar file location, template, section formats | calendar-format.md |
Loads detailed guidance from calendar-format.md. |
| errors, error handling | error-handling.md |
Loads detailed guidance from error-handling.md. |
| velocity tracking and stuck-content detection | metrics.md |
Loads detailed guidance from metrics.md. |
| executing view, add, move, schedule, archive operations | operations.md |
Loads detailed guidance from operations.md. |
| stage definitions and transition rules | pipeline-stages.md |
Loads detailed guidance from pipeline-stages.md. |
Instructions
Phase 1: READ PIPELINE
Goal: Load and validate the current calendar state before any mutation.
Memory of pipeline state is unreliable -- always read the actual file, because assumed state leads to overwrites of changes made by other processes or manual edits.
- Read
content-calendar.mdfrom the project root. Also read the repository CLAUDE.md to ensure compliance with project-specific rules. - Parse pipeline sections -- extract entries from Ideas, Outlined, Drafted, Editing, Ready, Published, and Historical sections.
- Validate file structure -- all required sections exist, counts match actual entries.
Gate: Calendar file loaded and parsed successfully. All sections accounted for. Proceed only when gate passes.
Phase 2: EXECUTE OPERATION
Goal: Perform the requested pipeline operation -- only the operation requested. No speculative reorganization, no "while I'm here" reformatting of unrelated sections.
Operation: View Pipeline
- Count entries in each stage
- Identify upcoming scheduled content (next 14 days)
- Identify in-progress content (Outlined, Drafted, Editing) -- emphasize these as actively being worked on
- Gather recent publications (last 30 days)
- Display dashboard with progress indicators
- Optionally flag content stuck in a stage for 14+ days or show velocity metrics if requested
Operation: Add Idea
- Validate topic name is non-empty
- Search all sections for duplicate titles (case-insensitive); warn if a matching title exists because duplicates clutter the pipeline
- Append
- [ ] [Topic name]to Ideas section - Update pipeline count in overview table
Operation: Move Content
Content moves forward through defined stages only -- each transition represents real editorial work completed, so skipping stages misrepresents progress.
- Find topic in its current section (search all sections)
- Validate target stage is the next sequential stage:
- Ideas -> Outlined -> Drafted -> Editing -> Ready -> Published
- Remove entry from current section
- Add to target section with timestamp metadata (every transition records YYYY-MM-DD):
- outlined:
(outline: YYYY-MM-DD) - drafted:
(draft: YYYY-MM-DD) - editing:
(editing: YYYY-MM-DD) - ready:
(ready: YYYY-MM-DD)-- prompt for a scheduled publication date because content without a date clogs the pipeline and goes stale - published:
(published: YYYY-MM-DD)
- outlined:
- Update pipeline counts
Operation: Schedule Content
- Find topic (must be in Ready section)
- Validate date is today or future
- Update or add
Scheduled: YYYY-MM-DDto entry - Update file
Operation: Archive Published
Archive prevents the Published section from growing unbounded, which makes the dashboard cluttered and counts misleading.
- Find Published entries older than current month
- Move to appropriate
### YYYY-MMsection in Historical - Update pipeline counts
Gate: Operation executed with all validations passing. Proceed only when gate passes.
Phase 3: WRITE AND CONFIRM
Goal: Persist changes and verify the write succeeded.
Read the full calendar file before writing -- never truncate or lose existing entries.
- Write the updated calendar file back to disk.
- Re-read the file and verify the change is present. Looking correct is not the same as being correct; the re-read proves it.
- Display confirmation with relevant dashboard section showing the change.
Gate: File written, re-read confirms changes persisted. Operation complete.
Error Handling
Error: "Calendar file not found"
Cause: content-calendar.md does not exist in the project
Solution:
- Create initial calendar file with all empty sections and overview table
- Confirm file creation to user
- Proceed with requested operation
Error: "Topic not found in pipeline"
Cause: User referenced a topic name that does not match any entry Solution:
- Search all sections for partial matches (case-insensitive)
- Suggest closest matches if available
- Show current pipeline state so user can identify the correct title
Error: "Invalid stage transition"
Cause: User attempted to skip a stage (e.g., Ideas directly to Ready) Solution:
- Explain the required stage sequence
- Show the topic's current stage and the next valid stage
- Ask user to confirm sequential move or move to adjacent stage
References
| Task | Load |
|---|---|
| Stage definitions, transition criteria | ${CLAUDE_SKILL_DIR}/references/pipeline-stages.md |
| File format, section structure, date fields | ${CLAUDE_SKILL_DIR}/references/calendar-format.md |
| Command reference, edge cases per operation | ${CLAUDE_SKILL_DIR}/references/operations.md |
| File not found, corrupt sections, count drift, malformed dates | ${CLAUDE_SKILL_DIR}/references/error-handling.md |
| Velocity metrics, stuck content, pipeline health dashboard | ${CLAUDE_SKILL_DIR}/references/metrics.md |