ShriD5/claude-mods/tree/main/ship-log
關於這個 mod
/ship 會讀取本次 Claude Code 工作階段開始以來的 commits 與 diffstat,以及你請 Claude 處理的項目清單,再由快速模型撰寫一篇 X 貼文(全小寫、第一人稱、含一個具體數字、少於 280 個字元、不含 hashtag 與 em dash)。草稿會顯示在指令輸出並複製到剪貼簿,支援 /ship、/ship again 與 /ship linkedin 三種模式。可透過 /config 設定 model、webhookUrl 與 webhookToken;設定 webhook 後,每份草稿會以 JSON POST 送出,方便接入內容排程或草稿佇列。
安裝
請先查看作者 README,確認 marketplace 與外掛名稱;指令可能隨儲存庫結構而變動。
claude plugin marketplace add ShriD5/claude-mods claude plugin install ship-log
原文 / README
ship-log
/ship turns what you built in this Claude Code session into a build-in-public post.
It reads the commits and the diffstat since the session started, plus a short list of what you asked Claude for, and has a fast model write one X post: lowercase, first person, one concrete number, under 280 characters, no hashtags, no em dashes, none of the "officially / game-changer / excited to announce" voice. The draft shows up as the command's output and goes to your clipboard.
/ship an X post
/ship again another take, a different angle from the last one
/ship linkedin a longer LinkedIn version (sentence case, short paragraphs, up to 1,300 chars)
A draft that still breaks a rule (too long, a banned phrase, emoji spam) is sent back once with the problems named. If it is still too long after that, it gets cut at the last sentence that fits.
Install
claude --plugin-dir ./ship-log
or add this repo as a marketplace and install it with /plugin.
Options
Set them in /config (or pluginConfigs["ship-log"].options in settings):
| option | default | what it does |
| --- | --- | --- |
| model | haiku | The model that writes the post: an alias (haiku, sonnet) or a full model id. |
| webhookUrl | empty | If set, every draft is POSTed here as { "platform": "x" \| "linkedin", "text": "...", "source": "ship-log" }, so it can drop straight into a content calendar or a drafts queue. |
| webhookToken | empty | Sent as Authorization: Bearer <token> with that POST. Stored as a secret. |
How it works
It saves HEAD in $.state on session.start and keeps every prompt you type (prompt.submit). /ship runs git log <start>..HEAD and git diff --stat <start> through $.process.run, so uncommitted work counts too, then writes the post with $.model.complete and copies it with $.ui.copy.
