trustdex 0.8.0 → 0.9.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 +36 -5
- package/README.md +36 -5
- package/bin/trustdex.mjs +127 -3
- package/docs/ARCHITECTURE.ko.md +9 -1
- package/docs/ARCHITECTURE.md +9 -1
- package/docs/CLAUDE.ko.md +23 -1
- package/docs/CLAUDE.md +22 -1
- package/docs/CODEX.ko.md +25 -4
- package/docs/CODEX.md +25 -4
- package/docs/DEFENSIVE_USE_CASE.ko.md +6 -0
- package/docs/DEFENSIVE_USE_CASE.md +6 -0
- package/docs/EVALUATION.ko.md +17 -0
- package/docs/EVALUATION.md +17 -0
- package/docs/ROADMAP.ko.md +4 -2
- package/docs/ROADMAP.md +4 -2
- package/docs/THREAT_MODEL.ko.md +4 -0
- package/docs/THREAT_MODEL.md +4 -0
- package/examples/adversarial/README.ko.md +2 -0
- package/examples/adversarial/README.md +2 -0
- package/examples/adversarial/bindings/README.ko.md +24 -0
- package/examples/adversarial/bindings/README.md +25 -0
- package/examples/adversarial/bindings/claude.mcp.json +12 -0
- package/examples/adversarial/bindings/claude.settings.json +9 -0
- package/examples/adversarial/bindings/codex.toml +9 -0
- package/examples/adversarial/bindings/expected.json +15 -0
- package/examples/adversarial/bindings/trust-store.json +15 -0
- package/package.json +3 -3
- package/schemas/tool-permission-bindings-diff-v1.schema.json +70 -0
- package/schemas/tool-permission-bindings-v1.schema.json +94 -0
- package/src/bindings.mjs +354 -0
- package/src/claude-settings.mjs +49 -0
package/README.ko.md
CHANGED
|
@@ -70,6 +70,7 @@ TrustDex는 이름, 스타 수 또는 브랜딩만으로 "공식" 여부를 추
|
|
|
70
70
|
- 지원하지 않는 Codex MCP 키와 하위 섹션을 발견하면 안전하게 실패
|
|
71
71
|
- 사용자가 제공한 패키지 바이트를 npm SRI 또는 MCP Registry SHA-256 메타데이터와 대조해 검증
|
|
72
72
|
- 무결성 기반 신뢰 증거를 설정된 패키지 버전에 연결하고 불일치 차단
|
|
73
|
+
- 각 Claude/Codex MCP 소스의 결정·출처 상태를 도구 이름이나 규칙 값 없이 자동 도구 권한과 연결
|
|
73
74
|
|
|
74
75
|
## 호환성
|
|
75
76
|
|
|
@@ -82,8 +83,8 @@ Node.js 20 이상이 필요합니다.
|
|
|
82
83
|
npm에서 직접 실행:
|
|
83
84
|
|
|
84
85
|
```bash
|
|
85
|
-
npx trustdex@0.
|
|
86
|
-
npx trustdex@0.
|
|
86
|
+
npx trustdex@0.9.0 --help
|
|
87
|
+
npx trustdex@0.9.0 inspect ./mcp.json --pack strict --policy ./trustdex.policy.json
|
|
87
88
|
```
|
|
88
89
|
|
|
89
90
|
또는 소스 체크아웃에서 작업:
|
|
@@ -203,7 +204,7 @@ node ./bin/trustdex.mjs gate-claude ./.mcp.json --pack strict --out .trustdex/cl
|
|
|
203
204
|
claude --strict-mcp-config --mcp-config .trustdex/claude-mcp.json
|
|
204
205
|
```
|
|
205
206
|
|
|
206
|
-
Claude를 시작하기 전에 게이트의 결과를 확인하세요. 기본적으로 `ALLOW` 항목만 노출되며, `ASK` 항목에는 검토가 필요합니다. 어댑터는 검사할 수 없는 설정을 조용히 신뢰하지 않고 거부합니다. 이 명령은 npm 0.5.0 이상과 소스 체크아웃에서 사용할 수 있습니다. 게시된 CLI를 실행하려면 `node ./bin/trustdex.mjs` 대신 `npx trustdex@0.
|
|
207
|
+
Claude를 시작하기 전에 게이트의 결과를 확인하세요. 기본적으로 `ALLOW` 항목만 노출되며, `ASK` 항목에는 검토가 필요합니다. 어댑터는 검사할 수 없는 설정을 조용히 신뢰하지 않고 거부합니다. 이 명령은 npm 0.5.0 이상과 소스 체크아웃에서 사용할 수 있습니다. 게시된 CLI를 실행하려면 `node ./bin/trustdex.mjs` 대신 `npx trustdex@0.9.0`을 사용하세요.
|
|
207
208
|
|
|
208
209
|
지원되는 설정, PowerShell 오류 처리, 서명된 검토 및 Claude Desktop 워크플로는 [Claude에서 TrustDex 사용하기](docs/CLAUDE.ko.md)를 참고하세요.
|
|
209
210
|
|
|
@@ -275,6 +276,36 @@ node ./bin/trustdex.mjs diff-permissions \
|
|
|
275
276
|
사용합니다. 스키마가 바뀌면 새로운 정수 `schemaVersion`을 사용하며 기존
|
|
276
277
|
필드의 의미를 조용히 바꾸지 않습니다.
|
|
277
278
|
|
|
279
|
+
## 도구 출처와 자동 권한 연결
|
|
280
|
+
|
|
281
|
+
MCP 소스와 해당 소스에 부여된 자동 권한을 하나의 값 없는 기록으로 검토합니다.
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
node ./bin/trustdex.mjs snapshot-claude-bindings ./.mcp.json \
|
|
285
|
+
--settings ./.claude/settings.json \
|
|
286
|
+
--trust-store ./trust-store.json \
|
|
287
|
+
--out .trustdex/claude-bindings.json
|
|
288
|
+
|
|
289
|
+
node ./bin/trustdex.mjs snapshot-codex-bindings ~/.codex/config.toml \
|
|
290
|
+
--trust-store ./trust-store.json \
|
|
291
|
+
--out .trustdex/codex-bindings.json
|
|
292
|
+
|
|
293
|
+
node ./bin/trustdex.mjs diff-bindings \
|
|
294
|
+
.trustdex/approved-bindings.json \
|
|
295
|
+
.trustdex/current-bindings.json \
|
|
296
|
+
--json
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
Claude에서는 `--settings` 대신 스택 소스 플래그를 사용할 수 있습니다. 범위가
|
|
300
|
+
제한된 권한은 MCP 소스가 `ALLOW`일 때만 `bound`가 될 수 있습니다. 와일드카드/전체
|
|
301
|
+
도구 권한, ASK 소스, 출처 변경, 일치하지 않는 규칙 및 모호한 서버 이름 일치는
|
|
302
|
+
재검토 또는 차단 대상입니다. Codex의 `default_tools_approval_mode = "approve"`는
|
|
303
|
+
전체 도구 권한으로 취급합니다. 보고서는 서버 이름과 구조적 개수만 보관하고
|
|
304
|
+
엔드포인트 경로, 권한 지정자 및 도구 이름은 제외합니다.
|
|
305
|
+
[`schemas/tool-permission-bindings-v1.schema.json`](schemas/tool-permission-bindings-v1.schema.json)과
|
|
306
|
+
[`schemas/tool-permission-bindings-diff-v1.schema.json`](schemas/tool-permission-bindings-diff-v1.schema.json)으로
|
|
307
|
+
검증할 수 있습니다. 이는 검토 증거이며 런타임 권한 강제 기능이 아닙니다.
|
|
308
|
+
|
|
278
309
|
## 온라인 출처 관찰
|
|
279
310
|
|
|
280
311
|
일반 검사는 계속 로컬에서만 수행됩니다. 다음 명령은 명시적으로 실행할 때만 네트워크 조회를 수행합니다.
|
|
@@ -420,7 +451,7 @@ node ./bin/trustdex.mjs verify .trustdex/trust-record.json \
|
|
|
420
451
|
```yaml
|
|
421
452
|
- uses: actions/checkout@v4
|
|
422
453
|
|
|
423
|
-
- uses: grigent/trustdex@v0.
|
|
454
|
+
- uses: grigent/trustdex@v0.9.0
|
|
424
455
|
with:
|
|
425
456
|
config: ./mcp.json
|
|
426
457
|
pack: official-first
|
|
@@ -442,7 +473,7 @@ node ./bin/trustdex.mjs verify .trustdex/trust-record.json \
|
|
|
442
473
|
|
|
443
474
|
## 로드맵
|
|
444
475
|
|
|
445
|
-
공개 로드맵은 [docs/ROADMAP.ko.md](docs/ROADMAP.ko.md)에서 관리합니다. 단기 작업은
|
|
476
|
+
공개 로드맵은 [docs/ROADMAP.ko.md](docs/ROADMAP.ko.md)에서 관리합니다. 단기 작업은 실제 런타임 증거, 추가 에이전트 런타임 어댑터, 재현 가능한 통제 및 실제 파일럿 피드백에 중점을 둡니다. 로드맵 항목은 계획이며 약속이 아닙니다.
|
|
446
477
|
|
|
447
478
|
## 보안
|
|
448
479
|
|
package/README.md
CHANGED
|
@@ -70,6 +70,7 @@ TrustDex deliberately does not infer "official" status from names, stars, or bra
|
|
|
70
70
|
- fail closed on unsupported Codex MCP keys and subsections
|
|
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
|
+
- bind each Claude/Codex MCP source decision and provenance state to its automatic tool grant without retaining tool names or rule values
|
|
73
74
|
|
|
74
75
|
## Compatibility
|
|
75
76
|
|
|
@@ -82,8 +83,8 @@ Requires Node.js 20+.
|
|
|
82
83
|
Run directly from npm:
|
|
83
84
|
|
|
84
85
|
```bash
|
|
85
|
-
npx trustdex@0.
|
|
86
|
-
npx trustdex@0.
|
|
86
|
+
npx trustdex@0.9.0 --help
|
|
87
|
+
npx trustdex@0.9.0 inspect ./mcp.json --pack strict --policy ./trustdex.policy.json
|
|
87
88
|
```
|
|
88
89
|
|
|
89
90
|
Or work from a source checkout:
|
|
@@ -212,7 +213,7 @@ claude --strict-mcp-config --mcp-config .trustdex/claude-mcp.json
|
|
|
212
213
|
Check the gate's result before starting Claude. Only `ALLOW` entries are exposed by
|
|
213
214
|
default; `ASK` entries require review. The adapter rejects settings it cannot
|
|
214
215
|
inspect instead of silently trusting them. These commands are available in npm 0.5.0 and later, and from a source checkout.
|
|
215
|
-
Use `npx trustdex@0.
|
|
216
|
+
Use `npx trustdex@0.9.0` in place of `node ./bin/trustdex.mjs` to run the published CLI.
|
|
216
217
|
|
|
217
218
|
See [Using TrustDex with Claude](docs/CLAUDE.md) for supported settings, PowerShell
|
|
218
219
|
error handling, signed review, and the Claude Desktop workflow.
|
|
@@ -291,6 +292,36 @@ Merged-source snapshots and their diffs use
|
|
|
291
292
|
and [`schemas/permission-posture-diff-v2.schema.json`](schemas/permission-posture-diff-v2.schema.json).
|
|
292
293
|
Schema changes require a new integer `schemaVersion`; fields are not silently repurposed.
|
|
293
294
|
|
|
295
|
+
## Tool provenance and automatic permission bindings
|
|
296
|
+
|
|
297
|
+
Review an MCP source and the automatic permission granted to it as one value-free record:
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
node ./bin/trustdex.mjs snapshot-claude-bindings ./.mcp.json \
|
|
301
|
+
--settings ./.claude/settings.json \
|
|
302
|
+
--trust-store ./trust-store.json \
|
|
303
|
+
--out .trustdex/claude-bindings.json
|
|
304
|
+
|
|
305
|
+
node ./bin/trustdex.mjs snapshot-codex-bindings ~/.codex/config.toml \
|
|
306
|
+
--trust-store ./trust-store.json \
|
|
307
|
+
--out .trustdex/codex-bindings.json
|
|
308
|
+
|
|
309
|
+
node ./bin/trustdex.mjs diff-bindings \
|
|
310
|
+
.trustdex/approved-bindings.json \
|
|
311
|
+
.trustdex/current-bindings.json \
|
|
312
|
+
--json
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
Claude stack source flags can replace `--settings`. A scoped grant can be `bound` only
|
|
316
|
+
when its MCP source is `ALLOW`; wildcard/all-tool grants, ASK sources, changed
|
|
317
|
+
provenance, unmatched rules, and ambiguous server-name matches require review or are
|
|
318
|
+
blocked. Codex `default_tools_approval_mode = "approve"` is treated as an all-tool
|
|
319
|
+
grant. Reports retain server names and structural counts, but omit endpoint paths,
|
|
320
|
+
permission specifiers, and tool names. Validate them with
|
|
321
|
+
[`schemas/tool-permission-bindings-v1.schema.json`](schemas/tool-permission-bindings-v1.schema.json)
|
|
322
|
+
and [`schemas/tool-permission-bindings-diff-v1.schema.json`](schemas/tool-permission-bindings-diff-v1.schema.json).
|
|
323
|
+
This is review evidence, not runtime permission enforcement.
|
|
324
|
+
|
|
294
325
|
## Online provenance observations
|
|
295
326
|
|
|
296
327
|
Normal inspection remains local-only. These commands perform an explicit network lookup only when invoked:
|
|
@@ -436,7 +467,7 @@ The private key should never be committed.
|
|
|
436
467
|
```yaml
|
|
437
468
|
- uses: actions/checkout@v4
|
|
438
469
|
|
|
439
|
-
- uses: grigent/trustdex@v0.
|
|
470
|
+
- uses: grigent/trustdex@v0.9.0
|
|
440
471
|
with:
|
|
441
472
|
config: ./mcp.json
|
|
442
473
|
pack: official-first
|
|
@@ -458,7 +489,7 @@ For production CI, pin the action to a reviewed commit SHA rather than a moving
|
|
|
458
489
|
|
|
459
490
|
## Roadmap
|
|
460
491
|
|
|
461
|
-
The public roadmap is maintained in [docs/ROADMAP.md](docs/ROADMAP.md). Near-term work focuses on
|
|
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.
|
|
462
493
|
|
|
463
494
|
## Security
|
|
464
495
|
|
package/bin/trustdex.mjs
CHANGED
|
@@ -8,7 +8,11 @@ import { inspectMcpConfig } from '../src/inspect.mjs';
|
|
|
8
8
|
import { parseCodexMcpToml, gateCodexToml } from '../src/codex-config.mjs';
|
|
9
9
|
import { inspectCodexSettingsStack, inspectCodexSettingsText } from '../src/codex-settings.mjs';
|
|
10
10
|
import { parseClaudeMcpConfig } from '../src/claude-config.mjs';
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
inspectClaudeMcpPermissionBindings,
|
|
13
|
+
inspectClaudeSettings,
|
|
14
|
+
inspectClaudeSettingsStack
|
|
15
|
+
} from '../src/claude-settings.mjs';
|
|
12
16
|
import { inspectSkillText, inspectPluginManifest } from '../src/extensions.mjs';
|
|
13
17
|
import { evaluateAll } from '../src/policy.mjs';
|
|
14
18
|
import { getPolicyPack, mergePolicy } from '../src/policy-packs.mjs';
|
|
@@ -27,6 +31,11 @@ import {
|
|
|
27
31
|
createPermissionPostureSnapshot,
|
|
28
32
|
diffPermissionPostureSnapshots
|
|
29
33
|
} from '../src/posture.mjs';
|
|
34
|
+
import {
|
|
35
|
+
codexAutomaticGrantProjection,
|
|
36
|
+
createToolPermissionBindingSnapshot,
|
|
37
|
+
diffToolPermissionBindingSnapshots
|
|
38
|
+
} from '../src/bindings.mjs';
|
|
30
39
|
import { gateMcpConfig } from '../src/gate.mjs';
|
|
31
40
|
import { assessReview } from '../src/review.mjs';
|
|
32
41
|
import {
|
|
@@ -66,6 +75,10 @@ Usage:
|
|
|
66
75
|
trustdex inspect-claude-settings-stack [--user file] [--project file] [--local file]
|
|
67
76
|
[--session file] [--managed file] [--json]
|
|
68
77
|
trustdex snapshot-claude-settings-stack [same source flags] --out posture.json
|
|
78
|
+
trustdex snapshot-claude-bindings <.mcp.json> --settings file --out bindings.json
|
|
79
|
+
[--trust-store trust-store.json] [--pack ...]
|
|
80
|
+
trustdex snapshot-claude-bindings <.mcp.json> [Claude stack source flags]
|
|
81
|
+
--out bindings.json [--trust-store trust-store.json] [--pack ...]
|
|
69
82
|
trustdex gate-claude <.mcp.json> --out gated.json [--pack ...] [--policy policy.json]
|
|
70
83
|
trustdex snapshot-claude <.mcp.json> --out snapshot.json [--pack ...]
|
|
71
84
|
trustdex approve-claude <.mcp.json> --private key.pem --dir review [--pack ...]
|
|
@@ -92,6 +105,9 @@ Usage:
|
|
|
92
105
|
|
|
93
106
|
trustdex diff <before.json> <after.json> [--json]
|
|
94
107
|
trustdex diff-permissions <before.json> <after.json> [--json]
|
|
108
|
+
trustdex snapshot-codex-bindings <config.toml> --out bindings.json
|
|
109
|
+
[--trust-store trust-store.json] [--pack ...]
|
|
110
|
+
trustdex diff-bindings <before.json> <after.json> [--json]
|
|
95
111
|
trustdex policy <strict|official-first|development>
|
|
96
112
|
|
|
97
113
|
trustdex keygen --private trustdex-private.pem --public trustdex-public.pem
|
|
@@ -181,8 +197,8 @@ function setInspectExitCode(results) {
|
|
|
181
197
|
else if (results.some((result) => result.action === 'ask')) process.exitCode = 1;
|
|
182
198
|
}
|
|
183
199
|
|
|
184
|
-
async function evaluateMcp(configPath, args) {
|
|
185
|
-
const isClaude = args[0].endsWith('-claude');
|
|
200
|
+
async function evaluateMcp(configPath, args, options = {}) {
|
|
201
|
+
const isClaude = options.claude === true || args[0].endsWith('-claude');
|
|
186
202
|
let config;
|
|
187
203
|
try { config = await readJson(configPath); } catch (error) {
|
|
188
204
|
if (isClaude && error instanceof SyntaxError) throw new Error('Invalid Claude MCP JSON.');
|
|
@@ -273,6 +289,37 @@ async function evaluateCodexSettingsStack(args) {
|
|
|
273
289
|
return { policy, result };
|
|
274
290
|
}
|
|
275
291
|
|
|
292
|
+
async function loadClaudeBindingLayers(args) {
|
|
293
|
+
const single = getFlags(args, '--settings');
|
|
294
|
+
const stackScopes = ['user', 'project', 'local', 'session', 'managed'];
|
|
295
|
+
const hasStack = stackScopes.some((scope) => getFlags(args, `--${scope}`).length);
|
|
296
|
+
if (single.length > 1 || (single.length && hasStack)) {
|
|
297
|
+
throw new Error('Claude bindings accept one --settings file or stack source flags, not both.');
|
|
298
|
+
}
|
|
299
|
+
if (single.length) {
|
|
300
|
+
let settings;
|
|
301
|
+
try { settings = await readJson(single[0]); } catch (error) {
|
|
302
|
+
if (error instanceof SyntaxError) throw new Error('Invalid Claude settings JSON.');
|
|
303
|
+
throw error;
|
|
304
|
+
}
|
|
305
|
+
return [{ scope: 'session', settings }];
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
const layers = [];
|
|
309
|
+
for (const scope of stackScopes) {
|
|
310
|
+
for (const file of getFlags(args, `--${scope}`)) {
|
|
311
|
+
let settings;
|
|
312
|
+
try { settings = await readJson(file); } catch (error) {
|
|
313
|
+
if (error instanceof SyntaxError) throw new Error(`Invalid Claude ${scope} settings JSON.`);
|
|
314
|
+
throw error;
|
|
315
|
+
}
|
|
316
|
+
layers.push({ scope, settings });
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
if (!layers.length) throw new Error('Claude bindings require --settings or stack source flags.');
|
|
320
|
+
return layers;
|
|
321
|
+
}
|
|
322
|
+
|
|
276
323
|
function printObservation(observation, asJson) {
|
|
277
324
|
if (asJson) {
|
|
278
325
|
console.log(JSON.stringify(observation, null, 2));
|
|
@@ -316,6 +363,23 @@ function printPermissionPostureDiff(diff) {
|
|
|
316
363
|
}
|
|
317
364
|
}
|
|
318
365
|
|
|
366
|
+
function printBindingDiff(diff) {
|
|
367
|
+
if (diff.status === 'unchanged') {
|
|
368
|
+
console.log('UNCHANGED: tool permission bindings match the baseline.');
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
console.log(diff.status === 'restricted'
|
|
372
|
+
? 'RESTRICTED: automatic tool permissions became more restrictive.'
|
|
373
|
+
: 'NEEDS_REVIEW: tool provenance or automatic permissions changed.');
|
|
374
|
+
for (const change of diff.changes) {
|
|
375
|
+
const subject = change.name ? `${change.name}.` : '';
|
|
376
|
+
const details = change.before !== null || change.after !== null
|
|
377
|
+
? ` (${String(change.before)} -> ${String(change.after)})`
|
|
378
|
+
: '';
|
|
379
|
+
console.log(`${change.impact.toUpperCase()} ${change.type}: ${subject}${change.field}${details}`);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
319
383
|
async function main() {
|
|
320
384
|
const args = process.argv.slice(2);
|
|
321
385
|
const command = args[0];
|
|
@@ -422,6 +486,50 @@ async function main() {
|
|
|
422
486
|
return;
|
|
423
487
|
}
|
|
424
488
|
|
|
489
|
+
if (command === 'snapshot-claude-bindings') {
|
|
490
|
+
const configPath = args[1];
|
|
491
|
+
const out = getFlag(args, '--out');
|
|
492
|
+
if (!configPath || !out) {
|
|
493
|
+
throw new Error('snapshot-claude-bindings requires <.mcp.json>, settings sources, and --out <bindings.json>.');
|
|
494
|
+
}
|
|
495
|
+
const { policy, store, results } = await evaluateMcp(configPath, args, { claude: true });
|
|
496
|
+
const projection = inspectClaudeMcpPermissionBindings(
|
|
497
|
+
await loadClaudeBindingLayers(args),
|
|
498
|
+
results.map((result) => result.name)
|
|
499
|
+
);
|
|
500
|
+
const snapshot = createToolPermissionBindingSnapshot({
|
|
501
|
+
runtime: 'claude',
|
|
502
|
+
results,
|
|
503
|
+
grants: projection.grants,
|
|
504
|
+
policy,
|
|
505
|
+
trustStore: store,
|
|
506
|
+
unboundAutomaticGrantCount: projection.unboundAllowRuleCount,
|
|
507
|
+
ambiguousAutomaticGrantCount: projection.ambiguousAllowRuleCount
|
|
508
|
+
});
|
|
509
|
+
await writeFileSafe(out, `${JSON.stringify(snapshot, null, 2)}\n`);
|
|
510
|
+
console.log(`Wrote ${out}\nStatus: ${snapshot.status}\nDigest: ${snapshot.digest}`);
|
|
511
|
+
return;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
if (command === 'snapshot-codex-bindings') {
|
|
515
|
+
const configPath = args[1];
|
|
516
|
+
const out = getFlag(args, '--out');
|
|
517
|
+
if (!configPath || !out) {
|
|
518
|
+
throw new Error('snapshot-codex-bindings requires <config.toml> and --out <bindings.json>.');
|
|
519
|
+
}
|
|
520
|
+
const { policy, store, results } = await evaluateCodex(configPath, args);
|
|
521
|
+
const snapshot = createToolPermissionBindingSnapshot({
|
|
522
|
+
runtime: 'codex',
|
|
523
|
+
results,
|
|
524
|
+
grants: codexAutomaticGrantProjection(results),
|
|
525
|
+
policy,
|
|
526
|
+
trustStore: store
|
|
527
|
+
});
|
|
528
|
+
await writeFileSafe(out, `${JSON.stringify(snapshot, null, 2)}\n`);
|
|
529
|
+
console.log(`Wrote ${out}\nStatus: ${snapshot.status}\nDigest: ${snapshot.digest}`);
|
|
530
|
+
return;
|
|
531
|
+
}
|
|
532
|
+
|
|
425
533
|
if (command === 'diff-permissions') {
|
|
426
534
|
const beforePath = args[1];
|
|
427
535
|
const afterPath = args[2];
|
|
@@ -438,6 +546,22 @@ async function main() {
|
|
|
438
546
|
return;
|
|
439
547
|
}
|
|
440
548
|
|
|
549
|
+
if (command === 'diff-bindings') {
|
|
550
|
+
const beforePath = args[1];
|
|
551
|
+
const afterPath = args[2];
|
|
552
|
+
if (!beforePath || !afterPath) {
|
|
553
|
+
throw new Error('diff-bindings requires <before.json> <after.json>.');
|
|
554
|
+
}
|
|
555
|
+
const diff = diffToolPermissionBindingSnapshots(
|
|
556
|
+
await readJson(beforePath),
|
|
557
|
+
await readJson(afterPath)
|
|
558
|
+
);
|
|
559
|
+
if (hasFlag(args, '--json')) console.log(JSON.stringify(diff, null, 2));
|
|
560
|
+
else printBindingDiff(diff);
|
|
561
|
+
if (diff.status === 'needs-review') process.exitCode = 1;
|
|
562
|
+
return;
|
|
563
|
+
}
|
|
564
|
+
|
|
441
565
|
if (command === 'gate-codex') {
|
|
442
566
|
const configPath = args[1];
|
|
443
567
|
const out = getFlag(args, '--out');
|
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. MCP 스냅샷, 권한 상태 스냅샷 및 서명된 신뢰 기록을 통해 이후 드리프트를 검토할 수 있습니다.
|
|
16
|
+
6. MCP 스냅샷, 권한 상태 스냅샷, 출처–권한 결합 스냅샷 및 서명된 신뢰 기록을 통해 이후 드리프트를 검토할 수 있습니다.
|
|
17
17
|
|
|
18
18
|
게이트가 강제 적용 경계입니다. 보고서만으로는 에이전트가 검토되지 않은 확장을 불러오는 것을 막을 수 없습니다.
|
|
19
19
|
|
|
@@ -32,6 +32,7 @@ TrustDex는 관찰, 정책, 게이트 및 검토 증거를 분리하는 의존
|
|
|
32
32
|
| `src/gate.mjs` | 승인된 MCP 항목만 출력 |
|
|
33
33
|
| `src/snapshot.mjs` | 결정론적 신뢰 관련 상태 및 드리프트 |
|
|
34
34
|
| `src/posture.mjs` | 값이 제거된 Claude/Codex 권한 상태 스냅샷 및 자율성 확대 분류 |
|
|
35
|
+
| `src/bindings.mjs` | 값이 제거된 MCP 소스/출처와 자동 도구 권한의 연결 및 드리프트 분류 |
|
|
35
36
|
| `src/trust-record.mjs` | Ed25519 검토 기록 서명 및 검증 |
|
|
36
37
|
| `src/review.mjs` | 서명된 기준선 비교 |
|
|
37
38
|
|
|
@@ -41,6 +42,7 @@ TrustDex는 관찰, 정책, 게이트 및 검토 증거를 분리하는 의존
|
|
|
41
42
|
- 비밀 값은 출력하거나 스냅샷에 저장해서는 안 됩니다.
|
|
42
43
|
- 권한 규칙 값, 쓰기 가능 루트 경로, 훅/도우미 본문 및 관련 없는 설정 값은 에이전트 설정 보고서에 보관해서는 안 됩니다.
|
|
43
44
|
- 권한 상태 스냅샷은 소스 경로와 설정 값을 제외해야 하며, 새 자율성 또는 정책 의미 변경은 검토를 요구해야 합니다.
|
|
45
|
+
- 결합 스냅샷은 권한 지정자와 도구 이름을 제외해야 하며, ASK/BLOCK 소스의 자동 권한, 와일드카드 확대, 출처 변경 또는 모호하거나 연결되지 않은 규칙을 안전한 연결로 표시해서는 안 됩니다.
|
|
44
46
|
- 알 수 없는 증거가 신뢰로 바뀌어서는 안 됩니다.
|
|
45
47
|
- 차단 신호의 심각도를 출처 정보로 낮춰서는 안 됩니다.
|
|
46
48
|
- 지원하지 않는 보안 관련 구문은 안전하게 실패해야 합니다.
|
|
@@ -49,6 +51,12 @@ TrustDex는 관찰, 정책, 게이트 및 검토 증거를 분리하는 의존
|
|
|
49
51
|
|
|
50
52
|
설정 검사는 권고 기능입니다. 소스 파일 하나 또는 명시적으로 전달된 Claude/Codex 소스 스택을 읽고 지원되는 보안 필드에 대해 문서화된 우선순위를 계산할 수 있습니다. 활성 파일, 프로필, 환경 변수 재정의, 요구사항 또는 서버 전달 정책을 자동으로 찾지 않으며 보고된 정책이 실제로 활성화되었다는 것도 증명하지 않습니다. MCP 게이트는 구현된 강제 적용 경계로 유지되고, 에이전트 작업은 운영체제 및 런타임 샌드박스가 강제합니다.
|
|
51
53
|
|
|
54
|
+
결합 스냅샷은 MCP 검사/정책 결과와 명시적으로 전달된 런타임 설정에서 파싱한
|
|
55
|
+
자동 도구 권한이라는 두 정적 투영을 합성합니다. 실제 설정을 자동으로 찾거나 도구
|
|
56
|
+
호출을 가로채지 않습니다. `bound`는 관찰된 범위 제한 권한이 전달된 증거 아래에서
|
|
57
|
+
ALLOW 소스를 가리킨다는 뜻이며, 도구 구현이 안전하거나 런타임이 해당 파일을
|
|
58
|
+
로드했다는 뜻이 아닙니다.
|
|
59
|
+
|
|
52
60
|
## 의존성 정책
|
|
53
61
|
|
|
54
62
|
현재 런타임 코드는 Node.js 기본 제공 기능만 사용합니다. 새로운 의존성을 추가하려면 해당 기능을 플랫폼만으로 합리적으로 구현할 수 없는 이유, 패키지의 유지관리 및 보안 상태, 공급망 경계에 미치는 영향을 설명하는 이슈가 필요합니다.
|
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. MCP snapshots, permission posture snapshots, and signed trust records make later drift reviewable.
|
|
16
|
+
6. MCP snapshots, permission posture snapshots, provenance-permission binding 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
|
|
|
@@ -32,6 +32,7 @@ The gate is the enforcement boundary. Reports alone do not prevent an agent from
|
|
|
32
32
|
| src/gate.mjs | Output only approved MCP entries |
|
|
33
33
|
| src/snapshot.mjs | Deterministic trust-relevant state and drift |
|
|
34
34
|
| src/posture.mjs | Value-free Claude/Codex permission posture snapshots and autonomy-expansion classification |
|
|
35
|
+
| src/bindings.mjs | Value-free MCP source/provenance to automatic-tool-grant bindings and drift classification |
|
|
35
36
|
| src/trust-record.mjs | Ed25519 review-record signing and verification |
|
|
36
37
|
| src/review.mjs | Signed-baseline comparison |
|
|
37
38
|
|
|
@@ -41,6 +42,7 @@ The gate is the enforcement boundary. Reports alone do not prevent an agent from
|
|
|
41
42
|
- Secret values must not be printed or stored in snapshots.
|
|
42
43
|
- Permission rule values, writable-root paths, hook/helper bodies, and unrelated settings values must not be retained in agent-settings reports.
|
|
43
44
|
- Permission posture snapshots must omit source paths and setting values; new autonomy or changed policy semantics must require review.
|
|
45
|
+
- 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.
|
|
44
46
|
- Unknown evidence must not become trust.
|
|
45
47
|
- A blocking signal must not be lowered by provenance.
|
|
46
48
|
- Unsupported security-relevant syntax must fail closed.
|
|
@@ -54,6 +56,12 @@ requirements, or server-delivered policy, and it does not prove the reported pol
|
|
|
54
56
|
active. MCP gates remain the implemented enforcement boundary; operating-system and
|
|
55
57
|
runtime sandboxes enforce agent actions.
|
|
56
58
|
|
|
59
|
+
Binding snapshots compose two static projections: MCP inspection/policy results and
|
|
60
|
+
automatic tool grants parsed from explicitly supplied runtime settings. They do not
|
|
61
|
+
discover effective settings or intercept tool calls. A `bound` result means the
|
|
62
|
+
observed scoped grant points to an ALLOW source under the supplied evidence, not that
|
|
63
|
+
the tool implementation is safe or that the runtime loaded those files.
|
|
64
|
+
|
|
57
65
|
## Dependency policy
|
|
58
66
|
|
|
59
67
|
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
|
+
Claude 전용 명령은 TrustDex 0.5.0 이상에서 사용할 수 있습니다. 게시된 CLI를 실행하려면 아래 예제의 `node ./bin/trustdex.mjs` 대신 `npx trustdex@0.9.0`을 사용하거나, 소스 체크아웃에서 명령을 직접 사용하세요.
|
|
10
10
|
|
|
11
11
|
## 지원되는 설정
|
|
12
12
|
|
|
@@ -137,6 +137,28 @@ node ./bin/trustdex.mjs diff-permissions \
|
|
|
137
137
|
병합 소스 스냅샷은 스키마 v2를 사용하고 소스 범위 개수만 포함합니다. 최종 구조적
|
|
138
138
|
권한 상태가 같더라도 소스 추가, 제거 또는 범위 변경에는 재검토가 필요합니다.
|
|
139
139
|
|
|
140
|
+
### MCP 출처와 자동 권한 연결
|
|
141
|
+
|
|
142
|
+
각 `.mcp.json` 서버의 정책/출처 결과와 이를 호출할 수 있는 병합 Claude
|
|
143
|
+
`permissions.allow` 권한을 하나의 자체 검증 기록으로 연결합니다.
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
node ./bin/trustdex.mjs snapshot-claude-bindings ./.mcp.json \
|
|
147
|
+
--user ./review/user.settings.json \
|
|
148
|
+
--project ./.claude/settings.json \
|
|
149
|
+
--managed ./review/managed-settings.json \
|
|
150
|
+
--trust-store ./trust-store.json \
|
|
151
|
+
--out .trustdex/claude-bindings.json
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
설정 파일 하나에는 `--settings <file>`을 사용합니다. 범위가 제한된 규칙은
|
|
155
|
+
`ALLOW` 소스에 연결할 수 있습니다. 와일드카드 권한, ASK/BLOCK 소스의 권한,
|
|
156
|
+
일치하지 않는 규칙 및 모호한 서버 이름 일치는 검토 또는 차단 대상으로 표시합니다.
|
|
157
|
+
스냅샷은 서버 이름과 권한 형태만 기록하며 권한 지정자와 도구 이름은 제외합니다.
|
|
158
|
+
따라서 범위가 제한된 도구가 같은 개수 안에서 바뀌는 경우에는 소스 검토가 필요합니다.
|
|
159
|
+
검토본과 현재 기록은 `diff-bindings`로 비교하며, 확대 또는 출처/정책 드리프트는
|
|
160
|
+
종료 코드 `1`을 반환합니다.
|
|
161
|
+
|
|
140
162
|
## 서명된 검토 및 드리프트
|
|
141
163
|
|
|
142
164
|
검토 워크플로 전체에서 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.9.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
|
|
@@ -187,6 +187,27 @@ Merged-source snapshots use schema v2 and include only source-scope counts. Addi
|
|
|
187
187
|
removing, or reclassifying a source requires review even when the resulting structural
|
|
188
188
|
permission posture is otherwise unchanged.
|
|
189
189
|
|
|
190
|
+
### Bind MCP provenance to automatic grants
|
|
191
|
+
|
|
192
|
+
Create a self-validating record that joins each `.mcp.json` server's policy/provenance
|
|
193
|
+
result to the merged Claude `permissions.allow` grant that can invoke it:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
node ./bin/trustdex.mjs snapshot-claude-bindings ./.mcp.json \
|
|
197
|
+
--user ./review/user.settings.json \
|
|
198
|
+
--project ./.claude/settings.json \
|
|
199
|
+
--managed ./review/managed-settings.json \
|
|
200
|
+
--trust-store ./trust-store.json \
|
|
201
|
+
--out .trustdex/claude-bindings.json
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
For one settings file, use `--settings <file>`. Scoped rules can bind to an `ALLOW`
|
|
205
|
+
source; wildcard grants, grants to ASK/BLOCK sources, unmatched rules, and ambiguous
|
|
206
|
+
server-name matches are surfaced for review or blocking. The snapshot records server
|
|
207
|
+
names and grant shape only. It omits permission specifiers and tool names, so same-count
|
|
208
|
+
changes among scoped tools remain a source-review responsibility. Compare reviewed and
|
|
209
|
+
current records with `diff-bindings`; expansion or provenance/policy drift exits `1`.
|
|
210
|
+
|
|
190
211
|
## Signed review and drift
|
|
191
212
|
|
|
192
213
|
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.9.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.8.0 inspect-codex ~/.codex/config.toml --pack strict
|
|
|
25
25
|
### 2. 게이트된 사본 작성
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
npx trustdex@0.
|
|
28
|
+
npx trustdex@0.9.0 gate-codex ~/.codex/config.toml \
|
|
29
29
|
--pack official-first \
|
|
30
30
|
--trust-store ./trust-store.json \
|
|
31
31
|
--out ./gated-config.toml
|
|
@@ -120,13 +120,34 @@ node ./bin/trustdex.mjs diff-permissions \
|
|
|
120
120
|
병합 소스 스냅샷은 스키마 v2를 사용합니다. 최종 구조 설정이 같더라도 소스 범위 개수가
|
|
121
121
|
바뀌면 분류되지 않은 변경으로 처리되어 `NEEDS_REVIEW`를 반환합니다.
|
|
122
122
|
|
|
123
|
+
### MCP 출처와 자동 권한 연결
|
|
124
|
+
|
|
125
|
+
Codex는 한 MCP 서버가 노출한 모든 도구를 자동 승인할 수 있습니다. 이 권한을
|
|
126
|
+
서버의 정책 및 출처 결과와 함께 검토합니다.
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
node ./bin/trustdex.mjs snapshot-codex-bindings ~/.codex/config.toml \
|
|
130
|
+
--trust-store ./trust-store.json \
|
|
131
|
+
--pack strict \
|
|
132
|
+
--out .trustdex/codex-bindings.json
|
|
133
|
+
|
|
134
|
+
node ./bin/trustdex.mjs diff-bindings \
|
|
135
|
+
.trustdex/approved-codex-bindings.json \
|
|
136
|
+
.trustdex/current-codex-bindings.json
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
`default_tools_approval_mode = "approve"`는 전체 도구 자동 권한이므로 ALLOW
|
|
140
|
+
소스에서도 검토가 필요합니다. 와일드카드 도구 범위는 불리언으로 기록하며 도구
|
|
141
|
+
이름, 엔드포인트 경로 및 관련 없는 값은 제외합니다. 이 정적 연결은 설정이 실제로
|
|
142
|
+
로드되었음을 증명하거나 Codex 런타임 샌드박스를 강제하지 않습니다.
|
|
143
|
+
|
|
123
144
|
### 스킬 및 플러그인
|
|
124
145
|
|
|
125
146
|
에이전트 스킬과 플러그인 매니페스트도 같은 방법으로 검사할 수 있습니다.
|
|
126
147
|
|
|
127
148
|
```bash
|
|
128
|
-
npx trustdex@0.
|
|
129
|
-
npx trustdex@0.
|
|
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
|
|
130
151
|
```
|
|
131
152
|
|
|
132
153
|
이 명령은 파이프로 연결된 셸 설치 프로그램, 민감한 경로 참조, 네트워크 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.9.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.9.0 gate-codex ~/.codex/config.toml \
|
|
29
29
|
--pack official-first \
|
|
30
30
|
--trust-store ./trust-store.json \
|
|
31
31
|
--out ./gated-config.toml
|
|
@@ -136,13 +136,34 @@ for the Codex runtime sandbox.
|
|
|
136
136
|
Merged-source snapshots use schema v2. A source-scope count change is unclassified
|
|
137
137
|
and therefore returns `NEEDS_REVIEW`, even when the final structural settings match.
|
|
138
138
|
|
|
139
|
+
### Bind MCP provenance to automatic grants
|
|
140
|
+
|
|
141
|
+
Codex can automatically approve every tool exposed by one MCP server. Review that
|
|
142
|
+
grant together with the server's policy and provenance result:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
node ./bin/trustdex.mjs snapshot-codex-bindings ~/.codex/config.toml \
|
|
146
|
+
--trust-store ./trust-store.json \
|
|
147
|
+
--pack strict \
|
|
148
|
+
--out .trustdex/codex-bindings.json
|
|
149
|
+
|
|
150
|
+
node ./bin/trustdex.mjs diff-bindings \
|
|
151
|
+
.trustdex/approved-codex-bindings.json \
|
|
152
|
+
.trustdex/current-codex-bindings.json
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
`default_tools_approval_mode = "approve"` is an all-tool automatic grant and therefore
|
|
156
|
+
requires review even for an ALLOW source. Wildcard tool scope is recorded as a boolean;
|
|
157
|
+
tool names, endpoint paths, and unrelated values are omitted. This static binding does
|
|
158
|
+
not prove the configuration is loaded or enforce the Codex runtime sandbox.
|
|
159
|
+
|
|
139
160
|
### Skills and plugins
|
|
140
161
|
|
|
141
162
|
Agent skills and plugin manifests can be inspected the same way:
|
|
142
163
|
|
|
143
164
|
```bash
|
|
144
|
-
npx trustdex@0.
|
|
145
|
-
npx trustdex@0.
|
|
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
|
|
146
167
|
```
|
|
147
168
|
|
|
148
169
|
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.
|
|
@@ -45,6 +45,7 @@ TrustDex는 이 표면에 대한 노출 전 통제를 연구하고 구현합니
|
|
|
45
45
|
| 조용한 파서 우회 방지 | 지원하지 않는 보안 관련 구문을 거부하는 전용 어댑터 |
|
|
46
46
|
| 증거에서 비밀 값 제외 | 출력, 스냅샷 및 설정 지문에서 비밀 값을 제거하는 테스트 |
|
|
47
47
|
| 승인 상태의 드리프트 표시 | 결정론적 스냅샷, Ed25519 검토 기록 및 재검사 명령 |
|
|
48
|
+
| 소스 신뢰와 자동 권한 조정 | 값이 제거된 Claude/Codex 결합 스냅샷, 스키마, 차이 및 비활성 픽스처 |
|
|
48
49
|
| 공급망 모호성 감소 | 명시적 출처 관찰, 아티팩트 다이제스트 검증, 릴리스 체크섬, SBOM 및 빌드 증명 |
|
|
49
50
|
| 연구 재현성 유지 | 비활성 픽스처, 문서화된 기대 결과, 크로스 플랫폼 CI 및 CodeQL |
|
|
50
51
|
|
|
@@ -58,6 +59,11 @@ ALLOW 결과는 여전히 관찰된 증거에 대한 정책 결과일 뿐입니
|
|
|
58
59
|
|
|
59
60
|
`inspect-codex-settings`는 Codex 승인 정책, 검토자 선택, 샌드박스 종류, 네트워크 접근, 추가 쓰기 가능 루트 개수, 웹 검색 모드 및 명시적인 서브에이전트 활성화를 평가합니다. 완전히 파싱하지 않는 사용자 정의 권한, 앱 및 플러그인 표면은 값은 보관하지 않고 보고합니다. `inspect-codex-settings-stack`은 전달된 파일에 시스템부터 CLI까지의 문서화된 우선순위와 순서가 있는 프로젝트 계층을 적용합니다. 활성 계층을 자동으로 찾거나 요구사항을 강제하거나 활성 Codex 샌드박스를 대체하지 않습니다.
|
|
60
61
|
|
|
62
|
+
`snapshot-claude-bindings`와 `snapshot-codex-bindings`는 검사된 각 MCP 소스의
|
|
63
|
+
결정/출처 상태를 자동 도구 권한 형태와 연결합니다. 도구 이름이나 권한 지정자를
|
|
64
|
+
보관하지 않고 광범위하거나 차단된 권한을 검토할 수 있게 합니다. 이는 정적
|
|
65
|
+
증거이며 런타임 호출을 강제하지 않습니다.
|
|
66
|
+
|
|
61
67
|
## CVP 신청 경계
|
|
62
68
|
|
|
63
69
|
Anthropic의 현재 Cyber Verification Program 신청은 검증 가능한 개인 또는 조직 정보, 보안 작업 설명 및 요청 티어에 해당하는 통제 준수 확인을 요구합니다. 이 저장소는 보안 작업 설명을 뒷받침할 수 있지만, 저장소 변경만으로 운영자 신원을 증명하거나 계정·기기 통제를 충족할 수는 없습니다.
|