trustdex 0.9.0 → 0.10.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 CHANGED
@@ -71,6 +71,7 @@ TrustDex는 이름, 스타 수 또는 브랜딩만으로 "공식" 여부를 추
71
71
  - 사용자가 제공한 패키지 바이트를 npm SRI 또는 MCP Registry SHA-256 메타데이터와 대조해 검증
72
72
  - 무결성 기반 신뢰 증거를 설정된 패키지 버전에 연결하고 불일치 차단
73
73
  - 각 Claude/Codex MCP 소스의 결정·출처 상태를 도구 이름이나 규칙 값 없이 자동 도구 권한과 연결
74
+ - 명시적으로 제공된 값 없는 런타임 MCP 인벤토리를 검토된 연결과 대조해 차단되거나 예상 밖으로 로드된 서버 감지
74
75
 
75
76
  ## 호환성
76
77
 
@@ -83,8 +84,8 @@ Node.js 20 이상이 필요합니다.
83
84
  npm에서 직접 실행:
84
85
 
85
86
  ```bash
86
- npx trustdex@0.9.0 --help
87
- npx trustdex@0.9.0 inspect ./mcp.json --pack strict --policy ./trustdex.policy.json
87
+ npx trustdex@0.10.0 --help
88
+ npx trustdex@0.10.0 inspect ./mcp.json --pack strict --policy ./trustdex.policy.json
88
89
  ```
89
90
 
90
91
  또는 소스 체크아웃에서 작업:
@@ -204,7 +205,7 @@ node ./bin/trustdex.mjs gate-claude ./.mcp.json --pack strict --out .trustdex/cl
204
205
  claude --strict-mcp-config --mcp-config .trustdex/claude-mcp.json
205
206
  ```
206
207
 
207
- Claude를 시작하기 전에 게이트의 결과를 확인하세요. 기본적으로 `ALLOW` 항목만 노출되며, `ASK` 항목에는 검토가 필요합니다. 어댑터는 검사할 수 없는 설정을 조용히 신뢰하지 않고 거부합니다. 이 명령은 npm 0.5.0 이상과 소스 체크아웃에서 사용할 수 있습니다. 게시된 CLI를 실행하려면 `node ./bin/trustdex.mjs` 대신 `npx trustdex@0.9.0`을 사용하세요.
208
+ Claude를 시작하기 전에 게이트의 결과를 확인하세요. 기본적으로 `ALLOW` 항목만 노출되며, `ASK` 항목에는 검토가 필요합니다. 어댑터는 검사할 수 없는 설정을 조용히 신뢰하지 않고 거부합니다. 이 명령은 npm 0.5.0 이상과 소스 체크아웃에서 사용할 수 있습니다. 게시된 CLI를 실행하려면 `node ./bin/trustdex.mjs` 대신 `npx trustdex@0.10.0`을 사용하세요.
208
209
 
209
210
  지원되는 설정, PowerShell 오류 처리, 서명된 검토 및 Claude Desktop 워크플로는 [Claude에서 TrustDex 사용하기](docs/CLAUDE.ko.md)를 참고하세요.
210
211
 
@@ -306,6 +307,34 @@ Claude에서는 `--settings` 대신 스택 소스 플래그를 사용할 수 있
306
307
  [`schemas/tool-permission-bindings-diff-v1.schema.json`](schemas/tool-permission-bindings-diff-v1.schema.json)으로
307
308
  검증할 수 있습니다. 이는 검토 증거이며 런타임 권한 강제 기능이 아닙니다.
308
309
 
310
+ ## 실제 런타임 도구 증거
311
+
312
+ 권한이 있는 런타임 어댑터는 런타임, 캡처 방식, 서버 이름 및 도구 개수만 포함한
313
+ 최소 인벤토리를 생성할 수 있습니다. TrustDex는 비공개 파일을 찾거나 도구 호출을
314
+ 가로채지 않고 이 명시적 입력을 결합 스냅샷과 대조합니다.
315
+
316
+ ```bash
317
+ node ./bin/trustdex.mjs snapshot-runtime-tools \
318
+ .trustdex/claude-bindings.json \
319
+ ./runtime-tool-inventory.json \
320
+ --out .trustdex/runtime-tools.json
321
+
322
+ node ./bin/trustdex.mjs diff-runtime-tools \
323
+ .trustdex/approved-runtime-tools.json \
324
+ .trustdex/current-runtime-tools.json \
325
+ --json
326
+ ```
327
+
328
+ 관찰된 BLOCK 소스와 예상 밖 서버는 `block`, 관찰된 ASK 또는 광범위한 자동 권한
329
+ 연결은 `needs-review`가 됩니다. 인벤토리에 없는 설정 서버는 제한적으로만 변한
330
+ 상태입니다. 도구 개수 증가와 새로 관찰된 서버는 재검토를 요구합니다. 입력과 출력은
331
+ [`schemas/runtime-tool-inventory-v1.schema.json`](schemas/runtime-tool-inventory-v1.schema.json),
332
+ [`schemas/effective-runtime-tools-v1.schema.json`](schemas/effective-runtime-tools-v1.schema.json),
333
+ [`schemas/effective-runtime-tools-diff-v1.schema.json`](schemas/effective-runtime-tools-diff-v1.schema.json)으로
334
+ 검증할 수 있습니다. TrustDex는 전달된 증거의 형태와 다이제스트를 검증하지만 어댑터를
335
+ 인증하거나 인벤토리의 완전성을 증명하거나 런타임을 강제하지 않습니다. 도구 이름
336
+ 대신 개수만 보관하므로 개수는 같고 도구 집합만 바뀌는 대체는 비교 범위 밖입니다.
337
+
309
338
  ## 온라인 출처 관찰
310
339
 
311
340
  일반 검사는 계속 로컬에서만 수행됩니다. 다음 명령은 명시적으로 실행할 때만 네트워크 조회를 수행합니다.
@@ -451,7 +480,7 @@ node ./bin/trustdex.mjs verify .trustdex/trust-record.json \
451
480
  ```yaml
