Skip to content
Back to skills

Guard Authoring

ASecurity

Author, approve, and maintain project guard profiles (.wipnote/guard-profile.yaml). Use for custom quality/completion/yolo gates, polyglot monorepo per-directory guards, re-approving after drift, and understanding the trust boundary and autodetection fallback.

  • 4 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 19, 2026
developmentrustgoshellbashfrontendbackend

Security analysis

A100/100

Scanned October 19, 2026

npx -y skills add shakestzd/wipnote --skill guard-authoring --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Guard Authoring?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Guard Authoring
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/shakestzd-guard-authoring/badge)](https://www.skillsdirectory.com/skills/shakestzd-guard-authoring)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: guard-authoring
description: Author, approve, and maintain project guard profiles (.wipnote/guard-profile.yaml). Use for custom quality/completion/yolo gates, polyglot monorepo per-directory guards, re-approving after drift, and understanding the trust boundary and autodetection fallback.
disable-model-invocation: true
---

# Guard Authoring Skill

**Trigger keywords:** guard profile, guard init, quality gate, completion gate, yolo gate,
applies_when, guard authoring, re-approve guard, guard drift

---

## What a guard profile is

`.wipnote/guard-profile.yaml` is a hand-maintained YAML file committed to the repository.
It replaces wipnote's manifest autodetection with an explicit, version-controlled list of
commands. Treat it like any other config file — diff it, review it in PRs, edit it when
your toolchain changes. See `docs/guard-profiles.md` for the full reference.

---

## Schema

```yaml
guards:
  quality:          # run by `wipnote check --gate`
    - name: go-build               # short identifier (required)
      cmd: go build ./...          # shell command (required, non-empty)
      cwd: backend                 # repo-root-relative working dir (optional)
      applies_when:                # narrow when guard is active (optional)
        paths: ["backend/**/*.go"] # ** matches zero or more path segments
  completion:       # work-item completion gate
    - name: go-test
      cmd: go test ./...
  yolo:             # per-commit gate in yolo sessions
    - name: go-vet
      cmd: go vet ./...
approved:
  signature: "sha256:..."   # content hash; written by wipnote, never by hand
  by: "Alice"
  at: "2026-01-15T10:30:00Z"
```

Fields: `name` (required), `cmd` (required, non-empty), `cwd` (optional, repo-root-relative),
`applies_when.paths` (optional forward-slash globs — `**` crosses `/`, `*` does not).
Do not hand-edit `approved.signature`.

---

## Polyglot / monorepo example

```yaml
guards:
  quality:
    - name: go-test
      cmd: go test ./...
      cwd: backend
      applies_when:
        paths: ["backend/**/*.go"]
    - name: npm-test
      cmd: npm test
      cwd: frontend
      applies_when:
        paths: ["frontend/**"]
    - name: py-test
      cmd: uv run pytest
      cwd: dataservice
      applies_when:
        paths: ["dataservice/**/*.py"]
  completion:
    - name: go-test
      cmd: go test ./...
      cwd: backend
      applies_when:
        paths: ["backend/**/*.go"]
  yolo:
    - name: go-vet
      cmd: go vet ./...
      cwd: backend
      applies_when:
        paths: ["backend/**/*.go"]
approved:
  signature: "sha256:..."
  by: "Alice"
  at: "2026-01-15T10:30:00Z"
```

`cwd` routes each toolchain to its subdirectory. `applies_when.paths` gates a guard on
whether matching files EXIST in the repository — not on which files a commit changed
(wipnote does not inspect the changed-file set). A guard whose globs match no repo file is
skipped; one that matches any repo file runs on every gate. Use it to scope guards to a
project layout, not to skip guards per-commit.

---

## Approval model and trust boundary

wipnote only honors a profile when `approved.signature` matches the sha256 of the guard
content. Falls back to autodetection (no error) when: profile absent, signature empty,
signature mismatch (edited after approval), or validation failure (unknown phase key or
empty `cmd`). The signature is order-independent — reformatting YAML does not break it,
but changing any guard field does.

---

## Launch-time setup and `wipnote guard init`

Every interactive launch (`wipnote claude/yolo/dev/codex/antigravity`) auto-runs setup:
if no approved profile exists and the launch is interactive, it proposes guards from
manifests, prompts `[y/N]`, and on `y` signs + commits the profile. Non-interactive
launches skip silently.

```bash
wipnote guard init    # explicit: propose, review, approve, commit (re-runnable)
```

Run `wipnote guard init` after any edit to re-approve and record a fresh signature.

---

## Safe default

No approved profile → autodetection from `go.mod`, `package.json`, `Makefile`, etc.,
with a hint to run `wipnote guard init`. Use a committed profile for custom commands,
subdirectory routing, or `applies_when` filtering.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.