nanocoai/nanoclaw · error · Error

No container config for group: ${id}

Error message

No container config for group: ${id}

What it means

`ncl groups config get --id <id>` found no row in the container_configs table for that group. Configs are normally created alongside the group (or backfilled from legacy container.json by src/backfill-container-configs.ts at startup), so a missing row means the group id is wrong or the config was never provisioned.

Source

Thrown at src/cli/resources/groups.ts:365

                }
              : undefined,
          );
          return { restarted: 1, rebuilt: !!args.rebuild };
        }

        // From the host: restart all running containers in the group
        const count = await restartAgentGroupContainers(id, 'restarted via ncl', message);
        return { restarted: count, rebuilt: !!args.rebuild };
      },
    },
    'config get': {
      access: 'open',
      description: 'Show the container config for a group. Use --id <group-id>.',
      handler: async (args) => {
        const id = args.id as string;
        if (!id) throw new Error('--id is required');
        const row = await getContainerConfig(id);
        if (!row) throw new Error(`No container config for group: ${id}`);
        return presentConfig(row);
      },
    },
    'config update': {
      access: 'approval',
      description:
        'Update container config scalar fields. Changes are saved but do NOT take effect until you run `ncl groups restart`. ' +
        'Use --id <group-id> and any of: --provider, --model, --effort, --image-tag, --assistant-name, --max-messages-per-prompt, --cli-scope, ' +
        '--timezone (IANA id like "Europe/Lisbon"; "" clears back to the install default; scheduled-task times follow it immediately, message display after restart).',
      handler: async (args) => {
        const id = args.id as string;
        if (!id) throw new Error('--id is required');
        const row = await getContainerConfig(id);
        if (!row) throw new Error(`No container config for group: ${id}`);

        const updates: Partial<
          Pick<
            ContainerConfigRow,

View on GitHub (pinned to 294ef2aee8)

Solutions

  1. Verify the id: `ncl groups list` and use the exact ag-<uuid>
  2. If the group is legacy (v1/migrated), restart the host so backfill-container-configs migrates any groups/<folder>/container.json into the DB, then retry
  3. If the row is genuinely missing, `ncl groups config update --id <id> --provider claude` will also fail — recreate or manually insert the config row

Example fix

# before
ncl groups config get --id my-agent-folder
# after
ncl groups list
ncl groups config get --id ag-1234abcd-...
Defensive patterns

Strategy: try-catch

Validate before calling

const cfg = await getContainerConfig(id);
if (!cfg) { /* restart host to trigger backfill, or fix the id */ }

Type guard

const hasConfig = (r: unknown): r is ContainerConfigRow => !!r && typeof (r as any).group_id === 'string';

Try / catch

try { await getConfig(id) } catch (e) { if (e instanceof Error && e.message.startsWith('No container config for group:')) { await restartHostForBackfill(); return getConfig(id); } throw e; }

Prevention

When it happens

Trigger: Passing a nonexistent/mistyped group id; passing the folder name instead of ag-<uuid>; querying a group created by an older path before the backfill ran (host not restarted since v2 migration); a group whose config row was manually deleted from the DB.

Common situations: Post-v2-migration installs where backfill hasn't run yet; copy/paste id truncation; scripting against a fresh DB copy that has agent_groups rows but not matching container_configs rows.

Understand the failure class

Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.

Related errors


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