Install
$ agentstack add skill-northmodellabs-atlas-skills-atlas-bridge-discord ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Atlas → team chat (webhook + optional bot)
Webhook — post to a channel via incoming webhook URL (one-way): session summary, links, optional MP4 attach.
Optional bot (skills/atlas-bridge-discord/scripts/discord_avatar_bot.py) — 24/7 process you host (e.g. ./scripts/bridges/run-discord-avatar-bot.sh). Slash /ask or @BotName …: Claude → Answer: + MP4 (avatar speaks the answer). Reply to any bot message with text: same with prior message as context. Slash /generate: verbatim script → MP4. /talk: start a realtime avatar session and get a viewer link (set ATLAS_VIEWER_BASE_URL to your deployed atlas-avatar-viewer). /endtalk: close the session (stops billing). LLM paths need HELICONE_API_KEY (default: Helicone AI Gateway) or ANTHROPIC_API_KEY (direct); optional HELICONE_ANTHROPIC_PROXY=1 with both keys for legacy anthropic.helicone.ai. DISCORD_MESSAGE_CONTENT_INTENT=1 + Portal toggle for replies and @mentions.
What gets posted (DISCORD_MESSAGE_STYLE)
- Default (
DISCORD_MESSAGE_STYLE=minimalor unset):bridge_note/discord_introfrom the JSON, plus plain Discord links for Viewer and Render when set. With--video, the render link is omitted (the file is the render). Nosession_idbullet list unless you switch style. DISCORD_MESSAGE_STYLE=full: verbose template (session_id,room,mode, optionalpricing) and rich embeds for viewer / video URLs (same shape as before).
What it still is not
- Does not join voice channels or stream realtime WebRTC into calls (needs a full bot + media gateway + bridge to LiveKit — separate product).
- Does not host the browser viewer — deploy atlas-avatar-viewer and set
ATLAS_VIEWER_BASE_URLfor/talk.
Prerequisites (webhook)
- Channel → Integrations → Webhooks → copy URL.
export DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/..."# your real webhook URL
Interactive bot (optional)
- Discord Developer Portal → New Application → Bot → copy Token →
DISCORD_BOT_TOKENin.env(never commit). - Privileged Gateway Intents → enable Message Content Intent in the Portal only if you want @mention text; in
.envalso setDISCORD_MESSAGE_CONTENT_INTENT=1(the bot keeps this intent off by default so login works before you toggle the Portal)./askworks without Message Content. - OAuth2 → URL Generator (not the short Installation link alone): scopes
bot+applications.commands; if shown, Integration type → Guild install; bot permissions at least Send Messages, Attach Files, Read Message History, Use Slash Commands, and View channel. The Generated URL must includescope=botandapplications.commands— otherwise the app can appear under Integrations with “no bot in this server”,@mentionwill not work, and the Python bot logsin 0 server(s). Open the long URL, authorize into your server. pip install -r skills/atlas-bridge-discord/requirements.txt(includesdiscord.py)../scripts/bridges/run-discord-avatar-bot.shfrom repo root (loads.env, optional venv).
Slash commands: Global registration can lag; Discord may show “This command is outdated” until the client refreshes — reload Discord (Ctrl+R) and re-pick the command from /. Set DISCORD_GUILD_ID in .env (your server’s numeric id) to register /ask and /generate only in that server — sync is immediate (see root README). @mentions work once the bot is online if Message Content Intent is enabled.
Env: DISCORD_BOT_TOKEN, ATLAS_API_KEY; for /ask / reply-to-bot: HELICONE_API_KEY (gateway default) or ANTHROPIC_API_KEY (direct). LLM_MODEL defaults to claude-sonnet-4 (gateway) or claude-sonnet-4-20250514 (native). HELICONE_ANTHROPIC_PROXY=1 + both keys → legacy proxy. Optional ELEVENLABS_API_KEY / ELEVENLABS_VOICE_ID, ATLAS_OFFLINE_IMAGE. For /talk: ATLAS_VIEWER_BASE_URL (deployed atlas-avatar-viewer).
Usage (webhook)
pip install -r skills/atlas-bridge-discord/requirements.txt
export DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/..."
python3 skills/atlas-bridge-discord/scripts/post_session.py --file session.json
Rich embed: viewer link (recommended)
Add a HTTPS field to the same JSON you get from Atlas (merge before posting):
| JSON field | Purpose | |------------|---------| | viewer_url or client_url | Your hosted page that loads the LiveKit room (token minted server-side or one-time link — never paste token into the channel). | | video_url or result_url | Optional second embed pointing at a public or presigned MP4 URL. | | bridge_note or discord_intro | Caption / intro (in minimal style this is most of the message body). | | pricing | Only shown in full style (debug / billing reminder). |
Example merged payload:
{
"session_id": "…",
"room": "…",
"mode": "passthrough",
"viewer_url": "https://yourapp.com/avatar/abc123"
}
Attach a local MP4 (offline job, under ~25 MB)
python3 skills/atlas-bridge-discord/scripts/post_session.py --file session.json --video ./out.mp4
The webhook provider rejects oversized files; use a link embed (video_url) for long renders.
Shell tip (webhook env + pipe)
echo '{"session_id":"x","room":"r","mode":"passthrough","viewer_url":"https://example.com/v"}' \
| DISCORD_WEBHOOK_URL="$DISCORD_WEBHOOK_URL" python3 skills/atlas-bridge-discord/scripts/post_session.py
Test the webhook (no Atlas session required)
From repo root, with DISCORD_WEBHOOK_URL in .env or exported:
./scripts/bridges/test-discord-webhook.sh
Text + real MP4 attachment (tiny synthetic clip; needs ffmpeg on PATH):
./scripts/bridges/test-discord-with-mp4.sh
You should see one message with a playable file attachment (session_id discord-video-smoke).
Security
Webhook URL and bot token are secrets — do not commit them. Do not post LiveKit token values into public channels. Rate-limit or restrict the bot to trusted channels if renders cost money.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: NorthModelLabs
- Source: NorthModelLabs/atlas-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.