Skip to main content
CLI plugins are executables named entire-<name> that add commands to Entire. For example, an executable named entire-graph runs when you enter entire graph. This system is separate from the Agent Integration Protocol, which uses entire-agent-<name> executables to integrate coding agents.
A CLI plugin is a native executable that runs with your user account’s filesystem, network, and process permissions. Entire filters the environment passed to plugins, but it does not sandbox them. Install plugins only from sources you trust.

Command Tree

Discovery and Precedence

When you run a command such as entire graph build, Entire:
  1. Checks whether graph is a command included with Entire.
  2. Looks for an executable named entire-graph on $PATH.
  3. Runs that executable with build as its argument and passes stdin, stdout, stderr, and its exit code through unchanged.
Commands included with Entire take precedence. If you install entire-version, for example, entire version still runs the command included with Entire. Entire temporarily prepends the managed plugin directory to $PATH during plugin discovery. Therefore, a managed plugin takes precedence over an entire-<name> executable with the same name elsewhere on your shell’s $PATH. Entire keeps the managed directory on $PATH while a plugin runs so it can invoke other managed plugins. Entire reserves names beginning with entire-agent- for agent integrations and does not dispatch them as CLI commands. Follow the Agent Integration Protocol to build or install one.

Run an Unmanaged Plugin

You do not need entire plugin install to run a plugin. Make the binary executable and place it anywhere on your $PATH:
Unmanaged plugins do not appear in entire plugin list. entire plugin upgrade does not update them, and you must remove them from $PATH manually.

Managed Directory

entire plugin install uses the first managed root that applies: ENTIRE_PLUGIN_DIR must be an absolute path. Under the root, Entire uses this layout:
Remote installs store the downloaded binary and its provenance under pkg/, then link the binary into bin/. Local path installs link the source executable directly into bin/, so rebuilding the source normally updates the command immediately. When symbolic links are unavailable, Entire falls back to a hard link and then a copy. Each plugin receives: Entire passes common operating system, terminal, locale, CI, proxy, SSH agent, ENTIRE_*, LC_*, and XDG_* variables. Entire excludes other variables by default to reduce accidental credential exposure. You can explicitly pass additional names or prefixes with ENTIRE_PLUGIN_ENV, for example:
This filtering is defense in depth, not a security boundary: a malicious plugin can still read files and credentials available to your user account.

Install a Plugin

Install a plugin from the synced index, a git repository URL, or a local executable.
Local paths must be explicit: include a directory separator or begin with ./. The executable’s basename must be entire-<name> so Entire can derive the command name. For a remote install, Entire:
  1. Uses the tag supplied with --pin, or tries the newest stable semantic version tag. Without --pin, Entire tries up to two older stable tags when newer tags lack a compatible release asset.
  2. Reads entire-plugin.yml from that tag when the repository provides it.
  3. Downloads the matching release asset over HTTPS.
  4. Verifies the asset against the release’s checksum manifest.
  5. Stores the binary and install manifest in the managed directory.
  6. Resolves and offers to install declared dependencies.
Installing from a URL that is not in the plugin index asks for confirmation. Pass --yes to skip the prompt; a run without a terminal requires this flag for an unlisted URL.

Checksum Verification

Remote installation looks for checksums.txt or a supported plugin checksum filename in the release. When the manifest covers the release asset, Entire computes its SHA-256 digest and refuses the install if it does not match. Entire also records a digest of the installed binary so entire plugin doctor can detect later changes. If the release asset has no published checksum covering your platform, installation stops. --allow-unverified bypasses that requirement and records the install as unverified; plugin doctor continues to report it. Future upgrades preserve the original choice: a verified install cannot silently become unverified, while an unverified install remains allowed to upgrade without a new flag.
A matching checksum proves that the downloaded bytes match the checksum published with that release. It does not prove that the repository owner, release process, or plugin code is trustworthy. Use --allow-unverified only after you have independently decided to trust the source and accept that the download is not authenticated by a published checksum.

Dependencies

