/repo-publisher
#reference#skill#orchestrator#publishing#repo-publisher
David Olsson
Stateful blog orchestrator that turns your git history into published blog posts. Reads your repo, analyses what changed, scores story candidates, writes drafts, and publishes through the scsiwyg MCP. Between runs, nothing is forgotten.
Trigger: "what should I blog about", "run the blog workflow", "initialize blog state for this repo", "draft a post about X", "publish the queue"
Output: Published blog posts + updated .blog-state/
Type: Orchestrator (6-phase pipeline)
Workflow
| Phase | What happens |
|---|---|
| 1. Read State | Load .blog-state/state.json, compute git changeset since last run |
| 2. Analyse | Run analysis pipelines (code-audit, security, infra-cost) on changed files |
| 3. Decide | Score story candidates on significance × novelty × timeliness × audience-fit |
| 4. Produce | Generate diagrams and tables, write post in markdown with excerpt and tags |
| 5. Publish | Hand approved drafts to scsiwyg via publish_post |
| 6. Save State | Snapshot state, update git baseline for next run |
Decision Engine
Every story candidate is scored on four dimensions. Only stories clearing the configured threshold become posts.
| Dimension | What it measures |
|---|---|
| significance | how much changed, how important is it |
| novelty | have we written about this before |
| timeliness | is this relevant now or will it go stale |
| audience_fit | does the target blog's readership care |
A dependency bump is not a post. A major architecture refactor is. The threshold is configurable in config.yaml.
config.yaml
target_blog: your-scsiwyg-username
voice: "technical but accessible, first-person, no hype"
publish_mode: draft # draft | auto | propose
cadence: weekly
pipelines:
code_audit: on_change
security: on_change
infra_cost: on_dependency_change
publish_mode: draft queues posts for your review before anything goes live. auto publishes immediately. propose surfaces candidates without writing — you pick which ones to develop.
The .blog-state/ Directory
.blog-state/
├── state.json # Project identity, git baseline, content ledger
├── config.yaml # Target blog, voice, cadence, pipelines
├── history/ # Date-stamped state snapshots
├── queue/ # Drafts awaiting review
├── published/
│ └── log.jsonl # Append-only publish record
├── media/ # Generated diagrams and charts
└── analysis/ # Cached pipeline outputs
This directory lives inside your repo and commits alongside your code.
Invocation
"initialize blog state for this repo" → first-run setup
"what should I blog about" → Phases 1–3, candidates only
"run the blog workflow" → All 6 phases end to end
"draft a post about the new auth system"→ Phase 4 with a specific topic
"publish the queue" → Phase 5 on existing drafts
"show blog state" → state.json summary
Skill Structure
repo-publisher/
├── SKILL.md
└── references/
├── config-schema.md
├── decision-engine.md
├── media-pipeline.md
├── state-schema.md
└── story-templates.md
Use Cases
- 12. repo-publisher + scsiwyg: the git-to-blog pipeline
- 13. From two SKILL.md files to a live landing page in one session