slaunt 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -53,6 +53,7 @@ npx slaunt audit --demo
53
53
 
54
54
  # Skip deliberate interactive pacing while keeping the full audit
55
55
  npx slaunt audit --no-motion
56
+ npx slaunt audit --quick
56
57
  ```
57
58
 
58
59
  Run `npx slaunt audit --help` for every option.
@@ -135,9 +136,9 @@ Database patterns are treated as bounded globs, never executable regular express
135
136
 
136
137
  The terminal flow uses immediate collection feedback followed by a short, deliberately paced analysis trail. A single updating line indexes the retrieved tools, searches direct and chained privilege paths, compares client permissions, and ranks the evidence before revealing the report. Every state is derived from the actual audit result; the pacing never invents a server, tool, capability, or finding.
137
138
 
138
- The default view is intentionally concise: a posture summary, the three highest-priority findings, a compact client access map, and the unclassified-tool queue. Supporting findings and complete evidence remain in the local HTML report. The CLI writes that report without opening it; use `--open-report` when you explicitly want a browser window.
139
+ The default view is intentionally concise and written for people who do not need to know MCP terminology: a safety score, the three issues that most need attention, a plain-language explanation of what each assistant can do, and a short list of unfamiliar actions that need review. Technical service and action names remain visible as secondary details. Supporting issues and complete evidence remain in the local HTML report. The CLI writes that report without opening it; use `--open-report` when you explicitly want a browser window.
139
140
 
140
- The trail runs only in an interactive terminal. JSON output, piped output, CI, `--yes`, `--no-motion`, and `SLAUNT_NO_MOTION=1` remain immediate. The audit also refuses to start a configured stdio entry that resolves back to the `slaunt` CLI, preventing recursive audit windows. The experience deliberately avoids variable rewards, deceptive urgency, hidden defaults, shame, or an unsupported claim that a UI can medically “optimize dopamine.”
141
+ The guided inspection targets about 78 seconds from launch and walks through 14 evidence-backed phases. Each phase reveals a result derived from the audit—inventory availability, schema coverage, sensitive surfaces, direct authority, cross-server paths, role overlap, unknown tools, and final confidence—while keeping the terminal to one changing status line. It runs only in an interactive terminal. JSON output, piped output, CI, `--yes`, `--quick`, `--no-motion`, and `SLAUNT_NO_MOTION=1` remain immediate. The audit also refuses to start a configured stdio entry that resolves back to the `slaunt` CLI, preventing recursive audit windows. The experience deliberately avoids variable rewards, deceptive urgency, hidden defaults, shame, or an unsupported claim that a UI can medically “optimize dopamine.”
141
142
 
142
143
  The design is informed by evidence that progress feedback can improve follow-through, autonomy-supportive framing is associated with more self-directed motivation, and risk messages work better when paired with an effective action. See the PubMed-indexed reviews on [progress feedback](https://pubmed.ncbi.nlm.nih.gov/33721605/), [autonomy support](https://pubmed.ncbi.nlm.nih.gov/30237648/), and [fear appeals with efficacy](https://pubmed.ncbi.nlm.nih.gov/26501228/). These findings come from other domains, so their application to developer security tooling is a product hypothesis, not a medical claim.
143
144
 
package/dist/audit/run.js CHANGED
@@ -12,24 +12,24 @@ function sanitizeServer(server) {
12
12
  };
13
13
  }
14
14
  export async function runAudit(options) {
15
- options.onStage?.('discover', 'Reading known Claude and Codex configuration locations');
15
+ options.onStage?.('discover', 'Looking for Claude and Codex settings on this computer');
16
16
  const discovery = options.demo
17
17
  ? demoDiscovery()
18
18
  : options.discovery || await discoverConfigurations({ ...(options.customPaths ? { customPaths: options.customPaths } : {}) });
19
- options.onStage?.('catalog', 'Loading signed-down classification rules; local tool data stays local');
19
+ options.onStage?.('catalog', 'Loading Slaunt\'s reviewed safety guide; your local details stay here');
20
20
  const catalog = await loadCatalog({ ...(options.offline || options.demo ? { offline: true } : {}) });
21
21
  if (catalog.warning)
22
22
  discovery.warnings.push(`Classification catalog: ${catalog.warning}`);
23
- options.onStage?.('probe', 'Retrieving declared MCP tool definitions without calling any tools');
23
+ options.onStage?.('probe', 'Reading each connected service\'s permission list without using any actions');
24
24
  const probes = options.demo
25
25
  ? demoProbes()
26
26
  : await probeServers(discovery.servers, {
27
27
  allowServerStarts: options.allowServerStarts,
28
28
  ...(options.timeoutMs ? { timeoutMs: options.timeoutMs } : {}),
29
29
  });
30
- options.onStage?.('classify', 'Matching declared capabilities against the trusted catalog');
30
+ options.onStage?.('classify', 'Matching each action to the kind of access it provides');
31
31
  const tools = classifyTools(probes.flatMap((probe) => probe.tools), catalog.rules);
32
- options.onStage?.('analyze', 'Correlating capabilities across clients and servers');
32
+ options.onStage?.('analyze', 'Checking how access can combine across assistants and services');
33
33
  const findings = analyzeRisks(discovery.servers, tools);
34
34
  const clientCount = discovery.clients.filter((client) => client.detected).length;
35
35
  const serverCount = new Set(discovery.servers.map((server) => server.name.toLowerCase())).size;
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/audit/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/audit/run.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -8,33 +8,33 @@ import { discoverConfigurations } from './config/discover.js';
8
8
  import { installSlauntMcp } from './config/install.js';
9
9
  import { isDynamicLauncher } from './mcp/introspect.js';
10
10
  import { writeHtmlReport } from './report/html.js';
11
- import { playAnalysisPath } from './tui/analysis-path.js';
11
+ import { DEFAULT_INSPECTION_WINDOW_MS, playAnalysisPath } from './tui/analysis-path.js';
12
12
  import { renderAudit, renderHeader } from './tui/render.js';
13
- const HELP = `Slaunt Agent Access Audit
13
+ const HELP = `Slaunt AI Assistant Safety Check
14
14
 
15
15
  Usage:
16
16
  npx slaunt audit [options]
17
17
 
18
18
  Options:
19
- --install-slaunt Explicitly add Slaunt MCP to detected client configs
20
- --allow-server-starts Start configured stdio servers to request tools/list
21
- --no-server-starts Inspect configuration only; do not start local servers
22
- --config <path> Inspect an additional JSON or TOML MCP config (repeatable)
23
- --offline Use the bundled catalog; do not refresh from Supabase
24
- --output <path> HTML report path
25
- --no-report Do not write the local HTML report
26
- --open-report Open the local HTML report after the audit
27
- --no-motion Skip the paced interactive analysis trail
19
+ --install-slaunt Add Slaunt to the detected AI assistant settings
20
+ --allow-server-starts Start local connections to read their permission lists
21
+ --no-server-starts Check settings only; do not start local connections
22
+ --config <path> Check an additional JSON or TOML settings file (repeatable)
23
+ --offline Use the built-in safety guide; do not download updates
24
+ --output <path> Detailed report path
25
+ --no-report Do not save the detailed report
26
+ --open-report Open the detailed report after the check
27
+ --quick, --no-motion Skip the guided 1-2 minute inspection sequence
28
28
  --timeout <ms> Per-server probe timeout (1000-60000; default 8000)
29
- --json Print a machine-readable, redacted JSON result
30
- --yes Approve read-only tools/list startup for automation
31
- --demo Render a deterministic 43-tool example audit
29
+ --json Print a machine-readable result with private values removed
30
+ --yes Approve reading permission lists for automation
31
+ --demo Show a repeatable 43-action example check
32
32
  -h, --help Show help
33
33
  -v, --version Show version
34
34
 
35
35
  Privacy:
36
- Catalog rules may be downloaded from Supabase. Tool names, descriptions,
37
- schemas, config values, and findings are classified locally and are not uploaded.
36
+ Slaunt may download its reviewed safety guide. Your connected services,
37
+ available actions, settings, and results are analyzed here and are not uploaded.
38
38
  `;