452
481
  - uses: actions/checkout@v4
453
482
 
454
- - uses: grigent/trustdex@v0.9.0
483
+ - uses: grigent/trustdex@v0.10.0
455
484
  with:
456
485
  config: ./mcp.json
457
486
  pack: official-first
@@ -473,7 +502,7 @@ node ./bin/trustdex.mjs verify .trustdex/trust-record.json \
473
502
 
474
503
  ## 로드맵
475
504
 
476
- 공개 로드맵은 [docs/ROADMAP.ko.md](docs/ROADMAP.ko.md)에서 관리합니다. 단기 작업은 실제 런타임 증거, 추가 에이전트 런타임 어댑터, 재현 가능한 통제 및 실제 파일럿 피드백에 중점을 둡니다. 로드맵 항목은 계획이며 약속이 아닙니다.
505
+ 공개 로드맵은 [docs/ROADMAP.ko.md](docs/ROADMAP.ko.md)에서 관리합니다. 단기 작업은 인증된 런타임 증거 생성자, 안정적인 옵트인 어댑터, 재현 가능한 통제 및 실제 파일럿 피드백에 중점을 둡니다. 로드맵 항목은 계획이며 약속이 아닙니다.
477
506
 
478
507
  ## 보안
479
508
 
package/README.md CHANGED
@@ -71,6 +71,7 @@ TrustDex deliberately does not infer "official" status from names, stars, or bra
71
71
  - verify user-supplied package bytes against npm SRI or MCP Registry SHA-256 metadata
72
72
  - bind integrity-backed trust evidence to the configured package version and block mismatches
73
73
  - bind each Claude/Codex MCP source decision and provenance state to its automatic tool grant without retaining tool names or rule values
74
+ - reconcile explicit, value-free runtime MCP inventories with reviewed bindings and detect blocked or unexpected loaded servers
74
75
 
75
76
  ## Compatibility
76
77
 
@@ -83,8 +84,8 @@ Requires Node.js 20+.
83
84
  Run directly from npm:
84
85
 
85
86
  ```bash
86
- npx trustdex@0.9.0 --help
87
- npx trustdex@0.9.0 inspect ./mcp.json --pack strict --policy ./trustdex.policy.json
87
+ npx trustdex@0.10.0 --help
88
+ npx trustdex@0.10.0 inspect ./mcp.json --pack strict --policy ./trustdex.policy.json
88
89
  ```
89
90
 
90
91
  Or work from a source checkout:
@@ -213,7 +214,7 @@ claude --strict-mcp-config --mcp-config .trustdex/claude-mcp.json
213
214
  Check the gate's result before starting Claude. Only `ALLOW` entries are exposed by
214
215
  default; `ASK` entries require review. The adapter rejects settings it cannot
215
216
  inspect instead of silently trusting them. These commands are available in npm 0.5.0 and later, and from a source checkout.
216
- Use `npx trustdex@0.9.0` in place of `node ./bin/trustdex.mjs` to run the published CLI.
217
+ Use `npx trustdex@0.10.0` in place of `node ./bin/trustdex.mjs` to run the published CLI.
217
218
 
218
219
  See [Using TrustDex with Claude](docs/CLAUDE.md) for supported settings, PowerShell
219
220
  error handling, signed review, and the Claude Desktop workflow.
@@ -322,6 +323,36 @@ permission specifiers, and tool names. Validate them with
322
323
  and [`schemas/tool-permission-bindings-diff-v1.schema.json`](schemas/tool-permission-bindings-diff-v1.schema.json).
323
324
  This is review evidence, not runtime permission enforcement.
324
325
 
326
+ ## Effective runtime tool evidence
327
+
328
+ An authorized runtime adapter can emit a minimal inventory containing only runtime,
329
+ capture method, server names, and tool counts. TrustDex reconciles that explicit input
330
+ with a binding snapshot without searching private files or intercepting tool calls:
331
+
332
+ ```bash
333
+ node ./bin/trustdex.mjs snapshot-runtime-tools \
334
+ .trustdex/claude-bindings.json \
335
+ ./runtime-tool-inventory.json \
336
+ --out .trustdex/runtime-tools.json
337
+
338
+ node ./bin/trustdex.mjs diff-runtime-tools \
339
+ .trustdex/approved-runtime-tools.json \
340
+ .trustdex/current-runtime-tools.json \
341
+ --json
342
+ ```
343
+
344
+ Observed BLOCK sources and unexpected servers produce `block`; observed ASK or broad
345
+ automatic-grant bindings produce `needs-review`; configured servers absent from the
346
+ inventory are restriction-only. Tool-count growth and newly observed servers require
347
+ review. The input and output schemas are
348
+ [`schemas/runtime-tool-inventory-v1.schema.json`](schemas/runtime-tool-inventory-v1.schema.json),
349
+ [`schemas/effective-runtime-tools-v1.schema.json`](schemas/effective-runtime-tools-v1.schema.json),
350
+ and [`schemas/effective-runtime-tools-diff-v1.schema.json`](schemas/effective-runtime-tools-diff-v1.schema.json).
351
+ TrustDex validates the supplied evidence shape and digest but does not authenticate the
352
+ adapter, prove that the inventory is complete, or enforce the runtime. Because the
353
+ contract retains counts instead of tool names, same-count tool-set substitutions remain
354
+ outside this comparison.
355
+
325
356
  ## Online provenance observations
