> ## Documentation Index
> Fetch the complete documentation index at: https://gigi-f9937525.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Configure External App Plugins

> Import, enable, test, and use external app manifests through Gigi.

# 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:

```text theme={null}
/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:

```text theme={null}
/plugins import-manifest url:https://example.com/gigi-plugin.json
```

Or import an uploaded JSON file:

```text theme={null}
/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:

```text theme={null}
/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:

```text theme={null}
/plugins enable plugin:<plugin-id> version:<version>
```

List enabled plugins:

```text theme={null}
/plugins enabled
```

Dry-run a trigger:

```text theme={null}
/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:

```text theme={null}
@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.
