okstra 0.34.1 → 0.36.1
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/README.kr.md +27 -19
- package/README.md +27 -19
- package/docs/kr/architecture.md +59 -45
- package/docs/kr/cli.md +61 -18
- package/docs/pr-template-usage.md +65 -0
- package/docs/project-structure-overview.md +353 -354
- package/docs/superpowers/plans/2026-05-12-ticket-id-in-reports.md +1 -1
- package/docs/superpowers/plans/2026-05-14-convergence-queue-pruning.md +1 -1
- package/docs/superpowers/plans/2026-05-17-dual-format-final-report.md +1 -1
- package/docs/superpowers/plans/2026-05-20-final-report-language.md +1501 -0
- package/docs/superpowers/plans/2026-05-20-implementation-planning-multi-stage.md +1267 -0
- package/docs/superpowers/plans/2026-05-20-okstra-run-prompt-sot-b1.md +1007 -0
- package/docs/superpowers/plans/2026-05-20-wizard-messages-json-sot.md +720 -0
- package/docs/superpowers/plans/2026-05-20-wizard-prompt-json-sot-a1.md +681 -0
- package/docs/superpowers/plans/2026-05-21-improvement-discovery-task-type.md +1691 -0
- package/docs/superpowers/plans/2026-05-24-implementation-lead-context-slimming.md +1700 -0
- package/docs/superpowers/specs/2026-05-20-final-report-language-design.md +383 -0
- package/docs/superpowers/specs/2026-05-20-implementation-planning-multi-stage-design.md +320 -0
- package/docs/superpowers/specs/2026-05-20-okstra-run-prompt-sot-design.md +299 -0
- package/docs/superpowers/specs/2026-05-21-improvement-discovery-task-type-design.md +335 -0
- package/docs/task-process/README.md +74 -0
- package/docs/task-process/common-flow.md +166 -0
- package/docs/task-process/error-analysis.md +101 -0
- package/docs/task-process/final-verification.md +167 -0
- package/docs/task-process/implementation-planning.md +128 -0
- package/docs/task-process/implementation.md +149 -0
- package/docs/task-process/release-handoff.md +206 -0
- package/docs/task-process/requirements-discovery.md +115 -0
- package/package.json +1 -1
- package/runtime/BUILD.json +2 -2
- package/runtime/agents/SKILL.md +30 -7
- package/runtime/agents/workers/claude-worker.md +31 -6
- package/runtime/agents/workers/codex-worker.md +37 -10
- package/runtime/agents/workers/gemini-worker.md +34 -7
- package/runtime/agents/workers/report-writer-worker.md +19 -10
- package/runtime/bin/okstra-central.sh +6 -6
- package/runtime/bin/okstra-codex-exec.sh +49 -28
- package/runtime/bin/okstra-gemini-exec.sh +39 -21
- package/runtime/bin/okstra-render-final-report.py +13 -2
- package/runtime/bin/okstra-wrapper-status.py +155 -0
- package/runtime/bin/okstra.sh +2 -2
- package/runtime/prompts/launch.template.md +1 -0
- package/runtime/prompts/profiles/_common-contract.md +11 -6
- package/runtime/prompts/profiles/_implementation-deliverable.md +53 -0
- package/runtime/prompts/profiles/_implementation-executor.md +60 -0
- package/runtime/prompts/profiles/_implementation-verifier.md +76 -0
- package/runtime/prompts/profiles/error-analysis.md +3 -7
- package/runtime/prompts/profiles/implementation-planning.md +22 -21
- package/runtime/prompts/profiles/implementation.md +28 -118
- package/runtime/prompts/profiles/improvement-discovery.md +42 -0
- package/runtime/prompts/profiles/release-handoff.md +1 -1
- package/runtime/prompts/profiles/requirements-discovery.md +8 -12
- package/runtime/prompts/wizard/prompts.ko.json +230 -0
- package/runtime/python/lib/okstra/cli.sh +2 -49
- package/runtime/python/lib/okstra/globals.sh +21 -21
- package/runtime/python/lib/okstra/interactive.sh +7 -7
- package/runtime/python/okstra_ctl/clarification_items.py +3 -9
- package/runtime/python/okstra_ctl/consumers.py +53 -0
- package/runtime/python/okstra_ctl/final_report_schema.py +0 -7
- package/runtime/python/okstra_ctl/i18n.py +73 -0
- package/runtime/python/okstra_ctl/improvement_lenses.py +44 -0
- package/runtime/python/okstra_ctl/index.py +1 -1
- package/runtime/python/okstra_ctl/paths.py +26 -20
- package/runtime/python/okstra_ctl/render.py +166 -207
- package/runtime/python/okstra_ctl/render_final_report.py +53 -10
- package/runtime/python/okstra_ctl/run.py +299 -108
- package/runtime/python/okstra_ctl/run_context.py +22 -0
- package/runtime/python/okstra_ctl/seeding.py +186 -0
- package/runtime/python/okstra_ctl/session.py +65 -7
- package/runtime/python/okstra_ctl/wizard.py +348 -127
- package/runtime/python/okstra_ctl/workflow.py +21 -2
- package/runtime/python/okstra_ctl/worktree.py +54 -1
- package/runtime/python/okstra_project/resolver.py +4 -3
- package/runtime/python/okstra_token_usage/report.py +2 -2
- package/runtime/schemas/final-report-v1.0.schema.json +22 -16
- package/runtime/skills/okstra-brief/SKILL.md +102 -218
- package/runtime/skills/okstra-convergence/SKILL.md +2 -3
- package/runtime/skills/okstra-inspect/SKILL.md +581 -0
- package/runtime/skills/okstra-report-writer/SKILL.md +35 -15
- package/runtime/skills/okstra-run/SKILL.md +8 -7
- package/runtime/skills/okstra-schedule/SKILL.md +14 -157
- package/runtime/skills/okstra-setup/SKILL.md +28 -1
- package/runtime/skills/okstra-team-contract/SKILL.md +16 -107
- package/runtime/templates/okstra.CLAUDE.md +104 -0
- package/runtime/templates/reports/brief.template.md +204 -0
- package/runtime/templates/reports/final-report.template.md +93 -98
- package/runtime/templates/reports/i18n/en.json +135 -0
- package/runtime/templates/reports/i18n/ko.json +135 -0
- package/runtime/templates/reports/implementation-planning-input.template.md +18 -0
- package/runtime/templates/reports/improvement-discovery-input.template.md +78 -0
- package/runtime/templates/reports/schedule.template.md +12 -3
- package/runtime/templates/reports/task-brief.template.md +2 -2
- package/runtime/templates/worker-prompt-preamble.md +108 -0
- package/runtime/validators/lib/fixtures.sh +30 -0
- package/runtime/validators/lib/runners.sh +1 -1
- package/runtime/validators/validate-implementation-plan-stages.py +211 -0
- package/runtime/validators/validate-run.py +121 -26
- package/runtime/validators/validate-workflow.sh +2 -2
- package/runtime/validators/validate_improvement_report.py +275 -0
- package/src/config.mjs +18 -0
- package/src/install.mjs +41 -14
- package/src/setup.mjs +133 -1
- package/src/uninstall.mjs +27 -3
- package/runtime/skills/okstra-history/SKILL.md +0 -165
- package/runtime/skills/okstra-logs/SKILL.md +0 -173
- package/runtime/skills/okstra-report-finder/SKILL.md +0 -111
- package/runtime/skills/okstra-status/SKILL.md +0 -246
- package/runtime/skills/okstra-time-summary/SKILL.md +0 -172
package/README.kr.md
CHANGED
|
@@ -39,13 +39,13 @@ okstra 는 단발성 코드 리뷰 도구가 **아닙니다**. **여러 phase
|
|
|
39
39
|
okstra/ npm 패키지 = repo 루트
|
|
40
40
|
├── package.json name: "okstra"
|
|
41
41
|
├── bin/okstra 노드 CLI 진입점
|
|
42
|
-
├── src/
|
|
42
|
+
├── src/ Node CLI 명령 모듈 (install, wizard, config, render, token usage, ...)
|
|
43
43
|
├── tools/build.mjs runtime/ 동기화 스크립트 (prepack 에서 호출)
|
|
44
|
-
├── runtime/ gitignored
|
|
44
|
+
├── runtime/ gitignored 설치 payload; ~/.okstra 로 복사
|
|
45
45
|
├── scripts/ python + bash 런타임 소스
|
|
46
46
|
├── skills/ Claude Code 스킬 마크다운 소스 (스킬 13종)
|
|
47
47
|
├── agents/ lead SKILL.md + workers/
|
|
48
|
-
├── prompts/, templates/, validators/
|
|
48
|
+
├── prompts/, schemas/, templates/, validators/
|
|
49
49
|
├── docs/kr/ 한국어 상세 매뉴얼 (architecture.md, cli.md)
|
|
50
50
|
├── tests/, tests-e2e/
|
|
51
51
|
├── .claude-plugin/plugin.json 보조 skills-CLI 채널 매니페스트
|
|
@@ -53,7 +53,7 @@ okstra/ npm 패키지 = repo 루트
|
|
|
53
53
|
└── RELEASING.md, CHANGELOG.md, README.md, README.kr.md
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
`runtime/` 은 `prepack` 시점에 `tools/build.mjs` 가 `scripts/`, `skills/`, `agents/`, `prompts/`, `templates/`, `validators/` 로부터 다시 빌드합니다. npm
|
|
56
|
+
`runtime/` 은 `prepack` 시점에 `tools/build.mjs` 가 `scripts/`, `skills/`, `agents/`, `prompts/`, `schemas/`, `templates/`, `validators/` 로부터 다시 빌드합니다. `~/.okstra` 로 복사되는 설치 payload이며, npm package는 이 payload와 함께 Node CLI(`bin/`, `src/`), docs, README를 배포합니다.
|
|
57
57
|
|
|
58
58
|
### 2.2 설치 후 사용자 머신 레이아웃
|
|
59
59
|
|
|
@@ -62,16 +62,18 @@ okstra/ npm 패키지 = repo 루트
|
|
|
62
62
|
├── version 패키지 버전 stamp
|
|
63
63
|
├── lib/python/ okstra_project/, okstra_ctl/, okstra_token_usage/, lib/
|
|
64
64
|
├── bin/ okstra.sh, codex-exec, gemini-exec, ...
|
|
65
|
+
├── templates/ report asset, settings template, okstra.CLAUDE.md
|
|
65
66
|
├── installed-skills.json 설치된 스킬 매니페스트 (uninstall 이 사용)
|
|
66
67
|
├── installed-agents.json 설치된 워커 에이전트 매니페스트 (uninstall 이 사용)
|
|
67
68
|
├── recent.jsonl, active.jsonl run 인덱스
|
|
68
69
|
├── projects/ 프로젝트별 메타데이터 미러
|
|
69
|
-
├── worktrees/
|
|
70
|
-
│
|
|
71
|
-
|
|
70
|
+
├── worktrees/ task-key 당 하나의 격리 git worktree
|
|
71
|
+
│ (모든 phase가 공유; run 종료 후 자동 삭제하지 않음)
|
|
72
|
+
├── archive/ 완료된 run
|
|
73
|
+
└── .locks/ central/task mutex 파일
|
|
72
74
|
|
|
73
75
|
~/.claude/skills/ Claude Code 가 자동 인식
|
|
74
|
-
└── okstra-*/SKILL.md 스킬
|
|
76
|
+
└── okstra-*/SKILL.md 스킬 13종 (§3.3 참조)
|
|
75
77
|
|
|
76
78
|
~/.claude/agents/ Claude Code 가 자동 인식 (subagent 디스커버리 경로)
|
|
77
79
|
└── {claude,codex,gemini,report-writer}-worker.md worker subagent 정의
|
|
@@ -80,6 +82,8 @@ okstra/ npm 패키지 = repo 루트
|
|
|
80
82
|
<프로젝트 루트>/.project-docs/okstra/
|
|
81
83
|
├── project.json {projectId, projectRoot, ...} (`/okstra-setup` 이 작성)
|
|
82
84
|
├── discovery/{task-catalog,latest-task}.json
|
|
85
|
+
├── glossary.md okstra-owned project terminology
|
|
86
|
+
├── decisions/<NNNN>-<slug>.md okstra-owned decision records
|
|
83
87
|
└── tasks/<task-group>/<task-id>/ task bundle (runs, manifest, reports)
|
|
84
88
|
```
|
|
85
89
|
|
|
@@ -88,7 +92,7 @@ okstra/ npm 패키지 = repo 루트
|
|
|
88
92
|
| 리소스 | 위치 | 소유자 |
|
|
89
93
|
|---|---|---|
|
|
90
94
|
| 런타임 코드 (python + bash) | `~/.okstra/{lib/python, bin}` | `okstra install` |
|
|
91
|
-
| agents/prompts/templates/validators | npm 패키지의 `runtime/` | `okstra` 패키지 자체 (`okstra paths` 로 해석) |
|
|
95
|
+
| agents/prompts/schemas/templates/validators | npm 패키지의 `runtime/` | `okstra` 패키지 자체 (`okstra paths` 로 해석) |
|
|
92
96
|
| 스킬 마크다운 | `~/.claude/skills/<name>/SKILL.md` | `okstra install` (`installed-skills.json` 에 트래킹) |
|
|
93
97
|
| 워커 에이전트 마크다운 | `~/.claude/agents/<worker>.md` | `okstra install` (`installed-agents.json` 에 트래킹) |
|
|
94
98
|
| 프로젝트 메타데이터 | `<project>/.project-docs/okstra/` | `/okstra-setup` + 프로젝트 자체 |
|
|
@@ -102,7 +106,7 @@ okstra/ npm 패키지 = repo 루트
|
|
|
102
106
|
npx -y okstra@latest install
|
|
103
107
|
```
|
|
104
108
|
|
|
105
|
-
`~/.okstra/{lib/python, bin, version}`, `~/.claude/skills/` 아래 스킬 마크다운 13개, `~/.
|
|
109
|
+
`~/.okstra/{lib/python, bin, templates, version}`, `~/.claude/skills/` 아래 스킬 마크다운 13개, `~/.claude/agents/` 아래 worker agent 4개, `~/.okstra/` 의 설치 asset manifest 를 생성합니다. 재실행은 idempotent — 파일별 hash 를 비교하고 바뀐 파일만 갱신합니다.
|
|
106
110
|
|
|
107
111
|
검증:
|
|
108
112
|
|
|
@@ -124,7 +128,7 @@ okstra install # 'npx -y okstra@latest install' 와 동일
|
|
|
124
128
|
|
|
125
129
|
글로벌 설치는 Node CLI 를 PATH 에 등록할 뿐입니다. 런타임(`~/.okstra/`) 과 Claude 스킬(`~/.claude/skills/`) 은 여전히 `okstra install` 이 생성합니다 — `npm i -g` 에 포함되지 않습니다. 이후 업그레이드: `npm i -g okstra@latest && okstra install`. 글로벌 바이너리 제거: `npm uninstall -g okstra` (`~/.okstra/` 는 그대로; 그것까지 지우려면 `okstra uninstall`).
|
|
126
130
|
|
|
127
|
-
**글로벌 설치 시 스킬 동작.** 모든 okstra 스킬은 PATH 에 잡힌 `okstra` 를 자동 감지하여 `npx -y okstra@latest` 대신 우선 사용합니다. 즉 글로벌 설치를 해두면 매 스킬 호출(`okstra-run`, `okstra-
|
|
131
|
+
**글로벌 설치 시 스킬 동작.** 모든 okstra 스킬은 PATH 에 잡힌 `okstra` 를 자동 감지하여 `npx -y okstra@latest` 대신 우선 사용합니다. 즉 글로벌 설치를 해두면 매 스킬 호출(`okstra-run`, `okstra-inspect`, `okstra-schedule`, `okstra-setup` Step 2 의 Step 0) 마다 npx 가 패키지 fetch / 버전 체크하던 비용이 사라집니다. 스킬이 본인이 설치한 버전을 그대로 쓰므로 **업그레이드 타이밍은 사용자가 통제** 합니다 — 더 이상 호출마다 `@latest` 가 강제되지 않습니다. 새 릴리스를 받으려면 원하는 시점에 `npm i -g okstra@latest && okstra install` 을 실행하세요. `okstra` 가 PATH 에 없으면 스킬은 자동으로 npx fallback 으로 동작하므로 글로벌 설치가 없는 환경에서도 변경 없이 그대로 동작합니다.
|
|
128
132
|
|
|
129
133
|
### 3.2 프로젝트 등록 (프로젝트당 1회)
|
|
130
134
|
|
|
@@ -149,13 +153,13 @@ Claude Code 세션 안에서 사용하는 슬래시 커맨드:
|
|
|
149
153
|
|
|
150
154
|
| 커맨드 | 용도 |
|
|
151
155
|
|---|---|
|
|
156
|
+
| `/okstra-brief` | ticket, 요구사항 문서, 링크, 대화 내용을 `okstra-run`용 task brief로 변환 |
|
|
152
157
|
| `/okstra-run` | 새 task 시작 (또는 기존 task 의 다음 phase 이어가기) |
|
|
153
|
-
| `/okstra-
|
|
154
|
-
| `/okstra-history` | 과거 task 목록, 이어할 task 선택 |
|
|
158
|
+
| `/okstra-inspect` | 통합 read-side 스킬. sub-command: `status` (phase / 상태, workStatus 설정), `history` (과거 task / re-run / resume), `report` (final-report 조회·읽기), `time` (소요 시간 breakdown), `logs` (wrapper log sidecar 조회·정리 제안) |
|
|
155
159
|
| `/okstra-schedule` | task-group 전체에 대한 작업 계획표 생성 |
|
|
156
160
|
| `/okstra-setup` | 프로젝트별 부트스트랩 (§3.2) |
|
|
157
161
|
|
|
158
|
-
이 외에 `okstra-context-loader`, `okstra-team-contract`, `okstra-convergence`, `okstra-report-writer
|
|
162
|
+
이 외에 `okstra-context-loader`, `okstra-team-contract`, `okstra-convergence`, `okstra-report-writer` 4종은 `user-invocable: false` 로 표시되어 슬래시 커맨드로 노출되지 않습니다. lead 또는 Claude 가 자연어 트리거나 okstra phase 흐름에 따라 자동 호출합니다.
|
|
159
163
|
|
|
160
164
|
### 3.4 CLI 모드 (선택)
|
|
161
165
|
|
|
@@ -166,7 +170,8 @@ Claude Code 세션 밖에서 task 를 시작하려면:
|
|
|
166
170
|
--project-id <id> \
|
|
167
171
|
--task-group <group> \
|
|
168
172
|
--task-id <id> \
|
|
169
|
-
--task-type <error-analysis|implementation-planning
|
|
173
|
+
--task-type <requirements-discovery|improvement-discovery|error-analysis|implementation-planning|implementation|final-verification|release-handoff> \
|
|
174
|
+
--base-ref <branch|tag|sha> \
|
|
170
175
|
--task-brief ./brief.md
|
|
171
176
|
```
|
|
172
177
|
|
|
@@ -176,18 +181,20 @@ Claude Code 세션 밖에서 task 를 시작하려면:
|
|
|
176
181
|
|
|
177
182
|
- `--executor claude|codex|gemini` — `--task-type implementation` 에서 파일을 mutate 할 provider 를 선택합니다. 나머지 두 provider 는 같은 run 에서 strict read-only verifier 로 dispatch 됩니다 ([`docs/kr/cli.md`](docs/kr/cli.md#--executor)).
|
|
178
183
|
- `--work-category bugfix|feature|refactor|ops|improvement` — `requirements-discovery` phase 를 건너뛰는 경우 작업 분류를 직접 지정합니다.
|
|
179
|
-
- `--approve` — `--approved-plan` 과 함께 사용하면
|
|
184
|
+
- `--approve` — `--approved-plan` 과 함께 사용하면 plan 의 YAML frontmatter `approved` field 를 `false` → `true` 로 toggle 합니다 (제거된 `--ack-approved` alias 와 구 `[ ] Approved` 체크박스 마커 대체).
|
|
180
185
|
|
|
181
186
|
0.8.0 이후 `main` 에 추가된 workflow 변경:
|
|
182
187
|
|
|
183
|
-
-
|
|
188
|
+
- **모든 task-type 격리 worktree 자동 provisioning** — prepare 단계에서 `okstra-ctl` 이 task-key 당 한 번 `git worktree add ~/.okstra/worktrees/<project-id>/<task-group-segment>/<task-id-segment>` 를 수행해 격리된 working tree 와 브랜치 `<work-category-prefix>-<task-id-segment>` (예: `feat-dev-9436`, `fix-dev-7311`) 를 만듭니다. base ref 는 사용자가 `--base-ref` 로 지정 (release-handoff PR base picker 와 동일한 메뉴: `main` / `dev` / `staging` / `preprod` / `prod` / 직접 입력). 첫 phase 에서는 필수이며, okstra-run skill 이 `AskUserQuestion` 으로 수집합니다 — 비대화형 호출자는 `--base-ref` 플래그를 직접 전달해야 prepare 가 통과합니다. 같은 task-key 의 모든 후속 phase(`requirements-discovery` → `error-analysis` → `implementation-planning` → `implementation` → `final-verification` → `release-handoff`)는 같은 path/branch를 재사용합니다. caller 가 이미 다른 worktree 안에 있거나 project_root 가 git repo 가 아니면 provisioning 은 skip 됩니다. 수동 cleanup: `git worktree remove <path>` → `git branch -D <branch>` + registry 항목 release/remove. 상세: [`docs/kr/architecture.md`](docs/kr/architecture.md) *Task type* 섹션, [`docs/kr/cli.md#--executor`](docs/kr/cli.md#--executor).
|
|
184
189
|
- **`release-handoff` lifecycle phase** — `final-verification` 이 `verdict=accepted` 를 반환한 직후에 실행되는 신규 phase. lead 가 Claude worker (drafter) 를 통해 commit message · PR body 후보를 만들고, `AskUserQuestion` 으로 사용자에게 (1) action (`commit only` / `commit + PR` / `skip`), (2) PR base branch (`staging` / `preprod` / `prod` / `main` / `dev` / 직접 입력), (3) message handling (`use as-is` / `edit then proceed` / `cancel`) 세 가지를 순서대로 묻습니다. 사용자가 메뉴로 선택한 git / gh 명령만 실행되고, force-push, base 브랜치 직접 push, hook bypass (`--no-verify`), release publish (`gh release`, `npm publish`, ...) 는 금지됩니다. 이 phase 에서는 소스 코드를 수정하지 않습니다. profile: [`prompts/profiles/release-handoff.md`](prompts/profiles/release-handoff.md).
|
|
185
190
|
- **PR 본문 템플릿 설정** (release-handoff) — PR 본문은 마크다운 템플릿에서 채워집니다. 해석 우선순위: 1회성 override (`--pr-template-path` 또는 okstra-run Step 6 prompt) → `<project_root>/.project-docs/okstra/project.json` 의 `prTemplatePath` → `~/.okstra/config.json` 의 `prTemplatePath` → 스킬 디폴트 `~/.claude/skills/okstra-run/templates/pr-body.template.md`. 템플릿 등록 명령: `okstra config set pr-template-path <path> [--scope project|global]` (project 스코프는 project root 기준 상대경로 허용, global 스코프는 절대경로 또는 `~/` 시작 경로만 허용). 현재 설정 확인: `okstra config get pr-template-path --scope all` 은 각 스코프 값 + 실제로 우승하는 경로(effective) 까지 보여줍니다. 디폴트 템플릿은 `## Summary` / `## Changes` / `## Test plan` / `## Linked issues` 4 섹션 + HTML 주석으로 lead 작성 가이드를 포함하며, PR 생성 직전에 lead 가 주석을 제거합니다.
|
|
186
191
|
- **프로파일 워커 로스터 검증** — `--workers <csv>` 와 okstra-run Step 6 의 워커 prompt 는 해당 프로파일의 `Required workers:` 블록에 선언된 워커 ID 만 허용합니다. 프로파일에 없는 워커 (예: `release-handoff` 에서 `codex` / `gemini`) 를 요청하면 명확한 에러로 거절되고, 인터랙티브 prompt 도 프로파일이 실제로 받는 워커만 보여줍니다.
|
|
187
|
-
-
|
|
192
|
+
- **다단계 `implementation-planning` / `implementation`** — `implementation-planning` 은 항상 Stage Map + N 개 stage 섹션으로 산출합니다. 각 stage 의 step 은 ≤ 6 이며 `depends-on (none)` 인 stage 들은 별도 `implementation` run 으로 병렬 실행할 수 있습니다. 각 `implementation` 호출은 한 stage 만 실행하고 (`--stage <auto|N>`), 자동 생성되는 evidence sidecar (`carry/stage-<N>.json`) 가 다음 stage 의 carry-in 으로 흡수됩니다. `implementation-planning` run 디렉터리에 `consumers.jsonl` 역링크가 누적되어 어느 run 이 어느 stage 를 소비했는지 추적됩니다.
|
|
193
|
+
- **Phase 6 plan-body verification (implementation-planning 전용)** — Report writer worker 가 final-report draft 를 작성한 직후, 사용자 승인 gate 직전에 lead 가 1 라운드의 사후 검증을 추가로 돌립니다. 합성된 `## 4.5` plan 본문에서 `P-Opt-*` / `P-Step-*` / `P-Dep-*` / `P-Val-*` / `P-Rb-*` plan-item 을 추출해 모든 analyser 워커에게 `AGREE` / `DISAGREE(a-e)` / `SUPPLEMENT` 평결을 요청합니다. 집계된 gate 결과는 `passed` / `passed-with-dissent` / `blocked-by-disagreement` / `aborted-non-result` 중 하나. frontmatter `approved` 필드는 항상 `false` 로 발행되며, gate 가 `blocked-by-disagreement` 또는 `aborted-non-result` 일 때 writer 는 `approved: false` 를 유지해야 하고 (이런 gate 결과로 `approved: true` 로 ship 된 report 는 validator 가 거부), `majority-disagree` 항목을 `## 5. Clarification Items` 의 `Blocks=approval` row 로 변환합니다. 빠른 반복용 opt-out: `--no-plan-verification` (기본값: 활성). 자세한 라운드 프로토콜은 [`skills/okstra-convergence/SKILL.md`](skills/okstra-convergence/SKILL.md) 의 "Plan-body verification mode" 섹션과 [`docs/kr/cli.md#--no-plan-verification`](docs/kr/cli.md#--no-plan-verification).
|
|
188
194
|
- **Brief = translation layer + Step 6.5 reporter batch confirmation** — `okstra-brief` 가 외부 입력 (이슈 ticket, 요구사항 문서, 사용자 메시지) 을 verbatim 으로 옮기되 okstra 가 추가한 부분은 labelled augmentation 으로 구분하는 translation layer 가 됐습니다. Step 6.5 가 brief 가 옮기는 과정에서 의미 변화가 발생했는지 사용자에게 일괄 확인받아 `Reporter Confirmations` 섹션에 기록하고, 모든 분석 profile 은 이 섹션의 존재를 phase 분석 진입 precondition 으로 강제합니다 (validator: `validators/validate-brief.py`).
|
|
189
|
-
- **Artifact-home rule (`.project-docs/okstra/`)** — okstra
|
|
195
|
+
- **Artifact-home rule (`.project-docs/okstra/`)** — okstra 의 project artifact root 는 `<project>/.project-docs/okstra/` 하나뿐입니다. 이 root 밖은 okstra memory 가 아니며, Source Material 또는 Reporter Confirmations 가 명시적으로 cite 한 경우에만 read-only 로 읽습니다. 쓰기는 같은 explicit request path 를 요구합니다. okstra-internal 등가물: 용어집 `glossary.md`, 결정 기록 `decisions/<NNNN>-<slug>.md` (`implementation-planning` phase 에서 평가).
|
|
190
196
|
- **Dual-format final-report views** — Phase 7 가 `final-report-<task-type>-<seq>.md` 를 쓰면 `okstra render-views` 가 같은 `reports/` 폴더에 두 view 를 자동 생성합니다: AI 다음-phase 입력용 슬림 markdown, 사람 reviewer 용 self-contained HTML (CSS/JS 인라인, 외부 URL 0). HTML 의 `Export user response` 버튼은 `## 5. Clarification Items` 입력을 `runs/<task-type>/user-responses/user-response-<task-type>-<seq>.md` 사이드카로 직렬화해 다음 phase 가 소비합니다. 원본 MD 는 어떤 경우에도 view 생성으로 인해 수정되지 않습니다.
|
|
197
|
+
- **`improvement-discovery` task-type (sidetrack entry-point)** — 코드베이스 범위 + 우선순위 lens 화이트리스트 안에서 multi-worker 합의 기반 개선 후보 N개 (기본 8, 절대 cap 12) 도출. `PHASE_SEQUENCE` 외부 sidetrack entry-point — 사용자가 후보를 골라 각각 새 task-id 로 `requirements-discovery` / `implementation-planning` / `error-analysis` 진입. lens enum SSOT: [`scripts/okstra_ctl/improvement_lenses.py`](scripts/okstra_ctl/improvement_lenses.py). 출력 섹션: `## 4.9 Improvement Candidates` (10-column 표). validator: [`validators/validate_improvement_report.py`](validators/validate_improvement_report.py).
|
|
191
198
|
|
|
192
199
|
### 3.5 운영 명령
|
|
193
200
|
|
|
@@ -200,6 +207,7 @@ Claude Code 세션 밖에서 task 를 시작하려면:
|
|
|
200
207
|
| `npx -y okstra@latest check-project` | 현재 프로젝트가 `setup` 으로 등록됐는지 검증 |
|
|
201
208
|
| `npx -y okstra@latest config <get\|set\|unset\|show> [key] [value] [--scope project\|global\|all]` | okstra 설정 읽기/쓰기. 현재 지원 키: `pr-template-path` (project.json 또는 `~/.okstra/config.json` 의 `prTemplatePath` 갱신) |
|
|
202
209
|
| `npx -y okstra@latest render-views <final-report.md>` | final-report MD 한 본을 입력으로 슬림 MD + HTML 두 view 를 (재)생성 (Phase 7 step 1.5; 멱등) |
|
|
210
|
+
| `npx -y okstra@latest token-usage ...` | run token usage 수집/치환. 설치된 Python token usage CLI를 감싼 Node wrapper |
|
|
203
211
|
| `npx -y okstra@latest uninstall` | 런타임 + 스킬 제거; 사용자 데이터(`recent.jsonl`, `projects/`, …)는 보존 |
|
|
204
212
|
| `npx -y okstra@latest uninstall --purge -y` | 사용자 데이터까지 모두 제거 |
|
|
205
213
|
|
package/README.md
CHANGED
|
@@ -39,20 +39,20 @@ okstra is **not** a one-shot code reviewer. It targets work that **spans multipl
|
|
|
39
39
|
okstra/ npm package = repo root
|
|
40
40
|
├── package.json name: "okstra"
|
|
41
41
|
├── bin/okstra Node CLI entrypoint
|
|
42
|
-
├── src/
|
|
42
|
+
├── src/ Node CLI command modules (install, wizard, config, render, token usage, ...)
|
|
43
43
|
├── tools/build.mjs runtime/ sync script (invoked by prepack)
|
|
44
|
-
├── runtime/ gitignored
|
|
44
|
+
├── runtime/ gitignored install payload copied to ~/.okstra
|
|
45
45
|
├── scripts/ python + bash runtime sources
|
|
46
46
|
├── skills/ Claude Code skill markdown sources (13 skills)
|
|
47
47
|
├── agents/ lead SKILL.md + workers/
|
|
48
|
-
├── prompts/, templates/, validators/
|
|
48
|
+
├── prompts/, schemas/, templates/, validators/
|
|
49
49
|
├── tests/, tests-e2e/
|
|
50
50
|
├── .claude-plugin/plugin.json secondary skills-CLI channel manifest
|
|
51
51
|
├── .github/workflows/ release-please.yml, release.yml
|
|
52
52
|
└── RELEASING.md, CHANGELOG.md, README.md, README.kr.md
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
`runtime/` is rebuilt from `scripts/`, `skills/`, `agents/`, `prompts/`, `templates/`, and `validators/` by `tools/build.mjs` during `prepack`. It is the
|
|
55
|
+
`runtime/` is rebuilt from `scripts/`, `skills/`, `agents/`, `prompts/`, `schemas/`, `templates/`, and `validators/` by `tools/build.mjs` during `prepack`. It is the install payload copied into `~/.okstra`; the npm package also ships the Node CLI (`bin/`, `src/`), docs, and READMEs.
|
|
56
56
|
|
|
57
57
|
### 2.2 User-machine layout after install
|
|
58
58
|
|
|
@@ -61,16 +61,18 @@ okstra/ npm package = repo root
|
|
|
61
61
|
├── version package version stamp
|
|
62
62
|
├── lib/python/ okstra_project/, okstra_ctl/, okstra_token_usage/, lib/
|
|
63
63
|
├── bin/ okstra.sh, codex-exec, gemini-exec, ...
|
|
64
|
+
├── templates/ report assets, settings template, okstra.CLAUDE.md
|
|
64
65
|
├── installed-skills.json manifest of installed skills (used by uninstall)
|
|
65
66
|
├── installed-agents.json manifest of installed worker agents (used by uninstall)
|
|
66
67
|
├── recent.jsonl, active.jsonl run index
|
|
67
68
|
├── projects/ per-project metadata mirror
|
|
68
|
-
├── worktrees/ isolated git
|
|
69
|
-
│
|
|
70
|
-
|
|
69
|
+
├── worktrees/ one isolated git worktree per task-key
|
|
70
|
+
│ (shared by all phases; not auto-removed)
|
|
71
|
+
├── archive/ completed runs
|
|
72
|
+
└── .locks/ central/task mutex files
|
|
71
73
|
|
|
72
74
|
~/.claude/skills/ discovered automatically by Claude Code
|
|
73
|
-
└── okstra-*/SKILL.md
|
|
75
|
+
└── okstra-*/SKILL.md 13 skills total (see §3.3)
|
|
74
76
|
|
|
75
77
|
~/.claude/agents/ discovered automatically by Claude Code
|
|
76
78
|
└── {claude,codex,gemini,report-writer}-worker.md subagent definitions
|
|
@@ -79,6 +81,8 @@ okstra/ npm package = repo root
|
|
|
79
81
|
<project-root>/.project-docs/okstra/
|
|
80
82
|
├── project.json {projectId, projectRoot, ...} (written by /okstra-setup)
|
|
81
83
|
├── discovery/{task-catalog,latest-task}.json
|
|
84
|
+
├── glossary.md okstra-owned project terminology
|
|
85
|
+
├── decisions/<NNNN>-<slug>.md okstra-owned decision records
|
|
82
86
|
└── tasks/<task-group>/<task-id>/ task bundle (runs, manifest, reports)
|
|
83
87
|
```
|
|
84
88
|
|
|
@@ -87,7 +91,7 @@ okstra/ npm package = repo root
|
|
|
87
91
|
| Resource | Location | Owner |
|
|
88
92
|
|---|---|---|
|
|
89
93
|
| Runtime code (python + bash) | `~/.okstra/{lib/python, bin}` | `okstra install` |
|
|
90
|
-
| agents/prompts/templates/validators | npm package's `runtime/` | the `okstra` package (resolved via `okstra paths`) |
|
|
94
|
+
| agents/prompts/schemas/templates/validators | npm package's `runtime/` | the `okstra` package (resolved via `okstra paths`) |
|
|
91
95
|
| Skill markdown | `~/.claude/skills/<name>/SKILL.md` | `okstra install` (tracked in `installed-skills.json`) |
|
|
92
96
|
| Worker agent markdown | `~/.claude/agents/<worker>.md` | `okstra install` (tracked in `installed-agents.json`) |
|
|
93
97
|
| Project metadata | `<project>/.project-docs/okstra/` | `/okstra-setup` + the project itself |
|
|
@@ -101,7 +105,7 @@ okstra/ npm package = repo root
|
|
|
101
105
|
npx -y okstra@latest install
|
|
102
106
|
```
|
|
103
107
|
|
|
104
|
-
Provisions `~/.okstra/{lib/python, bin, version}`, the 13 skill markdown files under `~/.claude/skills/`,
|
|
108
|
+
Provisions `~/.okstra/{lib/python, bin, templates, version}`, the 13 skill markdown files under `~/.claude/skills/`, the 4 worker agents under `~/.claude/agents/`, and the installed-asset manifests in `~/.okstra/`. Re-running is idempotent — per-file hashes are compared and only changed files are touched.
|
|
105
109
|
|
|
106
110
|
Verify:
|
|
107
111
|
|
|
@@ -123,7 +127,7 @@ okstra install # same as 'npx -y okstra@latest install'
|
|
|
123
127
|
|
|
124
128
|
The global install only registers the Node CLI on your PATH. The runtime (`~/.okstra/`) and the Claude skills (`~/.claude/skills/`) are still provisioned by `okstra install` — they are not part of `npm i -g`. To upgrade later: `npm i -g okstra@latest && okstra install`. To remove the global binary: `npm uninstall -g okstra` (leaves `~/.okstra/` untouched; remove that with `okstra uninstall`).
|
|
125
129
|
|
|
126
|
-
**Skill behaviour with a global install.** All okstra skills auto-detect a PATH-resolved `okstra` and prefer it over `npx -y okstra@latest`. That means a global install removes the per-call npx fetch / version-check from every skill invocation (Step 0 of `okstra-run`, `okstra-
|
|
130
|
+
**Skill behaviour with a global install.** All okstra skills auto-detect a PATH-resolved `okstra` and prefer it over `npx -y okstra@latest`. That means a global install removes the per-call npx fetch / version-check from every skill invocation (Step 0 of `okstra-run`, `okstra-inspect`, `okstra-schedule`, `okstra-setup` Step 2). Since the skill uses your globally installed version directly, *you* control upgrade timing — `@latest` is no longer forced on each call. Run `npm i -g okstra@latest && okstra install` whenever you want to pull a new release. If `okstra` is not on PATH the skill silently falls back to npx, so machines without a global install keep working unchanged.
|
|
127
131
|
|
|
128
132
|
### 3.2 Register a project (once per project)
|
|
129
133
|
|
|
@@ -148,13 +152,13 @@ User-facing slash commands inside a Claude Code session:
|
|
|
148
152
|
|
|
149
153
|
| Command | Use |
|
|
150
154
|
|---|---|
|
|
155
|
+
| `/okstra-brief` | Turn a ticket, requirements doc, link, or conversation into an `okstra-run` task brief |
|
|
151
156
|
| `/okstra-run` | Start a new task (or resume the next phase of an existing one) |
|
|
152
|
-
| `/okstra-
|
|
153
|
-
| `/okstra-history` | List past tasks, choose what to resume |
|
|
157
|
+
| `/okstra-inspect` | Unified read-side. Sub-commands: `status` (phase / state, workStatus update), `history` (past runs, re-run, resume), `report` (find/read final-report), `time` (elapsed-time breakdown), `logs` (wrapper log sidecar inventory + cleanup) |
|
|
154
158
|
| `/okstra-schedule` | Generate a work schedule for an entire task-group |
|
|
155
159
|
| `/okstra-setup` | Per-project bootstrap (§3.2) |
|
|
156
160
|
|
|
157
|
-
|
|
161
|
+
Four support skills — `okstra-context-loader`, `okstra-team-contract`, `okstra-convergence`, `okstra-report-writer` — are marked `user-invocable: false` and do not appear as slash commands. Claude still invokes them automatically via natural-language triggers or okstra phase flow.
|
|
158
162
|
|
|
159
163
|
### 3.4 CLI mode (optional)
|
|
160
164
|
|
|
@@ -165,7 +169,8 @@ To kick off a task from outside a Claude Code session:
|
|
|
165
169
|
--project-id <id> \
|
|
166
170
|
--task-group <group> \
|
|
167
171
|
--task-id <id> \
|
|
168
|
-
--task-type <error-analysis|implementation-planning
|
|
172
|
+
--task-type <requirements-discovery|improvement-discovery|error-analysis|implementation-planning|implementation|final-verification|release-handoff> \
|
|
173
|
+
--base-ref <branch|tag|sha> \
|
|
169
174
|
--task-brief ./brief.md
|
|
170
175
|
```
|
|
171
176
|
|
|
@@ -175,18 +180,20 @@ Notable flags added in 0.7.0 / 0.8.0:
|
|
|
175
180
|
|
|
176
181
|
- `--executor claude|codex|gemini` — pick the provider that mutates files during `--task-type implementation`. The other two providers are still dispatched as read-only verifiers (see [`docs/kr/cli.md`](docs/kr/cli.md#--executor)).
|
|
177
182
|
- `--work-category bugfix|feature|refactor|ops|improvement` — classify a task when the lifecycle skips `requirements-discovery`.
|
|
178
|
-
- `--approve` — combined with `--approved-plan`,
|
|
183
|
+
- `--approve` — combined with `--approved-plan`, flips the plan's YAML frontmatter `approved` field from `false` to `true` (replaces the removed `--ack-approved` alias and the older `[ ] Approved` checkbox marker).
|
|
179
184
|
|
|
180
185
|
Recent workflow additions (post-0.8.0, on `main`):
|
|
181
186
|
|
|
182
|
-
- **Isolated task worktree for every task-type** — prepare automatically runs `git worktree add ~/.okstra/worktrees/<project>/<group>/<task>/` on a fresh branch `<work-category-prefix>-<task-id-segment>` branched from the **user-chosen base ref** (`--base-ref`, mirroring the `release-handoff` PR-base picker: `main` / `dev` / `staging` / `preprod` / `prod` / any local ref) the first time a task-key is seen. `--base-ref` is required on first phase; the okstra-run skill collects it via `AskUserQuestion`, non-interactive callers must pass the flag explicitly. Every subsequent phase of the same task-key (`requirements-discovery` → `error-analysis` → `implementation-planning` → `implementation`) reuses the same path and branch, so phase N inherits the working-tree state phase N-1 left behind. A global registry at `~/.okstra/worktrees/registry.json` (flock-guarded) reserves task-keys and branches across concurrent runs; all path/branch segments are sanitised (`/`, `:`, etc. → `-`). The worktree is preserved after every run for follow-up phases, PR authoring, and rollback. Skip paths: when the caller is already inside another worktree or `project_root` is not a git repo, provisioning no-ops. Manual cleanup: `git worktree remove <path>` → `git branch -D <branch>` plus removing the task-key
|
|
187
|
+
- **Isolated task worktree for every task-type** — prepare automatically runs `git worktree add ~/.okstra/worktrees/<project>/<group>/<task>/` on a fresh branch `<work-category-prefix>-<task-id-segment>` branched from the **user-chosen base ref** (`--base-ref`, mirroring the `release-handoff` PR-base picker: `main` / `dev` / `staging` / `preprod` / `prod` / any local ref) the first time a task-key is seen. `--base-ref` is required on first phase; the okstra-run skill collects it via `AskUserQuestion`, non-interactive callers must pass the flag explicitly. Every subsequent phase of the same task-key (`requirements-discovery` → `error-analysis` → `implementation-planning` → `implementation` → `final-verification` → `release-handoff`) reuses the same path and branch, so phase N inherits the working-tree state phase N-1 left behind. A global registry at `~/.okstra/worktrees/registry.json` (flock-guarded) reserves task-keys and branches across concurrent runs; all path/branch segments are sanitised (`/`, `:`, etc. → `-`). The worktree is preserved after every run for follow-up phases, PR authoring, and rollback. Skip paths: when the caller is already inside another worktree or `project_root` is not a git repo, provisioning no-ops. Manual cleanup: `git worktree remove <path>` → `git branch -D <branch>` plus releasing/removing the task-key from the registry. Details: [`docs/kr/architecture.md`](docs/kr/architecture.md) (*Task type* section) and [`docs/kr/cli.md#--executor`](docs/kr/cli.md#--executor).
|
|
183
188
|
- **`release-handoff` lifecycle phase** — runs after `final-verification` returns `verdict=accepted`. The lead drafts a commit message and PR body via a Claude worker, then prompts the user with `AskUserQuestion` for three choices: action (`commit only` / `commit + PR` / `skip`), PR base branch (`staging` / `preprod` / `prod` / `main` / `dev` / free-form), and message handling (`use as-is` / `edit then proceed` / `cancel`). Only user-selected mutating git/gh commands run. Force-push, base-branch direct push, hook bypass (`--no-verify`), and release publishing (`gh release`, `npm publish`, ...) are forbidden. Source code is not edited in this phase. Profile: [`prompts/profiles/release-handoff.md`](prompts/profiles/release-handoff.md).
|
|
184
189
|
- **Configurable PR body template** (release-handoff) — the PR body is filled from a markdown template chosen in priority order: per-run override (`--pr-template-path` or the okstra-run Step 6 prompt) → `<project_root>/.project-docs/okstra/project.json` `prTemplatePath` → `~/.okstra/config.json` `prTemplatePath` → bundled skill default at `~/.claude/skills/okstra-run/templates/pr-body.template.md`. Register a template with `okstra config set pr-template-path <path> [--scope project|global]` (project scope accepts paths relative to the project root; global scope requires absolute or `~/`-prefixed). `okstra config get pr-template-path --scope all` reports every scope plus the effective winner. The bundled default ships `## Summary` / `## Changes` / `## Test plan` / `## Linked issues` with HTML comment guidance that the lead strips before opening the PR.
|
|
185
190
|
- **Profile-roster worker validation** — `--workers <csv>` (and the okstra-run Step 6 worker prompt) are now restricted to the worker IDs declared by the chosen profile's `Required workers:` block. Asking for `codex` / `gemini` on a profile that does not list them (e.g. `release-handoff`) is rejected with a clear error, and the interactive prompt only offers workers the profile actually accepts.
|
|
186
|
-
- **
|
|
191
|
+
- **Multi-stage `implementation-planning` / `implementation`** — `implementation-planning` always produces a Stage Map plus N stage sections; each stage has ≤6 steps and stages whose `depends-on (none)` can be executed in parallel by separate `implementation` runs. Each `implementation` invocation picks one stage (via `--stage <auto|N>`) and emits an evidence sidecar (`carry/stage-<N>.json`) that the next stage automatically inherits. The `implementation-planning` run directory accumulates a `consumers.jsonl` reverse-link showing which `implementation` runs consumed which stage.
|
|
192
|
+
- **Phase 6 plan-body verification (implementation-planning only)** — after the Report writer worker authors the final-report draft and before the user approval gate, the lead now runs one additional verification round: it extracts `P-Opt-*` / `P-Step-*` / `P-Dep-*` / `P-Val-*` / `P-Rb-*` items from the consolidated `## 4.5` plan body and dispatches them to every analyser worker as `AGREE` / `DISAGREE(a-e)` / `SUPPLEMENT`. The aggregated gate result is one of `passed` / `passed-with-dissent` / `blocked-by-disagreement` / `aborted-non-result`. The frontmatter `approved` flag is always emitted as `false`; when the gate is `blocked-by-disagreement` or `aborted-non-result` the writer MUST keep it `false` (the validator refuses any report that publishes `approved: true` under such a gate) and convert `majority-disagree` items into `## 5. Clarification Items` rows with `Blocks=approval`. Disable for fast iteration with `--no-plan-verification` (default: enabled). Details: [`skills/okstra-convergence/SKILL.md`](skills/okstra-convergence/SKILL.md) "Plan-body verification mode" and [`docs/kr/cli.md#--no-plan-verification`](docs/kr/cli.md#--no-plan-verification).
|
|
187
193
|
- **Brief as translation layer + reporter batch confirmation (Step 6.5)** — `okstra-brief` now produces the brief as a translation layer that preserves external inputs (issue ticket, requirements doc, user message) verbatim while labelling okstra augmentations. A new Step 6.5 walks the user through a single batch confirmation of any rewordings, recorded in a `Reporter Confirmations` section. Every analysis profile blocks phase entry until this section exists (validator: `validators/validate-brief.py`).
|
|
188
|
-
- **Artifact-home rule (`.project-docs/okstra/`)** — okstra
|
|
194
|
+
- **Artifact-home rule (`.project-docs/okstra/`)** — okstra's project artifact root is only `<project>/.project-docs/okstra/`. Anything outside that root is not okstra memory; it may be read only when explicitly cited as Source Material or Reporter Confirmations, and writes require the same explicit request path. okstra-internal equivalents: `glossary.md` for terminology and `decisions/<NNNN>-<slug>.md` for decision records (evaluated in `implementation-planning`).
|
|
189
195
|
- **Dual-format final-report views** — after Phase 7 writes `final-report-<task-type>-<seq>.md`, `okstra render-views` automatically emits two sibling views in the same `reports/` directory: a slim Markdown for downstream AI input and a self-contained HTML (inline CSS/JS, no external URLs) for human review. The HTML lets a reviewer fill in `## 5. Clarification Items` decisions and export them to `runs/<task-type>/user-responses/user-response-<task-type>-<seq>.md`, which the next phase consumes as input. The original MD is never modified by view generation.
|
|
196
|
+
- **`improvement-discovery` task-type (sidetrack entry-point)** — Discover ranked improvement candidates within a codebase scope and lens whitelist via multi-worker consensus (default top-8, hard cap 12). Outside `PHASE_SEQUENCE`; the user selects candidates and opens each as a new task with `requirements-discovery`, `implementation-planning`, or `error-analysis`. Lens enum SSOT: [`scripts/okstra_ctl/improvement_lenses.py`](scripts/okstra_ctl/improvement_lenses.py). Output section: `## 4.9 Improvement Candidates` (10-column table). Validator: [`validators/validate_improvement_report.py`](validators/validate_improvement_report.py).
|
|
190
197
|
|
|
191
198
|
### 3.5 Ops commands
|
|
192
199
|
|
|
@@ -199,6 +206,7 @@ Recent workflow additions (post-0.8.0, on `main`):
|
|
|
199
206
|
| `npx -y okstra@latest check-project` | Verify the current project has been registered with `setup` |
|
|
200
207
|
| `npx -y okstra@latest config <get\|set\|unset\|show> [key] [value] [--scope project\|global\|all]` | Read / write okstra settings; initial key `pr-template-path` (writes `prTemplatePath` to project.json or `~/.okstra/config.json`) |
|
|
201
208
|
| `npx -y okstra@latest render-views <final-report.md>` | Regenerate the slim-MD + HTML sibling views from a final-report MD (Phase 7 step 1.5; idempotent) |
|
|
209
|
+
| `npx -y okstra@latest token-usage ...` | Collect/substitute token usage for a run; wraps the installed Python token usage CLI |
|
|
202
210
|
| `npx -y okstra@latest uninstall` | Remove runtime + skills; preserves user data (`recent.jsonl`, `projects/`, …) |
|
|
203
211
|
| `npx -y okstra@latest uninstall --purge -y` | Remove everything including user data |
|
|
204
212
|
|