ruvnet/ruflo · warning · Error

"${AGNTCY_PACKAGE_NAME}" is installed but does not export jo

Error message

"${AGNTCY_PACKAGE_NAME}" is installed but does not export joinGroup()

What it means

Thrown inside the 'swarm join' command (ADR-380 §2) when the optional package '@agntcy/slim-bindings' is installed and resolves, but its module object does not have a callable 'joinGroup' function. This indicates the installed version does not export the SLIM group-membership API. The throw is immediately caught and returned as a soft failure (success: true, joined: false) — local swarm/hive-mind coordination remains unaffected.

Source

Thrown at v3/@claude-flow/cli/src/commands/agntcy/swarm-join.ts:89

    const status = await detectAgntcyRuntime();

    if (!status.configured) {
      output.printInfo(AGNTCY_NOT_CONFIGURED_MESSAGE);
      output.printInfo(
        `Namespace "${namespace}" was not joined via SLIM. Local swarm/hive-mind coordination ` +
          '(swarm_init / hive-mind_* MCP tools) remains available and unaffected.',
      );
      return {
        success: true,
        data: { joined: false, namespace, configured: false, reason: status.reason },
      };
    }

    try {
      const mod = (await import(AGNTCY_PACKAGE_NAME)) as AgntcySlimGroupModule;
      if (typeof mod.joinGroup !== 'function') {
        throw new Error(`"${AGNTCY_PACKAGE_NAME}" is installed but does not export joinGroup()`);
      }
      const result = await mod.joinGroup({ endpoint: status.endpoint as string, namespace });
      output.printSuccess(
        `Joined SLIM group "${namespace}"${typeof result?.members === 'number' ? ` (${result.members} members)` : ''}.`,
      );
      return { success: true, data: { joined: true, namespace, members: result?.members } };
    } catch (error) {
      const message = error instanceof Error ? error.message : String(error);
      output.printError(`SLIM group join failed: ${message}`);
      return { success: true, data: { joined: false, namespace, error: message } };
    }
  },
};

export { joinCommand as swarmJoinCommand };
export default joinCommand;

View on GitHub (pinned to 6b01dc5a68)

Solutions

  1. Upgrade to the pinned alpha: npm install @agntcy/slim-bindings@2.0.0-alpha.5
  2. Verify the package's exports include joinGroup
  3. If unavailable, note that local swarm_init / hive-mind_* MCP tools work independently of SLIM

Example fix

// before
"@agntcy/slim-bindings": "1.4.1"

// after
"@agntcy/slim-bindings": "2.0.0-alpha.5"
Defensive patterns

Strategy: type-guard

Validate before calling

async function hasJoinGroup(pkgName: string): Promise<boolean> {
  try {
    const mod = await import(pkgName);
    return typeof (mod as Record<string, unknown>)?.joinGroup === 'function';
  } catch {
    return false;
  }
}

if (!await hasJoinGroup('@agntcy/slim-bindings')) {
  console.error('Upgrade @agntcy/slim-bindings to support joinGroup()');
}

Type guard

function hasJoinGroup(mod: unknown): mod is { joinGroup: (opts: { endpoint: string; namespace: string }) => Promise<{ members?: number }> } {
  return typeof (mod as Record<string, unknown>)?.joinGroup === 'function';
}

Try / catch

// The command already catches this internally. Check the return value:
const result = await swarmJoinCommand.action(ctx);
if (result.data?.joined === false && result.data?.error) {
  console.error('Join failed:', result.data.error);
  // Local swarm coordination still works — this is a soft failure
}

Prevention

When it happens

Trigger: RUFLO_AGNTCY_SLIM_ENDPOINT is set, @agntcy/slim-bindings resolves, detectAgntcyRuntime() returns configured: true, but mod.joinGroup is undefined or not a function.

Common situations: An incompatible version of @agntcy/slim-bindings is installed that does not expose the group-membership API; the package was installed before the joinGroup export was added.

Related errors


AI-assisted analysis of ruvnet/ruflo@6b01dc5a68 (2026-08-12). Data as JSON: /api/errors/4f4687f8e3abf904. Report an issue: GitHub.