rewrite
Send SMS messages, manage templates, webhooks and API keys via Rewrite API
Works with
---
name: rewrite
description: Send SMS messages, manage templates, webhooks and API keys via Rewrite API
license: MIT
---
# /rewrite
Connect to Rewrite to send SMS messages, manage templates, webhooks and API keys. Pure Ruby, zero gems — stdlib only.
## Structure
```
scripts/
├── auth.rb # Bearer token auth + rewrite_request helper (required by all scripts)
├── check_setup.rb # Check if token exists (outputs OK or SETUP_NEEDED)
├── save_token.rb # Save and validate an API token
├── send_message.rb # Send an SMS message
├── templates.rb # List templates for a project
├── template.rb # Get template details
├── create_template.rb # Create a message template
├── update_template.rb # Update a template
├── delete_template.rb # Delete a template
├── webhooks.rb # List webhooks for a project
├── create_webhook.rb # Create a webhook
├── update_webhook.rb # Update a webhook
├── delete_webhook.rb # Delete a webhook
├── api_keys.rb # List API keys for a project
├── create_api_key.rb # Create an API key
├── delete_api_key.rb # Delete an API key
├── update_project.rb # Update project settings
└── delete_project.rb # Delete a project
```
## Setup (check before using)
```bash
ruby ~/.claude/skills/rewrite/scripts/check_setup.rb
```
If the output is `OK`, proceed to the Flow section.
If the output is `SETUP_NEEDED`, guide the user step by step. Present ONE step at a time, wait for the user to confirm before moving to the next.
**Step 1** — Ask the user to get their API token:
> You need a Rewrite API token.
>
> 1. Go to https://app.rewritetoday.com and log in
> 2. Go to your project settings
> 3. Create or copy an API key (starts with `rw_`)
>
> Paste the token here.
**Step 2** — When the user pastes the token, save it:
```bash
ruby ~/.claude/skills/rewrite/scripts/save_token.rb 'PASTED_TOKEN'
```
If the script outputs an error, the token is invalid. Ask the user to double-check and try again.
**If setup is not complete, DO NOT proceed to the Flow. Complete all steps first.**
## Flow
The argument `$ARGUMENTS` may contain an action or phone number.
### Step 1: Send a message
If the user wants to send an SMS:
```bash
ruby ~/.claude/skills/rewrite/scripts/send_message.rb "+5511999999999" "Hello from Rewrite!"
```
With metadata:
```bash
ruby ~/.claude/skills/rewrite/scripts/send_message.rb "+5511999999999" "Hi" --metadata campaign=welcome source=api
```
### Step 2: Templates
**List templates:**
```bash
ruby ~/.claude/skills/rewrite/scripts/templates.rb PROJECT_ID
```
**Get template details:**
```bash
ruby ~/.claude/skills/rewrite/scripts/template.rb PROJECT_ID TEMPLATE_ID
```
**Create a template (requires user confirmation):**
```bash
ruby ~/.claude/skills/rewrite/scripts/create_template.rb PROJECT_ID "welcome" "Hello {{name}}, welcome!"
```
**Update a template (requires user confirmation):**
```bash
ruby ~/.claude/skills/rewrite/scripts/update_template.rb PROJECT_ID TEMPLATE_ID --name "new-name" --content "New content"
```
**Delete a template (requires user confirmation):**
```bash
ruby ~/.claude/skills/rewrite/scripts/delete_template.rb PROJECT_ID TEMPLATE_ID
```
### Step 3: Webhooks
**List webhooks:**
```bash
ruby ~/.claude/skills/rewrite/scripts/webhooks.rb PROJECT_ID
```
**Create a webhook (requires user confirmation):**
```bash
ruby ~/.claude/skills/rewrite/scripts/create_webhook.rb PROJECT_ID "https://example.com/hook" sms.delivered sms.failed
```
Available events: `sms.queued`, `sms.delivered`, `sms.failed`, `sms.scheduled`, `sms.canceled`
**Update a webhook (requires user confirmation):**
```bash
ruby ~/.claude/skills/rewrite/scripts/update_webhook.rb PROJECT_ID WEBHOOK_ID --url "https://new.url/hook" --events "sms.delivered,sms.failed"
```
**Delete a webhook (requires user confirmation):**
```bash
ruby ~/.claude/skills/rewrite/scripts/delete_webhook.rb PROJECT_ID WEBHOOK_ID
```
### Step 4: API Keys
**List API keys:**
```bash
ruby ~/.claude/skills/rewrite/scripts/api_keys.rb PROJECT_ID
```
**Create an API key (requires user confirmation):**
```bash
ruby ~/.claude/skills/rewrite/scripts/create_api_key.rb PROJECT_ID "my-key-name"
```
**Delete an API key (requires user confirmation):**
```bash
ruby ~/.claude/skills/rewrite/scripts/delete_api_key.rb PROJECT_ID API_KEY
```
### Step 5: Project Management
**Update project (requires user confirmation):**
```bash
ruby ~/.claude/skills/rewrite/scripts/update_project.rb PROJECT_ID --name "New Project Name"
```
**Delete project (requires user confirmation):**
```bash
ruby ~/.claude/skills/rewrite/scripts/delete_project.rb PROJECT_ID
```
## Notes
- **Pure Ruby, zero gems** — stdlib only (json, net/http, uri, fileutils)
- Auth via Bearer token (API key starting with `rw_`)
- Token file: `~/.config/rewrite/token` (outside the repo, never commit)
- Sending messages, creating/updating/deleting templates, webhooks, API keys and projects require explicit user confirmation
- Webhook events: sms.queued, sms.delivered, sms.failed, sms.scheduled, sms.canceled
- Templates support variables with `{{variable}}` syntax
- Cursor-based pagination: use `--limit N` and `--after CURSOR` on list endpoints
- Base URL: `https://api.rewritetoday.com/v1`More API Design skills
lark-event
larksuite/cli
Lark/Feishu real-time event listening / subscribing / consuming: stream events as NDJSON via `lark-cli event consume <EventKey>` (covers IM messages/reactions/chat changes, Approval status changes, Task updates, VC meeting started/joined/ended, Minutes generated, Whiteboard updated, etc.). Use for Lark bots, real-time message processing, long-running subscribers, streaming webhook/push handlers. Supports `--max-events` / `--timeout` bounded runs and a stderr ready-marker contract — designed for AI agents running as subprocesses.
lark-contact
larksuite/cli
飞书 / Lark 通讯录:按姓名 / 邮箱解析成 open_id,或按 open_id 反查姓名 / 部门 / 邮箱 / 联系方式 / 个人状态 / 签名,以及按关键词搜索当前用户可见的机器人 / 智能体(agent)。当用户提到一个名字要下一步发消息 / 排日程,或拿到 open_id 想查具体信息时使用。不负责部门树遍历、按部门列员工、组织架构图,这类需求走原生 OpenAPI。
lark-openapi-explorer
larksuite/cli
飞书/Lark 原生 OpenAPI 探索:从官方文档库中挖掘未经 CLI 封装的原生 OpenAPI 接口。当用户的需求无法被现有 lark-* skill 或 lark-cli 已注册命令满足,需要查找并调用原生飞书 OpenAPI 时使用。

