← 전체 기능

에이전트 실행v0.3.0에서 사용 가능

리스

리스는 작업 하나가 바꿀 경로를 예약해서 AI 세션 둘이 실수로 같은 파일을 고치지 않게 한다. 겹치는 리스는 OAH_LEASE_CONFLICT로 거절하고 누가 잡고 있는지 알려 준다. 리스가 편집기의 쓰기를 막을 수는 없으므로, 작업을 끝낼 때 실제로 바뀐 파일을 범위와 대조한다.

필요한 상황

AI 세션 둘이 한 저장소를 함께 쓰면 같은 파일을 쉽게 동시에 고치고, 변경이 부딪힐 때까지 아무도 알아채지 못한다.

동작 방식

  1. oah start --task T --agent A --scope PATH…로 리스를 잡는다. oah start --packet PACKET.md는 패킷에서 범위를 가져오고 같은 단계에서 의도를 묶는다.
  2. 다른 리스와 겹치는 범위는 OAH_LEASE_CONFLICT로 거절하고 누가 잡고 있는지 알려 준다. 범위 repo는 저장소 전체를 뜻한다.
  3. oah status는 모든 리스를 active나 STALE로 보여 주며 읽기만 한다. oah renew는 리스를 연장하고 범위를 바꿀 수 있고, oah release --reason은 끝내지 않고 내려놓는다.
  4. oah finish는 리스를 잡은 뒤 실제로 바뀐 파일을 범위와 대조하고, 범위를 벗어나면 OAH_SCOPE_EXCEEDED로 거절한다.
  5. oah call이 띄운 워커는 OAH_WORKER=1로 실행되고 사용자의 리스를 쓴다. 리스를 잡거나 연장하거나 내려놓거나 끝내지 않는다(OAH_WORKER_LEASE_REFUSED).

예제

따라 하기 예제에서 시작점을 확인하고 리스를 잡는다.

oah preflight --task hello-name
oah start --task hello-name --agent claude --packet .oah/tasks/hello-name/PACKET.md

요구 사항

  • git 저장소. 리스 상태는 저장소 git 폴더 안의 oah/에 있고, 모든 워크트리가 함께 보며 git status에는 나오지 않는다.

한계와 복구

  • 리스가 편집기의 다른 곳 쓰기를 막을 수는 없다. 대신 oah finish가 실제로 일어난 일을 확인한다.
  • 리스는 기본 4시간 동안 유효하다(--ttl-hours, 최대 168). 만료된 리스는 STALE로 보이고 연장할 수 없으며(OAH_LEASE_EXPIRED) 다음 oah start가 정리한다. 만료된 리스도 끝내거나 내려놓을 수는 있다.
  • 범위를 넓히려면 경로를 모두 다시 적어 oah renew --task <task> --agent <agent> --scope <path> …를 실행하거나, 기록되는 --allow-out-of-scope를 준다.
  • 맞는 작업에 다른 에이전트 이름을 쓰면 OAH_LEASE_NOT_YOURS가 나온다.

원문 문서

관련 기능