What was inspected
Manifests and a 1251-package lockfile, tailwind.config.ts, .npmrc, git history, .git/hooks, IDE/devcontainer surfaces, lifecycle script flags, and static JS for the decoy/dropper path. Nothing in the target was executed.
A lightweight safety layer for coding-interview repositories and AI coding workflows.
RepoSafety combines existing repository-analysis and security tools into a focused workflow for inspecting unfamiliar code before you execute it.
/interview-repo-safety
Coding assignments increasingly arrive as complete repositories. Before reviewing them, you may clone them, install dependencies, run setup scripts, start development servers, execute tests, or ask an AI coding agent to work inside them.
The repository is code, and code can execute.
Every step crosses a trust boundary.
RepoSafety adds an inspection step between receiving an unfamiliar repository and running it.
Read manifests, lockfiles, hooks, IDE tasks, and repository structure. Identify executable surfaces without running them.
Apply static detection rules and, when available, Sonatype dependency intel and Opsera security-scan. Never install the target to analyze it.
Classify packages against the assignment, collect IOCs, and emit one categorical verdict with confidence.
The developer decides what to run. Optional Phase 2 install uses
a Docker jail (reposafety-run), not the host.
RepoSafety does not make the decision for you.
A real coding-interview repository analyzed with
/interview-repo-safety. The target was not installed or
executed.
Manifests and a 1251-package lockfile, tailwind.config.ts, .npmrc, git history, .git/hooks, IDE/devcontainer surfaces, lifecycle script flags, and static JS for the decoy/dropper path. Nothing in the target was executed.
A committed registry token, a decoy Tailwind plugin in devDependencies, and a private-scoped package that talks to a raw-IP host and evaluates the response. The animation stack does not fit the stated assignment.
Following the README (npm install && npm run dev) is enough to fetch the restricted package and reach RCE. Git hooks were clean. The trap is the install/dev path the candidate is told to run first.
The skill reported DO NOT INSTALL / RUN and refused sandboxed execution. It does not automatically declare a repository safe. A human reads the report and decides. If this assignment already ran elsewhere, treat that machine as compromised.
RepoSafety is designed to sit at the beginning of an AI-assisted coding workflow, before an agent starts executing unfamiliar repository code.
/interview-repo-safety
Phase 1 is always static. Announce: static-only audit, no install/run
of the target. Phase 2 runs only if you ask and the verdict is SAFE TO
INSTALL or REVIEW BEFORE INSTALLING. It uses a Docker jail with
folder-only filesystem access and default-deny egress
(registry.npmjs.org until you whitelist another host). A
block refuses install; observe-in-jail is a separate explicit request.
Categories below are surfaces the current skill actually inspects. Optional tools appear in the report only when they return data.
Languages, package managers, workspaces, containers, custom registries, private scopes, Git/tarball/file dependencies.
Direct and transitive, including devDependencies. Unusual names, unexpected private scopes, assignment mismatch.
preinstall, install, postinstall, prepare, and other lifecycle keys. App scripts that would load a decoy on npm run dev.
Dynamic eval (new Function), obfuscated loaders,
child_process in context of the assignment.
Domains, URLs, raw IPs, and remote payload fetch mechanisms. Recorded as IOCs. Payloads are not fetched.
Non-sample hooks, global hooksPath, .vscode / .devcontainer / .idea tasks that run on open.
.npmrc, .env, CI, and secrets in git history. Values redacted. TYPE / FILE / LOCATION / SEVERITY only.
Sonatype dependency intel and Opsera security-scan when those tools are already available. Gaps are reported as not verified.
RepoSafety does not attempt to replace mature security and static-analysis tools. It provides a focused workflow for applying them to one specific problem: understanding an unfamiliar repository before executing it.
The goal is risk reduction and informed review — not a guarantee of safety.
RepoSafety is intended to be understandable, inspectable and useful as a developer tool. The implementation and methodology are available on GitHub.
Run /interview-repo-safety against the repository first.