A plugin repository can declare runtime dependencies in entire-plugin.yml:
min_version accepts an optional minimum semantic version. Entire does not support version ranges. Entire resolves dependencies by name through the plugin index, including transitive dependencies. A plugin author cannot supply a dependency repository URL in entire-plugin.yml. Entire shows the dependencies it plans to install or upgrade and asks once for confirmation. Use --yes in a run without a terminal or --no-deps to install only the requested plugin. If a dependency already comes from a local path or your shell’s $PATH, Entire treats it as present but cannot verify its minimum version. Run entire plugin doctor to inspect the resulting state.

List Managed Plugins

List plugins installed in the managed directory.
This command does not list unmanaged entire-<name> executables elsewhere on $PATH.

Search the Plugin Index

Search the synced plugin index. Run the command without a term to list everything available. A * marks a managed plugin that is already installed.
Entire caches the Git repository that contains the index. On the next index operation after the cached copy is 24 hours old, Entire attempts a refresh. If a refresh fails while you are offline, Entire uses the existing cached copy. The index URL resolves in this order: --index, ENTIRE_PLUGIN_INDEX_URL, then Entire’s default index.

Inspect a Plugin

Show index metadata and managed install details for a plugin, including its repository, version, pin, and dependencies.

Browse the Plugin Index

Browse the plugin index in an interactive picker and install a selection.
The picker shows each plugin’s name and description. Before downloading anything, Entire shows the repository that provides the binary and asks you to confirm.
This command needs a terminal. Use entire plugin search and entire plugin install NAME in scripts and runs without a terminal.

Upgrade Plugins

Upgrade one plugin installed from a remote repository, or use --all to upgrade every eligible plugin. Entire tries the newest stable semantic version first and uses the same release asset fallback as installation.
Entire cannot upgrade local path installs because they have no remote install manifest. Pinned plugins stay at their selected version until you reinstall them without --pin.

Remove a Plugin

Remove a plugin from the managed directory.
If another managed plugin declares the target as a dependency, Entire refuses removal unless you pass --force. This command does not remove unmanaged executables elsewhere on $PATH.

Diagnose Plugin Problems

Check managed plugins for:
  • broken managed entries
  • dangling links to local paths
  • missing or outdated dependencies
  • unverified installs
  • changes to a binary installed from a remote repository
  • the macOS quarantine attribute
The command prints a suggested fix for each actionable problem and exits unsuccessfully when it finds issues.

Update the Plugin Index

Force a refresh of the plugin index from its Git repository.
Use this command when plugin search does not show a newly published plugin or when you need to refresh the index before the cached copy becomes stale.

Troubleshooting

entire NAME Reports an Unknown Command

  1. Confirm the executable is named entire-NAME, including the entire- prefix.
  2. Run entire plugin list for a managed install.
  3. For an unmanaged install, run command -v entire-NAME on Linux or macOS, or where entire-NAME on Windows.
  4. On Linux or macOS, make the file executable with chmod +x /path/to/entire-NAME.
  5. Run entire plugin doctor to check managed entries.

The Wrong Copy Runs

Entire prepends the managed bin/ directory during discovery, so it wins over matching executables elsewhere on $PATH. Run entire plugin list to see the managed entry. Remove it with entire plugin remove NAME if you intend to use the copy from your shell’s $PATH. If the name matches a command included with Entire, Entire runs that command. Rename the plugin executable and invoke it under the new name. Refresh and search the index:
If the plugin is not indexed, install its repository URL directly. Review the repository before accepting the unlisted source prompt.

Installation Needs a Terminal

An unlisted repository URL and dependency installation require confirmation. In CI or another environment without a terminal, review the source and its entire-plugin.yml dependencies first, then add --yes.

Checksum Verification Fails

Do not bypass a checksum mismatch. A mismatch means the downloaded asset differs from the published digest. If no checksum covers your platform, ask the plugin author to publish one. --allow-unverified is an explicit choice for a missing checksum, not a remedy for a mismatch.

A Local Plugin Does Not Update

Local installs use a symbolic link when the platform allows it, so rebuilding the source updates the command. On systems that require the hard link or copy fallback, reinstall with --force after rebuilding:

Dependencies Are Missing or Outdated

Run entire plugin doctor and follow its suggested install or upgrade commands. Reinstall the parent plugin without --no-deps if you want Entire to plan the transitive dependency set again.