326
357
 
327
358
  Normal inspection remains local-only. These commands perform an explicit network lookup only when invoked:
@@ -467,7 +498,7 @@ The private key should never be committed.
467
498
  ```yaml
468
499
  - uses: actions/checkout@v4
469
500
 
470
- - uses: grigent/trustdex@v0.9.0
501
+ - uses: grigent/trustdex@v0.10.0
471
502
  with:
472
503
  config: ./mcp.json
473
504
  pack: official-first
@@ -489,7 +520,7 @@ For production CI, pin the action to a reviewed commit SHA rather than a moving
489
520
 
490
521
  ## Roadmap
491
522
 
492
- The public roadmap is maintained in [docs/ROADMAP.md](docs/ROADMAP.md). Near-term work focuses on effective-runtime evidence, additional agent-runtime adapters, reproducible controls, and real-world pilot feedback. Roadmap items are intentions, not promises.
523
+ The public roadmap is maintained in [docs/ROADMAP.md](docs/ROADMAP.md). Near-term work focuses on authenticated runtime-evidence producers, stable opt-in adapters, reproducible controls, and real-world pilot feedback. Roadmap items are intentions, not promises.
493
524
 
494
525
  ## Security
495
526
 
package/bin/trustdex.mjs CHANGED
@@ -36,6 +36,10 @@ import {
36
36
  createToolPermissionBindingSnapshot,
37
37
  diffToolPermissionBindingSnapshots
38
38
  } from '../src/bindings.mjs';
39
+ import {
40
+ createEffectiveRuntimeEvidence,
41
+ diffEffectiveRuntimeEvidence
42
+ } from '../src/runtime-evidence.mjs';
39
43
  import { gateMcpConfig } from '../src/gate.mjs';
40
44
  import { assessReview } from '../src/review.mjs';
41
45
  import {
@@ -108,6 +112,8 @@ Usage:
108
112
  trustdex snapshot-codex-bindings <config.toml> --out bindings.json
109
113
  [--trust-store trust-store.json] [--pack ...]
110
114
  trustdex diff-bindings <before.json> <after.json> [--json]
115
+ trustdex snapshot-runtime-tools <bindings.json> <inventory.json> --out runtime.json
116
+ trustdex diff-runtime-tools <before.json> <after.json> [--json]
111
117
  trustdex policy <strict|official-first|development>
112
118
 
113
119
  trustdex keygen --private trustdex-private.pem --public trustdex-public.pem
@@ -380,6 +386,23 @@ function printBindingDiff(diff) {
380
386
  }
381
387
  }
382
388
 
389
+ function printRuntimeEvidenceDiff(diff) {
390
+ if (diff.status === 'unchanged') {
391
+ console.log('UNCHANGED: effective runtime tool evidence matches the baseline.');
392
+ return;
393
+ }
394
+ console.log(diff.status === 'restricted'
395
+ ? 'RESTRICTED: observed runtime tool exposure became more restrictive.'
396
+ : 'NEEDS_REVIEW: effective runtime tool evidence changed.');
397
+ for (const change of diff.changes) {
398
+ const subject = change.name ? `${change.name}.` : '';
399
+ const details = change.before !== null || change.after !== null
400
+ ? ` (${String(change.before)} -> ${String(change.after)})`
401
+ : '';
402
+ console.log(`${change.impact.toUpperCase()} ${change.type}: ${subject}${change.field}${details}`);
403
+ }
404
+ }
405
+
383
406
  async function main() {
384
407
  const args = process.argv.slice(2);
385
408
  const command = args[0];
@@ -530,6 +553,22 @@ async function main() {
530
553
  return;
531
554
  }
532
555
 
556
+ if (command === 'snapshot-runtime-tools') {
557
+ const bindingsPath = args[1];
558
+ const inventoryPath = args[2];
559
+ const out = getFlag(args, '--out');
560
+ if (!bindingsPath || !inventoryPath || !out) {
561
+ throw new Error('snapshot-runtime-tools requires <bindings.json> <inventory.json> and --out <runtime.json>.');
562
+ }
563
+ const snapshot = createEffectiveRuntimeEvidence(
564
+ await readJson(bindingsPath),
565
+ await readJson(inventoryPath)
566
+ );
567
+ await writeFileSafe(out, `${JSON.stringify(snapshot, null, 2)}\n`);
568
+ console.log(`Wrote ${out}\nStatus: ${snapshot.status}\nDigest: ${snapshot.digest}`);
569
+ return;
570
+ }
571
+
533
572
  if (command === 'diff-permissions') {
534
573
  const beforePath = args[1];
535
574
  const afterPath = args[2];
@@ -562,6 +601,22 @@ async function main() {
562
601
  return;
563
602
  }
564
603
 
604
+ if (command === 'diff-runtime-tools') {
605
+ const beforePath = args[1];
606
+ const afterPath = args[2];
607
+ if (!beforePath || !afterPath) {
608
+ throw new Error('diff-runtime-tools requires <before.json> <after.json>.');
609
+ }
610
+ const diff = diffEffectiveRuntimeEvidence(
611
+ await readJson(beforePath),
612
+ await readJson(afterPath)
613
+ );
614
+ if (hasFlag(args, '--json')) console.log(JSON.stringify(diff, null, 2));
615
+ else printRuntimeEvidenceDiff(diff);
616
+ if (diff.status === 'needs-review') process.exitCode = 1;
617
+ return;
618
+ }
619
+
565
620
  if (command === 'gate-codex') {
566
621
  const configPath = args[1];
567
622
  const out = getFlag(args, '--out');
@@ -14,6 +14,7 @@ TrustDex는 관찰, 정책, 게이트 및 검토 증거를 분리하는 의존
14
14
  4. 정책 엔진이 ALLOW, ASK 또는 BLOCK을 생성합니다.
15
15
  5. 게이트가 승인된 설정만 출력합니다.
16
16
  6. MCP 스냅샷, 권한 상태 스냅샷, 출처–권한 결합 스냅샷 및 서명된 신뢰 기록을 통해 이후 드리프트를 검토할 수 있습니다.
17
+ 7. 명시적으로 전달된 값 없는 런타임 인벤토리를 검토된 연결과 대조할 수 있습니다. TrustDex는 런타임을 자동으로 찾거나 가로채지 않습니다.
17
18
 
18
19
  게이트가 강제 적용 경계입니다. 보고서만으로는 에이전트가 검토되지 않은 확장을 불러오는 것을 막을 수 없습니다.
19
20
 
@@ -33,6 +34,7 @@ TrustDex는 관찰, 정책, 게이트 및 검토 증거를 분리하는 의존
33
34
  | `src/snapshot.mjs` | 결정론적 신뢰 관련 상태 및 드리프트 |
34
35
  | `src/posture.mjs` | 값이 제거된 Claude/Codex 권한 상태 스냅샷 및 자율성 확대 분류 |
35
36
  | `src/bindings.mjs` | 값이 제거된 MCP 소스/출처와 자동 도구 권한의 연결 및 드리프트 분류 |
37
+ | `src/runtime-evidence.mjs` | 명시적 런타임 인벤토리 검증, 실제 경계 대조 및 노출 드리프트 |
36
38
  | `src/trust-record.mjs` | Ed25519 검토 기록 서명 및 검증 |
37
39
  | `src/review.mjs` | 서명된 기준선 비교 |
38
40
 
@@ -43,6 +45,7 @@ TrustDex는 관찰, 정책, 게이트 및 검토 증거를 분리하는 의존
43
45
  - 권한 규칙 값, 쓰기 가능 루트 경로, 훅/도우미 본문 및 관련 없는 설정 값은 에이전트 설정 보고서에 보관해서는 안 됩니다.
44
46
  - 권한 상태 스냅샷은 소스 경로와 설정 값을 제외해야 하며, 새 자율성 또는 정책 의미 변경은 검토를 요구해야 합니다.
45
47
  - 결합 스냅샷은 권한 지정자와 도구 이름을 제외해야 하며, ASK/BLOCK 소스의 자동 권한, 와일드카드 확대, 출처 변경 또는 모호하거나 연결되지 않은 규칙을 안전한 연결로 표시해서는 안 됩니다.
48
+ - 런타임 증거는 원시 도구 목록과 예상 밖 필드를 거부하고, 관찰된 BLOCK/미설정 서버를 차단하며, 새로 관찰된 서버나 도구 개수 증가를 검토가 필요한 확대로 처리해야 합니다.
46
49
  - 알 수 없는 증거가 신뢰로 바뀌어서는 안 됩니다.
47
50
  - 차단 신호의 심각도를 출처 정보로 낮춰서는 안 됩니다.
48
51
  - 지원하지 않는 보안 관련 구문은 안전하게 실패해야 합니다.
@@ -57,6 +60,11 @@ TrustDex는 관찰, 정책, 게이트 및 검토 증거를 분리하는 의존
57
60
  ALLOW 소스를 가리킨다는 뜻이며, 도구 구현이 안전하거나 런타임이 해당 파일을
58
61
  로드했다는 뜻이 아닙니다.
59
62
 
63
+ 런타임 증거는 권한이 있는 어댑터가 제공하는 세 번째 옵트인 투영을 추가합니다.
64
+ 계약에는 도구 이름, 엔드포인트, 경로 또는 자격 증명이 아니라 서버 이름과 도구
65
+ 개수만 포함됩니다. 인벤토리 다이제스트는 내부 상태만 검증합니다. 운영자는 별도의
66
+ 신뢰할 수 있는 채널로 생성자를 인증하고 완전성을 확인해야 합니다.
67
+
60
68
  ## 의존성 정책
61
69
 
62
70
  현재 런타임 코드는 Node.js 기본 제공 기능만 사용합니다. 새로운 의존성을 추가하려면 해당 기능을 플랫폼만으로 합리적으로 구현할 수 없는 이유, 패키지의 유지관리 및 보안 상태, 공급망 경계에 미치는 영향을 설명하는 이슈가 필요합니다.
@@ -14,6 +14,7 @@ TrustDex is a dependency-free Node.js CLI that separates observation, policy, ga
14
14
  4. The policy engine produces ALLOW, ASK, or BLOCK.
15
15
  5. A gate emits only the approved configuration.
16
16
  6. MCP snapshots, permission posture snapshots, provenance-permission binding snapshots, and signed trust records make later drift reviewable.
17
+ 7. An explicitly supplied value-free runtime inventory can be reconciled with reviewed bindings; TrustDex does not discover or intercept the runtime.
17
18
 
18
19
  The gate is the enforcement boundary. Reports alone do not prevent an agent from loading an unreviewed extension.
19
20
 
@@ -33,6 +34,7 @@ The gate is the enforcement boundary. Reports alone do not prevent an agent from
33
34
  | src/snapshot.mjs | Deterministic trust-relevant state and drift |
34
35
  | src/posture.mjs | Value-free Claude/Codex permission posture snapshots and autonomy-expansion classification |
35
36
  | src/bindings.mjs | Value-free MCP source/provenance to automatic-tool-grant bindings and drift classification |
37
+ | src/runtime-evidence.mjs | Explicit runtime inventory validation, effective-boundary reconciliation, and exposure drift |
36
38
  | src/trust-record.mjs | Ed25519 review-record signing and verification |
37
39
  | src/review.mjs | Signed-baseline comparison |
38
40
 
@@ -43,6 +45,7 @@ The gate is the enforcement boundary. Reports alone do not prevent an agent from
43
45
  - Permission rule values, writable-root paths, hook/helper bodies, and unrelated settings values must not be retained in agent-settings reports.
44
46
  - Permission posture snapshots must omit source paths and setting values; new autonomy or changed policy semantics must require review.
45
47
  - Binding snapshots must omit permission specifiers and tool names; an automatic grant to ASK/BLOCK, wildcard expansion, provenance change, or ambiguous/unbound rule must never appear as safely bound.
48
+ - Runtime evidence must reject raw tool lists and unexpected fields, block observed BLOCK/unconfigured servers, and treat newly observed servers or tool-count growth as reviewable expansion.
46
49
  - Unknown evidence must not become trust.
47
50
  - A blocking signal must not be lowered by provenance.
48
51
  - Unsupported security-relevant syntax must fail closed.
@@ -62,6 +65,11 @@ discover effective settings or intercept tool calls. A `bound` result means the
62
65
  observed scoped grant points to an ALLOW source under the supplied evidence, not that
63
66
  the tool implementation is safe or that the runtime loaded those files.
64
67
 
68
+ Runtime evidence adds a third, opt-in projection supplied by an authorized adapter. Its
69
+ contract contains server names and tool counts, not tool names, endpoints, paths, or
70
+ credentials. The inventory digest authenticates internal state only; an operator must
71
+ authenticate the producer and confirm completeness through a separate trusted channel.
72
+
65
73
  ## Dependency policy
66
74
 
67
75
  Runtime code currently uses only Node.js built-ins. A new dependency requires an issue explaining why the feature cannot reasonably be implemented with the platform, the package's maintenance and security posture, and the effect on the supply-chain boundary.
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.0`을 사용하거나, 소스 체크아웃에서 명령을 직접 사용하세요.
9
+ Claude 전용 명령은 TrustDex 0.5.0 이상에서 사용할 수 있습니다. 게시된 CLI를 실행하려면 아래 예제의 `node ./bin/trustdex.mjs` 대신 `npx trustdex@0.10.0`을 사용하거나, 소스 체크아웃에서 명령을 직접 사용하세요.
10
10
 
