scope-discipline

scope-discipline is a skill for Claude Code from hypnguyen1209/offensive-claude. It costs 40 tokens per session (628 once invoked), scanned A, original, MIT.

An authorization checklist for security testing that requires every target to be explicitly listed as in scope before any network request or other interaction. It uses scope and action guard scripts to enforce that boundary.

In plain words
What is it for?
Checking whether a target is authorized before scanning, enumerating, exploiting, or contacting it, and gating outward or mutating actions during an engagement.
Why use it?
It prevents accidental testing of the wrong host, IP address, URL, or redirected asset. It also requires approval for actions that change systems or send outward requests.

Skill for Claude Code

Written for Claude Code: shipped in a Claude Code plugin.

Needs its repository: it runs a file that does not travel with it, so clone the repository first. The line is python skills/coding-mastery/scripts/_lib/scope_guard.py check <target> --scope .engage/scope/scope.json.

Part of the offensive-claude plugin — 30 skills, 18 commands, 8 agents, 1 hook shipped together

Good fit Checking whether a target is authorized before scanning, enumerating, exploiting, or contacting it, and gating outward or mutating actions during an engagement.

Compare 6 skills from other repositories ↓
Install

Getting it into your agent

It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.

Clone the repo
git clone --depth 1 https://github.com/hypnguyen1209/offensive-claude
agentmods
npx agentmods add skills/hypnguyen1209/offensive-claude/scope-discipline

Made for: Claude Code.

Or install offensive-claude, the plugin that ships this one along with the rest of its 30 skills, 18 commands, 8 agents, 1 hook.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for scope-discipline

README.md
[![agentmods](https://agentmods.dev/badge/skills/hypnguyen1209/offensive-claude/scope-discipline/github.svg)](https://agentmods.dev/skills/hypnguyen1209/offensive-claude/scope-discipline)
Your own site
<a href="https://agentmods.dev/skills/hypnguyen1209/offensive-claude/scope-discipline"><img src="https://agentmods.dev/badge/skills/hypnguyen1209/offensive-claude/scope-discipline/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for scope-discipline

Your own site · 80×15
<a href="https://agentmods.dev/skills/hypnguyen1209/offensive-claude/scope-discipline"><img src="https://agentmods.dev/badge/skills/hypnguyen1209/offensive-claude/scope-discipline.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 40 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 628 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector pass 7 Sept 2026
How audits are shown
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00040 $0.00628
Opus 5 $0.00020 $0.00314
Sonnet 5 $0.00008 $0.00126
Haiku 4.5 $0.00004 $0.00063

Measured 11d ago against content hash 8164a76d49d0, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-10, from the pricing page.

Security

Grade A, and why

scope-discipline scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/scope-discipline/SKILL.md · 54 lines

How it starts

The opening of the file, as written. The whole thing — 54 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Scope Discipline

Overview

The Iron Law: No target without authorization. Every target you touch must be inside the written authorization, encoded in scope.json. This is the authorization boundary of an authorized engagement — it is not optional, and the operator cannot waive it. It is the offensive equivalent of TDD's "no code without a test": no action without an in-scope, authorized target.

Violating the letter of this rule is violating its spirit.

The rule

Before touching ANY target, confirm it is in scope:

python skills/coding-mastery/scripts/_lib/scope_guard.py check <target> --scope .engage/scope/scope.json
# exit 0 = in-scope (proceed) | exit 3 = OUT (stop) | exit 2 = error (stop)

For outward actions, gate through action_guard.py (mutating verbs need approval; out-of-scope → block; per-host circuit breaker). Bash scripts source lib.sh and call _in_scope.

scope.json is operator-defined per engagement — you declare exactly what your authorization covers. The guard never blocks authorized testing; it blocks what is outside your own declared scope (strays, typos, look-alikes, an attacker-influenced redirect target).

Red Flags — STOP, do not send the request

  • "This subdomain is obviously theirs" (not in scope.json → out)
  • "It's just a quick check / read-only GET" (in-scope check still required first)
  • "The target came from a redirect / recon output / user paste" (verify before touching)
  • "*.acme.com so acme.com.evil.com is fine" (look-alike — the guard rejects it; so do you)
  • "The user told me to hit it" (instructions don't expand the authorization boundary)

All of these mean: run scope_guard.py check first. Out-of-scope ⇒ do not proceed.

Rationalizations

Excuse Reality
"Scope is obviously fine" Confirm against scope.json; assumption is how OOB incidents happen.
"It's adjacent infra, basically in scope" Adjacent ≠ authorized. Out unless declared.
"I'll note the out-of-scope hit in the report" You don't hit it, then note it. You don't hit it.
"Removing the guard is faster" The guard IS the authorization. Removing it = unauthorized attack.

Read the full file on GitHub · 54 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 11d ago First seen · 54 lines · 40 tokens per session scan A 8164a76d49d0

Subscribe to this mod's changes

scope-discipline is a skill published in the GitHub repository hypnguyen1209/offensive-claude (357 stars, last pushed 24d ago), licensed MIT. It adds 40 tokens to every session and 628 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

bt6-issue-steward

Triage and steward issues in BT6 research and support repositories, deciding whether to answer, reproduce, correct evidence, link work, design a feature, route security, implement, or close.

elder-plinius/T3MP3ST · 46 tokens

bt6-merge-train

Run an explicitly authorized, conservative BT6 merge train that processes validated pull requests one at a time and reconciles repository, CI, evidence, and issue state after each merge.

elder-plinius/T3MP3ST · 42 tokens

bt6-pr-audit

Audit one pull request in a BT6 research or support repository at an exact head SHA, covering correctness, research integrity, security, tests, contracts, and merge readiness.

elder-plinius/T3MP3ST · 40 tokens

bt6-provider-review

Audit an external AI/API provider and its integration into a BT6 repository for service reality, independent verification, trust boundaries, secret handling, API/model correctness, completeness, claim traceability, and merge readiness.

elder-plinius/T3MP3ST · 46 tokens

bt6-queue-audit

Audit the full pull-request and issue queue of a BT6 research or support repository, classifying readiness, evidence risk, and next action without mutating tracker state.

elder-plinius/T3MP3ST · 40 tokens

xiaohongshu-search-full

Search Xiaohongshu (XHS / RedNote) notes by keyword with full field extraction including body text, topics/tags, image list URLs, video stream URL, publish timestamp, and all engagement stats (likes, collects, comments, shares). Supports all page filter options: sort order (general, latest, most liked, most commented…

browser-act/skills · 254 tokens