mdan-cli 2.2.0
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.
- package/README.md +223 -0
- package/agents/AGENTS-REGISTRY.md +215 -0
- package/agents/architect.md +160 -0
- package/agents/dev.md +166 -0
- package/agents/devops.md +230 -0
- package/agents/doc.md +189 -0
- package/agents/learn.md +377 -0
- package/agents/product.md +124 -0
- package/agents/security.md +168 -0
- package/agents/test.md +151 -0
- package/agents/ux.md +207 -0
- package/cli/mdan.js +505 -0
- package/cli/mdan.py +259 -0
- package/cli/mdan.sh +724 -0
- package/cli/postinstall.js +4 -0
- package/core/orchestrator.md +238 -0
- package/core/universal-envelope.md +160 -0
- package/install.sh +228 -0
- package/integrations/all-integrations.md +300 -0
- package/integrations/claude.md +46 -0
- package/integrations/cursor.md +74 -0
- package/integrations/windsurf.md +48 -0
- package/memory/MDAN-STATE.template.json +44 -0
- package/memory/MEMORY-SYSTEM.md +197 -0
- package/package.json +48 -0
- package/phases/01-discover.md +136 -0
- package/phases/02-design.md +147 -0
- package/phases/03-build.md +113 -0
- package/phases/04-verify.md +101 -0
- package/phases/05-ship.md +156 -0
- package/skills/find-skills/skill.md +133 -0
- package/templates/ARCHITECTURE.md +186 -0
- package/templates/CHANGELOG.md +41 -0
- package/templates/MDAN-KNOWLEDGE.md +73 -0
- package/templates/PRD.md +120 -0
- package/templates/SECURITY-REVIEW.md +99 -0
- package/templates/TEST-PLAN.md +97 -0
package/cli/mdan.sh
ADDED
|
@@ -0,0 +1,724 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# ============================================================
|
|
4
|
+
# MDAN CLI — Command Line Interface
|
|
5
|
+
# Multi-Agent Development Agentic Network
|
|
6
|
+
# ============================================================
|
|
7
|
+
|
|
8
|
+
VERSION="2.2.0"
|
|
9
|
+
MDAN_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
10
|
+
|
|
11
|
+
# Colors
|
|
12
|
+
RED='\033[0;31m'
|
|
13
|
+
GREEN='\033[0;32m'
|
|
14
|
+
YELLOW='\033[1;33m'
|
|
15
|
+
BLUE='\033[0;34m'
|
|
16
|
+
CYAN='\033[0;36m'
|
|
17
|
+
MAGENTA='\033[0;35m'
|
|
18
|
+
BOLD='\033[1m'
|
|
19
|
+
NC='\033[0m' # No Color
|
|
20
|
+
|
|
21
|
+
# ============================================================
|
|
22
|
+
# BANNER
|
|
23
|
+
# ============================================================
|
|
24
|
+
|
|
25
|
+
banner() {
|
|
26
|
+
echo -e "${CYAN}"
|
|
27
|
+
echo " ███╗ ███╗██████╗ █████╗ ███╗ ██╗"
|
|
28
|
+
echo " ████╗ ████║██╔══██╗██╔══██╗████╗ ██║"
|
|
29
|
+
echo " ██╔████╔██║██║ ██║███████║██╔██╗ ██║"
|
|
30
|
+
echo " ██║╚██╔╝██║██║ ██║██╔══██║██║╚██╗██║"
|
|
31
|
+
echo " ██║ ╚═╝ ██║██████╔╝██║ ██║██║ ╚████║"
|
|
32
|
+
echo " ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝"
|
|
33
|
+
echo -e "${NC}"
|
|
34
|
+
echo -e " ${BOLD}Multi-Agent Development Agentic Network${NC} v${VERSION}"
|
|
35
|
+
echo ""
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
# ============================================================
|
|
39
|
+
# HELP
|
|
40
|
+
# ============================================================
|
|
41
|
+
|
|
42
|
+
show_help() {
|
|
43
|
+
banner
|
|
44
|
+
echo -e "${BOLD}USAGE${NC}"
|
|
45
|
+
echo " mdan <command> [options]"
|
|
46
|
+
echo ""
|
|
47
|
+
echo -e "${BOLD}COMMANDS${NC}"
|
|
48
|
+
echo " init [project-name] Create a new MDAN project"
|
|
49
|
+
echo " attach [--rebuild] Add MDAN to existing project"
|
|
50
|
+
echo " --rebuild: prepare for full rewrite"
|
|
51
|
+
echo " learn [--skill|--mcp|...] Learn & distribute knowledge"
|
|
52
|
+
echo " skills List available skills"
|
|
53
|
+
echo " skill add <source> Install a new skill"
|
|
54
|
+
echo " phase [1-5] Show phase guide"
|
|
55
|
+
echo " agent [name] Show agent prompt"
|
|
56
|
+
echo " template [name] Show or copy a template"
|
|
57
|
+
echo " prompt [llm] Show setup instructions for an LLM"
|
|
58
|
+
echo " oc Copy orchestrator prompt to clipboard"
|
|
59
|
+
|
|
60
|
+
echo " status Show current project status"
|
|
61
|
+
echo " list List all agents and templates"
|
|
62
|
+
echo " version Show version"
|
|
63
|
+
echo ""
|
|
64
|
+
echo -e "${BOLD}EXAMPLES${NC}"
|
|
65
|
+
echo " mdan init my-saas # Create new project"
|
|
66
|
+
echo " cd existing && mdan attach # Add MDAN to existing project"
|
|
67
|
+
echo " cd existing && mdan attach --rebuild # Prepare for full rewrite"
|
|
68
|
+
echo " mdan phase 1 # Show DISCOVER guide"
|
|
69
|
+
echo " mdan skill add vercel-labs/skills --skill find-skills"
|
|
70
|
+
echo ""
|
|
71
|
+
echo -e "${BOLD}AGENTS${NC}"
|
|
72
|
+
echo " product, architect, ux, dev, test, security, devops, doc"
|
|
73
|
+
echo ""
|
|
74
|
+
echo -e "${BOLD}LLMS / TOOLS${NC}"
|
|
75
|
+
echo " claude, chatgpt, gemini, qwen, kimi, glm, minimax, opencode, cursor, windsurf, copilot"
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
# ============================================================
|
|
79
|
+
# LEARN
|
|
80
|
+
# ============================================================
|
|
81
|
+
|
|
82
|
+
cmd_learn() {
|
|
83
|
+
SUBCOMMAND="${1}"
|
|
84
|
+
shift
|
|
85
|
+
|
|
86
|
+
case "${SUBCOMMAND}" in
|
|
87
|
+
--skill|--rules|--url)
|
|
88
|
+
SOURCE="${1}"
|
|
89
|
+
echo -e "${CYAN}🧠 Learn Agent — Ingesting: ${BOLD}${SOURCE}${NC}"
|
|
90
|
+
echo ""
|
|
91
|
+
echo -e "Copy this activation prompt into your LLM:\n"
|
|
92
|
+
echo "---"
|
|
93
|
+
echo "[ACTIVATING: Learn Agent v2.0.0]"
|
|
94
|
+
echo "Task: Learn and distribute the following source."
|
|
95
|
+
echo "Source type: ${SUBCOMMAND/--/}"
|
|
96
|
+
echo "Source: ${SOURCE}"
|
|
97
|
+
echo "Distribute to: auto-detect"
|
|
98
|
+
echo "---"
|
|
99
|
+
;;
|
|
100
|
+
--mcp)
|
|
101
|
+
MCP_NAME="${1}"
|
|
102
|
+
echo -e "${CYAN}🔌 Learn Agent — MCP: ${BOLD}${MCP_NAME}${NC}"
|
|
103
|
+
echo ""
|
|
104
|
+
echo "Copy this activation prompt into your LLM:"
|
|
105
|
+
echo "---"
|
|
106
|
+
echo "[ACTIVATING: Learn Agent v2.0.0]"
|
|
107
|
+
echo "Task: Learn the ${MCP_NAME} MCP server and distribute tools to relevant agents."
|
|
108
|
+
echo "Source type: mcp"
|
|
109
|
+
echo "Source: ${MCP_NAME}"
|
|
110
|
+
echo "---"
|
|
111
|
+
;;
|
|
112
|
+
--list)
|
|
113
|
+
KNOWLEDGE_FILE=".mdan/MDAN-KNOWLEDGE.md"
|
|
114
|
+
if [[ -f "${KNOWLEDGE_FILE}" ]]; then
|
|
115
|
+
cat "${KNOWLEDGE_FILE}"
|
|
116
|
+
else
|
|
117
|
+
echo -e "${YELLOW}No knowledge file found. Run: mdan learn --skill <file>${NC}"
|
|
118
|
+
fi
|
|
119
|
+
;;
|
|
120
|
+
--capsule)
|
|
121
|
+
AGENT="${1}"
|
|
122
|
+
echo -e "${CYAN}Capsule for agent: ${BOLD}${AGENT}${NC}"
|
|
123
|
+
KNOWLEDGE_FILE=".mdan/MDAN-KNOWLEDGE.md"
|
|
124
|
+
if [[ -f "${KNOWLEDGE_FILE}" ]]; then
|
|
125
|
+
grep -A 20 "### ${AGENT^} Agent" "${KNOWLEDGE_FILE}" | head -25
|
|
126
|
+
else
|
|
127
|
+
echo -e "${YELLOW}No knowledge file. Run mdan learn first.${NC}"
|
|
128
|
+
fi
|
|
129
|
+
;;
|
|
130
|
+
*)
|
|
131
|
+
echo "Usage: mdan learn [--skill|--rules|--mcp|--url|--list|--capsule] [value]"
|
|
132
|
+
echo ""
|
|
133
|
+
echo " mdan learn --skill ./docs/conventions.md"
|
|
134
|
+
echo " mdan learn --mcp github"
|
|
135
|
+
echo " mdan learn --rules .cursorrules"
|
|
136
|
+
echo " mdan learn --list"
|
|
137
|
+
echo " mdan learn --capsule dev"
|
|
138
|
+
;;
|
|
139
|
+
esac
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
# ============================================================
|
|
143
|
+
# SKILLS
|
|
144
|
+
# ============================================================
|
|
145
|
+
|
|
146
|
+
cmd_skills() {
|
|
147
|
+
SKILLS_DIR="${MDAN_DIR}/skills"
|
|
148
|
+
|
|
149
|
+
if [[ -d "${SKILLS_DIR}" ]]; then
|
|
150
|
+
echo -e "${CYAN}${BOLD}Available Skills{NC}"
|
|
151
|
+
echo ""
|
|
152
|
+
for skill_dir in "${SKILLS_DIR}"/*/; do
|
|
153
|
+
if [[ -d "${skill_dir}" ]]; then
|
|
154
|
+
skill_name=$(basename "${skill_dir}")
|
|
155
|
+
skill_file="${skill_dir}skill.md"
|
|
156
|
+
if [[ -f "${skill_file}" ]]; then
|
|
157
|
+
description=$(grep -A1 "^description:" "${skill_file}" 2>/dev/null | tail -1 | sed 's/^description: //')
|
|
158
|
+
echo -e " ${GREEN}●${NC} ${BOLD}${skill_name}${NC}"
|
|
159
|
+
echo " ${description}"
|
|
160
|
+
echo ""
|
|
161
|
+
else
|
|
162
|
+
echo -e " ${GREEN}●${NC} ${BOLD}${skill_name}${NC}"
|
|
163
|
+
echo ""
|
|
164
|
+
fi
|
|
165
|
+
fi
|
|
166
|
+
done
|
|
167
|
+
else
|
|
168
|
+
echo -e "${YELLOW}No skills installed.${NC}"
|
|
169
|
+
fi
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
cmd_skill_add() {
|
|
173
|
+
SOURCE="${1}"
|
|
174
|
+
shift
|
|
175
|
+
|
|
176
|
+
echo -e "${CYAN}📦 Installing skill from: ${BOLD}${SOURCE}${NC}"
|
|
177
|
+
echo ""
|
|
178
|
+
|
|
179
|
+
npx skills add "${SOURCE}" "$@" --yes
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
# ============================================================
|
|
183
|
+
# ATTACH (Add MDAN to existing project)
|
|
184
|
+
# ============================================================
|
|
185
|
+
|
|
186
|
+
cmd_attach() {
|
|
187
|
+
REBUILD_MODE=false
|
|
188
|
+
|
|
189
|
+
# Check for --rebuild flag
|
|
190
|
+
if [[ "${1}" == "--rebuild" ]]; then
|
|
191
|
+
REBUILD_MODE=true
|
|
192
|
+
fi
|
|
193
|
+
|
|
194
|
+
# Check if we're in a project directory
|
|
195
|
+
if [[ ! -f "package.json" && ! -f "requirements.txt" && ! -f "go.mod" && ! -f "Cargo.toml" && ! -f "pom.xml" && ! -f "build.gradle" && ! -f "composer.json" && ! -d ".git" ]]; then
|
|
196
|
+
echo -e "${YELLOW}⚠️ Warning: This doesn't look like a project directory.${NC}"
|
|
197
|
+
echo " No package.json, requirements.txt, or other project files found."
|
|
198
|
+
echo ""
|
|
199
|
+
read -p " Continue anyway? (y/n) " -n 1 -r
|
|
200
|
+
echo
|
|
201
|
+
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
202
|
+
exit 1
|
|
203
|
+
fi
|
|
204
|
+
fi
|
|
205
|
+
|
|
206
|
+
PROJECT_NAME=$(basename "$PWD")
|
|
207
|
+
|
|
208
|
+
if [[ "$REBUILD_MODE" == true ]]; then
|
|
209
|
+
echo -e "${MAGENTA}🔄 Attaching MDAN with REBUILD mode: ${BOLD}${PROJECT_NAME}${NC}"
|
|
210
|
+
echo ""
|
|
211
|
+
echo -e "${YELLOW}This will prepare MDAN to rewrite the entire project from scratch.${NC}"
|
|
212
|
+
echo ""
|
|
213
|
+
else
|
|
214
|
+
echo -e "${CYAN}🔗 Attaching MDAN to: ${BOLD}${PROJECT_NAME}${NC}"
|
|
215
|
+
echo ""
|
|
216
|
+
fi
|
|
217
|
+
|
|
218
|
+
# Check if .mdan already exists
|
|
219
|
+
if [[ -d ".mdan" ]]; then
|
|
220
|
+
echo -e "${YELLOW}⚠️ .mdan folder already exists.${NC}"
|
|
221
|
+
read -p " Overwrite? (y/n) " -n 1 -r
|
|
222
|
+
echo
|
|
223
|
+
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
224
|
+
echo " Keeping existing .mdan folder."
|
|
225
|
+
else
|
|
226
|
+
rm -rf .mdan
|
|
227
|
+
fi
|
|
228
|
+
fi
|
|
229
|
+
|
|
230
|
+
# Create .mdan directory structure
|
|
231
|
+
mkdir -p .mdan/agents
|
|
232
|
+
mkdir -p .mdan/artifacts
|
|
233
|
+
mkdir -p .mdan/skills
|
|
234
|
+
|
|
235
|
+
# Copy core files
|
|
236
|
+
cp "${MDAN_DIR}/core/orchestrator.md" .mdan/orchestrator.md
|
|
237
|
+
cp "${MDAN_DIR}/core/universal-envelope.md" .mdan/universal-envelope.md
|
|
238
|
+
|
|
239
|
+
# Copy all agents
|
|
240
|
+
cp "${MDAN_DIR}/agents/"*.md .mdan/agents/
|
|
241
|
+
|
|
242
|
+
# Copy skills if available
|
|
243
|
+
if [[ -d "${MDAN_DIR}/skills" ]]; then
|
|
244
|
+
cp -r "${MDAN_DIR}/skills/"* .mdan/skills/ 2>/dev/null
|
|
245
|
+
fi
|
|
246
|
+
|
|
247
|
+
# Create .cursorrules
|
|
248
|
+
cat "${MDAN_DIR}/core/orchestrator.md" > .cursorrules
|
|
249
|
+
echo "" >> .cursorrules
|
|
250
|
+
echo "## CURSOR INSTRUCTIONS" >> .cursorrules
|
|
251
|
+
echo "Agent files are in .mdan/agents/. Reference them with @file when activating agents." >> .cursorrules
|
|
252
|
+
echo "Skills are in .mdan/skills/. Reference them for extended capabilities." >> .cursorrules
|
|
253
|
+
echo "" >> .cursorrules
|
|
254
|
+
|
|
255
|
+
if [[ "$REBUILD_MODE" == true ]]; then
|
|
256
|
+
echo "## PROJECT CONTEXT" >> .cursorrules
|
|
257
|
+
echo "This is an existing project that will be REWRITTEN FROM SCRATCH." >> .cursorrules
|
|
258
|
+
echo "MDAN must first analyze all features, then rebuild everything." >> .cursorrules
|
|
259
|
+
echo "" >> .cursorrules
|
|
260
|
+
echo "## REBUILD MODE ACTIVE" >> .cursorrules
|
|
261
|
+
echo "1. DISCOVER: Analyze ALL features of existing codebase" >> .cursorrules
|
|
262
|
+
echo "2. DESIGN: Propose NEW modern architecture" >> .cursorrules
|
|
263
|
+
echo "3. BUILD: Rewrite everything from scratch" >> .cursorrules
|
|
264
|
+
echo "4. VERIFY: Full test coverage" >> .cursorrules
|
|
265
|
+
echo "5. SHIP: Complete documentation" >> .cursorrules
|
|
266
|
+
else
|
|
267
|
+
echo "## PROJECT CONTEXT" >> .cursorrules
|
|
268
|
+
echo "This is an existing project. MDAN should analyze the codebase before making changes." >> .cursorrules
|
|
269
|
+
fi
|
|
270
|
+
|
|
271
|
+
# Create .windsurfrules
|
|
272
|
+
cp .cursorrules .windsurfrules
|
|
273
|
+
|
|
274
|
+
# Create .claude/skills for Claude Code
|
|
275
|
+
mkdir -p .claude/skills
|
|
276
|
+
if [[ -d "${MDAN_DIR}/skills" ]]; then
|
|
277
|
+
cp -r "${MDAN_DIR}/skills/"* .claude/skills/ 2>/dev/null
|
|
278
|
+
fi
|
|
279
|
+
|
|
280
|
+
# Create GitHub Copilot instructions
|
|
281
|
+
mkdir -p .github
|
|
282
|
+
cp "${MDAN_DIR}/core/orchestrator.md" .github/copilot-instructions.md
|
|
283
|
+
|
|
284
|
+
# Create MDAN-STATE.json
|
|
285
|
+
if [[ "$REBUILD_MODE" == true ]]; then
|
|
286
|
+
cat > .mdan/MDAN-STATE.json << EOF
|
|
287
|
+
{
|
|
288
|
+
"user": {
|
|
289
|
+
"name": null
|
|
290
|
+
},
|
|
291
|
+
"project": {
|
|
292
|
+
"name": "${PROJECT_NAME}",
|
|
293
|
+
"type": "existing",
|
|
294
|
+
"mode": "REBUILD",
|
|
295
|
+
"profile": "STANDARD",
|
|
296
|
+
"started": "$(date +%Y-%m-%d)",
|
|
297
|
+
"last_updated": "$(date +%Y-%m-%dT%H:%M:%S)"
|
|
298
|
+
},
|
|
299
|
+
"phase": {
|
|
300
|
+
"current": "DISCOVER",
|
|
301
|
+
"status": "analyzing_for_rebuild"
|
|
302
|
+
},
|
|
303
|
+
"features": [],
|
|
304
|
+
"artifacts": {
|
|
305
|
+
"prd": null,
|
|
306
|
+
"architecture": null,
|
|
307
|
+
"ux_spec": null,
|
|
308
|
+
"test_plan": null,
|
|
309
|
+
"security_review": null
|
|
310
|
+
},
|
|
311
|
+
"agents_used": {},
|
|
312
|
+
"notes": "REBUILD MODE: MDAN will analyze existing codebase and rewrite from scratch."
|
|
313
|
+
}
|
|
314
|
+
EOF
|
|
315
|
+
else
|
|
316
|
+
cat > .mdan/MDAN-STATE.json << EOF
|
|
317
|
+
{
|
|
318
|
+
"user": {
|
|
319
|
+
"name": null
|
|
320
|
+
},
|
|
321
|
+
"project": {
|
|
322
|
+
"name": "${PROJECT_NAME}",
|
|
323
|
+
"type": "existing",
|
|
324
|
+
"profile": "STANDARD",
|
|
325
|
+
"started": "$(date +%Y-%m-%d)",
|
|
326
|
+
"last_updated": "$(date +%Y-%m-%dT%H:%M:%S)"
|
|
327
|
+
},
|
|
328
|
+
"phase": {
|
|
329
|
+
"current": "DISCOVER",
|
|
330
|
+
"status": "analyzing_existing_codebase"
|
|
331
|
+
},
|
|
332
|
+
"features": [],
|
|
333
|
+
"artifacts": {
|
|
334
|
+
"prd": null,
|
|
335
|
+
"architecture": null,
|
|
336
|
+
"ux_spec": null,
|
|
337
|
+
"test_plan": null,
|
|
338
|
+
"security_review": null
|
|
339
|
+
},
|
|
340
|
+
"agents_used": {},
|
|
341
|
+
"notes": "MDAN attached to existing project. Start with DISCOVER phase to analyze the codebase."
|
|
342
|
+
}
|
|
343
|
+
EOF
|
|
344
|
+
fi
|
|
345
|
+
|
|
346
|
+
# Create STATUS.md
|
|
347
|
+
if [[ "$REBUILD_MODE" == true ]]; then
|
|
348
|
+
cat > .mdan/STATUS.md << EOF
|
|
349
|
+
# MDAN Project Status — REBUILD MODE
|
|
350
|
+
|
|
351
|
+
**Project:** ${PROJECT_NAME}
|
|
352
|
+
**Started:** $(date +%Y-%m-%d)
|
|
353
|
+
**Mode:** 🔄 REBUILD FROM SCRATCH
|
|
354
|
+
**Current Phase:** 1 — DISCOVER (Analyzing existing codebase)
|
|
355
|
+
|
|
356
|
+
## 🎯 Objective
|
|
357
|
+
Rewrite the entire project from scratch with a modern architecture.
|
|
358
|
+
|
|
359
|
+
## Phase Progress
|
|
360
|
+
- [ ] Phase 1: DISCOVER — Analyze ALL features of existing codebase
|
|
361
|
+
- [ ] Phase 2: DESIGN — New modern architecture validated
|
|
362
|
+
- [ ] Phase 3: BUILD — Rewrite everything from scratch
|
|
363
|
+
- [ ] Phase 4: VERIFY — 100% test coverage
|
|
364
|
+
- [ ] Phase 5: SHIP — Complete documentation
|
|
365
|
+
|
|
366
|
+
## What MDAN Will Do
|
|
367
|
+
1. **DISCOVER**: Deep analysis of existing code to understand ALL features
|
|
368
|
+
2. **DESIGN**: Propose a completely new, modern architecture
|
|
369
|
+
3. **BUILD**: Implement everything fresh (no code reuse)
|
|
370
|
+
4. **VERIFY**: Write comprehensive tests
|
|
371
|
+
5. **SHIP**: Generate full documentation
|
|
372
|
+
|
|
373
|
+
## Commands to Start
|
|
374
|
+
1. Open this folder in Cursor/Windsurf
|
|
375
|
+
2. Start with: "MDAN REBUILD: Begin DISCOVER phase. Analyze this entire codebase."
|
|
376
|
+
EOF
|
|
377
|
+
else
|
|
378
|
+
cat > .mdan/STATUS.md << EOF
|
|
379
|
+
# MDAN Project Status
|
|
380
|
+
|
|
381
|
+
**Project:** ${PROJECT_NAME} (existing)
|
|
382
|
+
**Started:** $(date +%Y-%m-%d)
|
|
383
|
+
**Current Phase:** 1 — DISCOVER (Analyzing existing codebase)
|
|
384
|
+
|
|
385
|
+
## Phase Progress
|
|
386
|
+
- [ ] Phase 1: DISCOVER — Analyze existing codebase & define improvements
|
|
387
|
+
- [ ] Phase 2: DESIGN — Architecture changes validated
|
|
388
|
+
- [ ] Phase 3: BUILD — Features implemented
|
|
389
|
+
- [ ] Phase 4: VERIFY — Tests passing, security reviewed
|
|
390
|
+
- [ ] Phase 5: SHIP — Deployed and documented
|
|
391
|
+
|
|
392
|
+
## Existing Project Notes
|
|
393
|
+
- MDAN attached on $(date +%Y-%m-%d)
|
|
394
|
+
- Start by analyzing the current codebase structure
|
|
395
|
+
- Identify what needs to be built/improved
|
|
396
|
+
|
|
397
|
+
## Commands to Start
|
|
398
|
+
1. Open Claude/Cursor with this project
|
|
399
|
+
2. Paste .mdan/orchestrator.md as system prompt
|
|
400
|
+
3. Start with: "MDAN: Analyze this existing project and help me [goal]"
|
|
401
|
+
EOF
|
|
402
|
+
fi
|
|
403
|
+
|
|
404
|
+
echo -e "${GREEN}✅ MDAN attached to ${PROJECT_NAME}!${NC}"
|
|
405
|
+
echo ""
|
|
406
|
+
echo -e " ${BOLD}MDAN files:${NC} .mdan/"
|
|
407
|
+
echo -e " ${BOLD}Agents:${NC} .mdan/agents/"
|
|
408
|
+
echo -e " ${BOLD}Skills:${NC} .mdan/skills/"
|
|
409
|
+
echo -e " ${BOLD}State:${NC} .mdan/MDAN-STATE.json"
|
|
410
|
+
echo ""
|
|
411
|
+
|
|
412
|
+
if [[ "$REBUILD_MODE" == true ]]; then
|
|
413
|
+
echo -e "${MAGENTA}${BOLD}🔄 REBUILD MODE ACTIVATED${NC}"
|
|
414
|
+
echo ""
|
|
415
|
+
echo -e "${YELLOW}MDAN will rewrite the entire project from scratch.${NC}"
|
|
416
|
+
echo ""
|
|
417
|
+
echo " ${BOLD}Next steps:${NC}"
|
|
418
|
+
echo ""
|
|
419
|
+
echo " 1. Open this folder in Cursor/Windsurf"
|
|
420
|
+
echo " 2. Start with this prompt:"
|
|
421
|
+
echo ""
|
|
422
|
+
echo -e " ${CYAN}MDAN REBUILD: Begin DISCOVER phase."
|
|
423
|
+
echo " Analyze this entire codebase and document ALL features."
|
|
424
|
+
echo " Then propose a modern architecture to rebuild from scratch.${NC}"
|
|
425
|
+
else
|
|
426
|
+
echo -e "${YELLOW}Next steps:${NC}"
|
|
427
|
+
echo ""
|
|
428
|
+
echo " ${BOLD}Option 1 — Cursor/Windsurf:${NC}"
|
|
429
|
+
echo " Just open this folder in your IDE and start chatting."
|
|
430
|
+
echo ""
|
|
431
|
+
echo " ${BOLD}Option 2 — Claude (Web) / ChatGPT:${NC}"
|
|
432
|
+
echo " 1. Run ${CYAN}mdan oc${NC} to copy the orchestrator prompt to clipboard"
|
|
433
|
+
echo " 2. Paste as system prompt (or first message)"
|
|
434
|
+
echo " 3. Start with: 'MDAN: Analyze this existing project...'"
|
|
435
|
+
fi
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
# ============================================================
|
|
439
|
+
# INIT
|
|
440
|
+
# ============================================================
|
|
441
|
+
|
|
442
|
+
cmd_init() {
|
|
443
|
+
PROJECT_NAME="${1:-my-project}"
|
|
444
|
+
|
|
445
|
+
echo -e "${CYAN}🚀 Initializing MDAN project: ${BOLD}${PROJECT_NAME}${NC}"
|
|
446
|
+
echo ""
|
|
447
|
+
|
|
448
|
+
# Create .mdan directory structure
|
|
449
|
+
mkdir -p "${PROJECT_NAME}/.mdan/agents"
|
|
450
|
+
mkdir -p "${PROJECT_NAME}/.mdan/artifacts"
|
|
451
|
+
mkdir -p "${PROJECT_NAME}/.mdan/skills"
|
|
452
|
+
mkdir -p "${PROJECT_NAME}/mdan_output"
|
|
453
|
+
|
|
454
|
+
# Copy core files
|
|
455
|
+
cp "${MDAN_DIR}/core/orchestrator.md" "${PROJECT_NAME}/.mdan/orchestrator.md"
|
|
456
|
+
cp "${MDAN_DIR}/core/universal-envelope.md" "${PROJECT_NAME}/.mdan/universal-envelope.md"
|
|
457
|
+
|
|
458
|
+
# Copy all agents
|
|
459
|
+
cp "${MDAN_DIR}/agents/"*.md "${PROJECT_NAME}/.mdan/agents/"
|
|
460
|
+
|
|
461
|
+
# Copy templates
|
|
462
|
+
cp "${MDAN_DIR}/templates/"*.md "${PROJECT_NAME}/mdan_output/"
|
|
463
|
+
|
|
464
|
+
# Copy skills if available
|
|
465
|
+
if [[ -d "${MDAN_DIR}/skills" ]]; then
|
|
466
|
+
cp -r "${MDAN_DIR}/skills/"* "${PROJECT_NAME}/.mdan/skills/" 2>/dev/null
|
|
467
|
+
fi
|
|
468
|
+
|
|
469
|
+
# Create .cursorrules
|
|
470
|
+
cat "${MDAN_DIR}/core/orchestrator.md" > "${PROJECT_NAME}/.cursorrules"
|
|
471
|
+
echo "" >> "${PROJECT_NAME}/.cursorrules"
|
|
472
|
+
echo "## CURSOR INSTRUCTIONS" >> "${PROJECT_NAME}/.cursorrules"
|
|
473
|
+
echo "Agent files are in .mdan/agents/. Reference them with @file when activating agents." >> "${PROJECT_NAME}/.cursorrules"
|
|
474
|
+
echo "Skills are in .mdan/skills/. Reference them for extended capabilities." >> "${PROJECT_NAME}/.cursorrules"
|
|
475
|
+
|
|
476
|
+
# Create .windsurfrules
|
|
477
|
+
cp "${PROJECT_NAME}/.cursorrules" "${PROJECT_NAME}/.windsurfrules"
|
|
478
|
+
|
|
479
|
+
# Create .claude/skills for Claude Code
|
|
480
|
+
mkdir -p "${PROJECT_NAME}/.claude/skills"
|
|
481
|
+
if [[ -d "${MDAN_DIR}/skills" ]]; then
|
|
482
|
+
cp -r "${MDAN_DIR}/skills/"* "${PROJECT_NAME}/.claude/skills/" 2>/dev/null
|
|
483
|
+
fi
|
|
484
|
+
|
|
485
|
+
# Create GitHub Copilot instructions
|
|
486
|
+
mkdir -p "${PROJECT_NAME}/.github"
|
|
487
|
+
cp "${MDAN_DIR}/core/orchestrator.md" "${PROJECT_NAME}/.github/copilot-instructions.md"
|
|
488
|
+
|
|
489
|
+
# Create STATUS.md
|
|
490
|
+
cat > "${PROJECT_NAME}/.mdan/STATUS.md" << EOF
|
|
491
|
+
# MDAN Project Status
|
|
492
|
+
|
|
493
|
+
**Project:** ${PROJECT_NAME}
|
|
494
|
+
**Started:** $(date +%Y-%m-%d)
|
|
495
|
+
**Current Phase:** 1 — DISCOVER
|
|
496
|
+
|
|
497
|
+
## Phase Progress
|
|
498
|
+
- [ ] Phase 1: DISCOVER — PRD validated
|
|
499
|
+
- [ ] Phase 2: DESIGN — Architecture + UX validated
|
|
500
|
+
- [ ] Phase 3: BUILD — All MVP features implemented
|
|
501
|
+
- [ ] Phase 4: VERIFY — All tests passing, security reviewed
|
|
502
|
+
- [ ] Phase 5: SHIP — Deployed and documented
|
|
503
|
+
|
|
504
|
+
## Notes
|
|
505
|
+
EOF
|
|
506
|
+
|
|
507
|
+
# Create README
|
|
508
|
+
cat > "${PROJECT_NAME}/README.md" << EOF
|
|
509
|
+
# ${PROJECT_NAME}
|
|
510
|
+
|
|
511
|
+
> *Project initialized with [MDAN](https://github.com/khalilbenaz/MDAN)*
|
|
512
|
+
|
|
513
|
+
## Status
|
|
514
|
+
Phase 1: DISCOVER — In progress
|
|
515
|
+
|
|
516
|
+
## Getting Started
|
|
517
|
+
See \`mdan_output/\` for project documentation and artifacts as they evolve.
|
|
518
|
+
EOF
|
|
519
|
+
|
|
520
|
+
echo -e "${GREEN}✅ MDAN project initialized successfully!${NC}"
|
|
521
|
+
echo ""
|
|
522
|
+
echo -e " ${BOLD}Project:${NC} ${PROJECT_NAME}/"
|
|
523
|
+
echo -e " ${BOLD}MDAN files:${NC} ${PROJECT_NAME}/.mdan/"
|
|
524
|
+
echo -e " ${BOLD}Templates:${NC} ${PROJECT_NAME}/mdan_output/"
|
|
525
|
+
echo -e " ${BOLD}Skills:${NC} ${PROJECT_NAME}/.mdan/skills/"
|
|
526
|
+
echo ""
|
|
527
|
+
echo -e "${YELLOW}Next steps:${NC}"
|
|
528
|
+
echo " 1. Open your chosen LLM"
|
|
529
|
+
echo " 2. Paste .mdan/orchestrator.md as your system prompt"
|
|
530
|
+
echo " 3. Start with: 'MDAN: I want to build ${PROJECT_NAME}'"
|
|
531
|
+
echo ""
|
|
532
|
+
echo -e " Or for Cursor/Windsurf: open the ${PROJECT_NAME}/ folder — .cursorrules is ready"
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
# ============================================================
|
|
536
|
+
# PHASE
|
|
537
|
+
# ============================================================
|
|
538
|
+
|
|
539
|
+
cmd_phase() {
|
|
540
|
+
PHASE="${1}"
|
|
541
|
+
ACTION="${2}"
|
|
542
|
+
|
|
543
|
+
FILE=""
|
|
544
|
+
NAME=""
|
|
545
|
+
case "${PHASE}" in
|
|
546
|
+
1|discover)
|
|
547
|
+
FILE="01-discover.md"
|
|
548
|
+
NAME="DISCOVER"
|
|
549
|
+
;;
|
|
550
|
+
2|design)
|
|
551
|
+
FILE="02-design.md"
|
|
552
|
+
NAME="DESIGN"
|
|
553
|
+
;;
|
|
554
|
+
3|build)
|
|
555
|
+
FILE="03-build.md"
|
|
556
|
+
NAME="BUILD"
|
|
557
|
+
;;
|
|
558
|
+
4|verify)
|
|
559
|
+
FILE="04-verify.md"
|
|
560
|
+
NAME="VERIFY"
|
|
561
|
+
;;
|
|
562
|
+
5|ship)
|
|
563
|
+
FILE="05-ship.md"
|
|
564
|
+
NAME="SHIP"
|
|
565
|
+
;;
|
|
566
|
+
*)
|
|
567
|
+
echo -e "${RED}Unknown phase: ${PHASE}${NC}"
|
|
568
|
+
echo "Available phases: 1 (discover), 2 (design), 3 (build), 4 (verify), 5 (ship)"
|
|
569
|
+
return 1
|
|
570
|
+
;;
|
|
571
|
+
esac
|
|
572
|
+
|
|
573
|
+
if [[ -f "${MDAN_DIR}/phases/${FILE}" ]]; then
|
|
574
|
+
if [[ "${ACTION}" == "copy" || "${ACTION}" == "-c" ]]; then
|
|
575
|
+
CONTENT=$(cat "${MDAN_DIR}/phases/${FILE}")
|
|
576
|
+
if command -v pbcopy &> /dev/null; then
|
|
577
|
+
echo "$CONTENT" | pbcopy
|
|
578
|
+
echo -e "${GREEN}✅ Phase ${NAME} prompt copied to clipboard!${NC}"
|
|
579
|
+
echo " Paste it into your LLM to start the phase."
|
|
580
|
+
elif command -v xclip &> /dev/null; then
|
|
581
|
+
echo "$CONTENT" | xclip -selection clipboard
|
|
582
|
+
echo -e "${GREEN}✅ Phase ${NAME} prompt copied to clipboard!${NC}"
|
|
583
|
+
echo " Paste it into your LLM to start the phase."
|
|
584
|
+
elif command -v wl-copy &> /dev/null; then
|
|
585
|
+
echo "$CONTENT" | wl-copy
|
|
586
|
+
echo -e "${GREEN}✅ Phase ${NAME} prompt copied to clipboard!${NC}"
|
|
587
|
+
echo " Paste it into your LLM to start the phase."
|
|
588
|
+
else
|
|
589
|
+
cat "${MDAN_DIR}/phases/${FILE}"
|
|
590
|
+
echo -e "\n${YELLOW}⚠️ Could not copy automatically. Please copy the text above.${NC}"
|
|
591
|
+
fi
|
|
592
|
+
else
|
|
593
|
+
echo -e "${CYAN}${BOLD}Phase ${NAME}${NC}"
|
|
594
|
+
cat "${MDAN_DIR}/phases/${FILE}"
|
|
595
|
+
echo ""
|
|
596
|
+
echo -e "${YELLOW}Tip: Run '${CYAN}mdan phase ${PHASE} copy${YELLOW}' to copy this content to clipboard.${NC}"
|
|
597
|
+
fi
|
|
598
|
+
else
|
|
599
|
+
echo -e "${RED}Phase file not found: ${FILE}${NC}"
|
|
600
|
+
fi
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
# ============================================================
|
|
604
|
+
# AGENT
|
|
605
|
+
# ============================================================
|
|
606
|
+
|
|
607
|
+
cmd_agent() {
|
|
608
|
+
AGENT="${1}"
|
|
609
|
+
AGENT_FILE="${MDAN_DIR}/agents/${AGENT}.md"
|
|
610
|
+
|
|
611
|
+
if [[ -f "${AGENT_FILE}" ]]; then
|
|
612
|
+
cat "${AGENT_FILE}"
|
|
613
|
+
else
|
|
614
|
+
echo -e "${RED}Unknown agent: ${AGENT}${NC}"
|
|
615
|
+
echo "Available agents: product, architect, ux, dev, test, security, devops, doc"
|
|
616
|
+
fi
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
# ============================================================
|
|
620
|
+
# TEMPLATE
|
|
621
|
+
# ============================================================
|
|
622
|
+
|
|
623
|
+
cmd_template() {
|
|
624
|
+
TEMPLATE="${1}"
|
|
625
|
+
TEMPLATE_FILE="${MDAN_DIR}/templates/${TEMPLATE}.md"
|
|
626
|
+
|
|
627
|
+
if [[ -f "${TEMPLATE_FILE}" ]]; then
|
|
628
|
+
cat "${TEMPLATE_FILE}"
|
|
629
|
+
else
|
|
630
|
+
echo -e "${RED}Template not found: ${TEMPLATE}${NC}"
|
|
631
|
+
echo "Available templates:"
|
|
632
|
+
ls "${MDAN_DIR}/templates/" | sed 's/.md//'
|
|
633
|
+
fi
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
# ============================================================
|
|
637
|
+
# PROMPT (LLM setup)
|
|
638
|
+
# ============================================================
|
|
639
|
+
|
|
640
|
+
cmd_prompt() {
|
|
641
|
+
LLM="${1}"
|
|
642
|
+
INTEGRATION_FILE="${MDAN_DIR}/integrations/${LLM}.md"
|
|
643
|
+
|
|
644
|
+
if [[ -f "${INTEGRATION_FILE}" ]]; then
|
|
645
|
+
cat "${INTEGRATION_FILE}"
|
|
646
|
+
else
|
|
647
|
+
echo -e "${RED}Integration not found: ${LLM}${NC}"
|
|
648
|
+
echo "Available integrations:"
|
|
649
|
+
ls "${MDAN_DIR}/integrations/" | sed 's/.md//'
|
|
650
|
+
fi
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
# ============================================================
|
|
654
|
+
# STATUS
|
|
655
|
+
# ============================================================
|
|
656
|
+
|
|
657
|
+
# ============================================================n# OC (Orchestrator)n# ============================================================nncmd_oc() {n ORCH_FILE=".mdan/orchestrator.md"n if [[ ! -f "$ORCH_FILE" ]]; thenn ORCH_FILE="${MDAN_DIR}/core/orchestrator.md"n fin n if [[ -f "$ORCH_FILE" ]]; thenn if command -v pbcopy &> /dev/null; thenn cat "$ORCH_FILE" | pbcopyn echo -e "${GREEN}✅ Orchestrator prompt copied to clipboard!${NC}"n echo " Paste it into Claude, ChatGPT, or your favorite LLM."n elif command -v xclip &> /dev/null; thenn cat "$ORCH_FILE" | xclip -selection clipboardn echo -e "${GREEN}✅ Orchestrator prompt copied to clipboard!${NC}"n echo " Paste it into Claude, ChatGPT, or your favorite LLM."n elif command -v wl-copy &> /dev/null; thenn cat "$ORCH_FILE" | wl-copyn echo -e "${GREEN}✅ Orchestrator prompt copied to clipboard!${NC}"n echo " Paste it into Claude, ChatGPT, or your favorite LLM."n elsen cat "$ORCH_FILE"n echo -e "\n${YELLOW}⚠️ Could not copy to clipboard automatically. Please copy the text above.${NC}"n fin elsen echo -e "${RED}Orchestrator file not found.${NC}"n fin}nn
|
|
658
|
+
cmd_status() {
|
|
659
|
+
STATUS_FILE=".mdan/STATUS.md"
|
|
660
|
+
if [[ -f "${STATUS_FILE}" ]]; then
|
|
661
|
+
cat "${STATUS_FILE}"
|
|
662
|
+
else
|
|
663
|
+
echo -e "${YELLOW}No MDAN project found in current directory.${NC}"
|
|
664
|
+
echo ""
|
|
665
|
+
echo " To create a new project: mdan init [project-name]"
|
|
666
|
+
echo " To add MDAN to existing project: mdan attach"
|
|
667
|
+
echo " To rebuild existing project: mdan attach --rebuild"
|
|
668
|
+
fi
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
# ============================================================
|
|
672
|
+
# LIST
|
|
673
|
+
# ============================================================
|
|
674
|
+
|
|
675
|
+
cmd_list() {
|
|
676
|
+
echo -e "${BOLD}MDAN v${VERSION}${NC}"
|
|
677
|
+
echo ""
|
|
678
|
+
echo -e "${CYAN}Phases:${NC}"
|
|
679
|
+
ls "${MDAN_DIR}/phases/" | sed 's/.md//' | sed 's/^/ /'
|
|
680
|
+
echo ""
|
|
681
|
+
echo -e "${CYAN}Agents:${NC}"
|
|
682
|
+
ls "${MDAN_DIR}/agents/" | grep -v "REGISTRY" | sed 's/.md//' | sed 's/^/ /'
|
|
683
|
+
echo ""
|
|
684
|
+
echo -e "${CYAN}Templates:${NC}"
|
|
685
|
+
ls "${MDAN_DIR}/templates/" | sed 's/.md//' | sed 's/^/ /'
|
|
686
|
+
echo ""
|
|
687
|
+
echo -e "${CYAN}Integrations:${NC}"
|
|
688
|
+
ls "${MDAN_DIR}/integrations/" | sed 's/.md//' | sed 's/^/ /'
|
|
689
|
+
echo ""
|
|
690
|
+
if [[ -d "${MDAN_DIR}/skills" ]]; then
|
|
691
|
+
echo -e "${CYAN}Skills:${NC}"
|
|
692
|
+
ls "${MDAN_DIR}/skills/" | sed 's/^/ /'
|
|
693
|
+
fi
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
# ============================================================
|
|
697
|
+
# MAIN
|
|
698
|
+
# ============================================================
|
|
699
|
+
|
|
700
|
+
COMMAND="${1}"
|
|
701
|
+
shift
|
|
702
|
+
|
|
703
|
+
case "${COMMAND}" in
|
|
704
|
+
learn) cmd_learn "$@" ;;
|
|
705
|
+
skills) cmd_skills ;;
|
|
706
|
+
skill) cmd_skill_add "$@" ;;
|
|
707
|
+
attach) cmd_attach "$@" ;;
|
|
708
|
+
init) cmd_init "$@" ;;
|
|
709
|
+
phase) cmd_phase "$@" ;;
|
|
710
|
+
agent) cmd_agent "$@" ;;
|
|
711
|
+
template) cmd_template "$@" ;;
|
|
712
|
+
prompt) cmd_prompt "$@" ;;
|
|
713
|
+
oc) cmd_oc ;;
|
|
714
|
+
|
|
715
|
+
status) cmd_status ;;
|
|
716
|
+
list) cmd_list ;;
|
|
717
|
+
version) echo "MDAN v${VERSION}" ;;
|
|
718
|
+
help|--help|-h|"") show_help ;;
|
|
719
|
+
*)
|
|
720
|
+
echo -e "${RED}Unknown command: ${COMMAND}${NC}"
|
|
721
|
+
echo "Run 'mdan help' for usage"
|
|
722
|
+
exit 1
|
|
723
|
+
;;
|
|
724
|
+
esac
|