leerness 1.36.161 → 1.36.165
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/CONTRIBUTING.md +4 -2
- package/README.ko.md +5 -3
- package/README.md +15 -13
- package/SECURITY.md +3 -3
- package/bin/leerness.js +1512 -1135
- package/docs/PUBLISH_PRECHECK.md +1 -1
- package/lib/agent-registry.js +1 -1
- package/lib/agents.js +64 -32
- package/lib/audit.js +31 -46
- package/lib/bugfix.js +4 -4
- package/lib/catalogs.js +18 -18
- package/lib/clarify.js +5 -5
- package/lib/dashboard.js +6 -6
- package/lib/diagnostics.js +18 -13
- package/lib/drift.js +2 -2
- package/lib/feature.js +2 -2
- package/lib/git.js +6 -2
- package/lib/graph.js +12 -12
- package/lib/health.js +4 -4
- package/lib/library.js +2 -2
- package/lib/mcp-tools.js +10 -10
- package/lib/migrate.js +8 -8
- package/lib/npm-process.js +21 -13
- package/lib/portable-process.js +276 -0
- package/lib/preview-serve.js +5 -5
- package/lib/pure-utils.js +36 -25
- package/lib/referee.js +2 -2
- package/lib/review-request.js +2 -2
- package/lib/role-catalog.js +1 -1
- package/lib/routing.js +2 -2
- package/lib/session-close.js +5 -5
- package/lib/session-presence.js +2 -2
- package/lib/state-integrity.js +8 -8
- package/lib/team.js +3 -3
- package/lib/tech-profile.js +4 -4
- package/lib/toggles.js +2 -2
- package/lib/workspace-dir.js +774 -0
- package/package.json +5 -4
- package/scripts/e2e-command-surface.js +7 -7
- package/scripts/e2e-concurrency.js +7 -7
- package/scripts/e2e-core.js +11 -11
- package/scripts/e2e.js +619 -518
- package/scripts/handoff-readonly-probe.js +7 -7
- package/scripts/installed-cleanroom-probe.js +209 -0
- package/scripts/lock-probe.js +3 -3
- package/scripts/migration-compat.js +4 -3
- package/scripts/platform-smoke.js +1 -1
- package/scripts/release-bump-probe.js +5 -5
- package/scripts/release-runtime-probe.js +984 -4
- package/scripts/runtime-warning-gate.js +59 -0
- package/scripts/verify-code-cross-runtime-probe.js +181 -0
- package/scripts/workspace-dir-migration-probe.js +412 -0
- package/scripts/workspace-dir-source-ratchet.js +45 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.36.165 — 2026-08-26
|
|
4
|
+
|
|
5
|
+
- verify-code가 fresh basic 권한에서도 Python/Go/Rust 러너를 제한적으로 실행하고, 혼합 Node/Python 테스트와 npm placeholder를 올바르게 판별하며, 실패·차단된 최신 증거가 lazy/gate를 거짓 통과하지 않도록 수정 (T-0143)
|
|
6
|
+
|
|
7
|
+
## 1.36.164 — 2026-08-26
|
|
8
|
+
|
|
9
|
+
- `release publish --npm-publish`가 `release sync-main`과 동일한 보안 배포 경로를 사용하도록 통합했습니다. `prepublishOnly`와 pack은 npm/provider/cloud 시크릿 및 npm auth/OTP를 제거한 환경과 별도의 0바이트 임시 userconfig에서 실행하고, 그 단계가 생성한 exact `.tgz`를 권한 제한 임시 `.npmrc`와 `--ignore-scripts`로 그대로 업로드합니다. 따라서 npm이 기본 사용자 `.npmrc` 경로를 lifecycle에 다시 주입하거나 postpack이 작업 디렉터리를 바꿔도 인증정보와 검증 산출물의 경계가 유지됩니다. 토큰·OTP는 argv에 싣지 않으며 임시 인증 파일은 zeroize·삭제를 재시도합니다. 정리 실패와 `sync-main`의 npm 실패도 전체 명령 실패로 전파하고, registry 오류는 알려진 credential을 비식별화합니다. 긴 오류의 `EPUBLISHCONFLICT`도 전체 출력에서 분류한 뒤 exact version 재조회가 성공할 때만 멱등 성공으로 인정합니다. 토큰이 없으면 스크립트를 끈 업로드 단계에서만 기존 npm userconfig 로그인을 유지하며 dry-run은 인증 파일과 lifecycle을 모두 생략해 프로젝트 무쓰기를 보장합니다. 이 경계들을 실제 npm CLI·로컬 Git remote 공격성 프로브로 검증합니다.
|
|
10
|
+
- Windows 전체 E2E의 가짜 Codex를 임의 `.cmd`에서 검증 가능한 npm형 JS shim으로 바꿨습니다. 보안 실행기가 임의 배치 파일을 정상적으로 거부한 뒤 러너에 우연히 설치된 실제 Codex로 폴백하던 Node 22/24 비결정성을 제거했습니다.
|
|
11
|
+
|
|
12
|
+
## 1.36.163 — 2026-08-26
|
|
13
|
+
|
|
14
|
+
- GitHub CI에서 재현된 동시 최초 .harness→.leerness 마이그레이션의 stale snapshot 경쟁을 최신 상태 재검사로 수렴시켰습니다. Windows Node 24/26 런타임 probe는 8.3/긴 경로 별칭을 realpath 파일 동일성으로 판정하고 unsupported shim의 안정된 fail-closed 계약을 검증합니다.
|
|
15
|
+
|
|
16
|
+
## 1.36.162 — 2026-08-26
|
|
17
|
+
|
|
18
|
+
- 기본 작업 디렉터리를 `.leerness/`로 전환하고 기존 `.harness/` 상태를 충돌 감지·백업·검증·롤백이 가능한 방식으로 자동 마이그레이션했습니다. 동시 세션 핸드오프 경로 격리, 설치형 클린룸, 소스 ratchet 검증도 함께 보강했습니다.
|
|
19
|
+
- 역사적 전체 E2E와 startup/handoff·Git/npm·진단·release·에이전트 설치/bench/REPL의 프로세스 호출을 PATH 전용 공용 shell-free 실행기로 통합했습니다. Windows npm `.cmd`/`.ps1`의 검증된 JS·PE 진입점과 Volta류 네이티브 `npm.exe`를 지원하고 해석 불가 shim·미해결 명령·cwd shadow는 실패-폐쇄합니다. 10개 내장 provider의 bench를 모두 정착시키되 모델 없는 Ollama는 명시적 unsupported로 보고하며, argv/stdin 보존과 PowerShell 경로 환경 데이터 채널을 공격성 프로브로 고정했습니다. DEP0190 억제 설정을 거부하고 부모·동기·비동기·detached 자식 경고를 한 파일에 집계하며 Windows Node 24 전체 E2E에서도 이를 검증합니다.
|
|
20
|
+
- 프로젝트 `.env` 자동 로드를 `LEERNESS_*`와 명시 provider/release 키 allowlist로 제한해 `NODE_OPTIONS`·`NODE_PATH`·`NPM_EXECPATH`·PATH 계열의 자식 프로세스 제어를 차단했습니다. 호출자가 명시한 정상 `--redirect-warnings`는 portable/npm 자식까지 보존합니다. 거부 진단의 명령명은 `node -e` 옵션과 분리해 `--inspect`·`--cpu-prof`가 inspector나 프로필 파일을 만들지 못하도록 했습니다.
|
|
21
|
+
- Git과 달랐던 중첩 디렉터리 `.gitignore` 판정을 바로잡고, 값이 변하면 계속 재경고하면서도 `.harness/` 시절의 인정 지문이 동일한 `.leerness/` 파일에만 이어지도록 시크릿 베이스라인 호환을 추가했습니다.
|
|
22
|
+
- Windows에서 lock owner read/unlink의 일시 오류가 해제 재시도 예산을 먼저 소비할 수 있는 조건을 반영해, 비동기 락 회귀 검사가 호출 단계별 횟수 대신 실패-폐쇄 코드·격리 경로·공개 락 해제·중복 해제 방지를 안정적으로 검증하도록 수정했습니다.
|
|
23
|
+
- portable runner의 명시적 126/127 실패를 Git 소비자가 `no-git`으로 해석해 실제 저장소를 손상 또는 비저장소로 오진하지 않도록 했습니다. 전체 E2E의 외부 CLI 픽스처는 임의 배치 파일 대신 실제 npm형 Node shim을 사용하고, Git 초크포인트 ratchet은 `spawnPortableSync`까지 추적해 shell-free 전환 뒤에도 같은 보안 계약을 검증합니다.
|
|
24
|
+
|
|
3
25
|
## 1.36.161 — 2026-08-25
|
|
4
26
|
|
|
5
27
|
- 전체 E2E가 잡은 ci init의 낡은 v4 기대값을 v7/Node 24 계약으로 갱신했습니다. i18n doctor는 동일 픽스처에서 영문·한국어 각각 139초/exit 0으로 재현 통과해 제품 결함이 아닌 장시간 부하 타임아웃으로 판별했으며, 테스트 상한을 600초로 조정하고 실패 진단을 보강했습니다.
|
package/CONTRIBUTING.md
CHANGED
|
@@ -9,13 +9,15 @@
|
|
|
9
9
|
|
|
10
10
|
## Test tiers
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
The main three tiers, fastest to slowest:
|
|
13
13
|
|
|
14
14
|
| Command | What it runs | Time | Use it for |
|
|
15
15
|
|---|---|---|---|
|
|
16
16
|
| `npm run test:fast` | `selftest` + smoke (commands run without crashing) | < 1 min | the dev loop |
|
|
17
17
|
| `npm run test:core` | `selftest` + a flagship behavioral suite — `verify-claim` / `gate` / `contract` / `scan` actually reject bad input and pass honest input | ~20 s | pre-commit, quick CI |
|
|
18
|
-
| `npm test` | `--version` + `selftest` + the entire e2e suite | **10+ minutes by design** | the release gate |
|
|
18
|
+
| `npm test` | `--version` + `selftest` + the entire e2e suite + a packed-artifact cleanroom | **10+ minutes by design** | the release gate |
|
|
19
|
+
|
|
20
|
+
Focused suites are also available: `npm run test:commands` drives the broad CLI command surface, while `npm run test:installed` packs the package, installs it into a separate consumer, verifies canonical workspace migration and concurrent handoff isolation, then reruns that command surface from the installed artifact.
|
|
19
21
|
|
|
20
22
|
`npm test` is the gate that must pass before publishing. It is deliberately slow: the e2e suite drives the published CLI surface end-to-end rather than mocking it.
|
|
21
23
|
|
package/README.ko.md
CHANGED
|
@@ -25,7 +25,7 @@ AI 코딩 에이전트(Claude Code, Cursor, Codex, Aider, Goose 등)는 코드
|
|
|
25
25
|
2. **거짓 완료를 선언합니다** — 증거(파일·테스트·로그) 없이 "완료했습니다"라고 말합니다.
|
|
26
26
|
3. **표준이 없습니다** — 여러 에이전트 간 인수인계, 보안/인코딩 점검, 드리프트 관리가 제각각입니다.
|
|
27
27
|
|
|
28
|
-
leerness는 이 문제들을 해결하는 **외부 운영 substrate**입니다. 어떤 에이전트 위에도 얹어, 프로젝트의 상태를 `.
|
|
28
|
+
leerness는 이 문제들을 해결하는 **외부 운영 substrate**입니다. 어떤 에이전트 위에도 얹어, 프로젝트의 상태를 `.leerness/` 파일로 영속화하고 CLI · MCP 도구로 노출합니다. **leerness 자체는 LLM을 호출하거나 코드를 실행하지 않습니다.**
|
|
29
29
|
|
|
30
30
|
---
|
|
31
31
|
|
|
@@ -55,7 +55,7 @@ MIT, **런타임 의존성 0**, offline-first, 모든 상태가 *당신의* 저
|
|
|
55
55
|
# 설치 (런타임 의존성 0 — 추가 패키지 없음)
|
|
56
56
|
npm install -g leerness
|
|
57
57
|
|
|
58
|
-
# 프로젝트 초기화 (.
|
|
58
|
+
# 프로젝트 초기화 (.leerness/ 거버넌스 문서 + .claude/.cursor/.github 어댑터 생성)
|
|
59
59
|
leerness init .
|
|
60
60
|
|
|
61
61
|
# 세션 시작 — 이전 맥락/기억/다음 작업을 1콜로 회수
|
|
@@ -69,7 +69,9 @@ leerness gate . # verify + audit + scan secrets + encoding + laz
|
|
|
69
69
|
leerness session close .
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
-
기본 `handoff`는 여러 AI 세션에서 동시에 실행해도 Git 추적 하네스 파일을 다시 쓰지 않고, `.
|
|
72
|
+
기본 `handoff`는 여러 AI 세션에서 동시에 실행해도 Git 추적 하네스 파일을 다시 쓰지 않고, `.leerness/cache/sessions/` 아래 ignored 세션별 레코드만 갱신합니다. 구형 자동화가 `current-state.md`, `environment.json`, `last-handoff.json`, 생성 그래프 projection 갱신을 명시적으로 필요로 할 때만 `handoff --writeback`을 사용하세요.
|
|
73
|
+
|
|
74
|
+
기존 `.harness/` 프로젝트는 그 프로젝트에서 실행하거나 `--path`로 명시한 첫 일반 명령에서 `.leerness/`로 트랜잭션 마이그레이션됩니다. positional 프로젝트 경로는 먼저 `leerness migrate-workspace-dir <path> --dry-run`으로 확인하고, 적용할 때 `--dry-run`을 빼세요. canonical 복사와 해시 검증이 모두 끝난 뒤에만 레거시 원본 트리를 ignored `.leerness-backup/`으로 원자적 이동해 바이트 단위로 보존하고, 기존 `.leerness/` 구조화 상태 substrate도 유지합니다. 구형 관측 run은 `.leerness/cache/agent-runs/`로 분리하고 실제 경로 참조만 갱신합니다. 두 디렉터리에 독립적인 live 상태가 있거나 백업 이름이 이미 존재하거나 링크/junction이 프로젝트 밖을 가리키면 자동 병합하지 않고 차단합니다. 경로처럼 보이는 일반 명령 본문은 마이그레이션 대상으로 해석하지 않습니다.
|
|
73
75
|
|
|
74
76
|
Cursor 프로젝트에는 `leerness adapter cursor --path .`를 한 번 실행하세요. 기존 project hook을 보존하면서 로컬 `sessionStart` 브리지를 추가해 Cursor 세션 주소를 `LEERNESS_SESSION_ID`로 전달하므로 Cursor/Claude/Codex 동시 세션을 각각 추적할 수 있습니다. Cursor Cloud는 현재 `sessionStart`/`sessionEnd` hook을 실행하지 않으므로, 그 환경에서는 에이전트가 명시 세션 주소를 전달하거나 직접 `handoff`를 실행해야 합니다.
|
|
75
77
|
|
package/README.md
CHANGED
|
@@ -21,11 +21,13 @@
|
|
|
21
21
|
## Try it in 30 seconds
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
npx -y leerness init . --yes # adds .
|
|
24
|
+
npx -y leerness init . --yes # adds .leerness/ memory + guard files to your project
|
|
25
25
|
npx leerness handoff . # everything your AI should know right now, in one call
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
`handoff` is safe to run from several AI sessions at once: by default it does not rewrite Git-tracked harness files and updates only an ignored per-session record under `.
|
|
28
|
+
`handoff` is safe to run from several AI sessions at once: by default it does not rewrite Git-tracked harness files and updates only an ignored per-session record under `.leerness/cache/sessions/`. Use `handoff --writeback` only when legacy automation explicitly needs refreshed `current-state.md`, `environment.json`, `last-handoff.json`, or generated graph projections.
|
|
29
|
+
|
|
30
|
+
Existing projects that still use `.harness/` are upgraded to `.leerness/` transactionally on the first normal command run from that project (or targeted with `--path`). To inspect first, run `leerness migrate-workspace-dir . --dry-run`; to migrate an explicit positional project path, omit `--dry-run`. The migration preserves the byte-for-byte legacy tree by atomically renaming it to the ignored `.leerness-backup/` only after canonical copies and hashes verify, preserves an existing structured-state substrate in `.leerness/`, remaps old observability runs into `.leerness/cache/agent-runs/`, and rewrites operational path references. It fails closed when both directories contain independently live state, the backup name already exists, or a link/junction could escape the project. Arbitrary path-shaped command text is never treated as a migration target.
|
|
29
31
|
|
|
30
32
|
For Cursor, run `npx leerness adapter cursor --path .` once. It preserves existing project hooks and adds a local `sessionStart` bridge that maps Cursor's session address to `LEERNESS_SESSION_ID`, so concurrent Cursor/Claude/Codex sessions remain separately traceable. Cursor Cloud currently does not run `sessionStart`/`sessionEnd` hooks; in that environment the agent must provide an explicit session address or run `handoff` itself.
|
|
31
33
|
|
|
@@ -65,7 +67,7 @@ Built-in harnesses remember what the AI **said**. leerness verifies what the AI
|
|
|
65
67
|
|---|---|---|
|
|
66
68
|
| Memory | per-agent, free-form notes | structured tasks / decisions / lessons / rules — agent-independent files in your repo |
|
|
67
69
|
| "Done" claims | trusted as written | **evidence-gated**: claimed files, test counts, and run output are checked against reality — bluffs exit 1 |
|
|
68
|
-
| Switching agents (Claude → Codex → Cursor) | context lost | same `.
|
|
70
|
+
| Switching agents (Claude → Codex → Cursor) | context lost | same `.leerness/` state, same one-call handoff |
|
|
69
71
|
| Secrets · encoding · drift guards | none | `scan secrets` · `encoding check` · `drift check --auto-fix` — CI-ready |
|
|
70
72
|
| Lock-in | one vendor | any agent, any language, 0 runtime dependencies |
|
|
71
73
|
|
|
@@ -126,13 +128,13 @@ MIT
|
|
|
126
128
|
<!-- leerness:project-readme:start -->
|
|
127
129
|
## Leerness Project Harness
|
|
128
130
|
|
|
129
|
-
이 프로젝트는 Leerness v1.36.
|
|
131
|
+
이 프로젝트는 Leerness v1.36.165 하네스를 사용합니다. AI 에이전트는 작업 전 `leerness handoff`로 컨텍스트를 적재하고, 작업 후 `leerness check`/`leerness audit`/`leerness session close`를 수행해야 합니다.
|
|
130
132
|
|
|
131
133
|
### 정체성 — AI 에이전트 운영 레이어 (UR-0030)
|
|
132
134
|
|
|
133
135
|
Leerness 는 **실행기/코딩 에이전트가 아니라**, 어떤 AI 코딩 에이전트(Claude Code · Codex · Cursor · Goose 등) 위에도 얹는 **범용 운영 레이어**입니다. 5개 공통 계층을 제공합니다:
|
|
134
136
|
|
|
135
|
-
- **기억(Memory)** — 프로젝트 상태/결정/진행을 `.
|
|
137
|
+
- **기억(Memory)** — 프로젝트 상태/결정/진행을 `.leerness/` 에 영속화
|
|
136
138
|
- **정책(Policy)** — 8단계 권한 등급 + enforce (read-only→publish), MCP 호출 게이트
|
|
137
139
|
- **인수인계(Handoff)** — 에이전트 간 컨텍스트 표준 전달 + `get_project_context` 1콜 온보딩
|
|
138
140
|
- **검증(Verification)** — 근거 기반 완료 검증으로 허위 완료 감지 (권고; CI 게이트 필수화 시 차단)
|
|
@@ -180,7 +182,7 @@ leerness memory restore decision <date|title>
|
|
|
180
182
|
|
|
181
183
|
### MCP server (외부 AI 통합)
|
|
182
184
|
|
|
183
|
-
Leerness v1.36.
|
|
185
|
+
Leerness v1.36.165는 stdio JSON-RPC MCP server를 내장합니다 — Claude Code · Cursor · Codex CLI 등 외부 AI에 **89개 도구**를 노출:
|
|
184
186
|
|
|
185
187
|
```jsonc
|
|
186
188
|
// 카테고리별
|
|
@@ -201,7 +203,7 @@ Leerness v1.36.161는 stdio JSON-RPC MCP server를 내장합니다 — Claude Co
|
|
|
201
203
|
`<<autonomous-loop-dynamic>>` 신호만 보내면 AI가:
|
|
202
204
|
1) 다음 라운드 후보 선정 → 2) 코드 변경 → 3) 회귀 테스트 갱신 → 4) 전체 e2e 스위트 통과 → 5) npm publish + git tag → 6) main push → 7) session close → 8) 다음 라운드 예약.
|
|
203
205
|
|
|
204
|
-
현재 누적: **v1.9.x → 1.36.
|
|
206
|
+
현재 누적: **v1.9.x → 1.36.165 릴리스 태그 이력** (수백 라운드) · _reports/는 비공개 보존.
|
|
205
207
|
|
|
206
208
|
### 성능 가이드
|
|
207
209
|
|
|
@@ -233,11 +235,11 @@ leerness release pack --close --auto-main-push
|
|
|
233
235
|
|
|
234
236
|
### Planning Files
|
|
235
237
|
|
|
236
|
-
- `.
|
|
237
|
-
- `.
|
|
238
|
-
- `.
|
|
239
|
-
- `.
|
|
240
|
-
- `.
|
|
238
|
+
- `.leerness/plan.md`: 전체 목표, milestone, 제외/드랍 범위
|
|
239
|
+
- `.leerness/progress-tracker.md`: 요청 단위 상태와 증거
|
|
240
|
+
- `.leerness/current-state.md`: 지금 이어서 할 작업
|
|
241
|
+
- `.leerness/session-handoff.md`: 다음 세션 인수인계 (자동 작성)
|
|
242
|
+
- `.leerness/lessons.md` / `decisions.md` / `rules.md`: 영구 메모리 (5 surface)
|
|
241
243
|
|
|
242
|
-
Last synced by Leerness v1.36.
|
|
244
|
+
Last synced by Leerness v1.36.165: 2026-08-26
|
|
243
245
|
<!-- leerness:project-readme:end -->
|
package/SECURITY.md
CHANGED
|
@@ -11,14 +11,14 @@ leerness is a **powerful CLI harness** (child_process, git, external AI CLIs, au
|
|
|
11
11
|
|
|
12
12
|
- **런타임 의존성 0** — `npm audit` 취약점 0. / Zero runtime dependencies.
|
|
13
13
|
- **postinstall 없음** — 설치만으로 코드가 실행되지 않음. / No postinstall scripts.
|
|
14
|
-
- **변경 전 자동 백업** — 모든 메타파일 변경 전 `.
|
|
14
|
+
- **변경 전 자동 백업** — 모든 메타파일 변경 전 `.leerness/archive/` 에 백업. / Auto-backup before any change.
|
|
15
15
|
- **동의 없는 자동 호출 금지** — 사용자 동의 없이 외부 LLM/API/CLI 를 자동 호출하지 않음. / Never auto-calls external LLMs/APIs/CLIs without consent.
|
|
16
16
|
|
|
17
17
|
## 권한 표면 / Capability surface
|
|
18
18
|
|
|
19
19
|
| 영역 / Area | 위험 / Risk | 설명 / What | opt-out |
|
|
20
20
|
|---|---|---|---|
|
|
21
|
-
| filesystem | 🟢 low | `.
|
|
21
|
+
| filesystem | 🟢 low | `.leerness/` 메타파일 생성·갱신, 변경 전 백업. 소스코드 직접 수정 안 함. | 핵심 동작 (백업으로 보호) |
|
|
22
22
|
| network | 🟢 low | `update --check` 의 npm 최신 버전 비교만. 외부 URL 자동 fetch 안 함. | `LEERNESS_OFFLINE=1` |
|
|
23
23
|
| childProcess | 🟡 medium | git(명시 명령 시), `npm test`(verify-code), 외부 CLI `--version` 감지. | verify 계열 한정 · 외부 CLI 는 opt-in |
|
|
24
24
|
| externalAgents | 🟡 medium | `agents dispatch/multi` — 기본은 명령 텍스트만 생성, `multi --execute` 시 실제 spawn. | `LEERNESS_ENABLE_*` 미설정 시 비활성 (기본 off) |
|
|
@@ -31,7 +31,7 @@ leerness is a **powerful CLI harness** (child_process, git, external AI CLIs, au
|
|
|
31
31
|
|
|
32
32
|
| 명령 / Command | 동작 / Action |
|
|
33
33
|
|---|---|
|
|
34
|
-
| `init` | `.
|
|
34
|
+
| `init` | `.leerness/` 50+ 파일 + `.claude` hook 생성 (변경 전 백업) |
|
|
35
35
|
| `update --yes` | 자동 마이그레이션 — 메타파일 갱신 |
|
|
36
36
|
| `agents multi --execute` | 외부 AI CLI 실제 spawn (병렬) |
|
|
37
37
|
| `release publish` / `sync-main` | git push + npm publish + GitHub release |
|