39
39
  function valueAfter(args, index, option) {
40
40
  const value = args[index + 1];
@@ -60,7 +60,7 @@ function parseArguments(args) {
60
60
  options.openReport = true;
61
61
  else if (argument === '--no-open')
62
62
  options.openReport = false;
63
- else if (argument === '--no-motion')
63
+ else if (argument === '--no-motion' || argument === '--quick')
64
64
  options.noMotion = true;
65
65
  else if (argument === '--no-report')
66
66
  options.noReport = true;
@@ -89,7 +89,7 @@ function parseArguments(args) {
89
89
  process.exit(0);
90
90
  }
91
91
  else if (argument === '--version' || argument === '-v') {
92
- process.stdout.write('0.1.2\n');
92
+ process.stdout.write('0.1.4\n');
93
93
  process.exit(0);
94
94
  }
95
95
  else if (argument === 'connect') {
@@ -125,6 +125,7 @@ async function main() {
125
125
  throw new Error(`Unknown command: ${rawArgs[0]}`);
126
126
  }
127
127
  const options = parseArguments(rawArgs);
128
+ const inspectionStartedAt = Date.now();
128
129
  const interactive = Boolean(process.stdin.isTTY && process.stdout.isTTY && !options.json);
129
130
  const motionEnabled = interactive
130
131
  && !options.noMotion
@@ -150,11 +151,11 @@ async function main() {
150
151
  if (interactive && options.allowServerStarts === undefined && stdioServers.length > 0 && !options.demo) {
151
152
  const dynamicCount = stdioServers.filter(isDynamicLauncher).length;
152
153
  allowServerStarts = await confirm({
153
- message: `Start ${stdioServers.length} configured local MCP server${stdioServers.length === 1 ? '' : 's'} to read tools/list? No tools will be called.${dynamicCount ? ` ${dynamicCount} use package/container launchers.` : ''}`,
154
+ message: `Allow Slaunt to briefly start ${stdioServers.length} local connection${stdioServers.length === 1 ? '' : 's'} so it can read what they allow? It will not use any actions.${dynamicCount ? ` ${dynamicCount} may launch package or container software.` : ''}`,
154
155
  default: true,
155
156
  });
156
157
  }
157
- const spinner = options.json ? undefined : ora({ text: 'Inspecting MCP configurations', color: 'magenta' }).start();
158
+ const spinner = options.json ? undefined : ora({ text: 'Finding connected AI tools', color: 'magenta' }).start();
158
159
  const result = await runAudit({
159
160
  allowServerStarts: Boolean(allowServerStarts),
160
161
  ...(options.customPaths.length ? { customPaths: options.customPaths } : {}),
@@ -165,9 +166,13 @@ async function main() {
165
166
  onStage: (_stage, detail) => { if (spinner)
166
167
  spinner.text = detail; },
167
168
  });
168
- spinner?.succeed('Evidence collected');
169
- if (motionEnabled)
170
- await playAnalysisPath(result);
169
+ spinner?.succeed('Access information collected');
170
+ if (motionEnabled) {
171
+ const elapsedMs = Date.now() - inspectionStartedAt;
172
+ await playAnalysisPath(result, {
173
+ durationMs: Math.max(4_200, DEFAULT_INSPECTION_WINDOW_MS - elapsedMs),
174
+ });
175
+ }
171
176
  if (!options.noReport) {
172
177
  const reportPath = await writeHtmlReport(result, options.output);
173
178
  result.reportPath = reportPath;
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -50,7 +50,7 @@ async function listAllTools(client, server) {
50
50
  return tools;
51
51
  }
52
52
  async function connectAndList(server, transport) {
53
- const client = new Client({ name: 'slaunt-audit', version: '0.1.2' }, { capabilities: {} });
53
+ const client = new Client({ name: 'slaunt-audit', version: '0.1.4' }, { capabilities: {} });
54
54
  try {
55
55
  // The SDK's transport classes declare `sessionId?: string` while its shared
56
56
  // Transport interface is emitted without exact-optional compatibility.
@@ -0,0 +1,12 @@
1
+ import type { Capability, ClientId, Finding, Severity } from '../types.js';
2
+ export interface PlainFinding {
3
+ label: string;
4
+ title: string;
5
+ why: string;
6
+ recommendation: string;
7
+ }
8
+ export declare function plainCapability(capability: Capability): string;
9
+ export declare function plainClient(client: ClientId): string;
10
+ export declare function plainSeverity(severity: Severity): string;
11
+ export declare function plainFinding(item: Finding): PlainFinding;
12
+ //# sourceMappingURL=plain-language.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plain-language.d.ts","sourceRoot":"","sources":["../../src/presentation/plain-language.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;CACxB;AAoCD,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAE9D;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAEpD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAExD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CAuFxD"}
@@ -0,0 +1,120 @@
1
+ const severityLabels = {
2
+ critical: 'Urgent',
3
+ high: 'High priority',
4
+ medium: 'Review',
5
+ low: 'Low priority',
6
+ info: 'For your information',
7
+ };
8
+ const capabilityLabels = {
9
+ 'read-data': 'Read data',
10
+ 'write-data': 'Change data',
11
+ 'read-files': 'Read files',
12
+ 'write-files': 'Change files',
13
+ 'delete-data': 'Delete data',
14
+ 'execute-code': 'Run code',
15
+ 'execute-shell': 'Run commands',
16
+ 'read-secrets': 'Read saved credentials',
17
+ 'manage-auth': 'Manage sign-in',
18
+ 'network-access': 'Connect to the internet',
19
+ 'deploy-production': 'Publish live changes',
20
+ 'edit-code': 'Edit code',
21
+ 'create-pull-request': 'Propose code changes',
22
+ 'merge-pull-request': 'Approve and merge code',
23
+ 'administer-system': 'Manage system settings',
24
+ 'control-browser': 'Control a browser',
25
+ 'send-message': 'Send messages',
26
+ };
27
+ const clientLabels = {
28
+ 'claude-code': 'Claude Code',
29
+ 'claude-desktop': 'Claude Desktop',
30
+ codex: 'Codex',
31
+ };
32
+ export function plainCapability(capability) {
33
+ return capabilityLabels[capability];
34
+ }
35
+ export function plainClient(client) {
36
+ return clientLabels[client];
37
+ }
38
+ export function plainSeverity(severity) {
39
+ return severityLabels[severity];
40
+ }
41
+ export function plainFinding(item) {
42
+ const label = plainSeverity(item.severity);
43
+ const title = item.title;
44
+ if (/deploy without an external approval boundary/i.test(title)) {
45
+ const assistant = plainClient(item.clients[0] || 'claude-code');
46
+ return {
47
+ label,
48
+ title: `${assistant} can publish changes to a live service without approval`,
49
+ why: 'This could change what customers see before a person has reviewed it.',
50
+ recommendation: 'Require a person to approve live releases and limit which environments this assistant can change.',
51
+ };
52
+ }
53
+ if (/execute shell commands and access secrets/i.test(title)) {
54
+ const assistant = plainClient(item.clients[0] || 'codex');
55
+ return {
56
+ label,
57
+ title: `${assistant} can combine saved credentials with command access`,
58
+ why: 'Together, these permissions could expose or misuse passwords, tokens, or other credentials.',
59
+ recommendation: 'Keep credential access separate from command access, or require approval before either can be used.',
60
+ };
61
+ }
62
+ if (/share broad GitHub permissions/i.test(title)) {
63
+ return {
64
+ label,
65
+ title: 'Multiple AI assistants share powerful GitHub access',
66
+ why: 'Shared access makes it harder to control what each assistant can change or to tell which one made a change.',
67
+ recommendation: 'Give each assistant its own GitHub access, limited to the work it needs to do.',
68
+ };
69
+ }
70
+ if (/cleartext HTTP/i.test(title)) {
71
+ const assistant = plainClient(item.clients[0] || 'codex');
72
+ return {
73
+ label,
74
+ title: `${assistant} connects to a service without encryption`,
75
+ why: 'Someone on the network could read or change information sent through this connection.',
76
+ recommendation: 'Use a secure HTTPS connection with certificate checking before enabling this service.',
77
+ };
78
+ }
79
+ if (/invalid MCP server URL/i.test(title)) {
80
+ const assistant = plainClient(item.clients[0] || 'codex');
81
+ return {
82
+ label,
83
+ title: `${assistant} has a connection address that cannot be checked safely`,
84
+ why: 'Slaunt cannot reliably determine where this connection sends information.',
85
+ recommendation: 'Replace it with a reviewed HTTPS address.',
86
+ };
87
+ }
88
+ if (/stores credential material in an MCP configuration/i.test(title)) {
89
+ const assistant = plainClient(item.clients[0] || 'codex');
90
+ return {
91
+ label,
92
+ title: `${assistant} stores a credential directly in its settings`,
93
+ why: 'Other programs, backups, or people with access to this computer may be able to read it.',
94
+ recommendation: 'Move the credential to a protected environment variable or the operating system credential store.',
95
+ };
96
+ }
97
+ if (/unpinned package at startup/i.test(title)) {
98
+ return {
99
+ label,
100
+ title: 'A connected service can change when it starts',
101
+ why: 'It downloads a package without locking it to one reviewed version.',
102
+ recommendation: 'Lock the package to an exact reviewed version.',
103
+ };
104
+ }
105
+ if (/unclassified tools appear state-changing/i.test(title)) {
106
+ return {
107
+ label,
108
+ title: 'Some unfamiliar actions may make changes',
109
+ why: 'Their names suggest they can run jobs, change data, or use administrator access, but Slaunt does not recognize them yet.',
110
+ recommendation: 'Have a person review these actions before leaving them available to an AI assistant.',
111
+ };
112
+ }
113
+ return {
114
+ label,
115
+ title: title.replaceAll('MCP', 'connected').replaceAll('agent', 'AI assistant'),
116
+ why: item.why,
117
+ recommendation: item.recommendation,
118
+ };
119
+ }
120
+ //# sourceMappingURL=plain-language.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plain-language.js","sourceRoot":"","sources":["../../src/presentation/plain-language.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAwB,MAAM,aAAa,CAAC;AAqCrE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAgC5D;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4B/F"}
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAyB/C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAwC5D;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4B/F"}
@@ -1,6 +1,7 @@
1
1
  import { randomBytes } from 'node:crypto';
2
2
  import { access, link, mkdir, unlink, writeFile } from 'node:fs/promises';
3
3
  import { dirname, resolve } from 'node:path';
4
+ import { plainCapability, plainClient, plainFinding } from '../presentation/plain-language.js';
4
5
  function escapeHtml(value) {
5
6
  return String(value)
6
7
  .replaceAll('&', '&amp;')
@@ -9,17 +10,6 @@ function escapeHtml(value) {
9
10
  .replaceAll('"', '&quot;')
10
11
  .replaceAll("'", '&#039;');
11
12
  }
12
- const severityLabels = {
13
- critical: 'Critical', high: 'High', medium: 'Medium', low: 'Low', info: 'Info',
14
- };
15
- const capabilityLabels = {
16
- 'read-data': 'Read data', 'write-data': 'Write data', 'read-files': 'Read files',
17
- 'write-files': 'Write files', 'delete-data': 'Delete data', 'execute-code': 'Execute code',
18
- 'execute-shell': 'Execute commands', 'read-secrets': 'Read credentials', 'manage-auth': 'Manage identity',
19
- 'network-access': 'Access network', 'deploy-production': 'Deploy production', 'edit-code': 'Edit code',
20
- 'create-pull-request': 'Create pull requests', 'merge-pull-request': 'Merge pull requests',
21
- 'administer-system': 'Administer systems', 'control-browser': 'Control browser', 'send-message': 'Send messages',
22
- };
23
13
  function accessOverview(result) {
24
14
  return result.discovery.clients.filter((client) => client.detected).map((client) => {
25
15
  const servers = result.discovery.servers.filter((server) => server.client === client.id);
@@ -27,41 +17,49 @@ function accessOverview(result) {
27
17
  const capabilities = [...new Set(result.tools
28
18
  .filter((tool) => tool.serverId === server.id)
29
19
  .flatMap((tool) => tool.classification.capabilities))];
30
- return `<tr><td>${escapeHtml(server.name)}</td><td>${escapeHtml(capabilities.map((item) => capabilityLabels[item]).join(', ') || 'Tool list unavailable')}</td></tr>`;
20
+ return `<tr><td>${escapeHtml(server.name)}</td><td>${escapeHtml(capabilities.map(plainCapability).join(', ') || 'Permissions could not be read')}</td></tr>`;
31
21
  }).join('');
32
22
  return `<section class="client"><h3>${escapeHtml(client.label)}</h3><table><tbody>${rows}</tbody></table></section>`;
33
23
  }).join('');
34
24
  }
35
25
  export function renderHtmlReport(result) {
36
26
  const summary = result.summary;
37
- const findings = result.findings.map((item) => `
27
+ const findings = result.findings.map((item) => {
28
+ const copy = plainFinding(item);
29
+ const assistants = item.clients.map(plainClient).join(', ');
30
+ return `
38
31
  <article class="finding ${escapeHtml(item.severity)}">
39
- <div class="severity">${severityLabels[item.severity]}</div>
40
- <h3>${escapeHtml(item.title)}</h3>
41
- ${item.serverNames.length ? `<p><strong>Servers:</strong> ${escapeHtml(item.serverNames.join(', '))}</p>` : ''}
42
- ${item.toolNames.length ? `<p><strong>Tools:</strong> ${escapeHtml(item.toolNames.join(', '))}</p>` : ''}
43
- <p><strong>Why flagged:</strong> ${escapeHtml(item.why)}</p>
44
- <p><strong>Recommendation:</strong> ${escapeHtml(item.recommendation)}</p>
45
- </article>`).join('');
32
+ <div class="severity">${escapeHtml(copy.label)}</div>
33
+ <h3>${escapeHtml(copy.title)}</h3>
34
+ ${assistants ? `<p><strong>AI assistant:</strong> ${escapeHtml(assistants)}</p>` : ''}
35
+ ${item.serverNames.length ? `<p><strong>Connected service:</strong> ${escapeHtml(item.serverNames.join(', '))}</p>` : ''}
36
+ ${item.toolNames.length ? `<p><strong>Technical action name:</strong> ${escapeHtml(item.toolNames.join(', '))}</p>` : ''}
37
+ <p><strong>Why this matters:</strong> ${escapeHtml(copy.why)}</p>
38
+ <p><strong>What you can do:</strong> ${escapeHtml(copy.recommendation)}</p>
39
+ </article>`;
40
+ }).join('');
46
41
  const unknown = result.tools.filter((tool) => tool.classification.source === 'unknown');
47
- const scoreClass = summary.postureScore >= 80 ? 'good' : summary.postureScore >= 55 ? 'warn' : 'bad';
42
+ const unavailable = result.probes.filter((probe) => probe.status !== 'ok').length;
43
+ const scoreAvailable = summary.tools > 0 || unavailable === 0;
44
+ const scoreClass = !scoreAvailable ? 'warn' : summary.postureScore >= 80 ? 'good' : summary.postureScore >= 55 ? 'warn' : 'bad';
45
+ const scoreValue = scoreAvailable ? summary.postureScore : 0;
48
46
  return `<!doctype html>
49
47
  <html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
50
48
  <meta http-equiv="Content-Security-Policy" content="default-src 'none'; style-src 'unsafe-inline'; img-src data:">
51
- <title>Slaunt Agent Access Audit</title><style>
49
+ <title>Slaunt AI Assistant Safety Check</title><style>
52
50
  :root{color-scheme:light dark;--bg:#0b0d12;--card:#141821;--ink:#f4f6fb;--muted:#9ba6b8;--line:#293142;--accent:#8b5cf6;--critical:#ff4d6d;--high:#ff8a4c;--medium:#f7c948;--low:#48cae4}*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 15% 0,#24164a 0,transparent 32%),var(--bg);color:var(--ink);font:15px/1.55 ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}main{width:min(1060px,calc(100% - 32px));margin:0 auto;padding:64px 0 96px}header{display:grid;grid-template-columns:1fr auto;gap:24px;align-items:end;padding-bottom:36px;border-bottom:1px solid var(--line)}.eyebrow{color:#b69cff;text-transform:uppercase;letter-spacing:.14em;font-size:12px;font-weight:800}h1{font-size:clamp(34px,6vw,64px);line-height:1;margin:.18em 0}.sub{color:var(--muted);max-width:640px}.score{width:136px;height:136px;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--accent) calc(var(--score)*1%),#252b38 0);position:relative}.score:before{content:"";position:absolute;inset:9px;border-radius:50%;background:var(--card)}.score span{position:relative;font-size:38px;font-weight:850}.score small{display:block;font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.1em}.metrics{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin:28px 0}.metric{padding:18px;background:color-mix(in srgb,var(--card) 92%,transparent);border:1px solid var(--line);border-radius:14px}.metric b{display:block;font-size:28px}.metric span{color:var(--muted);font-size:12px}h2{margin:52px 0 18px;font-size:24px}.finding{border:1px solid var(--line);border-left-width:4px;border-radius:14px;background:var(--card);padding:22px;margin:14px 0}.finding.critical{border-left-color:var(--critical)}.finding.high{border-left-color:var(--high)}.finding.medium{border-left-color:var(--medium)}.finding.low{border-left-color:var(--low)}.finding h3{margin:4px 0 12px}.finding p{margin:7px 0;color:#cbd3df}.severity{text-transform:uppercase;letter-spacing:.12em;font-size:11px;font-weight:900}.critical .severity{color:var(--critical)}.high .severity{color:var(--high)}.medium .severity{color:var(--medium)}.low .severity{color:var(--low)}.grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}.client{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px}.client h3{margin:0 0 12px}table{width:100%;border-collapse:collapse}td{padding:9px 0;border-top:1px solid var(--line);vertical-align:top}td:first-child{font-weight:750;width:32%}td:last-child{color:var(--muted)}code{background:#202635;padding:.15em .38em;border-radius:5px}.notice{padding:18px;border:1px solid #4c3a86;background:#171229;border-radius:14px;color:#d9cffc}.unknown{columns:2;margin:0;padding-left:22px}.unknown li{break-inside:avoid;padding:3px}.cta{margin-top:52px;padding:30px;border-radius:18px;background:linear-gradient(130deg,#5b21b6,#312e81);box-shadow:0 22px 70px #5b21b633}.cta h2{margin:0 0 8px}.cta a{display:inline-block;margin-top:12px;background:white;color:#28145d;text-decoration:none;font-weight:850;padding:11px 16px;border-radius:9px}.fine{font-size:12px;color:var(--muted);margin-top:42px}@media(max-width:800px){header{grid-template-columns:1fr}.metrics{grid-template-columns:repeat(2,1fr)}.grid{grid-template-columns:1fr}.unknown{columns:1}}
53
51
  </style></head><body><main>
54
- <header><div><div class="eyebrow">Slaunt audit</div><h1>Agent access, mapped.</h1><p class="sub">A local-first inventory of MCP tools exposed to Claude and Codex. No tool was called and no audit payload was uploaded.</p></div><div class="score ${scoreClass}" style="--score:${summary.postureScore}"><span>${summary.postureScore}<small>posture</small></span></div></header>
52
+ <header><div><div class="eyebrow">Slaunt safety check</div><h1>See what your AI assistants can do.</h1><p class="sub">Slaunt reviewed the actions available to Claude and Codex on this computer. It did not use those actions, and no audit payload was uploaded.</p></div><div class="score ${scoreClass}" style="--score:${scoreValue}"><span>${scoreAvailable ? summary.postureScore : '?'}<small>${scoreAvailable ? 'safety score' : 'not enough data'}</small></span></div></header>
55
53
  <section class="metrics">
56
- <div class="metric"><b>${summary.clientsDetected}</b><span>Clients</span></div><div class="metric"><b>${summary.servers}</b><span>MCP servers</span></div><div class="metric"><b>${summary.tools}</b><span>Tools exposed</span></div><div class="metric"><b>${summary.sensitiveCapabilities}</b><span>Sensitive tools</span></div><div class="metric"><b>${summary.highRiskFindings}</b><span>High-risk findings</span></div><div class="metric"><b>${summary.unclassified}</b><span>Unclassified</span></div>
54
+ <div class="metric"><b>${summary.clientsDetected}</b><span>AI assistants checked</span></div><div class="metric"><b>${summary.servers}</b><span>Connected services</span></div><div class="metric"><b>${summary.tools}</b><span>Available actions</span></div><div class="metric"><b>${summary.sensitiveCapabilities}</b><span>Sensitive actions</span></div><div class="metric"><b>${summary.highRiskFindings}</b><span>Urgent issues</span></div><div class="metric"><b>${summary.unclassified}</b><span>Need review</span></div>
57
55
  </section>
58
- <div class="notice">Classification catalog: <strong>${escapeHtml(result.privacy.catalogSource)}</strong>. Tool names, descriptions, schemas, configuration values, and findings remained on this machine.</div>
59
- <h2>Needs attention</h2>${findings || '<p>No correlated high-risk paths were identified from the available declarations.</p>'}
60
- <h2>Access overview</h2><div class="grid">${accessOverview(result)}</div>
61
- <h2>Classification coverage</h2><p><strong>${summary.classified}</strong> verified or recognized · <strong>${summary.unclassified}</strong> unknown</p>
62
- ${unknown.length ? `<ul class="unknown">${unknown.map((tool) => `<li><code>${escapeHtml(tool.name)}</code> <span>(${escapeHtml(tool.serverName)})</span></li>`).join('')}</ul>` : '<p>Every retrieved tool matched a catalog rule.</p>'}
63
- <section class="cta"><h2>You found the paths. Put guardrails on them.</h2><p>Slaunt can add role-scoped access, approvals, continuous monitoring, and remote shutdown around the MCP stack you already use. You choose when to connect.</p><a href="https://slaunt.ai/setup">Create a Slaunt workspace →</a></section>
64
- <p class="fine">Scope: configured MCP servers and their declared tools only. This audit did not inspect prompts, file contents, credentials, non-MCP agents, or whether any tool has been used. Generated ${escapeHtml(result.generatedAt)}.</p>
56
+ <div class="notice">Privacy: Slaunt used its <strong>${escapeHtml(result.privacy.catalogSource)}</strong> safety guide. Your connected services, available actions, settings, and results stayed on this computer.</div>
57
+ <h2>What needs your attention</h2>${findings || '<p>No urgent access issues were found in the information Slaunt could read.</p>'}
58
+ <h2>What each assistant can do</h2><div class="grid">${accessOverview(result)}</div>
59
+ <h2>Items Slaunt could not identify</h2><p>Slaunt understood <strong>${summary.classified}</strong> actions. <strong>${summary.unclassified}</strong> need a person to review them.</p>
60
+ ${unknown.length ? `<ul class="unknown">${unknown.map((tool) => `<li><code>${escapeHtml(tool.name)}</code> <span>(${escapeHtml(tool.serverName)})</span></li>`).join('')}</ul>` : '<p>Slaunt recognized every available action.</p>'}
61
+ <section class="cta"><h2>Want ongoing protection?</h2><p>Add approval prompts, give each assistant only the access it needs, monitor changes, and turn off access remotely when necessary. You choose when to connect.</p><a href="https://slaunt.ai/setup">Set up Slaunt →</a></section>
62
+ <p class="fine">What this check covered: actions advertised by connected services. Slaunt did not use those actions or read prompts, files, credentials, other types of AI assistants, or past activity. Generated ${escapeHtml(result.generatedAt)}.</p>
65
63
  </main></body></html>`;
66
64
  }
67
65
  export async function writeHtmlReport(result, outputPath) {
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":"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"}
@@ -7,8 +7,11 @@ export interface AnalysisBeat {
7
7
  tone: AnalysisBeatTone;
8
8
  }
9
9
  export interface PlayAnalysisPathOptions {
10
+ durationMs?: number;
11
+ silent?: boolean;
10
12
  sleep?: (milliseconds: number) => Promise<void>;
11
13
  }
14
+ export declare const DEFAULT_INSPECTION_WINDOW_MS = 78000;
12
15
  export declare function buildAnalysisPath(result: AuditResult): AnalysisBeat[];
13
16
  export declare function playAnalysisPath(result: AuditResult, options?: PlayAnalysisPathOptions): Promise<void>;
14
17
  //# sourceMappingURL=analysis-path.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"analysis-path.d.ts","sourceRoot":"","sources":["../../src/tui/analysis-path.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAUD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,CAsCrE;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CAkBf"}
1
+ {"version":3,"file":"analysis-path.d.ts","sourceRoot":"","sources":["../../src/tui/analysis-path.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAsBnD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,CAkIrE;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CAkCf"}
@@ -1,44 +1,144 @@
1
1
  import chalk from 'chalk';
2
2
  import ora from 'ora';
3
+ export const DEFAULT_INSPECTION_WINDOW_MS = 78_000;
3
4
  const wait = (milliseconds) => new Promise((resolve) => {
4
5
  setTimeout(resolve, milliseconds);
5
6
  });
6
7
  function plural(value, singular, pluralForm = `${singular}s`) {
7
8
  return value === 1 ? singular : pluralForm;
8
9
  }
10
+ function formatRemaining(milliseconds) {
11
+ const seconds = Math.max(0, Math.ceil(milliseconds / 1_000));
12
+ if (seconds < 60)
13
+ return `~${seconds}s left`;
14
+ const minutes = Math.floor(seconds / 60);
15
+ const remainder = seconds % 60;
16
+ return `~${minutes}m ${remainder}s left`;
17
+ }
18
+ function hasAnyCapability(capabilities, expected) {
19
+ return capabilities.some((capability) => expected.has(capability));
20
+ }
9
21
  export function buildAnalysisPath(result) {
10
22
  const { summary } = result;
11
23
  const criticalPaths = result.findings.filter((finding) => finding.severity === 'critical').length;
12
- const crossServerChains = result.findings.filter((finding) => (finding.serverNames.length > 1 && /chain/i.test(`${finding.title} ${finding.why}`))).length;
24
+ const crossServerChains = result.findings.filter((finding) => finding.serverNames.length > 1).length;
13
25
  const sharedPermissionFindings = result.findings.filter((finding) => finding.clients.length > 1).length;
26
+ const successfulInventories = result.probes.filter((probe) => probe.status === 'ok').length;
27
+ const unavailableInventories = result.probes.filter((probe) => probe.status !== 'ok').length;
28
+ const transportKinds = new Set(result.discovery.servers.map((server) => server.transport)).size;
29
+ const configSources = new Set(result.discovery.clients.flatMap((client) => client.sources)).size;
30
+ const schemaBackedTools = result.tools.filter((tool) => tool.inputSchema && Object.keys(tool.inputSchema).length > 0).length;
31
+ const sensitiveServers = new Set(result.tools
32
+ .filter((tool) => tool.classification.sensitive)
33
+ .map((tool) => `${tool.client}:${tool.serverName}`)).size;
34
+ const stateChangingCapabilities = new Set([
35
+ 'write-data', 'write-files', 'delete-data', 'execute-code', 'execute-shell',
36
+ 'deploy-production', 'edit-code', 'merge-pull-request', 'administer-system', 'send-message',
37
+ ]);
38
+ const stateChangingTools = result.tools.filter((tool) => (hasAnyCapability(tool.classification.capabilities, stateChangingCapabilities))).length;
39
+ const secretExecutionChains = result.findings.filter((finding) => (/secret|credential/i.test(`${finding.title} ${finding.access.join(' ')}`)
40
+ && /shell|command|execute/i.test(`${finding.title} ${finding.access.join(' ')}`))).length;
41
+ const suspiciousUnknowns = result.tools.filter((tool) => (tool.classification.source === 'unknown'
42
+ && /admin|execute|trigger|workflow|sync|deploy|delete/i.test(tool.name))).length;
43
+ const clientsWithSensitiveAccess = new Set(result.tools
44
+ .filter((tool) => tool.classification.sensitive)
45
+ .map((tool) => tool.client)).size;
46
+ const confidence = summary.tools > 0 ? Math.round((summary.classified / summary.tools) * 100) : 0;
47
+ const postureAvailable = summary.tools > 0;
14
48
  return [
15
49
  {
16
- active: `Indexing ${summary.tools} tools from ${summary.servers} MCP servers`,
17
- complete: `Indexed ${summary.tools} ${plural(summary.tools, 'tool')} from ${summary.servers} MCP ${plural(summary.servers, 'server')}`,
18
- delayMs: 380,
50
+ active: 'Finding Claude and Codex settings on this computer',
51
+ complete: `${summary.clientsDetected} AI ${plural(summary.clientsDetected, 'assistant')} found in ${configSources} settings ${plural(configSources, 'file')}`,
52
+ delayMs: 4_800,
53
+ tone: 'success',
54
+ },
55
+ {
56
+ active: 'Listing the services each assistant can reach',
57
+ complete: `${summary.servers} connected ${plural(summary.servers, 'service')} · ${transportKinds} connection ${plural(transportKinds, 'type')}`,
58
+ delayMs: 5_400,
59
+ tone: 'success',
60
+ },
61
+ {
62
+ active: 'Checking what each connected service allows',
63
+ complete: `${successfulInventories} permission ${plural(successfulInventories, 'list')} available · ${unavailableInventories} unavailable`,
64
+ delayMs: 5_200,
65
+ tone: unavailableInventories > 0 ? 'warning' : 'success',
66
+ },
67
+ {
68
+ active: `Reading the names and descriptions of ${summary.tools} available actions`,
69
+ complete: `${summary.tools} ${plural(summary.tools, 'action')} reviewed · ${schemaBackedTools} include usage details`,
70
+ delayMs: 5_200,
19
71
  tone: 'success',
20
72
  },
21
73
  {
22
- active: 'Searching direct and chained privilege paths',
23
- complete: `${criticalPaths} direct · ${crossServerChains} chained`,
24
- delayMs: 680,
25
- tone: criticalPaths + crossServerChains > 0 ? 'warning' : 'success',
74
+ active: 'Matching each action to the kind of access it provides',
75
+ complete: `${summary.classified} understood · ${summary.unclassified} need a closer look · ${confidence}% covered`,
76
+ delayMs: 6_000,
77
+ tone: summary.unclassified > 0 ? 'warning' : 'success',
78
+ },
79
+ {
80
+ active: 'Finding access to sensitive information and important changes',
81
+ complete: `${summary.sensitiveCapabilities} sensitive ${plural(summary.sensitiveCapabilities, 'action')} across ${sensitiveServers} service connections`,
82
+ delayMs: 5_200,
83
+ tone: summary.sensitiveCapabilities > 0 ? 'warning' : 'success',
26
84
  },
27
85
  {
28
- active: `Comparing permissions across ${summary.clientsDetected} agent clients`,
86
+ active: 'Checking which actions can change data or run commands',
87
+ complete: `${stateChangingTools} ${plural(stateChangingTools, 'action')} can make changes`,
88
+ delayMs: 5_800,
89
+ tone: stateChangingTools > 0 ? 'warning' : 'success',
90
+ },
91
+ {
92
+ active: 'Looking for direct access to live systems or administrator controls',
93
+ complete: criticalPaths > 0
94
+ ? `${criticalPaths} urgent ${plural(criticalPaths, 'issue')} found`
95
+ : 'No urgent direct access found',
96
+ delayMs: 5_000,
97
+ tone: criticalPaths > 0 ? 'warning' : 'success',
98
+ },
99
+ {
100
+ active: 'Checking whether credentials and command access can be combined',
101
+ complete: secretExecutionChains > 0
102
+ ? `${secretExecutionChains} risky ${plural(secretExecutionChains, 'combination')} found`
103
+ : 'Credentials and command access are kept separate',
104
+ delayMs: 6_200,
105
+ tone: secretExecutionChains > 0 ? 'warning' : 'success',
106
+ },
107
+ {
108
+ active: 'Looking for permissions that become riskier when combined',
109
+ complete: crossServerChains > 0
110
+ ? `${crossServerChains} risky ${plural(crossServerChains, 'combination')} across connected services`
111
+ : 'No risky combinations found across services',
112
+ delayMs: 6_400,
113
+ tone: crossServerChains > 0 ? 'warning' : 'success',
114
+ },
115
+ {
116
+ active: `Comparing what each of the ${summary.clientsDetected} AI assistants can do`,
29
117
  complete: sharedPermissionFindings > 0
30
- ? `Permission overlap contributes to ${sharedPermissionFindings} ${plural(sharedPermissionFindings, 'finding')}`
31
- : 'No risky permission overlap found',
32
- delayMs: 520,
118
+ ? `${sharedPermissionFindings} ${plural(sharedPermissionFindings, 'case')} of shared powerful access`
119
+ : 'The assistants do not share risky access',
120
+ delayMs: 5_200,
33
121
  tone: sharedPermissionFindings > 0 ? 'warning' : 'success',
34
122
  },
35
123
  {
36
- active: 'Prioritizing findings by exploitability and blast radius',
37
- complete: summary.highRiskFindings > 0
38
- ? `${summary.highRiskFindings} high-risk · ${summary.unclassified} unclassified`
39
- : `${summary.unclassified} unclassified · no high-risk findings`,
40
- delayMs: 490,
41
- tone: summary.highRiskFindings + summary.unclassified > 0 ? 'warning' : 'success',
124
+ active: 'Checking whether each assistant has only the access it needs',
125
+ complete: `${clientsWithSensitiveAccess} AI ${plural(clientsWithSensitiveAccess, 'assistant')} have sensitive access`,
126
+ delayMs: 5_400,
127
+ tone: clientsWithSensitiveAccess > 1 ? 'warning' : 'success',
128
+ },
129
+ {
130
+ active: 'Setting aside unfamiliar actions for a person to review',
131
+ complete: `${summary.unclassified} unfamiliar · ${suspiciousUnknowns} may make changes`,
132
+ delayMs: 4_400,
133
+ tone: summary.unclassified > 0 ? 'warning' : 'success',
134
+ },
135
+ {
136
+ active: 'Putting the most urgent issues first',
137
+ complete: postureAvailable
138
+ ? `${summary.highRiskFindings} urgent ${plural(summary.highRiskFindings, 'issue')} · safety score ${summary.postureScore}/100 · ${confidence}% understood`
139
+ : 'Safety score unavailable · no action lists could be read',
140
+ delayMs: 7_800,
141
+ tone: !postureAvailable || summary.highRiskFindings + summary.unclassified > 0 ? 'warning' : 'success',
42
142
  },
43
143
  ];
44
144
  }
@@ -48,15 +148,29 @@ export async function playAnalysisPath(result, options = {}) {
48
148
  const first = beats[0];
49
149
  if (!first)
50
150
  return;
151
+ const requestedDuration = Math.max(0, options.durationMs ?? DEFAULT_INSPECTION_WINDOW_MS);
152
+ const nominalDuration = beats.reduce((total, beat) => total + beat.delayMs, 0);
153
+ const scale = nominalDuration > 0 ? requestedDuration / nominalDuration : 0;
154
+ let remainingMs = requestedDuration;
51
155
  const spinner = ora({
52
156
  color: 'magenta',
157
+ ...(options.silent !== undefined ? { isSilent: options.silent } : {}),
53
158
  spinner: 'dots12',
54
159
  text: first.active,
55
160
  }).start();
56
- for (const beat of beats) {
57
- spinner.text = beat.active;
58
- await sleep(beat.delayMs);
161
+ for (const [index, beat] of beats.entries()) {
162
+ const phaseDuration = beat.delayMs * scale;
163
+ const analysisDuration = Math.round(phaseDuration * 0.82);
164
+ const evidenceDuration = Math.max(0, Math.round(phaseDuration) - analysisDuration);
165
+ const position = chalk.gray(`${String(index + 1).padStart(2, '0')}/${beats.length}`);
166
+ spinner.text = `${position} ${beat.active} ${chalk.gray(`· ${formatRemaining(remainingMs)}`)}`;
167
+ await sleep(analysisDuration);
168
+ remainingMs = Math.max(0, remainingMs - analysisDuration);
169
+ const marker = beat.tone === 'warning' ? chalk.yellow('!') : chalk.green('✓');
170
+ spinner.text = `${position} ${marker} ${beat.complete}`;
171
+ await sleep(evidenceDuration);
172
+ remainingMs = Math.max(0, remainingMs - evidenceDuration);
59
173
  }
60
- spinner.succeed(`${chalk.bold('Analysis complete')} ${chalk.gray('·')} ${result.summary.highRiskFindings} high-risk ${chalk.gray('·')} ${result.summary.unclassified} unclassified`);
174
+ spinner.succeed(`${chalk.bold('Safety check complete')} ${chalk.gray('·')} ${result.summary.highRiskFindings} urgent ${plural(result.summary.highRiskFindings, 'issue')} ${chalk.gray('·')} ${result.summary.unclassified} need review`);
61
175
  }
62
176
  //# sourceMappingURL=analysis-path.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analysis-path.js","sourceRoot":"","sources":["../../src/tui/analysis-path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAgBtB,MAAM,IAAI,GAAG,CAAC,YAAoB,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IAC5E,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,SAAS,MAAM,CAAC,KAAa,EAAE,QAAgB,EAAE,UAAU,GAAG,GAAG,QAAQ,GAAG;IAC1E,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAC3B,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;IAClG,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAC5D,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CACnF,CAAC,CAAC,MAAM,CAAC;IACV,MAAM,wBAAwB,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IAExG,OAAO;QACL;YACE,MAAM,EAAE,YAAY,OAAO,CAAC,KAAK,eAAe,OAAO,CAAC,OAAO,cAAc;YAC7E,QAAQ,EAAE,WAAW,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,OAAO,CAAC,OAAO,QAAQ,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;YACtI,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,SAAS;SAChB;QACD;YACE,MAAM,EAAE,8CAA8C;YACtD,QAAQ,EAAE,GAAG,aAAa,aAAa,iBAAiB,UAAU;YAClE,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,aAAa,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SACpE;QACD;YACE,MAAM,EAAE,gCAAgC,OAAO,CAAC,eAAe,gBAAgB;YAC/E,QAAQ,EAAE,wBAAwB,GAAG,CAAC;gBACpC,CAAC,CAAC,qCAAqC,wBAAwB,IAAI,MAAM,CAAC,wBAAwB,EAAE,SAAS,CAAC,EAAE;gBAChH,CAAC,CAAC,mCAAmC;YACvC,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,wBAAwB,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SAC3D;QACD;YACE,MAAM,EAAE,0DAA0D;YAClE,QAAQ,EAAE,OAAO,CAAC,gBAAgB,GAAG,CAAC;gBACpC,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,gBAAgB,OAAO,CAAC,YAAY,eAAe;gBAChF,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,uCAAuC;YAClE,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SAClF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAmB,EACnB,OAAO,GAA4B,EAAE;IAErC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;IACpC,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,MAAM,OAAO,GAAG,GAAG,CAAC;QAClB,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,KAAK,CAAC,MAAM;KACnB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEX,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,CAAC,OAAO,CACb,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,cAAc,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,eAAe,CACpK,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"analysis-path.js","sourceRoot":"","sources":["../../src/tui/analysis-path.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/tui/render.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAiC,MAAM,aAAa,CAAC;AAqI9E,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAsEvD;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/tui/render.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAiC,MAAM,aAAa,CAAC;AAkI9E,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAuEvD;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
@@ -1,5 +1,6 @@
1
1
  import { relative } from 'node:path';
2
2
  import chalk from 'chalk';
3
+ import { plainCapability, plainClient, plainFinding } from '../presentation/plain-language.js';
3
4
  const severityColor = {
4
5
  critical: chalk.red.bold,
5
6
  high: chalk.hex('#f59e0b').bold,
@@ -8,23 +9,10 @@ const severityColor = {
8
9
  info: chalk.gray,
9
10
  };
10
11
  const capabilityPriority = [
11
- ['deploy-production', 'deploy'],
12
- ['execute-shell', 'execute'],
13
- ['read-secrets', 'credentials'],
14
- ['administer-system', 'admin'],
15
- ['merge-pull-request', 'merge'],
16
- ['edit-code', 'edit'],
17
- ['write-files', 'file write'],
18
- ['delete-data', 'delete'],
19
- ['write-data', 'write'],
20
- ['read-files', 'file read'],
21
- ['manage-auth', 'identity'],
22
- ['control-browser', 'browser'],
23
- ['send-message', 'message'],
24
- ['network-access', 'network'],
25
- ['create-pull-request', 'pull requests'],
26
- ['execute-code', 'code'],
27
- ['read-data', 'read'],
12
+ 'deploy-production', 'execute-shell', 'read-secrets', 'administer-system',
13
+ 'merge-pull-request', 'edit-code', 'write-files', 'delete-data', 'write-data',
14
+ 'read-files', 'manage-auth', 'control-browser', 'send-message', 'network-access',
15
+ 'create-pull-request', 'execute-code', 'read-data',
28
16
  ];
29
17
  function width() {
30
18
  return Math.max(36, Math.min(82, process.stdout.columns || 78));
@@ -58,40 +46,50 @@ function section(title) {
58
46
  }
59
47
  function scoreLabel(score) {
60
48
  if (score >= 80)
61
- return { color: chalk.green, label: 'strong' };
49
+ return { color: chalk.green, label: 'Looks good' };
62
50
  if (score >= 55)
63
- return { color: chalk.yellow, label: 'review' };
64
- return { color: chalk.red, label: 'needs attention' };
51
+ return { color: chalk.yellow, label: 'Review recommended' };
52
+ return { color: chalk.red, label: 'Needs attention' };
65
53
  }
66
54
  function postureLine(result, unavailable) {
67
55
  const { summary } = result;
68
56
  if (summary.tools === 0 && unavailable > 0) {
69
- return `${chalk.yellow.bold('Posture unavailable')} ${chalk.gray('· tool inventories incomplete')}`;
57
+ return `${chalk.yellow.bold('Safety score unavailable')} ${chalk.gray('· some services could not be fully checked')}`;
70
58
  }
71
59
  const score = scoreLabel(summary.postureScore);
72
- const suffix = unavailable > 0 ? 'partial coverage' : score.label;
73
- return `${score.color(chalk.bold(`${summary.postureScore}/100`))} posture ${chalk.gray(`· ${suffix}`)}`;
60
+ const suffix = unavailable > 0 ? 'Some services could not be fully checked' : score.label;
61
+ return `${score.color(chalk.bold(`${summary.postureScore}/100 safety score`))} ${chalk.gray(`· ${suffix}`)}`;
62
+ }
63
+ function naturalList(values) {
64
+ if (values.length <= 1)
65
+ return values[0] || '';
66
+ if (values.length === 2)
67
+ return `${values[0]} and ${values[1]}`;
68
+ return `${values.slice(0, -1).join(', ')}, and ${values.at(-1)}`;
74
69
  }
75
70
  function findingLines(item) {
76
71
  const icon = item.severity === 'critical' ? '◆' : '▲';
77
72
  const color = severityColor[item.severity];
78
- const context = [item.serverNames.join(', '), item.toolNames.length === 1 ? item.toolNames[0] : undefined]
79
- .filter(Boolean)
80
- .join(' · ');
73
+ const copy = plainFinding(item);
74
+ const assistants = naturalList(item.clients.map(plainClient));
75
+ const services = naturalList(item.serverNames);
76
+ const where = [assistants, services].filter(Boolean).join(' → ');
77
+ const actionLabel = item.toolNames.length === 1 ? 'Action name' : 'Action names';
81
78
  return [
82
79
  '',
83
- ...wrap(`${icon} ${item.severity.toUpperCase()} ${item.title}`),
84
- ...(context ? wrap(context, ' ').map((line) => chalk.gray(line)) : []),
85
- ...wrap(item.why, ' '),
86
- ...wrap(`Fix: ${item.recommendation}`, ' ').map((line) => color(line)),
80
+ ...wrap(`${icon} ${copy.label.toUpperCase()} ${copy.title}`),
81
+ ...(where ? wrap(`Where: ${where}`, ' ').map((line) => chalk.gray(line)) : []),
82
+ ...(item.toolNames.length ? wrap(`${actionLabel}: ${item.toolNames.join(', ')}`, ' ').map((line) => chalk.gray(line)) : []),
83
+ ...wrap(`Why this matters: ${copy.why}`, ' '),
84
+ ...wrap(`What you can do: ${copy.recommendation}`, ' ').map((line) => color(line)),
87
85
  ];
88
86
  }
89
87
  function shortCapabilities(capabilities) {
90
88
  const set = new Set(capabilities);
91
89
  const labels = capabilityPriority
92
- .filter(([capability]) => set.has(capability))
93
- .map(([, label]) => label);
94
- return [...new Set(labels)].slice(0, 3).join(' · ') || 'inventory unavailable';
90
+ .filter((capability) => set.has(capability))
91
+ .map(plainCapability);
92
+ return [...new Set(labels)].slice(0, 3).join(', ') || 'Permissions could not be read';
95
93
  }
96
94
  function accessLines(result) {
97
95
  const lines = [];
@@ -104,7 +102,7 @@ function accessLines(result) {
104
102
  .filter((item) => item.client === client.id)
105
103
  .sort((left, right) => highestRisk(right.id) - highestRisk(left.id));
106
104
  if (servers.length === 0) {
107
- lines.push(chalk.gray(' No enabled MCP servers'));
105
+ lines.push(chalk.gray(' No connected services found'));
108
106
  continue;
109
107
  }
110
108
  for (const server of servers.slice(0, 6)) {
@@ -115,7 +113,7 @@ function accessLines(result) {
115
113
  lines.push(` ${chalk.hex('#a78bfa')(name)}${shortCapabilities(capabilities)}`);
116
114
  }
117
115
  if (servers.length > 6)
118
- lines.push(chalk.gray(` + ${servers.length - 6} more in the full report`));
116
+ lines.push(chalk.gray(` + ${servers.length - 6} more in the detailed report`));
119
117
  }
120
118
  return lines;
121
119
  }
@@ -131,45 +129,46 @@ export function renderAudit(result) {
131
129
  const failedProbes = result.probes.filter((probe) => probe.status !== 'ok');
132
130
  const lines = [
133
131
  '',
134
- chalk.bold('Audit complete'),
132
+ chalk.bold('Safety check complete'),
135
133
  postureLine(result, failedProbes.length),
136
134
  '',
137
- `${chalk.bold(String(summary.clientsDetected))} ${plural(summary.clientsDetected, 'client')} ${chalk.gray('·')} ${chalk.bold(String(summary.servers))} ${plural(summary.servers, 'server')} ${chalk.gray('·')} ${chalk.bold(String(summary.tools))} ${plural(summary.tools, 'tool')}`,
138
- `${chalk.bold(String(summary.sensitiveCapabilities))} sensitive capabilities ${chalk.gray('·')} ${chalk.bold(String(summary.unclassified))} unclassified`,
139
- ...section('Priority findings'),
135
+ `${chalk.bold(String(summary.clientsDetected))} AI ${plural(summary.clientsDetected, 'assistant')} checked ${chalk.gray('·')} ${chalk.bold(String(summary.servers))} connected ${plural(summary.servers, 'service')}`,
136
+ `${chalk.bold(String(summary.tools))} available ${plural(summary.tools, 'action')} reviewed`,
137
+ `${chalk.bold(String(summary.sensitiveCapabilities))} can access sensitive information or make changes ${chalk.gray('·')} ${chalk.bold(String(summary.unclassified))} need a closer look`,
138
+ ...section('What needs your attention'),
140
139
  ];
141
140
  if (priority.length) {
142
141
  for (const finding of priority.slice(0, 3))
143
142
  lines.push(...findingLines(finding));
144
143
  }
145
144
  else if (failedProbes.length > 0) {
146
- lines.push('', chalk.yellow('No high-risk paths found in the retrieved inventories.'), chalk.gray('Missing inventories prevent a complete assessment.'));
145
+ lines.push('', chalk.yellow('No urgent issues were found in the permissions Slaunt could read.'), chalk.gray('Some services could not be checked, so this result is incomplete.'));
147
146
  }
148
147
  else {
149
- lines.push('', chalk.green('✓ No critical or high-risk access paths found.'));
148
+ lines.push('', chalk.green('✓ No urgent or high-priority access issues found.'));
150
149
  }
151
150
  if (otherFindings > 0) {
152
- lines.push('', chalk.gray(`${otherFindings} additional ${plural(otherFindings, 'finding')} included in the full report.`));
151
+ lines.push('', chalk.gray(`${otherFindings} lower-priority ${plural(otherFindings, 'item')} saved in the detailed report.`));
153
152
  }
154
- lines.push(...section('Access by client'), ...accessLines(result));
153
+ lines.push(...section('What each assistant can do'), ...accessLines(result));
155
154
  if (unknown.length) {
156
155
  const visibleUnknown = unknown.slice(0, 8);
157
- lines.push(...section(`Unclassified tools (${unknown.length})`), '', ...wrap(visibleUnknown.map((tool) => tool.name).join(' · '), ' '), ...(unknown.length > visibleUnknown.length
158
- ? [chalk.gray(` + ${unknown.length - visibleUnknown.length} more in the full report`)]
159
- : []), ...wrap('Treated as potentially sensitive until reviewed.', ' ').map((line) => chalk.gray(line)));
156
+ lines.push(...section(`Items Slaunt could not identify (${unknown.length})`), '', ...wrap(visibleUnknown.map((tool) => tool.name).join(' · '), ' '), ...(unknown.length > visibleUnknown.length
157
+ ? [chalk.gray(` + ${unknown.length - visibleUnknown.length} more in the detailed report`)]
158
+ : []), ...wrap('These action names are not in Slaunt\'s reviewed guide yet. Until a person checks them, Slaunt treats them as possibly sensitive.', ' ').map((line) => chalk.gray(line)));
160
159
  }
161
160
  if (failedProbes.length) {
162
- lines.push(...section(`Tool inventories unavailable (${failedProbes.length})`));
161
+ lines.push(...section(`Services that could not be fully checked (${failedProbes.length})`));
163
162
  for (const probe of failedProbes.slice(0, 4)) {
164
163
  const server = result.discovery.servers.find((item) => item.id === probe.serverId);
165
164
  lines.push(...wrap(`${server?.clientLabel || 'Client'} / ${server?.name || probe.serverId}: ${probe.message || probe.status}`, ' '));
166
165
  }
167
166
  if (failedProbes.length > 4)
168
- lines.push(chalk.gray(` + ${failedProbes.length - 4} more in the full report`));
167
+ lines.push(chalk.gray(` + ${failedProbes.length - 4} more in the detailed report`));
169
168
  }
170
- lines.push(...section('Saved locally'), ...(result.reportPath ? ['', chalk.cyan(reportPath(result.reportPath))] : ['', chalk.gray('HTML report disabled for this run.')]), '', ...wrap('Scope: declared MCP tools only. No tools called, prompts analyzed, files read, or credentials inspected.').map((line) => chalk.gray(line)), ...section('Optional next step'), '', ...wrap('Add approvals and role-scoped access when you are ready:'), chalk.cyan.underline('https://slaunt.ai/setup'));
169
+ lines.push(...section('Your detailed report'), ...(result.reportPath ? ['', chalk.cyan(reportPath(result.reportPath))] : ['', chalk.gray('No detailed report was saved for this run.')]), '', ...wrap('What this check covered: Slaunt reviewed the actions advertised by connected services. It did not use those actions or read your prompts, files, or credentials.').map((line) => chalk.gray(line)), ...section('Want ongoing protection?'), '', ...wrap('Add approval prompts and give each assistant only the access it needs:'), chalk.cyan.underline('https://slaunt.ai/setup'));
171
170
  if (result.discovery.warnings.length) {
172
- lines.push(...section('Notes'));
171
+ lines.push(...section('Other notes'));
173
172
  for (const warning of result.discovery.warnings.slice(0, 3))
174
173
  lines.push(...wrap(warning, ' ').map((line) => chalk.gray(line)));
175
174
  if (result.discovery.warnings.length > 3)
@@ -178,6 +177,6 @@ export function renderAudit(result) {
178
177
  return lines.join('\n');
179
178
  }
180
179
  export function renderHeader() {
181
- return `${chalk.bold.hex('#a78bfa')('SLAUNT')} ${chalk.gray('· agent access audit')}\n${chalk.gray('Local analysis · no audit payload uploaded')}`;
180
+ return `${chalk.bold.hex('#a78bfa')('SLAUNT')} ${chalk.gray('· AI assistant safety check')}\n${chalk.gray('Checks access on this computer · nothing from this check is uploaded')}`;
182
181
  }
183
182
  //# sourceMappingURL=render.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tui/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tui/render.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "slaunt",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Privacy-first MCP agent access auditor for Claude and Codex",
5
5
  "type": "module",
6
6
  "bin": {