11
11
  ## 지원되는 설정
12
12
 
@@ -159,6 +159,16 @@ node ./bin/trustdex.mjs snapshot-claude-bindings ./.mcp.json \
159
159
  검토본과 현재 기록은 `diff-bindings`로 비교하며, 확대 또는 출처/정책 드리프트는
160
160
  종료 코드 `1`을 반환합니다.
161
161
 
162
+ ### 명시적 런타임 인벤토리 비교
163
+
164
+ 권한이 있는 통합이 Claude 세션에 보이는 MCP 서버를 가져올 수 있다면 서버 이름과
165
+ 도구 개수만 포함하는 `agent-runtime-tool-inventory` JSON을 생성하게 하세요. 그다음
166
+ `snapshot-runtime-tools <bindings> <inventory> --out <evidence>`를 실행합니다. 로드된
167
+ BLOCK 소스와 `.mcp.json`에 없는 서버는 결과를 차단하고, 검토가 필요한 연결이
168
+ 로드되면 계속 검토가 필요합니다. `diff-runtime-tools`는 새로 보이는 서버와 도구
169
+ 개수 증가를 감지합니다. TrustDex는 Claude를 호출하거나 세션 파일을 찾거나 어댑터를
170
+ 인증하거나 인벤토리의 완전성을 증명하지 않습니다.
171
+
162
172
  ## 서명된 검토 및 드리프트
