agentleFS
gonimargonimar/claude-web-studio/skills/harden/SKILL.md

harden

Skill4 starsChanged 46 days agoMITView on GitHub

Hardens the runtime and perimeter — security headers/CSP, TLS/HSTS, reverse-proxy config, rate/body limits, WebSocket protections, container and network hardening, CI permissions, supply chain (update bot, SHA-pinned Actions, lockfile policy, SBOM and signing jobs), secrets hygiene — verified with live curl/scanner output; `--apply` writes the changes; docs/security/hardening-checklist.md. Use before release or after /security-audit, for 'CSP headers', 'harden the server'.

  • Reads credentials

46 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use layout, shape and 4 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • owshq-mecSkill

    layout

    Improve layout, spacing, and visual rhythm. Fixes monotonous grids, inconsistent spacing, and weak visual hierarchy. Use when the user mentions layout feeling off, spacing issues, visual hierarchy, crowded UI, alignment problems, or wanting better composition.

    Also in 5 projects that use this

  • HAR5HA-7663Skill

    shape

    Plan the UX and UI for a feature before writing code. Runs a structured discovery interview, then produces a design brief that guides implementation. Use during the planning phase to establish design direction, constraints, and strategy before any code is written.

    Also in 8 projects that use this

  • SentrySkill

    review

    Fixture review skill.

    Also in 4 projects that use this

  • Microsoft AzureSkill

    verify

    End-to-end app testing pipeline for browser-based web apps on cloud browsers via Azure Playwright Workspaces: verify the live app, author tests for working flows, heal failing tests, then re-run with video and produce one consolidated report. Three phases (app verification, test authoring, test healing) plus a scoped final sanity run; each phase emits a sub-report. Use when asked to "verify my app", "make sure my app works and has good test coverage", "do a full QA pass", "add tests where I'm missing coverage", "fix failing tests and add new ones", "smoke test before deploy", "QA my deployment", or any combined verify-and-test ask. Requires Azure CLI (`az login`) and a Playwright Workspace resource ID — bootstraps configs on first invocation. Browser-based web apps with Playwright only — not for unit/API tests, native mobile/desktop, load/perf, or full accessibility audits.

    Also in 3 projects that use this

  • VercelSkill

    setup

    Set up Vercel CLI and project configuration. Use when the user says "set up Vercel", "configure Vercel", "link to Vercel", or "vercel init".

    Also in 3 projects that use this

  • GoogleSkill

    tdd

    Test-driven development. Use when the user wants to build features or fix bugs test-first, mentions "red-green-refactor", or wants integration tests.

    Also in 3 projects that use this

The file

We split this skill into the rules it gives an agent

