Skip to main content

dmx

PyPI Test License: AGPL-3.0

The missing orchestrator for AI-native engineering.

Most teams building with AI run into the same problems:

  • Workflow lives in chat history. No process, nothing that persists, nothing you can hand off.
  • Every developer is using AI differently. Different tools, different prompts, different output.
  • Results are unpredictable. Brilliant one session, wrong the next.
  • No shared context. Every session starts from scratch, every developer builds their own mental model.
  • Missing context causes drift. The same problem solved three ways in the same codebase.

The AI SDLC is the framework we built to fix this: start with a spec, build in phases, verify output, keep context in the repo. dmx is the orchestrator that makes the AI SDLC executable.

dmx runs as an MCP server inside Cursor, Claude Code, GitHub Copilot, and Antigravity. It gives you AI skills that govern the full engineering lifecycle — from first spec to production release — as structured loops. Each loop has a skill sequence, a shared memory context, and a validator. A loop without a validator is just a script.

/dmx/create-ticket         # describe the work → spec → branch
/dmx/plan                  # spec → phased task list
/dmx/implement-next-phase  # build next phase, stop, wait for review
/dmx/validate              # quality gate: spec, security, coverage
/dmx/create-pr             # sync memory, draft PR body, open PR
/dmx/create-release        # tag and publish the release

Every command stops and waits. You review, decide, and move forward. Project context lives in .dmx/ — committed to the repo, read by every AI session.

When a skill sequence is trusted, formalize it as a loop — declarative YAML config, automated validators, and persisted state:

/run-loop spec             # start the spec loop (ticket → branch → spec)
/loop-continue             # resume after a human gate

Loop runtime

Loops are declarative configs that run an ordered skill sequence with durable state and automated validation. Default configs ship with dmx; teams override via .dmx/loops/{name}.yaml.

