opensocrates 1.1.3 → 1.1.5

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 CHANGED
@@ -5,6 +5,73 @@ All notable changes to OpenSocrates are documented here. This project follows
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [1.1.5] - 2026-08-12
9
+
10
+ ### Added
11
+
12
+ - Packaged `diagnose` now verifies the complete installed file inventory
13
+ against `checksums.sha256` and validates the release manifest's runtime
14
+ version, host, and content revision. Explicit `mismatch`, `unavailable`, and
15
+ `unverified` states replace presence-based claims
16
+ ([#64](https://github.com/ParkerHwang/OpenSocrates/issues/64)).
17
+ - Release tests execute the packaged runtime against both intact packages and
18
+ a staged tampered Claude package so integrity reporting is exercised outside
19
+ the source process ([#64](https://github.com/ParkerHwang/OpenSocrates/issues/64)).
20
+
21
+ ### Changed
22
+
23
+ - Claude grounding artifacts now prefer an owner-only, self-ignored
24
+ `.opensocrates` area inside the active workspace, while retaining the OS
25
+ temporary directory as a fail-open fallback. Lookup, receipts, expiry, and
26
+ cleanup handle both roots during upgrades and fallback runs
27
+ ([#62](https://github.com/ParkerHwang/OpenSocrates/issues/62)).
28
+ - Codex package and installation documentation now requires one interactive
29
+ hook approval before automatic selection is expected and distinguishes
30
+ release-validated packaging from unvalidated live hook delivery
31
+ ([#63](https://github.com/ParkerHwang/OpenSocrates/issues/63)).
32
+
33
+ ### Fixed
34
+
35
+ - Default-permission `claude -p` sessions can read selected grounding content
36
+ without `--add-dir`, avoiding the denied-read repair loop caused by placing
37
+ artifacts only in the system temporary directory
38
+ ([#62](https://github.com/ParkerHwang/OpenSocrates/issues/62)).
39
+ - `diagnose` no longer reports manifest and checksum verification merely
40
+ because package files exist ([#64](https://github.com/ParkerHwang/OpenSocrates/issues/64)).
41
+
42
+ ## [1.1.4] - 2026-08-12
43
+
44
+ ### Added
45
+
46
+ - A privacy-safe Claude selector aggregate records only bounded counts under a
47
+ closed outcome vocabulary. `diagnose` exposes those counts without prompts,
48
+ transcripts, session identifiers, paths, model output, credentials, or
49
+ selector reasoning ([#4](https://github.com/ParkerHwang/OpenSocrates/issues/4)).
50
+ - A sanitized Cowork receipt validates local plugin upload and the native
51
+ `UserPromptSubmit` → `PostToolUse(Read)` → `Stop` lifecycle, including the
52
+ authenticated grounding receipt and final cleanup
53
+ ([#4](https://github.com/ParkerHwang/OpenSocrates/issues/4)).
54
+
55
+ ### Changed
56
+
57
+ - Native runtime builds are split by host profile. The Claude package excludes
58
+ the Codex SDK and CLI while the Codex package preserves its existing runtime
59
+ surface ([#4](https://github.com/ParkerHwang/OpenSocrates/issues/4)).
60
+ - Release tooling derives artifact paths from the detected native target,
61
+ defaults plugin generation to `dist/runtime/<host>`, and interprets Cowork's
62
+ 50 MB and 200 MB limits conservatively as decimal bytes
63
+ ([#4](https://github.com/ParkerHwang/OpenSocrates/issues/4)).
64
+
65
+ ### Fixed
66
+
67
+ - The Claude runtime now uses PyInstaller's no-archive mode, and release checks
68
+ reject nested ZIP entries before a Cowork package can be published
69
+ ([#4](https://github.com/ParkerHwang/OpenSocrates/issues/4)).
70
+ - Unreadable selector aggregates report `unavailable` instead of zero attempts.
71
+ Malformed current-schema documents self-heal on the next valid outcome while
72
+ unknown future schemas are preserved
73
+ ([#4](https://github.com/ParkerHwang/OpenSocrates/issues/4)).
74
+
8
75
  ## [1.1.3] - 2026-08-11
9
76
 
10
77
  ### Added
@@ -271,3 +338,5 @@ All notable changes to OpenSocrates are documented here. This project follows
271
338
  [1.1.1]: https://github.com/ParkerHwang/OpenSocrates/compare/v1.1.0...v1.1.1
272
339
  [1.1.2]: https://github.com/ParkerHwang/OpenSocrates/compare/v1.1.1...v1.1.2
273
340
  [1.1.3]: https://github.com/ParkerHwang/OpenSocrates/compare/v1.1.2...v1.1.3
341
+ [1.1.4]: https://github.com/ParkerHwang/OpenSocrates/compare/v1.1.3...v1.1.4
342
+ [1.1.5]: https://github.com/ParkerHwang/OpenSocrates/compare/v1.1.4...v1.1.5
package/README.ko.md CHANGED
@@ -16,7 +16,7 @@ OpenSocrates는 Claude와 Codex를 위한 로컬 연동 및 저작 추론 프레
16
16
  추론 시스템을 고른 뒤, 이론과 예제 전체를 활성 작업에 추가합니다. 단순한 사실
17
17
  확인과 기계적인 작업은 그대로 통과할 수 있습니다.
18
18
 
19
- 버전 `1.1.3`에는 48개의 추론 시스템, Claude의 단일 사용자 진입점, 선택된 절차를
19
+ 버전 `1.1.5`에는 48개의 추론 시스템, Claude의 단일 사용자 진입점, 선택된 절차를
20
20
  실제로 읽었는지 확인하는 Claude 접지 게이트, Claude/Codex 통합 라이프사이클,
21
21
  선택형 자동 업데이트가 들어 있습니다. 현재 릴리스 플랫폼은 Apple Silicon
22
22
  macOS(`darwin-arm64`)입니다. 기존 호스트 로그인을 사용하므로 API 키나
@@ -26,19 +26,20 @@ OpenSocrates 백엔드가 필요하지 않습니다.
26
26
  런처는 `darwin-arm64`만 허용하며, Intel Mac·Linux·Windows용 런처와 런타임은
27
27
  이번 릴리스에 포함되거나 지원되지 않습니다.
28
28
 
29
- > **최신 릴리스: [OpenSocrates 1.1.3](https://github.com/ParkerHwang/OpenSocrates/releases/tag/v1.1.3).**
30
- > 인증된 실제 호스트 검증, 설치·정리 강화, 엄격한 패키지 지원 범위, 업로드 가능한
31
- > Claude Chat 스킬 ZIP을 추가했습니다. `npx --yes opensocrates@1.1.3 update --host all`로
32
- > 관리 중인 두 호스트를 함께 업데이트할 수 있습니다.
29
+ > **최신 릴리스: [OpenSocrates 1.1.5](https://github.com/ParkerHwang/OpenSocrates/releases/tag/v1.1.5).**
30
+ > Claude 접지 파일을 추가 디렉터리 권한 없이 읽을 수 있게 하고, `diagnose`에서
31
+ > 설치 패키지를 실제로 검증하며, Codex의 최초 훅 승인 경계를 명확히 했습니다.
32
+ > `npx --yes opensocrates@1.1.5 update --host all`로 관리 중인 두 호스트를 함께
33
+ > 업데이트할 수 있습니다.
33
34
 
34
35
  ## 호스트 지원 범위
35
36
 
36
37
  | 호스트 화면 | 자동 선택 | 사용자 진입점 | 검증 상태 |
37
38
  | --- | --- | --- | --- |
38
- | Codex CLI 및 Desktop | 지원 | OpenSocrates 플러그인 | `darwin-arm64` 릴리스 검증 완료 |
39
+ | Codex CLI 및 Desktop | 앱에서 훅을 한 번 승인한 뒤 지원 | OpenSocrates 플러그인 | `darwin-arm64` 패키지·런처 릴리스 검증 완료, 실제 Codex 훅 전달 영수증 없음 |
39
40
  | Claude Code CLI | `UserPromptSubmit` 훅으로 지원 | `/opensocrates` | `darwin-arm64` 로컬 검증 완료 |
40
41
  | Claude Code 데스크톱 앱 | Claude Code 플러그인이 실행되는 곳에서 지원 | `/opensocrates` | [인증된 훅 생명주기 로컬 검증 완료](docs/claude-desktop-live-probe.md) |
41
- | Claude Cowork | 실측 설치에서는 자동 훅 미지원 | `/opensocrates` 독립 스킬 | [스킬 로컬 검증 완료, 네이티브 플러그인은 아카이브 제한으로 차단](docs/claude-cowork-live-probe.md) |
42
+ | Claude Cowork | 실측 로컬 플러그인 업로드에서 지원 | `/opensocrates` | [네이티브 훅 생명주기 로컬 검증 완료, 릴리스 직접 업로드 지원, 마켓플레이스 동기화 없음](docs/claude-cowork-live-probe.md) |
42
43
  | Claude 웹 및 Desktop Chat | 훅 미지원 | `/opensocrates` | [실제 업로드 및 호출 검증 완료](docs/claude-chat-upload-probe.md) |
43
44
 
44
45
  상태 열은 서로 다른 네 단계를 뜻하며 같은 의미로 읽으면 안 됩니다.
@@ -46,7 +47,8 @@ OpenSocrates 백엔드가 필요하지 않습니다.
46
47
  - **구현 완료** — 코드에 존재하고 패키지에 포함됩니다.
47
48
  - **로컬 검증 완료** — 관리자 장비에서 전 구간을 실행했지만 매 빌드마다
48
49
  검증하지는 않습니다.
49
- - **릴리스 검증 완료** — 릴리스 게이트가 매 빌드마다 실행합니다.
50
+ - **릴리스 검증 완료** — 릴리스 게이트가 매 빌드마다 실행합니다. 현재 Codex는
51
+ 패키지와 런처를 검증하며 실제 훅 전달까지 검증했다는 뜻은 아닙니다.
50
52
  - **실험적 / 실측 수신 기록 없음** — 구현은 되어 있지만 호스트가 실제로 훅을
51
53
  전달했다는 기록이 없습니다. `os capabilities show`는 이 항목들을 사용 가능이
52
54
  아니라 `unknown`으로 보고합니다.
@@ -56,12 +58,13 @@ Claude Chat 화면은 플러그인 훅을 실행하지 않습니다. 생성된
56
58
  Code와 Cowork 화면에서만 작동합니다. 훅이나 셀렉터를 사용할 수 없으면
57
59
  OpenSocrates는 작업을 막지 않고 통과합니다.
58
60
 
59
- 현재 실측 UI에서 Cowork는 Claude Code CLI 사용자 마켓플레이스 등록을 네이티브
60
- Cowork 플러그인으로 가져오지 않습니다. 별도로 업로드한 `/opensocrates` 스킬은
61
- 로컬 검증을 통과했지만, 공개된 v1.1.2 Claude 플러그인 아카이브는 Cowork의 문서화된
62
- 압축 크기 제한과 실측 압축 해제 크기 제한을 모두 초과합니다. 저장소에도 Cowork
63
- 마켓플레이스 매니페스트가 없습니다. Cowork 네이티브 플러그인을 설치하고 훅을 다시
64
- 검증하기 전까지는 독립 스킬 전용 화면으로 취급하세요.
61
+ 공개된 v1.1.2 Claude 플러그인 아카이브는 Cowork의 문서화된 압축 크기 제한과
62
+ 실측 압축 해제 크기 제한을 모두 초과했습니다. 출시 전 v1.1.3 후보는 압축
63
+ 13.8MB, 비압축 34.1MB이며 Codex 런타임과 중첩 ZIP을 포함하지 않고 Cowork 로컬
64
+ 업로드를 통과했습니다. UserPromptSubmit, PostToolUse(Read), 인증된 grounding
65
+ receipt, Stop, 정리 생명주기도 로컬 검증을 마쳤습니다. 버전 1.1.4는 검토를 마친
66
+ 이 패키지 경계를 처음 배포합니다. 저장소에는 아직 Cowork 마켓플레이스
67
+ 매니페스트가 없으므로 저장소 동기화 대신 로컬 플러그인 업로드 경로를 사용합니다.
65
68
 
66
69
  ## 설치
67
70
 
@@ -78,7 +81,7 @@ Node.js 20 이상이 필요합니다. npm에 게시된 `opensocrates` 패키지
78
81
  ### 준비된 모든 호스트에 설치
79
82
 
80
83
  ```bash
81
- npx --yes opensocrates@1.1.3 install --host all
84
+ npx --yes opensocrates@1.1.5 install --host all
82
85
  ```
83
86
 
84
87
  모든 호스트 경로는 지원되는 인증 완료 CLI를 찾고, 어느 호스트도 바꾸기 전에
@@ -89,9 +92,9 @@ npx --yes opensocrates@1.1.3 install --host all
89
92
  전체 라이프사이클에서 같은 호스트 값을 사용할 수 있습니다.
90
93
 
91
94
  ```bash
92
- npx --yes opensocrates@1.1.3 status --host all
93
- npx --yes opensocrates@1.1.3 update --host all
94
- npx --yes opensocrates@1.1.3 remove --host all
95
+ npx --yes opensocrates@1.1.5 status --host all
96
+ npx --yes opensocrates@1.1.5 update --host all
97
+ npx --yes opensocrates@1.1.5 remove --host all
95
98
  ```
96
99
 
97
100
  소유자 전용 `~/.opensocrates/desired-state.json`에는 선택 채널, 설치된 호스트,
@@ -103,9 +106,9 @@ npx --yes opensocrates@1.1.3 remove --host all
103
106
  기존 사용자와의 호환성을 위해 기본 호스트는 계속 Codex입니다.
104
107
 
105
108
  ```bash
106
- npx --yes opensocrates@1.1.3 install
107
- # 같은 명령: npx --yes opensocrates@1.1.3 install --host codex
108
- npx --yes opensocrates@1.1.3 install --host claude
109
+ npx --yes opensocrates@1.1.5 install
110
+ # 같은 명령: npx --yes opensocrates@1.1.5 install --host codex
111
+ npx --yes opensocrates@1.1.5 install --host claude
109
112
  ```
110
113
 
111
114
  기존 `--host codex` 및 `--host claude` 라이프사이클은 그대로 지원합니다. 호스트별
@@ -122,9 +125,9 @@ Claude 상태는 활성 설치와 설치됐지만 비활성화된 플러그인
122
125
  ### 선택형 자동 업데이트
123
126
 
124
127
  ```bash
125
- npx --yes opensocrates@1.1.3 auto-update enable --host all
126
- npx --yes opensocrates@1.1.3 auto-update status
127
- npx --yes opensocrates@1.1.3 auto-update disable
128
+ npx --yes opensocrates@1.1.5 auto-update enable --host all
129
+ npx --yes opensocrates@1.1.5 auto-update status
130
+ npx --yes opensocrates@1.1.5 auto-update disable
128
131
  ```
129
132
 
130
133
  자동 업데이트는 명시적으로 켜기 전까지 비활성화되어 있습니다. macOS LaunchAgent는
@@ -146,7 +149,7 @@ LaunchAgent를 언로드하고 삭제하며, `remove --host all`도 관리 호
146
149
  ### Claude 웹 및 Desktop Chat 스킬
147
150
 
148
151
  이 화면들은 플러그인 스킬은 지원하지만 훅은 실행하지 않습니다. 릴리스에서
149
- `opensocrates-1.1.3-claude-chat-skills.zip`을 내려받아 Claude의 **사용자 지정 →
152
+ `opensocrates-1.1.5-claude-chat-skills.zip`을 내려받아 Claude의 **사용자 지정 →
150
153
  스킬 → 스킬 업로드** 화면에서 업로드하세요. ZIP은 업로더 요구사항에 맞춰
151
154
  최상위 `opensocrates/` 폴더 바로 아래에 `SKILL.md`를 둡니다. 패키지는
152
155
  `/opensocrates` 스킬 하나만 노출하고, 48개
@@ -160,21 +163,21 @@ LaunchAgent를 언로드하고 삭제하며, `remove --host all`도 관리 호
160
163
  npm 레지스트리를 거치지 않을 때도 같은 호스트 옵션을 사용합니다.
161
164
 
162
165
  ```bash
163
- npx --yes github:ParkerHwang/OpenSocrates#v1.1.3 install --host all
164
- npx --yes github:ParkerHwang/OpenSocrates#v1.1.3 install --host claude
165
- npx --yes github:ParkerHwang/OpenSocrates#v1.1.3 install --host codex
166
+ npx --yes github:ParkerHwang/OpenSocrates#v1.1.5 install --host all
167
+ npx --yes github:ParkerHwang/OpenSocrates#v1.1.5 install --host claude
168
+ npx --yes github:ParkerHwang/OpenSocrates#v1.1.5 install --host codex
166
169
  ```
167
170
 
168
171
  ### 릴리스 파일 직접 검증
169
172
 
170
- [v1.1.3 릴리스](https://github.com/ParkerHwang/OpenSocrates/releases/tag/v1.1.3)에서
173
+ [v1.1.5 릴리스](https://github.com/ParkerHwang/OpenSocrates/releases/tag/v1.1.5)에서
171
174
  `opensocrates.mjs`, 호스트 패키지, `.sha256` 파일을 내려받습니다. Claude의 예:
172
175
 
173
176
  ```bash
174
- shasum -a 256 -c opensocrates-1.1.3-claude-plugin.zip.sha256
177
+ shasum -a 256 -c opensocrates-1.1.5-claude-plugin.zip.sha256
175
178
  node opensocrates.mjs install --host claude \
176
- --asset opensocrates-1.1.3-claude-plugin.zip \
177
- --checksum opensocrates-1.1.3-claude-plugin.zip.sha256
179
+ --asset opensocrates-1.1.5-claude-plugin.zip \
180
+ --checksum opensocrates-1.1.5-claude-plugin.zip.sha256
178
181
  ```
179
182
 
180
183
  Codex 패키지는 `claude`를 `codex`로 바꾸면 됩니다.
@@ -189,7 +192,7 @@ Codex 패키지는 `claude`를 `codex`로 바꾸면 됩니다.
189
192
  ```bash
190
193
  claude plugin uninstall opensocrates@OpenSocrates --scope user
191
194
  claude plugin marketplace remove OpenSocrates --scope user
192
- npx --yes opensocrates@1.1.3 install --host claude
195
+ npx --yes opensocrates@1.1.5 install --host claude
193
196
  ```
194
197
 
195
198
  관리형 v1.1.0 Claude 설치를 업데이트하면 패키지 트리 전체가 교체됩니다. 따라서
@@ -204,12 +207,25 @@ Claude나 Codex를 평소처럼 사용하세요. 요청에 판단, 해석, 진
204
207
 
205
208
  1. 현재 호스트에서 새로운 비영구 셀렉터를 시작합니다.
206
209
  2. 저작된 48개 시스템 카탈로그에서 적합한 시스템을 선택합니다.
207
- 3. 선택된 전체 콘텐츠를 소유자 전용 임시 Markdown 파일에 씁니다.
210
+ 3. 선택된 전체 콘텐츠를 소유자 전용 Markdown 파일에 씁니다.
208
211
  4. 각 방법 ID와 콘텐츠 리비전, 크기 한도 안에 들면 정확한 `Do not use when` 및
209
212
  `Stop conditions`를 작은 숨김 컨텍스트에 추가합니다.
210
213
  5. 활성 작업이 방법을 적용하기 전에 전체 파일을 읽고, 접지된 답변의 마지막에
211
214
  `OpenSocrates grounding: triangulation@1`과 같은 정확한 감사 줄을 남기게 합니다.
212
215
 
216
+ Codex에 설치한 뒤에는 대화형 Codex 세션을 한 번 열어 OpenSocrates 훅을 승인해야
217
+ 자동 선택을 신뢰할 수 있습니다. 이 승인이 끝나기 전에는 `codex exec` 같은 비대화형
218
+ 화면이 신뢰되지 않은 훅을 조용히 건너뛸 수 있습니다.
219
+
220
+ Claude 훅 화면은 추가 디렉터리 권한 없이 선택 콘텐츠를 읽을 수 있도록 현재
221
+ 워크스페이스 안의 소유자 전용 `.opensocrates` artifact 영역을 우선 사용합니다.
222
+ 내부 `.gitignore`가 이 영역을 `git status`에서 숨기고 turn·세션 정리 시 파일을
223
+ 삭제합니다. 워크스페이스를 사용할 수 없으면 소유자 전용 OS 임시 디렉터리로
224
+ 대체합니다. 다만 `.gitignore`나 숨김 디렉터리를 무시하지 않는 별도 백업·동기화
225
+ 도구는 artifact가 존재하는 동안 저작된 OpenSocrates 콘텐츠를 볼 수 있습니다.
226
+ artifact에는 원시 프롬프트, 대화 기록, 워크스페이스 콘텐츠, 자격 증명, 셀렉터
227
+ 추론이 들어가지 않습니다.
228
+
213
229
  Claude 훅 화면에서는 Read 전용 `PostToolUse` 훅이 현재 turn의 정확한 파일을 첫
214
230
  줄부터 종료 표식까지 읽은 경우에만 인증된 영수증을 만듭니다. `Stop` 시 영수증이나
215
231
  감사 줄이 없으면 한 번만 보정을 요청하고, `stop_hook_active`로 반복 보정을
@@ -282,6 +298,23 @@ OpenSocrates 기록, 로그, 메트릭, 진단 또는 instruction 파일에 쓰
282
298
  남은 파일을 삭제하고, 다음 `SessionStart`는 24시간이 지난 비정상 종료 잔여 파일을
283
299
  삭제합니다.
284
300
 
301
+ Claude 셀렉터 시도는 `executable_missing`, `request_rejected`, `spawn_failed`,
302
+ `timeout`, `nonzero_exit`, `invalid_output`, `selector_closed`,
303
+ `no_intervention`, `selected`라는 고정 라벨만 사용해 소유자 전용 로컬 집계에
304
+ 누적됩니다. `diagnose`는 이 누적 횟수를 표시합니다. 집계에는 시각, 프롬프트,
305
+ 대화 기록, 세션·turn ID, 경로, 모델 출력, 자격 증명 또는 추론이 없으며 외부로
306
+ 업로드되지 않습니다.
307
+ 집계를 읽을 수 없으면 `diagnose`는 시도 0회라고 단정하지 않고 `unavailable`로
308
+ 표시합니다. 다음 유효한 셀렉터 결과가 현재 스키마의 손상된 집계를 새로운 제한된
309
+ 카운트 문서로 교체하며, 알 수 없는 미래 스키마는 해당 새 런타임을 위해 보존합니다.
310
+
311
+ 패키지의 `diagnose` 명령은 설치 파일 목록을 `checksums.sha256`과 대조하고 릴리스
312
+ manifest가 실행 중인 버전·호스트·콘텐츠 리비전을 가리키는지도 확인합니다. 단순한
313
+ 파일 존재 여부로 성공을 추정하지 않고 `verified`, `mismatch`, `unavailable`,
314
+ `unverified`를 표시합니다. 이 해시는 로컬 변경이나 손상을 찾지만 manifest와
315
+ checksum 파일 자체는 서명되지 않았으므로 패키지 전체를 바꿀 수 있는 공격자에 대한
316
+ 진본성 증명은 아닙니다.
317
+
285
318
  자동 업데이트를 켜면 앞서 설명한 desired state와 간결한 영수증만 소유자 전용
286
319
  권한으로 저장합니다. 실행 중인 Claude나 Codex 세션을 검사하거나 종료하지 않습니다.
287
320
  이미 실행 중인 작업은 로드한 플러그인을 계속 쓰고, 새 작업이 조정된 버전을 자연스럽게
package/README.md CHANGED
@@ -17,7 +17,7 @@ uses a fresh host-native selector to choose relevant systems, and adds their
17
17
  complete theory and examples to the active task. Straightforward factual and
18
18
  mechanical work can pass through unchanged.
19
19
 
20
- Version `1.1.3` includes 48 reasoning systems, one user-facing Claude entry, a
20
+ Version `1.1.5` includes 48 reasoning systems, one user-facing Claude entry, a
21
21
  Claude grounding gate that verifies selected procedures were read, coordinated
22
22
  Claude/Codex lifecycle management, and opt-in automatic updates on
23
23
  Apple-silicon macOS (`darwin-arm64`). It uses your existing host login and does
@@ -27,20 +27,21 @@ The native plugin archives intentionally ship only `bin/launch.sh`. That
27
27
  launcher accepts `darwin-arm64` only; macOS Intel, Linux, and Windows launchers
28
28
  and runtimes are not shipped or supported in this release.
29
29
 
30
- > **Latest release: [OpenSocrates 1.1.3](https://github.com/ParkerHwang/OpenSocrates/releases/tag/v1.1.3).**
31
- > It adds authenticated live-host validation, installer and cleanup hardening,
32
- > strict package support boundaries, and an uploadable Claude Chat skills ZIP.
30
+ > **Latest release: [OpenSocrates 1.1.5](https://github.com/ParkerHwang/OpenSocrates/releases/tag/v1.1.5).**
31
+ > It makes Claude grounding readable without extra directory permission,
32
+ > verifies installed package files in `diagnose`, and documents Codex's
33
+ > one-time hook approval boundary.
33
34
  > Upgrade both managed hosts together with
34
- > `npx --yes opensocrates@1.1.3 update --host all`.
35
+ > `npx --yes opensocrates@1.1.5 update --host all`.
35
36
 
36
37
  ## Host support
37
38
 
38
39
  | Host surface | Automatic selection | User-facing entry | Validation status |
39
40
  | --- | --- | --- | --- |
40
- | Codex CLI and Desktop | Yes | OpenSocrates plugin | Release-validated on `darwin-arm64` |
41
+ | Codex CLI and Desktop | Yes, after one-time in-app hook approval | OpenSocrates plugin | Package and launcher release-validated on `darwin-arm64`; no live Codex hook-delivery receipt |
41
42
  | Claude Code CLI | Yes, through `UserPromptSubmit` | `/opensocrates` | Locally validated on `darwin-arm64` |
42
43
  | Claude Code desktop app | Yes, where Claude Code plugins run | `/opensocrates` | [Authenticated hook lifecycle locally validated](docs/claude-desktop-live-probe.md) |
43
- | Claude Cowork | No automatic hooks in the tested install | `/opensocrates` standalone skill | [Skill locally validated; native plugin blocked by archive limits](docs/claude-cowork-live-probe.md) |
44
+ | Claude Cowork | Yes, in the tested local plugin upload | `/opensocrates` | [Native hook lifecycle locally validated; direct release upload, no marketplace sync](docs/claude-cowork-live-probe.md) |
44
45
  | Claude web and Desktop Chat | No hooks | `/opensocrates` | [Live upload and invocation validated](docs/claude-chat-upload-probe.md) |
45
46
 
46
47
  The status column uses four distinct levels. Do not read them as
@@ -49,7 +50,8 @@ interchangeable:
49
50
  - **Implemented** — the integration exists in code and ships in the package.
50
51
  - **Locally validated** — exercised end to end on a maintainer machine, but
51
52
  not on every build.
52
- - **Release-validated** — exercised by the release gate on every build.
53
+ - **Release-validated** — exercised by the release gate on every build. For
54
+ Codex this currently covers the package and launcher, not live hook delivery.
53
55
  - **Experimental / no live probe receipt** — implemented, but no captured
54
56
  receipt shows the host actually delivering the hook. `os capabilities show`
55
57
  reports these capabilities as `unknown`, not as available.
@@ -59,13 +61,15 @@ skills, but automatic per-prompt selection is available only on Claude Code
59
61
  and Cowork surfaces that execute the plugin runtime. OpenSocrates fails open
60
62
  if a hook or selector is unavailable.
61
63
 
62
- Cowork does not import the Claude Code CLI user-marketplace registration as a
63
- native Cowork plugin in the current live UI. A separately uploaded
64
- `/opensocrates` skill is locally validated, but the published v1.1.2 Claude
65
- plugin archive exceeds Cowork's documented compressed limit and observed
66
- uncompressed limit. The repository also lacks a Cowork marketplace manifest.
67
- Until a Cowork-native plugin can be installed and its hooks re-probed, treat
68
- Cowork as a standalone-skill-only surface.
64
+ The published v1.1.2 Claude plugin archive exceeded Cowork's documented
65
+ compressed limit and observed uncompressed limit. A pre-release v1.1.3
66
+ candidate was 13.8 MB compressed and 34.1 MB uncompressed, contained neither
67
+ the Codex runtime nor a nested ZIP, and passed Cowork's local upload. Its
68
+ UserPromptSubmit, PostToolUse(Read), authenticated grounding receipt, Stop, and
69
+ cleanup lifecycle is locally validated. Version 1.1.4 is the first release to
70
+ ship that reviewed package boundary. The repository still has no Cowork
71
+ marketplace manifest, so Cowork installation uses the local plugin upload path
72
+ rather than repository sync.
69
73
 
70
74
  ## Install
71
75
 
@@ -82,7 +86,7 @@ before registering an owner-marked managed marketplace.
82
86
  ### Install every ready host
83
87
 
84
88
  ```bash
85
- npx --yes opensocrates@1.1.3 install --host all
89
+ npx --yes opensocrates@1.1.5 install --host all
86
90
  ```
87
91
 
88
92
  The all-host path detects supported, authenticated host CLIs, completes every
@@ -94,9 +98,9 @@ registration.
94
98
  Use the same host value for the complete lifecycle:
95
99
 
96
100
  ```bash
97
- npx --yes opensocrates@1.1.3 status --host all
98
- npx --yes opensocrates@1.1.3 update --host all
99
- npx --yes opensocrates@1.1.3 remove --host all
101
+ npx --yes opensocrates@1.1.5 status --host all
102
+ npx --yes opensocrates@1.1.5 update --host all
103
+ npx --yes opensocrates@1.1.5 remove --host all
100
104
  ```
101
105
 
102
106
  A private `~/.opensocrates/desired-state.json` manifest records the selected
@@ -109,9 +113,9 @@ automatic update, and per-host drift.
109
113
  Codex remains the default host for backward compatibility:
110
114
 
111
115
  ```bash
112
- npx --yes opensocrates@1.1.3 install
113
- # Equivalent: npx --yes opensocrates@1.1.3 install --host codex
114
- npx --yes opensocrates@1.1.3 install --host claude
116
+ npx --yes opensocrates@1.1.5 install
117
+ # Equivalent: npx --yes opensocrates@1.1.5 install --host codex
118
+ npx --yes opensocrates@1.1.5 install --host claude
115
119
  ```
116
120
 
117
121
  Existing `--host codex` and `--host claude` lifecycle commands remain
@@ -131,9 +135,9 @@ commands. The privacy-safe 2.1.226 fixture is under
131
135
  ### Opt-in automatic updates
132
136
 
133
137
  ```bash
134
- npx --yes opensocrates@1.1.3 auto-update enable --host all
135
- npx --yes opensocrates@1.1.3 auto-update status
136
- npx --yes opensocrates@1.1.3 auto-update disable
138
+ npx --yes opensocrates@1.1.5 auto-update enable --host all
139
+ npx --yes opensocrates@1.1.5 auto-update status
140
+ npx --yes opensocrates@1.1.5 auto-update disable
137
141
  ```
138
142
 
139
143
  Automatic updates are disabled until explicitly enabled. The macOS LaunchAgent
@@ -156,7 +160,7 @@ workspace paths. `auto-update disable` unloads and removes the LaunchAgent;
156
160
  ### Claude web and Desktop Chat skills
157
161
 
158
162
  These surfaces support plugin skills but not hooks. Download
159
- `opensocrates-1.1.3-claude-chat-skills.zip` from the release and upload it from
163
+ `opensocrates-1.1.5-claude-chat-skills.zip` from the release and upload it from
160
164
  Claude's **Customize → Skills → Upload skill** UI. The ZIP contains one
161
165
  top-level `opensocrates/` folder with `SKILL.md` directly inside, as required by
162
166
  the skill uploader. The package exposes exactly one
@@ -170,22 +174,22 @@ because Chat does not execute plugin hooks. See Anthropic's
170
174
  The same host option works without the npm registry:
171
175
 
172
176
  ```bash
173
- npx --yes github:ParkerHwang/OpenSocrates#v1.1.3 install --host all
174
- npx --yes github:ParkerHwang/OpenSocrates#v1.1.3 install --host claude
175
- npx --yes github:ParkerHwang/OpenSocrates#v1.1.3 install --host codex
177
+ npx --yes github:ParkerHwang/OpenSocrates#v1.1.5 install --host all
178
+ npx --yes github:ParkerHwang/OpenSocrates#v1.1.5 install --host claude
179
+ npx --yes github:ParkerHwang/OpenSocrates#v1.1.5 install --host codex
176
180
  ```
177
181
 
178
182
  ### Manual release verification
179
183
 
180
184
  Download `opensocrates.mjs`, the host package, and its `.sha256` file from the
181
- [v1.1.3 release](https://github.com/ParkerHwang/OpenSocrates/releases/tag/v1.1.3).
185
+ [v1.1.5 release](https://github.com/ParkerHwang/OpenSocrates/releases/tag/v1.1.5).
182
186
  For Claude, for example:
183
187
 
184
188
  ```bash
185
- shasum -a 256 -c opensocrates-1.1.3-claude-plugin.zip.sha256
189
+ shasum -a 256 -c opensocrates-1.1.5-claude-plugin.zip.sha256
186
190
  node opensocrates.mjs install --host claude \
187
- --asset opensocrates-1.1.3-claude-plugin.zip \
188
- --checksum opensocrates-1.1.3-claude-plugin.zip.sha256
191
+ --asset opensocrates-1.1.5-claude-plugin.zip \
192
+ --checksum opensocrates-1.1.5-claude-plugin.zip.sha256
189
193
  ```
190
194
 
191
195
  Replace `claude` with `codex` for the Codex package.
@@ -200,7 +204,7 @@ what is installed, remove it explicitly:
200
204
  ```bash
201
205
  claude plugin uninstall opensocrates@OpenSocrates --scope user
202
206
  claude plugin marketplace remove OpenSocrates --scope user
203
- npx --yes opensocrates@1.1.3 install --host claude
207
+ npx --yes opensocrates@1.1.5 install --host claude
204
208
  ```
205
209
 
206
210
  Updating a managed v1.1.0 Claude installation replaces the complete package
@@ -216,14 +220,28 @@ reasoning process. When it intervenes, it:
216
220
 
217
221
  1. starts a fresh, non-persistent selector in the current host;
218
222
  2. chooses from the authored 48-system catalog;
219
- 3. writes the complete selected content to an owner-only temporary Markdown
220
- file;
223
+ 3. writes the complete selected content to an owner-only Markdown file;
221
224
  4. adds a bounded hidden context message with each method ID, content revision,
222
225
  and, when they fit, its exact `Do not use when` and `Stop conditions`; and
223
226
  5. requires the active task to read the complete file before applying the
224
227
  method and to end a grounded response with an exact audit line such as
225
228
  `OpenSocrates grounding: triangulation@1`.
226
229
 
230
+ After installing for Codex, open one interactive Codex session and approve the
231
+ OpenSocrates hooks before relying on automatic selection. Until that one-time
232
+ approval, non-interactive surfaces such as `codex exec` may silently continue
233
+ without running the untrusted hooks.
234
+
235
+ Claude hook surfaces prefer an owner-only `.opensocrates` artifact area inside
236
+ the current workspace so Claude can read the selected content without an extra
237
+ directory permission. Its self-contained `.gitignore` keeps the area out of
238
+ `git status`; files are removed on turn/session cleanup. If the workspace is
239
+ unusable, OpenSocrates falls back to the owner-only OS temporary directory.
240
+ Because the preferred area is inside the workspace, a separate backup or sync
241
+ tool that ignores neither `.gitignore` nor hidden directories could observe the
242
+ authored OpenSocrates artifact while it exists. Artifacts never contain the raw
243
+ prompt, transcript, workspace content, credentials, or selector reasoning.
244
+
227
245
  On Claude hook surfaces, a Read-only `PostToolUse` hook records an authenticated
228
246
  receipt only when the exact current-turn file is read from its first line
229
247
  through a terminal marker. At `Stop`, a missing receipt or audit line requests
@@ -300,6 +318,25 @@ arrives, the next `UserPromptSubmit` in the same session removes every prior
300
318
  active tree. `SessionEnd` removes anything still left in the session, and the
301
319
  next `SessionStart` removes crash leftovers older than 24 hours.
302
320
 
321
+ Claude selector attempts increment one owner-only local aggregate using only
322
+ the fixed labels `executable_missing`, `request_rejected`, `spawn_failed`,
323
+ `timeout`, `nonzero_exit`, `invalid_output`, `selector_closed`,
324
+ `no_intervention`, and `selected`. `diagnose` reports those cumulative counts.
325
+ The aggregate contains no timestamp, prompt, transcript, session or turn ID,
326
+ path, model output, credential, or reasoning, and is never uploaded.
327
+ If the aggregate is unreadable, `diagnose` reports it as `unavailable` instead
328
+ of asserting zero attempts. The next valid selector outcome replaces a
329
+ malformed current-schema aggregate with a fresh bounded count document; an
330
+ unknown future schema is preserved for the newer runtime that owns it.
331
+
332
+ The packaged `diagnose` command also verifies the installed file inventory
333
+ against `checksums.sha256` and checks that the release manifest identifies the
334
+ running version, host, and content revision. It reports `verified`, `mismatch`,
335
+ `unavailable`, or `unverified` rather than inferring success from file presence.
336
+ These hashes detect local change or damage; the manifest and checksum file are
337
+ not signed and therefore are not an authenticity proof against an attacker who
338
+ can replace the whole package.
339
+
303
340
  When enabled, the updater stores only desired lifecycle state and the concise
304
341
  receipt described above, under owner-only permissions. It does not inspect or
305
342
  terminate running Claude or Codex sessions; a running task keeps its loaded
package/SECURITY.md CHANGED
@@ -48,6 +48,13 @@ OpenSocrates 1.x:
48
48
  receipts;
49
49
  - fails open when the selector cannot safely complete.
50
50
 
51
+ The installed `diagnose` command verifies the exact package inventory against
52
+ `checksums.sha256` and validates release-manifest identity for the running
53
+ version, host, and content revision. A mismatch is reported explicitly. These
54
+ files are not signed, so this is local integrity and damage detection, not an
55
+ authenticity guarantee against an attacker able to replace the complete
56
+ package and its checksum metadata.
57
+
51
58
  The Claude selector runs a bounded, non-persistent `claude --safe-mode -p`
52
59
  process. Safe mode disables user, project, and plugin customizations, and
53
60
  OpenSocrates additionally passes `--tools ""`, `--disallowedTools "mcp__*"`, and
@@ -62,6 +69,17 @@ small set of allowed path variables because the child needs it to locate the
62
69
  user's existing Claude login when a non-default config directory is in use.
63
70
  OpenSocrates does not copy, inspect, or log credentials from that directory.
64
71
 
72
+ For fail-open diagnosis, each Claude selector attempt increments one
73
+ owner-only local aggregate under a closed nine-label vocabulary. The aggregate
74
+ stores counts only: it has no timestamp, prompt, transcript, session or turn
75
+ identifier, path, model output, credential, or reasoning. It is shown by the
76
+ local `diagnose` command and is never transmitted.
77
+ An unreadable aggregate is reported as `unavailable`, never as zero observed
78
+ attempts. The next valid selector outcome atomically replaces only a malformed
79
+ current-schema aggregate with a fresh bounded count document; an unknown future
80
+ schema is preserved. Rejected malformed bytes are never copied into another
81
+ file.
82
+
65
83
  Managed policy settings are part of the host trust boundary and are not disabled.
66
84
  Anthropic's [CLI reference](https://code.claude.com/docs/en/cli-reference) states
67
85
  that under `--safe-mode` "managed settings policy still applies, including
package/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.3
1
+ 1.1.5
@@ -24,7 +24,7 @@ import { Readable } from "node:stream";
24
24
  import { pipeline } from "node:stream/promises";
25
25
  import { fileURLToPath } from "node:url";
26
26
 
27
- export const PRODUCT_VERSION = "1.1.3";
27
+ export const PRODUCT_VERSION = "1.1.5";
28
28
  export const REPOSITORY = "ParkerHwang/OpenSocrates";
29
29
  export const MARKETPLACE_NAME = "opensocrates";
30
30
  export const PLUGIN_NAME = "opensocrates";
@@ -1579,6 +1579,13 @@ async function runInstallOrUpdate(options, action) {
1579
1579
  console.log(
1580
1580
  `OpenSocrates ${PRODUCT_VERSION} ${verb} successfully for ${hosts.join(", ")}.`,
1581
1581
  );
1582
+ if (hosts.includes("codex")) {
1583
+ console.log(
1584
+ "Codex approval required: open one interactive Codex session and approve the " +
1585
+ "OpenSocrates hooks before relying on automatic selection. Non-interactive " +
1586
+ "codex exec silently skips hooks that have not been trusted.",
1587
+ );
1588
+ }
1582
1589
  console.log("Start new host tasks to load the updated skills and hooks.");
1583
1590
  return hosts;
1584
1591
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opensocrates",
3
- "version": "1.1.3",
3
+ "version": "1.1.5",
4
4
  "description": "Install and manage OpenSocrates for Claude Code, Cowork, and Codex.",
5
5
  "type": "module",
6
6
  "bin": {