bmad-init

bmad-init is a command for coding agents from miounet11/ccjk. It costs 0 tokens per session (2,566 once invoked), scanned A, original, MIT.

A command that installs or updates BMad-Method V6, a project methodology for organizing AI-assisted development, in the current project.

In plain words
What is it for?
Use it to perform a fresh BMad-Method installation, update an existing V6 setup, remove legacy V4 ignore entries, add current ignore entries, and show the result.
Why use it?
It detects existing or older installations and updates project files accordingly, reducing manual cleanup and version-migration work.

Command

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add commands/miounet11/ccjk/bmad-init
Clone the repo
git clone --depth 1 https://github.com/miounet11/ccjk

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for bmad-init

README.md
[![agentmods](https://agentmods.dev/badge/commands/miounet11/ccjk/bmad-init.svg)](https://agentmods.dev/commands/miounet11/ccjk/bmad-init)
Your own site
<a href="https://agentmods.dev/commands/miounet11/ccjk/bmad-init"><img src="https://agentmods.dev/badge/commands/miounet11/ccjk/bmad-init.svg" alt="Measured on agentmods" height="20"></a>
Per session 0 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 2,566 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 1 finding. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00000 $0.02566
Opus 5 $0.00000 $0.01283
Sonnet 5 $0.00000 $0.00513
Haiku 4.5 $0.00000 $0.00257

Measured 5d ago against content hash 808a380d4e52, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

bmad-init scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Runs shell commandslowCapability

Expected in a hook, worth knowing in a rule or an instructions file.

const { execSync } = require('node:child_process')
templates/claude-code/en/workflow/bmad/commands/bmad-init.md · 276 lines

How it starts

The opening of the file, as written. The whole thing — 276 lines — stays where its author put it; the contents beside it link to each section on GitHub.

/bmad-init Command

This command initializes or updates BMad-Method (V6) in your project.

When this command is invoked:

  1. Check if _bmad/ directory exists to determine if BMad V6 is already installed
  2. Check for legacy V4 installations (.bmad-core or .bmad-method directories)
  3. Fresh install executes: npx bmad-method install --directory . --modules bmm --tools claude-code --communication-language English --document-output-language English --yes
  4. Existing install executes: npx bmad-method install --directory . --action quick-update --yes
  5. Fix installer bug: rename {output_folder} to _bmad-output (Beta known issue)
  6. Automatically update .gitignore (remove V4 entries, add V6 entries)
  7. Display installation results and prompt user for next steps

Implementation

const { execSync } = require('node:child_process')
const fs = require('node:fs')
const path = require('node:path')

// Legacy entries to clean from .gitignore
const LEGACY_GITIGNORE_ENTRIES = [
  '.bmad-core',
  '.bmad-method',
  '.claude/commands/BMad',
  '{output_folder}',  // v6.0.0-Beta.8 bug artifact
]

// V6 .gitignore entries
const V6_GITIGNORE_ENTRIES = [
  '_bmad/',
  '_bmad-output/',
]

// Fix installer bug: {output_folder} not resolved to _bmad-output (v6.0.0-Beta.8)
function fixOutputFolderBug(cwd) {
  const buggyPath = path.join(cwd, '{output_folder}')
  const correctPath = path.join(cwd, '_bmad-output')

  if (!fs.existsSync(buggyPath)) return false

  if (!fs.existsSync(correctPath)) {
    // _bmad-output doesn't exist, simply rename
    fs.renameSync(buggyPath, correctPath)
    console.log('   ✅ {output_folder} → _bmad-output/ (renamed)')
  } else {
    // _bmad-output already exists, merge subdirectories then delete
    const entries = fs.readdirSync(buggyPath, { withFileTypes: true })
    for (const entry of entries) {
      const src = path.join(buggyPath, entry.name)
      const dest = path.join(correctPath, entry.name)
      if (!fs.existsSync(dest)) {
        fs.renameSync(src, dest)
        console.log(`   ✅ Moved ${entry.name} → _bmad-output/`)
      }
    }
    fs.rmSync(buggyPath, { recursive: true, force: true })
    console.log('   ✅ Removed redundant {output_folder}/')
  }
  return true
}

function updateGitignore(cwd) {
  const gitignorePath = path.join(cwd, '.gitignore')
  let content = ''
  let exists = false

  if (fs.existsSync(gitignorePath)) {
    content = fs.readFileSync(gitignorePath, 'utf8')
    exists = true
  }

  const lines = content.split('\n')
  let changed = false

  // Remove V4 legacy entries
  const filtered = lines.filter(line => {
    const trimmed = line.trim()
    const isLegacy = LEGACY_GITIGNORE_ENTRIES.some(entry =>
      trimmed === entry || trimmed === entry + '/' || trimmed === '/' + entry
    )
    if (isLegacy) {
      console.log(`   🗑️  Removing legacy entry: ${trimmed}`)
      changed = true
    }
    return !isLegacy
  })

  // Add V6 entries
  const newEntries = []
  for (const entry of V6_GITIGNORE_ENTRIES) {
    const entryBase = entry.replace(/\/$/, '')
    const alreadyExists = filtered.some(line => {
      const trimmed = line.trim()
      return trimmed === entry || trimmed === entryBase || trimmed === '/' + entryBase
    })
    if (!alreadyExists) {
      newEntries.push(entry)
      console.log(`   ✅ Adding new entry: ${entry}`)
      changed = true
    }
  }

  if (!changed) {
    console.log('   ℹ️  .gitignore is up to date, no changes needed')
    return
  }

  // Build new content
  let result = filtered.join('\n')

  if (newEntries.length > 0) {
    // Ensure trailing newline, then add BMad section
    if (result.length > 0 && !result.endsWith('\n')) {
      result += '\n'
    }
    result += '\n# BMad Method V6\n'
    result += newEntries.join('\n') + '\n'
  }

  fs.writeFileSync(gitignorePath, result, 'utf8')
  console.log(`   📝 .gitignore ${exists ? 'updated' : 'created'}`)
}

async function initBmad() {
  const cwd = process.cwd()
  const bmadV6Path = path.join(cwd, '_bmad')
  const legacyCorePath = path.join(cwd, '.bmad-core')
  const legacyMethodPath = path.join(cwd, '.bmad-method')

  // Check for legacy V4 installation
  const hasLegacyCore = fs.existsSync(legacyCorePath)
  const hasLegacyMethod = fs.existsSync(legacyMethodPath)

  if (hasLegacyCore || hasLegacyMethod) {
    console.log('⚠️  Legacy BMad V4 installation detected:')
    if (hasLegacyCore) console.log('   • .bmad-core/ (V4 core directory)')
    if (hasLegacyMethod) console.log('   • .bmad-method/ (V4 method directory)')
    console.log('')
    console.log('📌 The V6 installer will handle legacy migration automatically. Follow the prompts during installation.')
    console.log('   Details: https://bmad-code-org.github.io/BMAD-METHOD/docs/how-to/upgrade-to-v6')
    console.log('')
  }

  // Check if V6 is already installed
  const hasV6 = fs.existsSync(bmadV6Path)

  // Build non-interactive install command
  let installCmd
  if (hasV6) {
    console.log('🔄 Existing BMad V6 installation detected, performing quick update...')
    console.log('')
    installCmd = [
      'npx bmad-method install',
      '--directory .',
      '--action quick-update',
      '--yes',
    ].join(' ')
  } else {
    console.log('🚀 Initializing BMad-Method V6...')
    console.log('')
    installCmd = [
      'npx bmad-method install',
      '--directory .',
      '--modules bmm',
      '--tools claude-code',
      '--communication-language English',
      '--document-output-language English',
      '--yes',
    ].join(' ')
  }

  // Execute installation
  try {
    console.log(`📋 Executing: ${installCmd}`)
    console.log('')
    execSync(installCmd, {
      stdio: 'inherit',
      cwd: cwd,
      shell: true
    })

    console.log('')
    console.log('✅ BMad-Method V6 installation/update complete!')
    console.log('')
    console.log('═══════════════════════════════════════════════════════════════')
    console.log('📌 IMPORTANT: Please restart your AI IDE to load BMad extensions')
    console.log('═══════════════════════════════════════════════════════════════')
    console.log('')
    // Fix {output_folder} bug (v6.0.0-Beta.8)
    console.log('🔧 Checking for known installer issues...')
    try {
      const fixed = fixOutputFolderBug(cwd)
      if (!fixed) console.log('   ℹ️  No fixes needed')
    } catch (err) {
      console.log(`   ⚠️  Failed to fix {output_folder}: ${err.message}`)
      console.log('   Please manually rename {output_folder}/ to _bmad-output/')
    }
    console.log('')

    console.log('📂 V6 Directory Structure:')
    console.log('   • _bmad/          — agents, workflows, tasks, and configuration')
    console.log('   • _bmad-output/   — generated artifact output directory')
    console.log('')

    // Automatically update .gitignore
    console.log('🔧 Updating .gitignore...')
    try {
      updateGitignore(cwd)
    } catch (err) {
      console.log('   ⚠️  Failed to automatically update .gitignore, please manually add _bmad/ and _bmad-output/')
    }
    console.log('')
    console.log('🚀 Quick Start:')
    console.log('   1. Restart your AI IDE')
    console.log('   2. Run /bmad-help for guidance and next step suggestions')
    console.log('   3. Type /bmad and use autocomplete to browse available commands')
    console.log('')
    console.log('💡 Common Workflows:')
    console.log('   • /bmad-help                      — Interactive help')
    console.log('   • /bmad-bmm-create-prd             — Create Product Requirements Document')
    console.log('   • /bmad-bmm-create-architecture     — Create Architecture Document')
    console.log('   • /bmad-bmm-create-epics-and-stories — Create Epics and User Stories')
    console.log('   • /bmad-bmm-sprint-planning         — Initialize Sprint Planning')
    console.log('   • /bmad-bmm-dev-story               — Implement User Story')

    // Legacy V4 IDE command cleanup reminder
    const legacyClaudeAgents = path.join(cwd, '.claude', 'commands', 'BMad', 'agents')
    const legacyClaudeTasks = path.join(cwd, '.claude', 'commands', 'BMad', 'tasks')
    if (fs.existsSync(legacyClaudeAgents) || fs.existsSync(legacyClaudeTasks)) {
      console.log('')
      console.log('⚠️  Legacy V4 IDE commands detected, consider removing manually:')
      if (fs.existsSync(legacyClaudeAgents)) console.log('   • .claude/commands/BMad/agents/')
      if (fs.existsSync(legacyClaudeTasks)) console.log('   • .claude/commands/BMad/tasks/')
      console.log('   New V6 commands are installed under .claude/commands/bmad/')
    }
  }
  catch (error) {
    console.error('❌ Installation failed:', error.message)
    console.log('')
    console.log('🛠️  Manual Installation Guide:')
    console.log('   1. Ensure Node.js 20+ is installed')
    console.log('   2. Non-interactive install:')
    console.log('      npx bmad-method install --directory . --modules bmm --tools claude-code --communication-language English --document-output-language English --yes')
    console.log('   3. Quick update existing installation:')
    console.log('      npx bmad-method install --directory . --action quick-update --yes')
    console.log('   4. Or interactive install:')
    console.log('      npx bmad-method install')
    console.log('')
    console.log('📖 Documentation:')
    console.log('   https://bmad-code-org.github.io/BMAD-METHOD/docs/how-to/install-bmad')
  }
}

// Execute initialization
initBmad()

Read the full file on GitHub · 276 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 5d ago First seen · 276 lines · 0 tokens per session scan A 808a380d4e52

Subscribe to this mod's changes

bmad-init is a command published in the GitHub repository miounet11/ccjk (46 stars, last pushed 2mo ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 2,566 tokens. A static security scan graded it A with 1 finding (runs shell commands). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other commands, from other repositories

blueprint

Author a concrete blueprint for a slug — what we wanted (intent) + what we're building now (classes, interfaces, dependencies, module relationships, build order) with Mermaid UML. Optional, after /draft-plan. Presents the draft for accept/edit/reject, then writes to .claude/docs/ /v .md and the Obsidian vault.

AcKeskin/contexture · 73 tokens

new-agents-md

Generate a vendor-neutral AGENTS.md by projecting this Claude-Code instruction corpus — CLAUDE.md tree, architectural rules, warning/feedback landmines, canonical commands — into a flat file other coding agents (Codex, Cursor, Aider, …) can read, then interviewing only for the gaps the corpus can't know.

AcKeskin/contexture · 66 tokens

orchestrate

Goal-directed orchestration & convergence for concurrent work — decompose one goal into interdependent units, place each (shared tree / worktree / serialize), fan out via dispatch, keep on track at dispatch, then verify-and-converge into one coherent result.

AcKeskin/contexture · 52 tokens

wrap

Session-terminus driver — one /wrap runs the whole closing ceremony in order (coordinate teardown → checkpoint if warranted → recap → close-out → changelog → BACKLOG-shipped-row sweep → build-progress memory), driving the existing organs rather than reimplementing them. Auto-runs the reversible spine; every canonical…

AcKeskin/contexture · 70 tokens

allow-skip-hooks

Arm the hook-skip-blocker to permit the next N git commands with --no-verify / --no-gpg-sign / -c commit.gpgsign=false / -c core.hooksPath=. Default N = 1.

AcKeskin/contexture · 47 tokens

checkpoint

Scope-dialed fit-and-intent checkpoint — "does this serve the point + cohere + what did I learn?" at diff / module / corpus zoom. Auto-detects scope (+ --scope override); diff scope composes /code-review + a fit-pass; batches findings and routes them.

AcKeskin/contexture · 61 tokens