Systems Lab

Agent skill

ship

Record that a project shipped and close it, as one Release memo and the move from In progress to Done.

activeNeeds a keyDeclared tools589 words

Filed under Calls, demos and discovery.

From sarahcallmesmadds/gtm-operator · 27 skills · 0 · pushed 2026-09-02

What it does when it runs

Record that a project shipped and close it, as one Release memo and the move from In progress to Done. Use when the user says "we shipped it", "write the release", "close the project", "mark it done", or when work reaches the people who will use it, not when it merges. Lists open tasks and asks before closing. Writes nothing without an explicit yes and posts nothing anywhere.

Read from the skill and the 0 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
  • mcp__*__notion-create-pages
  • mcp__*__notion-fetch
  • mcp__*__notion-query-data-sources
  • mcp__*__notion-update-page
Hosts it reaches
No third-party host appears in the skill or its bundled files.
Tool permissions it declares
  • Write
  • Bash(node:*)
  • mcp__*__notion-fetch
  • mcp__*__notion-query-data-sources
  • mcp__*__notion-create-pages
  • mcp__*__notion-update-page
Actions present in the files
shellwrites files

Ask about ship

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/sarahcallmesmadds/gtm-operator.git /tmp/gtm-operator
git -C /tmp/gtm-operator sparse-checkout set "plugins/projects/skills/ship"
mkdir -p ~/.claude/skills/ship
cp -R "/tmp/gtm-operator/plugins/projects/skills/ship/." ~/.claude/skills/ship/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

Or take the whole library

This repo ships a .claude-plugin manifest, so Claude Code can install all 27 skills at once. Plugin skills are invoked as /<plugin>:<skill>, so they never collide with your own.

/plugin marketplace add sarahcallmesmadds/gtm-operator
/plugin

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Before you install: this skill will not complete its job on a bare agent. It needs mcp__*__notion-create-pages, mcp__*__notion-fetch, mcp__*__notion-query-data-sources, mcp__*__notion-update-page, which you have to obtain separately.

Reproduced in full from sarahcallmesmadds/gtm-operator/blob/a93c6e98a742d183823691197b8d9be9edd114c6/plugins/projects/skills/ship/SKILL.md, which is licensed MIT (repository). 589 words, 6 headings.

ship

The record that a project shipped, and the close it earns.

The line this skill holds: writing the release and marking the project Done are one action. A project that closes with no record of what shipped leaves the library with a gap exactly where someone will look, so the script refuses the close until the release memo's url is in hand.

When it runs: when the work reaches the people who will use it. Not when it merges.

How this skill works

node "${CLAUDE_PLUGIN_ROOT}/scripts/projects.js" open-tasks
node "${CLAUDE_PLUGIN_ROOT}/scripts/projects.js" unfinished <tasks.json> <project-url>
node "${CLAUDE_PLUGIN_ROOT}/scripts/projects.js" memo-check <proposed.json>
node "${CLAUDE_PLUGIN_ROOT}/scripts/projects.js" memo-create <memo.json>
node "${CLAUDE_PLUGIN_ROOT}/scripts/projects.js" memo-prove <memo.json> <readback.json> <created-url>
node "${CLAUDE_PLUGIN_ROOT}/scripts/projects.js" close <existing.json> <release-url>
node "${CLAUDE_PLUGIN_ROOT}/scripts/projects.js" prove-update <output.json> <readback.json>

If config is absent the script refuses and names setup. Never invent a select value. Preview inline, write on an explicit yes, prove every write.


Step 1. The open tasks, listed and asked about

Run open-tasks, send its query, and pass the result to unfinished with the project's url. Nothing in v1 moves a task's status, so a project's tasks are very often still open when it ships, and that is ordinary. List them and ask before closing, rather than either refusing or pretending they are not there. Leaving them open past the close is the user's call.


Step 2. Write the release

Fetch the project and read its page body and related artifacts. Type is Release, the memo's project field carries the project's url, and the script requires it. The sections, in order: What This Lets You Do, What Shipped, How To Get It, Known Gaps, Links conditional and last.

  • What This Lets You Do leads: the person reading a release was usually not following the project, so the work means nothing until they know what it gives them.
  • What Shipped bullets: start with an action verb, name the concrete system, field or threshold, fifteen to twenty words each. This is what stops release notes reading like marketing.
  • How To Get It: install, enable, or "nothing, it is already live".
  • Known Gaps: what does not work yet and what to do meanwhile. Never invented, never omitted: if there are genuinely none, say so, because a release that oversells is the fastest way to lose trust in every release after it.

Check, preview inline, create on a yes, prove with memo-prove.


Step 3. Close, on the release's evidence

Run close with the fetched project and the release memo's url. It moves the project from In progress to Done and nothing else, and refuses without the release, because the two are one action.

Send the update, re-fetch the page, and run prove-update.

No relation is written. Name the release memo, the project, and any artifact the release changed, so a person can link them in Notion: the Artifacts link in particular is what makes process:audit's strongest signal work, and a release usually changes an SOP.


What this skill does not do

  • Does not post to Slack. Slack is read-only context for problem-scan; ship writes the memo and stops.
  • Does not mark a project Done without writing the release, and the script holds that mechanically.
  • Does not close over open tasks silently. It lists them and asks.
  • Does not move any task's status. People close tasks.
  • Does not invent a Known Gaps entry, and does not omit the section.
  • Does not edit a published release. A correction is a new memo, through memos:new.

Other skills for the same job

Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.

Need help setting it up?

This page tells you what ship does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.