| name | workspace-detection |
| description | Detect whether the workspace is greenfield (new project) or brownfield (existing codebase). For brownfield, trigger reverse-engineering to recover implicit requirements. Produces a workspace-report.md with detected stack, entry points, and recommended inception path. |
| argument-hint | [target directory โ defaults to cwd] |
| user-invocable | true |
| model | claude-sonnet-4-6 |
| allowed-tools | Read,Grep,Glob,Bash |
์ธ์ ์ฌ์ฉํ๋์
- AIDLC Inception ์ ์์ํ๋ ์ฒซ ๋จ๊ณ๋ก์ ์ํฌ์คํ์ด์ค ์ํ๋ฅผ ํ๋ณํ ๋
- ๊ธฐ์กด ๋ ํฌ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ฉด์ ์๋ฌต์ ์ธ ๋๋ฉ์ธ ์ปจํ
์คํธ๋ฅผ ํ์
ํด์ผ ํ ๋
- greenfield ์ด๊ธฐํ ์ ์ ๋น ๋๋ ํฐ๋ฆฌ์ธ์ง ๊ธฐ์กด ์์ฐ์ด ๋จ์์๋์ง ํ์ธํ ๋
์ธ์ ์ฌ์ฉํ์ง ์๋์
- ์ด๋ฏธ
.omao/plans/<slug>/workspace-report.md ๊ฐ ์ต์ ์ํ๋ก ์กด์ฌํ ๋
- ๋จ์ผ ํ์ผ ๋ฆฌํฉํฐ๋ง ๋ฑ ์ํฌ์คํ์ด์ค ํ๋ณ์ด ๋ถํ์ํ ์์
- IaC ์ ์ฉ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ธํ๋ผ ๋ณ๊ฒฝ๋ง ๋ค๋ฃฐ ๋
์ ์ ์กฐ๊ฑด
- ๋ถ์ ๋์ ๋๋ ํฐ๋ฆฌ์ ๋ํ read ๊ถํ ๋ณด์
.omao/plans/ ๋๋ ํฐ๋ฆฌ๊ฐ ์กด์ฌ(์์ ๊ฒฝ์ฐ ์์ฑ)
- Git ๋ฆฌํฌ์งํ ๋ฆฌ ์ฌ๋ถ๋ ์ ํ์ฌํญ โ ๋นGit ๋๋ ํฐ๋ฆฌ๋ ์ง์
์ ์ฐจ
Step 1. ํ๊น ๋๋ ํฐ๋ฆฌ ํ์
์ธ์๋ก ๋ฐ์ ๊ฒฝ๋ก ๋๋ ํ์ฌ ์์
๋๋ ํฐ๋ฆฌ๋ฅผ ํ๊น์ผ๋ก ์ค์ ํฉ๋๋ค. ์ ๋ ๊ฒฝ๋ก๋ก ๋ณํํ ๋ค
์กด์ฌ ์ฌ๋ถ์ ์ฝ๊ธฐ ๊ถํ์ ํ์ธํฉ๋๋ค.
Step 2. Greenfield / Brownfield ํ๋ณ
๋ค์ ์๊ทธ๋์ ์ข
ํฉํ์ฌ ํ๋ณํฉ๋๋ค.
| ์๊ทธ๋ | Greenfield | Brownfield |
|---|
| ์์ค ํ์ผ ์ | 10 ๋ฏธ๋ง ๋๋ scaffold ๋ง ์กด์ฌ | ์์ค ํ์ผ 50 ์ด์ |
| Git ํ์คํ ๋ฆฌ | 0~3 commits | 10 ์ด์ commits |
| ์์กด์ฑ ์ ์ธ | package.json/pyproject.toml ์์ ๋๋ ์ด๊ธฐ ์ค์บํด๋ | ๊ณ ์ ๋ฒ์ ์ ์์กด์ฑ ๋ค์ |
| ํ
์คํธ ์์ฐ | ํ
์คํธ ํ์ผ ์์ | ํ
์คํธ ๋๋ ํฐ๋ฆฌ ์กด์ฌ |
| ๋๋ฉ์ธ ๋ชจ๋ธ | ๋ช
์๋ ์ํฐํฐ ์์ | ๋ชจ๋ธ/์คํค๋ง ํ์ผ ์กด์ฌ |
ํ๋ณ ๊ฒฐ๊ณผ๋ workspace_type: greenfield | brownfield | hybrid ๋ก ๊ธฐ๋กํฉ๋๋ค.
Step 3. ๊ธฐ์ ์คํ ํ์ง
- ์ธ์ด:
*.py, *.ts, *.go, *.java, *.rs ๋ฑ ํ์ฅ์ ๋น๋ ์ง๊ณ
- ํ๋ ์์ํฌ:
package.json, pyproject.toml, go.mod, pom.xml ํ์ฑ
- ์ธํ๋ผ:
Dockerfile, helm/, terraform/, *.tf, k8s/, kustomization.yaml ์กด์ฌ ์ฌ๋ถ
- AI/ML ์คํ:
requirements.txt ์์ vllm, transformers, langfuse, langchain ํ์ง
Step 4. ์ํธ๋ฆฌ ํฌ์ธํธ ๋ชฉ๋ก
- CLI:
bin/, cmd/, main.py
- API:
app.py, server.ts, api/ ๋ผ์ฐํธ
- UI:
src/pages/, app/, public/
- Worker:
workers/, consumers/
Step 5. ๋ธ๋ผ์ดํ๋ ํ์ฅ โ Reverse Engineering ํธ๋ฆฌ๊ฑฐ
workspace_type == brownfield ์ธ ๊ฒฝ์ฐ, ๋ค์ ์ฐ์ถ๋ฌผ์ ์ถ๊ฐ ์์งํฉ๋๋ค.
- ๋๋ฉ์ธ ๋ชจ๋ธ ์์ฝ(ํด๋์ค/์คํค๋ง ์์ 20๊ฐ)
- ์ธ๋ถ ์์กด ์๋น์ค(AWS, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋ฒกํฐ DB, ๋ฉ์์ง ํ)
- ๊ด์ธก์ฑ ์คํ ์กด์ฌ ์ฌ๋ถ(OpenTelemetry, Langfuse, Prometheus)
- ๋ณด์ ์๊ทธ๋(Secrets Manager, IRSA, OIDC)
๊ฒฐ๊ณผ๋ reverse-engineering-notes.md ๋ก ๋ณ๋ ์ ์ฅํ๊ณ , workspace-report.md ์์ ๋งํฌํฉ๋๋ค.
Step 6. ์ฐ์ถ๋ฌผ ์์ฑ
.omao/plans/<slug>/workspace-report.md ์ ๋ค์ ์น์
์ ๊ธฐ๋กํฉ๋๋ค.
# Workspace Report
- workspace_type: brownfield
- primary_language: Python 3.11
- frameworks: [FastAPI, LangChain, vLLM client]
- entry_points: [app/main.py, workers/indexer.py]
- infrastructure: [Helm, Terraform]
- recommended_next: requirements-analysis (adaptive, complex)
Step 7. ๋ค์ ์คํฌ ์ฐ๊ฒฐ
- greenfield + ๋จ์ ๊ธฐ๋ฅ โ
requirements-analysis (simple mode)
- greenfield + ๋ณต์ก ๊ธฐ๋ฅ โ
requirements-analysis (structured mode)
- brownfield โ
requirements-analysis + reverse-engineering-notes.md ์ฐธ์กฐ
์ข์ ์์
- Python FastAPI ๋ ํฌ + 50๊ฐ ์์ค + OpenTelemetry ์กด์ฌ โ brownfield, structured
- ๋น ๋๋ ํฐ๋ฆฌ + Git init ๋ง ์ํ โ greenfield, simple
- ์ค์บํด๋๋ง ์์ฑ๋ Next.js ๋ ํฌ(ํ์ด์ง ์์) โ greenfield
๋์ ์์ (๊ธ์ง)
- ํ์ผ ์๋ง์ผ๋ก ํ๋จํ์ฌ
docs/ ์์ฃผ ๋ ํฌ๋ฅผ brownfield ๋ก ์๋ชป ๋ถ๋ฅ
node_modules/ ๋ฅผ ์์ค ํ์ผ ์์ ํฌํจ
- ์ฐ์ถ๋ฌผ ์ ์ฅ ๊ฒฝ๋ก๋ฅผ
/tmp/ ๊ฐ์ ํ๋ฐ์ฑ ์์น๋ก ์ง์
- ๋ธ๋ผ์ดํ๋์ธ๋ฐ reverse-engineering-notes ๋ฅผ ์๋ต
์ฐธ๊ณ ์๋ฃ
๊ณต์ ๋ฌธ์
๊ด๋ จ ๋ฌธ์ (๋ด๋ถ)
../../CLAUDE.md โ aidlc ํ๋ฌ๊ทธ์ธ (inception) ๊ฐ์
../requirements-analysis/SKILL.md โ ๋ค์ ๋จ๊ณ ์คํฌ
/home/ubuntu/workspace/oh-my-aidlcops/CLAUDE.md โ OMA ์ ์ฒด ์ฒ ํ
/home/ubuntu/workspace/oh-my-aidlcops/plugins/aidlc/CLAUDE.md โ Phase 2 ์ฐ๊ฒฐ