Skip to content
Back to skills

To Cms

ASecurity

Ingest a content package (markdown/archive) into Notion Publisher CMS rows ready for button publish. Auto-detects Layer/Source Tags/Channels from package frontmatter, calling producer skill cms: contract, or heuristics. Never calls publish webhooks. Triggers: /to-cms, "ingesta al CMS", "manda a Notion Publisher".

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 9, 2026
ai-agentsgobashnodeapidatabase

Works with

  • api

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned October 9, 2026

npx -y skills add TheVeller/claude-skills --skill to-cms --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of To Cms?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for To Cms
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/theveller-to-cms/badge)](https://www.skillsdirectory.com/skills/theveller-to-cms)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: to-cms
version: 0.1.0
description: >
  Ingest a content package (markdown/archive) into Notion Publisher CMS rows
  ready for button publish. Auto-detects Layer/Source Tags/Channels from package
  frontmatter, calling producer skill cms: contract, or heuristics. Never calls
  publish webhooks. Triggers: /to-cms, "ingesta al CMS", "manda a Notion Publisher".
argument-hint: "[path to package.md | folder] [--sources=...] [--live]"
category: engineering
cms:
  layer: []
  sources: []
  channels: []
  expand: multi
---

# to-cms

Turn a **content package** into Notion **Publisher** row(s) with `* Publish Status = Not started`. You press the Notion button; this skill does **not** publish.

**Language:** skill docs English. Conversation may stay Spanish.

**Skill dir:** `$SKILL_DIR` = directory containing this `SKILL.md`.

## Hard rules

1. **Write Notion only.** Never call `/webhooks/publish-*`, ngrok, Gumroad/Postly/Luma/Composio publish APIs.
2. **Multi by default.** One package → one page per Layer group (Products / Social / Events / Music).
3. **Refuse unclear packages** without `cms:` frontmatter, producer `cms:` contract, or strong heuristics — tell user to add the contract (see `references/channel-contract.md`).
4. Live writes need **notion-publisher** repo env (`NOTION_TOKEN`, `NOTION_DATABASE_ID` → Publisher).

## Inputs

| Input | Role |
|---|---|
| Path to `.md` or folder with `package.md` | Content package |
| Optional `--sources=Gumroad,Postly` | Force Source Tags (override) |
| Optional `--channels=Reddit` | Force Channels |
| Optional `--live` | Create Notion pages (default = dry-run resolve only) |
| Calling producer skill | Its `cms:` block feeds the resolver |

## Resolver priority (union for targets)

1. User explicit override (`--sources=` / “solo Gumroad”)
2. Package frontmatter `cms:`
3. Calling producer skill `cms:` (frontmatter of that skill)
4. Heuristics on headings/filenames — see `references/channel-contract.md`

## Workflow

### 1. Load

Read the package. Parse YAML frontmatter + `#` sections. If folder: prefer `package.md`, keep sibling asset paths for the checklist.

### 2. Resolve

Run:

```bash
node "$SKILL_DIR/scripts/resolve-channels.mjs" --package="<path>"
# optional: --sources=Gumroad,Postly --channels=Reddit --producer-skill="<path/to/SKILL.md>"
```

Expect JSON: `{ layers, sources, channels, pages[], missing[], buttons[] }`.

If `missing` blocks minimum (`title` + at least one Layer + one Source Tag) → stop and ask for contract/fields.

### 3. Map fields

Map body sections → Publisher props using `references/property-map.md` (pointer to notion-publisher SSOT). Do not invent stub-channel props.

### 4. Dry-run vs live

**Default (no `--live`):** print resolved pages + missing checklist + which Notion buttons apply. Stop.

**`--live`:** from a checkout of **notion-publisher** (Nucleo-Lab / this vault workspace `gumroad-published`):

```bash
npm run to-cms -- --package="<absolute-path>" [--sources=...] [--channels=...]
```

Script creates page(s), prints Notion URLs + button list. Still never publishes.

### 5. Done output

Always return:

1. Notion page URL(s) (or dry-run payload)
2. Checklist of missing recommended fields
3. Buttons to press (`Publish in Gumroad`, `Publish in Social`, `Publish in Composio`, …)
4. Explicit: “publish = Notion button; `/to-cms` does not publish”

## Companions

- `references/channel-contract.md` — producer + package `cms:` schema
- `references/property-map.md` — where the Notion prop SSOT lives
- `scripts/resolve-channels.mjs` — deterministic resolver + fixture check
- `fixtures/sample-package.md` — Products+Social multi sample

## Adoption (producer skills)

Any vault skill that emits Publisher-bound packages must declare a `cms:` block (frontmatter or `## CMS channels`). Document only in this slice — no mass-edit of all F100K skills.

Files in this skill

  • SKILL.md3.8 KB
  • fixtures/sample-package.md323 B
  • references/channel-contract.md2.2 KB
  • references/property-map.md715 B
  • scripts/resolve-channels.mjs9.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.