Skip to main content

Configure External App Plugins

In Gigi docs, a plugin is an approved external Discord app, bot, or service integration described by a manifest. It is not arbitrary code loaded into Gigi.

Prerequisites

  • Discord gateway enabled
  • slash commands synced
  • your Discord user has plugin.install
  • an approved gigi-plugin.json manifest from a trusted source
Create and assign a plugin manager role:
/permissions role create name:Gigi Plugin Managers preset:plugin-manager
/permissions role assign role:@Gigi Plugin Managers user:@person

Import a manifest

Import from HTTPS:
/plugins import-manifest url:https://example.com/gigi-plugin.json
Or import an uploaded JSON file:
/plugins import-file attachment:<json-file>
Manifests must declare an exact Discord application ID or bot user ID. Gigi does not scrape external app docs or guess behavior from bot names. If any action declares dispatch: "send_message" with safety: "public" and empty permissions, importing the manifest requires explicit public-dispatch consent:
/plugins import-manifest url:https://example.com/gigi-plugin.json allow-public-dispatch:true
/plugins import-file attachment:<json-file> allow-public-dispatch:true
URL imports must stay on safe HTTPS manifest URLs and redirects. Gigi rejects localhost, private, link-local, unspecified literal IP hosts, DNS-resolved unsafe addresses, non-HTTPS redirects, and non-JSON manifest responses. Attachment imports also reject unsafe redirects.

Enable and test

Enable the approved manifest for the server:
/plugins enable plugin:<plugin-id> version:<version>
List enabled plugins:
/plugins enabled
Dry-run a trigger:
/plugins dry-run text:play never gonna give you up

Use a guild mention

Mention Gigi with text that matches a declared action trigger or alias:
@Gigi play never gonna give you up
Gigi checks deterministic prefix triggers first. If no prefix trigger matches and a routing model is configured, semantic routing can propose a validated dry-run plan against enabled manifests. If the matched action declares dispatch: "send_message", has safety: "public", has empty permissions, and the approved version has stored import-time allow-public-dispatch:true approval, Gigi can send the planned prefix command as Gigi. Restricted actions stay dry-run only.

Current limits

  • External apps may ignore bot-authored messages.
  • Gigi does not publish commands declared by manifests.
  • Gigi does not run restricted dispatch.
  • Gigi does not use LLM output as dispatch authority.