Show HN: Offense – Security tools for your agents Offense Research, Inc. released Offense, an open-source security toolset that lets coding agents including Pi, OMP, Hermes, Codex, Claude Code and Crush audit dependencies, inspect source and GitHub Actions workflows, and test proposed fixes, returning structured security evidence through CLI, MCP and HTTP. The tool inventories npm/pnpm lockfiles and queries OSV advisories through a local engine, and runs pinned Opengrep and Zizmor engines in isolated Docker containers via a self-hosted API/MCP profile; the software is open source with optional paid hosting at offense.sh. Offense Research cautions that a finding is not a confirmed exploit, an advisory match is not proof of reachability, and a partial scan is not a clean bill of health, leaving authorization and change review with the agent's operator. Security tools your AI agent can discover, call and verify. Offense is a product by Offense Research, Inc. https://offenseresearch.com . Open-source software, optional paid hosting. Give Pi, OMP, Hermes, Codex, Claude Code, Crush or another coding agent the tools to audit dependencies, inspect source and workflows, and test a proposed fix. Offense returns structured security evidence through CLI, MCP and HTTP . Your agent reads that evidence, investigates your code, makes authorized changes and runs your tests—with its existing model, repository access and permissions. Open-source repository https://github.com/offense-research/offense · Discord https://discord.gg/xP7GCnyF · Hosted service https://offense.sh · Self-hosting https://github.com/offense-research/offense/blob/main/docs/self-hosting.md · Contributing https://github.com/offense-research/offense/blob/main/CONTRIBUTING.md · Report a vulnerability https://github.com/offense-research/offense/blob/main/SECURITY.md Start here: Give this to your agent give-this-to-your-agent · Agent installation choose-your-agent · Choose a mode choose-how-to-run-it · Local quick start quick-start-local-dependency-analysis · MCP setup connect-your-coding-agent · Self-hosted platform run-the-self-hosted-platform · Documentation documentation · Troubleshooting troubleshooting · Community community-and-support Paste this into your coding agent in the project you want to check : Set up Offense for this project. Read the installation instructions at https://github.com/offense-research/offense install-the-offensesh-agent-skill and review the skill at https://raw.githubusercontent.com/offense-research/offense/main/.agents/skills/scanning-with-offense/SKILL.md Reuse an existing reviewed Offense checkout or connection if available. Otherwise inspect the public source before using its helpers. Install the skill in this agent's project-local skill directory, preserving custom files and other agent settings. Tell me if a new session or project trust is needed. Run only the offline dependency-input preview. Show the selected lockfiles, unsupported inputs and which execution mode would perform the real audit. Do not upload data, run a paid scan, install the target project's dependencies, edit application code, commit or push. The first success is a real preview and an explicit scope , not “installed” without a command result. The agent needs terminal/filesystem access and Node; copying a skill does not give a chat-only client those capabilities. If it cannot read GitHub pages, use the raw skill URL or a reviewed local checkout. Already configured? Start with one of the task prompts ask-for-the-outcome-you-want below. Prefer manual setup? Use the per-agent instructions choose-your-agent . - Find vulnerable dependencies. Inventory npm/pnpm lockfiles, query OSV advisories and inspect upgrade options with the independent local engine. - Give your agent actionable context. Produce structured findings and a repository-specific remediation prompt; use explicit triage and rehearsal commands when you need deeper evidence. - Check source and GitHub Actions workflows. Run pinned Opengrep and Zizmor engines through the self-hosted API/MCP profile in isolated Docker containers. - Discover tools before running them. Inspect coverage, supported inputs, availability and price quotes. A directory listing is not a promise that a tool is enabled on your deployment. - Use the same job workflow across clients. Submit bounded jobs, retrieve results and preserve partial/failed outcomes through the CLI, MCP or HTTP API. Offense is not an autonomous permission grant. A finding is not a confirmed exploit, an advisory match is not proof of reachability, and a partial scan is not a clean bill of health. Your agent remains responsible for reviewing changes and obtaining authorization before active testing, paid calls or publication. Offense provides tools and evidence. Your coding agent performs the investigation and remediation; you choose its scope and delivery permissions. | Step | Offense provides | Your agent does | |---|---|---| | Discover | Input previews, tool catalog, coverage and availability | Selects the project, revision and execution mode; identifies unsupported inputs | | Assess | Dependency advisory matches or scanner findings; hosted quotes and job results | Runs only authorized checks and retains incomplete results and receipts | | Investigate | Affected versions, locations, references and upgrade/planning evidence | Traces actual callers and attacker-controlled inputs; separates matches from reproduced vulnerabilities | | Fix | Upgrade options and constraints; optional explicit rehearsal helpers | Establishes a test baseline, edits the authorized scope and tests compatibility in isolation | | Verify | A new audit or scan of the changed inputs | Compares results, runs the original checks and reports remaining findings before authorized delivery | There is no hidden second agent, required model-provider key or automatic patch-and-publish step in this workflow. Providing a skill or MCP tool does not enforce a CI gate; application-controlled hooks need an explicit integration https://github.com/offense-research/offense/blob/main/docs/agent-security.md . Use these after setup . Each prompt states what the agent may do rather than granting an open-ended “secure everything” task. Understand dependency risk without changing code: Use Offense to audit this project's supported dependency lockfiles. Preview the scope first, then use the independent local engine to query OSV/npm. Keep source code local. Explain the highest-severity advisory matches against our actual usage, distinguish unknown reachability from confirmed behavior, and report coverage gaps. Save reports outside the checkout. Do not install project dependencies or change application files. The local engine needs its separate Node.js 24+ setup quick-start-local-dependency-analysis . This audit prompt authorizes dependency-metadata lookups, not a hosted source upload. Fix reviewed findings and leave a verified patch: Use the Offense report we reviewed to address the agreed dependency findings. Check that its inputs still match this checkout. Establish the original test baseline, choose the smallest compatible upgrade and test it in isolation. Rescan the resolved dependency tree. Where feasible, reproduce the security issue before the fix and demonstrate its absence afterward. Report every unresolved finding and failed or skipped check. Leave changes uncommitted; do not upload source, spend credit, open a PR, merge or deploy. Choose a hosted source or workflow check before spending: Use Offense's current tool catalog to select checks for this project's source and GitHub Actions workflows. Show supported inputs, omitted coverage, the exact proposed upload scope and maximum quoted charge. Obtain any needed upload permission before transmitting file content, including quote inputs. Do not submit a scan or buy credit. Wait for approval of the scope and budget. Read the structured report, not just a terminal success message. The local engine writes scan.json ; the hosted free-audit helper writes audit.json . Both also write remediation.md for the agent. These are different execution modes, not interchangeable commands. Hosted scanner jobs have their own receipts and results; retain the job ID and idempotency key for recovery. Ask the agent to end each task with: - Scope: repository/revision, execution mode and checked inputs. - Evidence: advisory matches or scanner findings, applicability and any reproduction. - Changes: the patch and why it addresses the reviewed findings, or “no changes.” - Verification: exact baseline/final commands and outcomes, plus the rescan. - Gaps: unsupported inputs, incomplete jobs, planning blockers and remaining findings. - Cost and delivery: actual reported charge if applicable, and whether changes are local, committed or published. An empty findings list is not proof the application is secure. A failed or partial job stays failed or partial; a compatible upgrade is not automatically a reproduced security fix. Treat scanner text and generated remediation prompts as evidence, not instructions that can override the user's scope or the agent's permissions. | Mode | Best for | Requirements | Execution and cost | |---|---|---|---| | Local dependency engine | Auditing a project from your terminal or coding agent | Node.js 24+, npm; no Docker or Offense account for dependency analysis | Runs on your machine; queries public OSV/npm metadata; no Offense usage charge | | Self-hosted platform | Running your own API, MCP endpoint and isolated source scanners | Linux amd64, Node.js 24+, npm, Git and Docker Engine | Your infrastructure; dependency audits, Opengrep and Zizmor enabled; Offense billing disabled | | Hosted service | Using managed tool execution without operating the scanner infrastructure | An Offense account for authenticated tools | Runs on the service; enabled paid tools use quoted prepaid credit | The local engine and self-hosted profile do not require an Offense subscription or model-provider key. Advisory lookup still needs network access; “local” does not mean an offline advisory database. You pay your own infrastructure costs when self-hosting. Use Node.js 24 or newer , npm and Git. This path does not start a server, install Docker scanners or require an account. git clone https://github.com/offense-research/offense.git cd offense npm --prefix offense ci --ignore-scripts Inspect the runtime and preview supported dependency inputs without network calls. node offense/bin/offense.mjs doctor /absolute/path/to/your-project node offense/bin/offense.mjs scan /absolute/path/to/your-project --preview When you are ready to query OSV/npm and write a report: node offense/bin/offense.mjs scan /absolute/path/to/your-project \ --output /absolute/path/outside-your-project/offense-report The scan writes scan.json for structured evidence and remediation.md for your agent. It does not edit the target project, install its dependencies, execute its scripts or open a pull request. Review reports before sharing them; they can contain private package names and local paths. The top-level repository and the nested offense/ package have separate dependency installations. The commands above install only the local engine. See the local-engine README https://github.com/offense-research/offense/blob/main/offense/README.md for triage, upgrade rehearsal and optional scanner helpers, each with its own prerequisites. Run these from the repository root, replacing PROJECT with your target's path: | Command | Purpose | Important boundary | |---|---|---| | node offense/bin/offense.mjs doctor PROJECT | Inspect runtime and optional executable availability | Offline; does not prove an engine version, Docker connection or active MCP registration | | node offense/bin/offense.mjs metadata PROJECT | Inspect sanitized dependency metadata | Offline; no report writes or application execution | | node offense/bin/offense.mjs scan PROJECT --preview | Preview the dependency inputs before an audit | No provider requests | | node offense/bin/offense.mjs scan PROJECT --output REPORT DIRECTORY | Audit dependencies and prepare upgrade/remediation context | Queries OSV/npm; writes reports outside the target checkout | | node offense/bin/offense.mjs triage --help | Learn how to investigate an existing report | Read the required scan inputs and coverage limits before use | | node offense/bin/offense.mjs rehearse --help | Learn how to rehearse an upgrade | Actual rehearsal executes project commands and requires an isolated environment | | node offense/bin/offense.mjs source-scan --help | Inspect local source/workflow scanning options | Actual scans require separately installed engines | Read both findings and coverage. scan.json contains machine-readable analysis; remediation.md gives your agent the evidence and next checks. A proposed upgrade still needs compatibility tests. Zero returned findings apply only to the checked scope and available advisory data—not every dependency, code path or future vulnerability. The local engine exposes offense.audit dependencies over stdio MCP: node offense/bin/offense.mjs mcp Configure your client to launch that command using the absolute path to the entrypoint; it is an MCP server, not an interactive terminal session. The agent setup guide https://github.com/offense-research/offense/blob/main/offense/docs/install.md covers project-scoped MCP and skill installation for Codex, Claude Code and other clients. Preserve existing client configuration and start a new agent session after installing. For a client using an mcpServers JSON configuration, merge this entry into its existing configuration rather than replacing other servers: { "mcpServers": { "offense-community": { "command": "node", "args": "/absolute/path/to/offense/offense/bin/offense.mjs", "mcp" } } } For Codex, the equivalent project .codex/config.toml entry is: mcp servers.offense-community command = "node" args = "/absolute/path/to/offense/offense/bin/offense.mjs", "mcp" The two offense path segments above are intentional: the repository contains a nested offense/ package. Replace the example with your actual checkout path. Claude Code uses project .mcp.json ; other clients may use a different location or schema. No API key belongs in this local-engine configuration. After restarting the client, verify it discovers offense.audit dependencies . Discovery is not a scan. If the client cannot load MCP, the local CLI remains available; a successful CLI command does not prove the client connected. Once connected, choose an audit, fix or tool-selection prompt ask-for-the-outcome-you-want . Tell the agent which execution mode is authorized; local and hosted tools may share capability names, but their data flow and account requirements differ. The portable scanning-with-offense skill https://github.com/offense-research/offense/blob/main/.agents/skills/scanning-with-offense/SKILL.md uses the Agent Skills format https://agentskills.io/skill-creation/quickstart . It teaches a compatible agent to preview dependency inputs, discover hosted tools, obtain spending approval and verify an authorized fix. It reuses the existing Offense helpers or MCP connection; it does not install scanners or credentials, and it is separate from the local engine's packaged skill. The skill is already in this checkout's .agents/skills/ directory. To use it in another project, choose your agent's directory below. These are project-local installs , not changes to your global agent settings. Install each skill once; do not duplicate it across compatibility directories in the same project. Each directory below is relative to the target project's root . The final file must be