Plugins

Agent of Empires keeps its core small (sessions, tmux, worktrees) and grows a plugin system so optional capabilities can be enabled or disabled at runtime instead of bloating the core. The core ships first-party plugins bundled with the binary and can install external community plugins from GitHub or a local directory. Per-plugin settings and plugin-contributed UI land in follow-up releases; running plugin code is not wired up yet, so an installed external plugin records its grant and files but does not execute until a later release.

Managing plugins

Three equivalent surfaces:

  • CLI: aoe plugin list, aoe plugin info <id>, aoe plugin enable <id>, aoe plugin disable <id>, aoe plugin install <source>, aoe plugin update <id>, aoe plugin uninstall <id>.
  • TUI: open the command palette and run “Manage plugins”, or open Settings and select the Plugins tab (the same manager, hosted inline). Space toggles enable/disable.
  • Web dashboard: Settings, then the Plugins tab. The same list and toggles. Enabling or disabling a plugin requires an elevated (passphrase) session when login is enabled and is blocked in read-only mode.

A plugin’s enable-state is stored under [plugins."<id>"] in config.toml and survives every config save.

Bundled plugins

PluginWhat it doesDisabled behavior
aoe.webThe web dashboard management marker. Present whenever the dashboard is compiled in (--features serve), so every released binary ships it, enabled by default.aoe serve refuses to start until re-enabled (aoe plugin enable aoe.web).

aoe.web is the only bundled plugin today, and it rides along with the web dashboard. So a release binary (or any cargo build --features serve) shows it in aoe plugin list, while a TUI-only build (cargo build, no serve) has an empty registry and aoe plugin list reports no plugins. That is expected, not a bug.

The bundled set is deliberately minimal while the system is proven out. More first-party plugins land as each piece is verified.

Installing external plugins

External plugins are community code that you install at your own risk. Install, update, and uninstall are CLI-only (aoe plugin is reserved for management); the TUI and web surfaces show the result but do not install.

aoe plugin install gh:owner/repo          # latest release (the audited default)
aoe plugin install gh:owner/repo@v1.2.3   # an explicit tag, branch, or commit
aoe plugin install ./path/to/plugin       # a local directory
aoe plugin update <id>
aoe plugin uninstall <id>

With no @ref, install resolves the repo’s latest stable GitHub release (the audited default path) and installs that tag. An explicit @ref installs unverified, un-audited code and asks you to confirm first (--yes skips the prompt). If the repo has published no release, install warns and falls back to the default branch behind the same confirmation. The recorded source stays ref-less, so aoe plugin update keeps tracking the latest release; an @ref install keeps following that ref.

A plugin lands under <app_dir>/plugins/<id>/. A GitHub source is cloned and pinned to the exact commit; if the plugin ships a compiled worker as a release binary, the asset for your platform is downloaded into the plugin directory. To install from a GitHub Enterprise host, set AOE_GITHUB_CLONE_BASE to its base URL.

Trust and capabilities

Bundled plugins are builtin and fully trusted. Installed plugins are community and untrusted: their manifest declares the capabilities they need (network access, filesystem access, spawning processes, and so on), and install prompts you once to grant that exact set. Run non-interactively with --yes to grant without prompting. A capability this version of aoe does not recognize is rejected rather than granted; upgrade aoe.

A grant is pinned to the installed manifest. If an update changes the capability set, the plugin is left installed but inactive and aoe plugin update <id> re-prompts you to approve the new set. aoe plugin list and aoe plugin info <id> show each plugin’s trust level and whether it is granted. An external plugin cannot use the reserved aoe.* / agent-of-empires.* id namespace.

Resolved versions live in <app_dir>/plugins.lock (the exact commit, manifest hash, and release asset per plugin), so an install is reproducible.

Running plugin code, per-plugin settings, and plugin-contributed UI land in follow-up releases.