deepmodel-dmx 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. deepmodel_dmx-0.1.0/.editorconfig +21 -0
  2. deepmodel_dmx-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +13 -0
  3. deepmodel_dmx-0.1.0/.github/dependabot.yml +23 -0
  4. deepmodel_dmx-0.1.0/.github/workflows/publish.yml +27 -0
  5. deepmodel_dmx-0.1.0/.github/workflows/test.yml +39 -0
  6. deepmodel_dmx-0.1.0/.gitignore +48 -0
  7. deepmodel_dmx-0.1.0/.pre-commit-config.yaml +28 -0
  8. deepmodel_dmx-0.1.0/CHANGELOG.md +32 -0
  9. deepmodel_dmx-0.1.0/CLA.md +46 -0
  10. deepmodel_dmx-0.1.0/CONTRIBUTING.md +77 -0
  11. deepmodel_dmx-0.1.0/LICENSE +38 -0
  12. deepmodel_dmx-0.1.0/PKG-INFO +219 -0
  13. deepmodel_dmx-0.1.0/README.md +185 -0
  14. deepmodel_dmx-0.1.0/SECURITY.md +33 -0
  15. deepmodel_dmx-0.1.0/pyproject.toml +90 -0
  16. deepmodel_dmx-0.1.0/src/dmx/__init__.py +24 -0
  17. deepmodel_dmx-0.1.0/src/dmx/_workflow_version.py +10 -0
  18. deepmodel_dmx-0.1.0/src/dmx/catalog.py +260 -0
  19. deepmodel_dmx-0.1.0/src/dmx/cli.py +196 -0
  20. deepmodel_dmx-0.1.0/src/dmx/exceptions.py +55 -0
  21. deepmodel_dmx-0.1.0/src/dmx/http_auth.py +50 -0
  22. deepmodel_dmx-0.1.0/src/dmx/ide/__init__.py +12 -0
  23. deepmodel_dmx-0.1.0/src/dmx/ide/detect.py +86 -0
  24. deepmodel_dmx-0.1.0/src/dmx/ide/emitters.py +264 -0
  25. deepmodel_dmx-0.1.0/src/dmx/rules/system-prompt.md +116 -0
  26. deepmodel_dmx-0.1.0/src/dmx/server.py +244 -0
  27. deepmodel_dmx-0.1.0/src/dmx/skills/specialist/dmx-docs.md +132 -0
  28. deepmodel_dmx-0.1.0/src/dmx/skills/specialist/dmx-review.md +101 -0
  29. deepmodel_dmx-0.1.0/src/dmx/skills/specialist/dmx-secure.md +112 -0
  30. deepmodel_dmx-0.1.0/src/dmx/skills/specialist/dmx-test.md +102 -0
  31. deepmodel_dmx-0.1.0/src/dmx/skills/utility/dmx-commit.md +174 -0
  32. deepmodel_dmx-0.1.0/src/dmx/skills/utility/dmx-create-branch.md +216 -0
  33. deepmodel_dmx-0.1.0/src/dmx/skills/utility/dmx-draft-pr-description.md +176 -0
  34. deepmodel_dmx-0.1.0/src/dmx/skills/utility/dmx-status.md +114 -0
  35. deepmodel_dmx-0.1.0/src/dmx/skills/utility/dmx-sync-branch.md +96 -0
  36. deepmodel_dmx-0.1.0/src/dmx/skills/utility/dmx-update-memory.md +114 -0
  37. deepmodel_dmx-0.1.0/src/dmx/skills/workflow/0-init/dmx-init.md +346 -0
  38. deepmodel_dmx-0.1.0/src/dmx/skills/workflow/1-triage/dmx-create-ticket.md +268 -0
  39. deepmodel_dmx-0.1.0/src/dmx/skills/workflow/1-triage/dmx-derive-ticket.md +267 -0
  40. deepmodel_dmx-0.1.0/src/dmx/skills/workflow/1-triage/dmx-hotfix.md +122 -0
  41. deepmodel_dmx-0.1.0/src/dmx/skills/workflow/2-plan/dmx-plan.md +132 -0
  42. deepmodel_dmx-0.1.0/src/dmx/skills/workflow/3-build/dmx-implement-next-phase.md +88 -0
  43. deepmodel_dmx-0.1.0/src/dmx/skills/workflow/3-build/dmx-implement-next-task.md +84 -0
  44. deepmodel_dmx-0.1.0/src/dmx/skills/workflow/4-validate/dmx-validate.md +173 -0
  45. deepmodel_dmx-0.1.0/src/dmx/skills/workflow/5-ship/dmx-close-ticket.md +208 -0
  46. deepmodel_dmx-0.1.0/src/dmx/skills/workflow/5-ship/dmx-create-pr.md +153 -0
  47. deepmodel_dmx-0.1.0/src/dmx/skills/workflow/6-release/dmx-create-release.md +122 -0
  48. deepmodel_dmx-0.1.0/src/dmx/skills/workflow/6-release/dmx-draft-release-note.md +216 -0
  49. deepmodel_dmx-0.1.0/src/dmx/skills/workflow/6-release/dmx-release-merge.md +144 -0
  50. deepmodel_dmx-0.1.0/src/dmx/tools.py +244 -0
  51. deepmodel_dmx-0.1.0/tests/__init__.py +1 -0
  52. deepmodel_dmx-0.1.0/tests/__snapshots__/test_ide.ambr +70 -0
  53. deepmodel_dmx-0.1.0/tests/conftest.py +78 -0
  54. deepmodel_dmx-0.1.0/tests/test_catalog.py +214 -0
  55. deepmodel_dmx-0.1.0/tests/test_cli.py +320 -0
  56. deepmodel_dmx-0.1.0/tests/test_ide.py +533 -0
  57. deepmodel_dmx-0.1.0/tests/test_server.py +154 -0
  58. deepmodel_dmx-0.1.0/tests/test_tools.py +500 -0
  59. deepmodel_dmx-0.1.0/uv.lock +2058 -0
