publishlisted
Install: claude install-skill smk-labs/claude-plugins
# publish: گزارش، صفحه، ایمیل
سه تحویل پشت سر هم. هیچکدام بدون تأیید کاربر به بعدی نمیرود.
1. **گزارش.** با `/readable:report` یک فایل HTML مستقل بساز. اگر کارتی در چت هست، محتوای همان را عیناً بردار. چون خروجی روی وب میزبانی میشود، `--inline-figures` بده.
2. **تأیید.** مسیر فایل را بهصورت لین�� بده و بپرس منتشر شود یا نه. تا «بله» نگرفتهای هیچ چیزی آپلود نکن.
3. **صفحه.** یک دستور، از فایل تا لینک:
```bash
node "<this skill dir>/publish.js" <path-to-report.html> [--slug my-report] [--viewer a@b.com]
```
خودش زیپ میکند، `name` را از `<title>` سند برمیدارد، و `access_mode` پیشفرض `allowlist` است. JSON برمیگرداند؛ `url` را به کاربر بده. برای جایگزینی یک صفحهٔ موجود با همان لینک: `--page-id <id>`.
4. **ایمیل.** یک کارت readable کوتاه بساز، به لحن `/me:write-as-me`: دو سه جمله که بگوید این چیست و چرا مهم است، بهعلاوهٔ لینک صفحه. محتوای گزارش را تکرار نکن. آخرش به کاربر بگو از منوی همان کارت گزینهٔ Email را بزند تا آمادهٔ کپی شود.
## چرا اسکریپت، نه ابزار MCP
ابزار `pages_create_from_zip` آرشیو را base64 میگیرد. یک گزارش ۷۵۰ کیلوبایتی با فونت جاسازیشده حدود ۶۳۰ کیلوبایت base64 میشود، یعنی صدهزار توکن که باید از کانتکست رد شود و بایتهایش هم سالم درنمیآید. اسکریپت فایل را از دیسک میخواند و خودش POST میکند، پس هیچوقت `pages_create_from_zip` یا `pages_create_from_text` را مستقیم صدا نزن و محتوای فایل را هم نخوان.
- ورودی میتواند یک فایل، یک پوشه (که باید `index.html` در ریشه داشته باشد)، یا یک زیپ آماده باشد.
- لاگین از همان توکنی میآید که `mcp-r