163
173
 
164
174
  검토 워크플로 전체에서 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.9.0` in place of `node ./bin/trustdex.mjs` in the examples
13
+ Use `npx trustdex@0.10.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
@@ -208,6 +208,16 @@ names and grant shape only. It omits permission specifiers and tool names, so sa
208
208
  changes among scoped tools remain a source-review responsibility. Compare reviewed and
209
209
  current records with `diff-bindings`; expansion or provenance/policy drift exits `1`.
210
210
 
211
+ ### Compare an explicit runtime inventory
212
+
213
+ If an authorized integration can obtain the MCP servers visible to a Claude session,
214
+ have it emit `agent-runtime-tool-inventory` JSON with server names and tool counts only.
215
+ Then run `snapshot-runtime-tools <bindings> <inventory> --out <evidence>`. Loaded BLOCK
216
+ sources and servers absent from `.mcp.json` block the result; loaded review-required
217
+ bindings remain review-required. `diff-runtime-tools` detects newly visible servers and
218
+ tool-count growth. TrustDex does not call Claude, discover session files, authenticate
219
+ the adapter, or prove the inventory is complete.
220
+
211
221
  ## Signed review and drift
212
222
 
213
223
  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.9.0 inspect-codex ~/.codex/config.toml --pack strict
18
+ npx trustdex@0.10.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.9.0 inspect-codex ~/.codex/config.toml --pack strict
25
25
  ### 2. 게이트된 사본 작성
26
26
 
