claude-mpm 4.16.0__py3-none-any.whl → 4.20.3__py3-none-any.whl

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 (131) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_ENGINEER.md +286 -0
  3. claude_mpm/agents/BASE_PM.md +255 -23
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +40 -0
  5. claude_mpm/agents/agent_loader.py +4 -4
  6. claude_mpm/agents/templates/engineer.json +5 -1
  7. claude_mpm/agents/templates/python_engineer.json +8 -3
  8. claude_mpm/agents/templates/rust_engineer.json +12 -7
  9. claude_mpm/agents/templates/svelte-engineer.json +225 -0
  10. claude_mpm/cli/commands/__init__.py +2 -0
  11. claude_mpm/cli/commands/mpm_init.py +109 -24
  12. claude_mpm/cli/commands/skills.py +434 -0
  13. claude_mpm/cli/executor.py +2 -0
  14. claude_mpm/cli/parsers/base_parser.py +7 -0
  15. claude_mpm/cli/parsers/skills_parser.py +137 -0
  16. claude_mpm/cli/startup.py +57 -0
  17. claude_mpm/commands/mpm-auto-configure.md +52 -0
  18. claude_mpm/commands/mpm-help.md +3 -0
  19. claude_mpm/commands/mpm-init.md +112 -6
  20. claude_mpm/commands/mpm-version.md +113 -0
  21. claude_mpm/commands/mpm.md +1 -0
  22. claude_mpm/config/agent_config.py +2 -2
  23. claude_mpm/constants.py +12 -0
  24. claude_mpm/core/config.py +42 -0
  25. claude_mpm/core/factories.py +1 -1
  26. claude_mpm/core/optimized_agent_loader.py +3 -3
  27. claude_mpm/hooks/__init__.py +8 -0
  28. claude_mpm/hooks/claude_hooks/response_tracking.py +35 -1
  29. claude_mpm/hooks/session_resume_hook.py +121 -0
  30. claude_mpm/models/resume_log.py +340 -0
  31. claude_mpm/services/agents/auto_config_manager.py +1 -1
  32. claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
  33. claude_mpm/services/agents/deployment/agent_record_service.py +1 -1
  34. claude_mpm/services/agents/deployment/agent_validator.py +17 -1
  35. claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
  36. claude_mpm/services/agents/deployment/local_template_deployment.py +1 -1
  37. claude_mpm/services/agents/local_template_manager.py +1 -1
  38. claude_mpm/services/agents/recommender.py +47 -0
  39. claude_mpm/services/cli/resume_service.py +617 -0
  40. claude_mpm/services/cli/session_manager.py +87 -0
  41. claude_mpm/services/cli/session_resume_helper.py +352 -0
  42. claude_mpm/services/core/path_resolver.py +1 -1
  43. claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
  44. claude_mpm/services/mcp_config_manager.py +7 -131
  45. claude_mpm/services/session_manager.py +205 -1
  46. claude_mpm/services/unified/deployment_strategies/local.py +1 -1
  47. claude_mpm/services/version_service.py +104 -1
  48. claude_mpm/skills/__init__.py +21 -0
  49. claude_mpm/skills/agent_skills_injector.py +331 -0
  50. claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
  51. claude_mpm/skills/bundled/api-documentation.md +393 -0
  52. claude_mpm/skills/bundled/async-testing.md +571 -0
  53. claude_mpm/skills/bundled/code-review.md +143 -0
  54. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +75 -0
  55. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +184 -0
  56. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +107 -0
  57. claude_mpm/skills/bundled/collaboration/requesting-code-review/code-reviewer.md +146 -0
  58. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +118 -0
  59. claude_mpm/skills/bundled/database-migration.md +199 -0
  60. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +177 -0
  61. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
  62. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
  63. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
  64. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
  65. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
  66. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
  67. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
  68. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
  69. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
  70. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
  71. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +175 -0
  72. claude_mpm/skills/bundled/debugging/verification-before-completion/references/common-failures.md +213 -0
  73. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +314 -0
  74. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +227 -0
  75. claude_mpm/skills/bundled/docker-containerization.md +194 -0
  76. claude_mpm/skills/bundled/express-local-dev.md +1429 -0
  77. claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
  78. claude_mpm/skills/bundled/git-workflow.md +414 -0
  79. claude_mpm/skills/bundled/imagemagick.md +204 -0
  80. claude_mpm/skills/bundled/json-data-handling.md +223 -0
  81. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +74 -0
  82. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +32 -0
  83. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
  84. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
  85. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
  86. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
  87. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +328 -0
  88. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
  89. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
  90. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
  91. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
  92. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +150 -0
  93. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +372 -0
  94. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +209 -0
  95. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +302 -0
  96. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +111 -0
  97. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +65 -0
  98. claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
  99. claude_mpm/skills/bundled/pdf.md +141 -0
  100. claude_mpm/skills/bundled/performance-profiling.md +567 -0
  101. claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
  102. claude_mpm/skills/bundled/security-scanning.md +327 -0
  103. claude_mpm/skills/bundled/systematic-debugging.md +473 -0
  104. claude_mpm/skills/bundled/test-driven-development.md +378 -0
  105. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +123 -0
  106. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
  107. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
  108. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
  109. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
  110. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
  111. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
  112. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +304 -0
  113. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +96 -0
  114. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
  115. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +40 -0
  116. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
  117. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +107 -0
  118. claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
  119. claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
  120. claude_mpm/skills/bundled/xlsx.md +157 -0
  121. claude_mpm/skills/registry.py +97 -9
  122. claude_mpm/skills/skills_registry.py +351 -0
  123. claude_mpm/skills/skills_service.py +730 -0
  124. claude_mpm/utils/agent_dependency_loader.py +2 -2
  125. {claude_mpm-4.16.0.dist-info → claude_mpm-4.20.3.dist-info}/METADATA +181 -32
  126. {claude_mpm-4.16.0.dist-info → claude_mpm-4.20.3.dist-info}/RECORD +130 -48
  127. claude_mpm/agents/INSTRUCTIONS_OLD_DEPRECATED.md +0 -602
  128. {claude_mpm-4.16.0.dist-info → claude_mpm-4.20.3.dist-info}/WHEEL +0 -0
  129. {claude_mpm-4.16.0.dist-info → claude_mpm-4.20.3.dist-info}/entry_points.txt +0 -0
  130. {claude_mpm-4.16.0.dist-info → claude_mpm-4.20.3.dist-info}/licenses/LICENSE +0 -0
  131. {claude_mpm-4.16.0.dist-info → claude_mpm-4.20.3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,227 @@
1
+ # Verification Patterns
2
+
3
+ Complete patterns for verifying different types of claims before making them.
4
+
5
+ ## Test Verification
6
+
7
+ **Correct Pattern:**
8
+ ```
9
+ 1. Run full test suite: pytest tests/
10
+ 2. Read complete output
11
+ 3. Count: 34 tests, 34 passed, 0 failed
12
+ 4. Claim: "All 34 tests pass"
13
+ ```
14
+
15
+ **Incorrect Patterns:**
16
+ - ❌ "Should pass now" (no evidence)
17
+ - ❌ "Looks correct" (subjective)
18
+ - ❌ "Tests were passing earlier" (stale)
19
+ - ❌ "I fixed the issue" (assumes, doesn't verify)
20
+
21
+ **Evidence Required:**
22
+ - Full test command executed
23
+ - Complete output visible
24
+ - Exact pass/fail counts
25
+ - Exit code confirmed (0 = success)
26
+
27
+ ## Regression Test Verification (TDD Red-Green Cycle)
28
+
29
+ **Correct Pattern:**
30
+ ```
31
+ 1. Write regression test
32
+ 2. Run test → MUST FAIL (RED)
33
+ 3. Implement fix
34
+ 4. Run test → MUST PASS (GREEN)
35
+ 5. Revert fix temporarily
36
+ 6. Run test → MUST FAIL AGAIN (confirms test works)
37
+ 7. Restore fix
38
+ 8. Run test → MUST PASS (final confirmation)
39
+ ```
40
+
41
+ **Why Red-Green-Red-Green?**
42
+ - First RED: Confirms test catches the bug
43
+ - GREEN: Confirms fix works
44
+ - Second RED: Confirms test isn't passing by accident
45
+ - Final GREEN: Confirms fix is stable
46
+
47
+ **Incorrect Patterns:**
48
+ - ❌ "I've written a regression test" (didn't verify it fails)
49
+ - ❌ Test passes on first run (never confirmed it catches bug)
50
+ - ❌ Single pass without reverting (could be false positive)
51
+
52
+ ## Build Verification
53
+
54
+ **Correct Pattern:**
55
+ ```
56
+ 1. Run full build: make build
57
+ 2. Read complete output
58
+ 3. Check exit code: echo $? → 0
59
+ 4. Verify artifacts created: ls dist/
60
+ 5. Claim: "Build succeeds, artifacts in dist/"
61
+ ```
62
+
63
+ **Incorrect Patterns:**
64
+ - ❌ "Linter passed, so build should work" (linter ≠ compiler)
65
+ - ❌ "No errors in logs" (didn't actually build)
66
+ - ❌ "Build was working earlier" (stale verification)
67
+
68
+ **Common Gotchas:**
69
+ - Linter passing ≠ compilation passing
70
+ - TypeScript errors ≠ build errors
71
+ - Local build ≠ CI build
72
+ - Dev build ≠ production build
73
+
74
+ ## Linter Verification
75
+
76
+ **Correct Pattern:**
77
+ ```
78
+ 1. Run linter: ruff check .
79
+ 2. Read full output
80
+ 3. Count violations: 0 errors, 0 warnings
81
+ 4. Check exit code: 0
82
+ 5. Claim: "Linter clean (0 violations)"
83
+ ```
84
+
85
+ **Incorrect Patterns:**
86
+ - ❌ "Fixed the obvious issues" (partial check)
87
+ - ❌ "Linter passed on one file" (not comprehensive)
88
+ - ❌ "Should be clean now" (no verification)
89
+
90
+ ## Bug Fix Verification
91
+
92
+ **Correct Pattern:**
93
+ ```
94
+ 1. Document original symptom
95
+ 2. Create reproduction steps
96
+ 3. Run reproduction → FAILS (confirms bug)
97
+ 4. Implement fix
98
+ 5. Run reproduction → PASSES
99
+ 6. Run full test suite → PASSES (no regressions)
100
+ 7. Claim: "Bug fixed, verified with reproduction and tests"
101
+ ```
102
+
103
+ **Incorrect Patterns:**
104
+ - ❌ "Code changed, bug should be fixed" (assumes)
105
+ - ❌ "Logic looks correct" (theory, not evidence)
106
+ - ❌ "Can't reproduce anymore" (didn't verify with test)
107
+
108
+ ## Requirements Verification
109
+
110
+ **Correct Pattern:**
111
+ ```
112
+ 1. Re-read original requirements
113
+ 2. Create line-by-line checklist
114
+ 3. Verify each requirement individually
115
+ 4. Document evidence for each
116
+ 5. Report: "5/5 requirements met" OR "4/5 met, missing X"
117
+ ```
118
+
119
+ **Incorrect Patterns:**
120
+ - ❌ "Tests pass, so requirements met" (tests ≠ requirements)
121
+ - ❌ "I implemented what was asked" (subjective)
122
+ - ❌ "Phase complete" (vague, no checklist)
123
+
124
+ ## Agent Delegation Verification
125
+
126
+ **Correct Pattern:**
127
+ ```
128
+ 1. Agent reports: "Task complete"
129
+ 2. Check version control diff: git diff
130
+ 3. Read all changes made
131
+ 4. Verify changes match task requirements
132
+ 5. Run verification commands (tests, build, etc.)
133
+ 6. Report actual state: "Agent made changes to X, Y verified"
134
+ ```
135
+
136
+ **Incorrect Patterns:**
137
+ - ❌ Trusting agent success report
138
+ - ❌ "Agent said success, moving on"
139
+ - ❌ Not checking actual changes made
140
+
141
+ ## Deployment Verification
142
+
143
+ **Correct Pattern:**
144
+ ```
145
+ 1. Deploy to environment
146
+ 2. Check deployment logs: SUCCESS
147
+ 3. Verify endpoint accessible: curl https://...
148
+ 4. Check application logs: No errors
149
+ 5. Run smoke tests on deployed version
150
+ 6. Claim: "Deployed successfully, endpoint responding"
151
+ ```
152
+
153
+ **Incorrect Patterns:**
154
+ - ❌ "Deployment command succeeded" (didn't check endpoint)
155
+ - ❌ "Should be live now" (no verification)
156
+ - ❌ "Deployed to staging" (didn't verify it works)
157
+
158
+ ## Performance Verification
159
+
160
+ **Correct Pattern:**
161
+ ```
162
+ 1. Run performance benchmark
163
+ 2. Record baseline: 150ms average
164
+ 3. Implement optimization
165
+ 4. Run benchmark again
166
+ 5. Record new measurement: 45ms average
167
+ 6. Calculate improvement: 70% faster
168
+ 7. Run multiple times to confirm consistency
169
+ 8. Claim: "Performance improved 70% (150ms → 45ms, 10 runs)"
170
+ ```
171
+
172
+ **Incorrect Patterns:**
173
+ - ❌ "Should be faster now" (no measurement)
174
+ - ❌ "Looks quicker" (subjective)
175
+ - ❌ Single measurement (could be outlier)
176
+
177
+ ## Security Verification
178
+
179
+ **Correct Pattern:**
180
+ ```
181
+ 1. Run security scanner: bandit -r .
182
+ 2. Read full report
183
+ 3. Review each finding
184
+ 4. Document: "3 high, 2 medium, 5 low"
185
+ 5. Address critical issues
186
+ 6. Re-run scanner
187
+ 7. Claim: "Security scan: 0 high, 0 medium, 5 low (accepted)"
188
+ ```
189
+
190
+ **Incorrect Patterns:**
191
+ - ❌ "Looks secure" (no scan)
192
+ - ❌ "No obvious vulnerabilities" (didn't scan)
193
+ - ❌ "Should be safe" (assumption)
194
+
195
+ ## Documentation Verification
196
+
197
+ **Correct Pattern:**
198
+ ```
199
+ 1. Write documentation
200
+ 2. Have someone else read it
201
+ 3. Ask them to follow steps
202
+ 4. Observe if they succeed without questions
203
+ 5. Fix confusing parts
204
+ 6. Repeat until successful
205
+ 7. Claim: "Documentation verified with fresh user"
206
+ ```
207
+
208
+ **Incorrect Patterns:**
209
+ - ❌ "Documentation complete" (not tested)
210
+ - ❌ "Clear to me" (author bias)
211
+ - ❌ "Should be understandable" (no verification)
212
+
213
+ ## The Universal Pattern
214
+
215
+ All verification follows this structure:
216
+
217
+ ```
218
+ 1. IDENTIFY: What proves this claim?
219
+ 2. RUN: Execute the full verification command
220
+ 3. READ: Complete output, not just summary
221
+ 4. ANALYZE: Does evidence support claim?
222
+ 5. DECIDE:
223
+ - If YES: Claim with evidence
224
+ - If NO: Report actual state with evidence
225
+ ```
226
+
227
+ **Never skip steps. Never assume. Always verify.**
@@ -0,0 +1,194 @@
1
+ ---
2
+ skill_id: docker-containerization
3
+ skill_version: 0.1.0
4
+ description: Essential Docker patterns for containerizing applications.
5
+ updated_at: 2025-10-30T17:00:00Z
6
+ tags: [docker, containers, deployment, devops]
7
+ ---
8
+
9
+ # Docker Containerization
10
+
11
+ Essential Docker patterns for containerizing applications.
12
+
13
+ ## Basic Dockerfile Structure
14
+
15
+ ```dockerfile
16
+ # Use official base image
17
+ FROM python:3.11-slim
18
+
19
+ # Set working directory
20
+ WORKDIR /app
21
+
22
+ # Copy dependency files first (better caching)
23
+ COPY requirements.txt .
24
+
25
+ # Install dependencies
26
+ RUN pip install --no-cache-dir -r requirements.txt
27
+
28
+ # Copy application code
29
+ COPY . .
30
+
31
+ # Expose port
32
+ EXPOSE 8000
33
+
34
+ # Run application
35
+ CMD ["python", "app.py"]
36
+ ```
37
+
38
+ ## Multi-Stage Builds
39
+
40
+ ```dockerfile
41
+ # Build stage
42
+ FROM node:18 AS builder
43
+ WORKDIR /app
44
+ COPY package*.json ./
45
+ RUN npm ci
46
+ COPY . .
47
+ RUN npm run build
48
+
49
+ # Production stage
50
+ FROM node:18-slim
51
+ WORKDIR /app
52
+ COPY --from=builder /app/dist ./dist
53
+ COPY package*.json ./
54
+ RUN npm ci --only=production
55
+ EXPOSE 3000
56
+ CMD ["node", "dist/server.js"]
57
+ ```
58
+
59
+ ## Docker Compose
60
+
61
+ ```yaml
62
+ version: '3.8'
63
+
64
+ services:
65
+ web:
66
+ build: .
67
+ ports:
68
+ - "8000:8000"
69
+ environment:
70
+ - DATABASE_URL=postgresql://db:5432/myapp
71
+ depends_on:
72
+ - db
73
+ volumes:
74
+ - ./src:/app/src # Hot reload in dev
75
+
76
+ db:
77
+ image: postgres:15
78
+ environment:
79
+ - POSTGRES_DB=myapp
80
+ - POSTGRES_PASSWORD=secret
81
+ volumes:
82
+ - postgres_data:/var/lib/postgresql/data
83
+
84
+ volumes:
85
+ postgres_data:
86
+ ```
87
+
88
+ ## Best Practices
89
+
90
+ ### ✅ DO
91
+ ```dockerfile
92
+ # Use specific versions
93
+ FROM python:3.11-slim
94
+
95
+ # Non-root user
96
+ RUN useradd -m appuser
97
+ USER appuser
98
+
99
+ # Layer caching
100
+ COPY requirements.txt .
101
+ RUN pip install -r requirements.txt
102
+ COPY . .
103
+
104
+ # Health check
105
+ HEALTHCHECK --interval=30s CMD curl -f http://localhost:8000/health || exit 1
106
+ ```
107
+
108
+ ### ❌ DON'T
109
+ ```dockerfile
110
+ # Avoid latest tag
111
+ FROM python:latest
112
+
113
+ # Avoid running as root
114
+ USER root
115
+
116
+ # Don't copy unnecessary files
117
+ COPY . . # Includes .git, node_modules, etc.
118
+
119
+ # Use .dockerignore instead
120
+ ```
121
+
122
+ ## .dockerignore
123
+
124
+ ```
125
+ .git
126
+ .gitignore
127
+ node_modules
128
+ __pycache__
129
+ *.pyc
130
+ .env
131
+ .vscode
132
+ README.md
133
+ docker-compose.yml
134
+ ```
135
+
136
+ ## Common Commands
137
+
138
+ ```bash
139
+ # Build image
140
+ docker build -t myapp:1.0 .
141
+
142
+ # Run container
143
+ docker run -p 8000:8000 myapp:1.0
144
+
145
+ # Run with environment variables
146
+ docker run -e DATABASE_URL=postgresql://... myapp:1.0
147
+
148
+ # Interactive shell
149
+ docker run -it myapp:1.0 /bin/bash
150
+
151
+ # View logs
152
+ docker logs container_id
153
+
154
+ # Stop container
155
+ docker stop container_id
156
+
157
+ # Remove container
158
+ docker rm container_id
159
+
160
+ # Remove image
161
+ docker rmi myapp:1.0
162
+
163
+ # Prune unused resources
164
+ docker system prune -a
165
+ ```
166
+
167
+ ## Docker Compose Commands
168
+
169
+ ```bash
170
+ # Start services
171
+ docker-compose up
172
+
173
+ # Start in background
174
+ docker-compose up -d
175
+
176
+ # View logs
177
+ docker-compose logs -f
178
+
179
+ # Stop services
180
+ docker-compose down
181
+
182
+ # Rebuild
183
+ docker-compose build
184
+
185
+ # Run command in service
186
+ docker-compose exec web python manage.py migrate
187
+ ```
188
+
189
+ ## Remember
190
+ - Keep images small (use slim/alpine variants)
191
+ - Use specific version tags
192
+ - Leverage layer caching
193
+ - Don't include secrets in images
194
+ - Use .dockerignore to exclude files