2 rules. 0 are common, 0 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 44 edited versions we read keep these.

  • 0

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Inventory: every secret the project uses, from the deploy contract's Prerequisites & secrets, .env.example, compose environment:/env_file:, …

    line 33
  2. Very specific:

    When HEAD is a story branch, name it and ask one AskUserQuestion: switch to the default branch and commit there (Recommended — a …

    line 53

“Common” is measured: kept by at least 6 in 10 of the 44 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Harden

Reply in the project conversation language (CLAUDE.md → Language); code, identifiers, paths and commit messages stay in English.

References: stack-reference/security-standards.md, stack-reference/supply-chain.md (checklist SC-01…SC-12), security-baseline.md (headers, network), rules rules/ci-docker.md, rules/security-sensitive.md. In the commands below, <hooks> is .claude/hooks/ in copy mode and ${CLAUDE_PLUGIN_ROOT}/hooks/ in plugin mode.

Mode (argument, default full): full runs every checklist group of Phase 2; headers, tls, proxy, docker, ci, supply-chain narrow it to that group; secrets runs the rotation checklist instead. --apply goes on to Phase 3 without a separate "apply?" question; every file write still has its own "May I write?".

Phase 1: Inventory

  1. Where the config lives. Proxy configs in this repository, or in the Infra repo / Proxy config from technical-preferences.md (Infrastructure) when the proxy lives elsewhere. Also compose/Dockerfile, workflows, and where TLS terminates.
  2. No infra repo declared and no proxy config here → say so: the proxy checklist can only be verified live, not fixed here, and /setup-stack / /adopt records the field.
  3. Current headers: curl -sI <url> on dev/staging/prod, with consent. No URL reachable (or consent declined) → continue with static analysis of the configs and say that every item is unverified live.

Phase 2: Checklist

Per item: status and a verification command.

  • Headers: HSTS, CSP nonce/strict-dynamic (mind Angular ngCspNonce / Nuxt), nosniff, Referrer-Policy, Permissions-Policy, COOP/CORP; cookie flags.
  • TLS: the TLS profile.
  • Proxy: server_tokens / limit_req / client_max_body_size / timeouts; WebSocket Origin checks and limits.
  • Docker: networks, non-root, cap_drop, read_only, pins (base image digests → SC-11), health checks.
  • CI: workflow permissions — this group owns SC-04 (contents: read at the top, raised only per job); the supply-chain group reports it by id but does not re-check it.
  • Supply chain: read references/supply-chain.md and run its five checks — update bot config (renovate.json / .github/dependabot.yml), Actions pinned by SHA, lockfile policy in CI, SBOM job, signing job; every finding carries its SC-NN id from stack-reference/supply-chain.md. A missing job is a finding with the template to add (docs/templates/supply-chain/), proposed in Phase 3 like any other config diff.
  • Secrets hygiene: .env ignored, gitleaks.

secrets mode (rotation checklist) — an inventory, never the values. Trigger: a leak (/incident), a departure, quarterly.

  1. Inventory every secret the project uses, from the deploy contract's Prerequisites & secrets, .env.example, compose environment:/env_file:, workflow secrets.* references and the platform UI names.
  2. Per secret: where it lives (platform env, ~/.config/<project>/*.env, CI secret, registry token), which component reads it, the provider's rotation steps (issue new → deploy → verify → revoke old), the last rotation date if recorded.
  3. Checks: gitleaks / git log -p -S for the old value's pattern (never the value itself on the command line); no secret in images (docker history, build args); CI permissions least-privilege; .env ignored.
  4. Output: the rotation table, the order to rotate in (dependencies first) and the verification per secret; it goes into docs/security/hardening-checklist.md § Secrets (Phase 4).

Phase 3: Changes (--apply, or with consent)

Without --apply, ask one AskUserQuestion after Phase 2: apply the fixes (Recommended) · checklist only · stop.

  1. Show the config diffs and write each one only after its own "May I write <path>?" — one AskUserQuestion per file: write (Recommended) · show the full diff first · skip this file; touch .claude/.write-consent after the "write" answer:
    • config in this repository (proxy, compose, Dockerfile, workflows, renovate.json / dependabot.yml) → the diff here;
    • proxy in the declared infra repo → the diff there ("May I write <infra repo path/file>?");
    • neither → no write: the exact snippet for the owner of the proxy.
  2. Validate: nginx -t / caddy validate / docker compose config; a workflow diff → actionlint when available, else bash -n on its run: blocks; renovate.json → npx --yes renovate-config-validator (or state that it was not validated).
  3. Re-check live: repeat curl -I and show the before/after output. The live headers are the evidence in every case.

Phase 4: Write

Render the checklist (and the § Secrets table in secrets mode) in the chat, then "May I write docs/security/hardening-checklist.md?" — one AskUserQuestion: write (Recommended) · show the draft/diff first · not now. After the "write" answer: touch .claude/.write-consent (rule 7 — the consent-guard hook checks the marker).

Phase 5: Commit (documents lane)

Right after the write, one commit gate (rule 7 (4), .claude/docs/git-workflow.md § Documents): docs: hardening checklist (docs: hardening checklist — secrets in secrets mode), staging exactly docs/security/hardening-checklist.md. Record the gate before asking — <hooks>session-state.sh set Gate "/harden Phase 5: commit?" — and clear it after the answer (<hooks>session-state.sh set Gate "—").

  • On the default branch when no story work is in progress: one AskUserQuestion — commit (Recommended) · leave uncommitted.
  • When HEAD is a story branch, name it and ask one AskUserQuestion: switch to the default branch and commit there (Recommended — a pipeline-wide document) · commit here (the document belongs to this story) · leave uncommitted.
  • The Phase 3 config diffs (proxy, compose, Dockerfile, workflows) are infra, not documents: they never ride the docs: commit — name them in the result and offer the chore lane (git-workflow.md § Chore / infra: branch chore/harden-<group>, ci(…)/chore(…) commits, a PR, /code-review --diff before the merge, workflow files to devops-engineer). A diff written in the declared infra repo is committed there under that repository's rules, named in the result.

Nothing is committed without the answer.

Verdict: HARDENED | PARTIAL (open: …). Next step — one AskUserQuestion: /security-audit quick (Recommended) · /pentest (optional) · stop here.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.