AGENT 활용

하네스 엔지니어링 시도중...

원래는 Superpowers를 쓰고 있었는데, 최근에는 여기에 compound engineering 비슷한 흐름을 더해서 테스트해보고 있다.

다만 아직 제대로 테스트가 끝난 건 아니다. 생각보다 토큰을 많이 먹는다. 특히 프론트랑 백엔드를 0부터 전부 만들려고 하면 토큰이 너무 많이 든다.

그래서 최근에는 토큰 절약 스킬들을 살펴보고 있다. 시도해볼려고하는 것은 context-mode와 rtk 정도 생각하고 있다.

Superpowers에서 괜찮았던 것

그래도 추천하고 싶은 건 Superpowers에 있는 Brainstorming 스킬이다.

내가 프롬프트를 대충 던져도, 부족한 부분이나 더 필요한 정보를 계속 물어봐준다. 바로 답하기 애매한 부분은 선택지도 준다. 그래서 내가 뭘 만들고 싶은지 아직 흐릿할 때 꽤 유용했다.

비슷하게 grill-me 같은 스킬도 괜찮다. 이것도 내가 애매하게 말한 걸 기준으로 계속 질문하면서 빠진 정보를 채워주는 느낌이다.

물론 내가 뭘 해야 하는지, 어떤 파일을 수정해야 하는지 정확히 알고 있다면 이런 스킬을 쓸 필요는 별로 없다. 그럴 땐 그냥 파일을 지정하고 바로 프롬프트를 입력해서 실행하거나 좀 큰 규모면 plan mode로 검토하고 실행하는 것이 나았다.

반대로 내가 뭘 해야 할지 애매하거나, 요구사항이 아직 정리되지 않았거나, 어떤 파일을 봐야 할지 모를 때는 Brainstorming이나 grill-me 같은 걸 먼저 쓰는 게 나았다.

Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.

Ask the questions one at a time.

If a question can be answered by exploring the codebase, explore the codebase instead.

컨텍스트 관리

출력 토큰이 비싼 것도 문제지만, 입력 토큰도 컨텍스트가 커질수록 꽤 부담이 된다.

그리고 컨텍스트가 쌓이면 에이전트가 점점 멍청해지는 느낌이 있다. 이미 끝난 내용을 계속 고려하거나, 예전 요구사항과 지금 요구사항을 섞거나, 필요 없는 파일까지 다시 보려고 한다.

내 체감은 대충 이렇다.

70% 근처: 슬슬 압축을 고려
80% 이상: 웬만하면 compact
태스크가 끝나거나 주제가 바뀜: clear 또는 새 세션

나는 작업 도중이어도 80% 정도 넘으면 거의 무조건 압축시키는 편이다. 70% 정도에서도 압축할 때가 있다. 체감상 70%에 가까워질수록 점점 느려지고 답변 품질도 떨어지는 느낌이 있었다.

다만 작업 중간에 compact를 하면 그때도 멍청해지는 타이밍이 있다. compact가 내가 원하는 내용을 전부 잘 보존해주는 건 아니기 때문이다. 대화 흐름에서 중심 문장만 가져와서 요약하는 느낌이라, 내가 중요하게 생각한 세부사항이 빠질 수 있다.

Claude에서는 /compact 내가 남기길 원하는 부분 이런 식으로 어느 정도 유도할 수 있었던 것 같은데, Codex에는 그게 없어서 아쉬웠다.

그래서 요즘은 중요한 내용은 대화에만 남기지 않고 /docs/ 아래에 md 파일로 남기는 편이다.

문서로 남기는 방식

지금 생각하는 구조는 대충 이렇다.

/AGENTS.md
  에이전트가 지켜야 할 규칙, 테스트 명령, 금지사항

/docs/PRD.md
  기능 요구사항

/docs/PLAN.md
  구현 계획, 작업 순서

/docs/DESIGN.md
  디자인 규칙

/docs/DECISIONS.md
  왜 이렇게 결정했는지 기록

/docs/HANDOFF.md
  compact나 clear 전에 남기는 인수인계 문서

특히 HANDOFF.md가 꽤 중요하다.

compact 하기 전에 이런 식으로 시킨다.

compact하기 전에 /docs/HANDOFF.md에 작업내용 업데이트해줘.

포함할 것:
- 현재 목표
- 완료한 작업
- 아직 안 한 작업
- 수정한 파일
- 다음에 바로 할 일
- 조심해야 할 제약사항

그다음 새 세션이나 compact 이후에는 이렇게 시작한다.

/docs/HANDOFF.md, /docs/PRD.md, /docs/PLAN.md를 먼저 읽고
이어서 작업해줘.

