bmad-code-org/BMAD-METHOD · error · Error
BMAD not installed at ${bmadDir}. Use regular install for fi
Error message
BMAD not installed at ${bmadDir}. Use regular install for first-time setup. What it means
Thrown by Installer.quickUpdate when the resolved bmad directory does not exist. quickUpdate assumes a prior install exists to preserve settings; it refuses to run a first-time setup. findBmadDir just joins projectDir with the BMAD folder name, so absence means BMAD was never installed there.
Source
Thrown at tools/installer/core/installer.js:1337
placeholder: '',
default: '',
});
}
}
}
/**
* Quick update method - preserves all settings and only prompts for new config fields
* @param {Object} config - Configuration with directory
* @returns {Object} Update result
*/
async quickUpdate(config) {
const projectDir = path.resolve(config.directory);
const { bmadDir } = await this.findBmadDir(projectDir);
// Check if bmad directory exists
if (!(await fs.pathExists(bmadDir))) {
throw new Error(`BMAD not installed at ${bmadDir}. Use regular install for first-time setup.`);
}
// Detect existing installation
const existingInstall = await ExistingInstall.detect(bmadDir);
const configuredIdes = existingInstall.ides;
const projectRoot = path.dirname(bmadDir);
// Resolve any legacy/aliased module codes (e.g. an install recorded as
// `bauto` before the registry renamed it to `bmad-loop`) to their current
// canonical code up front. Without this, a renamed module's old installs
// would fall out of `availableModuleIds` below and get silently frozen
// (see the `baut` → `automator` incident in CHANGELOG v6.7.1) instead of
// migrating forward.
const aliasMigrations = [];
const seenModuleIds = new Set();
const installedModules = [];
for (const rawId of existingInstall.moduleIds) {
const canonicalId = await this.externalModuleManager.resolveCanonicalCode(rawId);View on GitHub (pinned to b70486b9bd)
Solutions
- Run a regular first-time install instead of quickUpdate in that directory.
- Confirm you are pointing at the directory that already contains _bmad/.
- If _bmad/ was deleted by mistake, restore from VCS or reinstall normally.
Example fix
// before
await installer.quickUpdate({ directory: '/proj' }); // no _bmad there
// after
await installer.install({ directory: '/proj', /* first-time config */ }); Defensive patterns
Strategy: validation
Validate before calling
const { bmadDir } = await installer.findBmadDir(path.resolve(config.directory));
if (!(await fs.pathExists(bmadDir))) {
// route the user to a regular first-time install instead of quickUpdate
} Try / catch
try {
await installer.quickUpdate(config);
} catch (error) {
if (error.message.includes('Use regular install for first-time setup')) {
await installer.install(config); // first-time path
} else throw error;
} Prevention
- Only call quickUpdate in projects that already contain a _bmad/ folder.
- Gate the quick-update command on findBmadDir + pathExists before invoking.
When it happens
Trigger: Calling `installer.quickUpdate({ directory })` where `<directory>/_bmad/` (the BMAD folder) does not exist. Triggered by the `--quick`/update flow against a fresh project.
Common situations: Running `bmad update --quick` (or the quick-update command) in a project that never had BMAD installed, or after _bmad/ was deleted.
Related errors
- version is not available when nothing is installed
- ${label} does not exist: ${dirPath}
- ${label} is not a directory: ${dirPath}
- ${label} is not readable: ${dirPath}
- ${label} does not exist: ${filePath}
AI-assisted analysis of bmad-code-org/BMAD-METHOD@b70486b9bd (2026-08-13).
Data as JSON: /api/errors/7d322cf1b42f17ae.
Report an issue: GitHub.