opensocrates 1.1.0 → 1.1.3

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
@@ -3,6 +3,184 @@
3
3
  All notable changes to OpenSocrates are documented here. This project follows
4
4
  [Semantic Versioning](https://semver.org/).
5
5
 
6
+ ## [Unreleased]
7
+
8
+ ## [1.1.3] - 2026-08-11
9
+
10
+ ### Added
11
+
12
+ - Bounded semantic packaged-README checks now reject novel universal-support,
13
+ vendor-endorsement, and managed-environment safety overclaims, with mutation
14
+ coverage that also protects accurate limitation wording from false positives
15
+ ([#27](https://github.com/ParkerHwang/OpenSocrates/issues/27)).
16
+ - Native plugin packages now expose one honest `darwin-arm64` boundary: the
17
+ unvalidated PowerShell launcher is removed, the POSIX launcher rejects every
18
+ other target, and package manifests and docs distinguish unshipped build
19
+ candidates from the released platform
20
+ ([#12](https://github.com/ParkerHwang/OpenSocrates/issues/12)).
21
+ - A Claude Chat upload probe records the exact verified v1.1.2 skills ZIP
22
+ shape and hash, live uploader acceptance, single visible skill entry,
23
+ catalog routing, representative method loading, and grounding audit without
24
+ retaining prompt or conversation content
25
+ ([#5](https://github.com/ParkerHwang/OpenSocrates/issues/5)).
26
+ - A privacy-safe Cowork probe validates the separately uploaded
27
+ `/opensocrates` skill and corrects the installation boundary: Claude Code CLI
28
+ marketplace registration is not a Cowork-native plugin install. The exact
29
+ published v1.1.2 plugin archive is rejected by Cowork's upload-size limits,
30
+ and repository sync is unavailable without a marketplace manifest, so native
31
+ hooks remain blocked
32
+ ([#4](https://github.com/ParkerHwang/OpenSocrates/issues/4)).
33
+ - A privacy-safe Claude Code desktop live probe now validates a complete
34
+ authenticated UserPromptSubmit → PostToolUse(Read) → Stop lifecycle. It
35
+ observes the owner-only instruction artifact, authenticated grounding
36
+ receipt, and final cleanup without retaining prompts, transcripts, paths,
37
+ credentials, payloads, or selector reasoning
38
+ ([#3](https://github.com/ParkerHwang/OpenSocrates/issues/3)).
39
+ - A reproducible packaged `darwin-arm64` timing harness verifies PostToolUse
40
+ receipt creation and Stop cleanup across fresh-path and warm runs. All 80
41
+ measured operations completed, the worst p95 was 1,333.067 ms against the
42
+ 3-second budget, and no timeout change is recommended
43
+ ([#6](https://github.com/ParkerHwang/OpenSocrates/issues/6)).
44
+ - An opt-in Claude structured-output matrix runs 20–50 bounded attempts per
45
+ explicitly requested model, requires 95% valid envelopes, and stores only
46
+ aggregate fixed outcome counts. The authenticated Claude Code 2.1.226
47
+ `host-default` row passed 20/20 attempts with every failure outcome at zero;
48
+ no unobserved named model is claimed
49
+ ([#8](https://github.com/ParkerHwang/OpenSocrates/issues/8)).
50
+ - An opt-in, privacy-safe real Claude selector contract verifies the exact
51
+ isolation command, environment allowlist, temporary workspace, and real
52
+ subprocess failure categories. An authenticated, non-sensitive live call on
53
+ Claude Code 2.1.226 returned `selected`, removed its temporary workspace, and
54
+ retained no prompt, raw output, credential, or selector reasoning
55
+ ([#7](https://github.com/ParkerHwang/OpenSocrates/issues/7)).
56
+ - Sanitized Claude Code payload receipts for the complete v1.1.2 hook
57
+ lifecycle — `SessionStart`, `UserPromptSubmit`, `PostToolUse`, `Stop`, and
58
+ `SessionEnd` — captured from a supported runtime and compared field by field
59
+ with the shared adapter mapping. The checks assert that `prompt_id` is
60
+ projected into turn identity, that `last_assistant_message` reaches the Stop
61
+ decision, that two consecutive turns of one session stay artifact-isolated,
62
+ and that Stop and `SessionEnd` clean up
63
+ ([#9](https://github.com/ParkerHwang/OpenSocrates/issues/9)).
64
+
65
+ ### Fixed
66
+
67
+ - The Claude Chat skills ZIP now uses the uploader's required single top-level
68
+ `opensocrates/` folder with `SKILL.md` directly inside; the prior plugin-shaped
69
+ archive was rejected by the real Customize → Skills upload UI
70
+ ([#5](https://github.com/ParkerHwang/OpenSocrates/issues/5)).
71
+ - The installer now accepts only explicit Claude list JSON variants, rejects
72
+ malformed, duplicate, or conflicting managed entries, surfaces disabled
73
+ plugins as drift, re-enables them on install/update, preserves their state on
74
+ rollback, and emits executable recovery commands after a secondary root
75
+ removal failure ([#11](https://github.com/ParkerHwang/OpenSocrates/issues/11)).
76
+ - POSIX and PowerShell launchers now enforce the single generated `bin/`
77
+ package layout and never probe a competing `bin/runtime/` tree
78
+ ([#26](https://github.com/ParkerHwang/OpenSocrates/issues/26)).
79
+ - Packaged-launcher checks now derive each host's runtime root from canonical
80
+ `generator.json` metadata and include a mismatch probe that remains
81
+ discriminating when no native runtime targets were built
82
+ ([#25](https://github.com/ParkerHwang/OpenSocrates/issues/25)).
83
+ - Claude sessions now supersede private instruction artifacts by `prompt_id`.
84
+ When `Stop` is absent, the next `UserPromptSubmit` removes prior turn trees in
85
+ that session while preserving the new active turn; `SessionEnd` and the
86
+ 24-hour `SessionStart` sweep remain backstops
87
+ ([#13](https://github.com/ParkerHwang/OpenSocrates/issues/13)).
88
+ - The Claude selector now enforces its 512 KiB stdout ceiling while reading the
89
+ child process stream. Output that crosses the limit terminates and reaps the
90
+ process immediately, fails open with a content-free diagnostic, and is never
91
+ retained or logged ([#10](https://github.com/ParkerHwang/OpenSocrates/issues/10)).
92
+ - An ordinary Claude payload no longer reports an unknown field. `effort` was
93
+ present in the captured `PostToolUse` and `Stop` receipts, while
94
+ `background_tasks` and `session_crons` were present in the captured `Stop`
95
+ receipt. They were missing from the parser's known-field sets, so the
96
+ `native_unknown_field_ignored` diagnostic fired on healthy turns. The parser
97
+ still never reads those fields, and no parsing, projection, or gating
98
+ behavior changed.
99
+
100
+ ### Security and privacy
101
+
102
+ - The committed receipts contain no prompt, transcript, path, credential, or
103
+ user-identifying content. Field names, value types, and container shapes are
104
+ preserved as captured; every sensitive value is a fixed synthetic marker, and
105
+ a check refuses every native-payload string outside a closed vocabulary so a
106
+ future re-capture cannot commit real payload content by accident.
107
+
108
+ ## [1.1.2] - 2026-08-11
109
+
110
+ ### Added
111
+
112
+ - A Claude `PostToolUse` grounding receipt that is created only after a
113
+ successful `Read` starts at the first line, reaches the instruction
114
+ artifact's terminal marker, and targets the current turn's exact file.
115
+ - One bounded `Stop` repair pass when Claude attempts to finish without a
116
+ verified read receipt or the exact public method/revision audit line.
117
+
118
+ ### Fixed
119
+
120
+ - Selected reasoning methods can no longer silently pass the Claude completion
121
+ gate when the model skips their required reference read and substitutes
122
+ prior knowledge. Each selected method is identified as
123
+ `method-id@content-revision`, and its authored `Do not use when` and
124
+ `Stop conditions` are inlined when they fit the trusted context budget
125
+ ([#32](https://github.com/ParkerHwang/OpenSocrates/issues/32)).
126
+ - A grounding read is recognized whatever shape the host uses to deliver the
127
+ `Read` response. The terminator search no longer depends on envelope key
128
+ names, which are not a stable host contract, so a host that wraps the body
129
+ differently no longer looks like an incomplete read and no longer costs a
130
+ compliant turn a repair pass. The search is bounded by an explicit depth limit
131
+ and the existing collection limits.
132
+
133
+ ### Security and privacy
134
+
135
+ - Grounding receipts are owner-only and authenticated. They contain only the
136
+ instruction artifact digest, content revision, selected method IDs, and
137
+ keyed tags; they never contain prompts, transcripts, tool output, credentials,
138
+ or workspace and artifact paths, and they are removed with the turn artifact.
139
+ - The complete `Read` response is inspected transiently for the terminal marker
140
+ and is neither retained nor projected into OpenSocrates records.
141
+ - The gate's scope is documented rather than implied. A receipt establishes that
142
+ a successful `Read` callback for the exact current-turn artifact returned
143
+ content reaching the terminal marker; it does not cryptographically prove that
144
+ every artifact byte was returned. A synthetic marker-only payload would
145
+ satisfy the marker test, which the model cannot produce because it does not
146
+ author `tool_response`.
147
+
148
+ ## [1.1.1] - 2026-08-10
149
+
150
+ ### Added
151
+
152
+ - One-command `--host all` support for install, status, update, remove, and
153
+ verification, backed by one desired-state manifest for the selected channel,
154
+ installed hosts, and active version.
155
+ - Cross-host preflight, package verification, staging, activation, and reverse
156
+ rollback so a partial Claude/Codex activation cannot leave a newly selected
157
+ version on only one host.
158
+ - Opt-in macOS LaunchAgent updates through `auto-update enable`, `status`,
159
+ `disable`, and the internal scheduled reconciliation command. Checks use a
160
+ bounded interval with jitter, a single-instance lock, compatible-version
161
+ policy, concise local receipts, and an update-target set kept separate from
162
+ the complete installed-host set.
163
+
164
+ ### Changed
165
+
166
+ - Claude now exposes one `/opensocrates` skill. The 48 method procedures,
167
+ rigor, evidence audit, trace, and status behavior are internal supporting
168
+ references or subcommands instead of separate top-level skills and commands.
169
+ - Updating a managed v1.1.0 Claude installation replaces the old multi-skill
170
+ package tree, removing stale top-level method and helper entries.
171
+ - `status --host all` reports the desired and available version, last check,
172
+ last successful update, and per-host drift.
173
+
174
+ ### Security and privacy
175
+
176
+ - Automatic updates remain disabled until explicitly enabled, verify both the
177
+ outer release checksum and complete package manifest before activation, and
178
+ preserve the previous registrations on preflight, verification, staging, or
179
+ activation failure.
180
+ - Desired state, locks, and receipts use owner-only permissions. Receipts keep
181
+ only version, time, per-host result, and error category; no prompts,
182
+ transcripts, credentials, or workspace paths are stored.
183
+
6
184
  ## [1.1.0] - 2026-08-06
7
185
 
8
186
  ### Added
@@ -90,3 +268,6 @@ All notable changes to OpenSocrates are documented here. This project follows
90
268
 
91
269
  [1.0.0]: https://github.com/ParkerHwang/OpenSocrates/releases/tag/v1.0.0
92
270
  [1.1.0]: https://github.com/ParkerHwang/OpenSocrates/compare/v1.0.0...v1.1.0
271
+ [1.1.1]: https://github.com/ParkerHwang/OpenSocrates/compare/v1.1.0...v1.1.1
272
+ [1.1.2]: https://github.com/ParkerHwang/OpenSocrates/compare/v1.1.1...v1.1.2
273
+ [1.1.3]: https://github.com/ParkerHwang/OpenSocrates/compare/v1.1.2...v1.1.3
package/README.ko.md CHANGED
@@ -1,3 +1,7 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/ParkerHwang/OpenSocrates/main/docs/assets/opensocrates-banner.jpg" alt="OpenSocrates" width="820">
3
+ </p>
4
+
1
5
  # OpenSocrates
2
6
 
3
7
  [English](README.md) | **한국어**
@@ -12,19 +16,30 @@ OpenSocrates는 Claude와 Codex를 위한 로컬 연동 및 저작 추론 프레
12
16
  추론 시스템을 고른 뒤, 이론과 예제 전체를 활성 작업에 추가합니다. 단순한 사실
13
17
  확인과 기계적인 작업은 그대로 통과할 수 있습니다.
14
18
 
15
- 버전 `1.1.0`에는 48개의 추론 시스템과 Apple Silicon macOS
16
- (`darwin-arm64`)용 Claude 및 Codex 릴리스 패키지가 들어 있습니다. 기존 호스트
17
- 로그인을 사용하므로 API 키나 OpenSocrates 백엔드가 필요하지 않습니다.
19
+ 버전 `1.1.3`에는 48개의 추론 시스템, Claude의 단일 사용자 진입점, 선택된 절차를
20
+ 실제로 읽었는지 확인하는 Claude 접지 게이트, Claude/Codex 통합 라이프사이클,
21
+ 선택형 자동 업데이트가 들어 있습니다. 현재 릴리스 플랫폼은 Apple Silicon
22
+ macOS(`darwin-arm64`)입니다. 기존 호스트 로그인을 사용하므로 API 키나
23
+ OpenSocrates 백엔드가 필요하지 않습니다.
24
+
25
+ 네이티브 플러그인 아카이브에는 의도적으로 `bin/launch.sh`만 포함됩니다. 이
26
+ 런처는 `darwin-arm64`만 허용하며, Intel Mac·Linux·Windows용 런처와 런타임은
27
+ 이번 릴리스에 포함되거나 지원되지 않습니다.
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
+ > 관리 중인 두 호스트를 함께 업데이트할 수 있습니다.
18
33
 
19
34
  ## 호스트 지원 범위
20
35
 
21
- | 호스트 화면 | 자동 선택 | 추론 스킬 | 검증 상태 |
36
+ | 호스트 화면 | 자동 선택 | 사용자 진입점 | 검증 상태 |
22
37
  | --- | --- | --- | --- |
23
- | Codex CLI 및 Desktop | 지원 | 지원 | `darwin-arm64` 릴리스 검증 완료 |
24
- | Claude Code CLI | `UserPromptSubmit` 훅으로 지원 | 지원 | `darwin-arm64` 로컬 검증 완료 |
25
- | Claude Code 데스크톱 앱 | Claude Code 플러그인이 실행되는 곳에서 구현됨 | 지원 | 구현 완료, 실측 수신 기록 없음 |
26
- | Claude Cowork | 로컬 플러그인 런타임을 사용할 수 있을 때 구현됨 | 지원 | 실험적, 실측 수신 기록 없음 |
27
- | Claude 웹 및 Desktop Chat | 훅 미지원 | 플러그인 스킬로 지원 | 스킬 전용, 업로드 경로 미검증 |
38
+ | Codex CLI 및 Desktop | 지원 | OpenSocrates 플러그인 | `darwin-arm64` 릴리스 검증 완료 |
39
+ | Claude Code CLI | `UserPromptSubmit` 훅으로 지원 | `/opensocrates` | `darwin-arm64` 로컬 검증 완료 |
40
+ | Claude Code 데스크톱 앱 | Claude Code 플러그인이 실행되는 곳에서 지원 | `/opensocrates` | [인증된 훅 생명주기 로컬 검증 완료](docs/claude-desktop-live-probe.md) |
41
+ | Claude Cowork | 실측 설치에서는 자동 훅 미지원 | `/opensocrates` 독립 스킬 | [스킬 로컬 검증 완료, 네이티브 플러그인은 아카이브 제한으로 차단](docs/claude-cowork-live-probe.md) |
42
+ | Claude 웹 및 Desktop Chat | 훅 미지원 | `/opensocrates` | [실제 업로드 및 호출 검증 완료](docs/claude-chat-upload-probe.md) |
28
43
 
29
44
  상태 열은 서로 다른 네 단계를 뜻하며 같은 의미로 읽으면 안 됩니다.
30
45
 
@@ -41,11 +56,12 @@ Claude Chat 화면은 플러그인 훅을 실행하지 않습니다. 생성된
41
56
  Code와 Cowork 화면에서만 작동합니다. 훅이나 셀렉터를 사용할 수 없으면
42
57
  OpenSocrates는 작업을 막지 않고 통과합니다.
43
58
 
44
- Cowork에는 아직 확인되지 않은 전제가 하나 더 있습니다. OpenSocrates는
45
- `claude plugin marketplace add --scope user`로 마켓플레이스를 등록하며 이는
46
- Claude Code 사용자 설정에 기록됩니다. Anthropic 문서는 Cowork에서 플러그인 훅이
47
- 실행된다고 밝히지만, Claude Code CLI로 등록한 마켓플레이스가 Cowork에서 보인다는
48
- 내용은 없습니다. 실측 기록이 생기기 전까지 Cowork는 실험적 상태로 두세요.
59
+ 현재 실측 UI에서 Cowork는 Claude Code CLI 사용자 마켓플레이스 등록을 네이티브
60
+ Cowork 플러그인으로 가져오지 않습니다. 별도로 업로드한 `/opensocrates` 스킬은
61
+ 로컬 검증을 통과했지만, 공개된 v1.1.2 Claude 플러그인 아카이브는 Cowork의 문서화된
62
+ 압축 크기 제한과 실측 압축 해제 크기 제한을 모두 초과합니다. 저장소에도 Cowork
63
+ 마켓플레이스 매니페스트가 없습니다. Cowork 네이티브 플러그인을 설치하고 훅을 다시
64
+ 검증하기 전까지는 독립 스킬 전용 화면으로 취급하세요.
49
65
 
50
66
  ## 설치
51
67
 
@@ -59,47 +75,83 @@ Node.js 20 이상이 필요합니다. npm에 게시된 `opensocrates` 패키지
59
75
  내려받고 릴리스 체크섬과 모든 파일 체크섬을 검증한 뒤, 소유권 표식이 있는 관리형
60
76
  마켓플레이스를 등록합니다.
61
77
 
62
- ### Claude Code와 Cowork
78
+ ### 준비된 모든 호스트에 설치
63
79
 
64
80
  ```bash
65
- npx --yes opensocrates@1.1.0 install --host claude
81
+ npx --yes opensocrates@1.1.3 install --host all
66
82
  ```
67
83
 
68
- 라이프사이클 명령:
84
+ 모든 호스트 경로는 지원되는 인증 완료 CLI를 찾고, 어느 호스트도 바꾸기 전에
85
+ 전체 사전점검을 끝냅니다. 두 패키지를 모두 검증·스테이징한 다음 한 릴리스를
86
+ 트랜잭션으로 활성화합니다. 한 호스트의 활성화가 실패하면 이번 트랜잭션에서 이미
87
+ 바뀐 호스트도 이전 관리형 등록으로 되돌립니다.
88
+
89
+ 전체 라이프사이클에서 같은 호스트 값을 사용할 수 있습니다.
69
90
 
70
91
  ```bash
71
- npx --yes opensocrates@1.1.0 status --host claude
72
- npx --yes opensocrates@1.1.0 update --host claude
73
- npx --yes opensocrates@1.1.0 remove --host claude
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
74
95
  ```
75
96
 
76
- ### Codex
97
+ 소유자 전용 `~/.opensocrates/desired-state.json`에는 선택 채널, 설치된 호스트,
98
+ 원하는 활성 버전이 기록됩니다. `status --host all`은 원하는 버전과 사용 가능한
99
+ 버전, 마지막 확인, 마지막 성공 자동 업데이트, 호스트별 버전 차이를 보여 줍니다.
100
+
101
+ ### 호스트 하나를 명시적으로 설치
77
102
 
78
103
  기존 사용자와의 호환성을 위해 기본 호스트는 계속 Codex입니다.
79
104
 
80
105
  ```bash
81
- npx --yes opensocrates@1.1.0 install
82
- # 같은 명령: npx --yes opensocrates@1.1.0 install --host codex
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
83
109
  ```
84
110
 
85
- 라이프사이클 명령:
111
+ 기존 `--host codex` 및 `--host claude` 라이프사이클은 그대로 지원합니다. 호스트별
112
+ 업데이트는 의도적으로 버전 차이를 만들 수 있고, 이후 `update --host all` 또는
113
+ 성공한 자동 조정이 desired state에 기록된 모든 호스트를 다시 한 버전으로 맞춥니다.
114
+
115
+ Claude 상태는 활성 설치와 설치됐지만 비활성화된 플러그인을 구분합니다. 원하는
116
+ 설치가 비활성 상태라면 drift로 보고합니다. `install` 또는 `update`를 실행하면 검증된
117
+ 패키지를 의도적으로 다시 활성화하며, 활성화가 실패하면 롤백이 이전의 활성·비활성
118
+ 상태를 복원합니다. 설치 프로그램은 Claude 목록 명령에서 실측한 직접 JSON 배열과
119
+ 명시적인 `marketplaces`/`plugins` 래퍼만 허용합니다. 개인정보를 제거한 2.1.226
120
+ 픽스처는 `installer/fixtures/claude-cli/`에 있습니다.
121
+
122
+ ### 선택형 자동 업데이트
86
123
 
87
124
  ```bash
88
- npx --yes opensocrates@1.1.0 status --host codex
89
- npx --yes opensocrates@1.1.0 update --host codex
90
- npx --yes opensocrates@1.1.0 remove --host codex
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
91
128
  ```
92
129
 
93
- 두 호스트를 모두 사용하려면 설치 명령을 각각 실행하세요. 관리형 마켓플레이스는
94
- Claude와 Codex 설정 홈에 따로 저장됩니다.
130
+ 자동 업데이트는 명시적으로 켜기 전까지 비활성화되어 있습니다. macOS LaunchAgent는
131
+ 한 시간마다 가벼운 확인을 시작하고, desired state는 기본 24시간 간격과 지터,
132
+ 단일 실행 잠금을 적용합니다. 작업은 선택한 npm 채널을 호출하고 릴리스 및 패키지
133
+ 체크섬을 검증하며 모든 관리 호스트를 스테이징한 뒤 한 트랜잭션으로 조정합니다.
134
+ 메이저 버전 자동 업그레이드는 기본적으로 차단되며, 정책을 바꾸려면
135
+ `--allow-major`를 명시해야 합니다.
136
+
137
+ `auto-update enable`에 호스트 하나를 지정하면 자동 업데이트 대상만 좁아집니다.
138
+ 다른 설치 호스트를 desired state에서 제거하지 않으므로 `status --host all`은 모든
139
+ 설치를 계속 추적하고, 이후 `update --host all`도 전체 설치 집합을 다시 조정합니다.
140
+
141
+ 업데이터 영수증에는 버전, 시간, 호스트별 결과, 오류 범주만 기록됩니다. 프롬프트,
142
+ 대화 기록, 자격 증명, 작업공간 경로는 기록하지 않습니다. `auto-update disable`은
143
+ LaunchAgent를 언로드하고 삭제하며, `remove --host all`도 관리 호스트를 지우기 전에
144
+ 같은 정리를 수행합니다.
95
145
 
96
146
  ### Claude 웹 및 Desktop Chat 스킬
97
147
 
98
148
  이 화면들은 플러그인 스킬은 지원하지만 훅은 실행하지 않습니다. 릴리스에서
99
- `opensocrates-1.1.0-claude-chat-skills.zip`을 내려받아 Claude의 플러그인 사용자
100
- 설정 화면에서 업로드하세요. 작고 런타임이 없는 패키지에서 48개 방법 스킬과 3개
101
- 공용 스킬을 사용할 수 있지만 Chat은 플러그인 훅을 실행하지 않으므로 자동 선택은
102
- 없습니다. Anthropic의
149
+ `opensocrates-1.1.3-claude-chat-skills.zip`을 내려받아 Claude의 **사용자 지정 →
150
+ 스킬 → 스킬 업로드** 화면에서 업로드하세요. ZIP은 업로더 요구사항에 맞춰
151
+ 최상위 `opensocrates/` 폴더 바로 아래에 `SKILL.md`를 둡니다. 패키지는
152
+ `/opensocrates` 스킬 하나만 노출하고, 48개
153
+ 방법 절차와 엄격도·근거·추적 제어는 내부 참조로 둡니다. Chat은 플러그인 훅을
154
+ 실행하지 않으므로 자동 선택은 없습니다. Anthropic의
103
155
  [플러그인 화면 안내](https://support.claude.com/en/articles/13837440-use-plugins-in-claude)를
104
156
  참고하세요.
105
157
 
@@ -108,20 +160,21 @@ Claude와 Codex 설정 홈에 따로 저장됩니다.
108
160
  npm 레지스트리를 거치지 않을 때도 같은 호스트 옵션을 사용합니다.
109
161
 
110
162
  ```bash
111
- npx --yes github:ParkerHwang/OpenSocrates#v1.1.0 install --host claude
112
- npx --yes github:ParkerHwang/OpenSocrates#v1.1.0 install --host codex
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
113
166
  ```
114
167
 
115
168
  ### 릴리스 파일 직접 검증
116
169
 
117
- [v1.1.0 릴리스](https://github.com/ParkerHwang/OpenSocrates/releases/tag/v1.1.0)에서
170
+ [v1.1.3 릴리스](https://github.com/ParkerHwang/OpenSocrates/releases/tag/v1.1.3)에서
118
171
  `opensocrates.mjs`, 호스트 패키지, `.sha256` 파일을 내려받습니다. Claude의 예:
119
172
 
120
173
  ```bash
121
- shasum -a 256 -c opensocrates-1.1.0-claude-plugin.zip.sha256
174
+ shasum -a 256 -c opensocrates-1.1.3-claude-plugin.zip.sha256
122
175
  node opensocrates.mjs install --host claude \
123
- --asset opensocrates-1.1.0-claude-plugin.zip \
124
- --checksum opensocrates-1.1.0-claude-plugin.zip.sha256
176
+ --asset opensocrates-1.1.3-claude-plugin.zip \
177
+ --checksum opensocrates-1.1.3-claude-plugin.zip.sha256
125
178
  ```
126
179
 
127
180
  Codex 패키지는 `claude`를 `codex`로 바꾸면 됩니다.
@@ -136,9 +189,13 @@ Codex 패키지는 `claude`를 `codex`로 바꾸면 됩니다.
136
189
  ```bash
137
190
  claude plugin uninstall opensocrates@OpenSocrates --scope user
138
191
  claude plugin marketplace remove OpenSocrates --scope user
139
- npx --yes opensocrates@1.1.0 install --host claude
192
+ npx --yes opensocrates@1.1.3 install --host claude
140
193
  ```
141
194
 
195
+ 관리형 v1.1.0 Claude 설치를 업데이트하면 패키지 트리 전체가 교체됩니다. 따라서
196
+ 예전의 최상위 방법 스킬 48개, `rigor`, `trace`, 중복 명령은 오래된 항목으로 남지
197
+ 않고 함께 제거됩니다.
198
+
142
199
  ## 사용법
143
200
 
144
201
  Claude나 Codex를 평소처럼 사용하세요. 요청에 판단, 해석, 진단, 설명, 계획,
@@ -148,12 +205,39 @@ Claude나 Codex를 평소처럼 사용하세요. 요청에 판단, 해석, 진
148
205
  1. 현재 호스트에서 새로운 비영구 셀렉터를 시작합니다.
149
206
  2. 저작된 48개 시스템 카탈로그에서 적합한 시스템을 선택합니다.
150
207
  3. 선택된 전체 콘텐츠를 소유자 전용 임시 Markdown 파일에 씁니다.
151
- 4. 활성 작업에 그 파일을 읽으라는 작은 숨김 컨텍스트를 추가합니다.
208
+ 4. 각 방법 ID와 콘텐츠 리비전, 크기 한도 안에 들면 정확한 `Do not use when` 및
209
+ `Stop conditions`를 작은 숨김 컨텍스트에 추가합니다.
210
+ 5. 활성 작업이 방법을 적용하기 전에 전체 파일을 읽고, 접지된 답변의 마지막에
211
+ `OpenSocrates grounding: triangulation@1`과 같은 정확한 감사 줄을 남기게 합니다.
212
+
213
+ Claude 훅 화면에서는 Read 전용 `PostToolUse` 훅이 현재 turn의 정확한 파일을 첫
214
+ 줄부터 종료 표식까지 읽은 경우에만 인증된 영수증을 만듭니다. `Stop` 시 영수증이나
215
+ 감사 줄이 없으면 한 번만 보정을 요청하고, `stop_hook_active`로 반복 보정을
216
+ 막습니다. 일부만 읽었거나 출력이 잘렸거나 실패했거나 다른 파일을 읽은 경우는
217
+ 인정하지 않습니다. Claude Chat은 이 훅을 실행하지 않으므로 접지 계약이 스킬
218
+ 지침으로만 적용됩니다.
219
+
220
+ 영수증은 해당 파일에 대한 성공한 `Read` 콜백이 종료 표식까지 도달한 내용을
221
+ 반환했다는 사실만 기록합니다. 모든 바이트가 전달되었음을 증명하지는 않으며,
222
+ 이 게이트는 실패 시 열린 상태로 통과합니다. 이 게이트가 방어하는 경계와 방어하지
223
+ 않는 범위는 [SECURITY.md](SECURITY.md)를 참고하세요.
152
224
 
153
225
  선택 수에는 고정 제한이 없습니다. 셀렉터의 내부 제한 시간은 30초이고 재시도하지
154
226
  않으며 실패 시 통과합니다. 타임아웃, 호스트 오류, 잘못된 출력, 미개입 결정,
155
227
  안전하지 않은 컨텍스트 또는 사용할 수 없는 훅은 모두 주입 없이 끝납니다.
156
228
 
229
+ Claude에서는 필요할 때 같은 컨트롤러를 명시적으로 호출할 수 있습니다.
230
+
231
+ ```text
232
+ /opensocrates <요청>
233
+ /opensocrates auto <요청>
234
+ /opensocrates trace
235
+ /opensocrates status
236
+ ```
237
+
238
+ Claude의 스킬·명령 UI에는 `/opensocrates` 하나만 나타납니다. 컨트롤러가 내부 방법
239
+ 참조를 선택해 읽으므로 사용자가 48개 구현 카탈로그를 직접 탐색할 필요가 없습니다.
240
+
157
241
  Claude 셀렉터는 세션을 저장하지 않는 단일 `claude --safe-mode -p` 프로세스를
158
242
  사용합니다. 안전 모드는 사용자, 프로젝트, 플러그인 커스터마이즈를 끕니다.
159
243
  `CLAUDE.md`, 스킬, 플러그인, 훅, MCP 서버, 사용자 정의 명령과 에이전트가 여기에
@@ -189,8 +273,19 @@ OpenSocrates는 백엔드를 호스팅하거나 텔레메트리를 추가하거
189
273
  임시 instruction 파일에는 OpenSocrates가 저작한 콘텐츠만 들어갑니다. 원시
190
274
  프롬프트, 대화 기록, 워크스페이스 파일, 도구 데이터, 자격 증명과 셀렉터 추론은
191
275
  OpenSocrates 기록, 로그, 메트릭, 진단 또는 instruction 파일에 쓰지 않습니다.
192
- `Stop`에서 현재 turn 파일을, `SessionEnd`에서 남은 세션 파일을,
193
- `SessionStart`에서 24시간이 지난 비정상 종료 잔여 파일을 삭제합니다.
276
+ 전체 Read 응답은 메모리에서 종료 표식만 확인하고 보관하지 않습니다. 소유자 전용
277
+ 접지 영수증에는 artifact 해시, 콘텐츠 리비전, 선택한 방법 ID, 키 기반 인증 및
278
+ 도구 사용 태그만 저장하며 프롬프트, 도구 출력, 워크스페이스 경로와 artifact 경로는
279
+ 저장하지 않습니다. `Stop`에서 현재 turn 파일과 영수증을 삭제합니다. `Stop`이 오지
280
+ 않으면 같은 세션의 다음 `UserPromptSubmit`이 새 turn을 선택하기 전에 이전
281
+ `prompt_id` 트리를 모두 삭제하되 새 활성 트리는 보존합니다. `SessionEnd`는 세션에
282
+ 남은 파일을 삭제하고, 다음 `SessionStart`는 24시간이 지난 비정상 종료 잔여 파일을
283
+ 삭제합니다.
284
+
285
+ 자동 업데이트를 켜면 앞서 설명한 desired state와 간결한 영수증만 소유자 전용
286
+ 권한으로 저장합니다. 실행 중인 Claude나 Codex 세션을 검사하거나 종료하지 않습니다.
287
+ 이미 실행 중인 작업은 로드한 플러그인을 계속 쓰고, 새 작업이 조정된 버전을 자연스럽게
288
+ 불러옵니다.
194
289
 
195
290
  취약점 신고와 측정된 지원 경계는 [SECURITY.md](SECURITY.md)를 확인하세요.
196
291
 
@@ -200,6 +295,25 @@ OpenSocrates 기록, 로그, 메트릭, 진단 또는 instruction 파일에 쓰
200
295
  [uv](https://docs.astral.sh/uv/), Python 3.12, Node.js 20 이상을 설치한 뒤 다음을
201
296
  실행합니다.
202
297
 
298
+ 릴리스 후보를 병합하기 전에는
299
+ [새 Apple Silicon Mac 인수 테스트 절차](docs/clean-machine-acceptance.ko.md)를 따라
300
+ 인증된 실제 Claude Code 및 Codex 홈에서 검증하고 개인정보를 뺀 근거 묶음을
301
+ 확보하세요.
302
+
303
+ 셀렉터의 인증된 Claude 하위 프로세스 계약은 별도의
304
+ [선택형 검사](docs/real-claude-selector.md)로 검증합니다. 인증된 v1.1.2 영수증은 실제
305
+ 하위 프로세스 격리 및 구조화 출력 계약을 통과했으며, 일반 오프라인 테스트는 이
306
+ 실제 호출을 다시 실행하지 않습니다.
307
+
308
+ `--max-turns 1` 구조화 출력의 반복 동작은 별도의
309
+ [집계 신뢰성 매트릭스](docs/claude-structured-output-reliability.md)로 검증합니다. 인증된
310
+ Claude Code 2.1.226의 `host-default` 행은 20/20회를 통과했으며, 관측하지 않은
311
+ 명시적 모델은 지원된다고 주장하지 않습니다.
312
+
313
+ 패키지 Claude PostToolUse 영수증과 Stop 정리 지연 시간에는 재현 가능한
314
+ [Apple Silicon 측정 영수증](docs/claude-hook-timing.md)이 있습니다. v1.1.2에서 관측한
315
+ p95는 3초 훅 예산의 절반 이상을 여유로 남겨 타임아웃을 변경하지 않았습니다.
316
+
203
317
  ```bash
204
318
  make bootstrap
205
319
  make format-check