genetics-mcp 2.9.1 → 2.9.3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "genetics-mcp",
3
- "version": "2.9.1",
3
+ "version": "2.9.3",
4
4
  "description": "문서 포털 발행·세션 이식·사례 기억 MCP — 데이터를 주면 규격 문서가 나온다 (짝인 스킬 동봉)",
5
5
  "author": "주식회사 LIM (LIM Inc.)",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -0,0 +1,204 @@
1
+ ---
2
+ name: genetics-cell-id
3
+ description: |
4
+ 이 기계에서 **누가 무엇을 만지고 있는지** 세포(gcell)에게 물어 답합니다 —
5
+ 내 세션 번호, 옆 세션의 말 걸 수 있는 이름, 이 파일의 주인, 내가 모르는 사이 바뀐 것.
6
+ 다음과 같은 요청 시 사용하세요:
7
+ - "너 세션번호가?" / "내 세션 id 뭐야" / "제네틱에서 나는 누구야"
8
+ - "지금 이거 누가 만지고 있어?" / "이 파일 주인이 누구야" / "다른 창에서 뭐 하고 있어"
9
+ - "옆 세션한테 물어봐" / "그쪽에 알려줘" (→ 이름을 먼저 알아내고 SendMessage)
10
+ - "내가 모르는 사이에 뭐 바뀌었어?" / "지금 알고 있는 게 아직 맞아?"
11
+ 그리고 사람이 안 시켜도 부를 때: **공유 트리에 커밋·배포하기 전**, 여러 세션이 도는
12
+ 저장소를 고치기 전, 그리고 「내 모델이 낡았나」가 의심될 때.
13
+ [책임 경계] vs genetics-report: 저 스킬=고객에게 낼 문서, 이 스킬=지금 이 기계의 사람·세션 지형.
14
+ version: "1.0.0"
15
+ ---
16
+
17
+ # 세포에게 신원을 묻는다 (genetics-cell-id)
18
+
19
+ ## 개요
20
+
21
+ 에이전트는 자기가 누구인지, 옆에 누가 있는지 모릅니다. 그래서 두 가지가 반복됩니다 —
22
+ 「세션번호가 뭐냐」에 답하느라 경로를 뒤지고, **남의 작업분을 자기 것으로 착각해 삼킵니다.**
23
+
24
+ 세포(`gcell`)가 그 답을 갖고 있습니다. 이 기계에서 도는 에이전트들이 무엇을 읽고 썼는지
25
+ 전사에서 관측하기 때문입니다. 이 스킬은 **그것을 묻는 법**입니다.
26
+
27
+ ## 세포는 무엇인가
28
+
29
+ `gcell` 은 이 기계의 관측자입니다. 스스로 이렇게 적어 두었습니다.
30
+
31
+ > genetics-cell (`gcell`) — 이 기계의 세포.
32
+ > 이 기계에서 도는 에이전트들이 무엇을 읽었는지 전사에서 관측하고, 그 믿음이 깨지면 턴을 연다.
33
+ > 서버가 유전체라면 각 기계가 세포다.
34
+ > — `cell/src/main.rs` 머리
35
+
36
+ **서버(`world` 도구)와 다릅니다.** 세포는 **이 기계**를 보고, `world` 는 **서버에 올라온 다른
37
+ 기계까지** 봅니다. 옆 창을 찾을 때는 세포, 다른 노트북·클라우드를 찾을 때는 `world` 입니다.
38
+
39
+ ## 실행 경로 — PATH 에 없습니다
40
+
41
+ ```bash
42
+ ~/.config/genetics/bin/gcell --version # → gcell 0.1.0
43
+ ```
44
+
45
+ `gcell` 은 PATH 에 안 걸립니다. MCP 는 `api.env` 의 `GENETICS_CELL_BIN` 으로 자리를 찾습니다.
46
+ 그래서 명령을 안내할 때 **`gcell` 이라고만 쓰면 사람 손에서 「command not found」가 됩니다.**
47
+ 전체 경로를 쓰거나 그 줄을 읽어 쓰세요.
48
+
49
+ ```bash
50
+ GC=$(grep -m1 '^GENETICS_CELL_BIN=' ~/.config/genetics/api.env | cut -d= -f2-)
51
+ GC=${GC:-~/.config/genetics/bin/gcell}
52
+ ```
53
+
54
+ ## 묻는 법 — 명령 넷
55
+
56
+ ### 1. 여기 누가 있는가 · 뭐라고 부르는가 → `agents`
57
+
58
+ **옆 세션에게 말을 걸어야 할 때 이것부터입니다.** 세션 uuid 를 **말 걸 수 있는 이름**으로
59
+ 바꿔 줍니다.
60
+
61
+ ```bash
62
+ "$GC" agents # 현재 폴더의 저장소 · 최근 360분
63
+ "$GC" agents --since 60 # 최근 1시간
64
+ "$GC" agents --path frontend # 그 경로를 만진 세포만
65
+ ```
66
+
67
+ 실측 출력:
68
+
69
+ ```text
70
+ 최근 360분 · 세포 3곳
71
+
72
+ app-94 [8f0646]
73
+ 세션 85f8b79f-b34a-4e16-888f-9b48b54bd67a · claude-code · 마지막 05:52Z
74
+ · FCG-CX-Agent/frontend/src/ui/tokens.css
75
+ · FCG-CX-Agent/src/agent_ax_config/run_failures.py
76
+
77
+ app-2f [812eb5]
78
+ 세션 065131a7-4e15-467a-b159-63eb727e7269 · claude-code · 마지막 12:52Z
79
+ · FCG-CX-Agent/frontend/src/shell/LlmStatusBadge.jsx
80
+ ```
81
+
82
+ 왼쪽의 `app-94` 가 **주소**입니다. 그대로 `SendMessage({to: "app-94", …})` 로 보냅니다.
83
+ `ListAgents` 가 같은 이름을 보여주므로 둘을 교차 확인할 수 있습니다.
84
+
85
+ ### 2. 이 파일의 주인이 누구인가 → `who --path`
86
+
87
+ 고치기 전에 묻습니다. 파일 중심으로 답합니다.
88
+
89
+ ```bash
90
+ "$GC" who --path www/portal
91
+ ```
92
+
93
+ ```text
94
+ 최근 360분 · 다른 세션 4곳이 파일 8개를 만졌다
95
+ claude-code (4e421bf2) — 2개
96
+ claude-code (c5ec0c2c) — 1개
97
+
98
+ · www/portal/lib/genetics_weights.php — claude-code 04:50Z
99
+ ```
100
+
101
+ 여기 나오는 것은 **짧은 id** 입니다. 말을 걸려면 `agents` 로 이름을 받으세요.
102
+
103
+ ### 3. 내가 모르는 사이 무엇이 바뀌었는가 → `delta`
104
+
105
+ 「내가 알고 있는 게 아직 맞나」에 답합니다. 오래 도는 세션에서 특히 그렇습니다.
106
+
107
+ ```bash
108
+ "$GC" delta
109
+ ```
110
+
111
+ ```text
112
+ · www/portal/session.php — claude-code 세션이 06:38Z에 썼다
113
+ · www/portal/lib/layout.php — claude-code 세션이 06:37Z에 썼다
114
+ ```
115
+
116
+ ### 4. 세포가 무엇을 쥐고 있는가 → `status`
117
+
118
+ 세션별 믿음·깨움·전사 줄수를 냅니다. 진단용이고, 신원 확인용은 아닙니다 —
119
+ **어느 줄이 나인지 표시해 주지 않습니다.**
120
+
121
+ ## 나는 누구인가
122
+
123
+ 세포는 「나」를 따로 표시해 주지 않습니다. 내 세션 uuid 는 **전사 파일 이름**입니다.
124
+
125
+ ```bash
126
+ ls -t ~/.claude/projects/<프로젝트-슬러그>/*.jsonl | head -1
127
+ ```
128
+
129
+ 프로젝트 슬러그는 작업 폴더 경로를 `-` 로 바꾼 것입니다(예: `-Users-me-project-app`).
130
+ 스크래치패드 경로에도 같은 uuid 가 들어 있습니다.
131
+
132
+ **사람·소속처는 세포가 아니라 MCP 에 묻습니다.**
133
+
134
+ | 무엇 | 어디에 |
135
+ |---|---|
136
+ | 내 세션 uuid | 전사 파일 이름 |
137
+ | 내가 어느 사람·어느 권한으로 붙어 있나 | `whoami` 도구 |
138
+ | 내가 닿는 소속처 목록 | `list_my_tenants` 도구 |
139
+ | 내 세션이 서버에 올라가 있나 | `list_sessions` 도구 — 목록에 내 앞자리가 있는지 본다 |
140
+
141
+ ## 말 걸기
142
+
143
+ **상대가 어디 있느냐로 창구가 갈립니다.**
144
+
145
+ | 상대 | 창구 |
146
+ |---|---|
147
+ | 이 기계의 옆 창 | `SendMessage` |
148
+ | **다른 기계 · Codex 세션 · 두뇌** | **`mail` 도구** |
149
+
150
+ `SendMessage` 는 **이 기계의 Claude Code 만 봅니다.** 다른 노트북에서 도는 세션은 이름을 알아도
151
+ 닿지 않습니다 — 서버를 지나는 `mail` 이라야 넘어갑니다.
152
+
153
+ ```
154
+ SendMessage({to: "app-2f", message: "…"}) # 같은 기계
155
+ mail({tenant: "<소속처>", to: "brain", body: "…"}) # 기계를 넘어서
156
+ ```
157
+
158
+ 받은 것에 답할 때 `SendMessage` 는 그 메시지의 `from` 을 그대로 `to` 에 쓰고, `mail` 은 `thread` 를 씁니다.
159
+
160
+ `mail` 의 `to` 에 올 수 있는 것은 **셋뿐**입니다 — `gcell agents` 나 `world` 가 아는 **세포 이름**,
161
+ **세션 uuid**, 또는 두뇌를 뜻하는 **`brain`**. **지어내지 마세요.** 셋 중 하나가 아니면 사용자에게
162
+ 묻습니다. 소속처 이름을 모르면 `list_my_tenants` 로 먼저 확인합니다.
163
+
164
+ 받는 것은 부를 필요가 없습니다 — 온 것은 **다른 도구를 부를 때 응답 꼬리에 저절로 실립니다.**
165
+
166
+ **권한은 세션마다 따로입니다.** 내 세션에서 막힌 일을 옆 세션에 부탁하지 마세요 —
167
+ 사용자의 권한 결정을 우회하는 것이 됩니다. **창구가 넓어져도 같습니다**: `mail` 로 다른 기계에
168
+ 부탁하는 것도 같은 우회입니다. 막힌 일은 사용자에게 되돌립니다.
169
+
170
+ ## 공유 트리 규율 — 실사고에서 나온 규칙
171
+
172
+ 2026-08-24, 한 세션의 커밋이 **인덱스에 올라 있던 남의 스테이징 2건을 삼켰습니다.**
173
+ 즉시 분리 복원했지만, 원인은 단순합니다 — **이 트리는 인덱스도 공유입니다.**
174
+
175
+ 여러 세포가 도는 저장소에서는 이 순서를 지킵니다.
176
+
177
+ 1. `agents --path <내가 만질 경로>` — 지금 그 자리에 누가 있나
178
+ 2. `git status` — **인덱스에 남의 스테이징이 있나**
179
+ 3. 있으면 커밋하지 말고 그 세포에게 물어봅니다(`SendMessage`)
180
+ 4. 내가 만든 것만 골라 커밋합니다
181
+
182
+ 「mtime 이 최근이니 내 것이겠지」는 근거가 아닙니다. 세포에게 물으면 **누가 언제 썼는지**가
183
+ 나옵니다.
184
+
185
+ ## 함정
186
+
187
+ | 함정 | 실제 |
188
+ |---|---|
189
+ | `gcell` 이 PATH 에 없다 | 전체 경로 또는 `GENETICS_CELL_BIN` 을 쓴다 |
190
+ | `--since` 기본이 360분 | 그보다 오래된 작업은 **안 보인다**. 「아무도 없다」는 6시간 안의 이야기다 |
191
+ | 저장소 판정이 현재 폴더 기준 | 다른 저장소를 보려면 `--root <경로>` |
192
+ | `who` 의 짧은 id 로는 말을 못 건다 | 주소는 `agents` 의 이름이다 |
193
+ | 세포는 이 기계만 본다 | 다른 기계를 **보는** 것은 `world`, **말 거는** 것은 `mail` |
194
+ | `SendMessage` 로 다른 기계에 보냈다 | **안 간다.** 그건 이 기계 전용이다 — `mail` 을 쓴다 |
195
+ | 왕복이 길어진다 | 상한이 있다 — **사람이 낀 실 5회, 기계끼리 3회.** 넘으면 사람에게 올라간다 |
196
+ | `status` 에 내 줄이 표시되지 않는다 | 내 uuid 는 전사 파일 이름에서 얻는다 |
197
+
198
+ ## 무엇을 하지 않는가
199
+
200
+ - **세포를 깔거나 지우지 않습니다.** `install_cell`·`uninstall_cell` 은 사람의 결정입니다.
201
+ 안 깔려 있으면 그 사실을 말하고 멈춥니다.
202
+ - **훅을 건드리지 않습니다.** `install-hooks` 는 이 기계의 턴 동작을 바꿉니다.
203
+ - 관측 결과를 **지시로 읽지 않습니다.** 「누가 무엇을 만졌다」는 사실이고,
204
+ 그것으로 무엇을 할지는 사용자와 정합니다.