@@ -0,0 +1,21 @@
1
+ root = true
2
+
3
+ [*]
4
+ indent_style = space
5
+ indent_size = 4
6
+ end_of_line = lf
7
+ charset = utf-8
8
+ trim_trailing_whitespace = true
9
+ insert_final_newline = true
10
+
11
+ [*.md]
12
+ trim_trailing_whitespace = false
13
+
14
+ [*.toml]
15
+ indent_size = 4
16
+
17
+ [*.yml]
18
+ indent_size = 2
19
+
20
+ [*.yaml]
21
+ indent_size = 2
@@ -0,0 +1,13 @@
1
+ ## Summary
2
+
3
+ <!-- What does this PR do? Why? -->
4
+
5
+ ## Checklist
6
+
7
+ - [ ] Tests added or updated for all changed behaviour
8
+ - [ ] `CHANGELOG.md` entry added under `[Unreleased]`
9
+ - [ ] All new functions and classes have type annotations
10
+ - [ ] `uv run ruff check src/ tests/` passes
11
+ - [ ] `uv run ruff format --check src/ tests/` passes
12
+ - [ ] `uv run mypy src/` passes
13
+ - [ ] `uv run python -m pytest` passes
@@ -0,0 +1,23 @@
1
+ version: 2
2
+
3
+ updates:
4
+ - package-ecosystem: pip
5
+ directory: /
6
+ schedule:
7
+ interval: weekly
8
+ day: monday
9
+ open-pull-requests-limit: 5
10
+ labels:
11
+ - dependencies
12
+ ignore:
13
+ # fastmcp is the critical dependency; pin updates manually after testing.
14
+ - dependency-name: fastmcp
15
+ update-types: ["version-update:semver-major"]
16
+
17
+ - package-ecosystem: github-actions
18
+ directory: /
19
+ schedule:
20
+ interval: weekly
21
+ day: monday
22
+ labels:
23
+ - dependencies
@@ -0,0 +1,27 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ jobs:
9
+ publish:
10
+ name: Build and publish
11
+ runs-on: ubuntu-latest
12
+ environment: pypi
13
+ permissions:
14
+ id-token: write # required for OIDC trusted publishing
15
+
16
+ steps:
17
+ - uses: actions/checkout@v6
18
+
19
+ - uses: astral-sh/setup-uv@v7
20
+ with:
21
+ version: "latest"
22
+
23
+ - name: Build
24
+ run: uv build
25
+
26
+ - name: Publish
27
+ run: uv publish
@@ -0,0 +1,39 @@
1
+ name: Test
2
+
3
+ on:
4
+ push:
5
+ branches: ["**"]
6
+ pull_request:
7
+
8
+ jobs:
9
+ test:
10
+ name: "Python ${{ matrix.python-version }} / ${{ matrix.os }}"
11
+ runs-on: ${{ matrix.os }}
12
+ strategy:
13
+ fail-fast: false
14
+ matrix:
15
+ python-version: ["3.11", "3.12", "3.13"]
16
+ os: [ubuntu-latest, macos-latest]
17
+
18
+ steps:
19
+ - uses: actions/checkout@v6
20
+
21
+ - uses: astral-sh/setup-uv@v7
22
+ with:
23
+ version: "latest"
24
+ python-version: ${{ matrix.python-version }}
25
+
26
+ - name: Install dependencies
27
+ run: uv sync --extra dev
28
+
29
+ - name: Lint — ruff check
30
+ run: uv run ruff check src/ tests/
31
+
32
+ - name: Lint — ruff format
33
+ run: uv run ruff format --check src/ tests/
34
+
35
+ - name: Type check — mypy
36
+ run: uv run mypy src/
37
+
38
+ - name: Test
39
+ run: uv run python -m pytest --cov --cov-fail-under=75 -q
@@ -0,0 +1,48 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ *.egg
7
+ *.egg-info/
8
+ dist/
9
+ build/
10
+ .eggs/
11
+
12
+ # uv / virtualenv
13
+ .venv/
14
+ venv/
15
+ .python-version
16
+
17
+ # uv.lock is intentionally committed — do not add it here
18
+
19
+ # Type checking
20
+ .mypy_cache/
21
+ .dmypy.json
22
+
23
+ # Linting / formatting
24
+ .ruff_cache/
25
+
26
+ # Testing
27
+ .pytest_cache/
28
+ .coverage
29
+ htmlcov/
30
+
31
+ # IDE
32
+ .idea/
33
+ .vscode/
34
+ *.swp
35
+ *.swo
36
+
37
+ # OS
38
+ .DS_Store
39
+ Thumbs.db
40
+
41
+ # Distribution
42
+ *.whl
43
+ *.tar.gz
44
+ MANIFEST
45
+
46
+ # Environment / secrets
47
+ .env
48
+ .env.*
@@ -0,0 +1,28 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.4.10
4
+ hooks:
5
+ - id: ruff
6
+ args: [--fix]
7
+ - id: ruff-format
8
+
9
+ - repo: https://github.com/pre-commit/mirrors-mypy
10
+ rev: v1.10.0
11
+ hooks:
12
+ - id: mypy
13
+ additional_dependencies:
14
+ - fastmcp
15
+ - python-frontmatter
16
+ - pyyaml
17
+ - types-PyYAML
18
+ - click
19
+
20
+ - repo: https://github.com/pre-commit/pre-commit-hooks
21
+ rev: v4.6.0
22
+ hooks:
23
+ - id: trailing-whitespace
24
+ - id: end-of-file-fixer
25
+ - id: check-yaml
26
+ - id: check-toml
27
+ - id: check-merge-conflict
28
+ - id: debug-statements
@@ -0,0 +1,32 @@
1
+ # Changelog
2
+
3
+ All notable changes to `deepmodel-dmx` are documented here.
4
+
5
+ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
+ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ---
9
+
10
+ ## [Unreleased]
11
+
12
+ ---
13
+
14
+ ## [0.1.0] — 2026-06-01
15
+
16
+ ### Added
17
+
18
+ - **23 SDLC skills** as MCP prompts, namespaced under the MCP server name: `/dmx/init`, `/dmx/create-ticket`, `/dmx/derive-ticket`, `/dmx/plan`, `/dmx/implement-next-phase`, `/dmx/implement-next-task`, `/dmx/validate`, `/dmx/create-branch`, `/dmx/commit`, `/dmx/create-pr`, `/dmx/draft-pr-description`, `/dmx/close-ticket`, `/dmx/hotfix`, `/dmx/draft-release-note`, `/dmx/release-merge`, `/dmx/create-release`, `/dmx/status`, `/dmx/sync-branch`, `/dmx/update-memory`, `/dmx/review`, `/dmx/test`, `/dmx/docs`, `/dmx/secure`
19
+ - **`system-prompt` rule** — always-apply AI persona and memory bank instructions
20
+ - **`detect_invoking_ide` tool** — detects Cursor, Claude, Copilot, Antigravity from MCP `clientInfo.name`, `X-Dmx-IDE` header, or `DMX_IDE` env var
21
+ - **`setup_ide_rules` tool** — emits per-IDE rule files for Cursor (`.mdc`), Claude, Copilot, Antigravity, and generic agents; response includes `workflow_version`
22
+ - **Workflow versioning** — `_workflow_version.py` tracks a `WORKFLOW_VERSION` constant independent of the package version; embedded in the DMX marker (`<!-- deepmodel:dmx:start workflow-v1 -->`) so staleness can be detected on re-init
23
+ - **`dmx serve`** — stdio and HTTP/SSE transports; `PORT` env var; `REQUIRE_API_KEY` + `MCP_API_KEY` bearer auth
24
+ - **`dmx serve --watch`** — hot-reload on skill/rule file changes (`watchfiles` extra)
25
+ - **`dmx list-skills`** — print all loaded skills with name, title, and argument count
26
+ - **`--skills-dir` / `--rules-dir`** CLI overrides and `DMX_SKILLS_DIR` / `DMX_RULES_DIR` env var overrides
27
+ - **`create_app()`** internal extension API for the Deepmodel commercial layer
28
+ - **CI** — GitHub Actions matrix: Python 3.11/3.12/3.13 × ubuntu/macos; ruff, mypy, pytest
29
+ - **Publishing** — OIDC trusted publisher workflow on `v*` tags
30
+
31
+ [Unreleased]: https://github.com/deepmodel-ai/dmx/compare/v0.1.0...HEAD
32
+ [0.1.0]: https://github.com/deepmodel-ai/dmx/releases/tag/v0.1.0
@@ -0,0 +1,46 @@
1
+ # Contributor License Agreement
2
+
3
+ **Deepmodel, Inc. ("Deepmodel") Individual Contributor License Agreement ("CLA")**
4
+
5
+ Thank you for your interest in contributing to open-source software projects managed by Deepmodel ("We" or "Us").
6
+
7
+ This CLA is for your protection as a contributor as well as the protection of Deepmodel and its users; it does not change your rights to use your own contributions for any other purpose.
8
+
9
+ Please read this document carefully before signing and keep a copy for your records.
10
+
11
+ ## 1. Definitions
12
+
13
+ "You" means the individual who submits a Contribution to Us.
14
+
15
+ "Contribution" means any original work of authorship, including any modifications or additions to an existing work, that you intentionally submit to Us for inclusion in, or documentation of, any of the products owned or managed by Us (the "Work").
16
+
17
+ "Submit" means any form of electronic, verbal, or written communication sent to Us, including but not limited to communication on electronic mailing lists, source-code control systems, and issue tracking systems.
18
+
19
+ ## 2. Grant of Copyright License
20
+
21
+ Subject to the terms and conditions of this Agreement, you hereby assign to Us joint ownership of, and all copyrights in, your Contributions. This assignment allows Us to license your Contributions under any license, including proprietary licenses, in addition to any open-source license under which the Work is made available.
22
+
23
+ You retain the right to use your Contributions for any purpose and in any way you see fit, including the right to offer your Contributions under other license terms.
24
+
25
+ ## 3. Grant of Patent License
26
+
27
+ Subject to the terms and conditions of this Agreement, you hereby grant to Us and to recipients of software distributed by Us a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by you that are necessarily infringed by your Contributions alone or by combination of your Contributions with the Work to which such Contributions were submitted.
28
+
29
+ ## 4. You represent that
30
+
31
+ - Each Contribution you submit is your original creation.
32
+ - You have the legal authority to enter into this Agreement.
33
+ - Your Contributions do not violate any third-party intellectual property rights.
34
+ - If your employer has rights to intellectual property that you create, you have received permission to make Contributions on behalf of that employer, or your employer has waived such rights for your Contributions to Us.
35
+
36
+ ## 5. Disclaimer of Warranties
37
+
38
+ Your Contributions are provided on an "AS IS" basis, without warranties or conditions of any kind, either express or implied, including, without limitation, any warranties or conditions of title, non-infringement, merchantability, or fitness for a particular purpose.
39
+
40
+ ## 6. Agreement
41
+
42
+ By signing the CLA (via CLA Assistant when opening a pull request to a Deepmodel repository), you accept and agree to the terms and conditions of this Agreement for your present and future Contributions submitted to Deepmodel.
43
+
44
+ ---
45
+
46
+ *This CLA is adapted from the Apache Individual Contributor License Agreement v2.0.*
@@ -0,0 +1,77 @@
1
+ # Contributing to dmx
2
+
3
+ Thank you for your interest in contributing. This document explains how to contribute and what we expect from contributors.
4
+
5
+ ## Contributor License Agreement (CLA)
6
+
7
+ **Before your first pull request can be merged, you must sign the [Contributor License Agreement](CLA.md).**
8
+
9
+ We use [CLA Assistant](https://cla-assistant.io) — it will prompt you to sign directly in the PR when you open one. The CLA assigns copyright to Deepmodel while granting you the right to retain and use your contributions. This allows Deepmodel to offer `dmx` under AGPL-3.0 alongside a commercial license.
10
+
11
+ ## Development setup
12
+
13
+ ```bash
14
+ git clone https://github.com/deepmodel-ai/dmx.git
15
+ cd dmx
16
+ uv sync --extra dev
17
+ uv run pre-commit install # optional but recommended
18
+ ```
19
+
20
+ ## Running checks locally
21
+
22
+ ```bash
23
+ uv run ruff check src/ tests/ # lint
24
+ uv run ruff format --check src/ tests/ # format
25
+ uv run mypy src/ # type check
26
+ uv run python -m pytest # tests
27
+ ```
28
+
29
+ All four must pass before opening a PR. CI runs the same commands on Python 3.11, 3.12, and 3.13 on Ubuntu and macOS.
30
+
31
+ ## Adding or editing skills
32
+
33
+ Skills are Markdown files under `src/dmx/skills/`. Each file requires YAML frontmatter:
34
+
35
+ ```yaml
36
+ ---
37
+ name: dmx-my-skill
38
+ title: Short human-readable title
39
+ description: One-sentence description shown in the IDE command palette.
40
+ arguments:
41
+ - name: my_arg
42
+ description: What this argument controls.
43
+ required: false
44
+ ---
45
+
46
+ Your skill prompt body here.
47
+ ```
48
+
49
+ - `name` must match `^[a-z0-9_-]+$`
50
+ - `title` and `description` are shown in the IDE; keep them concise
51
+ - Skill files live under `src/dmx/skills/<category>/<order>-<slug>/` — order prefix controls sort order
52
+
53
+ ## Adding or editing rules
54
+
55
+ Rules are Markdown files under `src/dmx/rules/`. Each file requires YAML frontmatter:
56
+
57
+ ```yaml
58
+ ---
59
+ name: my-rule
60
+ title: Short title
61
+ description: One-sentence description of what this rule enforces.
62
+ ---
63
+
64
+ Rule body here (written as an instruction to the AI).
65
+ ```
66
+
67
+ ## Pull request checklist
68
+
69
+ - [ ] Tests added or updated for all changed behaviour
70
+ - [ ] `CHANGELOG.md` entry added under `[Unreleased]`
71
+ - [ ] All new functions and classes have type annotations
72
+ - [ ] `ruff check`, `ruff format --check`, `mypy`, and `pytest` all pass
73
+ - [ ] CLA signed (CLA Assistant will prompt on first PR)
74
+
75
+ ## Reporting bugs and feature requests
76
+
77
+ Open a [GitHub issue](https://github.com/deepmodel-ai/dmx/issues). For security issues, see [SECURITY.md](SECURITY.md).
@@ -0,0 +1,38 @@
1
+ GNU AFFERO GENERAL PUBLIC LICENSE
2
+ Version 3, 19 November 2007
3
+
4
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
5
+ Everyone is permitted to copy and distribute verbatim copies
6
+ of this license document, but changing it is not allowed.
7
+
8
+ Preamble
9
+
10
+ The GNU Affero General Public License is a free, copyleft license for
11
+ software and other kinds of works, specifically designed to ensure
12
+ cooperation with the community in the case of network server software.
13
+
14
+ The licenses for most software and other practical works are designed
15
+ to take away your freedom to share and change the works. By contrast,
16
+ our General Public Licenses are intended to guarantee your freedom to
17
+ share and change all versions of a program--to make sure it remains free
18
+ software for all its users.
19
+
20
+ When we speak of free software, we are referring to freedom, not
21
+ price. Our General Public Licenses are designed to make sure that you
22
+ have the freedom to distribute copies of free software (and charge for
23
+ them if you wish), that you receive source code or can modify it, that
24
+ you know you can do these rights, and that you have the freedom to use,
25
+ share, and change the software.
26
+
27
+ Specifically, the GNU Affero General Public License is designed to
28
+ ensure that anyone running a modified version of the software over a
29
+ network can receive the source code for that version.
30
+
31
+ For the full license text, see: https://www.gnu.org/licenses/agpl-3.0.txt
32
+
33
+ Copyright (C) 2024 Deepmodel Inc.
34
+ All Rights Reserved under AGPL-3.0.
35
+
36
+ Additional permissions: Deepmodel Inc. retains the right to release
37
+ the software under different license terms (dual licensing). See
38
+ CLA.md for contributor terms.
@@ -0,0 +1,219 @@
1
+ Metadata-Version: 2.4
2
+ Name: deepmodel-dmx
3
+ Version: 0.1.0
4
+ Summary: AI SDLC MCP server — skills and rules for any AI IDE.
5
+ License: AGPL-3.0
6
+ License-File: LICENSE
7
+ Keywords: ai,claude,cursor,mcp,sdlc
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: License :: OSI Approved :: GNU Affero General Public License v3
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Requires-Python: >=3.11
16
+ Requires-Dist: click>=8.1
17
+ Requires-Dist: fastmcp>=2.0
18
+ Requires-Dist: python-frontmatter>=1.1
19
+ Requires-Dist: pyyaml>=6.0
20
+ Requires-Dist: starlette>=0.40
21
+ Provides-Extra: dev
22
+ Requires-Dist: httpx2>=2.2.0; extra == 'dev'
23
+ Requires-Dist: mypy>=1.10; extra == 'dev'
24
+ Requires-Dist: pre-commit>=3; extra == 'dev'
25
+ Requires-Dist: pytest-asyncio>=0.24; extra == 'dev'
26
+ Requires-Dist: pytest-cov>=5; extra == 'dev'
27
+ Requires-Dist: pytest>=8; extra == 'dev'
28
+ Requires-Dist: ruff>=0.4; extra == 'dev'
29
+ Requires-Dist: syrupy>=4; extra == 'dev'
30
+ Requires-Dist: types-pyyaml>=6.0; extra == 'dev'
31
+ Provides-Extra: watch
32
+ Requires-Dist: watchfiles>=0.21; extra == 'watch'
33
+ Description-Content-Type: text/markdown
34
+
35
+ # dmx
36
+
37
+ [![PyPI](https://img.shields.io/pypi/v/deepmodel-dmx)](https://pypi.org/project/deepmodel-dmx/)
38
+ [![Test](https://github.com/deepmodel-ai/dmx/actions/workflows/test.yml/badge.svg)](https://github.com/deepmodel-ai/dmx/actions/workflows/test.yml)
39
+ [![License: AGPL-3.0](https://img.shields.io/badge/license-AGPL--3.0-blue.svg)](LICENSE)
40
+
41
+ The official implementation of the [AI SDLC](https://github.com/deepmodel-ai/ai-sdlc) — delivered as an MCP server for any AI IDE.
42
+
43
+ `dmx` turns the AI SDLC framework into slash commands and always-apply engineering rules. Connect it to Cursor, Claude Code, GitHub Copilot, Antigravity, or any MCP-compatible IDE and get a structured, phase-gated AI engineering workflow out of the box.
44
+
45
+ ---
46
+
47
+ ## The workflow
48
+
49
+ The [AI SDLC](https://github.com/deepmodel-ai/ai-sdlc) structures development around five phases with explicit developer control points. AI executes within each phase and stops. The developer drives every transition forward.
50
+
51
+ ![AI SDLC Phase Arc](https://raw.githubusercontent.com/deepmodel-ai/ai-sdlc/main/assets/phase-arc.drawio.svg)
52
+
53
+ | Phase | What happens | dmx command |
54
+ |---|---|---|
55
+ | **Specify** | AI drafts a structured spec, surfaces ambiguity, asks Q&A. Developer answers. | `/dmx/create-ticket` |
56
+ | **Plan** | AI generates a phased task list from the answered spec. Developer reviews. | `/dmx/plan` |
57
+ | **Build** | AI implements one phase, stops, reports. Developer reviews and commits. Repeats. | `/dmx/implement-next-phase` |
58
+ | **Validate** | Automated quality gate checks spec, security, coverage. AI drafts the PR body. | `/dmx/validate` · `/dmx/create-pr` |
59
+ | **Ship** | Developer merges. AI tags the release and publishes. Developer confirms. | `/dmx/create-release` |
60
+
61
+ > The model does not merge. It does not advance the workflow. It does not decide when the work is done.
62
+
63
+ ---
64
+
65
+ ## Quick start
66
+
67
+ Add to your IDE's MCP config and restart:
68
+
69
+ **Cursor** — `~/.cursor/mcp.json`
70
+
71
+ ```json
72
+ {
73
+ "mcpServers": {
74
+ "dmx": {
75
+ "command": "uvx",
76
+ "args": ["--from", "deepmodel-dmx", "dmx", "serve"]
77
+ }
78
+ }
79
+ }
80
+ ```
81
+
82
+ **Claude Code** — `~/.claude/claude_desktop_config.json`
83
+
84
+ ```json
85
+ {
86
+ "mcpServers": {
87
+ "dmx": {
88
+ "command": "uvx",
89
+ "args": ["--from", "deepmodel-dmx", "dmx", "serve"]
90
+ }
91
+ }
92
+ }
93
+ ```
94
+
95
+ **Antigravity** — `~/.gemini/config/mcp_config.json`
96
+
97
+ ```json
98
+ {
99
+ "mcpServers": {
100
+ "dmx": {
101
+ "command": "uvx",
102
+ "args": ["--from", "deepmodel-dmx", "dmx", "serve"]
103
+ }
104
+ }
105
+ }
106
+ ```
107
+
108
+ **GitHub Copilot** — `.vscode/settings.json` (workspace) or user settings
109
+
110
+ ```json
111
+ {
112
+ "mcp": {
113
+ "servers": {
114
+ "dmx": {
115
+ "command": "uvx",
116
+ "args": ["--from", "deepmodel-dmx", "dmx", "serve"]
117
+ }
118
+ }
119
+ }
120
+ }
121
+ ```
122
+
123
+ Then run `/dmx-init` in your IDE to write always-apply rules and scaffold the `.dmx/` memory bank.
124
+
125
+ ---
126
+
127
+ ## `/dmx-init` walkthrough
128
+
129
+ `/dmx-init` is the one-time project setup skill. It:
130
+
131
+ 1. Detects your workflow mode (feature branches vs. trunk) and ticketing system
132
+ 2. Auto-detects your GitHub remote and tech stack
133
+ 3. Writes `.dmx/config.md` with project context
134
+ 4. Scaffolds the `.dmx/` memory bank (architecture, decisions, style guide, etc.)
135
+ 5. Calls `detect_invoking_ide` and `setup_ide_rules` to write IDE-specific rule files
136
+ 6. Writes the always-apply persona rule so every future chat starts with the right context
137
+
138
+ Safe to re-run — updates config without overwriting memory bank files that already have content.
139
+
140
+ ---
141
+
142
+ ## Skill catalog
143
+
144
+ All `/dmx-*` commands are MCP prompts served live — no file writes, no installation beyond the MCP config.
145
+
146
+ ### Workflow
147
+
148
+ | Skill | What it does |
149
+ |---|---|
150
+ | `/dmx/init` | One-time project setup: rules, memory bank, IDE config |
151
+ | `/dmx/create-ticket` | Idea → ticket → branch → spec in one command |
152
+ | `/dmx/derive-ticket` | Uncommitted changes → ticket → branch → derived spec |
153
+ | `/dmx/plan` | Answered spec → phased `tasks.md` |
154
+ | `/dmx/implement-next-phase` | Execute the next phase in `tasks.md`, stop |
155
+ | `/dmx/implement-next-task` | Execute the next single task, stop |
156
+ | `/dmx/validate` | Pre-PR quality gate: ticket, code, security |
157
+ | `/dmx/create-branch` | Create a properly named branch, scaffold spec |
158
+ | `/dmx/commit` | Conventional commit from staged diff |
159
+ | `/dmx/create-pr` | Open PR with correct title + description |
160
+ | `/dmx/draft-pr-description` | Generate PR body without opening the PR |
161
+ | `/dmx/close-ticket` | Post-merge: close ticket, delete branch, archive |
162
+
163
+ ### Release
164
+
165
+ | Skill | What it does |
166
+ |---|---|
167
+ | `/dmx/hotfix` | Create hotfix branch from master |
168
+ | `/dmx/draft-release-note` | Generate release notes from merged PRs |
169
+ | `/dmx/release-merge` | Open staging → master release gate PR |
170
+ | `/dmx/create-release` | Tag and publish GitHub release |
171
+
172
+ ### Utilities
173
+
174
+ | Skill | What it does |
175
+ |---|---|
176
+ | `/dmx/status` | Snapshot of in-progress tickets and open PRs |
177
+ | `/dmx/sync-branch` | Rebase/merge base branch onto current branch |
178
+ | `/dmx/update-memory` | Sync ticket learnings into memory bank |
179
+ | `/dmx/review` | Code review: clarity, correctness, maintainability |
180
+ | `/dmx/test` | Write tests that enable change |
181
+ | `/dmx/docs` | Write clear, human-first documentation |
182
+ | `/dmx/secure` | Security analysis — thinks like an attacker |
183
+
184
+ ---
185
+
186
+ ## CLI
187
+
188
+ ```
189
+ dmx serve # stdio transport (default, for IDE MCP config)
190
+ dmx serve --http # SSE transport on :8080 (team server / Docker)
191
+ dmx serve --http --port 9000
192
+ dmx serve --watch # hot-reload on file change (requires watchfiles extra)
193
+ dmx list-skills # print all loaded skills
194
+ dmx version
195
+ ```
196
+
197
+ **Environment variables**
198
+
199
+ | Variable | Purpose | Default |
200
+ |---|---|---|
201
+ | `PORT` | HTTP port | `8080` |
202
+ | `DMX_SKILLS_DIR` | Override bundled skills directory | bundled |
203
+ | `DMX_RULES_DIR` | Override bundled rules directory | bundled |
204
+ | `DMX_IDE` | Force IDE detection (`cursor`, `claude`, `copilot`, `antigravity`, `agents`) | auto-detect |
205
+ | `MCP_API_KEY` | Bearer token for HTTP auth | — |
206
+ | `REQUIRE_API_KEY` | Enable HTTP bearer auth (`true`/`false`) | `false` |
207
+
208
+ ---
209
+
210
+ ## Requirements
211
+
212
+ - Python 3.11+
213
+ - `uv` (recommended) or any package manager that supports `uvx`
214
+
215
+ ---
216
+
217
+ ## License
218
+
219
+ [AGPL-3.0](LICENSE) — free for open-source use. Commercial licensing available from [Deepmodel](https://deepmodel.ai).