Skip to content
K

Initialize a Project

Monday Morning stores all project state inside a .mm/ directory at the root of your repository. The desktop app sets this up when you add a project from the command bar; mm init does the same from the terminal.

Navigate to your project root and run:

Terminal window
cd /path/to/your/project
mm init

The command is idempotent — it never overwrites existing files. You can run it multiple times safely.

mm init generates the following structure:

  • Directory.mm/
    • config.json — Project configuration
    • Directoryspecs/ — Feature specifications (the primary unit of work)
    • Directorytasks/ — Standalone quick tasks
      • tasks.md — Tasks dashboard
    • Directoryissues/ — Bug and problem tracking
      • issues.md — Issues dashboard
    • Directorynotes/ — Decisions, meeting notes, context
      • notes.md — Notes dashboard
    • Directoryfeatures/ — Optional feature groupings
    • Directorydocs/ — Living reference documents
    • Directoryproduct/ — Mission, roadmap, tech stack
    • Directoryproposals/ — Legacy (see below)
    • Directorysession/ — Session context for agents
    • Directorystandards/ — Coding standards and conventions
  • Directory.claude/
    • settings.json — Enables the bundled MCP servers
    • Directorycommands/mm/ — Monday Morning workflow commands
    • Directoryagents/mm/ — Agent definitions
    • Directoryskills/ — Reusable skill definitions

Other directories appear on demand as you use the product rather than at init time: .mm/ideas/ (captured ideas), .mm/index/ (the specs index and the ledger/ embedding index built by mm_index), .mm/reviews/ (project reviews), .mm/conversations/ (archived conversations), and .mm/specs/order.json (the build order written by /mm:order-specs).

mm init also registers the project in ~/.claude/projects-registry.json so the desktop app and cross-project commands can find it.

The project configuration file stores metadata and feature flags:

{
"project_name": "my-project",
"project_path": "/path/to/my-project",
"created": "2026-08-08 10:00",
"version": "1.4.1",
"features": {
"project_management": true,
"tasks_as_source_of_truth": true
},
"hooks": {
"auto_context": {
"enabled": true,
"include_mission": true,
"include_session": true,
"include_active_tasks": true,
"include_issues": true,
"include_notes": false
}
}
}
FieldDescription
project_nameThe project name, derived from the directory name.
project_pathAbsolute path to the project root.
versionThe Monday Morning version that initialized this project.
createdTimestamp when the project was initialized.
features / hooksFeature flags and automatic-context settings for agent sessions.

Machine-local overrides live in config.local.json alongside it.

Init writes (or updates) .claude/settings.json with "enableAllProjectMcpServers": true, so the project’s bundled MCP servers are auto-approved and agents can use the mm_* tools without a per-machine approval step. If the file already exists, only that key is added — nothing else is touched.

Each tracking directory gets a dashboard file (tasks.md, issues.md, notes.md). These dashboards act as indexes — they link to individual entity files and organize them by status. For example, tasks/tasks.md contains Active, Backlog, and Completed sections.

.mm/ is gitignored by default — this is by design, not something to fix. Your project context stays local-first and out of your commit history:

  • Everything is plain Markdown and JSON you can read and edit with any tool.
  • Team sharing happens through the cloud lane: turn on team visibility in the app’s Settings, and teammates see the shared artifacts without .mm/ ever entering git.
  • A legacy git-mirror sharing toggle exists in Settings → Git sharing, default off. Use the cloud lane unless you have a specific reason not to.

If Monday Morning ships new directories or dashboard files in a future version, run mm init again to add them. Existing files are never modified or overwritten.