opensocrates 1.0.0 → 1.1.2
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 +132 -0
- package/README.ko.md +224 -78
- package/README.md +237 -84
- package/SECURITY.md +71 -5
- package/VERSION +1 -1
- package/installer/opensocrates.mjs +1641 -190
- package/package.json +6 -3
package/README.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.ko.md)
|
|
@@ -7,121 +11,252 @@
|
|
|
7
11
|
[](https://github.com/ParkerHwang/OpenSocrates/releases)
|
|
8
12
|
[](LICENSE)
|
|
9
13
|
|
|
10
|
-
OpenSocrates is a local reasoning framework for
|
|
11
|
-
requests that benefit from deliberate reasoning,
|
|
12
|
-
|
|
13
|
-
examples to the active task. Straightforward factual and
|
|
14
|
-
pass through unchanged.
|
|
15
|
-
|
|
16
|
-
Version `1.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
OpenSocrates is a local integration and authored reasoning framework for
|
|
15
|
+
Claude and Codex. It detects requests that benefit from deliberate reasoning,
|
|
16
|
+
uses a fresh host-native selector to choose relevant systems, and adds their
|
|
17
|
+
complete theory and examples to the active task. Straightforward factual and
|
|
18
|
+
mechanical work can pass through unchanged.
|
|
19
|
+
|
|
20
|
+
Version `1.1.2` includes 48 reasoning systems, one user-facing Claude entry, a
|
|
21
|
+
Claude grounding gate that verifies selected procedures were read, coordinated
|
|
22
|
+
Claude/Codex lifecycle management, and opt-in automatic updates on
|
|
23
|
+
Apple-silicon macOS (`darwin-arm64`). It uses your existing host login and does
|
|
24
|
+
not require an API key or an OpenSocrates backend.
|
|
25
|
+
|
|
26
|
+
> **Latest release: [OpenSocrates 1.1.2](https://github.com/ParkerHwang/OpenSocrates/releases/tag/v1.1.2).**
|
|
27
|
+
> It adds authenticated Claude grounding receipts, one bounded repair pass,
|
|
28
|
+
> and artifact-instance-bound replay protection. Upgrade both managed hosts
|
|
29
|
+
> together with `npx --yes opensocrates@1.1.2 update --host all`.
|
|
30
|
+
|
|
31
|
+
## Host support
|
|
32
|
+
|
|
33
|
+
| Host surface | Automatic selection | User-facing entry | Validation status |
|
|
34
|
+
| --- | --- | --- | --- |
|
|
35
|
+
| Codex CLI and Desktop | Yes | OpenSocrates plugin | Release-validated on `darwin-arm64` |
|
|
36
|
+
| Claude Code CLI | Yes, through `UserPromptSubmit` | `/opensocrates` | Locally validated on `darwin-arm64` |
|
|
37
|
+
| Claude Code desktop app | Implemented, where Claude Code plugins run | `/opensocrates` | Implemented; no live probe receipt |
|
|
38
|
+
| Claude Cowork | Implemented, when the local plugin runtime is available | `/opensocrates` | Experimental; no live probe receipt |
|
|
39
|
+
| Claude web and Desktop Chat | No hooks | `/opensocrates` | Skills-only; upload path unvalidated |
|
|
40
|
+
|
|
41
|
+
The status column uses four distinct levels. Do not read them as
|
|
42
|
+
interchangeable:
|
|
43
|
+
|
|
44
|
+
- **Implemented** — the integration exists in code and ships in the package.
|
|
45
|
+
- **Locally validated** — exercised end to end on a maintainer machine, but
|
|
46
|
+
not on every build.
|
|
47
|
+
- **Release-validated** — exercised by the release gate on every build.
|
|
48
|
+
- **Experimental / no live probe receipt** — implemented, but no captured
|
|
49
|
+
receipt shows the host actually delivering the hook. `os capabilities show`
|
|
50
|
+
reports these capabilities as `unknown`, not as available.
|
|
51
|
+
|
|
52
|
+
Claude Chat surfaces do not run plugin hooks. They can use the generated
|
|
53
|
+
skills, but automatic per-prompt selection is available only on Claude Code
|
|
54
|
+
and Cowork surfaces that execute the plugin runtime. OpenSocrates fails open
|
|
55
|
+
if a hook or selector is unavailable.
|
|
56
|
+
|
|
57
|
+
Cowork carries one further unverified assumption. OpenSocrates registers its
|
|
58
|
+
marketplace with `claude plugin marketplace add --scope user`, which writes
|
|
59
|
+
Claude Code user settings. Anthropic documents that plugin hooks run in Cowork,
|
|
60
|
+
but does not document that a marketplace registered through the Claude Code CLI
|
|
61
|
+
is visible to Cowork. Until a receipt exists, treat Cowork as experimental.
|
|
20
62
|
|
|
21
63
|
## Install
|
|
22
64
|
|
|
23
|
-
Before installing, sign in to
|
|
24
|
-
|
|
65
|
+
Before installing, sign in to the host and make sure its command is available:
|
|
66
|
+
|
|
67
|
+
- Claude: Claude Code `2.1.205` or later and the `claude` command;
|
|
68
|
+
- Codex: an OAuth-authenticated `codex` command.
|
|
25
69
|
|
|
26
|
-
|
|
70
|
+
Node.js 20 or later is required. The published `opensocrates` npm package is a
|
|
71
|
+
small, dependency-free installer. It downloads the matching package from
|
|
72
|
+
GitHub Releases and verifies the release checksum and every file checksum
|
|
73
|
+
before registering an owner-marked managed marketplace.
|
|
27
74
|
|
|
28
|
-
|
|
29
|
-
installer; it downloads and verifies the matching package from GitHub
|
|
30
|
-
Releases.
|
|
75
|
+
### Install every ready host
|
|
31
76
|
|
|
32
77
|
```bash
|
|
33
|
-
npx --yes opensocrates@1.
|
|
78
|
+
npx --yes opensocrates@1.1.2 install --host all
|
|
34
79
|
```
|
|
35
80
|
|
|
36
|
-
|
|
81
|
+
The all-host path detects supported, authenticated host CLIs, completes every
|
|
82
|
+
preflight before changing either host, verifies and stages both packages, and
|
|
83
|
+
then activates one release transactionally. If one activation fails, every
|
|
84
|
+
host already changed in that transaction is restored to its previous managed
|
|
85
|
+
registration.
|
|
86
|
+
|
|
87
|
+
Use the same host value for the complete lifecycle:
|
|
37
88
|
|
|
38
89
|
```bash
|
|
39
|
-
npx --yes opensocrates@1.
|
|
40
|
-
npx --yes opensocrates@1.
|
|
41
|
-
npx --yes opensocrates@1.
|
|
90
|
+
npx --yes opensocrates@1.1.2 status --host all
|
|
91
|
+
npx --yes opensocrates@1.1.2 update --host all
|
|
92
|
+
npx --yes opensocrates@1.1.2 remove --host all
|
|
42
93
|
```
|
|
43
94
|
|
|
44
|
-
|
|
95
|
+
A private `~/.opensocrates/desired-state.json` manifest records the selected
|
|
96
|
+
channel, installed hosts, and desired active version. `status --host all`
|
|
97
|
+
reports the desired and available versions, last check, last successful
|
|
98
|
+
automatic update, and per-host drift.
|
|
99
|
+
|
|
100
|
+
### Install one host explicitly
|
|
45
101
|
|
|
46
|
-
|
|
47
|
-
GitHub repository and remains available without the npm registry.
|
|
102
|
+
Codex remains the default host for backward compatibility:
|
|
48
103
|
|
|
49
104
|
```bash
|
|
50
|
-
npx --yes
|
|
105
|
+
npx --yes opensocrates@1.1.2 install
|
|
106
|
+
# Equivalent: npx --yes opensocrates@1.1.2 install --host codex
|
|
107
|
+
npx --yes opensocrates@1.1.2 install --host claude
|
|
51
108
|
```
|
|
52
109
|
|
|
53
|
-
|
|
110
|
+
Existing `--host codex` and `--host claude` lifecycle commands remain
|
|
111
|
+
supported. A host-specific update can intentionally create drift; a later
|
|
112
|
+
`update --host all` or successful automatic reconciliation brings every host
|
|
113
|
+
recorded in desired state back to one version.
|
|
114
|
+
|
|
115
|
+
### Opt-in automatic updates
|
|
54
116
|
|
|
55
117
|
```bash
|
|
56
|
-
npx --yes
|
|
57
|
-
npx --yes
|
|
58
|
-
npx --yes
|
|
118
|
+
npx --yes opensocrates@1.1.2 auto-update enable --host all
|
|
119
|
+
npx --yes opensocrates@1.1.2 auto-update status
|
|
120
|
+
npx --yes opensocrates@1.1.2 auto-update disable
|
|
59
121
|
```
|
|
60
122
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
123
|
+
Automatic updates are disabled until explicitly enabled. The macOS LaunchAgent
|
|
124
|
+
starts a bounded hourly poll; desired state applies the configured interval
|
|
125
|
+
(24 hours by default) with jitter and a single-instance lock. The job invokes
|
|
126
|
+
the selected npm channel, verifies release and package checksums, stages every
|
|
127
|
+
managed host, and reconciles them as one transaction. Major-version upgrades
|
|
128
|
+
are blocked by default; use `--allow-major` only when that policy is intended.
|
|
129
|
+
|
|
130
|
+
Passing one host to `auto-update enable` narrows only the automatic-update
|
|
131
|
+
scope. It never removes another installed host from desired state;
|
|
132
|
+
`status --host all` continues to track every installation, and a later
|
|
133
|
+
`update --host all` still reconciles the complete installed set.
|
|
134
|
+
|
|
135
|
+
The updater keeps a private receipt with version, time, per-host result, and an
|
|
136
|
+
error category only. It never records prompts, transcripts, credentials, or
|
|
137
|
+
workspace paths. `auto-update disable` unloads and removes the LaunchAgent;
|
|
138
|
+
`remove --host all` does the same before removing the managed hosts.
|
|
139
|
+
|
|
140
|
+
### Claude web and Desktop Chat skills
|
|
141
|
+
|
|
142
|
+
These surfaces support plugin skills but not hooks. Download
|
|
143
|
+
`opensocrates-1.1.2-claude-chat-skills.zip` from the release and upload it from
|
|
144
|
+
Claude's plugin customization UI. The package exposes exactly one
|
|
145
|
+
`/opensocrates` skill; its 48 method procedures, rigor, evidence, and trace
|
|
146
|
+
controls are internal supporting references. Automatic selection is absent
|
|
147
|
+
because Chat does not execute plugin hooks. See Anthropic's
|
|
148
|
+
[plugin surface guide](https://support.claude.com/en/articles/13837440-use-plugins-in-claude).
|
|
64
149
|
|
|
65
|
-
###
|
|
150
|
+
### Install from a tagged GitHub source
|
|
66
151
|
|
|
67
|
-
|
|
68
|
-
[v1.0.0 release](https://github.com/ParkerHwang/OpenSocrates/releases/tag/v1.0.0),
|
|
69
|
-
then run:
|
|
152
|
+
The same host option works without the npm registry:
|
|
70
153
|
|
|
71
154
|
```bash
|
|
72
|
-
|
|
155
|
+
npx --yes github:ParkerHwang/OpenSocrates#v1.1.2 install --host all
|
|
156
|
+
npx --yes github:ParkerHwang/OpenSocrates#v1.1.2 install --host claude
|
|
157
|
+
npx --yes github:ParkerHwang/OpenSocrates#v1.1.2 install --host codex
|
|
73
158
|
```
|
|
74
159
|
|
|
75
|
-
|
|
160
|
+
### Manual release verification
|
|
161
|
+
|
|
162
|
+
Download `opensocrates.mjs`, the host package, and its `.sha256` file from the
|
|
163
|
+
[v1.1.2 release](https://github.com/ParkerHwang/OpenSocrates/releases/tag/v1.1.2).
|
|
164
|
+
For Claude, for example:
|
|
76
165
|
|
|
77
166
|
```bash
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
--asset opensocrates-1.0.0-codex-plugin.zip \
|
|
83
|
-
--checksum opensocrates-1.0.0-codex-plugin.zip.sha256
|
|
167
|
+
shasum -a 256 -c opensocrates-1.1.2-claude-plugin.zip.sha256
|
|
168
|
+
node opensocrates.mjs install --host claude \
|
|
169
|
+
--asset opensocrates-1.1.2-claude-plugin.zip \
|
|
170
|
+
--checksum opensocrates-1.1.2-claude-plugin.zip.sha256
|
|
84
171
|
```
|
|
85
172
|
|
|
86
|
-
|
|
173
|
+
Replace `claude` with `codex` for the Codex package.
|
|
174
|
+
|
|
175
|
+
### Migrating a pre-1.0 Claude plugin
|
|
87
176
|
|
|
88
|
-
|
|
177
|
+
Some development builds used a case-sensitive marketplace named
|
|
178
|
+
`OpenSocrates`. The new marketplace is `opensocrates`. The installer detects
|
|
179
|
+
the old registration and refuses to remove it automatically. After reviewing
|
|
180
|
+
what is installed, remove it explicitly:
|
|
89
181
|
|
|
90
182
|
```bash
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
uv sync --locked --all-groups
|
|
95
|
-
make release-check
|
|
96
|
-
uv run --locked --no-sync python tools/codex_plugin.py install
|
|
183
|
+
claude plugin uninstall opensocrates@OpenSocrates --scope user
|
|
184
|
+
claude plugin marketplace remove OpenSocrates --scope user
|
|
185
|
+
npx --yes opensocrates@1.1.2 install --host claude
|
|
97
186
|
```
|
|
98
187
|
|
|
99
|
-
|
|
100
|
-
|
|
188
|
+
Updating a managed v1.1.0 Claude installation replaces the complete package
|
|
189
|
+
tree. Its old 48 top-level method skills, `rigor`, `trace`, and duplicate
|
|
190
|
+
commands are therefore removed rather than left visible as stale entries.
|
|
101
191
|
|
|
102
192
|
## Use
|
|
103
193
|
|
|
104
|
-
Use Codex normally. Before
|
|
105
|
-
when the request needs judgment, interpretation, diagnosis,
|
|
106
|
-
planning, evidence reconciliation, or another structured
|
|
107
|
-
When it intervenes, it:
|
|
194
|
+
Use Claude or Codex normally. Before a submitted prompt, OpenSocrates may
|
|
195
|
+
intervene when the request needs judgment, interpretation, diagnosis,
|
|
196
|
+
explanation, planning, evidence reconciliation, or another structured
|
|
197
|
+
reasoning process. When it intervenes, it:
|
|
108
198
|
|
|
109
|
-
1.
|
|
199
|
+
1. starts a fresh, non-persistent selector in the current host;
|
|
110
200
|
2. chooses from the authored 48-system catalog;
|
|
111
201
|
3. writes the complete selected content to an owner-only temporary Markdown
|
|
112
|
-
file;
|
|
113
|
-
4. adds
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
202
|
+
file;
|
|
203
|
+
4. adds a bounded hidden context message with each method ID, content revision,
|
|
204
|
+
and, when they fit, its exact `Do not use when` and `Stop conditions`; and
|
|
205
|
+
5. requires the active task to read the complete file before applying the
|
|
206
|
+
method and to end a grounded response with an exact audit line such as
|
|
207
|
+
`OpenSocrates grounding: triangulation@1`.
|
|
208
|
+
|
|
209
|
+
On Claude hook surfaces, a Read-only `PostToolUse` hook records an authenticated
|
|
210
|
+
receipt only when the exact current-turn file is read from its first line
|
|
211
|
+
through a terminal marker. At `Stop`, a missing receipt or audit line requests
|
|
212
|
+
one bounded repair pass; `stop_hook_active` prevents a continuation loop. A
|
|
213
|
+
partial, truncated, failed, or wrong-file read is not accepted. Claude Chat
|
|
214
|
+
does not run these hooks, so its grounding contract remains skills-only.
|
|
215
|
+
|
|
216
|
+
The receipt records that a successful `Read` callback for that exact file
|
|
217
|
+
returned content reaching the terminal marker. It is not a proof that every byte
|
|
218
|
+
was delivered, and the gate fails open. See [SECURITY.md](SECURITY.md) for the
|
|
219
|
+
boundary this does and does not defend.
|
|
220
|
+
|
|
221
|
+
There is no fixed selection-count limit. The selector has a 30-second internal
|
|
222
|
+
deadline, does not retry, and fails open. A timeout, host error, invalid output,
|
|
223
|
+
non-intervention decision, unsafe context, or unavailable hook produces no
|
|
224
|
+
injection and does not block the user's task.
|
|
225
|
+
|
|
226
|
+
On Claude, explicitly invoke the same controller when desired:
|
|
227
|
+
|
|
228
|
+
```text
|
|
229
|
+
/opensocrates <request>
|
|
230
|
+
/opensocrates auto <request>
|
|
231
|
+
/opensocrates trace
|
|
232
|
+
/opensocrates status
|
|
233
|
+
```
|
|
123
234
|
|
|
124
|
-
|
|
235
|
+
Only `/opensocrates` appears in Claude's skill and command UI. The controller
|
|
236
|
+
selects and loads internal method references; users do not need to browse the
|
|
237
|
+
48-system implementation catalog.
|
|
238
|
+
|
|
239
|
+
The Claude selector uses one `claude --safe-mode -p` process with no session
|
|
240
|
+
persistence. Safe mode disables user, project, and plugin customizations:
|
|
241
|
+
`CLAUDE.md`, skills, plugins, hooks, MCP servers, custom commands, and agents.
|
|
242
|
+
OpenSocrates additionally passes `--tools ""`, `--disallowedTools "mcp__*"`,
|
|
243
|
+
and `--strict-mcp-config` so that no built-in or MCP tool remains available. It
|
|
244
|
+
receives only the current prompt and the authored selection catalog.
|
|
245
|
+
|
|
246
|
+
Managed policy settings are part of the host trust boundary and are **not**
|
|
247
|
+
disabled by safe mode. Anthropic's
|
|
248
|
+
[CLI reference](https://code.claude.com/docs/en/cli-reference) states that under
|
|
249
|
+
`--safe-mode` "managed settings policy still applies, including
|
|
250
|
+
policy-configured hooks". On a machine where an administrator configures a
|
|
251
|
+
managed `UserPromptSubmit` hook, that hook runs inside the selector process,
|
|
252
|
+
receives the current prompt on standard input, and can return
|
|
253
|
+
`additionalContext` that enters selection. Managed plugins, managed skills,
|
|
254
|
+
managed `CLAUDE.md`, and policy-configured MCP servers do not load. If your
|
|
255
|
+
organization configures managed hooks, treat the selector prompt as visible to
|
|
256
|
+
them and disable OpenSocrates selection if that is unacceptable.
|
|
257
|
+
|
|
258
|
+
The Codex selector can additionally use bounded transcript context unless
|
|
259
|
+
disabled:
|
|
125
260
|
|
|
126
261
|
```bash
|
|
127
262
|
export OPENSOCRATES_SELECTOR_TRANSCRIPT_ACCESS=0
|
|
@@ -129,24 +264,40 @@ export OPENSOCRATES_SELECTOR_TRANSCRIPT_ACCESS=0
|
|
|
129
264
|
|
|
130
265
|
## Privacy and security
|
|
131
266
|
|
|
132
|
-
OpenSocrates runs
|
|
133
|
-
Codex
|
|
134
|
-
|
|
267
|
+
OpenSocrates runs its integration locally and uses the existing Claude or
|
|
268
|
+
Codex login. Host model requests are still processed by the selected host
|
|
269
|
+
service under that service's terms. OpenSocrates does not host a backend, add
|
|
270
|
+
telemetry, store an API key, or execute the user's requested task.
|
|
135
271
|
|
|
136
272
|
Temporary instruction files contain authored OpenSocrates content only. Raw
|
|
137
|
-
prompts, transcripts, workspace files, tool data,
|
|
138
|
-
|
|
139
|
-
|
|
273
|
+
prompts, transcripts, workspace files, tool data, credentials, and selector
|
|
274
|
+
reasoning are not written to OpenSocrates records, logs, metrics, diagnostics,
|
|
275
|
+
or instruction files. The complete Read response is inspected only in memory
|
|
276
|
+
for its terminal marker and is not retained. The owner-only grounding receipt
|
|
277
|
+
stores only an artifact digest, content revision, selected method IDs, and
|
|
278
|
+
keyed authentication/tool-use tags—never a prompt, tool output, workspace path,
|
|
279
|
+
or artifact path. Turn files and receipts are removed on `Stop`, remaining
|
|
140
280
|
session files on `SessionEnd`, and crash leftovers older than 24 hours on
|
|
141
281
|
`SessionStart`.
|
|
142
282
|
|
|
143
|
-
|
|
283
|
+
When enabled, the updater stores only desired lifecycle state and the concise
|
|
284
|
+
receipt described above, under owner-only permissions. It does not inspect or
|
|
285
|
+
terminate running Claude or Codex sessions; a running task keeps its loaded
|
|
286
|
+
plugin, and a new task naturally loads the reconciled version.
|
|
287
|
+
|
|
288
|
+
See [SECURITY.md](SECURITY.md) for vulnerability reporting and the measured
|
|
144
289
|
support boundary.
|
|
145
290
|
|
|
146
291
|
## Develop
|
|
147
292
|
|
|
148
293
|
The source repository intentionally excludes native binaries and intermediate
|
|
149
|
-
build output. Install
|
|
294
|
+
build output. Install [uv](https://docs.astral.sh/uv/), Python 3.12, and Node.js
|
|
295
|
+
20 or later, then run:
|
|
296
|
+
|
|
297
|
+
Before merging a release candidate, follow the
|
|
298
|
+
[clean Apple-silicon Mac acceptance procedure](docs/clean-machine-acceptance.md)
|
|
299
|
+
to exercise the real authenticated Claude Code and Codex homes and return a
|
|
300
|
+
privacy-safe evidence bundle.
|
|
150
301
|
|
|
151
302
|
```bash
|
|
152
303
|
make bootstrap
|
|
@@ -162,12 +313,11 @@ npm pack --dry-run
|
|
|
162
313
|
make release-check
|
|
163
314
|
```
|
|
164
315
|
|
|
165
|
-
Repository layout:
|
|
166
|
-
|
|
167
316
|
| Path | Purpose |
|
|
168
317
|
| --- | --- |
|
|
169
|
-
| `src/opensocrates/` | Python 3.12 runtime and
|
|
318
|
+
| `src/opensocrates/` | Shared Python 3.12 runtime and host-native selectors |
|
|
170
319
|
| `content/` | Policies, localized messages, methods, theory, and examples |
|
|
320
|
+
| `plugin-src/claude/` | Claude plugin templates |
|
|
171
321
|
| `plugin-src/codex/` | Codex plugin templates |
|
|
172
322
|
| `schemas/source/` | Canonical schema definitions |
|
|
173
323
|
| `schemas/v1/` | Generated, versioned public schemas |
|
|
@@ -177,8 +327,8 @@ Repository layout:
|
|
|
177
327
|
| `build/`, `dist/` | Generated locally and published as release assets |
|
|
178
328
|
|
|
179
329
|
Generated schemas and compiled content must be changed through their canonical
|
|
180
|
-
sources and generators. Release binaries belong in GitHub Releases, not in
|
|
181
|
-
|
|
330
|
+
sources and generators. Release binaries belong in GitHub Releases, not in Git
|
|
331
|
+
history.
|
|
182
332
|
|
|
183
333
|
## Contributing
|
|
184
334
|
|
|
@@ -191,3 +341,6 @@ requests. The project follows the [Code of Conduct](CODE_OF_CONDUCT.md).
|
|
|
191
341
|
OpenSocrates is available under the [MIT License](LICENSE). You may use,
|
|
192
342
|
modify, distribute, sublicense, and sell copies, provided the copyright and
|
|
193
343
|
license notice are preserved.
|
|
344
|
+
|
|
345
|
+
OpenSocrates is an independent open-source project and is not affiliated with
|
|
346
|
+
or endorsed by Anthropic or OpenAI.
|
package/SECURITY.md
CHANGED
|
@@ -34,14 +34,80 @@ severity, and the availability of a safe fix.
|
|
|
34
34
|
|
|
35
35
|
## Security boundary
|
|
36
36
|
|
|
37
|
-
OpenSocrates 1.
|
|
37
|
+
OpenSocrates 1.x:
|
|
38
38
|
|
|
39
|
-
- runs locally through Codex and uses the user's
|
|
40
|
-
|
|
39
|
+
- runs its integration locally through Claude or Codex and uses the user's
|
|
40
|
+
existing host login;
|
|
41
|
+
- does not require or store an Anthropic or OpenAI API key;
|
|
41
42
|
- does not host an OpenSocrates backend or add telemetry;
|
|
42
43
|
- verifies downloadable packages with SHA-256 release and package manifests;
|
|
44
|
+
- keeps cross-host activation transactional and restores prior managed
|
|
45
|
+
registrations when a coordinated activation fails;
|
|
46
|
+
- leaves scheduled updates disabled until explicitly enabled and stores only
|
|
47
|
+
owner-readable desired state, a single-instance lock, and content-free update
|
|
48
|
+
receipts;
|
|
43
49
|
- fails open when the selector cannot safely complete.
|
|
44
50
|
|
|
51
|
+
The Claude selector runs a bounded, non-persistent `claude --safe-mode -p`
|
|
52
|
+
process. Safe mode disables user, project, and plugin customizations, and
|
|
53
|
+
OpenSocrates additionally passes `--tools ""`, `--disallowedTools "mcp__*"`, and
|
|
54
|
+
`--strict-mcp-config` so no built-in or MCP tool remains. It receives the current
|
|
55
|
+
prompt and authored selection catalog only. The process uses the user's Claude
|
|
56
|
+
login, so model requests remain subject to Anthropic's service and data-handling
|
|
57
|
+
terms. The Codex selector uses the pinned Codex SDK and existing OAuth session in
|
|
58
|
+
its own isolated worker.
|
|
59
|
+
|
|
60
|
+
The selector environment is default-deny. `CLAUDE_CONFIG_DIR` is one of the
|
|
61
|
+
small set of allowed path variables because the child needs it to locate the
|
|
62
|
+
user's existing Claude login when a non-default config directory is in use.
|
|
63
|
+
OpenSocrates does not copy, inspect, or log credentials from that directory.
|
|
64
|
+
|
|
65
|
+
Managed policy settings are part of the host trust boundary and are not disabled.
|
|
66
|
+
Anthropic's [CLI reference](https://code.claude.com/docs/en/cli-reference) states
|
|
67
|
+
that under `--safe-mode` "managed settings policy still applies, including
|
|
68
|
+
policy-configured hooks". Consequences on an organization-managed machine:
|
|
69
|
+
|
|
70
|
+
- a managed `UserPromptSubmit` hook executes inside the selector process,
|
|
71
|
+
receives the current prompt on standard input, and can return
|
|
72
|
+
`additionalContext` that enters selection;
|
|
73
|
+
- managed plugins, managed skills, managed `CLAUDE.md`, and policy-configured
|
|
74
|
+
MCP servers do not load.
|
|
75
|
+
|
|
76
|
+
OpenSocrates does not detect or override managed policy. Selection remains
|
|
77
|
+
bounded regardless: the model's returned instruction text is discarded, and only
|
|
78
|
+
authored catalog content assembled by OpenSocrates is ever injected. Operators
|
|
79
|
+
who cannot accept managed-hook visibility of the selector prompt should not
|
|
80
|
+
enable OpenSocrates selection on those machines.
|
|
81
|
+
|
|
82
|
+
On Claude surfaces that deliver the packaged hooks, the grounding gate observes
|
|
83
|
+
only successful `Read` callbacks for the current turn's exact instruction file.
|
|
84
|
+
It transiently checks that the response reached an authored terminal marker and
|
|
85
|
+
does not retain the response. The owner-only authenticated receipt stores only
|
|
86
|
+
the artifact digest, content revision, selected method IDs, and keyed
|
|
87
|
+
authentication/tool-use tags; prompts, transcripts, raw tool output,
|
|
88
|
+
credentials, workspace paths, and artifact paths are excluded. `Stop` removes
|
|
89
|
+
the receipt with the turn artifact, and the 24-hour sweep covers crash leftovers.
|
|
90
|
+
|
|
91
|
+
The gate's scope is deliberate and worth stating plainly. It establishes that a
|
|
92
|
+
successful `Read` callback naming the exact current-turn artifact returned
|
|
93
|
+
content reaching the authored terminal marker. It does not cryptographically
|
|
94
|
+
prove that every artifact byte was returned: a synthetic payload carrying only
|
|
95
|
+
the marker would satisfy the marker test. That is not reachable by the model,
|
|
96
|
+
which does not author `tool_response`, and the marker is the artifact's last
|
|
97
|
+
line, so a truncated read loses it. Anything able to forge that callback already
|
|
98
|
+
controls the hook's standard input and is outside the boundary this gate
|
|
99
|
+
defends. The gate raises the cost of an ungrounded answer; it is not a proof of
|
|
100
|
+
delivery, and it fails open by design.
|
|
101
|
+
|
|
102
|
+
The optional macOS LaunchAgent invokes the selected published npm channel and
|
|
103
|
+
then uses the same verified installer path as a manual update. It does not read
|
|
104
|
+
or terminate active Claude or Codex sessions. Its receipt contains only the
|
|
105
|
+
checked version, timestamp, per-host result, and an error category; prompts,
|
|
106
|
+
transcripts, workspace paths, credentials, and raw error output are excluded.
|
|
107
|
+
Automatic major-version upgrades are disabled unless the user explicitly
|
|
108
|
+
changes that policy.
|
|
109
|
+
|
|
45
110
|
Signing, notarization, clean-machine installation, platforms other than
|
|
46
|
-
`darwin-arm64`,
|
|
47
|
-
See the release limitations file for the
|
|
111
|
+
`darwin-arm64`, Claude Chat automatic hooks, and live delivery on every host
|
|
112
|
+
surface are not claimed as validated. See the release limitations file for the
|
|
113
|
+
complete measured boundary.
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.1.2
|