mastra-ai/mastra · error

defaultProjectName is required when mode is "create"

Error message

defaultProjectName is required when mode is "create"

What it means

During `mastra init` observability provisioning in 'create' mode (fresh scaffold), the CLI reuses the local project name to create an observability project. It throws when that name is missing, since no picker or re-prompt happens in this mode.

Source

Thrown at packages/cli/src/commands/init/observability-provision.ts:89

  /** Organization already chosen during the observability auth prompt. */
  org?: { orgId: string; orgName: string };
} = {}): Promise<ObservabilityProvisionResult> {
  const token = providedToken ?? (await getToken());
  const { orgId, orgName } = org ?? (await resolveCurrentOrg(token, { forcePrompt: true }));

  let project: ObservabilityProject;
  if (observabilityProject) {
    const projects = await listProjects(token, orgId);
    const match = projects.find(proj => proj.name === observabilityProject || proj.slug === observabilityProject);
    if (match) {
      project = match;
    } else {
      project = await createProjectByName({ token, orgId, name: observabilityProject });
    }
  } else if (mode === 'create') {
    // Fresh scaffold: reuse the local project name; no picker, no re-prompt.
    if (!defaultProjectName) {
      throw new Error('defaultProjectName is required when mode is "create"');
    }
    project = await createProjectByName({ token, orgId, name: defaultProjectName });
  } else {
    const projects = await listProjects(token, orgId);
    if (projects.length === 0) {
      project = await createProject({ token, orgId, defaultName: defaultProjectName, orgName });
    } else {
      const choice = await p.select({
        message: `Select a project (in ${orgName})`,
        options: [
          ...projects.map(proj => ({ value: proj.id, label: proj.name, hint: proj.slug })),
          { value: '__new__', label: '+ Create new project' },
        ],
      });

      if (p.isCancel(choice)) {
        throw new Error('Cancelled');
      }

View on GitHub (pinned to 75dd419e61)

Solutions

  1. Ensure the init command provides the local/default project name (e.g. pass the project name flag explicitly).
  2. If scripting init, supply a project name argument instead of relying on the interactive prompt.
  3. Derive defaultProjectName from the directory or package.json before calling provisioning.
  4. Use an explicit provision mode ('pick' or existing project) when no default name is available.

Example fix

// before
await provisionObservabilityProject({ mode: 'create', defaultProjectName: undefined });
// after
await provisionObservabilityProject({ mode: 'create', defaultProjectName: 'my-mastra-app' });
Defensive patterns

Strategy: validation

Validate before calling

if (mode === 'create' && (!defaultProjectName || defaultProjectName.trim() === '')) {
  throw new Error('Provide a project name before provisioning in create mode');
}

Try / catch

try {
  await provisionObservabilityProject({ mode: 'create', defaultProjectName });
} catch (err) {
  if (err.message.includes('defaultProjectName is required')) {
    // fall back to interactive mode or prompt for a name
  }
}

Prevention

When it happens

Trigger: Calling provisionObservabilityProject with mode='create' and defaultProjectName undefined/empty, typically when the init flow was invoked non-interactively or the project-name step was skipped.

Common situations: Running `mastra init` in CI with flags that skip the interactive name prompt, custom wrappers around init that don't pass defaultProjectName, or a fresh directory where no package.json name could be derived.

Related errors


AI-assisted analysis of mastra-ai/mastra@75dd419e61 (2026-08-30). Data as JSON: /api/errors/969675d99880bbc0. Report an issue: GitHub.