Lab 01: 에이전트를 만든다
이 Lab을 마치면 이런 결과물이 남습니다.
이 실습의 시나리오
당신은 NXT 스토어의 운영 담당자입니다. 매일 아침 들어온 주문을 재고와 대조해 문제 주문을 걸러내는 반복 점검 업무가 있습니다. 오늘은 이 업무를 맡을 에이전트를 온보딩하는 날입니다. 크루를 만들고, 어디서 일하는지 확인하고, 첫 점검을 시키고, 보고를 받습니다.
이 실습의 핵심 질문
에이전트를 만든다는 것은 무엇을 정하는 일인가?
읽는 것으로는 잘 안 잡히는 개념입니다. 직접 하나 만들어 보고, 만든 결과가 설정 파일에 무엇으로 남았는지 확인합니다. 그다음 그 에이전트에게 실제 업무를 시켜 어디서 일하고 무엇을 돌려주는지 봅니다.
학습 목표
- Crew를 만들면서 이름, 트리거, 템플릿, 워크스페이스, 메모리를 직접 정합니다.
- 만든 크루가 설정 파일에 어떤 형태로 남는지 확인합니다.
- 크루를 바꾸면 세션의 무엇이 따라 바뀌는지 관찰합니다.
- 첫 업무인 주문-재고 대조를 시켜 실제 산출물을 받습니다.
- 에이전트가 읽을 때와 쓸 때의 승인 경계를 직접 확인합니다.
- 도구로 확인한 사실과 모델이 덧붙인 설명을 구분합니다.
준비 파일과 시작 조건
공통 준비를 먼저 수행합니다.
□ 새 세션을 만들었다
□ 하단 표시줄이 default · nxt-kirocrew-hands-on · main
□ 실행 모드가 Normal이 실습에는 다음 파일이 준비되어 있습니다.
labs/01-agent-creation/
└── store/
├── orders-today.md ← 오늘의 주문 5건
└── inventory-status.md ← 품목별 재고 현황두 파일 사이에 문제가 심어져 있습니다. 지금은 열어 보지 않습니다. 에이전트가 찾는 과정을 보는 것이 6단계입니다.
- 만든 크루는 다음 랩들이 계속 사용합니다. 과정을 끝낼 때의 정리는 9단계에 있습니다.
- 승인 실습(7단계)은 파일 쓰기 도구를 사용합니다. 에이전트의 프로그램 실행은 5단계의 읽기 전용 shell 한 번뿐입니다.
Step 1: 지금 있는 크루를 본다
채용 전에 지금 팀 구성부터 봅니다. Agent Capabilities → Crews를 엽니다.
화면 설명이 이렇게 되어 있습니다.
Crews you chat with, each with its own workspace and memory번역: 각자 고유한 워크스페이스와 메모리를 가진, 대화할 수 있는 크루입니다.
기본 제공 크루들이 보입니다. 카드 하나를 자세히 읽습니다.
default [default]
Used for all new chats
AGENT TEMPLATE kirocrew WORKSPACE default shared
MEMORY STORE default shared MODEL Inherited번역:
Used for all new chats는 모든 새 채팅에 사용하는 크루라는 뜻입니다.
확인할 것은 네 가지입니다.
- 크루마다 템플릿, 워크스페이스, 메모리 스토어, 모델이 붙어 있습니다.
- 기본 크루들은 워크스페이스와 메모리가 전부
default이고shared배지가 붙어 있습니다. MODEL이Inherited입니다. 크루가 모델을 직접 정하지 않고 물려받습니다.- 목록 상단의
New sessions use [default]드롭다운은 새 세션이 기본으로 쓰는 크루를 정하는 곳입니다. 이 실습에서는default로 두고, 크루는 세션 안에서 직접 바꿉니다(4단계). shared는 이 크루만의 것이 아니라는 뜻입니다. 직접 만든 크루와 3단계에서 비교합니다.
- 기본 크루 카드에서 템플릿·워크스페이스·메모리 스토어·모델을 확인했습니다.
Step 2: 크루를 만든다 — 온보딩
+ New crew를 누릅니다. 폼은 BASICS, ROUTING, WHAT THIS CREW USES 세 구역으로 나뉩니다. 스토어 운영 담당자의 채용 서류라고 생각하고 채웁니다.
NAME
nxt-store-opsTRIGGERS — 담당 업무를 정의합니다
폼의 설명을 먼저 읽습니다.
When to route to this crew — free-text guidance the orchestrator reads to pick it.
Leave empty to exclude this crew from automatic selection.번역: 이 크루로 라우팅할 조건을 자유롭게 적습니다. 오케스트레이터가 이 안내를 읽고 크루를 선택하며, 비워 두면 자동 선택에서 제외됩니다.
이건 설명이 아니라 라우팅 조건입니다. 오케스트레이터가 이 문장을 읽고 크루를 고릅니다.
주문 점검, 재고 점검, 운영 보고AGENT TEMPLATE
kirocrew폼 설명은 이렇습니다.
The starting setup this crew uses — its tools, connections and instructions.번역: 이 크루가 사용하는 시작 설정으로, 도구·연결·지시를 포함합니다.
도구 목록과 지시는 템플릿에서 옵니다. 크루가 무엇을 할 수 있는지는 템플릿이 정합니다. 목록은 Agent Capabilities → Agent Templates에서 확인할 수 있고, Lab 2에서 스킬을 매핑할 때 다시 봅니다.
WORKSPACE — 새로 만듭니다
드롭다운을 열면 맨 위에 + New workspace...가 있습니다.
누르면 별도 모달이 뜹니다.
NAME nxt-store-ops
DIRECTORY workspace-nxt-store-ops ← 이름을 넣으면 자동으로 채워집니다
COPY FROM (OPTIONAL) — none —DIRECTORY를 직접 입력하지 않았는데 채워집니다. NAME을 입력하는 순간 workspace- 접두어가 붙습니다.
COPY FROM으로 기존 워크스페이스를 복제할 수도 있습니다. 이 실습에서는 — none —으로 둡니다.
Create를 누르면 크루 폼의 WORKSPACE가 nxt-store-ops로 바뀝니다.
MEMORY STORE — 새로 만들 수 없습니다
드롭다운을 엽니다.
default ✓+ New 항목이 없습니다. 워크스페이스에는 있었는데 메모리 스토어에는 없습니다. 기존 스토어 중에서만 고를 수 있고 지금은 default 하나뿐입니다.
폼 설명은 이렇게 되어 있습니다.
Where this crew's lessons and history are saved.
Switch it and the crew starts from a blank memory; the old one is kept.번역: 이 크루의 학습 내용과 기록을 저장하는 곳입니다. 바꾸면 이전 기록은 보존한 채 이 크루는 빈 메모리로 시작합니다.
바꿀 수는 있다고 쓰여 있는데 만들 수가 없습니다. 이 제약을 기억해 둡니다. 3단계에서 결과를 봅니다. default를 그대로 두고 Create를 누릅니다.
-
+ New crew로nxt-store-ops크루를 만들었고 카드가 목록에 나타났습니다. - 워크스페이스를 새로 만들었고
DIRECTORY가 자동으로 채워지는 것을 봤습니다. - 메모리 스토어에는
+ New항목이 없다는 것을 확인했습니다.
Step 3: 만든 것이 무엇으로 남았는지 본다
크루 목록에 nxt-store-ops 카드가 생겼습니다. 기본 크루 카드와 나란히 놓고 읽습니다.
nxt-store-ops default [default]
No description Used for all new chats
AGENT TEMPLATE kirocrew AGENT TEMPLATE kirocrew
WORKSPACE nxt-store-ops WORKSPACE default shared
MEMORY STORE default shared MEMORY STORE default shared
MODEL Inherited MODEL Inherited번역:
No description은 설명이 없다는 뜻이고,Used for all new chats는 모든 새 채팅에 사용된다는 뜻입니다.
먼저 예측해 보세요 — 두 카드에서 다른 곳은 어디이고, 그것이 무슨 뜻일까요?
워크스페이스는 전용이고 메모리는 공유입니다. WORKSPACE에는 shared 배지가 없고 MEMORY STORE에는 있습니다. 폴더는 나눴는데 기억은 기본 스토어를 그대로 씁니다.
2단계에서 메모리 스토어를 새로 만들 수 없었기 때문입니다. 만들 수 없으니 나눌 수도 없습니다. 이 크루가 배우는 것은 다른 크루에게도 갑니다. 기억을 분리해서 관리하려면 다른 방법이 필요합니다.
No description도 확인합니다. 트리거는 입력했는데 설명은 비어 있습니다. 생성 폼에 설명 입력란이 없었습니다. 트리거와 설명은 다른 필드입니다.
설정 파일에서 확인합니다 — 채용 계약서
만든 크루는 설정 파일에 남습니다. 대시보드를 떠날 필요 없이 좌하단 Terminal 메뉴의 내장 터미널에서 확인해도 됩니다.
| macOS | Windows PowerShell |
|---|---|
cat ~/.kiro/crew/config.json | type $HOME\.kiro\crew\config.json |
agents와 workspaces 항목을 찾습니다.
"agents": {
"nxt-store-ops": {
"kiro_agent": "kirocrew",
"workspace": "nxt-store-ops",
"memory_store": "default",
"model": "",
"description": "",
"triggers": "주문 점검, 재고 점검, 운영 보고",
"source": "kirocrew"
}
},
"workspaces": {
"nxt-store-ops": { "dir": "workspace-nxt-store-ops" }
}triggers 값이 한글이 아니라 \uXXXX로 보입니다. 오타가 아닙니다 — 저장 파일이 한글을 유니코드 이스케이프로 적습니다. 입력한 그 문장이 맞고, 읽기 좋게 풀어 보고 싶으면 python3 -m json.tool ~/.kiro/crew/config.json --no-ensure-ascii를 대신 씁니다.
이 실습의 첫 번째 결론입니다. 에이전트를 만든다는 것은 이 JSON 한 덩어리를 정하는 일입니다. 무엇을 물려받고(
kiro_agent), 어디서 일하고(workspace), 무엇을 기억하고(memory_store), 언제 불려 나올지(triggers)를 정합니다. 채용으로 치면 계약서 한 장입니다. 계약서에 없는 능력은 없습니다.
model이 빈 문자열입니다. 카드의 Inherited가 이것입니다.
대시보드 화면에서는 이 트리거가 항상 한글로 정상 표시됩니다 — 방금 본 이스케이프는 저장 파일에서만 그렇습니다.
폴더는 아직 없습니다
workspaces.nxt-store-ops.dir = "workspace-nxt-store-ops"설정에는 있지만 디스크에는 아직 없습니다. 처음 사용할 때 만들어집니다. 기준 경로는 ~/.kiro/crew/workspace_dir 파일에 적혀 있습니다.
- 설정 파일에서
agents.nxt-store-ops블록을 찾았습니다.
Step 4: 만든 크루를 적용하고 세션을 연다
크루 목록 우상단의 Apply & Restart를 누릅니다. 누르지 않으면 새 크루가 세션 선택 목록에 나타나지 않습니다.
누르면 버튼 옆에 적용 완료 문구가 나타납니다.
Sessions restarted — config applied.번역: 세션을 재시작했습니다 — 설정을 적용했습니다.
Sessions로 이동해 + New로 새 세션을 만듭니다.
이제 크루 칩을 클릭합니다. 지금은 크루가 몇 개 없어 목록에서 바로 보입니다. 크루가 많아지면 필터 입력란에 nxt를 입력해 필터링합니다.
nxt-store-ops [kirocrew]배지의 kirocrew가 이 크루의 Agent Template입니다. 선택합니다.
표시줄이 바뀝니다
🤖 nxt-store-ops 📁 Project크루만 바꿨는데 폴더 칩도 같이 바뀌었습니다. 프로젝트 폴더가 Project가 됐습니다.
크루를 바꾸는 것은 이름표를 바꾸는 일이 아닙니다. 그 크루에 묶인 워크스페이스로 세션의 작업 기준이 옮겨 갑니다. 담당자가 바뀌면 그 담당자의 자리로 일이 넘어가는 것과 같습니다.
프로젝트 폴더를 다시 연결합니다
여기에 함정이 있습니다. Project는 연결된 폴더의 이름이 아니라, 아무 폴더도 연결되지 않았다는 기본 라벨입니다. 크루를 바꾸면서 프로젝트 폴더 연결이 풀린 것입니다.
폴더 칩(Project)을 클릭하면 선택기가 열립니다. Recent에서 nxt-kirocrew-hands-on을 선택합니다.
표시줄이 이 실습의 최종 작업 기준이 됩니다.
🤖 nxt-store-ops 📁 nxt-kirocrew-hands-on · main크루와 프로젝트 폴더가 동시에 연결된 상태입니다. 재연결하지 않으면 6단계에서 에이전트가 실습 파일을 찾지 못합니다.
-
Apply & Restart로 설정을 적용했습니다. - 크루를 바꾼 뒤 폴더 칩이
Project로 리셋되는 것을 봤습니다. -
nxt-kirocrew-hands-on프로젝트 폴더를 다시 연결했습니다.
Step 5: 어디서 일하는지 직접 확인한다
신입에게 물어봅니다. 세션에 입력합니다.
지금 네가 읽고 쓰는 폴더의 절대 경로를 shell 도구로 확인해서 알려 줘.
pwd와 ls -la를 실행하고 결과를 그대로 보여 줘. 파일은 만들지 마.Windows.
pwd·ls -la는 유닉스 명령이라 PowerShell 환경의 에이전트는 같은 일을 하는 명령을 찾느라 시도가 몇 번 더 걸릴 수 있습니다. Windows에서는 명령을 지정하지 않는 버전으로 보냅니다 — 결과 관찰은 동일합니다.지금 네가 읽고 쓰는 폴더의 절대 경로를 shell 도구로 확인해서 알려 줘. 현재 경로와 폴더 내용 목록을 확인하는 명령을 실행하고 결과를 그대로 보여 줘. 파일은 만들지 마.
먼저 예측해 보세요 — 어느 경로가 나올까요? 그리고 승인 카드가 뜰까요?
실행 결과는 다음과 같습니다.
$ pwd
/Users/<사용자명>/Desktop/work/nxt-kirocrew-hands-on
$ ls -la
total 32
drwxr-xr-x@ 9 <사용자명> staff 288 Aug 12 20:24 .
drwxr-xr-x@ 67 <사용자명> staff 2144 Aug 12 19:58 ..
drwxr-xr-x@ 12 <사용자명> staff 384 Aug 12 19:58 .git
drwxr-xr-x@ 4 <사용자명> staff 128 Aug 12 20:24 .kiro
-rw-r--r--@ 1 <사용자명> staff 1476 Aug 12 19:58 README.md
-rw-r--r--@ 1 <사용자명> staff 7436 Aug 12 19:58 SETUP.md
drwxr-xr-x@ 6 <사용자명> staff 192 Aug 12 19:58 labs
drwxr-xr-x@ 3 <사용자명> staff 96 Aug 12 19:58 themes4단계에서 재연결한 프로젝트 폴더와 정확히 일치합니다. 크루에 지정한 워크스페이스(workspace-nxt-store-ops)도, 기본 워크스페이스도 아니고, 지금 이 세션이 연결하고 있는 그 폴더 그대로입니다 — 셸 도구가 프로젝트 폴더 연결을 그대로 따라갑니다.
그리고 승인 카드가 뜨지 않았습니다. Normal 모드인데도 바로 실행됐습니다. 8단계에서 이유를 확인합니다.
폴더 칩을 재연결하지 않고 이 질문을 보내면 결과가 달라집니다 — 4단계에서 본
Project(미연결) 상태 그대로 셸이 실행되어, 프로젝트 폴더도 워크스페이스도 아닌 별도 경로가 나옵니다. 재연결을 건너뛰면 안 되는 이유가 여기서 드러납니다.
Windows. 이 단계의 shell 실행은 Windows에서 비샌드박스 실행 동의 설정 없이는 차단될 수 있습니다. 차단된다면 그 화면 자체가 관찰 대상입니다 — 7단계의 쓰기 승인과 함께 “런타임이 무엇을 막는가”의 사례로 기록해 둡니다. 이 단계를 건너뛰어도 이후 단계 진행에는 지장이 없습니다.
이름이 비슷한 다섯 가지
| 개념 | 무엇 | 어디서 정하는가 |
|---|---|---|
| 프로젝트 폴더 | 채팅이 읽고 쓰는 실습 소스 | 세션 하단 폴더 칩 |
| Crew Workspace | 크루에 묶이는 폴더 | Crews의 크루 설정 |
| 세션 작업 폴더 | 실제 명령이 실행되는 곳 — 프로젝트 폴더가 연결되어 있으면 그 폴더를 따라갑니다 | 세션 생성 시 자동, 연결 상태에 좌우됨 |
| Task Runner Workspace | Task Runner 전용 경로 | Task Runner 화면 |
KIROCREW_PROJECT_DIR | Kiro Crew 자체의 탐색 경로 | 환경변수 — 실습 폴더로 설정 금지 |
이름이 비슷해 헷갈리기 쉽지만 정의는 다섯 가지 다 다릅니다. 방금처럼 값이 같아 보이는 것은 프로젝트 폴더가 연결되어 있기 때문이고, 연결이 풀리면(4단계에서 본 그 상황) 바로 갈립니다. 에이전트가 “파일을 못 찾겠다”고 할 때 가장 먼저 확인할 곳입니다.
-
pwd결과가 재연결한 프로젝트 폴더와 일치하는 것을 확인했습니다 — 셸 도구가 폴더 연결을 따라간다는 뜻입니다.
Step 6: 첫 업무를 시킨다 ★
이제 진짜 일을 시킵니다. 준비 파일 두 개를 대조하는 아침 점검입니다. 4단계의 최종 표시줄(nxt-store-ops · nxt-kirocrew-hands-on · main)을 먼저 확인합니다.
labs/01-agent-creation/store/orders-today.md 와
labs/01-agent-creation/store/inventory-status.md 를 읽고,
주문을 재고와 대조해서 문제가 있는 주문을 찾아 보고해 줘.
확실하지 않은 것은 추측하지 말고 확인 불가로 표시해. 파일은 만들지 마.먼저 예측해 보세요 — 파일 안에 문제가 둘 심어져 있습니다. 에이전트가 몇 개를 찾을까요?
두 파일의 실제 내용입니다. 답을 읽기 전에 직접 문제를 찾아보세요.
준비 파일에 심어 둔 문제는 두 가지입니다.
- 명확한 문제 —
ORD-1043: cable 3개 주문인데 재고가 1개뿐입니다. 대조만 하면 반드시 발견됩니다. - 단정할 수 없는 문제 —
ORD-1042와ORD-1045: 같은 고객(이서연)이 같은 품목(bottle)을 이틀에 걸쳐 1개씩 주문했습니다. 중복 실수인지 의도한 재주문인지 파일만으로는 확정할 수 없습니다.
실제 보고입니다.
품목별 주문 합계 대 재고:
mug 2 (ORD-1041) 17 정상
bottle 2 (ORD-1042 + ORD-1045) 12 정상
cable 3 (ORD-1043) 1 ⚠ 재고 부족
sensor 1 (ORD-1044) 11 정상
문제 주문:
- ORD-1043 (박지훈, cable ×3) — 총재고가 1개뿐이라 2개 부족합니다.
확인 불가 / 유의 사항:
- bottle는 ORD-1042와 ORD-1045 두 건의 합이 2개이고 재고 12개라 총량 기준으로는
정상입니다. 다만 개별 주문 단위로 재고를 차감·예약하는지 여부는 파일에 없어 확인 불가입니다.관찰 결과가 예측과 다른 지점이 있습니다.
- ①은 정확히 찾았습니다. 승인 카드도 뜨지 않았습니다. 프로젝트 폴더가 연결된 상태의 파일 읽기이기 때문입니다.
- ②는 단정하지도, 중복 의심으로 분류하지도 않았습니다. 두 주문을 합산해 “총량 기준 정상”으로 처리하고 넘어갔습니다. 같은 고객이 같은 품목을 이틀 연속 주문했다는 사실 자체를 문제 후보로 보지 않은 것입니다.
에이전트는 시키지 않은 의심은 하지 않습니다. 수치 대조처럼 기계적인 문제는 정확히 잡지만, “같은 고객의 연속 주문은 중복 실수일 수 있다”는 도메인 감각은 지시에 없으면 작동하지 않습니다. 그 감각을 프롬프트에 넣을지, 사람이 보고에서 걸러낼지 — 그것을 정하는 것이 관리자의 일입니다.
첫 산출물이 실제 업무 가치가 있다는 점이 이 단계의 목적입니다. 에이전트를 만든다는 것은 폼을 채우는 일이 아니라, 반복 업무를 맡길 담당자를 정의하는 일입니다.
그런데 이 크루는 무엇이 “전문”인가
솔직하게 짚고 갑니다. 지금 nxt-store-ops가 default와 다른 것은 이름, 트리거, 자리(워크스페이스) 셋뿐입니다. 템플릿이 kirocrew 그대로이므로 어떻게 일하는지는 아직 기본 설정과 같습니다. 트리거도 행동을 바꾸는 것이 아니라 오케스트레이터의 라우팅 조건일 뿐입니다.
오늘 점검이 잘 된 것은 크루가 전문가여서가 아니라, 프롬프트가 일을 전부 정의했기 때문입니다. 반복 업무라면 매번 이렇게 길게 쓸 수는 없습니다.
- 점검 절차를 크루에 붙이는 방법 — Lab 2 (스킬)
- 항상 지킬 규칙을 붙이는 방법 — Lab 3 (Steering)
방금 에이전트가 놓친 중복 의심도 그때 지시로 심을 수 있습니다. 이번 Lab에서 만든 것은 담당자의 껍데기가 아니라 신원입니다 — 능력은 다음 Lab들에서 채워집니다.
재연결을 잊으면 이렇게 실패합니다 — 폴더 칩이 Project인 채로 같은 지시를 보낸 경우
같은 프롬프트를 프로젝트 폴더가 연결되지 않은 세션에 보내면 두 가지가 달라집니다.
첫째, 승인 카드가 뜹니다. 상대 경로가 해석되지 않으니 에이전트가 shell find로 홈 디렉터리 전체를 뒤지려 하고, 작업 폴더 밖을 탐색하는 shell 실행은 읽기여도 승인 대상입니다. 5단계의 pwd는 작업 폴더 안에서 실행되어 통과했던 것과 대조됩니다.
둘째, 파일을 찾지 못하고 확인 불가로 보고합니다.
- labs/01-agent-creation/store/orders-today.md — 확인 불가 (파일 없음)
- labs/01-agent-creation/store/inventory-status.md — 확인 불가 (파일 없음)
파일 내용을 추측해서 대조하는 건 요청하신 원칙("확실하지 않은 것은
추측하지 말라")에 어긋나므로 하지 않겠습니다.주목할 것은 에이전트의 태도입니다. 없는 파일을 지어내 대조하는 대신 추측을 거부하고 경로를 물었습니다. 프롬프트의 방어선이 데이터가 아니라 경로 문제에서 먼저 작동한 것입니다. 폴더 칩을 재연결하고 같은 지시를 다시 보내면 성공 보고로 이어집니다.
팀 토론
먼저 스스로 답해 본 뒤 접힌 답과 비교해 보세요.
이서연의 연속 주문 2건을 여러분이라면 어떻게 처리하겠습니까? 에이전트가 놓친 것은 무엇이고, 그것을 잡으려면 지시를 어떻게 바꿔야 합니까?
생각해 볼 답
사람 담당자라면 주문 시각·고객 이력·결제 건수를 확인하거나 고객에게 직접 물었을 것입니다. 에이전트가 놓친 것은 “같은 고객 + 같은 품목 + 연속 일자” 패턴을 문제 후보로 보는 감각입니다 — 수치 대조에는 걸리지 않는 패턴이기 때문입니다. 잡으려면 지시에 한 줄을 더합니다: “같은 고객이 같은 품목을 여러 번 주문한 경우 중복 가능성으로 표시해.” 이런 판단 기준을 매번 쓰지 않고 저장하는 방법이 Lab 2의 스킬입니다.
이 점검을 사람이 할 때와 에이전트가 할 때, 무엇을 믿고 무엇을 검증해야 할까요?
생각해 볼 답
사람이 하면 계산 실수를 검증해야 하고, 에이전트가 하면 계산은 믿되 판단을 검증해야 합니다 — 무엇을 문제로 분류했고 무엇을 그냥 지나쳤는가. 도구가 돌려준 값(파일 내용, 수치 대조)은 신뢰 수준이 높지만, 그 값을 어떻게 해석하고 분류했는지는 사람이 걸러 읽어야 합니다. Step 7에서 이 구분을 더 다룹니다.
- 명확한 재고 부족 주문을 찾았습니다.
- 에이전트가 중복 의심을 다루는 방식을 관찰했습니다(인용 기록에서는 스스로 제기하지 않았습니다 — 제기했다면 그 차이도 기록해 둡니다).
Step 7: 에이전트의 설명을 검증하고 쓰기를 승인한다
5단계와 6단계의 답변을 다시 읽습니다. 도구가 돌려준 값과 모델이 덧붙인 설명을 나눠 봅니다.
6단계 보고는 이미 검증했습니다. 주문 합계와 재고 수치는 파일 원문과 나란히 대조할 수 있었고, 대조하면 맞았습니다. 문제는 대조할 원문이 없는 설명입니다.
다음은 한 실행에서 5단계 답변 마지막에 붙어 나온 문단입니다. 여러분의 답변에는 이런 설명이 없거나 다른 문구가 붙었을 수 있습니다 — 여기서 배울 것은 문구가 아니라 검증 방법입니다.
참고로 이 셸의 작업 경로(dashboard_chat-3-...)와 이 세션의 워크스페이스 메모리 경로
(/Users/<사용자명>/.kiro/crew/workspace-nxt-store-ops)는 서로 다른 위치입니다.
셸 명령은 위 경로에서 실행됩니다.경로가 갈린다는 지적은 맞습니다. 그런데 괄호 안의 워크스페이스 경로가 존재하지 않습니다. 이렇게 검증합니다 — 3단계에서 쓴 내장 터미널로 직접 대조합니다.
| macOS | Windows PowerShell |
|---|---|
cat ~/.kiro/crew/workspace_dir | type $HOME\.kiro\crew\workspace_dir |
ls ~/.kiro/crew/workspace-nxt-store-ops | dir $HOME\.kiro\crew\workspace-nxt-store-ops |
이 인용 사례에서는 첫 명령이 기준 경로(/Users/<사용자명>/workplace/kirocrew-workspace)를 출력했고, 모델이 말한 경로는 No such file or directory였습니다. 여러분의 답변에 대조할 경로 설명이 붙었다면 같은 방법으로 확인합니다 — 안 붙었다면 이 대조는 눈으로 따라가는 것으로 충분합니다.
3단계에서 봤듯 워크스페이스 폴더는 기준 경로 아래에, 그것도 처음 사용할 때 만들어집니다. 모델이 말한 ~/.kiro/crew/ 아래 경로는 설정 파일 위치와 디렉터리 이름을 그럴듯하게 조합한 것입니다.
이 실습의 두 번째 결론입니다. 같은 답변 안에 검증된 사실과 추정이 섞여 있습니다.
pwd결과와 파일 대조 결과는 도구가 돌려준 값이라 맞습니다. 덧붙인 설명은 모델이 조합한 것일 수 있습니다. 문장이 이어져 있다고 신뢰 수준이 같지는 않습니다. 신입의 보고에서 사실과 짐작을 가려 읽는 습관이 여기서 시작됩니다.
쓰기를 시켜 봅니다
같은 세션에 이어서 입력합니다.
방금 점검 결과를 daily-check.md 파일로 만들어서 저장해 줘.
문제 주문, 확인 불가 항목, 정상 주문 순서로 정리해.먼저 예측해 보세요 — 읽기에는 승인 카드가 없었습니다. 이번에는 어떨까요? 파일은 어디에 생길까요?
이번에는 멈춥니다. 읽기는 통과했지만 쓰기는 승인을 기다립니다.
Creating daily-check.md 12:49 PM Waiting for approval
🔒 Create the daily check report file as explicitly requested by the user.
[Allow once] [Trust ∨] [Reject]번역: daily-check.md를 생성합니다 · 승인 대기 중 · 사용자가 명시적으로 요청한 일일 점검 보고 파일을 생성합니다 · 한 번 허용 · 신뢰 · 거부
경로도 답이 나옵니다. 에이전트가 저장 위치를 스스로 밝힙니다 — “위치는 데이터와 같은 .../nxt-kirocrew-hands-on/labs/01-agent-creation/store/daily-check.md로 하겠습니다.” 5단계의 셸과 마찬가지로 파일 도구도 연결된 프로젝트 폴더 기준으로 동작했고, 읽은 데이터 옆에 산출물을 두는 선택을 했습니다. 실행에 따라 세션 작업 폴더를 고를 수도 있습니다 — 어느 쪽이든 승인 전에 경로를 확인하는 것이 요점입니다.
누르기 전에 두 가지를 확인합니다.
Input탭에서 아직 실행되지 않은 변경 내용이 diff로 미리 보이는지 확인합니다(@@ -0,0 +1,29 @@— 줄 수는 실행마다 다릅니다). 승인은 내용을 보고 하는 결정입니다.- 위에서 밝힌 경로가 의도한 곳인지 확인합니다. 아니라면 승인 전에 위치를 지정해 다시 시킵니다.
Allow once를 선택합니다. 첫 실습에서 Trust는 고르지 않습니다. 이후 유사 호출까지 신뢰 범위가 넓어지기 때문입니다.
승인 직후 파일이 만들어지고 결과가 diff로 표시됩니다.
산출물을 대시보드에서 엽니다
답변의 파일 카드(daily-check.md)를 클릭하면 대시보드 안 파일 뷰어로 열립니다. 렌더된 보고서를 바로 읽을 수 있고, View Source로 원문도 볼 수 있습니다.
첫 업무의 산출물이 손에 잡히는 형태로 남았습니다 — 내일 아침에도 이 점검을 시키면 같은 형식의 보고가 쌓입니다.
여기서 경계가 보입니다
| 시킨 것 | 승인 카드 |
|---|---|
| 파일 읽기·대조 | 없음 |
daily-check.md 생성 — 쓰기 | 있음 |
이 실습의 세 번째 결론입니다. 읽는 것은 통과하고 쓰는 것은 멈춥니다. 이 판단은 모델이 하지 않았습니다. 모델은 두 번 다 도구를 호출했습니다. 런타임이 도구의 성격을 보고 멈춰 세웠습니다. 조회 권한은 주되 결재권은 아직 주지 않은 상태와 같습니다.
- 도구 결과와 모델이 덧붙인 설명을 구분했습니다.
- 읽기에는 승인이 없고 쓰기에는 승인 카드가 뜨는 것을 확인했습니다.
- 승인 카드에서 파일이 생성될 경로와 변경 내용을 확인했습니다.
Step 8: 정리
이 실습은 대화 밖에 세 가지를 남깁니다 — 산출물, 레슨, 크루 설정. 정리는 삭제가 아니라 남길 것을 정하는 일입니다. 매 Lab 끝에 하는 정리(레슨)와 과정을 끝낼 때만 하는 완전 정리(크루·세션 삭제)를 구분합니다.
산출물은 그대로 둡니다
daily-check.md는 지우지 않아도 됩니다 — 이후 랩에 지장을 주지 않고, 어디에 생겼는지 8단계에서 확인한 것으로 이 실습의 목적은 끝났습니다. 프로젝트 폴더에 처음 보는 .kiro/ 폴더가 생겼을 수도 있습니다 — 세션이 프로젝트 폴더를 사용하기 시작할 때 Kiro가 만드는 메타 폴더로, 그대로 둡니다.
레슨을 확인합니다 — 매 Lab 공통
에이전트가 스스로 규칙을 저장했을 수 있습니다.
kirocrew learn list이 실습을 시작하기 전에 없던 항목이 생겼다면 제거합니다.
완전 정리 — 과정을 여기서 끝내는 경우에만
다음 Lab을 이어서 진행한다면 이 절은 건너뜁니다 — Lab 2가 이 크루와 세션을 그대로 사용합니다.
과정을 끝내는 경우에는 Agent Capabilities → Crews에서 nxt-store-ops 카드의 삭제를 선택하고, 세션도 목록에서 삭제합니다.
주의. 대시보드의 삭제는 브라우저 기본 확인 대화상자를 씁니다. 화면에서 직접 누릅니다.
삭제 후 설정에서 사라졌는지 확인합니다. agents에서 nxt-store-ops가 없어야 합니다.
| macOS | Windows PowerShell |
|---|---|
cat ~/.kiro/crew/config.json | type $HOME\.kiro\crew\config.json |
- 레슨 목록을 확인했습니다.
성공 조건
+ New crew로nxt-store-ops크루를 만들었고 카드가 목록에 나타났습니다.- 워크스페이스를 새로 만들었고
DIRECTORY가 자동으로 채워지는 것을 봤습니다. - 메모리 스토어에는
+ New항목이 없다는 것을 확인했습니다. - 설정 파일에서
agents.nxt-store-ops블록을 찾았습니다. - 크루를 바꾸자 폴더 칩이
Project로 리셋되는 것을 봤고, 프로젝트 폴더를 다시 연결했습니다. pwd결과가 재연결한 프로젝트 폴더와 일치하는 것을 확인했습니다 — 셸 도구가 폴더 연결을 따라간다는 뜻입니다.- 첫 업무에서 명확한 재고 부족 문제를 찾았고, 에이전트가 중복 의심을 다루는 방식을 관찰했습니다(인용 기록에서는 스스로 제기하지 않았습니다 — 제기했다면 그 차이도 기록해 둡니다).
- 도구 결과와 모델이 덧붙인 설명을 구분했습니다.
- 읽기에는 승인이 없고 쓰기에는 승인 카드가 뜨는 것을 확인했습니다.
- 산출물의 위치를 승인 카드에서 확인했습니다.
실패를 학습 기회로 사용하는 방법
| 증상 | 먼저 확인할 항목 |
|---|---|
| 크루 목록에 새 크루가 안 보임 | Apply & Restart를 눌렀는지 |
| 크루 칩 목록에 안 나옴 | Apply & Restart 후 세션을 새로 만들었는지 |
| 워크스페이스 폴더가 디스크에 없음 | 정상입니다. 처음 사용할 때 생성됩니다 |
| 에이전트가 store 파일을 못 찾음 | 폴더 칩이 Project(미연결)로 남아 있는지 — 크루 전환 후 프로젝트 폴더를 다시 연결했는지 확인 |
| 문제 주문을 못 찾음 | 프로젝트 폴더가 nxt-kirocrew-hands-on으로 연결됐는지, 두 파일 경로가 프롬프트에 모두 있는지 |
| 쓰기인데 승인 카드가 없음 | 모드가 Trust 또는 YOLO인지, 이전에 Trust로 승인했는지 |
| 읽기인데 승인 카드가 뜸 | 작업 폴더 밖을 탐색하는 명령인지, 명령에 쓰기 동작이 섞여 있는지 |
핵심 정리
에이전트를 만든다는 것은 설정 한 덩어리를 정하는 일입니다. 무엇을 물려받고, 어디서 일하고, 무엇을 기억하고, 언제 불려 나올지 — 채용 계약서 한 장입니다.
만들었으면 일을 시켜야 압니다. 첫 업무에서 에이전트는 수치 대조 같은 기계적인 문제는 정확히 잡습니다. 그러나 시키지 않은 의심은 하지 않습니다 — 무엇을 의심하게 할지, 무엇을 사람이 걸러 읽을지 정하는 것이 관리자의 일입니다.
에이전트의 한 답변 안에서도 신뢰 수준이 다릅니다. 도구가 돌려준 값과 모델이 덧붙인 설명을 나눠서 읽습니다.
무엇을 허가할지는 모델이 정하지 않습니다. 읽기는 통과하고 쓰기는 멈춥니다 — 멈춰 세운 것은 런타임입니다.
확장 질문
먼저 스스로 답해 본 뒤 접힌 답과 비교해 보세요.
TRIGGERS를 서로 다르게 준 크루를 여러 개 만들면 오케스트레이터는 무엇을 근거로 고르는가?
생각해 볼 답
폼 설명 그대로입니다 — 오케스트레이터가 요청 문장과 각 크루의 트리거 문장을 의미로 대조해 고릅니다. 키워드 매칭이 아니라 자유 문장 해석이므로, 크루끼리 트리거가 겹치면 선택이 흔들립니다. 서로 배타적인 업무명으로 쓰는 것이 요령이고, 자동 선택에 넣지 않을 크루는 비워 둡니다.
메모리 스토어를 나눌 수 없다는 것은 여러 팀이 한 Kiro Crew를 쓸 때 어떤 문제를 만드는가?
생각해 볼 답
한 팀이 가르친 것이 다른 팀 크루에도 적용됩니다 — A팀이 “보고서는 영어로”를 교정하면 B팀 크루도 영어로 보고할 수 있습니다. 팀 사이의 정보가 기억을 타고 새는 것도 문제입니다. 격리가 필요하면 설치 자체를 나누거나, 기억을 시스템 메모리가 아닌 파일로 관리해 저장소 권한으로 통제합니다 — Lab 3의 주제입니다.
워크스페이스의 COPY FROM은 어떤 상황에서 쓸모가 있는가?
생각해 볼 답
기존 워크스페이스의 산출물을 물려받아 시작할 때입니다. 이번 분기 크루를 만들며 지난 분기 자료를 복제하거나, 실험용 크루에 복제본을 줘서 원본을 보호하거나, 같은 자료 위에서 설정만 다른 크루를 비교할 때 씁니다.
승인 경계가 읽기와 쓰기로 갈린다면, 읽기만으로 할 수 있는 위험한 일은 무엇인가?
생각해 볼 답
유출입니다. 읽은 내용은 답변으로 흘러나옵니다 — 민감 문서 요약, 시크릿·개인정보 수집, 폴더 구조 정찰이 전부 읽기만으로 됩니다. Step 6의 실패 기록에서 봤듯 작업 폴더 밖 탐색은 읽기여도 승인이 걸립니다 — 승인 경계가 “변경”만이 아니라 “범위”도 지킨다는 뜻입니다.
오늘의 첫 업무를 다음 영업일 아침에도 자동으로 시키려면 무엇이 더 필요한가? (Lab 6의 예고)
생각해 볼 답
세 가지입니다 — 지시를 저장된 절차로 만드는 것(스킬, Lab 2), 시간이 되면 실행하는 트리거(스케줄, Lab 6), 결과가 도착할 곳(보고 파일·알림). 그리고 자동이 되어도 쓰기 승인 경계는 사라지지 않습니다 — 사람이 없는 시간의 승인을 어떻게 다룰지가 Lab 6·7의 주제입니다.
자기 상황으로 연습하기 — 테마 팩
클론한 저장소의 themes/program-office/는 방금 밟은 흐름을 대학 사업단 상황으로 다시 도는 테마 팩입니다. 파일이 미리 준비되어 있어 바로 시작할 수 있습니다.
themes/program-office/README.md를 엽니다 — 당신은 NXT대학교 AI교육사업단의 담당자입니다. Lab별 매핑 표도 이 파일에 있습니다.- 크루를 하나 더 온보딩합니다 — NAME
nxt-program-office, TRIGGERS모집 점검, 과정 공지, 결과 보고, 워크스페이스도 새로 만듭니다.Apply & Restart와 프로젝트 폴더 재연결까지 — 본문에서 밟은 함정을 이번에는 피해 보세요. - 첫 업무를 시킵니다.
themes/program-office/recruit/courses.md 와
themes/program-office/recruit/applicants.md 를 읽고,
모집 현황을 정원·마감·충족률 기준과 대조해서 문제를 보고해 줘.
확실하지 않은 것은 추측하지 말고 확인 불가로 표시해. 파일은 만들지 마.- 스토어에서 본 패턴이 재현되는지 관찰합니다 — 기준에 걸리는 과정을 찾아내는지, 같은 학생의 신청 2건을 어떻게 다루는지. 이 파일들에도 문제가 심어져 있습니다.
시간이 남으면 같은 구조를 자기 업무의 소재로 바꿔 한 번 더 만들어 봐도 좋습니다 — 실제 민감 데이터 대신 구조만 재현한 가상의 예시 파일을 쓰세요.
다음 Lab으로 — 오늘의 한계 두 가지
오늘 온보딩한 담당자는 첫 업무를 해냈지만, 두 가지 한계가 남았습니다.
- 절차가 프롬프트에만 있습니다. 내일 아침에도 이 점검을 시키려면 파일 경로부터 방어선 문구까지 다시 다 써야 합니다. 절차는 담당자에게 붙어 있지 않고 매번 지시서에 있습니다.
- 시키지 않은 의심은 하지 않습니다. 이서연의 연속 주문을 그냥 지나친 것처럼, 도메인 감각은 지시에 없으면 작동하지 않습니다.
두 한계의 해법이 같습니다 — 반복할 절차와 판단 기준을 크루에 붙이는 것. Lab 2에서 오늘의 아침 점검을 스킬로 만들어 nxt-store-ops에 매핑합니다. 크루와 세션을 그대로 두고 이어 가세요.
NxtCloud Workshop