001 / 만든 이유
oah는 각자에게 맞고 AI가 발전하는 만큼 함께 바뀌는 개발 환경을 만들도록 돕습니다. 가져다 고쳐 쓸 수 있는 참고 구현이자 가이드라인입니다. 코드를 만드는 것만으로 작업이 끝나지는 않습니다. 어디까지 바꿀지 정하고, 결과를 검증하고, 다음 세션이 읽을 기록도 남겨야 합니다. oah는 이 과정들을 연결해 하나의 요청이 작업과 확인, 기록까지 이어지게 합니다.
에이전트 실행v0.3.0에서 사용 가능
리스는 작업 하나가 바꿀 경로를 예약해서 AI 세션 둘이 실수로 같은 파일을 고치지 않게 한다. 겹치는 리스는 OAH_LEASE_CONFLICT로 거절하고 누가 잡고 있는지 알려 준다. 리스가 편집기의 쓰기를 막을 수는 없으므로, 작업을 끝낼 때 실제로 바뀐 파일을 범위와 대조한다.
AI 세션 둘이 한 저장소를 함께 쓰면 같은 파일을 쉽게 동시에 고치고, 변경이 부딪힐 때까지 아무도 알아채지 못한다.
oah start --task T --agent A --scope PATH…로 리스를 잡는다. oah start --packet PACKET.md는 패킷에서 범위를 가져오고 같은 단계에서 의도를 묶는다.OAH_LEASE_CONFLICT로 거절하고 누가 잡고 있는지 알려 준다. 범위 repo는 저장소 전체를 뜻한다.oah status는 모든 리스를 active나 STALE로 보여 주며 읽기만 한다. oah renew는 리스를 연장하고 범위를 바꿀 수 있고, oah release --reason은 끝내지 않고 내려놓는다.oah finish는 리스를 잡은 뒤 실제로 바뀐 파일을 범위와 대조하고, 범위를 벗어나면 OAH_SCOPE_EXCEEDED로 거절한다.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.mdoah/에 있고, 모든 워크트리가 함께 보며 git status에는 나오지 않는다.oah finish가 실제로 일어난 일을 확인한다.--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가 나온다.