Hmbown/CodeWhale · error

plugin Agent component is unavailable

Error message

plugin Agent component is unavailable: {}

What it means

This error is thrown by load_plugin_agent_profiles_from_component when a Fleet plugin component binary (a Path passed to the loader) does not exist on disk, so the plugin's Agent profiles cannot be loaded. The loader checks the component path with an existence check before executing it; when the check fails it wraps the path display in this anyhow error. It indicates a plugin registration/configuration problem, not a profile file parsing problem (those get their own errors).

Solutions

  1. Verify the component path exists: run `ls <component>`; if missing, rebuild or reinstall the plugin binary.
  2. Fix the plugin component path in the user's plugin configuration (absolute path or correct relative-to-config-dir path).
  3. Rebuild the plugin with the project's build command so the artifact is present at the configured path.
  4. Remove the plugin entry from configuration if the plugin is no longer wanted.

Example fix

// before
plugins = [{ name = "myfleet", component = "target/release/fleet-myfleet" }]
// after
plugins = [{ name = "myfleet", component = "/home/user/.local/bin/fleet-myfleet" }] # path that actually exists
Defensive patterns

Strategy: validation

Validate before calling

// Rust
if !component.exists() {
    return Err(anyhow!("plugin component missing: {}", component.display()));
}
let profiles = load_with_personal_dir_and_plugins(dir, &plugins)?;

Type guard

fn component_exists(p: &std::path::Path) -> bool { p.is_file() }

Prevention

When it happens

Trigger: Calling load_with_personal_dir_and_plugins with a plugin entry whose component path points to a nonexistent file: the plugin directory exists but the component executable was deleted, renamed, not built, or the configured path has a typo or wrong relative base.

Common situations: User config lists a Fleet plugin whose binary was removed by a clean rebuild; plugin path resolved relative to a directory other than the one assumed; packaging missed the component binary; stale plugin cache referencing an old artifact path.

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


AI-assisted analysis of Hmbown/CodeWhale@73e0f67d83 (2026-09-22). Data as JSON: /api/errors/deee73ada13e9495. Report an issue: GitHub.

Appendix: source

Thrown at crates/tui/src/fleet/profile.rs:310

            Ok(mut profile) => {
                profile.origin = ProfileOrigin::Plugin;
                (vec![profile], Vec::new())
            }
            Err(error) => {
                let identity = load_agent_profile_identity_file(component).ok();
                (
                    Vec::new(),
                    vec![AgentProfileLoadIssue::new(
                        component,
                        identity.as_ref().map(|identity| identity.id.as_str()),
                        ProfileOrigin::Plugin,
                        format!("{error:#}"),
                    )],
                )
            }
        }
    } else {
        return Err(anyhow!(
            "plugin Agent component is unavailable: {}",
            component.display()
        ));
    };
    for profile in &mut profiles {
        profile.plugin_authority = Some(authority.clone());
    }
    Ok((profiles, issues))
}

/// Read only the identity-bearing fields from workspace profiles for the
/// authoring collision gate.  Unknown legacy fields are harmless here because
/// no profile behavior is loaded or executed from this representation.
pub fn load_workspace_agent_profile_identities(
    workspace: impl AsRef<Path>,
) -> Result<Vec<AgentProfileIdentity>> {
    let dir = workspace.as_ref().join(WORKSPACE_AGENT_PROFILE_DIR);
    load_agent_profile_identities_from_dir(dir)

View on GitHub (pinned to 73e0f67d83)