opensocrates 1.3.0 → 1.4.0

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.md CHANGED
@@ -1,577 +1,111 @@
1
1
  <p align="center">
2
-
3
- > OpenSocrates 1.3.0: decision-point retrieval and conservative Guided EN/KO presentation.
4
- > See [release evidence and support limits](docs/v1.3.0-recovery/PROGRESS.md) and
5
- > [migration and delivery modes](docs/decision-points.md).
6
-
7
2
  <img src="https://raw.githubusercontent.com/ParkerHwang/OpenSocrates/main/docs/assets/opensocrates-banner.jpg" alt="OpenSocrates" width="820">
8
3
  </p>
9
4
 
10
- Bounded synthetic Codex tests with `gpt-5.6-luna` at `max` effort included
11
- 300-second final-delivery timeouts, even when the requested file existed.
12
- This release does not promise a fixed response time or demonstrated quality,
13
- naturalness, token-cost or latency improvement. See the linked release evidence
14
- for every attempt and its source/configuration boundary.
5
+ # OpenSocrates
15
6
 
7
+ **A method for the judgment your Codex agent is making.**
16
8
 
17
- # OpenSocrates
9
+ OpenSocrates brings 48 authored reasoning methods to Codex. Examine assumptions,
10
+ compare options, and weigh evidence within the task you are already doing.
18
11
 
19
12
  **English** | [한국어](README.ko.md)
20
13
 