Foreground is running /dmx/* skills manually — you are the orchestrator. Background is the loop runtime: you define the sequence, write validators that encode your judgment, and review the artifact. Trust is earned by validators, not a config flag.

Command What it does
/run-loop Start a loop by name — loads config, writes state, runs the first skill
/loop-continue Resume a paused loop after human review at a gate

Bundled loops for the SDLC pipeline:

Loop Skills Chains to
spec create-ticket plan
plan plan dev
dev implement-next-phase, commit validate
validate validate release
release create-pr, update-memory

Each loop config defines a goal state, optional repeat_until condition, validators, human gate policy, and on_complete chaining. Run state is written to .dmx/jobs/{job_id}/{loop_name}-{task_id}.json — there's no separate active-run pointer; the active run is derived by scanning a job's state files for the one non-terminal (pending/running/paused/iterating) entry, keyed off the current branch/ticket. This keeps loop state isolated per branch: pausing work on one branch and running a loop on another can't corrupt or lose either one's state.

Validators are plain Python functions at validators/{name}.py in the app repo (bundled fallbacks ship with dmx). The orchestrator invokes them via subprocess after all skills complete — the coding agent runs skills; validators run deterministically.

Status: M1 is complete (#5) — config, state persistence, MCP orchestration (run_loop, loop_advance, loop_continue), human-gate sequencing, validator execution, the policy engine, repeat_until iteration, on_complete auto-chaining, and loop-level memory hooks are all implemented and covered by an end-to-end integration test suite that runs the full spec → plan → dev → validate → release pipeline through the real MCP tools.

Loop-level memory hooks: before the first skill runs, the runtime surfaces activeContext.md's Open Learnings / Open Decisions to the agent; when a loop finishes (complete, paused for validator review, or iterating), it appends a one-line breadcrumb to Session Notes. This is a deterministic log entry, not judgment — promoting it into durable knowledge is still /dmx/update-memory's job.

Roadmap

  • Full lifecycle workflow — spec, plan, build, validate, release
  • .dmx/ memory bank — shared project context committed to the repo
  • Loop runtime — background execution engine with validators, policy, repeat_until, and autonomous chaining (#5)
  • Team server — hosted MCP endpoint, shared loops and rules across the team
  • Gateway — model governance, cost visibility, autonomous background execution

Get started

{
  "mcpServers": {
    "dmx": {
      "command": "uvx",
      "args": ["--from", "deepmodel-dmx", "dmx", "serve"]
    }
  }
}

Add to your IDE config (Claude Code, Copilot, Antigravity ↓). Run /dmx/init once per project. Then:

/dmx/create-ticket

Learn more

Full install guide

Step 1 — Add the MCP server

Add to your Cursor MCP config (~/.cursor/mcp.json) and restart:

{
  "mcpServers": {
    "dmx": {
      "command": "uvx",
      "args": ["--from", "deepmodel-dmx", "dmx", "serve"]
    }
  }
}
Claude Code, Copilot, Antigravity

Claude Code~/.claude/claude_desktop_config.json

{
  "mcpServers": {
    "dmx": {
      "command": "uvx",
      "args": ["--from", "deepmodel-dmx", "dmx", "serve"]
    }
  }
}

GitHub Copilot.vscode/settings.json

{
  "mcp": {
    "servers": {
      "dmx": {
        "command": "uvx",
        "args": ["--from", "deepmodel-dmx", "dmx", "serve"]
      }
    }
  }
}

Antigravity~/.gemini/config/mcp_config.json

{
  "mcpServers": {
    "dmx": {
      "command": "uvx",
      "args": ["--from", "deepmodel-dmx", "dmx", "serve"]
    }
  }
}

Step 2 — Run /dmx/init in your IDE

Open any chat and run /dmx/init. It will:

  • Write always-apply engineering rules into your project (.cursor/rules/, CLAUDE.md, etc.)
  • Scaffold the .dmx/ memory bank — durable core files plus an activeContext.md learning inbox
  • Configure your workflow mode (feature branches or trunk) and ticketing system

Safe to re-run. Updates config without overwriting memory bank files that already have content.

Step 3 — Start your first ticket

/dmx/create-ticket

Describe what you want to build. dmx scaffolds the spec, asks clarifying questions, and waits for your answers before writing a line of code.

Full skill catalog

Workflow

Skill What it does
/dmx/init One-time project setup: rules, memory bank, IDE config
/dmx/create-ticket Idea → ticket → branch → spec in one command
/dmx/derive-ticket Uncommitted changes → ticket → branch → derived spec
/dmx/plan Answered spec → phased tasks.md
/dmx/implement-next-phase Execute the next phase in tasks.md, stop
/dmx/implement-next-task Execute the next single task, stop
/dmx/validate Pre-PR quality gate: ticket, code, security
/dmx/create-branch Create a properly named branch, scaffold spec
/dmx/commit Conventional commit from staged diff
/dmx/create-pr Open PR with correct title + description
/dmx/draft-pr-description Generate PR body without opening the PR
/dmx/close-ticket Post-merge: close ticket, delete branch

Release

Skill What it does
/dmx/hotfix Create hotfix branch from production_branch
/dmx/draft-release-note Generate release notes from merged PRs
/dmx/release-merge Open integration → production release gate PR
/dmx/create-release Tag production branch and publish GitHub release

Utilities

Skill What it does
/dmx/status Snapshot of in-progress tickets and open PRs
/dmx/sync-branch Rebase/merge integration branch onto current branch
/dmx/update-memory Deep sync: promote inbox learnings, reconcile contradictions
/dmx/review Code review: clarity, correctness, maintainability
/dmx/test Write tests that enable change
/dmx/docs Write clear, human-first documentation
/dmx/secure Security analysis — thinks like an attacker

Loop

Skill What it does
/run-loop Start a loop by name — reads loop config, initialises state, runs first skill
/loop-continue Resume a paused loop after human review at a gate
Memory bank (.dmx/)

The .dmx/ directory is the project's shared memory — committed to the repo so every developer and every AI session starts from the same understanding.

File Role Lifetime
config.md Project settings — ticketing, integration/production branches, credentials; injected as always-apply rule Updated by /dmx/init
projectbrief.md Goals, scope, non-negotiables Durable — updated rarely
productContext.md User-facing behaviour and flows Durable — updated when features ship
systemPatterns.md Architecture, patterns, component relationships Durable — updated when design changes
techContext.md Stack, dependencies, constraints Durable — updated when tooling changes
activeContext.md Learning inbox: open learnings, decisions, session notes Branch-local — promoted to durable files on commit/PR
spec.md What is being built and why — YAML frontmatter + scope + Q&A Branch-scoped — created by create-ticket, committed with the PR
tasks.md Phased implementation plan Branch-scoped — created by plan, committed with the PR
loops/ Loop config overrides (YAML) Optional — overrides bundled defaults from dmx
jobs/ Per-run loop state (skill progress, validator results); also doubles as the active-run pointer — no separate pointer file exists Branch-scoped — committed with the PR when present

Branch-as-identity model: each branch holds exactly one unit of work. spec.md and tasks.md live directly in .dmx/ on the feature branch. When a PR merges, they go with it — but close-ticket doesn't delete them, so main (and any branch cut from it afterward) keeps the last-merged ticket's spec.md/tasks.md as a stale leftover rather than truly starting fresh. The spec loop guards against this explicitly: it only starts from the configured integration branch and never trusts a pre-existing spec.md for its own job identity, so a leftover file can't get a new ticket's state written into the previous ticket's job folder.

Three-tier memory sync: learnings accumulate in activeContext.md during implementation. /dmx/commit promotes qualifying items (light sync), /dmx/create-pr promotes all remaining items (full sync), and /dmx/update-memory does a deep reconciliation on demand.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

deepmodel_dmx-0.3.2.tar.gz (236.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

deepmodel_dmx-0.3.2-py3-none-any.whl (128.8 kB view details)

Uploaded Python 3

File details

Details for the file deepmodel_dmx-0.3.2.tar.gz.

File metadata

  • Download URL: deepmodel_dmx-0.3.2.tar.gz
  • Upload date:
  • Size: 236.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for deepmodel_dmx-0.3.2.tar.gz
Algorithm Hash digest
SHA256 d04de7be79bd298736961d2d17a73f242903f61413aa1c6333318795511cf8e0
MD5 670fbea29c19368c17f305052ba4a266
BLAKE2b-256 bee2c7f3f26150e77b74c0049ef9edc916c0ed8fd22191015c487a2835a91b6f

See more details on using hashes here.

File details

Details for the file deepmodel_dmx-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: deepmodel_dmx-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 128.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for deepmodel_dmx-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6a365742f74b69f974c33df29baf7d52e9faf3c4b0ef9f3ec38b3788c87958ee
MD5 9950c59afb3689ccd21f75309e50b929
BLAKE2b-256 0dd83122c7e2a7f20a27f63c85ce688ee249909457eb9b002517d5787a0a7340

See more details on using hashes here.

Release history Release notifications | RSS feed

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.4

2 files

0.3.3

2 files

This release

0.3.2 This release

2 files

0.3.1

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page