27
27
  ```bash
28
- npx trustdex@0.9.0 gate-codex ~/.codex/config.toml \
28
+ npx trustdex@0.10.0 gate-codex ~/.codex/config.toml \
29
29
  --pack official-first \
30
30
  --trust-store ./trust-store.json \
31
31
  --out ./gated-config.toml
@@ -141,13 +141,22 @@ node ./bin/trustdex.mjs diff-bindings \
141
141
  이름, 엔드포인트 경로 및 관련 없는 값은 제외합니다. 이 정적 연결은 설정이 실제로
142
142
  로드되었음을 증명하거나 Codex 런타임 샌드박스를 강제하지 않습니다.
143
143
 
144
+ ### 명시적 런타임 인벤토리 비교
145
+
146
+ 권한이 있는 Codex 통합은 해당 세션에 보이는 MCP 서버 이름과 서버별 도구 개수를
147
+ 담은 `agent-runtime-tool-inventory` JSON을 제공할 수 있습니다.
148
+ `snapshot-runtime-tools <bindings> <inventory> --out <evidence>`로 검토된 Codex
149
+ 결합 스냅샷과 대조하고, `diff-runtime-tools`로 노출 확대를 게이트합니다. 이는 옵트인
150
+ 증거 어댑터 계약이며 자동 설정 탐색, 공식 Codex 내보내기 형식 또는 런타임 강제가
151
+ 아닙니다. 캡처 경로와 샌드박스는 클라이언트에서 별도로 확인하세요.
152
+
144
153
  ### 스킬 및 플러그인
145
154
 
146
155
  에이전트 스킬과 플러그인 매니페스트도 같은 방법으로 검사할 수 있습니다.
147
156
 
148
157
  ```bash
149
- npx trustdex@0.9.0 inspect-skill ./path/to/SKILL.md --pack strict
150
- npx trustdex@0.9.0 inspect-plugin ./path/to/plugin.json --pack strict
158
+ npx trustdex@0.10.0 inspect-skill ./path/to/SKILL.md --pack strict
159
+ npx trustdex@0.10.0 inspect-plugin ./path/to/plugin.json --pack strict
151
160
  ```
152
161
 
153
162
  이 명령은 파이프로 연결된 셸 설치 프로그램, 민감한 경로 참조, 네트워크 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.9.0 inspect-codex ~/.codex/config.toml --pack strict
18
+ npx trustdex@0.10.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.9.0 gate-codex ~/.codex/config.toml \
28
+ npx trustdex@0.10.0 gate-codex ~/.codex/config.toml \
29
29
  --pack official-first \
30
30
  --trust-store ./trust-store.json \
31
31
  --out ./gated-config.toml
@@ -157,13 +157,23 @@ requires review even for an ALLOW source. Wildcard tool scope is recorded as a b
157
157
  tool names, endpoint paths, and unrelated values are omitted. This static binding does
158
158
  not prove the configuration is loaded or enforce the Codex runtime sandbox.
159
159
 
160
+ ### Compare an explicit runtime inventory
161
+
162
+ An authorized Codex integration can provide `agent-runtime-tool-inventory` JSON with
163
+ the MCP server names visible to that session and a tool count for each server. Run
164
+ `snapshot-runtime-tools <bindings> <inventory> --out <evidence>` to reconcile it with
165
+ the reviewed Codex binding snapshot, and `diff-runtime-tools` to gate exposure growth.
166
+ This is an opt-in evidence adapter contract, not automatic config discovery, an official
167
+ Codex export format, or runtime enforcement. Confirm the capture path and sandbox in the
168
+ client separately.
169
+
160
170
  ### Skills and plugins
161
171
 
162
172
  Agent skills and plugin manifests can be inspected the same way:
163
173
 
164
174
  ```bash
