api-design-principles
REST·GraphQL API를 새로 설계하거나, 엔드포인트·스키마·버전 관리·에러 형식·페이지네이션을 정하거나 API 스펙을 리뷰할 때. Triggers - API 설계, REST, GraphQL, 엔드포인트 설계, API…
일을 여러 에이전트(서브에이전트·teammate·Orca 워커·Codex)에 나눠 맡기거나, 코더↔리뷰어처럼 에이전트끼리 주고받게 할 때 사용. 리드가 run과 항목을 올리고, 워커가 가져가 결과·공유 노트·배운 점을 남기고, 리드가 모아 메모리로 올린다. 압축·재시작 뒤에도 이어진다. Triggers - 병렬로 나눠, 워커에 맡겨, 서브에이전트들, 오케스트레이터, orchestration, 메모리박스, memorybox.
Claude Code
$ npx -y skills add jh941213/adlc-harness --skill memorybox --agent claude-code
Codex
$ npx skills add jh941213/adlc-harness --skill memorybox -a codex -y
Cursor
$ npx skills add jh941213/adlc-harness --skill memorybox -a cursor -y
Gemini CLI
$ npx skills add jh941213/adlc-harness --skill memorybox -a gemini-cli -y
GitHub Copilot
$ npx skills add jh941213/adlc-harness --skill memorybox -a github-copilot -y
OpenCode
$ npx skills add jh941213/adlc-harness --skill memorybox -a opencode -y
Windsurf
$ npx skills add jh941213/adlc-harness --skill memorybox -a windsurf -y
name: memorybox description: 일을 여러 에이전트(서브에이전트·teammate·Orca 워커·Codex)에 나눠 맡기거나, 코더↔리뷰어처럼 에이전트끼리 주고받게 할 때 사용. 리드가 run과 항목을 올리고, 워커가 가져가 결과·공유 노트·배운 점을 남기고, 리드가 모아 메모리로 올린다. 압축·재시작 뒤에도 이어진다. Triggers - 병렬로 나눠, 워커에 맡겨, 서브에이전트들, 오케스트레이터, orchestration, 메모리박스, memorybox.
여러 에이전트가 같이 일할 때의 **팀 기억**이다. 메시지를 전하고 깨우는 통로는 호스트 것(Claude 서브에이전트 결과·teammate 메시지, Orca `orchestration`)을 그대로 쓴다. 메모리박스는 그 위에서 세 가지를 맡는다. 내용은 당사자끼리 직접 주고받고, 상태는 기록으로 남긴다.
| 무엇 | 어디 | 누가 쓰나 | |---|---|---| | 내용: 요청(Ask)·결과(Result)·배운 점(Learned) | 항목 파일 `open/ claimed/ done/<id>.md` | 리드(post)·워커(done) | | 상태: 누가 무엇을 어느 라운드에서 어디까지 | 들어 있는 폴더 + `runs/<run>/log.md`(한 줄 envelope) | **스크립트가 자동으로** | | 공유 기억: 작업 중 발견한 저장소 지식·결정 | `runs/<run>/log.md`의 note | 모든 워커(`note`) |
규칙은 스크립트가 강제한다: 가져가기는 원자적 rename이라 하나만 이기고, 끝내기는 가져간 본인만, 선행 작업이 성공하기 전에는 가져갈 수 없고, 라운드는 5회까지다. 프롬프트로만 지키는 규칙에 기대지 않는다.
<메모리 폴더>/memorybox/ # auto memory 폴더 안. 같은 저장소의 worktree가 공유한다 runs/<run>/RUN.md log.md # 목표·계획 / append-only envelope·note open/ claimed/ done/ <id>.md # 항목. 상태 = 폴더 workers/<워커>.md # 워커 체크포인트(재시작 복구용) artifacts/ archive/YYYY-MM/ BOARD.md
명령: `node "<이 스킬 폴더>/scripts/memorybox.mjs" <명령> [--dir <메모리박스>]`. 인자 없이 실행하면 사용법이 나온다. `path`로 절대경로를 얻는다.
| 명령 | 하는 일 | |---|---| | `run-create --objective <목표>` | run을 만들고 ID 출력. RUN.md `## Plan`에 리드가 하위 작업과 짝을 적는다 | | `post --title <제목> [--run] [--role] [--agent claude\|codex] [--to] [--depends a,b] [--thread] [--kind]` + stdin(Ask, 1,000자) | 항목을 올린다. 라운드는 스크립트가 센다(같은 thread에서 같은 역할의 N번째 = N라운드). 활성 50개·라운드 5 초과·없는 run·없는 선행 항목은 거절. 닫힌 run에 올리면 다시 연다 | | `claim <id> --by <워커>` | 가져가기. 이미 가져갔거나 선행 작업이 성공 전이면 실패 | | `done <id> --by <워커> --outcome succeeded\|failed` + stdin(`## Result` 1,200자·`## Learned` 3줄) | 본인만. 긴 결과는 artifacts로 | | `note --run <run> --by <워커> --type knowledge\|decision` + stdin(한 줄 300자) | 공유 기억에 한 줄 | | `log <run> [--tail N]` · `board` · `show <id>` · `worker <워커>` | 읽기 | | `checkpoint --by <워커>` + stdin(800자) | 내가 쥔 항목과 멈춘 지점 | | `release <id>` · `sweep [--dry-run]` | 리드 전용: 되돌리기 · Learned와 새 knowledge를 꺼내고 done을 archive로, 남은 일이 없는 run은 닫음 |
리드는 나누고, 짝을 짓고, 지켜본다. **내용을 중계하지 않는다**: 워커에게는 항목 ID와 파일 경로만 넘기고, 워커끼리는 항목·PR·log로 직접 주고받는다(중간에서 요약하면 내용이 깎인다).
1. **run과 계획:** `run-create`. 계획은 RUN.md `## Plan`에 적어 압축돼도 남긴다. 큰 일은 계획 자체를 planner 항목으로 맡기고, 다른 모델의 plan-reviewer 항목(`--depends` 계획)으로 검토받는다. 2. **나누기:** 하위 작업마다 `post --run --role --depends`. Ask는 다섯 칸: Target(파일·컴포넌트), Change(만들 결과), Constraints(지킬 것·건드리지 말 것), Ownership(고쳐도 되는 범위), Observable acceptance(완료를 증명할 테스트·출력). 파일이 겹치지 않게 나눈다. 3. **짝 짓기:** 코더와 리뷰어는 다른 모델로(`--agent`): Claude가 짠 것은 Codex가, Codex가 짠 것은 Claude가 본다. 같은 모델은 자기 결과를 후하게 본다. 한 모델뿐이면 새 컨텍스트로 분리한다. 4. **띄우기:** 워커마다 아래 브리프를 넘긴다. 서브에이전트는 auto memory도 SessionStart도 받지 못하므로 브리프가 유일한 통로다. 코더는 각자 worktree(Claude Code 서브에이전트 `isolation: worktree`, Orca `--worktree`)에서, planner·reviewer는 읽기 전용으로.
5. **지켜보기:** 호스트 알림을 기다린다. 폴더를 반복해서 들여다보지 않는다. 현황은 `board`, 흐름은 `log`. 멈춘 claimed(24시간)는 표시만 되고 자동 회수하지 않는다. 확인한 뒤에만 `release`. 말을 걸 때는 행동이 필요할 때만 한다. 6. **프로토콜:** 리뷰·질문·테스트 실패·계획 수정은 같은 `--thread`에 다음 라운드 항목으로 잇는다(`references/protocols.md`). 5라운드를 넘기려 하면 스크립트가 막는다: 멈추고 사용자에게 무엇이 아직 실패하는지 보고한다. 7. **합치기:** 리뷰를 통과한 브랜치를 하나씩(또는 묶어서) 합치고 전체 검사를 돌린다. 묶어서 실패하면 반으로 나눠 범인을 찾고, 그 코더에게 test-failure 항목으로 돌려보낸다. 8. **정리:** `sweep`이 내놓는 Learned와 knowledge 줄을 하나씩 `memory` 스킬 A로 판단해 메모로 쓰거나 `hits`를 올린다. decision 중 오래 갈 것은 docs로 옮긴다(문서 동기화). 승격은 `memory` 스킬 D.
너는 워커 <이름>(<역할>, <모델>)이다. 맡은 일은 메모리박스 항목 <ID>다.
MEMORYBOX=<메모리박스 절대경로> SCRIPT=<memorybox.mjs 절대경로> RUN=<run ID>
1. node "$SCRIPT" claim <ID> --by <이름> --dir "$MEMORYBOX"
실패하면(다른 워커가 가져갔거나 선행 작업이 남음) 멈추고 그 메시지만 보고한다.
2. node "$SCRIPT" show <ID> --dir "$MEMORYBOX" 로 Ask를 읽고, node "$SCRIPT" log "$RUN" --dir "$MEMORYBOX" 로 다른 워커의 knowledge·decision을 확인한다. Ask 범위만 한다.
3. 작업 중:
- 다른 워커도 알아야 할 저장소 사실(테스트 명령, 빌드 특이점)이나 정한 것은 그때그때 한 줄로:
echo "<한 줄>" | node "$SCRIPT" note --run "$RUN" --by <이름> --type knowledge|decision --dir "$MEMORYBOX"
- 큰 단계를 끝낼 때마다 멈춘 지점을 남긴다(재시작하면 여기서 이어 간다):
echo "<브랜치·한 것·다음 할 것>" | node "$SCRIPT" checkpoint --by <이름> --dir "$MEMORYBOX"
4. 끝나면 아래를 실행한다(MB 줄은 들여쓰지 않는다):
node "$SCRIPT" done <ID> --by <이름> --outcome succeeded|failed --dir "$MEMORYBOX" <<'MB'
## Result
한 일, 바꾼 파일·브랜치·PR, 실행한 검증 명령과 결과
## Learned
코드만 봐서는 알 수 없고 오래 유효하며 잊으면 손해인 사실(최대 3줄, 없으면 이 절을 빼라)
MB
5. 최종 응답은 "<ID> done (succeeded|failed)"와 결과 요약 세 줄. 그 뒤에는 멈춘다. "대기 중" 같은 말을 덧붙이지 않는다.
메모리박스 파일을 직접 고치거나 옮기지 않는다. 다른 워커의 항목은 건드리지 않는다.
재시작했다면 먼저 node "$SCRIPT" worker <이름> --dir "$MEMORYBOX" 와 git log로 어디까지 했는지 확인한다.AI SDLC 루프(의도 → 설계 → 계획 → 구현 → 검증 → 리뷰 → 출시 → 학습)를 Claude Code·Codex·GitHub Copilot CLI에서 같은 방식으로 돌리는 개발 하네스 플러그인이다. 상시 컨텍스트와 hook은 최소로 두고, 나머지는 필요할 때만 읽히는 스킬로 둔다. 루프: /loopeng 하나로 의도부터 PR·학습까지 간다. 사람은 의도·설계·계획·출시 게이트에서만 승인하고, 단계마다 문서와 승인 기록이 커밋으로 남는다.
REST·GraphQL API를 새로 설계하거나, 엔드포인트·스키마·버전 관리·에러 형식·페이지네이션을 정하거나 API 스펙을 리뷰할 때. Triggers - API 설계, REST, GraphQL, 엔드포인트 설계, API…
Python asyncio·async/await 코드를 작성하거나 디버깅할 때(동시 I/O, gather·TaskGroup, 타임아웃, 세마포어, 큐, 취소, 이벤트 루프 블로킹). Triggers - asyncio,…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
빌드·타입체크·컴파일이 실패해 에러를 고칠 때. Triggers - 빌드 에러, build error, 컴파일 에러, tsc 에러, 타입 에러, 빌드 실패, build fix. 런타임 에러·테스트 실패는…
고객 제출용 SI/AO 산출물(아키텍처설계서, 인터페이스설계서, DB설계서, 요구사항추적표, 테스트결과서, 매뉴얼, 운영보고서)을 요청받았을 때 사용. Triggers - 검수 산출물, 납품 문서, 테스트결과서 뽑아줘.
변경을 커밋·푸시하고 PR을 만들 때 사용. Triggers - 커밋해, 푸시해, PR 만들어, PR 올려, commit and push. 리뷰·git log·diff 조회만 할 때는 쓰지 않는다.
Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.
Drives the GUI of a visible local app window through `orca computer`: accessibility tree, clicks, typing, menus, dialogs, and…
Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…
Create a new Architecture Decision Record with sequential numbering and AgentDB registration