이렇게 하면 컨텍스트가 날아가도 그냥 compact하거 작업하는 것보다 나은 것 같다..

태스크를 작게 나누는 게 중요함

결국 제일 좋은 건 compact가 필요한 상황까지 가기 전에 작업을 작게 나누는 것 같다.

예를 들어 이렇게 한 번에 시키는 건 별로였다.

이 프로젝트 전체를 완성해줘.
프론트, 백엔드, DB, 인증, 배포까지 다 해줘.

이러면 토큰도 많이 들고, 중간에 방향이 틀어졌을 때 되돌리기도 어렵다.

차라리 이렇게 나누는 게 낫다.

1. 요구사항 정리
2. 데이터 모델 설계
3. API 설계
4. 인증 구현
5. 메인 페이지 UI 구현
6. 테스트 추가
7. 리팩터링

그리고 각 단계가 끝날 때마다 문서를 업데이트하고, 필요하면 새 세션으로 넘어가는 방식이 더 안정적인 것 같다.

이것도 최근에 보는 중이라 100% 좋다고 말하기는 어렵다. 그래도 꽤 흥미로웠다.

간단히 말하면 DESIGN.md는 에이전트가 일관성 있는 디자인을 만들 수 있게 해주는 디자인 지침서 같은 느낌이다. 색상, 타이포그래피, 버튼, 카드, 레이아웃 같은 기준을 미리 적어두는 식이다.

요즘 DESIGN.md를 제공하는 사이트들도 좀 보인다.

getdesign.md
  여러 사이트의 DESIGN.md 예시를 볼 수 있음

designmd.me
  기존 웹사이트 URL을 넣어서 DESIGN.md를 뽑아볼 수 있음

하나 정도 테스트해봤는데 나쁘지 않았다.

작성한 DESIGN.md를 바로 에이전트에 넣기 전에 GPT에 넣고 메인 페이지만 생성해보는 식으로 미리 확인해봤는데, 빠르게 감을 보기에는 괜찮았다.

Stitch에도 넣어봤는데 결과가 꽤 일관성 있게 나왔다. 이게 DESIGN.md 때문인지 Stitch 성능이 좋아서인지는 아직 잘 모르겠다. 그래도 export할 때 DESIGN.md를 같이 주는 점은 좋았다. 당분간은 Stitch를 좀 더 활용해볼 생각이다.

DESIGN.md에 넣으면 좋을 것 같은 것

아직 정답은 모르겠지만, 대충 이런 내용은 들어가면 좋은 것 같다.

- 이 서비스가 어떤 느낌이어야 하는지
- 색상 규칙
- 폰트 크기와 굵기
- 여백 규칙
- 버튼 / 카드 / input 같은 컴포넌트 규칙
- 모바일에서 어떻게 보여야 하는지
- 접근성 관련 규칙
- 하지 말아야 할 디자인

특히 하지 말아야 할 디자인을 적는 게 생각보다 중요해 보인다.

에이전트는 냅두면 흔한 SaaS 랜딩페이지처럼 만들거나, 보라색-파란색 그라데이션 같은 걸 자주 쓰는 느낌이 있다. 그래서 이런 식으로 금지 규칙을 적어두면 좋다.

Do not:
- generic purple-blue SaaS gradient 쓰지 말 것
- 필요 이상으로 큰 hero section 만들지 말 것
- 정해진 버튼 스타일 외에 새 버튼 스타일 만들지 말 것
- 한 화면에서 font weight를 너무 많이 쓰지 말 것
- 중요한 텍스트를 너무 연한 회색으로 쓰지 말 것

지금 기준으로 제일 괜찮은 흐름

아이디어가 애매함 or 프롬프트를 보강하고 싶음
→ Brainstorming / grill-me

요구사항이 어느 정도 정리됨
→ PRD.md 작성

구현 전에
→ PLAN.md 작성

UI가 필요함
→ DESIGN.md 작성 또는 Stitch 활용

구현 단계(변경점이 확실한 경우)
→ 파일 범위 지정하고 diff 중심으로 요청

작업 도중 압축을 시도할 때
→ HANDOFF.md 업데이트

컨텍스트가 70~80% 이상 쌓임
→ compact 또는 새 세션

태스크가 끝남
→ clear

정리하면, 프롬프트를 잘 쓰는 것도 중요하지만 그보다 더 중요한 건 에이전트가 다시 읽고 이어갈 수 있는 문서를 프로젝트 안에 남기는 것 같다.

대화창에 기억을 맡기기보다는, 기억해야 할 내용을 레포에 남기는 쪽이 더 안정적이었다.