nanocoai/nanoclaw · error

--${col.name.replace(/_/g, '-')} is required

Error message

--${col.name.replace(/_/g, '-')} is required

What it means

Thrown by genericCreate in src/cli/crud.ts when a column marked required was not provided (undefined) and no default resolved for it. Pass 1 iterates create-able columns; required columns must be present in args or creation aborts before any DB write.

Source

Thrown at src/cli/crud.ts:252

    // resolution.
    for (const col of def.columns) {
      if (col.generated) {
        if (col.name === def.idColumn) {
          values[col.name] = randomUUID();
        } else if (col.name.endsWith('_at')) {
          values[col.name] = new Date().toISOString();
        }
        continue;
      }

      const v = args[col.name];
      if (v !== undefined) {
        if (col.enum && !col.enum.includes(String(v))) {
          throw new Error(`${col.name} must be one of: ${col.enum.join(', ')}`);
        }
        values[col.name] = col.type === 'number' ? Number(v) : v;
      } else if (col.required) {
        throw new Error(`--${col.name.replace(/_/g, '-')} is required`);
      }
    }

    // Pass 2: context-aware defaults + cross-column validation.
    if (def.resolveDefaults) def.resolveDefaults(values);

    // Pass 3: static defaults for whatever is still unset.
    for (const col of def.columns) {
      if (col.generated || values[col.name] !== undefined) continue;
      if (col.default !== undefined) {
        values[col.name] = col.default;
      } else if (col.defaultFrom !== undefined && values[col.defaultFrom] !== undefined) {
        values[col.name] = values[col.defaultFrom];
      }
    }

    // Idempotent create: if a row already matches the natural key, return it
    // rather than hitting a UNIQUE violation. Lets a skill re-run `ncl … create`.

View on GitHub (pinned to 294ef2aee8)

Solutions

  1. Re-run with the missing flag exactly as named (underscores become dashes)
  2. Run `ncl <resource> help` to list required columns
  3. Check for typos/dash-spacing in the flag name

Example fix

# before
ncl messaging-groups create --name chat
# after
ncl messaging-groups create --name chat --channel-type discord --instance default
Defensive patterns

Strategy: validation

Validate before calling

const missing = requiredCols.filter(c => args[c.name] === undefined);
if (missing.length) throw new Error(`missing: ${missing.map(c => '--' + c.name.replace(/_/g,'-')).join(' ')}`);

Prevention

When it happens

Trigger: `ncl <resource> create` omitting a required flag, e.g. creating a messaging group without its platform identity, or creating an agent group without the fields its resource definition marks required.

Common situations: Assuming a field is optional because a template/wizard filled it before; flags misspelled so the parser never binds them; underscore vs dash confusion (flags use dashes for underscored names).

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/ffb1ab3289631926. Report an issue: GitHub.