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
- Ensure the init command provides the local/default project name (e.g. pass the project name flag explicitly).
- If scripting init, supply a project name argument instead of relying on the interactive prompt.
- Derive defaultProjectName from the directory or package.json before calling provisioning.
- 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
- Always pass the local project name explicitly when scripting `mastra init`.
- Derive defaultProjectName from package.json or the directory name before init.
- Prefer explicit provision modes when running non-interactively.
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
- Invalid --region "${region}". Expected one of: eu, us.
- No organization matched --org "${value}". Available: ${avail
- OBSERVABILITY_INVALID_CONFIG
- OBSERVABILITY_INVALID_INSTANCE_CONFIG
- Unable to locate pricing data JSONL at any known path: ${can
AI-assisted analysis of mastra-ai/mastra@75dd419e61 (2026-08-30).
Data as JSON: /api/errors/969675d99880bbc0.
Report an issue: GitHub.