trustdex 0.6.0 → 0.7.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.ko.md +40 -4
- package/README.md +40 -4
- package/bin/trustdex.mjs +81 -7
- package/docs/ARCHITECTURE.ko.md +3 -1
- package/docs/ARCHITECTURE.md +3 -1
- package/docs/CLAUDE.ko.md +24 -1
- package/docs/CLAUDE.md +24 -1
- package/docs/CODEX.ko.md +29 -4
- package/docs/CODEX.md +29 -4
- package/docs/EVALUATION.ko.md +17 -0
- package/docs/EVALUATION.md +16 -0
- package/docs/ROADMAP.ko.md +10 -3
- package/docs/ROADMAP.md +10 -3
- package/docs/SECURITY_RESEARCH.ko.md +2 -0
- package/docs/SECURITY_RESEARCH.md +2 -0
- package/docs/THREAT_MODEL.ko.md +2 -0
- package/docs/THREAT_MODEL.md +2 -0
- package/examples/adversarial/permissions/README.ko.md +15 -0
- package/examples/adversarial/permissions/README.md +15 -0
- package/examples/adversarial/permissions/claude-expanded.settings.json +30 -0
- package/examples/adversarial/permissions/claude-restrictive.settings.json +16 -0
- package/examples/adversarial/permissions/codex-expanded.toml +13 -0
- package/examples/adversarial/permissions/codex-restrictive.toml +13 -0
- package/examples/adversarial/permissions/expected.json +18 -0
- package/package.json +4 -3
- package/schemas/permission-posture-diff-v1.schema.json +78 -0
- package/schemas/permission-posture-v1.schema.json +162 -0
- package/src/posture.mjs +540 -0
package/README.ko.md
CHANGED
|
@@ -82,8 +82,8 @@ Node.js 20 이상이 필요합니다.
|
|
|
82
82
|
npm에서 직접 실행:
|
|
83
83
|
|
|
84
84
|
```bash
|
|
85
|
-
npx trustdex@0.
|
|
86
|
-
npx trustdex@0.
|
|
85
|
+
npx trustdex@0.7.0 --help
|
|
86
|
+
npx trustdex@0.7.0 inspect ./mcp.json --pack strict --policy ./trustdex.policy.json
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
또는 소스 체크아웃에서 작업:
|
|
@@ -193,7 +193,7 @@ node ./bin/trustdex.mjs gate-claude ./.mcp.json --pack strict --out .trustdex/cl
|
|
|
193
193
|
claude --strict-mcp-config --mcp-config .trustdex/claude-mcp.json
|
|
194
194
|
```
|
|
195
195
|
|
|
196
|
-
Claude를 시작하기 전에 게이트의 결과를 확인하세요. 기본적으로 `ALLOW` 항목만 노출되며, `ASK` 항목에는 검토가 필요합니다. 어댑터는 검사할 수 없는 설정을 조용히 신뢰하지 않고 거부합니다. 이 명령은 npm 0.5.0 이상과 소스 체크아웃에서 사용할 수 있습니다. 게시된 CLI를 실행하려면 `node ./bin/trustdex.mjs` 대신 `npx trustdex@0.
|
|
196
|
+
Claude를 시작하기 전에 게이트의 결과를 확인하세요. 기본적으로 `ALLOW` 항목만 노출되며, `ASK` 항목에는 검토가 필요합니다. 어댑터는 검사할 수 없는 설정을 조용히 신뢰하지 않고 거부합니다. 이 명령은 npm 0.5.0 이상과 소스 체크아웃에서 사용할 수 있습니다. 게시된 CLI를 실행하려면 `node ./bin/trustdex.mjs` 대신 `npx trustdex@0.7.0`을 사용하세요.
|
|
197
197
|
|
|
198
198
|
지원되는 설정, PowerShell 오류 처리, 서명된 검토 및 Claude Desktop 워크플로는 [Claude에서 TrustDex 사용하기](docs/CLAUDE.ko.md)를 참고하세요.
|
|
199
199
|
|
|
@@ -207,6 +207,42 @@ node ./bin/trustdex.mjs inspect-claude-settings \
|
|
|
207
207
|
|
|
208
208
|
이 명령은 구조적인 기능 증거만 보고합니다. 권한 지정자, 디렉터리 값, 훅 명령, 도메인, 자격 증명 도우미 값 또는 환경 값을 출력하거나 지문에 포함하지 않습니다. 이는 정적 검토 도구이며 설정 병합기나 런타임 샌드박스가 아닙니다.
|
|
209
209
|
|
|
210
|
+
## 권한 상태 드리프트
|
|
211
|
+
|
|
212
|
+
각 런타임에 대해 값이 제거된 구조적 기준 상태를 기록한 뒤 에이전트 또는 정책
|
|
213
|
+
변경 후 상태와 비교할 수 있습니다.
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
node ./bin/trustdex.mjs snapshot-claude-settings \
|
|
217
|
+
./.claude/settings.json \
|
|
218
|
+
--pack strict \
|
|
219
|
+
--out .trustdex/claude-posture.json
|
|
220
|
+
|
|
221
|
+
node ./bin/trustdex.mjs snapshot-codex-settings \
|
|
222
|
+
~/.codex/config.toml \
|
|
223
|
+
--pack strict \
|
|
224
|
+
--out .trustdex/codex-posture.json
|
|
225
|
+
|
|
226
|
+
node ./bin/trustdex.mjs diff-permissions \
|
|
227
|
+
.trustdex/approved-posture.json \
|
|
228
|
+
.trustdex/current-posture.json \
|
|
229
|
+
--json
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
자동 허용, 쓰기 범위, 네트워크 접근, 서브에이전트, 정책 의미 또는 분류되지 않은
|
|
233
|
+
설정이 확대되면 `diff-permissions`는 종료 코드 `1`을 반환합니다. 더 제한적으로만
|
|
234
|
+
변한 경우에는 종료 코드 `0`과 `restricted` 상태를 반환합니다. 스냅샷에는 개수,
|
|
235
|
+
문서화된 열거 값, 기능 범주, 위험 신호 및 정책 의미 다이제스트만 포함됩니다.
|
|
236
|
+
입력 경로, 규칙 지정자, 쓰기 가능 경로, 도메인, 명령, 환경 변수 이름과 값 및
|
|
237
|
+
관련 없는 설정 값은 제외합니다. 값이 제거된 규칙 내용이 같은 개수 안에서 바뀌면
|
|
238
|
+
감지할 수 없으므로 이는 런타임 강제가 아니라 권고형 CI 검토 게이트입니다.
|
|
239
|
+
|
|
240
|
+
기계 소비자는 `--json` 출력을
|
|
241
|
+
[`schemas/permission-posture-v1.schema.json`](schemas/permission-posture-v1.schema.json)과
|
|
242
|
+
[`schemas/permission-posture-diff-v1.schema.json`](schemas/permission-posture-diff-v1.schema.json)으로
|
|
243
|
+
검증할 수 있습니다. 스키마가 바뀌면 새로운 정수 `schemaVersion`을 사용하며 기존
|
|
244
|
+
필드의 의미를 조용히 바꾸지 않습니다.
|
|
245
|
+
|
|
210
246
|
## 온라인 출처 관찰
|
|
211
247
|
|
|
212
248
|
일반 검사는 계속 로컬에서만 수행됩니다. 다음 명령은 명시적으로 실행할 때만 네트워크 조회를 수행합니다.
|
|
@@ -352,7 +388,7 @@ node ./bin/trustdex.mjs verify .trustdex/trust-record.json \
|
|
|
352
388
|
```yaml
|
|
353
389
|
- uses: actions/checkout@v4
|
|
354
390
|
|
|
355
|
-
- uses: grigent/trustdex@v0.
|
|
391
|
+
- uses: grigent/trustdex@v0.7.0
|
|
356
392
|
with:
|
|
357
393
|
config: ./mcp.json
|
|
358
394
|
pack: official-first
|
package/README.md
CHANGED
|
@@ -82,8 +82,8 @@ Requires Node.js 20+.
|
|
|
82
82
|
Run directly from npm:
|
|
83
83
|
|
|
84
84
|
```bash
|
|
85
|
-
npx trustdex@0.
|
|
86
|
-
npx trustdex@0.
|
|
85
|
+
npx trustdex@0.7.0 --help
|
|
86
|
+
npx trustdex@0.7.0 inspect ./mcp.json --pack strict --policy ./trustdex.policy.json
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
Or work from a source checkout:
|
|
@@ -201,7 +201,7 @@ claude --strict-mcp-config --mcp-config .trustdex/claude-mcp.json
|
|
|
201
201
|
Check the gate's result before starting Claude. Only `ALLOW` entries are exposed by
|
|
202
202
|
default; `ASK` entries require review. The adapter rejects settings it cannot
|
|
203
203
|
inspect instead of silently trusting them. These commands are available in npm 0.5.0 and later, and from a source checkout.
|
|
204
|
-
Use `npx trustdex@0.
|
|
204
|
+
Use `npx trustdex@0.7.0` in place of `node ./bin/trustdex.mjs` to run the published CLI.
|
|
205
205
|
|
|
206
206
|
See [Using TrustDex with Claude](docs/CLAUDE.md) for supported settings, PowerShell
|
|
207
207
|
error handling, signed review, and the Claude Desktop workflow.
|
|
@@ -219,6 +219,42 @@ The command reports structural capability evidence only. It does not print or fi
|
|
|
219
219
|
permission specifiers, directory values, hook commands, domains, credential-helper values,
|
|
220
220
|
or environment values. It is a static review aid, not a settings merger or runtime sandbox.
|
|
221
221
|
|
|
222
|
+
## Permission posture drift
|
|
223
|
+
|
|
224
|
+
Record a value-free structural baseline for either runtime, then compare it after an
|
|
225
|
+
agent or policy change:
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
node ./bin/trustdex.mjs snapshot-claude-settings \
|
|
229
|
+
./.claude/settings.json \
|
|
230
|
+
--pack strict \
|
|
231
|
+
--out .trustdex/claude-posture.json
|
|
232
|
+
|
|
233
|
+
node ./bin/trustdex.mjs snapshot-codex-settings \
|
|
234
|
+
~/.codex/config.toml \
|
|
235
|
+
--pack strict \
|
|
236
|
+
--out .trustdex/codex-posture.json
|
|
237
|
+
|
|
238
|
+
node ./bin/trustdex.mjs diff-permissions \
|
|
239
|
+
.trustdex/approved-posture.json \
|
|
240
|
+
.trustdex/current-posture.json \
|
|
241
|
+
--json
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
`diff-permissions` exits `1` when automatic grants, writable scope, network access,
|
|
245
|
+
subagents, policy semantics, or another unclassified setting expands. A change that
|
|
246
|
+
is only more restrictive exits `0` with status `restricted`. Snapshots contain counts,
|
|
247
|
+
documented enums, capability categories, risk signals, and a policy-semantics digest;
|
|
248
|
+
they omit input paths, rule specifiers, writable paths, domains, commands, environment
|
|
249
|
+
names and values, and unrelated setting values. Same-count changes to redacted rule
|
|
250
|
+
contents cannot be detected, so this is an advisory CI review gate rather than runtime
|
|
251
|
+
enforcement.
|
|
252
|
+
|
|
253
|
+
Machine consumers can validate `--json` output against
|
|
254
|
+
[`schemas/permission-posture-v1.schema.json`](schemas/permission-posture-v1.schema.json)
|
|
255
|
+
and [`schemas/permission-posture-diff-v1.schema.json`](schemas/permission-posture-diff-v1.schema.json).
|
|
256
|
+
Schema changes require a new integer `schemaVersion`; fields are not silently repurposed.
|
|
257
|
+
|
|
222
258
|
## Online provenance observations
|
|
223
259
|
|
|
224
260
|
Normal inspection remains local-only. These commands perform an explicit network lookup only when invoked:
|
|
@@ -364,7 +400,7 @@ The private key should never be committed.
|
|
|
364
400
|
```yaml
|
|
365
401
|
- uses: actions/checkout@v4
|
|
366
402
|
|
|
367
|
-
- uses: grigent/trustdex@v0.
|
|
403
|
+
- uses: grigent/trustdex@v0.7.0
|
|
368
404
|
with:
|
|
369
405
|
config: ./mcp.json
|
|
370
406
|
pack: official-first
|
package/bin/trustdex.mjs
CHANGED
|
@@ -23,6 +23,10 @@ import {
|
|
|
23
23
|
verifyArtifactBytes
|
|
24
24
|
} from '../src/provenance-online.mjs';
|
|
25
25
|
import { createSnapshot, diffSnapshots } from '../src/snapshot.mjs';
|
|
26
|
+
import {
|
|
27
|
+
createPermissionPostureSnapshot,
|
|
28
|
+
diffPermissionPostureSnapshots
|
|
29
|
+
} from '../src/posture.mjs';
|
|
26
30
|
import { gateMcpConfig } from '../src/gate.mjs';
|
|
27
31
|
import { assessReview } from '../src/review.mjs';
|
|
28
32
|
import {
|
|
@@ -46,6 +50,7 @@ Usage:
|
|
|
46
50
|
trustdex inspect-codex <config.toml> [--pack ...] [--policy policy.json]
|
|
47
51
|
[--trust-store trust-store.json] [--json]
|
|
48
52
|
trustdex inspect-codex-settings <config.toml> [--pack ...] [--policy policy.json] [--json]
|
|
53
|
+
trustdex snapshot-codex-settings <config.toml> --out posture.json [--pack ...]
|
|
49
54
|
|
|
50
55
|
trustdex gate <mcp.json> --out gated.json [--pack ...] [--policy policy.json]
|
|
51
56
|
[--trust-store trust-store.json] [--include-ask] [--json]
|
|
@@ -54,6 +59,7 @@ Usage:
|
|
|
54
59
|
|
|
55
60
|
trustdex inspect-claude <.mcp.json> [--pack ...] [--policy policy.json] [--json]
|
|
56
61
|
trustdex inspect-claude-settings <settings.json> [--pack ...] [--policy policy.json] [--json]
|
|
62
|
+
trustdex snapshot-claude-settings <settings.json> --out posture.json [--pack ...]
|
|
57
63
|
trustdex gate-claude <.mcp.json> --out gated.json [--pack ...] [--policy policy.json]
|
|
58
64
|
trustdex snapshot-claude <.mcp.json> --out snapshot.json [--pack ...]
|
|
59
65
|
trustdex approve-claude <.mcp.json> --private key.pem --dir review [--pack ...]
|
|
@@ -79,6 +85,7 @@ Usage:
|
|
|
79
85
|
[--policy policy.json] [--trust-store trust-store.json]
|
|
80
86
|
|
|
81
87
|
trustdex diff <before.json> <after.json> [--json]
|
|
88
|
+
trustdex diff-permissions <before.json> <after.json> [--json]
|
|
82
89
|
trustdex policy <strict|official-first|development>
|
|
83
90
|
|
|
84
91
|
trustdex keygen --private trustdex-private.pem --public trustdex-public.pem
|
|
@@ -199,6 +206,25 @@ async function inspectSingle(item, args) {
|
|
|
199
206
|
setInspectExitCode(results);
|
|
200
207
|
}
|
|
201
208
|
|
|
209
|
+
async function evaluateClaudeSettings(settingsPath, args) {
|
|
210
|
+
let settings;
|
|
211
|
+
try { settings = await readJson(settingsPath); } catch (error) {
|
|
212
|
+
if (error instanceof SyntaxError) throw new Error('Invalid Claude settings JSON.');
|
|
213
|
+
throw error;
|
|
214
|
+
}
|
|
215
|
+
const policy = await loadPolicy(args);
|
|
216
|
+
const [result] = evaluateAll([inspectClaudeSettings(settings, settingsPath)], policy);
|
|
217
|
+
return { policy, result };
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
async function evaluateCodexSettings(configPath, args) {
|
|
221
|
+
const policy = await loadPolicy(args);
|
|
222
|
+
const [result] = evaluateAll([
|
|
223
|
+
inspectCodexSettingsText(await fs.readFile(configPath, 'utf8'), configPath)
|
|
224
|
+
], policy);
|
|
225
|
+
return { policy, result };
|
|
226
|
+
}
|
|
227
|
+
|
|
202
228
|
function printObservation(observation, asJson) {
|
|
203
229
|
if (asJson) {
|
|
204
230
|
console.log(JSON.stringify(observation, null, 2));
|
|
@@ -224,6 +250,24 @@ function printChanges(changes) {
|
|
|
224
250
|
}
|
|
225
251
|
}
|
|
226
252
|
|
|
253
|
+
function printPermissionPostureDiff(diff) {
|
|
254
|
+
if (diff.status === 'unchanged') {
|
|
255
|
+
console.log('UNCHANGED: permission posture matches the baseline.');
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
if (diff.status === 'restricted') {
|
|
259
|
+
console.log('RESTRICTED: permission posture became more restrictive.');
|
|
260
|
+
} else {
|
|
261
|
+
console.log('NEEDS_REVIEW: permission posture expanded or changed in an unclassified way.');
|
|
262
|
+
}
|
|
263
|
+
for (const change of diff.changes) {
|
|
264
|
+
const details = change.items
|
|
265
|
+
? ` (${change.items.join(', ')})`
|
|
266
|
+
: Object.hasOwn(change, 'before') ? ` (${String(change.before)} -> ${String(change.after)})` : '';
|
|
267
|
+
console.log(`${change.impact.toUpperCase()} ${change.type}: ${change.field}${details}`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
227
271
|
async function main() {
|
|
228
272
|
const args = process.argv.slice(2);
|
|
229
273
|
const command = args[0];
|
|
@@ -270,12 +314,9 @@ async function main() {
|
|
|
270
314
|
if (command === 'inspect-claude-settings') {
|
|
271
315
|
const settingsPath = args[1];
|
|
272
316
|
if (!settingsPath) throw new Error('inspect-claude-settings requires a path to Claude settings JSON.');
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
throw error;
|
|
277
|
-
}
|
|
278
|
-
await inspectSingle(inspectClaudeSettings(settings, settingsPath), args);
|
|
317
|
+
const { result } = await evaluateClaudeSettings(settingsPath, args);
|
|
318
|
+
printResults([result], hasFlag(args, '--json'));
|
|
319
|
+
setInspectExitCode([result]);
|
|
279
320
|
return;
|
|
280
321
|
}
|
|
281
322
|
|
|
@@ -291,7 +332,40 @@ async function main() {
|
|
|
291
332
|
if (command === 'inspect-codex-settings') {
|
|
292
333
|
const configPath = args[1];
|
|
293
334
|
if (!configPath) throw new Error('inspect-codex-settings requires a path to Codex config.toml.');
|
|
294
|
-
|
|
335
|
+
const { result } = await evaluateCodexSettings(configPath, args);
|
|
336
|
+
printResults([result], hasFlag(args, '--json'));
|
|
337
|
+
setInspectExitCode([result]);
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
if (command === 'snapshot-claude-settings' || command === 'snapshot-codex-settings') {
|
|
342
|
+
const configPath = args[1];
|
|
343
|
+
const out = getFlag(args, '--out');
|
|
344
|
+
if (!configPath || !out) {
|
|
345
|
+
throw new Error(`${command} requires a settings path and --out <posture.json>.`);
|
|
346
|
+
}
|
|
347
|
+
const { policy, result } = command === 'snapshot-claude-settings'
|
|
348
|
+
? await evaluateClaudeSettings(configPath, args)
|
|
349
|
+
: await evaluateCodexSettings(configPath, args);
|
|
350
|
+
const snapshot = createPermissionPostureSnapshot(result, policy);
|
|
351
|
+
await writeFileSafe(out, `${JSON.stringify(snapshot, null, 2)}\n`);
|
|
352
|
+
console.log(`Wrote ${out}\nDigest: ${snapshot.digest}`);
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
if (command === 'diff-permissions') {
|
|
357
|
+
const beforePath = args[1];
|
|
358
|
+
const afterPath = args[2];
|
|
359
|
+
if (!beforePath || !afterPath) {
|
|
360
|
+
throw new Error('diff-permissions requires <before.json> <after.json>.');
|
|
361
|
+
}
|
|
362
|
+
const diff = diffPermissionPostureSnapshots(
|
|
363
|
+
await readJson(beforePath),
|
|
364
|
+
await readJson(afterPath)
|
|
365
|
+
);
|
|
366
|
+
if (hasFlag(args, '--json')) console.log(JSON.stringify(diff, null, 2));
|
|
367
|
+
else printPermissionPostureDiff(diff);
|
|
368
|
+
if (diff.status === 'needs-review') process.exitCode = 1;
|
|
295
369
|
return;
|
|
296
370
|
}
|
|
297
371
|
|
package/docs/ARCHITECTURE.ko.md
CHANGED
|
@@ -13,7 +13,7 @@ TrustDex는 관찰, 정책, 게이트 및 검토 증거를 분리하는 의존
|
|
|
13
13
|
3. 선택적인 신뢰 저장소 주장이 명시적인 출처 증거를 연결합니다.
|
|
14
14
|
4. 정책 엔진이 ALLOW, ASK 또는 BLOCK을 생성합니다.
|
|
15
15
|
5. 게이트가 승인된 설정만 출력합니다.
|
|
16
|
-
6.
|
|
16
|
+
6. MCP 스냅샷, 권한 상태 스냅샷 및 서명된 신뢰 기록을 통해 이후 드리프트를 검토할 수 있습니다.
|
|
17
17
|
|
|
18
18
|
게이트가 강제 적용 경계입니다. 보고서만으로는 에이전트가 검토되지 않은 확장을 불러오는 것을 막을 수 없습니다.
|
|
19
19
|
|
|
@@ -31,6 +31,7 @@ TrustDex는 관찰, 정책, 게이트 및 검토 증거를 분리하는 의존
|
|
|
31
31
|
| `src/policy.mjs` | 단조로운 정책 평가. 신호는 심각도를 높일 수 있음 |
|
|
32
32
|
| `src/gate.mjs` | 승인된 MCP 항목만 출력 |
|
|
33
33
|
| `src/snapshot.mjs` | 결정론적 신뢰 관련 상태 및 드리프트 |
|
|
34
|
+
| `src/posture.mjs` | 값이 제거된 Claude/Codex 권한 상태 스냅샷 및 자율성 확대 분류 |
|
|
34
35
|
| `src/trust-record.mjs` | Ed25519 검토 기록 서명 및 검증 |
|
|
35
36
|
| `src/review.mjs` | 서명된 기준선 비교 |
|
|
36
37
|
|
|
@@ -39,6 +40,7 @@ TrustDex는 관찰, 정책, 게이트 및 검토 증거를 분리하는 의존
|
|
|
39
40
|
- 검사는 검사 대상 확장을 실행해서는 안 됩니다.
|
|
40
41
|
- 비밀 값은 출력하거나 스냅샷에 저장해서는 안 됩니다.
|
|
41
42
|
- 권한 규칙 값, 쓰기 가능 루트 경로, 훅/도우미 본문 및 관련 없는 설정 값은 에이전트 설정 보고서에 보관해서는 안 됩니다.
|
|
43
|
+
- 권한 상태 스냅샷은 소스 경로와 설정 값을 제외해야 하며, 새 자율성 또는 정책 의미 변경은 검토를 요구해야 합니다.
|
|
42
44
|
- 알 수 없는 증거가 신뢰로 바뀌어서는 안 됩니다.
|
|
43
45
|
- 차단 신호의 심각도를 출처 정보로 낮춰서는 안 됩니다.
|
|
44
46
|
- 지원하지 않는 보안 관련 구문은 안전하게 실패해야 합니다.
|
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -13,7 +13,7 @@ TrustDex is a dependency-free Node.js CLI that separates observation, policy, ga
|
|
|
13
13
|
3. Optional trust-store claims attach explicit provenance evidence.
|
|
14
14
|
4. The policy engine produces ALLOW, ASK, or BLOCK.
|
|
15
15
|
5. A gate emits only the approved configuration.
|
|
16
|
-
6.
|
|
16
|
+
6. MCP snapshots, permission posture snapshots, and signed trust records make later drift reviewable.
|
|
17
17
|
|
|
18
18
|
The gate is the enforcement boundary. Reports alone do not prevent an agent from loading an unreviewed extension.
|
|
19
19
|
|
|
@@ -31,6 +31,7 @@ The gate is the enforcement boundary. Reports alone do not prevent an agent from
|
|
|
31
31
|
| src/policy.mjs | Monotonic policy evaluation; signals may raise severity |
|
|
32
32
|
| src/gate.mjs | Output only approved MCP entries |
|
|
33
33
|
| src/snapshot.mjs | Deterministic trust-relevant state and drift |
|
|
34
|
+
| src/posture.mjs | Value-free Claude/Codex permission posture snapshots and autonomy-expansion classification |
|
|
34
35
|
| src/trust-record.mjs | Ed25519 review-record signing and verification |
|
|
35
36
|
| src/review.mjs | Signed-baseline comparison |
|
|
36
37
|
|
|
@@ -39,6 +40,7 @@ The gate is the enforcement boundary. Reports alone do not prevent an agent from
|
|
|
39
40
|
- Inspection must not execute the inspected extension.
|
|
40
41
|
- Secret values must not be printed or stored in snapshots.
|
|
41
42
|
- Permission rule values, writable-root paths, hook/helper bodies, and unrelated settings values must not be retained in agent-settings reports.
|
|
43
|
+
- Permission posture snapshots must omit source paths and setting values; new autonomy or changed policy semantics must require review.
|
|
42
44
|
- Unknown evidence must not become trust.
|
|
43
45
|
- A blocking signal must not be lowered by provenance.
|
|
44
46
|
- Unsupported security-relevant syntax must fail closed.
|
package/docs/CLAUDE.ko.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
TrustDex는 Claude Code 또는 Claude Desktop이 MCP JSON을 받기 전에 이를 검사할 수 있습니다. 설정 증거를 로컬에서 평가하고, MCP 서버를 시작하지 않으며, 설정을 업로드하지 않습니다. ALLOW 결정은 증거가 정책과 일치한다는 뜻이며 서버 코드가 안전하다는 것을 증명하지 않습니다.
|
|
8
8
|
|
|
9
|
-
Claude 전용 명령은 TrustDex 0.5.0 이상에서 사용할 수 있습니다. 게시된 CLI를 실행하려면 아래 예제의 `node ./bin/trustdex.mjs` 대신 `npx trustdex@0.
|
|
9
|
+
Claude 전용 명령은 TrustDex 0.5.0 이상에서 사용할 수 있습니다. 게시된 CLI를 실행하려면 아래 예제의 `node ./bin/trustdex.mjs` 대신 `npx trustdex@0.7.0`을 사용하거나, 소스 체크아웃에서 명령을 직접 사용하세요.
|
|
10
10
|
|
|
11
11
|
## 지원되는 설정
|
|
12
12
|
|
|
@@ -91,6 +91,29 @@ node ./bin/trustdex.mjs inspect-claude-settings \
|
|
|
91
91
|
|
|
92
92
|
이 명령은 한 번에 파일 하나만 검사합니다. Claude Code는 여러 범위의 설정을 병합하고 명령줄 플래그가 세션 권한을 추가할 수 있으므로 이 결과가 실제 런타임 정책은 아닙니다. Claude Code에서 로드된 소스와 권한을 확인하고 강제 적용에는 운영체제 수준 샌드박싱을 사용하세요. 공식 참고 자료: [설정 파일 및 우선순위](https://code.claude.com/docs/en/settings), [권한](https://code.claude.com/docs/en/permissions), [보안](https://code.claude.com/docs/en/security).
|
|
93
93
|
|
|
94
|
+
### 권한 상태 드리프트
|
|
95
|
+
|
|
96
|
+
검토 후 기준 상태를 만들고 나중의 설정 상태와 비교하세요.
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
node ./bin/trustdex.mjs snapshot-claude-settings \
|
|
100
|
+
./.claude/settings.json \
|
|
101
|
+
--pack strict \
|
|
102
|
+
--out .trustdex/claude-posture.json
|
|
103
|
+
|
|
104
|
+
node ./bin/trustdex.mjs diff-permissions \
|
|
105
|
+
.trustdex/approved-claude-posture.json \
|
|
106
|
+
.trustdex/current-claude-posture.json
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
새 자동 도구 범주, 추가 규칙이나 디렉터리, 완화된 보호 스위치, 더 위험한 기본
|
|
110
|
+
모드, 새 위험 신호 또는 정책 의미 변경은 `NEEDS_REVIEW`와 종료 코드 `1`을
|
|
111
|
+
반환합니다. 제한적으로만 변한 경우 `RESTRICTED`와 종료 코드 `0`을 반환합니다.
|
|
112
|
+
스냅샷은 소스 경로와 모든 권한, 훅, 디렉터리, 도메인, 자격 증명 도우미,
|
|
113
|
+
플러그인 및 환경 값을 제외합니다. 제거된 규칙 내용을 의도적으로 지문화하지
|
|
114
|
+
않으므로 같은 기능 범주 안에서 규칙 개수는 같고 내용만 바뀌는 경우에는 소스
|
|
115
|
+
검토나 런타임 제어가 계속 필요합니다.
|
|
116
|
+
|
|
94
117
|
## 서명된 검토 및 드리프트
|
|
95
118
|
|
|
96
119
|
검토 워크플로 전체에서 Claude 어댑터를 유지하세요. 일반 MCP 명령은 Claude 전용 제어를 검사하지 않습니다.
|
package/docs/CLAUDE.md
CHANGED
|
@@ -10,7 +10,7 @@ upload your configuration. An ALLOW decision means the evidence matched your pol
|
|
|
10
10
|
it does not prove that server code is safe.
|
|
11
11
|
|
|
12
12
|
The Claude-specific commands are available in TrustDex 0.5.0 and later.
|
|
13
|
-
Use `npx trustdex@0.
|
|
13
|
+
Use `npx trustdex@0.7.0` in place of `node ./bin/trustdex.mjs` in the examples
|
|
14
14
|
below to run the published CLI, or use the commands directly from a source checkout.
|
|
15
15
|
|
|
16
16
|
## Supported configuration
|
|
@@ -136,6 +136,29 @@ sandboxing for enforcement. Official references: [settings files and precedence]
|
|
|
136
136
|
[permissions](https://code.claude.com/docs/en/permissions), and
|
|
137
137
|
[security](https://code.claude.com/docs/en/security).
|
|
138
138
|
|
|
139
|
+
### Permission posture drift
|
|
140
|
+
|
|
141
|
+
Create a baseline after review and compare a later settings state:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
node ./bin/trustdex.mjs snapshot-claude-settings \
|
|
145
|
+
./.claude/settings.json \
|
|
146
|
+
--pack strict \
|
|
147
|
+
--out .trustdex/claude-posture.json
|
|
148
|
+
|
|
149
|
+
node ./bin/trustdex.mjs diff-permissions \
|
|
150
|
+
.trustdex/approved-claude-posture.json \
|
|
151
|
+
.trustdex/current-claude-posture.json
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
New automatic tool categories, added rules or directories, relaxed protective
|
|
155
|
+
switches, a riskier default mode, new risk signals, or changed policy semantics return
|
|
156
|
+
`NEEDS_REVIEW` and exit `1`. Restriction-only changes return `RESTRICTED` and exit `0`.
|
|
157
|
+
The snapshot excludes source paths and every permission, hook, directory, domain,
|
|
158
|
+
credential-helper, plugin, and environment value. Because it intentionally does not
|
|
159
|
+
fingerprint redacted rule contents, a same-count change inside one capability category
|
|
160
|
+
must still be covered by source review or runtime controls.
|
|
161
|
+
|
|
139
162
|
## Signed review and drift
|
|
140
163
|
|
|
141
164
|
Keep the Claude adapter throughout a review workflow; generic MCP commands do not
|
package/docs/CODEX.ko.md
CHANGED
|
@@ -15,7 +15,7 @@ Codex 클라이언트는 `config.toml`(기본적으로 `~/.codex/` 아래)의 `[
|
|
|
15
15
|
### 1. 현재 설정 검사
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
npx trustdex@0.
|
|
18
|
+
npx trustdex@0.7.0 inspect-codex ~/.codex/config.toml --pack strict
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
이 명령은 파일을 로컬에서 읽으며 네트워크 요청을 하지 않습니다. 출력에는 각 MCP 서버, 소스 유형, 신뢰 신호 및 ALLOW / ASK / BLOCK 결정이 표시됩니다. 환경 변수 이름은 표시될 수 있지만 값은 절대 표시되지 않습니다.
|
|
@@ -25,7 +25,7 @@ npx trustdex@0.6.0 inspect-codex ~/.codex/config.toml --pack strict
|
|
|
25
25
|
### 2. 게이트된 사본 작성
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
npx trustdex@0.
|
|
28
|
+
npx trustdex@0.7.0 gate-codex ~/.codex/config.toml \
|
|
29
29
|
--pack official-first \
|
|
30
30
|
--trust-store ./trust-store.json \
|
|
31
31
|
--out ./gated-config.toml
|
|
@@ -72,13 +72,38 @@ node ./bin/trustdex.mjs inspect-codex-settings \
|
|
|
72
72
|
|
|
73
73
|
이 첫 번째 어댑터는 한 번에 파일 하나를 검사하며 사용자, 프로젝트, 프로필, 관리형, 시스템 또는 명령줄 설정을 하나의 실제 정책으로 병합하지 않습니다. 이는 정적 증거이며 Codex 샌드박스 자체가 아닙니다. 클라이언트에서 활성 권한 프로필을 확인하세요. 공식 OpenAI 문서는 샌드박스 경계와 승인 처리를 구분하며 `workspace-write`와 `on-request` 조합을 더 낮은 위험의 로컬 자동화 구성으로 안내합니다. [설정 레퍼런스](https://developers.openai.com/codex/config-reference)와 [샌드박스 가이드](https://developers.openai.com/codex/sandboxing)를 참고하세요.
|
|
74
74
|
|
|
75
|
+
### 권한 상태 드리프트
|
|
76
|
+
|
|
77
|
+
검토한 구조적 기준 상태를 생성해 커밋한 뒤 CI에서 현재 스냅샷을 만들고
|
|
78
|
+
비교하세요.
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
node ./bin/trustdex.mjs snapshot-codex-settings \
|
|
82
|
+
~/.codex/config.toml \
|
|
83
|
+
--pack strict \
|
|
84
|
+
--out .trustdex/codex-posture.json
|
|
85
|
+
|
|
86
|
+
node ./bin/trustdex.mjs diff-permissions \
|
|
87
|
+
.trustdex/approved-codex-posture.json \
|
|
88
|
+
.trustdex/current-codex-posture.json \
|
|
89
|
+
--json
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
네트워크 활성화, 더 넓은 쓰기 범위, 더 약한 샌드박스나 승인 상태, 실시간 검색,
|
|
93
|
+
서브에이전트 활성화, 새 위험 신호 및 정책 의미 변경은 검토를 요구하고 종료 코드
|
|
94
|
+
`1`을 반환합니다. 제한적으로만 변한 경우 종료 코드 `0`을 반환합니다. 스냅샷은
|
|
95
|
+
구조적 개수와 문서화된 열거 값만 저장하며 설정 파일 경로, 쓰기 가능 루트 경로,
|
|
96
|
+
사용자 정의 프로필 값 또는 관련 없는 설정은 저장하지 않습니다. 다이제스트는
|
|
97
|
+
우발적이거나 조정되지 않은 편집을 감지하지만 누구나 서명되지 않은 다이제스트를
|
|
98
|
+
다시 계산할 수 있습니다. 인증이 아니며 Codex 런타임 샌드박스를 대체하지 않습니다.
|
|
99
|
+
|
|
75
100
|
### 스킬 및 플러그인
|
|
76
101
|
|
|
77
102
|
에이전트 스킬과 플러그인 매니페스트도 같은 방법으로 검사할 수 있습니다.
|
|
78
103
|
|
|
79
104
|
```bash
|
|
80
|
-
npx trustdex@0.
|
|
81
|
-
npx trustdex@0.
|
|
105
|
+
npx trustdex@0.7.0 inspect-skill ./path/to/SKILL.md --pack strict
|
|
106
|
+
npx trustdex@0.7.0 inspect-plugin ./path/to/plugin.json --pack strict
|
|
82
107
|
```
|
|
83
108
|
|
|
84
109
|
이 명령은 파이프로 연결된 셸 설치 프로그램, 민감한 경로 참조, 네트워크 URL 및 와일드카드 도구 범위와 같은 관찰 가능한 신호를 보고합니다. 스킬이나 플러그인이 안전하다는 것을 증명하지는 않습니다.
|
package/docs/CODEX.md
CHANGED
|
@@ -15,7 +15,7 @@ Codex clients read MCP server definitions from `[mcp_servers.<name>]` tables in
|
|
|
15
15
|
### 1. Inspect the current configuration
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
npx trustdex@0.
|
|
18
|
+
npx trustdex@0.7.0 inspect-codex ~/.codex/config.toml --pack strict
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
This reads the file locally and makes no network request. The output lists each MCP server, its source type, trust signals, and an ALLOW / ASK / BLOCK decision. Environment variable names may appear; their values never do.
|
|
@@ -25,7 +25,7 @@ Use `--json` for machine-readable output and `--trust-store ./trust-store.json`
|
|
|
25
25
|
### 2. Write a gated copy
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
npx trustdex@0.
|
|
28
|
+
npx trustdex@0.7.0 gate-codex ~/.codex/config.toml \
|
|
29
29
|
--pack official-first \
|
|
30
30
|
--trust-store ./trust-store.json \
|
|
31
31
|
--out ./gated-config.toml
|
|
@@ -84,13 +84,38 @@ boundary from approval handling and documents `workspace-write` plus `on-request
|
|
|
84
84
|
as the lower-risk local automation combination. See the [configuration reference](https://developers.openai.com/codex/config-reference)
|
|
85
85
|
and [sandbox guide](https://developers.openai.com/codex/sandboxing).
|
|
86
86
|
|
|
87
|
+
### Permission posture drift
|
|
88
|
+
|
|
89
|
+
Create and commit a reviewed structural baseline, then generate a current snapshot in
|
|
90
|
+
CI and compare them:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
node ./bin/trustdex.mjs snapshot-codex-settings \
|
|
94
|
+
~/.codex/config.toml \
|
|
95
|
+
--pack strict \
|
|
96
|
+
--out .trustdex/codex-posture.json
|
|
97
|
+
|
|
98
|
+
node ./bin/trustdex.mjs diff-permissions \
|
|
99
|
+
.trustdex/approved-codex-posture.json \
|
|
100
|
+
.trustdex/current-codex-posture.json \
|
|
101
|
+
--json
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Network enablement, broader writable scope, a weaker sandbox or approval posture,
|
|
105
|
+
live search, subagent enablement, new risk signals, and policy-semantic changes require
|
|
106
|
+
review and exit `1`. Restriction-only changes exit `0`. The snapshot stores structural
|
|
107
|
+
counts and documented enums, not the config path, writable-root paths, custom profile
|
|
108
|
+
values, or unrelated settings. Its digest detects accidental or unreconciled edits,
|
|
109
|
+
but anyone can recompute an unsigned digest; it is not authentication or a replacement
|
|
110
|
+
for the Codex runtime sandbox.
|
|
111
|
+
|
|
87
112
|
### Skills and plugins
|
|
88
113
|
|
|
89
114
|
Agent skills and plugin manifests can be inspected the same way:
|
|
90
115
|
|
|
91
116
|
```bash
|
|
92
|
-
npx trustdex@0.
|
|
93
|
-
npx trustdex@0.
|
|
117
|
+
npx trustdex@0.7.0 inspect-skill ./path/to/SKILL.md --pack strict
|
|
118
|
+
npx trustdex@0.7.0 inspect-plugin ./path/to/plugin.json --pack strict
|
|
94
119
|
```
|
|
95
120
|
|
|
96
121
|
These report observable signals such as piped shell installers, references to sensitive paths, network URLs, and wildcard tool scopes. They do not prove a skill or plugin is safe.
|
package/docs/EVALUATION.ko.md
CHANGED
|
@@ -60,6 +60,23 @@
|
|
|
60
60
|
|
|
61
61
|
쓰기 가능 루트 경로와 관련 없는 설정 값은 결과에 나타나면 안 됩니다. Codex 설정 지문은 생성하지 않습니다.
|
|
62
62
|
|
|
63
|
+
## 권한 상태 드리프트 사례
|
|
64
|
+
|
|
65
|
+
`examples/adversarial/permissions/`에는 두 런타임의 제한적 설정과 확대된 설정이
|
|
66
|
+
쌍으로 포함됩니다. `test/posture.test.mjs`는 다음을 요구합니다.
|
|
67
|
+
|
|
68
|
+
- 제한적인 기준 상태는 안전 인증을 의미하지 않는 `ASK`로 유지
|
|
69
|
+
- 자동 셸/네트워크/서브에이전트 권한 및 더 넓은 파일 시스템 범위가 위험을 높임
|
|
70
|
+
- 자율성 확대와 정책 변경에 대해 `diff-permissions`가 `needs-review`를 반환
|
|
71
|
+
- 제한적으로만 변한 경우 실패 종료 코드 없이 `restricted`를 반환
|
|
72
|
+
- 구조적 다이제스트를 계산한 스냅샷이 소스 경로, 규칙 값, 쓰기 가능 경로,
|
|
73
|
+
도메인, 명령, 환경 변수 이름과 값 및 인접 설정 값을 제외
|
|
74
|
+
- 내용이 다이제스트와 더 이상 일치하지 않는 스냅샷은 안전하게 실패
|
|
75
|
+
|
|
76
|
+
다이제스트는 내부 일관성을 확인할 뿐 서명자 신원을 인증하지 않습니다. 값이
|
|
77
|
+
제거된 권한 규칙 안에서 개수는 같고 내용만 바뀌는 경우는 이 구조적 비교의
|
|
78
|
+
범위 밖입니다.
|
|
79
|
+
|
|
63
80
|
## 이 평가가 측정하지 않는 것
|
|
64
81
|
|
|
65
82
|
이 벤치마크는 의도적으로 범위가 좁습니다. 런타임 동작, 샌드박스 탈출, 임의의 악성 코드, 모든 형태의 프롬프트 인젝션, 게시자 신원 소유권 또는 전이 의존성의 취약점을 측정하지 않습니다. 모든 Claude 또는 Codex 설정 범위를 병합하거나 세션 명령줄 재정의를 검사하거나 보고된 샌드박스가 실제로 활성화되었음을 증명하지 않습니다. 특히 이미 실행 중인 MCP 서버가 동적으로 반환하는 도구 설명은 현재 정적 설정 경계 밖에 있습니다.
|
package/docs/EVALUATION.md
CHANGED
|
@@ -63,6 +63,22 @@ inspection result. No permission-settings fingerprint is created.
|
|
|
63
63
|
Writable-root paths and unrelated setting values must not appear in results. No
|
|
64
64
|
Codex-settings fingerprint is created.
|
|
65
65
|
|
|
66
|
+
## Permission posture drift cases
|
|
67
|
+
|
|
68
|
+
`examples/adversarial/permissions/` contains paired restrictive and expanded settings
|
|
69
|
+
for both runtimes. `test/posture.test.mjs` requires:
|
|
70
|
+
|
|
71
|
+
- the restrictive baseline to remain `ASK`, without implying certification
|
|
72
|
+
- automatic shell/network/subagent grants and broader filesystem scope to raise risk
|
|
73
|
+
- `diff-permissions` to return `needs-review` for autonomy expansion and policy changes
|
|
74
|
+
- restriction-only changes to return `restricted` without a failure exit code
|
|
75
|
+
- snapshots with recomputed structural digests to omit source paths, rule values,
|
|
76
|
+
writable paths, domains, commands, environment names and values, and adjacent-setting values
|
|
77
|
+
- a snapshot whose contents no longer match its digest to fail closed
|
|
78
|
+
|
|
79
|
+
The digest checks internal consistency, not signer identity. Same-count changes inside
|
|
80
|
+
redacted permission rules remain outside this structural comparison.
|
|
81
|
+
|
|
66
82
|
## What this does not measure
|
|
67
83
|
|
|
68
84
|
This benchmark is intentionally narrow. It does not measure runtime behavior, sandbox escape, arbitrary malware, every form of prompt injection, publisher identity ownership, or vulnerabilities in transitive dependencies. It does not merge every Claude or Codex settings scope, inspect session command-line overrides, or prove that the reported sandbox is active. In particular, tool descriptions returned dynamically by an already-running MCP server are outside the current static configuration boundary.
|
package/docs/ROADMAP.ko.md
CHANGED
|
@@ -6,10 +6,17 @@
|
|
|
6
6
|
|
|
7
7
|
TrustDex는 초기 단계입니다. 이 로드맵은 방향을 공유하며 릴리스를 약속하지 않습니다.
|
|
8
8
|
|
|
9
|
+
## 진행 상황
|
|
10
|
+
|
|
11
|
+
- TrustDex 0.6.0은 Claude Code와 Codex 권한의 안전한 실패 검사를 추가했습니다.
|
|
12
|
+
- TrustDex 0.7.0은 값이 제거되고 자체 일관성을 검증하는 권한 상태 스냅샷,
|
|
13
|
+
자율성 확대 검토 게이트, 버전 지정 JSON 스키마 및 공개 적대적 권한 픽스처를
|
|
14
|
+
추가합니다.
|
|
15
|
+
|
|
9
16
|
## 현재: 경계 강화
|
|
10
17
|
|
|
11
18
|
- MCP JSON, Codex TOML, 스킬 및 플러그인 매니페스트의 적대적 픽스처 확장
|
|
12
|
-
- Claude Code와 Codex 모두의 적대적 권한
|
|
19
|
+
- Claude Code와 Codex 모두의 적대적 권한 픽스처를 계속 확장
|
|
13
20
|
- 사람이 읽을 수 있는 모든 출력에 비밀 값이 계속 포함되지 않는지 검증
|
|
14
21
|
- 크로스 플랫폼 소스 및 경로 정규화 개선
|
|
15
22
|
- 안정적인 정책 및 스냅샷 스키마 규칙 문서화
|
|
@@ -18,9 +25,9 @@ TrustDex는 초기 단계입니다. 이 로드맵은 방향을 공유하며 릴
|
|
|
18
25
|
## 다음: 에이전트 행동 경계를 검토 가능하게 만들기
|
|
19
26
|
|
|
20
27
|
- 명령, 경로, 도메인 또는 자격 증명 값을 보관하지 않고 병합된 설정 소스 검사
|
|
21
|
-
-
|
|
28
|
+
- 초기 단일 파일 권한 상태 비교를 병합 설정 소스로 확장
|
|
22
29
|
- 승인된 도구 출처와 해당 도구에 부여된 행동 권한 연결
|
|
23
|
-
-
|
|
30
|
+
- 버전이 지정된 권한 상태 JSON 스키마를 추가 결정 및 런타임으로 확장
|
|
24
31
|
- 권고형 설정 검사가 런타임 및 운영체제 샌드박스와 결합되는 방식 문서화
|
|
25
32
|
|
|
26
33
|
## 그다음: 무결성 증명
|
package/docs/ROADMAP.md
CHANGED
|
@@ -6,10 +6,17 @@
|
|
|
6
6
|
|
|
7
7
|
TrustDex is early-stage. This roadmap communicates direction and is not a release commitment.
|
|
8
8
|
|
|
9
|
+
## Progress
|
|
10
|
+
|
|
11
|
+
- TrustDex 0.6.0 added fail-closed Claude Code and Codex permission inspection.
|
|
12
|
+
- TrustDex 0.7.0 adds value-free, self-validating permission posture snapshots,
|
|
13
|
+
autonomy-expansion review gates, versioned JSON schemas, and public adversarial
|
|
14
|
+
permission fixtures.
|
|
15
|
+
|
|
9
16
|
## Now: harden the boundary
|
|
10
17
|
|
|
11
18
|
- expand adversarial fixtures for MCP JSON, Codex TOML, skills, and plugin manifests
|
|
12
|
-
-
|
|
19
|
+
- keep expanding adversarial permission fixtures for both Claude Code and Codex
|
|
13
20
|
- verify that all human-readable output remains free of secret values
|
|
14
21
|
- improve cross-platform source and path normalization
|
|
15
22
|
- document stable policy and snapshot schema rules
|
|
@@ -18,9 +25,9 @@ TrustDex is early-stage. This roadmap communicates direction and is not a releas
|
|
|
18
25
|
## Next: make agent action boundaries reviewable
|
|
19
26
|
|
|
20
27
|
- inspect merged settings sources without retaining commands, paths, domains, or credential values
|
|
21
|
-
-
|
|
28
|
+
- extend the initial single-file posture comparison to merged settings sources
|
|
22
29
|
- connect approved tool provenance to the action permissions granted to that tool
|
|
23
|
-
-
|
|
30
|
+
- extend the versioned permission-posture JSON schemas to additional decisions and runtimes
|
|
24
31
|
- document how advisory settings checks compose with runtime and operating-system sandboxes
|
|
25
32
|
|
|
26
33
|
## Then: prove integrity
|