nanocoai/nanoclaw · error · Error

provide --messaging-group-id, or --channel-type and --platfo

Error message

provide --messaging-group-id, or --channel-type and --platform-id to resolve it

What it means

When creating a wiring, if --messaging-group-id is absent the CLI tries to resolve the group from --channel-type + --platform-id; if either is missing too, it throws this.

Source

Thrown at src/cli/resources/wirings.ts:178

    validateEngageAgainstChannel(merged, mg);
    // Carry the sticky→mention coercion (if any) back into the update set.
    if (merged.engage_mode !== (updates.engage_mode ?? current.engage_mode)) {
      updates.engage_mode = merged.engage_mode;
    }
  },
  customOperations: {
    create: {
      access: 'approval',
      description:
        'Wire a messaging group to an agent group. Identify the messaging group by --messaging-group-id OR --channel-type + --platform-id (+ --instance); identify the agent by --agent-group-id OR --agent-group <folder>. Idempotent on (messaging group, agent group). Engagement flags: --engage-mode, --engage-pattern, --session-mode, --sender-scope, --ignored-message-policy, --threads, --priority. Omitted engage flags default from the channel adapter declaration.',
      handler: async (args) => {
        // Resolve the messaging group.
        let mgId = args.messaging_group_id as string | undefined;
        if (!mgId) {
          const channelType = args.channel_type as string;
          const platformId = args.platform_id as string;
          if (!channelType || !platformId) {
            throw new Error('provide --messaging-group-id, or --channel-type and --platform-id to resolve it');
          }
          const mg = await getMessagingGroupByPlatform(
            channelType,
            platformId,
            (args.instance as string) ?? channelType,
          );
          if (!mg) throw new Error(`no messaging group for ${channelType} ${platformId} — create it first`);
          mgId = mg.id;
        }

        // Resolve the agent group (by id or by folder).
        let agId = args.agent_group_id as string | undefined;
        if (!agId) {
          const ref = args.agent_group as string;
          if (!ref) throw new Error('provide --agent-group-id or --agent-group <folder>');
          const ag = (await getAgentGroup(ref)) ?? (await getAgentGroupByFolder(ref));
          if (!ag) throw new Error(`no agent group "${ref}" (by id or folder)`);
          agId = ag.id;

View on GitHub (pinned to 294ef2aee8)

Solutions

  1. Pass --messaging-group-id directly (get it from `ncl messaging-groups list`)
  2. Or pass both --channel-type <type> and --platform-id <id> (plus optional --instance)

Example fix

# before
ncl wirings create --agent-group myagent --channel-type discord
# after
ncl wirings create --agent-group myagent --channel-type discord --platform-id 123456789
Defensive patterns

Strategy: validation

Validate before calling

if (!mgId && !(channelType && platformId)) {
  throw new Error('need --messaging-group-id or --channel-type + --platform-id');
}

Prevention

When it happens

Trigger: ncl wirings create with neither --messaging-group-id nor both --channel-type and --platform-id.

Common situations: Assuming the channel is implied by the agent group, or providing only --channel-type without the platform id.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of nanocoai/nanoclaw@294ef2aee8 (2026-08-28). Data as JSON: /api/errors/2d0d84822e470e50. Report an issue: GitHub.