21
14
  [![CI](https://github.com/ParkerHwang/OpenSocrates/actions/workflows/ci.yml/badge.svg)](https://github.com/ParkerHwang/OpenSocrates/actions/workflows/ci.yml)
22
15
  [![npm](https://img.shields.io/npm/v/opensocrates)](https://www.npmjs.com/package/opensocrates)
23
- [![Release](https://img.shields.io/github/v/release/ParkerHwang/OpenSocrates)](https://github.com/ParkerHwang/OpenSocrates/releases)
24
16
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
25
17
 
26
- OpenSocrates is a local integration and authored reasoning framework for
27
- Google Antigravity, Claude, Codex, Cursor, Grok Build, and OpenCode. It preserves
28
- each host's delivery model: Claude/Codex hidden trusted context leads with
29
- teacher questions, Antigravity/Cursor/Grok expose question-led complete
30
- procedures through skills, and OpenCode injects one such procedure in the same
31
- turn with the native skill as fallback. Straightforward factual and mechanical
32
- work can pass through unchanged.
33
-
34
- Version `1.2.0` added first-class OpenCode support to the 48 reasoning systems,
35
- including stable same-turn activation, a native skill fallback, coordinated
36
- multi-host lifecycle management, and opt-in automatic updates on
37
- Apple-silicon macOS (`darwin-arm64`). It uses your existing host login and does
38
- not require an API key or an OpenSocrates backend.
39
-
40
- The native plugin archives intentionally ship only `bin/launch.sh`. That
41
- launcher accepts `darwin-arm64` only; macOS Intel, Linux, and Windows launchers
42
- and runtimes are not shipped or supported in this release.
43
-
44
- > **OpenSocrates 1.3.0 release contents:** in-turn selective retrieval, unchanged
45
- > canonical procedures, protected presentation-only EN/KO guidance and explicit
46
- > host evidence levels. Chat cloud activation remains unvalidated.
47
-
48
- ## Host support
49
-
50
- | Host surface | Automatic selection | User-facing entry | Validation status |
51
- | --- | --- | --- | --- |
52
- | Google Antigravity CLI | No; explicit skill only | `opensocrates` skill | [Experimental content-only plugin; `agy 1.0.6` validation passed](docs/antigravity-support.md) |
53
- | Cursor IDE and CLI | Cursor may discover the skill; no separate OpenSocrates selector call | `/opensocrates` | [Experimental content-only Agent Plugin; official package contract checked, no live Cursor receipt](docs/cursor-support.md) |
54
- | Grok Build `grok -p` | Yes; native same-turn skill selection | `/opensocrates` | [Automatic and explicit native skill validated on Grok Build 1.0.3](docs/grok-support.md) |
55
- | Grok Build TUI | Native plugin is shared with headless; activation receipt pending | `/opensocrates` | [TUI hook execution verified, native skill marker test pending; shipped package has no hooks](docs/grok-support.md) |
56
- | OpenCode TUI and `opencode run` | Yes; stable same-turn local bridge | Native `opensocrates` skill | [OpenCode 1.18.18 TUI, `opencode run`, and DeepSeek V4 Flash live smoke validated](docs/opencode-support.md) |
57
- | 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 |
58
- | Claude Code CLI | Yes, through `UserPromptSubmit` | Plugin: `/opensocrates:opensocrates` | Locally validated on `darwin-arm64` |
59
- | Claude Code desktop app, Local mode | Yes, where Claude Code plugins run | Plugin: `/opensocrates:opensocrates` | [Authenticated hook lifecycle locally validated](docs/claude-desktop-live-probe.md) |
60
- | Claude Cowork with the local plugin | Yes, in the tested local plugin upload | Plugin: `/opensocrates:opensocrates` | [Native hook lifecycle locally validated; direct release upload, no marketplace sync](docs/claude-cowork-live-probe.md) |
61
- | Claude web and Desktop Chat | No OpenSocrates hooks | Standalone skill: `/opensocrates` | [v1.3 archive export validated; cloud activation unvalidated](docs/claude-chat-upload-probe.md) |
62
-
63
- The status column uses four distinct levels. Do not read them as
64
- interchangeable:
65
-
66
- - **Implemented** — the integration exists in code and ships in the package.
67
- - **Locally validated** — exercised end to end on a maintainer machine, but
68
- not on every build.
69
- - **Release-validated** — exercised by the release gate on every build. For
70
- Codex this currently covers the package and launcher, not live hook delivery.
71
- - **Experimental / no live probe receipt** — implemented, but no captured
72
- receipt shows the host actually delivering the hook. `os capabilities show`
73
- reports these capabilities as `unknown`, not as available.
74
-
75
- The Claude plugin's canonical explicit command is
76
- `/opensocrates:opensocrates`, following Anthropic's
77
- [plugin namespace contract](https://code.claude.com/docs/en/plugins). A current
78
- Claude version can also offer `/opensocrates` as a bare alias when no other
79
- command owns that name, but the alias is not the canonical plugin contract and
80
- does not prove which skill source answered. The separately uploaded Chat ZIP
81
- is a standalone skill and canonically uses `/opensocrates`. Chat surfaces do
82
- not run the packaged OpenSocrates hooks; automatic per-prompt selection is
83
- available only on Claude Code and Cowork surfaces that execute the plugin
84
- runtime. OpenSocrates fails open if a hook or selector is unavailable.
85
-
86
- Keep three Claude provenance states separate: the installer-managed local
87
- plugin, a standalone ZIP manually uploaded to Chat, and any pre-existing
88
- synced/custom skill. Local plugin status cannot prove or update either Cloud
89
- state. Historical records report local plugin version 1.2.1, while the
90
- pre-existing synced/custom observation is 1.1.2; neither is evidence that an
91
- exact v1.2.1 standalone release ZIP was uploaded.
92
-
93
- The published v1.1.2 Claude plugin archive exceeded Cowork's documented
94
- compressed limit and observed uncompressed limit. A pre-release v1.1.3
95
- candidate was 13.8 MB compressed and 34.1 MB uncompressed, contained neither
96
- the Codex runtime nor a nested ZIP, and passed Cowork's local upload. Its
97
- UserPromptSubmit, PostToolUse(Read), authenticated grounding receipt, Stop, and
98
- cleanup lifecycle is locally validated. Version 1.1.4 is the first release to
99
- ship that reviewed package boundary. The repository still has no Cowork
100
- marketplace manifest, so Cowork installation uses the local plugin upload path
101
- rather than repository sync.
102
-
103
- ## Install
104
-
105
- Before installing, sign in to the host and make sure its command is available:
106
-
107
- - Antigravity: `agy 1.0.0` or later; support is explicit-skill only;
108
- - Cursor: Cursor `2.5.0` or later; support is explicit-skill first;
109
- - Claude: Claude Code `2.1.205` or later and the `claude` command;
110
- - Codex: an OAuth-authenticated `codex` command.
111
- - Grok Build: `grok 1.0.3` or later; existing Grok authentication, with no additional API key.
112
- - OpenCode: OpenCode `1.18.18` or later; any configured provider/model is accepted.
113
-
114
- Node.js 20 or later is required. The published `opensocrates` npm package is a
115
- small, dependency-free installer. It downloads the matching package from
116
- GitHub Releases and verifies the release checksum and every file checksum
117
- before registering an owner-marked managed marketplace.
118
-
119
- ### Install every ready host
120
-
121
- ```bash
122
- npx --yes opensocrates@1.3.0 install --host all
123
- ```
124
-
125
- The all-host path detects supported, authenticated host CLIs, completes every
126
- preflight before changing any host, verifies and stages every selected package,
127
- and then activates one release transactionally. If one activation fails, every
128
- host already changed in that transaction is restored to its previous managed
129
- registration.
130
-
131
- Use the same host value for the complete lifecycle:
132
-
133
- ```bash
134
- npx --yes opensocrates@1.3.0 status --host all
135
- npx --yes opensocrates@1.3.0 update --host all
136
- npx --yes opensocrates@1.3.0 remove --host all
137
- ```
138
-
139
- ### Remove a registration, purge owned payloads, or reset Codex trust
140
-
141
- Ordinary `remove` keeps its backward-compatible, narrow contract: it removes
142
- the selected exact host registration and installer-managed root and reconciles
143
- the updater, but it may leave host-owned OpenSocrates plugin caches and the
144
- installer desired-state file. Its output names every remaining known
145
- OpenSocrates path and the purge command to run next; it does not describe that
146
- result as a complete uninstall.
18
+ ## Get started
147
19
 
148
- After closing active hosts, request the explicit owned-payload purge:
20
+ Version **1.4.0 supports Codex only**, on **Apple-silicon macOS and Windows x64**.
21
+ Install Node.js 20 or later, make the Codex CLI available, and sign in to Codex.
22
+ The native runtime is bundled; users do not need Python.
149
23
 
150
- ```bash
151
- npx --yes opensocrates@1.3.0 remove --host all --purge
152
- # One host: npx --yes opensocrates@1.3.0 remove --host claude --purge
153
- # Also reset only OpenSocrates Codex hook trust:
154
- npx --yes opensocrates@1.3.0 remove --host all --purge --reset-trust
155
- # Codex only: npx --yes opensocrates@1.3.0 remove --host codex --purge --reset-trust
24
+ ```sh
25
+ npx --yes opensocrates@1.4.0 install
156
26
  ```
157
27
 
158
- Purge verifies canonical paths, the exact `opensocrates@opensocrates` package
159
- identity, manifests, checksums, and installer ownership markers before deleting
160
- anything. It covers the managed roots, exact Claude/Codex cache versions, empty
161
- Claude OpenSocrates plugin-data directories, OpenCode's owned skill/bridge/
162
- sidecar, the OpenSocrates LaunchAgent, known transaction residue, and—after the
163
- lifecycle lock is released—the final known installer state files and an empty
164
- state directory. It never recursively deletes broad host parents such as
165
- `~/.claude/plugins`, `~/.codex/plugins`, or `~/.opensocrates`.
166
-
167
- An active Claude cache with a live `.in_use/<pid>`, a missing host CLI that
168
- prevents registration verification, a symlink, an invalid marker or manifest,
169
- nonempty unverified plugin data, or a cleanup/permission failure makes the
170
- result `pending` or failed and the command exits unsuccessfully. Close the
171
- host or resolve the reported path and rerun the same purge command; a completed
172
- purge is idempotent. Other plugins and user task, project, chat, plan, and
173
- history data are preserved byte-for-byte.
174
-
175
- The four removal surfaces remain separate:
176
-
177
- - **Plugin registration:** ordinary remove and purge ask the selected host to
178
- remove only the exact `opensocrates@opensocrates` registration.
179
- - **Payload and installer state:** `--purge` verifies ownership before removing
180
- the exact cache/data/managed-state paths described above.
181
- - **Host security trust:** Codex hook approval is not payload. Purge preserves
182
- it by default and reports that fact. Add `--reset-trust` explicitly with
183
- `--host codex` or `--host all` to reset only the seven canonical
184
- OpenSocrates hook approvals.
185
- - **User history:** task, project, chat, plan, session, and history content is
186
- never a removal target and remains byte-for-byte unchanged.
187
-
188
- Codex CLI 0.145.0 has no supported narrow trust-removal command, so this opt-in
189
- fallback targets only the exact `CODEX_HOME/config.toml`. It removes canonical
190
- OpenSocrates sections for `pre_tool_use`, `post_tool_use`, `pre_compact`,
191
- `session_start`, `session_end`, `user_prompt_submit`, and `stop`, without
192
- hard-coding or printing their hashes. Other settings, plugins, comments, order,
193
- whitespace, and LF/CRLF style are preserved. A symlink, noncanonical matching
194
- section, unexpected key, invalid config, unsupported Codex validator, concurrent
195
- change, or write/validation failure makes the purge partial. The original
196
- config is retained or transactionally restored when rollback remains safe. If
197
- a later external edit makes automatic rollback unsafe, that edit is not
198
- overwritten and the owner-only recovery copy is preserved. No complete result
199
- is claimed. Reinstallation is expected to present those seven hooks as new
200
- approvals; that live approval flow still requires separate host evidence.
201
-
202
- A private `~/.opensocrates/desired-state.json` manifest records the selected
203
- channel, installed hosts, and desired active version. `status --host all`
204
- reports the desired and available versions, last check, last successful
205
- automatic update, and per-host drift.
28
+ Start a new interactive Codex session and review the seven OpenSocrates command
29
+ hooks. Approve those hooks before relying on native discovery. Non-interactive
30
+ `codex exec` skips untrusted hooks; installation alone does not establish hook
31
+ approval or actual delivery. You can explicitly ask Codex to use the
32
+ `opensocrates` controller skill.
206
33
 
207
- ### Install one host explicitly
34
+ If you previously disabled these hooks, enable them in Codex's `/hooks` view.
35
+ Updating the plugin preserves your hook enablement and trust preferences.
208
36
 
209
- Codex remains the default host for backward compatibility:
210
-
211
- ```bash
212
- npx --yes opensocrates@1.3.0 install
213
- # Equivalent: npx --yes opensocrates@1.3.0 install --host codex
214
- npx --yes opensocrates@1.3.0 install --host antigravity
215
- npx --yes opensocrates@1.3.0 install --host claude
216
- npx --yes opensocrates@1.3.0 install --host cursor
217
- npx --yes opensocrates@1.3.0 install --host grok
218
- npx --yes opensocrates@1.3.0 install --host opencode
37
+ ```sh
38
+ npx --yes opensocrates@1.4.0 status
39
+ npx --yes opensocrates@1.4.0 update
219
40
  ```
220
41
 
221
- Antigravity installs a content-only plugin at
222
- `~/.gemini/config/plugins/opensocrates`. It contains one explicit skill and no
223
- hook, launcher, native runtime, background service, telemetry, or extra model
224
- selector call. See the [Antigravity support boundary](docs/antigravity-support.md).
225
- Cursor installs a content-only Agent Plugin at
226
- `~/.cursor/plugins/local/opensocrates`. It includes one skill and no hook,
227
- launcher, native runtime, background service, telemetry, or separate selector
228
- model call. See the [Cursor support boundary](docs/cursor-support.md).
229
- Grok Build installs a native content-only plugin at
230
- `~/.grok/plugins/opensocrates`. It exposes one auto-selectable and explicitly
231
- invocable `/opensocrates` skill with 48 internal procedures. The package has no
232
- hooks, command, agent, MCP server, launcher, runtime, or nested selector call.
233
- The installer reads Grok's machine-readable inspection state but owns only that
234
- exact directory and never modifies or removes a Claude installation. See the
235
- [Grok Build support boundary](docs/grok-support.md).
236
- Existing `--host codex` and `--host claude` lifecycle commands remain
237
- supported. A host-specific update can intentionally create drift; a later
238
- `update --host all` or successful automatic reconciliation brings every host
239
- recorded in desired state back to one version.
240
-
241
- OpenCode installation owns only `plugins/opensocrates.js`, its sidecar, and
242
- `skills/opensocrates/` beneath `~/.config/opencode`; it never rewrites
243
- `opencode.json` or unrelated plugins and skills. See the
244
- [OpenCode support and evidence boundary](docs/opencode-support.md).
245
-
246
- For Claude, status distinguishes an enabled installation from an
247
- installed-but-disabled plugin. A disabled desired installation is reported as
248
- drift. Running `install` or `update` intentionally installs the verified
249
- package enabled again; if activation fails, rollback restores the previous
250
- enabled or disabled state. The installer accepts only the observed direct JSON
251
- arrays and explicit `marketplaces`/`plugins` wrappers from Claude's list
252
- commands. The privacy-safe 2.1.226 fixture is under
253
- `installer/fixtures/claude-cli/`.
254
-
255
- ### Opt-in automatic updates
256
-
257
- ```bash
258
- npx --yes opensocrates@1.3.0 auto-update enable --host all
259
- npx --yes opensocrates@1.3.0 auto-update status
260
- npx --yes opensocrates@1.3.0 auto-update disable
261
- ```
262
-
263
- Automatic updates are disabled until explicitly enabled. The macOS LaunchAgent
264
- starts a bounded hourly poll; desired state applies the configured interval
265
- (24 hours by default) with jitter and a single-instance lock. The job invokes
266
- the selected npm channel, verifies release and package checksums, stages every
267
- managed host, and reconciles them as one transaction. Major-version upgrades
268
- are blocked by default; use `--allow-major` only when that policy is intended.
269
-
270
- Passing one host to `auto-update enable` narrows only the automatic-update
271
- scope. It never removes another installed host from desired state;
272
- `status --host all` continues to track every installation, and a later
273
- `update --host all` still reconciles the complete installed set.
274
-
275
- The updater keeps a private receipt with version, time, per-host result, and an
276
- error category only. It never records prompts, transcripts, credentials, or
277
- workspace paths. `auto-update disable` unloads and removes the LaunchAgent;
278
- `remove --host all` does the same before removing the managed hosts.
279
-
280
- ### Claude web and Desktop Chat skills
281
-
282
- These surfaces can use a separately uploaded standalone skill but do not run
283
- the local plugin hooks.
284
-
285
- Chat standalone export: **archive contract validated; live activation unvalidated.**
286
-
287
- The complete v1.3.0 standalone ZIP ships with all 48 methods in EN/KO. Its
288
- layout/reference integrity and public release provenance are separate from an
289
- account-level upload. Older custom/synced skills are not automatically upgraded
290
- by the local installer. See [version-bound support evidence](docs/claude-chat-upload-probe.md).
291
-
292
- When the exact release is published, verify its checksum before using Claude's
293
- **Customize → Skills → Upload skill** UI. The ZIP must contain one top-level
294
- `opensocrates/` folder with `SKILL.md` directly inside. It is not the Claude
295
- Code/Cowork plugin archive. The standalone package exposes exactly one
296
- canonical `/opensocrates` skill; its 48 method procedures, rigor, evidence, and
297
- trace controls are internal supporting references. Automatic hook selection is
298
- absent because Chat does not execute the packaged hooks. See Anthropic's
299
- [custom skill guide](https://support.claude.com/en/articles/12512180-use-skills-in-claude).
300
-
301
- ### Install from a tagged GitHub source
302
-
303
- The same host option works without the npm registry by using the published tag:
304
-
305
- ```bash
306
- npx --yes github:ParkerHwang/OpenSocrates#v1.3.0 install --host all
307
- npx --yes github:ParkerHwang/OpenSocrates#v1.3.0 install --host antigravity
308
- npx --yes github:ParkerHwang/OpenSocrates#v1.3.0 install --host claude
309
- npx --yes github:ParkerHwang/OpenSocrates#v1.3.0 install --host codex
310
- npx --yes github:ParkerHwang/OpenSocrates#v1.3.0 install --host cursor
311
- npx --yes github:ParkerHwang/OpenSocrates#v1.3.0 install --host grok
312
- npx --yes github:ParkerHwang/OpenSocrates#v1.3.0 install --host opencode
313
- ```
42
+ `--host codex` is optional. The compatibility alias `--host all` now means Codex
43
+ only. Other host names are rejected before installation or removal.
314
44
 
315
- ### Manual release verification
45
+ ## Upgrading from a multi-host release
316
46
 
317
- After publication, download `opensocrates.mjs`, the host package, and its
318
- `.sha256` file from the
319
- [v1.3.0 release](https://github.com/ParkerHwang/OpenSocrates/releases/tag/v1.3.0).
320
- Verify the named published assets before installation; for Claude:
47
+ Claude Code, Cowork, Claude Chat, Antigravity, Cursor, Grok Build, and OpenCode
48
+ integrations and archives are removed in 1.4.0. Existing non-Codex installations
49
+ are not silently erased. If your previous desired state includes another host,
50
+ first use the version that installed it to remove that host, then update Codex:
321
51
 
322
- ```bash
323
- shasum -a 256 -c opensocrates-1.3.0-claude-plugin.zip.sha256
324
- node opensocrates.mjs install --host claude \
325
- --asset opensocrates-1.3.0-claude-plugin.zip \
326
- --checksum opensocrates-1.3.0-claude-plugin.zip.sha256
52
+ ```sh
53
+ # Example for an installation managed by 1.3.1:
54
+ npx --yes opensocrates@1.3.1 remove --host claude --purge
55
+ npx --yes opensocrates@1.4.0 update --host codex
327
56
  ```
328
57
 
329
- Replace `claude` with `antigravity`, `codex`, `cursor`, `grok`, or `opencode` for the matching package.
330
-
331
- ### Migrating a pre-1.0 Claude plugin
332
-
333
- Some development builds used a case-sensitive marketplace named
334
- `OpenSocrates`. The new marketplace is `opensocrates`. The installer detects
335
- the old registration and refuses to remove it automatically. After reviewing
336
- what is installed, remove it explicitly:
337
-
338
- ```bash
339
- claude plugin uninstall opensocrates@OpenSocrates --scope user
340
- claude plugin marketplace remove OpenSocrates --scope user
341
- npx --yes opensocrates@1.3.0 install --host claude
342
- ```
343
-
344
- Updating a managed v1.1.0 Claude installation replaces the complete package
345
- tree. Its old 48 top-level method skills, `rigor`, `trace`, and duplicate
346
- commands are therefore removed rather than left visible as stale entries.
347
-
348
- ## Use
349
-
350
- Use any supported host normally. OpenSocrates may participate when a request
351
- needs judgment, interpretation, diagnosis, explanation, planning, evidence
352
- reconciliation, or another structured reasoning process. On Claude/Codex
353
- native-runtime surfaces it:
354
-
355
- 1. emits lightweight native discovery guidance without choosing an initial method;
356
- 2. lets the active agent retrieve eligible complete methods when a judgment changes;
357
- 3. preserves goals, permissions, evidence/stop requirements and requested output;
358
- 4. offers Guided locale-specific presentation rules without rewriting protected content; and
359
- 5. distinguishes delivery and agent-reported availability from actual application.
360
-
361
- Use the installed launcher with `decision codex --stream` for a persistent volatile
362
- lookup session; a new process or context must not inherit an old read assertion.
363
-
364
- On OpenCode, the dependency-free stable hook instead selects locally and
365
- injects one complete authored procedure directly into the same message turn.
366
- That compiled procedure starts with its three teacher questions, and the native
367
- `/opensocrates` fallback reads the same procedure without a duplicate preamble;
368
- the bridge creates no artifact and makes no extra model call. See the
369
- [OpenCode support boundary](docs/opencode-support.md).
370
-
371
- Antigravity and Cursor use their explicit content skills; Grok Build uses native
372
- skill selection or `/opensocrates`. In all three packages, a generated complete
373
- procedure begins with teacher questions for the active agent to settle before
374
- using the rest as a check. These content-only paths make no OpenSocrates hook
375
- delivery claim.
376
-
377
- After installing for Codex, open one interactive Codex session and approve the
378
- OpenSocrates hooks before relying on native discovery guidance. Until that one-time
379
- approval, non-interactive surfaces such as `codex exec` may silently continue
380
- without running the untrusted hooks.
381
-
382
- ### Retained legacy receipt adapter
383
-
384
- The following describes the compatibility selector path, not the v1.3 default
385
- discovery-only hook. In that legacy path, Claude hook surfaces prefer an owner-only `.opensocrates` artifact area inside
386
- the current workspace so Claude can read the selected content without an extra
387
- directory permission. Its self-contained `.gitignore` keeps the area out of
388
- `git status`; files are removed on turn/session cleanup. If the workspace is
389
- unusable, OpenSocrates falls back to the owner-only OS temporary directory.
390
- Because the preferred area is inside the workspace, a separate backup or sync
391
- tool that ignores neither `.gitignore` nor hidden directories could observe the
392
- authored OpenSocrates artifact while it exists. Artifacts never contain the raw
393
- prompt, transcript, workspace content, credentials, or selector reasoning.
394
-
395
- On Claude hook surfaces, a Read-only `PostToolUse` hook records an authenticated
396
- receipt only when the exact current-turn file is read from its first line
397
- through a terminal marker. At `Stop`, a missing receipt or audit line requests
398
- one bounded repair pass; `stop_hook_active` prevents a continuation loop. A
399
- partial, truncated, failed, or wrong-file read is not accepted. Claude Chat
400
- does not run these hooks, so its grounding contract remains skills-only.
401
-
402
- The receipt records that a successful `Read` callback for that exact file
403
- returned content reaching the terminal marker. It is not a proof that every byte
404
- was delivered, and the gate fails open. See [SECURITY.md](SECURITY.md) for the
405
- boundary this does and does not defend.
406
-
407
- There is no fixed selection-count limit. The selector has a 30-second internal
408
- deadline, does not retry, and fails open. A timeout, host error, invalid output,
409
- non-intervention decision, unsafe context, or unavailable hook produces no
410
- injection and does not block the user's task.
411
-
412
- On Claude, explicitly invoke the same controller when desired:
413
-
414
- ```text
415
- /opensocrates:opensocrates <request>
416
- /opensocrates:opensocrates auto <request>
417
- /opensocrates:opensocrates trace
418
- /opensocrates:opensocrates status
419
- ```
420
-
421
- Those commands are for the Claude Code/Cowork plugin. The standalone Chat ZIP
422
- uses `/opensocrates` instead. The plugin's registered command inventory names
423
- `/opensocrates:opensocrates`; do not use a bare alias as source evidence. The
424
- controller selects and loads internal method references, so users do not need
425
- to browse the 48-system implementation catalog.
426
-
427
- The Claude selector uses one `claude --safe-mode -p` process with no session
428
- persistence. Safe mode disables user, project, and plugin customizations:
429
- `CLAUDE.md`, skills, plugins, hooks, MCP servers, custom commands, and agents.
430
- OpenSocrates additionally passes `--tools ""`, `--disallowedTools "mcp__*"`,
431
- and `--strict-mcp-config` so that no built-in or MCP tool remains available. It
432
- receives only the current prompt and the authored selection catalog.
433
-
434
- Managed policy settings are part of the host trust boundary and are **not**
435
- disabled by safe mode. Anthropic's
436
- [CLI reference](https://code.claude.com/docs/en/cli-reference) states that under
437
- `--safe-mode` "managed settings policy still applies, including
438
- policy-configured hooks". On a machine where an administrator configures a
439
- managed `UserPromptSubmit` hook, that hook runs inside the selector process,
440
- receives the current prompt on standard input, and can return
441
- `additionalContext` that enters selection. Managed plugins, managed skills,
442
- managed `CLAUDE.md`, and policy-configured MCP servers do not load. If your
443
- organization configures managed hooks, treat the selector prompt as visible to
444
- them and disable OpenSocrates selection if that is unacceptable.
445
-
446
- The Codex selector can additionally use bounded transcript context unless
447
- disabled:
448
-
449
- ```bash
450
- export OPENSOCRATES_SELECTOR_TRANSCRIPT_ACCESS=0
451
- ```
452
-
453
- ## Privacy and security
454
-
455
- OpenSocrates runs its integration locally and uses the existing Claude or
456
- Codex login. Host model requests are still processed by the selected host
457
- service under that service's terms. OpenSocrates does not host a backend, add
458
- telemetry, store an API key, or execute the user's requested task.
459
-
460
- Temporary instruction files contain authored OpenSocrates content only. Raw
461
- prompts, transcripts, workspace files, tool data, credentials, and selector
462
- reasoning are not written to OpenSocrates records, logs, metrics, diagnostics,
463
- or instruction files. The complete Read response is inspected only in memory
464
- for its terminal marker and is not retained. The owner-only grounding receipt
465
- stores only an artifact digest, content revision, selected method IDs, and
466
- keyed authentication/tool-use tags—never a prompt, tool output, workspace path,
467
- or artifact path. Turn files and receipts are removed on `Stop`. If `Stop` never
468
- arrives, the next `UserPromptSubmit` in the same session removes every prior
469
- `prompt_id` tree before selecting for the new turn while preserving the new
470
- active tree. `SessionEnd` removes anything still left in the session, and the
471
- next `SessionStart` removes crash leftovers older than 24 hours.
472
-
473
- Claude selector attempts increment one owner-only local aggregate using only
474
- the fixed labels `executable_missing`, `request_rejected`, `spawn_failed`,
475
- `timeout`, `nonzero_exit`, `invalid_output`, `selector_closed`,
476
- `no_intervention`, and `selected`. `diagnose` reports those cumulative counts.
477
- The aggregate contains no timestamp, prompt, transcript, session or turn ID,
478
- path, model output, credential, or reasoning, and is never uploaded.
479
- If the aggregate is unreadable, `diagnose` reports it as `unavailable` instead
480
- of asserting zero attempts. The next valid selector outcome replaces a
481
- malformed current-schema aggregate with a fresh bounded count document; an
482
- unknown future schema is preserved for the newer runtime that owns it.
483
-
484
- The packaged `diagnose` command also verifies the installed file inventory
485
- against `checksums.sha256` and checks that the release manifest identifies the
486
- running version, host, and content revision. It reports `verified`, `mismatch`,
487
- `unavailable`, or `unverified` rather than inferring success from file presence.
488
- These hashes detect local change or damage; the manifest and checksum file are
489
- not signed and therefore are not an authenticity proof against an attacker who
490
- can replace the whole package.
491
-
492
- When enabled, the updater stores only desired lifecycle state and the concise
493
- receipt described above, under owner-only permissions. It does not inspect or
494
- terminate running Claude or Codex sessions; a running task keeps its loaded
495
- plugin, and a new task naturally loads the reconciled version.
496
-
497
- See [SECURITY.md](SECURITY.md) for vulnerability reporting and the measured
498
- support boundary.
499
-
500
- ## Develop
501
-
502
- The source repository intentionally excludes native binaries and intermediate
503
- build output. Install [uv](https://docs.astral.sh/uv/), Python 3.12, and Node.js
504
- 20 or later, then run:
505
-
506
- Before merging a release candidate, follow the
507
- [clean Apple-silicon Mac acceptance procedure](docs/clean-machine-acceptance.md)
508
- to exercise the real authenticated Claude Code and Codex homes and return a
509
- privacy-safe evidence bundle.
510
-
511
- The selector's authenticated Claude subprocess contract has a separate
512
- [opt-in check](docs/real-claude-selector.md). The authenticated v1.1.2 receipt
513
- passes the real subprocess isolation and structured-output contract; the live
514
- call is never rerun by the ordinary offline suite.
515
-
516
- Repeated `--max-turns 1` structured-output behavior has a separate
517
- [aggregate reliability matrix](docs/claude-structured-output-reliability.md).
518
- The authenticated Claude Code 2.1.226 `host-default` row passed 20/20 attempts;
519
- no unobserved named model is claimed supported.
520
-
521
- Packaged Claude PostToolUse receipt and Stop cleanup latency has a reproducible
522
- [Apple-silicon timing receipt](docs/claude-hook-timing.md). The observed v1.1.2
523
- p95 results retain more than half of the 3-second hook budget, so the timeout is
524
- unchanged.
525
-
526
- ```bash
527
- make bootstrap
528
- make format-check
529
- make lint
530
- make generated-check
531
- make content-check
532
- make docs-check
533
- make governance-check
534
- make security-scan
535
- make smoke
536
- npm test
537
- npm pack --dry-run
538
- make release-check
539
- ```
540
-
541
- | Path | Purpose |
542
- | --- | --- |
543
- | `src/opensocrates/` | Shared Python 3.12 runtime and host-native selectors |
544
- | `content/` | Policies, localized messages, methods, theory, and examples |
545
- | `plugin-src/claude/` | Claude plugin templates |
546
- | `plugin-src/codex/` | Codex plugin templates |
547
- | `plugin-src/antigravity/` | Experimental Antigravity content-only plugin templates |
548
- | `plugin-src/cursor/` | Experimental Cursor Agent Plugin templates |
549
- | `plugin-src/grok/` | Native Grok Build content-only plugin templates |
550
- | `plugin-src/opencode/` | OpenCode stable bridge and native skill templates |
551
- | `schemas/source/` | Canonical schema definitions |
552
- | `schemas/v1/` | Generated, versioned public schemas |
553
- | `installer/` | Dependency-free Node.js GitHub/npx installer |
554
- | `tools/` | Build, validation, lifecycle, security, and release tools |
555
- | `packaging/` | Native launcher and packaging configuration |
556
- | `build/`, `dist/` | Generated locally and published as release assets |
557
-
558
- Generated schemas and compiled content must be changed through their canonical
559
- sources and generators. Release binaries belong in GitHub Releases, not in Git
560
- history.
561
-
562
- ## Contributing
563
-
564
- Contributions are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) before
565
- opening a pull request, and use the issue templates for bugs and feature
566
- requests. The project follows the [Code of Conduct](CODE_OF_CONDUCT.md).
567
-
568
- ## License
569
-
570
- OpenSocrates is available under the [MIT License](LICENSE). You may use,
571
- modify, distribute, sublicense, and sell copies, provided the copyright and
572
- license notice are preserved.
573
-
574
- OpenSocrates is an independent open-source project and is not affiliated with
575
- or endorsed by Anthropic or OpenAI.
576
-
577
- Chat standalone export: **archive contract validated; live activation unvalidated.**
58
+ Use the corresponding old host name for each retired integration. Review any
59
+ pending cleanup reported by the old installer. User conversation history and
60
+ unrelated files must be preserved. See [installation and removal](docs/advanced-usage.md).
61
+
62
+ ## What it does
63
+
64
+ - Choose a method for a judgment: compare alternatives, check a causal claim,
65
+ examine assumptions, or identify evidence that could change a recommendation.
66
+ - Revisit a decision when the facts change, including multiple decision points
67
+ within one request. Mechanical steps need no method.
68
+ - Read complete instructions, examples, applicability limits, and required public
69
+ results. All 48 methods retain their English and Korean procedure bodies.
70
+ - Keep conclusions connected to evidence, uncertainty, and reopening conditions
71
+ while preserving the user's requested format.
72
+
73
+ Codex hooks provide lightweight discovery guidance. The active agent retrieves
74
+ eligible methods through the packaged native decision command. A constrained
75
+ complete-reference fallback remains when the runtime is unavailable. This path
76
+ makes no separate selector-model call and adds no prompt or transcript storage.
77
+ The integration fails open so ordinary work can continue when it is unavailable.
78
+ See [decision-point retrieval](docs/decision-points.md) for the exact contract.
79
+
80
+ ## Platforms and limits
81
+
82
+ | Platform | Package | Updates |
83
+ | --- | --- | --- |
84
+ | Apple-silicon macOS | Native runtime and `bin/launch.sh` | Manual; optional macOS LaunchAgent |
85
+ | Windows x64 | Native `.exe` and `node bin/launch.mjs` | Manual only |
86
+
87
+ Windows does not require WSL or a Unix shell. Windows automatic updates,
88
+ Windows ARM64, Windows 10, macOS Intel, and Linux native packages are not claimed
89
+ as validated. Signing and SmartScreen reputation are unvalidated.
90
+ See the [Windows guide](docs/windows-support.md).
91
+
92
+ ## Privacy and evidence
93
+
94
+ OpenSocrates runs locally, adds no product telemetry, and has no hosted backend or
95
+ separate account. Your ordinary Codex model requests use Codex authentication and
96
+ its service terms. Read [SECURITY.md](SECURITY.md) for integrity, rollback,
97
+ permissions, and the retained legacy selector boundary.
98
+
99
+ Package verification, hook delivery, complete reference reads, and actual method
100
+ application are distinct evidence levels. No general quality, token-cost, or
101
+ response-time improvement is claimed. Current release validation is tracked in
102
+ [PR #93](https://github.com/ParkerHwang/OpenSocrates/pull/93) and the
103
+ [release plan](docs/v1.4.0-release-plan.md); older evidence describes older versions.
104
+
105
+ - [Installation, updates, removal, and runtime reference](docs/advanced-usage.md)
106
+ - [Authored method catalog](content/methods/)
107
+ - [Changelog](CHANGELOG.md)
108
+ - [Contributing](CONTRIBUTING.md) · [Code of Conduct](CODE_OF_CONDUCT.md)
109
+
110
+ OpenSocrates is [MIT licensed](LICENSE), independent of OpenAI, and not endorsed
111
+ by OpenAI.