[00:00]
지금까지는 AI 에이전트 여러 개를 동시에 실행하는 것에 대해 크게 신경쓰지 않았어요.
[00:01]
솔직히 하나만 제대로 작동시키기도 벅찼거든요.
[00:04]
하지만 이제 Claude가 혼자서도 잘 작업할 수 있다는 능력에 조금씩 자신감이 생기고
[00:06]
있고
[00:08]
그리고 저 자신이 일종의 맹수 조련사 역할을 할 수 있다는 능력에도 자신감이 생기면서
[00:10]
이제 한 마리 더 우리 안에 들여보내는 아이디어를 가지고 놀기 시작했어요.
[00:12]
하지만 그게 어떻게 작동하는 걸까요?
[00:16]
서로 발을 밟고 다니지 않을까요?
[00:19]
원하는 만큼 많은 Claude를 만드는 방법을 보여드릴게요.
[00:21]
정신을 잃지 않고 같은 작업을 할 수 있도록 말이죠.
[00:23]
아, 그리고 안녕하세요, 저는 멜입니다.
[00:25]
앱과 사이트 그리고 오픈소스 프로젝트를 만들고 있어요.
[00:27]
그럼 Claude 이야기로 돌아가 볼까요.
[00:29]
문제가 뭘까요?
[00:31]
두 에이전트가 같은 디렉토리에서 실행될 때
[00:37]
다른 에이전트가 만든 문제들과 얼마나 빨리 충돌하기 시작할지 상상할 수 있을 거예요.
[00:41]
파일을 포맷하고, 편집하고, 테스트를 실행할 때
[00:43]
꽤 빨리 망가질 거라는 게 명백하죠.
[00:46]
하지만 Anthropic은 똑똑해서
[00:48]
이미 이 문제에 대해 생각해두고
[00:49]
Git Work Trees라는 길로 저를 인도했어요.
[00:51]
이것은 Git의 내장 기능으로
[00:53]
같은 레포지토리의 여러 복사본을 가질 수 있게 해줍니다.
[00:55]
각각 고유한 파일 세트를 가지고 말이죠.
[00:58]
사용하려면 git work tree라고 입력하면
[01:00]
사용법을 알려줄 거예요.
[01:02]
하지만 이걸 하면서도 정신을 유지하는 방법은 다음과 같습니다.
[01:04]
저는 GWT라는 스크립트를 작성했는데요.
[01:09]
물론 get wild의 줄임말입니다.
[01:11]
Thor.
[01:13]
그만해요.
[01:16]
그건 getting wiggy titted예요.
[01:19]
GWT 다음에 이름을 붙여서 사용합니다.
[01:21]
스크립트 내부를 살펴보면
[01:24]
실제로는 꽤 간단하다는 걸 알 수 있어요.
[01:29]
그리고 스마트 따옴표가 제가 LLM과 함께 이 작업을 해왔다는 사실을 드러낼 거예요.
[01:31]
여기에 EM 대시도 있을지도 모르고요.
[01:36]
몇 가지 변수를 설정합니다.
[01:40]
메인 브랜치가 main인지 master인지 알아내려고 해요.
[01:42]
그리고 여기에 공유되는 git workree 명령어들이 있고요.
[01:44]
기본적으로 T-Max 안에서 실행 중이면 창 이름을 바꿉니다.
[01:47]
T-Mox 밖에서 실행 중이면
[01:50]
대신 새 세션과 창을 설정합니다.
[01:53]
물론 이 스크립트와 다른 스크립트들을 설명란에 링크와 함께 공유할게요.
[01:56]
운 좋게도 이미 두 개의 이슈가 준비되어 있어요.
[01:58]
실제로 이전 비디오에서 언급한 /NI 명령어로 설정한 것들이에요.
[02:01]
하나는 모든 slim 템플릿을 ERB로 변환하는 것이고
[02:04]
다른 하나는 남은 뷰 컴포넌트들을 flex 컴포넌트로 변환하는 것입니다.
[02:07]
이런 변경사항들은 예전에는
[02:09]
아마 영원히 미뤄뒀거나
[02:11]
시간을 투자할 가치가 없다고 느꼈을 거예요.
[02:13]
하지만 이제 에이전트가 있으니까
[02:16]
Claude가 편집하게 두고 저는 조금만 정리하면
[02:18]
준비가 되는 거죠.
[02:20]
첫 번째 work tree를 설정해볼까요.
[02:21]
7629라고 불러요.
[02:24]
7629,
[02:26]
보시다시피 이미 한 번 해봤어요.
[02:30]
Slimless라고 부르죠.
[02:32]
실행한 후에는 T-Mox 안의 창과 work tree와 브랜치 안에서 우리를 발견하게 될 거예요.
[02:36]
모두 같은 이름으로 된
[02:38]
그리고 T-Mox 안에서도 작동해요.
[02:41]
다른 창을 하나 더 만들어서 다른 것을 위해 호출해보죠.
[02:44]
그래서 첫 번째
[02:47]
work tree를 설정해보겠습니다.
[02:49]
7629라고 불리는 것이에요.
[02:51]
그래서 7629,
[02:54]
보시다시피 이미 한 번 해봤어요.
[02:55]
Slimless라고 부르죠.
[02:58]
실행한 후에는
[03:02]
T-Mox 안의 창과 work tree와
[03:03]
브랜치 안에서 우리를 발견하게 될 거예요.
[03:06]
모두 같은 이름으로 된
[03:08]
그리고 T-Mox 안에서도 작동합니다.
[03:10]
다른 창을 하나 더 만들어서 다른 것을 위해 호출해보죠.
[03:14]
모두 같은 이름의 브랜치입니다. 그리고 이건
[03:17]
T-Mox 내부에서도 작동합니다. 그러면
[03:19]
다른 창을 하나 더 만들어서 다른
[03:22]
이슈 763을 위해 호출해보겠습니다.
[03:24]
플렉스 모어입니다.
[03:28]
이제 설명적인 제목이 있는 두 개의 창이 있고
[03:31]
서로 전환할 수 있습니다.
[03:33]
그래서 현재 작업 중인 컨텍스트를
[03:35]
항상 알 수 있습니다. 그리고
[03:38]
각각 자체 Claude를 가질 수 있습니다. 자,
[03:39]
우리의 Claude를 작업에 투입해보겠습니다.
[03:41]
이를 위한 또 다른 스크립트가 있습니다.
[03:43]
단순히 Claude를 실행한 다음 타이핑을 시작할 수도 있지만,
[03:46]
초기 프롬프트와 몇 가지 옵션으로
[03:49]
Claude를 실행하여 우리가 원하는
[03:51]
방향으로 이미 설정할 수도 있습니다.
[03:54]
저는 이미 Claude가 이슈 7629에서
[03:55]
작업하기를 원한다는 것을 알고 있습니다.
[03:59]
그리고 이를 도와주는 스크립트를
[04:01]
작성했습니다. 그러면
[04:04]
claude start라는 스크립트를 보면
[04:07]
기본적으로 초기 프롬프트와 함께
[04:08]
Claude를 실행하는 것을 볼 수 있습니다.
[04:11]
"이슈에서 작업 시작"이라고 말하고
[04:13]
전달한 번호를 입력합니다. "열린 마음을 유지하고
[04:15]
제안된 접근 방식을 재고려해도 됩니다.
[04:17]
새로운 관련 정보를 발견하면
[04:20]
이슈를 업데이트하세요. 완료 후에는
[04:22]
변경사항을 검토하고
[04:24]
단순화할 수 있는 것들이 있는지 확인하거나
[04:25]
사용하지 않는 것들을 제거하세요.
[04:28]
마지막으로 이 이슈에 대한 PR이 있다면
[04:30]
변경사항으로 PR을 만드세요. 업데이트되었습니다.
[04:33]
진행 상황을 포함하세요." 이것이
[04:35]
프롬프트입니다. 제가 목표로 하는 것은
[04:39]
Claude가 질문하지 않고도 가능한 한
[04:42]
멀리 그리고 빠르게 실행되도록 하는 것입니다.
[04:46]
제가 같은 것들로 후속 조치를 취할 필요 없이 말이죠.
[04:48]
저는 항상 Claude가 돌아가서
[04:50]
변경사항을 살펴보기를 원합니다.
[04:52]
조금 더 간소화할 수 있는지 확인하세요.
[04:55]
그래서 처음부터 포함시키고 그가 자유롭게
[04:58]
활동하도록 하겠습니다. 그리고 이와 같은
[05:01]
약간 큰 변경사항들에서는
[05:03]
PR을 갖는 것이 좋습니다. GitHub에서
[05:05]
PR 리뷰로 인라인 코멘트를 작성할 수 있고
[05:07]
완료 후에는 Claude에게
[05:10]
리뷰를 읽고 게시한 코멘트들로부터
[05:13]
변경사항을 만들라고 말할 수 있습니다.
[05:16]
인라인으로 라인을 참조하는 것이
[05:18]
더 쉽습니다. 왜냐하면 우리는 지금
[05:21]
다른 작업 디렉토리에서 작업하고 있기 때문입니다.
[05:24]
음,
[05:27]
Claude가 루트 디렉토리에서
[05:28]
일부 명령을 항상 실행하도록 허용했더라도,
[05:31]
그는 이 새로운 워크 트리 디렉토리에서
[05:34]
할 수 있는지 다시 물어볼 것입니다. 그래서
[05:35]
제가 그가 사용할 수 있다고 알고 있는 몇 가지 도구를 줄 것입니다.
[05:38]
그가 최대한 멀리 그리고 빠르게
[05:40]
나아갈 수 있도록 하는 정신으로
[05:43]
제가 도와주지 않아도 되게 말이죠.
[05:45]
그래서 편집하고 생성할 수 있다고 말하겠습니다.
[05:48]
이것들은 내장된 액션들입니다. 하지만
[05:50]
gh로 시작하는 bash 명령도
[05:52]
실행할 수 있습니다. 그것은
[05:54]
GitHub 명령들입니다. rg, find, ls로 시작하면
[05:57]
이것들은 모두 파인더 메서드들,
[05:59]
정보 수집 메서드들, 명령들입니다. 그리고
[06:02]
제 bin format과 bin check 스크립트도
[06:04]
실행할 수 있습니다. 파일을 포맷하고
[06:07]
테스트와 체크를 실행하는 데 사용합니다.
[06:09]
그리고 모든 것을 말이죠. rails 명령과
[06:12]
git 명령도 실행할 수 있습니다.
[06:14]
물론, 원하는 만큼 적게 또는 많이
[06:16]
추가할 수 있습니다. Claude를 신뢰해서
[06:18]
더 많은 권한을 줄 수도 있고
[06:21]
원하는 만큼 적게 줄 수도 있습니다.
[06:23]
할 수 있습니다. 또한 이런 식으로도 호출할 수 있죠.
[06:26]
위험하게... 이름이 뭐였는지 까먹었네요.
[06:30]
뭐라고 불렀는지 기억이 안 나는데,
[06:32]
Claude가 완전히 자유롭게 작업할 수 있도록 하는
[06:36]
플래그가 있어요. 안전장치 없이 완전히 마음대로 하게 하는 거죠.
[06:39]
그걸 사용할지는 여러분이 결정하시면 됩니다.
[06:41]
준비되셨다면 말이죠.
[06:44]
네,
[06:47]
일단 이걸로 해보겠습니다.
[06:49]
좋아요, 그럼 해봅시다.
[06:52]
claude
[06:53]
start
[06:55]
7629
[06:57]
이 하나에는 이렇게 하고, 다른 하나에는
[06:59]
claude
[07:01]
start 7630이라고 하겠습니다.
[07:06]
이제 두 이슈 사이를 전환하면서
[07:09]
Claude가 작업하는 걸 지켜볼 수 있습니다.
[07:13]
Claude가 어떤 정보가 필요하거나
[07:16]
음
[07:19]
작업을 완료했을 때
[07:21]
알려주겠죠. 그러면
[07:24]
터미널 벨이 울리고
[07:27]
응답할 수 있습니다.
[07:30]
Claude가 작업하는 동안
[07:33]
새로운 이슈를 설정할 수도 있고,
[07:36]
우리가 직접 작성하고 싶은 코드도
[07:37]
작업할 수 있어요. Claude는 많은 것들을 잘하지만
[07:39]
여전히 디자인적인 부분이나
[07:42]
세부사항들은 직접 작성하고 싶을 수 있거든요.
[07:45]
물론 메인 작업 세션에서
[07:47]
그런 작업을 할 수 있고
[07:49]
잠깐 쉬거나 다른 걸 봐야 할 때만
[07:52]
Claude에게 응답하면 됩니다.
[07:54]
그러는 동안에도
[07:56]
Claude는 백그라운드에서
[07:58]
워크트리에서 혼자 작업하고
[08:00]
테스트를 실행하고
[08:03]
때로는
[08:05]
문제를 일으킬 수도 있어요.
[08:07]
하지만 조금만요. 그리고 네, 이게 전부입니다.
[08:10]
도움이 되셨기를 바랍니다. 만약 그렇다면
[08:13]
구독 버튼을 눌러주세요.
[08:16]
작은 클릭 한 번이면 됩니다. 그리고 계속 지켜봐 주세요.
[08:20]
네, 이번 시간은 여기까지이고
[08:24]
다음에 또 뵙겠습니다.