add-ecosystem
Add a new ecosystem and base model to basemodel.constants.ts. Use when onboarding a new model…
Post announcements and messages to Discord channels. Use when sharing updates, releases, or team communications.
$ npx -y skills add civitai/civitai --skill discord --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/discordContext preview
The summary Claude sees to decide when to auto-load this skill.
Post announcements and messages to Discord channels. Use when sharing updates, releases, or team communications.
name: discord description: Post announcements and messages to Discord channels. Use when sharing updates, releases, or team communications.
Post messages and announcements to Discord channels via the REST API. Navigate channels by name, send formatted messages with embeds, manage reactions, threads, and more.
Run the setup script to authenticate via Discord:
node .claude/skills/discord/setup.mjs https://discord-proxy.civitai.com
This will: 1. Open your browser for Discord authentication 2. Verify you're in the team server 3. Save your personal API token to `.env`
If you manage the bot directly and need to bypass the proxy:
1. Copy `.env.example` to `.env` in this skill directory 2. Uncomment and set `DISCORD_BOT_TOKEN` 3. Optionally set `DISCORD_GUILD` for auto-detection
cp .claude/skills/discord/.env.example .claude/skills/discord/.env
node .claude/skills/discord/query.mjs <command> [options]
| Command | Description | |---------|-------------| | `guilds` | List all guilds (servers) the bot is in | | `channels [guild]` | List text channels in a guild | | `send <channel> "message"` | Send a plain text message | | `announce <channel> "message"` | Send a formatted announcement embed | | `me` | Show bot information | | `users` | List all members in the guild | | `user <name\|id>` | Get user info and mention format | | `roles` | List all roles in the guild | | `role <name\|id>` | Get role info and mention format | | `messages <channel>` | Get recent messages from a channel | | `edit <msg_link> "content"` | Edit a message (bot's own only) | | `delete <msg_link>` | Delete a message | | `reply <msg_link> "content"` | Reply to a message | | `rich-embed <channel>` | Send embed with structured fields | | `react <msg_link> <emoji>` | Add reaction to a message | | `unreact <msg_link> <emoji>` | Remove reaction from a message | | `pin <msg_link>` | Pin a message | | `unpin <msg_link>` | Unpin a message | | `pins <channel>` | List pinned messages in a channel | | `thread <channel> --thread "name"` | Create a thread | | `dm <user> "message"` | Send a direct message to a user | | `dm-messages <user>` | Read DM history with a user |
| Flag | Description | |------|-------------| | `--json` | Output raw JSON response | | `--title "text"` | Set embed title | | `--color <hex>` | Set embed color (default: #1E88E5 blue) | | `--footer "text"` | Set embed footer text | | `--url "link"` | Add a URL to the embed title | | `--limit, -n <N>` | Limit results (users: default 100, messages: default 20) | | `--field "Name\|Value\|inline"` | Add field to rich embed (repeatable) | | `--thumbnail "url"` | Add thumbnail image to embed | | `--image "url"` | Add large image to embed | | `--thread "name"` | Thread name (for thread command) |
# Send to channel by name node .claude/skills/discord/query.mjs send dev-general "Deployment complete!" # Send to channel by ID node .claude/skills/discord/query.mjs send 966054537880289330 "Build passed"
# Basic announcement with auto-formatting node .claude/skills/discord/query.mjs announce dev-alerts "New feature deployed!" # Announcement with custom title and color node .claude/skills/discord/query.mjs announce deployments "v5.0.1381 released" --title "Release" --color "#00C853"
# Structured release announcement node .claude/skills/discord/query.mjs rich-embed dev-general "New release is live!" \ --title "Release v5.0.1382" \ --field "Version|5.0.1382|inline" \ --field "Author|@justin|inline" \ --field "Changes|3 files modified" \ --footer "Civitai" \ --color "#00C853"
# Edit using message link node .claude/skills/discord/query.mjs edit "https://discord.com/channels/955.../966.../123..." "Updated content" # Edit using channel + message ID node .claude/skills/discord/query.mjs edit dev-general 1234567890 "Updated content"
# Delete using message link node .claude/skills/discord/query.mjs delete "https://discord.com/channels/955.../966.../123..." # Delete using channel + message ID node .claude/skills/discord/query.mjs delete dev-general 1234567890
# Reply using message link node .claude/skills/discord/query.mjs reply "https://discord.com/channels/955.../966.../123..." "Thanks for the update!" # Reply using channel + message ID node .claude/skills/discord/query.mjs reply dev-general 1234567890 "Got it!"
# Add a reaction (use Unicode emoji) node .claude/skills/discord/query.mjs react "https://discord.com/channels/..." "U+2705" node .claude/skills/discord/query.mjs react dev-general 1234567890 "U+1F44D" # Remove a reaction node .claude/skills/discord/query.mjs unreact "https://discord.com/channels/..." "U+2705"
# Pin a message node .claude/skills/discord/query.mjs pin "https://discord.com/channels/..." # Unpin a message node .claude/skills/discord/query.mjs unpin "https://discord.com/channels/..." # List pinned messages node .claude/skills/discord/query.mjs pins dev-general
# Create thread from a message node .claude/skills/discord/query.mjs thread "https://discord.com/channels/..." --thread "Discussion" # Create thread in channel (no parent message) node .claude/skills/discord/query.mjs thread dev-general --thread "New Topic"
# Send DM to a user by name node .claude/skills/discord/query.mjs dm justin "Hey, can you review this PR?" # Send DM to a user by ID node .claude/skills/discord/query.mjs dm 303445765865603073 "Quick question about the deployment" # Read DM history with a user node .claude/skills/discord/query.mjs dm-messages justin # Read last 50 DMs node .claude/ski
Repo: civitai/civitai
Add a new ecosystem and base model to basemodel.constants.ts. Use when onboarding a new model…
Wire an existing ecosystem into the generation system. Adds generation support to…
Author a prompt-enhancement system prompt for a new ecosystem and register/update it on the…
Add a new trainable base model to BOTH trainers end-to-end — the in-app trainer (main Next.js…
Wire an existing ecosystem into the LoRA training system so it appears as a trainable base…
Deterministically drive a first-party Civitai App Block in the operator's browser and produce…