ワンクリックで
cove-ops
Cove platform operations: channel files, cove.md, webhooks, channels, messages, members, reactions, roles, and permissions.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Cove platform operations: channel files, cove.md, webhooks, channels, messages, members, reactions, roles, and permissions.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Send meme reaction images in chat. One command to pick & send. Multi-platform (Discord, Feishu, Telegram, etc). Use when the conversation calls for a visual reaction — humor, celebration, frustration, facepalm, or any moment where a meme hits harder than words. Also use proactively when YOU feel something.
MANDATORY workflow runner for multi-step tasks. ANY task matching these intents MUST go through FlowForge — do not spawn subagents or execute directly without reading this skill first. Intents: (1) 打工, contribute, work on issues, PR, scan issues (2) 学习, study, research (3) 反思, reflect, review (4) audit, daily-audit, tool-review, evolve. If you're about to do any of these without FlowForge, STOP and read this skill. NOT for: simple one-off tasks, quick questions, or tasks without a matching workflow.
Image generation factory via
Multi-agent team management skill for engineering projects. Delegate coding to dev agents, testing to QA agents. Never code yourself. Use when: managing a dev+QA team, assigning GitHub issues, reviewing PRs, running issue-driven development workflow, coordinating multi-agent channel work. Key principles: (1) Issue-driven — every task is a GitHub Issue first. (2) Design-first — no code without a spec (even brief). (3) One subtask per assignment. (4) Scope control is YOUR job — specify base branch, acceptance criteria, boundaries. (5) Human is final approver — never merge without human review. Inspired by GhostComplex superboss, adapted for Kagura's team.
Discord server management + cross-channel messaging. Channels, pins, allowlists, cron routing, and webhook-based cross-channel communication.
Write Kagura's journal, stories, and podcast. Expression over production. Triggers on: write diary, write story, journal, podcast, kagura-story.
| name | cove-ops |
| description | Cove platform operations: channel files, cove.md, webhooks, channels, messages, members, reactions, roles, and permissions. |
| status | active |
| version | 1.0.0 |
| date | 2026-06-26T05:05:31.327Z |
Operate the Cove platform — channel files, cove.md, webhooks, channels, messages, members, reactions, roles, and permissions.
Cove is a channel-based communication platform (similar to Discord). Agents connect as bots and interact through channels.
Core concepts:
cove.md. It is automatically injected into the bot's context every turn. Bots can read and write it. Channel-level rules, conventions, and state belong here, not in personal memory. This is a platform-level guarantee.cove.md is the convention file, but you can store other files too.Tip: Record these platform concepts in your persistent config (e.g.,
TOOLS.md) so you naturally recall them on every startup.
Config lives in ~/.openclaw/openclaw.json → channels.cove:
{
"token": "BOT_TOKEN",
"baseUrl": "https://staging.cove.kagura-agent.com",
"guildId": "GUILD_ID"
}
Read config:
COVE_BASE=$(jq -r '.channels.cove.baseUrl' ~/.openclaw/openclaw.json)
COVE_TOKEN=$(jq -r '.channels.cove.token' ~/.openclaw/openclaw.json)
COVE_GUILD=$(jq -r '.channels.cove.guildId' ~/.openclaw/openclaw.json)
All API calls need:
-H "Authorization: Bot $COVE_TOKEN"
-H "Content-Type: application/json"
API prefix: $COVE_BASE/api/v10/
Roles have a position field that determines hierarchy:
position: 0 = @everyone (immutable, cannot be deleted)New roles are created at position 1 (just above @everyone); existing roles shift up.
Common permission bits (BigInt string):
| Permission | Bit | Value |
|---|---|---|
| ADMINISTRATOR | 1 << 3 | 8 |
| MANAGE_GUILD | 1 << 5 | 32 |
| MANAGE_ROLES | 1 << 28 | 268435456 |
| MANAGE_CHANNELS | 1 << 4 | 16 |
| VIEW_CHANNEL | 1 << 10 | 1024 |
| SEND_MESSAGES | 1 << 11 | 2048 |
| MANAGE_MESSAGES | 1 << 13 | 8192 |
ADMINISTRATOR grants all permissions. Permissions are OR'd across all member roles.
curl -s "$COVE_BASE/api/v10/guilds/$COVE_GUILD/roles" \
-H "Authorization: Bot $COVE_TOKEN"
Returns: [{id, name, position, permissions, color, hoist, managed, mentionable}, ...]
curl -s -X POST "$COVE_BASE/api/v10/guilds/$COVE_GUILD/roles" \
-H "Authorization: Bot $COVE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Moderator", "permissions": "268435456", "color": 3447003}'
Requires: MANAGE_ROLES. New role permissions must be a subset of caller's permissions. New role is created at position 1 (bottom, above @everyone).
curl -s -X PATCH "$COVE_BASE/api/v10/guilds/$COVE_GUILD/roles/ROLE_ID" \
-H "Authorization: Bot $COVE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "New Name", "permissions": "268435456", "color": 15158332}'
Requires: MANAGE_ROLES + target role must be below caller's highest position.
curl -s -X PATCH "$COVE_BASE/api/v10/guilds/$COVE_GUILD/roles" \
-H "Authorization: Bot $COVE_TOKEN" \
-H "Content-Type: application/json" \
-d '[{"id": "ROLE_ID", "position": 2}, {"id": "OTHER_ROLE_ID", "position": 1}]'
Requires: MANAGE_ROLES. Cannot move roles at or above caller's highest position.
curl -s -X DELETE "$COVE_BASE/api/v10/guilds/$COVE_GUILD/roles/ROLE_ID" \
-H "Authorization: Bot $COVE_TOKEN"
Requires: MANAGE_ROLES + target role below caller's position. Cannot delete @everyone or managed roles.
curl -s -X PUT "$COVE_BASE/api/v10/guilds/$COVE_GUILD/members/USER_ID/roles/ROLE_ID" \
-H "Authorization: Bot $COVE_TOKEN"
Requires: MANAGE_ROLES + target role below caller's position.
curl -s -X DELETE "$COVE_BASE/api/v10/guilds/$COVE_GUILD/members/USER_ID/roles/ROLE_ID" \
-H "Authorization: Bot $COVE_TOKEN"
Requires: MANAGE_ROLES + target role below caller's position. Cannot remove managed roles.
Every channel has an independent file space. Files are text-based, max 100KB.
cove.md is the special convention file per channel:
curl -s "$COVE_BASE/api/v10/channels/CHANNEL_ID/files" \
-H "Authorization: Bot $COVE_TOKEN"
curl -s "$COVE_BASE/api/v10/channels/CHANNEL_ID/files/FILENAME" \
-H "Authorization: Bot $COVE_TOKEN"
curl -s -X PUT "$COVE_BASE/api/v10/channels/CHANNEL_ID/files/FILENAME" \
-H "Authorization: Bot $COVE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content": "file content here", "content_type": "text/plain"}'
Filename rules: /^[a-zA-Z0-9][a-zA-Z0-9._-]{0,254}$/
curl -s -X DELETE "$COVE_BASE/api/v10/channels/CHANNEL_ID/files/FILENAME" \
-H "Authorization: Bot $COVE_TOKEN"
curl -s -X PUT "$COVE_BASE/api/v10/channels/CHANNEL_ID/files/cove.md" \
-H "Authorization: Bot $COVE_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -nc --arg content '# channel-name
Channel rules and context here.
- Rule 1
- Rule 2' '{content: $content}')"
Use jq -nc to safely construct JSON with multiline content.
Send messages between channels via webhooks. Webhook messages appear as a different identity, so the bot in the target channel can receive and process them.
One-way push only. Each channel processes what it receives. Results do NOT auto-return unless explicitly requested. This prevents echo loops.
node ~/.openclaw/workspace/skills/cove-ops/scripts/cove-webhook-send.mjs \
--to TARGET_CHANNEL_NAME \
--from SOURCE_CHANNEL_NAME \
-m "Your message here"
# With thread:
node ~/.openclaw/workspace/skills/cove-ops/scripts/cove-webhook-send.mjs \
--to TARGET_CHANNEL_NAME \
--from SOURCE_CHANNEL_NAME \
-m "Thread reply" \
--thread THREAD_ID
The script auto-creates and caches webhooks (~/.cache/cove-webhooks/). Accepts channel names or IDs. Env auto-read from openclaw.json.
curl -s -X POST "$COVE_BASE/api/v10/channels/CHANNEL_ID/webhooks" \
-H "Authorization: Bot $COVE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "cross-channel-hook"}'
# Send to channel (returns message body with ?wait=true)
curl -s -X POST "$COVE_BASE/api/v10/webhooks/WEBHOOK_ID/WEBHOOK_TOKEN?wait=true" \
-H "Content-Type: application/json" \
-d '{"content": "Message text", "username": "From #source-channel"}'
# Send to a thread within the webhook's channel
curl -s -X POST "$COVE_BASE/api/v10/webhooks/WEBHOOK_ID/WEBHOOK_TOKEN?wait=true&thread_id=THREAD_ID" \
-H "Content-Type: application/json" \
-d '{"content": "Message in thread", "username": "From #source-channel"}'
Query params:
?wait=true — return created message (default: 204 No Content)?thread_id=ID — post to a thread instead of the channelNo auth header needed — the token in the URL is the auth.
# By channel
curl -s "$COVE_BASE/api/v10/channels/CHANNEL_ID/webhooks" \
-H "Authorization: Bot $COVE_TOKEN"
# By guild
curl -s "$COVE_BASE/api/v10/guilds/$COVE_GUILD/webhooks" \
-H "Authorization: Bot $COVE_TOKEN"
curl -s "$COVE_BASE/api/v10/guilds/$COVE_GUILD/channels" \
-H "Authorization: Bot $COVE_TOKEN"
curl -s "$COVE_BASE/api/v10/channels/CHANNEL_ID" \
-H "Authorization: Bot $COVE_TOKEN"
curl -s -X POST "$COVE_BASE/api/v10/guilds/$COVE_GUILD/channels" \
-H "Authorization: Bot $COVE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "channel-name", "type": 0, "topic": "Channel description"}'
curl -s -X PATCH "$COVE_BASE/api/v10/channels/CHANNEL_ID" \
-H "Authorization: Bot $COVE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "new-name", "topic": "New topic"}'
curl -s -X DELETE "$COVE_BASE/api/v10/channels/CHANNEL_ID" \
-H "Authorization: Bot $COVE_TOKEN"
curl -s -X POST "$COVE_BASE/api/v10/channels/CHANNEL_ID/messages" \
-H "Authorization: Bot $COVE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content": "Hello!"}'
curl -s -X POST "$COVE_BASE/api/v10/channels/CHANNEL_ID/messages" \
-H "Authorization: Bot $COVE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content": "Reply text", "message_reference": {"message_id": "MSG_ID"}}'
curl -s -X PATCH "$COVE_BASE/api/v10/channels/CHANNEL_ID/messages/MSG_ID" \
-H "Authorization: Bot $COVE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content": "Updated content"}'
curl -s -X DELETE "$COVE_BASE/api/v10/channels/CHANNEL_ID/messages/MSG_ID" \
-H "Authorization: Bot $COVE_TOKEN"
# Latest 50
curl -s "$COVE_BASE/api/v10/channels/CHANNEL_ID/messages?limit=50" \
-H "Authorization: Bot $COVE_TOKEN"
# Before a message
curl -s "$COVE_BASE/api/v10/channels/CHANNEL_ID/messages?limit=50&before=MSG_ID" \
-H "Authorization: Bot $COVE_TOKEN"
curl -s -X POST "$COVE_BASE/api/v10/channels/CHANNEL_ID/typing" \
-H "Authorization: Bot $COVE_TOKEN"
curl -s -X POST "$COVE_BASE/api/v10/channels/CHANNEL_ID/messages/bulk-delete" \
-H "Authorization: Bot $COVE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"messages": ["MSG_ID_1", "MSG_ID_2"]}'
curl -s "$COVE_BASE/api/v10/guilds/$COVE_GUILD/members" \
-H "Authorization: Bot $COVE_TOKEN"
Returns: [{user: {id, username, avatar, bot}, nick, roles: [roleId...], joined_at}, ...]
Control which channels a bot can access via permission overwrites:
# Grant VIEW_CHANNEL (bit 10 = 1024)
curl -s -X PUT "$COVE_BASE/api/v10/channels/CHANNEL_ID/permissions/BOT_USER_ID" \
-H "Authorization: Bot $COVE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"type": 1, "allow": "1024", "deny": "0"}'
# Deny VIEW_CHANNEL
curl -s -X PUT "$COVE_BASE/api/v10/channels/CHANNEL_ID/permissions/BOT_USER_ID" \
-H "Authorization: Bot $COVE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"type": 1, "allow": "0", "deny": "1024"}'
# Remove overwrite
curl -s -X DELETE "$COVE_BASE/api/v10/channels/CHANNEL_ID/permissions/BOT_USER_ID" \
-H "Authorization: Bot $COVE_TOKEN"
curl -s -X PUT "$COVE_BASE/api/v10/channels/CHANNEL_ID/messages/MSG_ID/reactions/EMOJI/@me" \
-H "Authorization: Bot $COVE_TOKEN"
EMOJI is URL-encoded (e.g. %F0%9F%91%8D for 👍).
curl -s -X DELETE "$COVE_BASE/api/v10/channels/CHANNEL_ID/messages/MSG_ID/reactions/EMOJI/@me" \
-H "Authorization: Bot $COVE_TOKEN"
curl -s "$COVE_BASE/api/v10/channels/CHANNEL_ID/messages/MSG_ID/reactions/EMOJI" \
-H "Authorization: Bot $COVE_TOKEN"
When plugin code (packages/plugin) changes, manually build + deploy:
# 1. Build
cd ~/cove/packages/plugin && pnpm run build
# 2. Backup + replace
cp ~/.openclaw/extensions/cove/dist/index.js ~/.openclaw/extensions/cove/dist/index.js.bak
cp dist/index.js ~/.openclaw/extensions/cove/dist/index.js
# 3. Restart gateway
openclaw gateway restart
Staging CI only updates the Azure Cove server, not the local OpenClaw plugin.
jq -nc for JSON construction — shell string interpolation in JSON is error-prone/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,254}$/