Repository navigation
Releases: qazcdesnu/labgate
Release list
v0.7.0: ideation (lg init --kind ideation, lg ideas, lg init --from)
요약
**무엇을 연구할지 정하는 단계(ideation)**를 labgate 안으로 들였다. 후보를 만들고, 후보를 보기 전에 잠근 평가 기준으로 근거와 함께 비교해 방향을 고르고, 확정한 방향으로 연구 프로젝트를 만든다. 기본 기준은 CS 박사과정의 논문 아이디어 평가에 맞췄다. 계기는 처음 ideation이 labgate 밖 대화에서 기록 없이 일어났고, 연구 질문이 M0에서 바뀐 뒤 새 프로젝트를 손으로 만든 경험이다.
주요 내용
lg init --kind ideation
- 연구 질문 대신 탐색 주제로 시작한다. 마일스톤을 생략하면 기본 두 개(지형 파악과 후보 생성 / 후보 검증과 방향 선택)를 쓴다.
- 함께 생기는 것:
- 평가 기준
plan/criteria.md - 후보
ideas/I<n>_<slug>.md - 방향 확정 문서
brief.md - 각각의 완성 사양(idea·criteria·brief)과 후보 양식
- 평가 기준
평가 기준 (미리 정하고 잠근다)
- 기본 기준 C1–C8:
- 학회 리뷰 기준: 독창성, 중요도, 검증 가능성, 전제의 근거
- 박사과정 사정: 실행 가능성, 선점 위험, 결과의 견고성, 연구자 적합성(사람이 매김)
- 기준마다 1–5점의 근거 조건, 가중치, 결격이 있다. 실행 가능성 구간은 가진 기간에 대한 비율이다.
- 잠금: 첫 T0 게이트 승인이 기준을 잠근다. 에이전트는 기준을 고치지 않는다(G7,
lg verifyV4). 고칠 점은notes/에 제안한다. - 기준 변경: 잠근 뒤 바꾸면 모든 평가가 "기준 변경 전"이 되어 다시 매긴다. 기준 버전은 내용을 바꾼 커밋이고, 잠금 반영 커밋은 세지 않는다.
평가와 선택
lg ideas: 후보 × 기준 비교표, 가중 평균, 순위, 결격을 도구가 계산한다. 근거 없는 점수, 잠그기 전 평가, 기준 변경 전 평가를 표시한다.lg verifyV5도 평가표를 검사한다.- 고르기·버리기:
gate·decide커밋의Select·Droptrailer로 한다(hook 검사).lg answer가 요청서에 올라온 후보를 묻고, 버릴 때는 이유가 필수다. - 방향 확정: 마지막 마일스톤의 go가
brief.md를 확정한다.
lg init --from IDEATION
- 확정한 질문·요약·마일스톤·사람 신원으로 연구(또는 제안서) 프로젝트를 만든다.
- brief, 고른 후보, 참고문헌(원본과 목록 행)을 옮겨 stage하고, 출발점을
origin과 README에 남긴다.
그 밖
- 반영 도구: 결정 문서의 "확정 내용"(사람이 쓴 그대로)과 마일스톤
go_nogo를 채운다. 연습용 프로젝트에서 비어 있던 칸이다. lg answer·lg commit의 pager: 색 코드는 해석하는 pager에만 보낸다(less에-R). 링크는 글로 보여 준다. 옵션 없는less에서ESC[1m이 그대로 보이던 문제를 고쳤다.lg init --import: ideation 안내에 평가 기준 단계를 유지한다.
호환성
- spec_version 7.
lg명령은 2–7을 지원한다. 2–6 프로젝트는lg upgrade로 7까지 올린다. - 해시표 7에는 연구·ideation·제안서 × Claude Code 사용 여부, 6가지 변형이 있다.
확인
- 테스트 527개(v0.7.0 tag가 필요한 2개는 tag 뒤에 돈다). Python 3.10–3.14 × 최신·최소 의존성, Linux·macOS, 생성 도구 Python 3.9.
- 연습용 ideation 프로젝트(
ssm-ideation-0.7.0)에서 기준 조정 제안, 기준 잠금, 후보 8개 평가까지 실제로 진행했다.
설치·업데이트
pipx install --force git+https://github.com/qazcdesnu/labgate.git@v0.7.0
lg --version아이디어 탐색: lg init <폴더> --kind ideation (docs/guide/ideation.md). 이미 만든 프로젝트 올리기(spec_version 2–6 → 7): 에이전트 세션을 닫고 lg upgrade --dry-run → lg upgrade → git add -A && lg commit(타입 spec).
v0.6.0: lg init --kind proposal, --import
요약
연구가 아닌 지식 작업, 첫 대상으로 사업 제안서에도 labgate를 쓸 수 있게 lg init에 프로젝트 종류를 더했다. 이미 가진 자료를 들여오는 방법도 정리했다. 계기는 제조기업 AI 에이전트 구축 제안서 작업에서 나온 요구와, 자료가 있는 폴더에 init할 때 생긴 문제다.
주요 내용
lg init --kind research|proposal
- 설정 파일
project.kind, 명령--kind, 대화형이면 첫 질문(연구 / 제안서). 기본은 연구다. - 제안서에서 다른 것:
- 연구 질문 → 제안 핵심 질문
- 가설 → 제안 전략과 가정
- 공통 실험 원칙 → 공통 작업 원칙
- 문헌 → 자료
- 마일스톤 판정의 뜻: go = 다음 단계로, 마지막이면 제출 / conditional = 보완 조건부 / nogo = 중단
paper/대신deliverables/
- 같은 것: 규칙, 절차, 사양, 커밋 규약, hook, 모든
lg명령. lg upgrade해시표의 변형에 종류가 들어간다. 연구는 예전 변형 이름 그대로라 릴리즈된 해시표와 맞는다.
lg init --import DIR
- 이미 가진 자료 폴더의 내용을
notes/로 복사하고 stage만 한다. 첫 task 승인 커밋에 함께 들어간다. - 프로젝트 폴더 안의 폴더, 빈 폴더, 없는 폴더는 거부한다.
init 커밋은 생성한 파일만
- 지금까지는
git add -A라서,--force로 자료가 있는 폴더에 만들면 자료가 init 커밋에 들어갔다. 큰 파일이나 기밀 자료가 이력에 남을 수 있었다. - 이제 생성한 파일만 커밋한다. 원래 있던 파일은 그대로 남기고 목록으로 알린다.
템플릿
- 줄 끝
{% endif %}가 줄바꿈을 먹어 제목과 본문이 붙던 문제를 고쳤다. 제목 뒤 빈 줄을 확인하는 contract 테스트를 더했다. - 연구 프로젝트의 생성 결과는 v0.5.0과 비교해 의도한 줄만 다르다:
project.kind,deliverables/안내 두 줄, spec_version.
호환성
- spec_version 6.
lg명령은 2–6을 지원한다. 2–5 프로젝트는lg upgrade로 6까지 올린다(모두 연구 종류). - 설정 파일 형식(
schema_version: 1)은 그대로다.kind는 선택 필드다.
확인
- 테스트 498개(v0.6.0 tag가 필요한 2개는 tag 뒤에 돈다). Python 3.10–3.14 × 최신·최소 의존성, Linux·macOS, 생성 도구 Python 3.9.
- 임시 폴더에서
--kind proposal --import로 실제 생성: README·로드맵·마일스톤 문구, 가져온 자료 stage,lg status확인.
설치·업데이트
pipx install --force git+https://github.com/qazcdesnu/labgate.git@v0.6.0
lg --version제안서 프로젝트: lg init <폴더> --kind proposal [--config 설정.yaml] [--import <자료 폴더>]. 이미 만든 프로젝트 올리기(spec_version 2–5 → 6): 에이전트 세션을 닫고 lg upgrade --dry-run → lg upgrade → git add -A && lg commit(타입 spec). 자세한 내용은 docs/guide/upgrade.md.
v0.5.0: lg status, lg answer, lg spec adopt
요약
lg init 이후에도 터미널 두 개(lg와 에이전트)만으로 연구를 진행할 수 있게 한다. 사람이 판단할 일을 찾고(lg status), 읽고 답하고(lg answer), 사양 초안을 확정하는(lg spec adopt) 일을 명령으로 만들었다. 사람이 문서를 손으로 고치고 git diff --cached로 따로 확인하던 과정을 lg 안으로 옮겼다. 요구사항은 ssm-latent-reasoning의 M0-T0 게이트와 0.5.0 연습 프로젝트에서 실제로 겪은 문제다.
주요 내용
lg status (읽기만, 사람·에이전트)
- 사람이 할 일을 다음 명령과 함께 보여 준다:
- 열린 요청 →
lg answer <ID> - 응답 작성 중, 초안, 내 변경 →
lg commit - task 승인 대기
- 닫힌 요청서의 사본
- 열린 요청 →
- 에이전트가 다음 세션에 반영할 사람 커밋, 진행 상황(마일스톤, task 상태, 미확정 결정)도 보여 준다.
STATUS.md가 아니라 frontmatter,.lg/pending/, 프로젝트의 반영 도구에서 모은다.--json.
lg answer [ID] (사람만, 터미널에서만)
- 게이트·에스컬레이션: 요청서와
lg verify요약을 보여 주고 판정을 한 번 묻는다. 그 답으로## 응답, frontmatter,gate/respond커밋(Reviewtrailer)과 tag를 함께 만든다.- 다음 task를 여럿 고르면
plan커밋이 이어진다. - 마일스톤 판정은 마지막 task일 때만 묻는다.
- 결정은 요청서가 요청한 것만 제목과 함께 묻는다.
- 다음 task를 여럿 고르면
- 결정 확정:
lg answer D0.1. 확정 내용은decide커밋 본문(확정:)에 남는다. - 반영 미리보기: 커밋 전에 상태 변화(카드, 마일스톤, 로드맵, review 이동, tag)를 프로젝트의
apply-human-commits --preview로 보여 준다. 반영할 수 없는 판정이면 쓰기 전에 멈춘다. - 멈추는 경우: 사람이 쓰고 있는 요청서는 덮어쓰지 않는다. 취소하면 아무것도 바뀌지 않는다.
lg spec adopt DRAFT... (사람만)
- 에이전트가
notes/에 쓴 사양 초안(번호 붙은 절)을 stub 사양에 합친다.status: complete, 색인 갱신, 차이를 보여 준 뒤spec커밋 하나. - 번호 없는 절, 사양에 없는 절, 합친 뒤에도 TODO가 남는 경우는 거부한다.
- 실제 초안 9종이 모두 합쳐지는 것을 확인했다.
lg commit
- 확인 화면: stage된 review의
## 응답원문(대화 경로에서 에이전트가 옮겨 적은 것), 반영 미리보기와 반영할 수 없다는 경고, 전체 diff를 pager로 보는 선택지.git diff --cached를 따로 칠 필요가 없다. - Milestone-Verdict: 마일스톤의 마지막 task일 때만 묻는다(실사용에서 M0-T0 판정 중
go를 고를 뻔했다).
spec_version 5 (생성되는 프로젝트)
apply-human-commits --preview- 마일스톤 상태가 바뀌면 로드맵 표의 그 행도 바꾼다. 절차 gate-apply의 특별 규칙에 G6 추가.
- 절차 task-gate: 카드의 완료 기준
- [x]체크, 게이트 요청 전lg verify, 보고에lg answer안내. escalate에도 같은 안내. - conventions §8: 사양 초안을 쓰는 법(사양 하나당 파일 하나, 번호 붙은 절만).
- deny
lg answer,lg spec. README 템플릿. lg upgrade로 4 → 5.
테스트
- unit / contract / tools / commands / e2e 다섯 계층으로 정리했다.
- 공용 도구는
tests/support/에 모았다. - 설명서는
tests/README.md. - Python 3.9 검사는
tests/tools전체를 돈다.
호환성
- spec_version 5.
lg명령은 spec_version 2–5 프로젝트에서 동작한다(반영 미리보기는 5 이상). - 2–4 프로젝트는
lg upgrade로 5까지 올린다. 실제 v0.4.0 tag로 만든 프로젝트로 시험했다.
확인
- 테스트 474개(tag가 생기기 전에는 v0.5.0 tag가 필요한 2개를 건너뜀). Python 3.10–3.14 × 최신·최소 의존성, Linux·macOS, 생성 도구 Python 3.9.
- 연구 프로젝트(읽기 전용)와 0.5.0 연습 프로젝트에서
lg status,lg answer, 대화 경로의lg commit을 썼다.
설치·업데이트
pipx install --force git+https://github.com/qazcdesnu/labgate.git@v0.5.0
lg --version이미 만든 프로젝트 올리기(spec_version 2–4 → 5): 에이전트 세션을 닫고 프로젝트 폴더에서 lg upgrade --dry-run → lg upgrade → git add -A && lg commit(타입 spec). 자세한 내용은 docs/guide/upgrade.md.
v0.4.1: lg verify
요약
에이전트가 규칙을 지켰는지 커밋 이력으로 사후 확인하는 **lg verify**를 더하고, 게이트 판정 때 lg commit이 그 요약을 보여 준다. 연구 프로젝트에서 v0.4.0을 쓰며 드러난 문구 문제와 README를 고쳤다. spec_version은 4 그대로라 생성되는 프로젝트는 바뀌지 않는다.
주요 내용
lg verify [--task TASK | --since REV | --all] (읽기만 함)
- 기본 범위는 마지막
gate/*tag 이후. 그 프로젝트의 hook·사양 문서에서 규칙을 읽어 그 버전의 규칙으로 검사한다. - V1 신원과 타입(hook을 우회한 커밋도), V2 사람 몫의 상태 전이(G4)에
Applies/Refs근거가 있는지, V3 에이전트의## 응답수정(G5), V4 규칙 파일 수정(G7, 카드의 "범위 › 포함"을 함께 보여 줌), V5 문서 형식. --task는 점검표(완료 기준 체크 수, 요청서 근거 경로, 바뀐 파일)를 붙인다. 판정은 사람이 한다.- 위반이면 코드 3. 에이전트도 실행할 수 있다.
lg commit
gate커밋을 확인할 때lg verify --task요약을 보여 준다. 막지는 않는다.- 커밋 뒤 안내를 커밋 종류에 따라 다르게 한다. 에이전트는 세션 시작 때 사람 커밋을 자동으로 확인하므로, 알리라는 안내는 열린 세션이 기다릴 때만 나온다(초안 모드,
gate·respond·decide·plan+Approve).spec이면 열린 세션을 새로 시작하라고 한다.
lg upgrade
- 릴리즈된 버전과 다른 관리 문서를 "사람이 고친 문서"라고 단정하지 않고 "릴리즈된 spec_version N과 다른 문서"라고 쓴다. 줄 수를 함께 보여 준다.
--diff: 다른 문서마다 지금 파일 → 새 버전의 차이를 보여 준다.
문서
- README "사용"을 다시 썼다: 첫 승인, 터미널 두 개, 한 task의 흐름, init 뒤에 저절로 돌아가는 것, 모든
lg명령. - 명령 설명서
lg-verify.md, 사용자 작업 설명서의 하루 작업·게이트 판정·바로잡기에lg verify.
실사용에서 나온 것
lg upgrade가 릴리즈 전 dev 상태를 복사한 문서를 "사람이 고친 문서"라고 표시해 오해를 낳음 → 문구와--diff.lg commit이 커밋할 때마다 "에이전트에게 알리세요"라고 해서, 자동 감지가 안 되는 것처럼 보임 → 커밋 종류별 안내.- 실제 M0-T0 게이트 요청서에서
lg verify가M0-T5.md(파일 이름만 쓴 것)와## Go / No-go 기준(섹션 인용)을 없는 경로로 보고 → 경로 판별 수정.
확인
- 테스트 404개. Python 3.10–3.14 × 최신·최소 의존성, 생성 스크립트 Python 3.9. spec_version 4 템플릿 해시는 그대로(동결 테스트 통과).
- 연구 프로젝트(
ssm-latent-reasoning)에서lg verify,lg verify --task M0-T0실행: 위반 없음.
설치·업데이트
pipx install --force git+https://github.com/qazcdesnu/labgate.git@v0.4.1
lg --versionspec_version이 4 그대로이므로 v0.4.0으로 만들거나 올린 프로젝트는 lg upgrade가 필요 없다. v0.2·v0.3 프로젝트는 docs/guide/upgrade.md.
v0.4.0 — lg upgrade
요약
**lg upgrade**로 이전 spec_version의 프로젝트를 규칙대로 새 버전에 올린다. v0.3 적용 때 손으로 한 갱신(새 프로젝트를 임시로 만들어 파일 복사, 문서 버전 일괄 수정)에서 실제로 생긴 문제들을 요구사항으로 삼았다: 연구 문서의 버전 표기 누락, 실행 권한 손실, 사람이 고친 파일을 덮어쓸 위험, 같은 spec_version 안의 파일 차이.
주요 내용
lg upgrade [--dry-run] [--force]
- 사람이 항상 우선이다. 사람의 수정을 발견하면 지우지 않고 터미널에 알린다.
- 관리 문서(규칙·절차·도구): 그 버전 그대로면 새 버전으로 교체. 사람이 고쳤으면 아무것도 바꾸지 않고 멈춘다(코드 3).
--force면 덮어쓰고 원래 내용을.lg/pending/upgrade/에 남기며, 목록을 갱신 기록의forced에 적는다. - 사람이 채우는 관리 문서(stub 사양,
specs/README.md): 채웠으면 내용 유지,spec_version만 갱신.--force로도 덮어쓰지 않는다. .gitignore:# labgate:begin~# labgate:end관리 구역만 갱신. 사람이 지운 labgate 줄은 다시 넣지 않고, 사람이 더한 줄은 구역 밖에 둔다.- 연구 문서: frontmatter
spec_version만 올린다. 형식이 다르면 그대로 두고 알린다. AGENTS.md의 프로젝트 정보 줄은 사람이 고쳤어도 교체할 때 그대로 옮긴다..lg/project.yaml에 갱신 기록(upgrades)을 남긴다. 커밋하지 않는다: 사람이git diff로 확인하고lg commit(타입spec)으로 확정한다.- 에이전트는 실행하지 못한다(Claude Code deny).
버전 형식과 해시표
- spec_version은 정수, 문서 frontmatter는 정확히
spec_version: <정수>한 줄. spec_version은 마이너 버전에서만 바뀌고, 릴리즈된 spec_version의 템플릿은 다시 바꾸지 않는다(테스트가 막는다). - 릴리즈된 spec_version마다 관리 문서의 해시표를 패키지에 둔다(
hashes/2.json·3.json·4.json). 프로젝트에는 아무것도 기록하지 않으므로 기존 v0.2·v0.3 프로젝트도 같은 방식으로 판별된다. - 생성 파일의 분류는 경로 규칙 한 곳(
kinds.py)에 있다. dev 버전으로 만든 프로젝트는 지원하지 않는다.
호환성
- spec_version 4. 생성되는 프로젝트에
.gitignore관리 구역과lg upgradedeny가 추가됐다. 생성 파일 수는 그대로다. lg commit·lg draft는 spec_version 2–4를 지원한다.- spec_version 2·3 프로젝트는
lg upgrade로 4까지 올릴 수 있다.
확인
- 테스트 363개. 옛 프로젝트는 실제 v0.2.1·v0.3.0 tag의 labgate로 만들어서 올린다(CI가 tag를 받는다). 연구 프로젝트 사본에서 실제로 실행했다:
specs/conventions.md하나로 갱신 실패 →--force→ 관리 문서 교체, 연구 문서 20개 2→4, 실행 권한 유지, hook을 통과하는spec커밋. - Python 3.10–3.14 × 최신·최소 의존성, 생성 스크립트 Python 3.9.
설치·업데이트
pipx install --force git+https://github.com/qazcdesnu/labgate.git@v0.4.0
lg --version이미 만든 프로젝트를 올리는 방법: 프로젝트 폴더에서 에이전트 세션을 종료한 뒤 lg upgrade --dry-run → lg upgrade → git diff → git add -A && lg commit(타입 spec). 자세한 내용은 docs/guide/upgrade.md.
v0.3.0 — 규칙의 우선순위와 사람 커밋 반영 도구
요약
실사용 첫날 드러난 문제를 고친 버전입니다. 첫 task 승인 뒤 세 문서(원칙, 일반 규칙, 세션 시작 절차)가 서로 다른 말을 해서, 에이전트가 판단으로 메워야 했다. 이번 버전은 규칙의 우선순위를 정하고, 기계적으로 할 수 있는 일은 도구로 옮겨, 에이전트가 문서와 도구만으로 같은 결과를 내게 한다. 연구 프로젝트(ssm-latent-reasoning)에 적용해 확인했다.
주요 내용
규칙의 층과 우선순위 (생성되는 AGENTS.md)
- 0절 우선순위: 규칙은 사람만 고친다(
spec커밋). 적용할 때는 구체적인 것이 먼저다: task 카드 "범위 › 포함" → 절차의 특별 규칙 → 일반 규칙. 불변 원칙(P1–P6)은 예외가 없다. - 불변 원칙 P1–P6: 커밋이 사실의 원본이며 반영은 에이전트의 책임, 사람 신원으로 커밋하지 않기, 사람 전용 타입, 이력 재작성 금지, 사람의 변경 폐기 금지, 지어낸 판정·수치 금지.
- 일반 규칙 G1–G10: 괄호 예외를 모두 걷어 냈다.
- 절차의 특별 규칙: 각 절차 문서에 "특별 규칙" 절을 둔다. 판단이 필요한 세 곳에만 남았다:
commit-prep(G2),gate-conversation(G5),gate-apply(G4). - 근거: 모든 작업을 주체·도구·바꾸는 대상으로 정리한
docs/operations.md.
코드 우선: 새 도구 scripts/apply-human-commits
- 사람 커밋(
plan의Approve,gate,respond,decide)이 정한 상태 전이를 카드·다음 카드·마일스톤·결정·결정 목록에 반영하고, review를 닫고, 게이트 이력을 남긴다. 커밋은 에이전트가 하며Applies: <해시>로 기록한다. - 전이를 모두 계산한 뒤, 하나라도 할 수 없으면 아무것도 바꾸지 않는다. 이미 반영된 상태(v0.2 방식)는 건너뛰고 기록만 남긴다.
- 대화로 판정하든 문서로 판정하든 같은 반영 경로를 쓴다(
gate-conversation은 상태를 직접 바꾸지 않는다).
scripts/session-check 확장
- 반영되지 않은 사람 커밋을 알린다.
session-start는 카드 상태를 판단하기 전에 이를 처리한다(첫날 문제의 직접 수정). git commit -F로 이미 확정된 초안, 커밋된 반영 기록을 정리한다.- 반영한 뒤 커밋 전에 세션이 끝난 경우를 알아보고, 그 변경을 사람의 변경으로 잘못 분류하지 않는다.
문서
- 명령 설명서
docs/cli/:lg init,lg commit,lg draft, 프로젝트 스크립트. 옵션·종료 코드·hook의 타입과 trailer 표가 코드와 같은지 테스트한다. - 사용자 작업 설명서
docs/guide/: 설치, 하루 작업, task 승인, 게이트 판정, 에스컬레이션 응답, 직접 수정, 계획 변경, 실수 바로잡기, 업데이트. 사람에서 에이전트로 넘어가는 지점(H1–H7)을 정리했다. - 설계 문서 v3.0 (§16 규칙의 층, §16.4 사양 버전 갱신, §17.2, §21).
호환성
- spec_version 3.
lg commit·lg draft는 spec_version 2와 3을 모두 지원한다(커밋 규약이 같다). - v0.2 프로젝트의 규칙 갱신은 수동이다(
docs/guide/upgrade.md): 새 규칙·도구 파일 복사 + 모든 문서의spec_version일괄 갱신, 사람의spec커밋 하나. 연구 내용은 그대로다. - commit-msg hook에
Appliestrailer 검사가 추가됐다. - 생성 파일 수: Claude Code를 쓰면
60 + 6N, 쓰지 않으면52 + 6N.
실사용 확인 (ssm-latent-reasoning, spec_version 2 → 3)
- 갱신 뒤 세션 시작 hook이 반영되지 않은 승인 커밋
70ea21b를 알렸고, 에이전트가 판단 없이gate-apply로 가서 도구가 "이미 반영됨"으로 건너뛰었다.Applies: 70ea21b만 남긴 빈 반영 커밋(285bfed)을 남기고 작업으로 돌아갔다. - 여기서 나온 개선 두 가지를 같은 릴리즈에 넣었다: 빈 반영 커밋의 이유를 출력에 적기, 반영 기록 정리와 커밋 전 중단 감지.
- 연구 문서의 frontmatter
spec_version처리가 갱신 절차에 빠져 있던 것을 찾아, 일괄 갱신 규칙과 명령(검증함)을 넣었다.
테스트
- 341개 (0.2.1 대비 54개 추가).
- Python 3.10–3.14 × 최신·최소 의존성. 생성되는 hook과 스크립트는 Python 3.9로도 검사한다. 이 검사가
Path.write_text(newline=)가 3.9에 없는 문제를 잡았다.
설치·업데이트
pipx install --force git+https://github.com/qazcdesnu/labgate.git@v0.3.0
lg --versionv0.2 프로젝트의 규칙 갱신 방법은 docs/guide/upgrade.md에 있습니다.
v0.2.1 — 첫 task 승인을 lg commit으로
v0.2.0을 실제 연구 프로젝트에 처음 쓰면서 바로 걸린 문제를 고친 버전입니다: 첫 task 승인 커밋을 lg commit으로 만들 수 없었습니다.
바뀐 점
plan커밋에서Approve를 묻습니다. task 카드 목록에서 승인할 task를 여러 개 고를 수 있고, 고르지 않으면Approve없이 커밋합니다(로드맵만 바꾸는 경우). 하나만 고르면 scope도 그 Task ID가 됩니다(예:plan(M0-T0): approve initial task).lg commit --allow-empty. 바뀐 파일 없이 기록만 남기는 커밋(첫 task 승인 등)을 만들 수 있습니다.lg init의 다음 단계 안내에lg commit --allow-empty로 승인하는 방법을 추가했습니다.
하위 호환입니다. 기존 옵션과 동작, 생성되는 프로젝트(spec_version 2)는 바뀌지 않습니다. 0.2.0으로 만든 프로젝트에서도 그대로 쓸 수 있습니다.
설치·업데이트
pipx install --force git+https://github.com/qazcdesnu/labgate.git@v0.2.1
lg --version첫 task 승인 예
lg commit --allow-empty # 타입 plan → Approve에서 M0-T0 선택 → 요약 입력 → 커밋v0.2.0 — 사람의 변경 제어
labgate 0.2.0의 핵심은 사람의 변경을 명확하게 제어하는 기능입니다. 사람이 코드·문서를 직접 고쳤을 때, 그 변경은 항상 사람 신원의 커밋으로, 에이전트 작업보다 먼저 확정됩니다. 사람이 직접 lg commit을 하든, 에이전트 세션이 먼저 감지하든 결과가 같습니다.
새 기능: 사람의 변경 제어
lg commit(사람 전용): 터미널에서만 커밋합니다. 타입과 필수 trailer를 물어 메시지를 만들거나, 에이전트가 준비한 초안을 확인해 확정합니다. 커밋/편집/취소를 고를 수 있고, 편집한 메시지는 규약을 다시 검사합니다. 게이트 승인이면gate/<Task>, 마일스톤 판정이면milestone/<M>-<verdict>tag도 만듭니다.lg draft(에이전트도 사용): stage와 초안(.lg/pending/COMMIT_MSG)까지만 하고 커밋하지 않습니다. 경로를 생략하면 세션 시작 때 감지된 사람의 변경만 stage하고, 대상 밖에 stage된 변경이 있으면 거부합니다.- 세션 시작 시 자동 감지: 생성되는
scripts/session-check가 커밋되지 않은 변경을 사람의 변경으로 알리고.lg/pending/HUMAN_FILES에 기록합니다. Claude Code에서는 SessionStart hook이 자동으로 실행하고, 다른 도구는 세션 시작 절차의 첫 단계로 실행합니다. - 에이전트 커밋에 사람의 변경이 섞이지 않게: 에이전트는 자기 파일만 경로로 stage합니다.
scripts/agent-commit은-a(--all,-am포함)를 거부하고, Claude Code 설정은git add -A/./-u,git stash,lg commit을 막습니다. - 사람도 작업 타입 사용:
exp,run,result,ref,log를 공통 타입으로 옮겼습니다. 사람이 직접 고친 실험 코드도exp로 커밋할 수 있고, 누가 했는지는 작성자 신원과Actor로 구분합니다.
규칙 구조 개편
- 에이전트 규칙을 매 세션 읽는 불변 규칙(
AGENTS.md)과 상황별로 읽는 절차 문서 8종(specs/procedures/)으로 나눴습니다. 절차가 일반 규칙을 푸는 경우는 양쪽에 명시합니다. specs/workflow.md에는 원칙, 역할, 상태 기계만 남겼습니다. Claude Code 슬래시 명령은 절차 문서를 가리키며,/commit-prep이 추가됐습니다.- 커밋 규칙의 원본은 프로젝트의
commit-msghook 하나입니다.lg는 그 hook을 읽어 쓰므로 규칙이 두 곳에 생기지 않습니다.
호환성
spec_version2.lg commit,lg draft는 0.2.0으로 만든 프로젝트에서만 동작합니다. 0.1.0으로 만든 프로젝트에서는 안내와 함께 거부하며, 그 프로젝트는git commit을 그대로 쓰면 됩니다(자동 이전은 이후lg upgrade에서).lg init이 만드는 파일 수: Claude Code를 쓰면59 + 6N, 쓰지 않으면51 + 6N.- 생성된 프로젝트에서
lg는 권장 도구입니다. 없어도git commit으로 커밋할 수 있습니다.
지원 환경
- Python 3.10–3.14 (각 버전에서 최신·최소 의존성으로 테스트, 테스트 284개)
- 생성되는 hook과
session-check는 Python ≥ 3.9 표준 라이브러리만 사용 - macOS, Linux (Windows는 Git Bash에서 최선 노력)
설치
pipx install git+https://github.com/qazcdesnu/labgate.git@v0.2.0
lg --version0.1.0에서 업데이트: pipx install --force git+https://github.com/qazcdesnu/labgate.git@v0.2.0
알려진 한계
- 세션 도중 사람이 고친 파일은 자동으로 감지하지 못합니다(세션 시작 시점 기준). 세션 도중 직접 고쳤다면 에이전트에게 알려 주세요.
lg commit의 터미널 확인은 실수 방지 장치이며 보안 경계가 아닙니다.
문서
- 설계: labgate-design.md v2.0 §16–§20
- 변경 PR: #1
v0.1.0 — lg init
labgate의 첫 버전입니다. 사람이 task 경계의 승인 게이트마다 판정하고 AI 에이전트가 그 사이를 수행하는 연구 프로젝트의 작업 공간을 lg init 한 번으로 만듭니다.
포함된 것
lg init
- 대화형으로 입력하거나 설정 파일(
--config)로 입력 --dry-run(생성될 트리만 출력),--force(비어 있지 않은 폴더 허용, 기존 파일은 덮어쓰지 않음),--no-git,--yes- 실패 지점에 따라 종료 코드가 다름 (설정 오류 2, 폴더 충돌 3, Git 오류 4, 사용자 중단 130)
생성되는 작업 공간
- 루트 문서:
README.md,FILEMAP.md,AGENTS.md,STATUS.md - 계획:
plan/roadmap.md, 마일스톤별milestone.md와 첫 task 카드(T0) - 참고문헌:
references/catalog.md,references/task-map.md, 원본 저장용references/library/ - 결정 기록:
decisions/ - 문서 사양
specs/- 완성본 5종:
conventions,workflow,git-commit,task-card,review - stub 11종: 공통 구조만 있고 내용은 M0에서 채움 (
roadmap,milestone,task-map,catalog,decision,experiment-readme,run-record,task-result,milestone-report,worklog,status)
- 완성본 5종:
사람/에이전트 구분 강제
- 커밋 작성자 신원을 사람과 에이전트로 분리
- 사람 전용 커밋 타입(
gate,decide,plan,spec,respond) commit-msghook이 신원·타입·trailer의 일치를 검사 (hook은 Python ≥ 3.9 표준 라이브러리만 사용)- 에이전트 커밋용
scripts/agent-commit - 사람 신원으로 남기는 초기
init커밋
Claude Code 연결 (선택)
CLAUDE.md,.claude/settings.json- 슬래시 명령:
/session-start,/session-close,/task-start,/task-gate,/escalate - 규칙의 원본은 도구 중립 문서(
AGENTS.md,specs/)이고, Claude Code 파일은 연결 계층입니다.
지원 환경
- Python 3.10–3.14 (각 버전에서 최신 의존성과 최소 의존성 두 조합으로 테스트)
- macOS, Linux (Windows는 Git Bash에서 최선 노력, 공식 지원 아님)
git필요 (--no-git이면 불필요)
설치
pipx install git+https://github.com/qazcdesnu/labgate.git@v0.1.0
lg --versionclone 후 설치하는 방법은 README를 참고하세요.
아직 없는 것
lg gate,lg status,lg validate,lg upgrade,lg doctor- 기존 계획서 자동 가져오기 (v1에서는
M0-T0task에서 에이전트가 옮김) - Claude Code 외 다른 에이전트 도구 연결, 원격 저장소 설정, 다국어 템플릿
문서
- 설계: labgate-design.md
- 사용 시나리오: Coconut을 읽고 CODI를 시작하는 연구자