-
name: skarn
-
description: skarn is an AI coding session security scanner with built-in session search. It detects leaked credentials and the attack patterns that cause or exploit them in AI coding-assistant sessions (Claude Code, Gemini CLI, Codex CLI, Cursor, VS Code Copilot Chat), and lets you search, browse, and analyze those same sessions. It is a single static binary; sessions are scanned locally and nothing leaves the machine by default.
-
snapcraft: PRIVATE (closed-source). The snapcraft.yaml is generated per architecture from a template; the rendered manifest (amd64) is:
name: skarn version: "0.20.0" summary: AI coding session security scanner with built-in session search license: Proprietary website: https://getskarn.com contact: https://getskarn.com grade: stable confinement: classic base: core24 platforms: amd64: build-on: [amd64] build-for: [amd64] parts: skarn: plugin: dump source: payload organize: skarn: bin/skarn apps: skarn: command: bin/skarn -
upstream: PRIVATE (closed-source, proprietary license)
-
upstream-relation: First-party. The snap publisher is the software’s developer and vendor.
-
supported-category: None of the currently listed categories fits precisely, so per the process this likely needs a senior reviewer to gather requirements. skarn is developer tooling that reads the local session and configuration files the developer’s AI coding assistants write under $HOME; the nearest listed category is “tools for local, non-root user driven configuration of development environments,” but the fit is imperfect - skarn audits that per-workspace assistant state rather than configuring it.
-
reasoning: skarn’s entire input surface is hidden files under the user’s home directory - the AI assistants’ local session stores and config: Claude Code under ~/.claude, Codex under ~/.codex, Cursor under ~/.cursor plus its state.vscdb under ~/.config, GitHub Copilot CLI under ~/.copilot, VS Code Copilot Chat’s state.vscdb under ~/.config, Gemini under ~/.gemini, and skarn’s own ~/.skarn.json, ~/.config/skarn, ~/.cache/skarn. Tested empirically under strict confinement: I built skarn as a strict-confinement snap with the home interface (core24), seeded a Claude Code session at ~/.claude/projects/, and ran it. With the home interface connected, “skarn search” and “skarn assess” scan 0 sessions (0 B) - the snap cannot see the session at all - while the identical binary run unconfined reads it (1 match, 1 session). Under strict confinement $HOME is remapped to the snap’s private directory and the snapd home interface excludes hidden dotfiles by design, so no assistant session store is reachable.
personal-files could enumerate the default paths above, but it does not solve the problem: the set is user-extensible at runtime through documented overrides (SKARN_CLAUDE_DIRS, CLAUDE_CONFIG_DIR, COPILOT_HOME, and per-store sessions_path in ~/.skarn.json) and grows with every newly supported assistant, so a fixed personal-files allowlist is permanently incomplete and would silently miss sessions - an unacceptable failure mode for a security auditor whose whole purpose is to find leaked credentials in exactly those files - while requiring a fresh store review per assistant and per new override path.
skarn is a read-only auditor over files the user already owns: it writes none of them, and its scan is offline by default (the only network calls are an explicit opt-in rule-feed fetch and an explicit license renewal, both user-initiated). The snap is closed-source (license: Proprietary).
YES I understand that strict confinement is generally preferred over classic.
YES I’ve tried the existing interfaces to make the snap to work under strict confinement.