165
- npx trustdex@0.9.0 inspect-skill ./path/to/SKILL.md --pack strict
166
- npx trustdex@0.9.0 inspect-plugin ./path/to/plugin.json --pack strict
175
+ npx trustdex@0.10.0 inspect-skill ./path/to/SKILL.md --pack strict
176
+ npx trustdex@0.10.0 inspect-plugin ./path/to/plugin.json --pack strict
167
177
  ```
168
178
 
169
179
  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.
@@ -46,6 +46,7 @@ TrustDex는 이 표면에 대한 노출 전 통제를 연구하고 구현합니
46
46
  | 증거에서 비밀 값 제외 | 출력, 스냅샷 및 설정 지문에서 비밀 값을 제거하는 테스트 |
47
47
  | 승인 상태의 드리프트 표시 | 결정론적 스냅샷, Ed25519 검토 기록 및 재검사 명령 |
48
48
  | 소스 신뢰와 자동 권한 조정 | 값이 제거된 Claude/Codex 결합 스냅샷, 스키마, 차이 및 비활성 픽스처 |
49
+ | 검토된 의도와 명시적 런타임 증거 비교 | 값 없는 인벤토리 계약, 실제 경계 대조 및 노출 드리프트 테스트 |
49
50
  | 공급망 모호성 감소 | 명시적 출처 관찰, 아티팩트 다이제스트 검증, 릴리스 체크섬, SBOM 및 빌드 증명 |
50
51
  | 연구 재현성 유지 | 비활성 픽스처, 문서화된 기대 결과, 크로스 플랫폼 CI 및 CodeQL |
51
52
 
@@ -64,6 +65,11 @@ ALLOW 결과는 여전히 관찰된 증거에 대한 정책 결과일 뿐입니
64
65
  보관하지 않고 광범위하거나 차단된 권한을 검토할 수 있게 합니다. 이는 정적
65
66
  증거이며 런타임 호출을 강제하지 않습니다.
66
67
 
68
+ `snapshot-runtime-tools`는 권한이 있는 런타임 어댑터의 값 없는 인벤토리를 받아
69
+ 해당 연결과 대조합니다. 도구 이름을 보관하지 않고 로드된 차단 소스와 예상 밖
70
+ 서버를 드러낼 수 있습니다. 어댑터는 TrustDex 신뢰 경계 밖에 있으므로 신원, 전송
71
+ 및 완전성에는 독립적인 통제가 필요합니다.
72
+
67
73
  ## CVP 신청 경계
68
74
 
69
75
  Anthropic의 현재 Cyber Verification Program 신청은 검증 가능한 개인 또는 조직 정보, 보안 작업 설명 및 요청 티어에 해당하는 통제 준수 확인을 요구합니다. 이 저장소는 보안 작업 설명을 뒷받침할 수 있지만, 저장소 변경만으로 운영자 신원을 증명하거나 계정·기기 통제를 충족할 수는 없습니다.
@@ -46,6 +46,7 @@ This work is defensive engineering. It does not require credential theft, persis
46
46
  | Keep secrets out of evidence | tests for redaction from output, snapshots, and configuration fingerprints |
47
47
  | Make approval drift visible | deterministic snapshots, Ed25519 review records, and recheck commands |
48
48
  | Reconcile source trust with automatic grants | value-free Claude/Codex binding snapshots, schemas, diffs, and inert fixtures |
49
+ | Compare reviewed intent with explicit runtime evidence | value-free inventory contract, effective-boundary reconciliation, and exposure drift tests |
49
50
  | Reduce supply-chain ambiguity | explicit provenance observations, artifact digest verification, release checksums, SBOMs, and build attestations |
50
51
  | Keep research reproducible | inert fixtures, documented expectations, cross-platform CI, and CodeQL |
51
52
 
@@ -70,6 +71,12 @@ source decision/provenance state to its automatic tool-grant shape. This makes b
70
71
  or blocked grants reviewable without retaining tool names or permission specifiers.
71
72
  It remains static evidence and does not enforce runtime calls.
72
73
 
74
+ `snapshot-runtime-tools` accepts a value-free inventory from an authorized runtime
75
+ adapter and reconciles it with those bindings. This can surface loaded blocked sources
76
+ and unexpected servers without retaining tool names. The adapter remains outside the
77
+ TrustDex trust boundary, so its identity, transport, and completeness need independent
78
+ controls.
79
+
73
80
  ## CVP application boundary
74
81
 
75
82
  Anthropic's current Cyber Verification Program application asks for verifiable identity or organization details, a description of security work, and an attestation to the controls for the requested tier. This repository can support the security-work description, but repository changes cannot establish the operator's identity or satisfy account and device controls by themselves.
@@ -94,6 +94,24 @@ Claude 및 Codex 자동 도구 권한과 연결합니다. 회귀 테스트는
94
94
  스냅샷을 인증할 수 있지만 스키마나 서명 모두 런타임 강제 또는 도구 안전성을
95
95
  증명하지 않습니다.
96
96
 
97
+ ## 실제 런타임 인벤토리 사례
98
+
99
+ `runtime-before.json`, `runtime-after.json` 및 `test/runtime-evidence.test.mjs`는 옵트인
100
+ 런타임 인벤토리 계약을 검사합니다. 다음을 요구합니다.
101
+
102
+ - 재검토가 필요 없는 관찰된 ALLOW 소스는 일치
103
+ - 관찰된 BLOCK 소스 또는 설정되지 않은 서버는 실제 경계를 차단
104
+ - 관찰된 ASK/광범위 권한 연결은 재검토
105
+ - 설정되었지만 관찰되지 않은 서버는 제한적으로만 변경
106
+ - 새로 관찰된 서버와 도구 개수 증가는 확대
107
+ - 원시 도구 목록, 중복 서버 이름, 예상 밖 필드, 잘못된 타임스탬프 및 변조된 증거는 안전하게 실패
108
+ - 출력에는 서버 이름, 도구 개수, 고정 정책/출처 열거 값 및 다이제스트만 보관
109
+
110
+ 픽스처는 어댑터 형태의 증거이지 실제 Claude 또는 Codex 캡처가 아닙니다. TrustDex는
111
+ 인벤토리의 진위나 완전성을 판단할 수 없습니다. 배포 시 생성자와 전송을 별도로
112
+ 보호해야 합니다. 값 없는 계약이 도구 이름을 의도적으로 제외하므로 도구 개수는
113
+ 같고 집합만 바뀌는 대체는 감지할 수 없습니다.
114
+
97
115
  ## 병합 설정 스택 사례
98
116
 
99
117
  `test/settings-stack.test.mjs`는 두 런타임의 명시적 소스 스택을 검사합니다. 다음을 요구합니다.
@@ -96,6 +96,24 @@ The snapshot schemas validate the stable report shape. A signed trust record can
96
96
  authenticate a reviewed snapshot, but neither the schema nor signature proves runtime
97
97
  enforcement or tool safety.
98
98
 
99
+ ## Effective runtime inventory cases
100
+
101
+ `runtime-before.json`, `runtime-after.json`, and `test/runtime-evidence.test.mjs`
102
+ exercise the opt-in runtime inventory contract. They require:
103
+
104
+ - an observed ALLOW source with no review-required binding to match
105
+ - an observed BLOCK source or unconfigured server to block the effective boundary
106
+ - an observed ASK/broad-grant binding to require review
107
+ - configured but unobserved servers to be restriction-only
108
+ - newly observed servers and tool-count growth to be expansion
109
+ - raw tool lists, duplicate server names, extra fields, invalid timestamps, and tampered evidence to fail closed
110
+ - output to retain only server names, tool counts, fixed policy/provenance enums, and digests
111
+
112
+ The fixture is adapter-shaped evidence, not a live Claude or Codex capture. TrustDex
113
+ cannot determine whether an inventory is authentic or complete; deployments must secure
114
+ the producer and transport separately. Same-count tool-set substitutions are invisible
115
+ because the value-free contract intentionally omits tool names.
116
+
99
117
  ## Merged settings stack cases
100
118
 
101
119
  `test/settings-stack.test.mjs` exercises explicit source stacks for both runtimes. It requires:
@@ -16,6 +16,8 @@ TrustDex는 초기 단계입니다. 이 로드맵은 방향을 공유하며 릴
16
16
  검사, 스키마 v2 소스 구성 증거 및 안전하게 실패하는 스택 테스트를 추가합니다.
17
17
  - TrustDex 0.9.0은 MCP 정책/출처 결과와 자동 도구 권한 사이의 값 없는 Claude/Codex
18
18
  연결, 버전 지정 스키마, 드리프트 검토 및 비활성 픽스처를 추가합니다.
19
+ - TrustDex 0.10.0은 명시적인 값 없는 런타임 인벤토리 계약, 실제 경계 대조,
20
+ 노출 드리프트 검토, 버전 지정 스키마 및 픽스처를 추가합니다.
19
21
 
20
22
  ## 현재: 경계 강화
21
23
 
@@ -28,10 +30,10 @@ TrustDex는 초기 단계입니다. 이 로드맵은 방향을 공유하며 릴
28
30
 
29
31
  ## 다음: 실제 런타임 증거 강화
30
32
 
31
- - 버전이 지정된 권한 상태 JSON 스키마를 추가 결정 및 런타임으로 확장
32
- - 권고형 설정 검사가 런타임 및 운영체제 샌드박스와 결합되는 방식 문서화
33
- - 비공개 파일을 조용히 찾지 않으면서 런타임이 생성한 실제 설정 증거 추가
34
- - 호출을 가로채지 않고 런타임이 생성한 MCP/도구 목록을 받는 옵트인 어댑터 추가
33
+ - 런타임이 권한 있는 안정적 인터페이스를 제공할 때만 구체적인 옵트인 어댑터 게시
34
+ - 장기 공유 비밀 없이 인벤토리 생성자와 전송 인증
35
+ - 값 없는 보고서를 유지하면서 MCP 표시 범위 밖으로 실제 증거 확장
36
+ - 지원하는 어댑터/런타임 버전의 테스트 기반 호환성 매트릭스 게시
35
37
 
36
38
  ## 그다음: 무결성 증명
37
39
 
package/docs/ROADMAP.md CHANGED
@@ -16,6 +16,8 @@ TrustDex is early-stage. This roadmap communicates direction and is not a releas
16
16
  and Codex precedence, schema-v2 source topology evidence, and fail-closed stack tests.
17
17
  - TrustDex 0.9.0 adds value-free Claude/Codex bindings between MCP policy/provenance
18
18
  results and automatic tool grants, versioned schemas, drift review, and inert fixtures.
19
+ - TrustDex 0.10.0 adds an explicit value-free runtime inventory contract, effective
20
+ boundary reconciliation, exposure-drift review, versioned schemas, and fixtures.
19
21
 
20
22
  ## Now: harden the boundary
21
23
 
@@ -28,10 +30,10 @@ TrustDex is early-stage. This roadmap communicates direction and is not a releas
28
30
 
29
31
  ## Next: strengthen effective-runtime evidence
30
32
 
31
- - extend the versioned permission-posture JSON schemas to additional decisions and runtimes
32
- - document how advisory settings checks compose with runtime and operating-system sandboxes
33
- - add runtime-produced effective-setting evidence without silently discovering private files
34
- - add opt-in adapters for runtime-produced MCP/tool inventories without intercepting calls
33
+ - ship concrete opt-in adapters only where a runtime exposes an authorized stable interface
34
+ - authenticate inventory producers and transports without introducing long-lived shared secrets
35
+ - extend effective evidence beyond MCP visibility while retaining value-free reports
36
+ - publish a tested compatibility matrix for supported adapter/runtime versions
35
37
 
36
38
  ## Then: prove integrity
37
39
 
@@ -26,6 +26,8 @@ TrustDex는 하나의 좁은 질문을 다룹니다.
26
26
  - 명시적으로 전달된 Claude 또는 Codex 설정 소스 사이의 우선순위 변경
27
27
  - 서버의 정책/출처 결과와 더 이상 일치하지 않는 자동 MCP 도구 권한
28
28
  - 실제 도구 경계를 가리는 와일드카드, 일치하지 않거나 모호한 권한
29
+ - 차단·검토 필요·미설정 MCP 서버를 노출한다고 명시적으로 보고한 런타임 인벤토리
30
+ - 서버 표시 범위 또는 도구 개수로 확대되는 실제 런타임 인벤토리
29
31
 
30
32
  ## 신뢰 경계
31
33
 
@@ -54,6 +56,8 @@ TrustDex는 익숙한 프로젝트 이름, 스타 수, 패키지 이름 또는
54
56
  - 서명되지 않은 권한 상태 스냅샷 작성자의 인증
55
57
  - 결합 스냅샷이 실행 중인 에이전트가 실제로 불러온 파일을 반영함을 증명하는 것
56
58
  - 개별 MCP 도구 호출을 런타임에서 가로채거나 강제하는 것
59
+ - 인벤토리 생성자 인증, 인벤토리 완전성 증명 또는 침해된 어댑터의 거짓 보고 방지
60
+ - 실제 Claude/Codex 세션을 자동으로 찾거나 비공개 상태를 읽는 것
57
61
 
58
62
  ## 중요한 실패 모드
59
63