ce-babysit-pr
Babysits an open GitHub PR until merge-ready. Use when asked to watch a PR over time — not for one-shot comment resolution or one CI failure. GitHub (incl.…
Draft launch or promotion copy for a shipped feature.
$ npx -y skills add everyinc/compound-engineering-plugin --skill ce-promote --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/ce-promoteContext preview
The summary Claude sees to decide when to auto-load this skill.
Draft launch or promotion copy for a shipped feature.
name: ce-promote description: "Draft launch or promotion copy for a shipped feature." disable-model-invocation: true argument-hint: "[optional: what shipped and/or channels, e.g. 'a tweet thread and a LinkedIn post']"
Turn a feature that just shipped into copy-pasteable, user-facing announcement copy, right inside the engineering workflow — so the messaging doesn't wait for a separate marketing pass.
**Done when:** every drafted channel is presented as a labeled, copy-pasteable block and the user has been offered a revision. **This skill drafts only — it never posts, publishes, schedules, commits, or opens PRs.** Posting is a human action.
It works **with or without Spiral**: with nothing installed it drafts directly from the editorial and social fundamentals in Path B (Direct drafting). When the Spiral CLI is present and authed, drafts come back voice-matched to the user's brand — an enhancement, never a requirement.
A free-form description in the arguments is the source of truth. Otherwise derive it from context, using what is available and never waiting on any single source:
Then write a 1-3 sentence summary of the **user-facing value**: what a user can now do that they couldn't before, and why they'd care. Outcome, not implementation — "You can now export any report to CSV in one click", not "Added a CsvSerializer and an export endpoint." If you can't confidently tell what shipped, ask one short question rather than guessing.
Default to an X post (or short thread) plus a one-line changelog / release blurb. If the user named channels — LinkedIn, email, a blog intro, a demo script — draft those instead of or in addition to the defaults. Scale to the change: a small fix warrants one or two short drafts, a flagship feature a cross-channel set. Don't force a fixed template.
Detect Spiral's state with two quick, non-blocking commands:
which spiral spiral auth status --json 2>/dev/null
**Ready** -> Path A (Spiral ready). **Absent or Unauthed** -> Path 0 (Offer Spiral setup), then Path A if setup completes, else Path B (Direct drafting). Never let a Spiral failure, timeout, or odd output block or slow the skill — when in doubt, treat it as not-ready and continue.
Go straight to Path B when running non-interactively — there is no human to answer. Otherwise offer setup **once**: read `references/spiral-cli.md` and follow its Path 0 section for the opt-out check, the blocking question, the agent-run `spiral login --json` flow (the API key never passes through the agent, and the user never pastes one into chat), the install path, and how the opt-out is recorded. Skip to Path B only when *that* check finds a recorded opt-out. That section defines what counts as recorded; a naive config scan misreads `ce-setup`'s commented template example as one, silently suppressing the offer.
Two properties that section depends on: **any dismissal records the opt-out**, so a single first-run decline stops the offer for good in this repo, and a decline always proceeds to Path B rather than blocking. If a human is present but no blocking-question tool is in the current tool list, fall back to a numbered list of the two options in chat and wait — do not skip the offer, and never call a user-facing question tool to discover whether one exists.
**Read `references/spiral-cli.md` before composing the prompt.** Whether Spiral returns a multi-channel set or several variations of one channel is phrasing-driven (channel keywords and cue words vs. `--num-drafts`), and getting it wrong silently returns the wrong number or shape of drafts — don't restate those rules from memory.
Always pass `--instant` and `--json`; parse `drafts[]` (each carries its own `channel`) plus `session_id`. **Present every returned draft, grouped by `channel`** — Spiral decides how many drafts per channel, so never assume one-per-channel or drop extras. If the `spiral write` call errors or returns no usable drafts, fall back silently to Path B for the affected channels.
No Spiral needed. Draft every channel through the `ce-noslop` skill. (The Spiral path goes further: brand-voice matching, humanization, saved styles, and cross-channel campaign orchestration.)
**Every channel:**
**Distributed channels:** the first line is the hook and has to make the reader want the next line (feeds truncate). No preamble. Match each channel's native shape and length; never reuse one draft verbatim across channels. One clear CTA where the channel supports it. Hashtags 0-2, and only where the channel expects them.
**Per channel:**
AI skills that make each unit of engineering work easier than the last. Compound Engineering is a plugin of 35 skills for AI coding agents.
Repo: everyinc/compound-engineering-plugin
Babysits an open GitHub PR until merge-ready. Use when asked to watch a PR over time — not for one-shot comment resolution or one CI failure. GitHub (incl.…
Develop independent competing solutions to a defined brief, compare them, and synthesize a winning approach. Use when choosing well requires developing…
Explore vague or ambitious ideas into a right-sized requirements-only unified plan. Use when the user wants to brainstorm or scope what to build. Not for…
Review a named diff or PR for bugs, regressions, tests, and standards. Use when asked to review code or when a shipping skill needs a review receipt. Use when…
Commit, push, and open a PR. Use when asked to ship/open a PR, or for PR-description-only flows like writing, rewriting, or describing a PR body.