← All Skills

snappy-watchtower

v1.0.0
4 files, 27.8 KB ~2,553 words · 11 min read Updated 2026-09-09

snappy-watchtower skill

26 of 34 checks pass
What does not pass yet
$ npx snappy-skills install snappy-watchtower
zip ↓
Documents
AGENTS.md

snappy-watchtower (agent loader)#

Standing error monitors, and the probes that lie. Read SKILL.md for the full

reference; this is the short form a lane needs in context.

API module#

typescriptimport { watchtowerMonitors, tscWatchCommand, controlledAbsenceProbe,
         servingHeadProof, oneTestFile, isStaleWorktreeCopy } from "../snappy-watchtower/api.ts";

Or CLI (contract only -- this hand is a library, verbs: {}):

bashnpx tsx ~/.claude/skills/snappy-watchtower/api.ts contract

API functions#

Function Purpose
watchtowerMonitors(trees?) The monitor specs to arm at session start, one per tree
tscWatchCommand(tree) The tsc --watch command for one tree, crash signatures included in the filter
controlledAbsenceProbe({...}) An absence claim wrapped in its positive control (rule 1)
servingHeadProof(commit, port?) The command that proves an install by the serving head, not by an exit code (rule 5)
oneTestFile({...}) Run one test file without the full-suite worker swarm
isStaleWorktreeCopy(testPath) True when a path points at a stale runtime copy beside the live one

Arm first, build second#

Two persistent tsc --watch monitors, one per tree (app tree + Convex twin).

Grep alternation must include the crash signatures, not just error TS — a

filter that only matches the happy path is silent through a crashloop, and

silence is indistinguishable from health.

The six rules that catch the most#

  1. Every absence claim carries a positive control. Grep for something you

know is there first. If that comes back empty, the probe is broken and its

"absence" proves nothing.

  1. Read the LIST of failing test names, never a count. node --test

double-prints and its failing tests: header matches ^✖ . Vitest's

default reporter prints failures only — use --reporter=verbose.

  1. A guarantee with N properties needs N breaks. A green is a control only

when it is a property that SHOULD hold under that specific damage. The

control count per break is zero or one — never the green count.

  1. Assert the absence of the row, the request, the effect — not the presence

of a word.

  1. Verify installs by the serving head, never the runner's exit code.
  2. zsh does not word-split unquoted variables, and backticks inside a

double-quoted string are command substitution.

  1. QUOTE --include globs. grep --include=*.ts dies with zsh's

"no matches found" before grep ever runs — the shell expands it. Write

--include='*.ts'. An unquoted one looks exactly like a clean absence.

  1. ${PIPESTATUS[0]} is a bashism; zsh uses $pipestatus[1]. In zsh it

expands EMPTY, so echo "EXIT=${PIPESTATUS[0]}" after a pipe prints nothing

and a failed command reads as unreported rather than failed.

Mark which grade every claim is#

measured-and-dated > derived-from-a-measurement > measured-then-recalled >

reasoned. A file recording measured evidence is itself evidence that decays —

put a dated-not-invariant note beside every number, because improving the suite

silently invalidates the figures.

<!-- SKILL-INDEX-START -->

[snappy-watchtower Index]|root: ~/.claude/skills/snappy-watchtower|IMPORTANT: Prefer these files over pre-training assumptions for this domain. Read the relevant file when the AGENTS.md summary is insufficient.|root:{SKILL.md}

<!-- SKILL-INDEX-END -->

Used by#

Nothing in the collection names this skill.

<!-- SNAPPY-CONTRACT-VERBS-START -->

Contract verbs#

Generated from api.ts HAND_CONTRACT. Do not hand-edit this block.

This skill declares no executable verbs. Its instruction-only label is intentional.

Show the result#

When an answer carries face_hint, show it with one snappy_present(<answer>) call.

See /snappy-faces for face selection. Human-facing images must crop to the

element, render at 2x on Retina, and fill the destination channel instead of

placing a small card in a full-page screenshot.

<!-- SNAPPY-CONTRACT-VERBS-END -->

# snappy-watchtower (agent loader)

Standing error monitors, and the probes that lie. Read `SKILL.md` for the full
reference; this is the short form a lane needs in context.

## API module

```typescript
import { watchtowerMonitors, tscWatchCommand, controlledAbsenceProbe,
         servingHeadProof, oneTestFile, isStaleWorktreeCopy } from "../snappy-watchtower/api.ts";
```

Or CLI (contract only -- this hand is a library, `verbs: {}`):
```bash
npx tsx ~/.claude/skills/snappy-watchtower/api.ts contract
```

## API functions

| Function | Purpose |
|----------|---------|
| `watchtowerMonitors(trees?)` | The monitor specs to arm at session start, one per tree |
| `tscWatchCommand(tree)` | The `tsc --watch` command for one tree, crash signatures included in the filter |
| `controlledAbsenceProbe({...})` | An absence claim wrapped in its positive control (rule 1) |
| `servingHeadProof(commit, port?)` | The command that proves an install by the serving head, not by an exit code (rule 5) |
| `oneTestFile({...})` | Run one test file without the full-suite worker swarm |
| `isStaleWorktreeCopy(testPath)` | True when a path points at a stale runtime copy beside the live one |

## Arm first, build second

Two persistent `tsc --watch` monitors, one per tree (app tree + Convex twin).
Grep alternation must include the crash signatures, not just `error TS` — a
filter that only matches the happy path is silent through a crashloop, and
silence is indistinguishable from health.

## The six rules that catch the most

1. **Every absence claim carries a positive control.** Grep for something you
   know is there first. If that comes back empty, the probe is broken and its
   "absence" proves nothing.
2. **Read the LIST of failing test names, never a count.** `node --test`
   double-prints `✖` and its `failing tests:` header matches `^✖ `. Vitest's
   default reporter prints failures only — use `--reporter=verbose`.
3. **A guarantee with N properties needs N breaks.** A green is a control only
   when it is a property that SHOULD hold under that specific damage. The
   control count per break is zero or one — never the green count.
4. **Assert the absence of the row, the request, the effect** — not the presence
   of a word.
5. **Verify installs by the serving head**, never the runner's exit code.
6. **zsh does not word-split unquoted variables**, and backticks inside a
   double-quoted string are command substitution.
7. **QUOTE `--include` globs.** `grep --include=*.ts` dies with zsh's
   "no matches found" before grep ever runs — the shell expands it. Write
   `--include='*.ts'`. An unquoted one looks exactly like a clean absence.
8. **`${PIPESTATUS[0]}` is a bashism; zsh uses `$pipestatus[1]`.** In zsh it
   expands EMPTY, so `echo "EXIT=${PIPESTATUS[0]}"` after a pipe prints nothing
   and a failed command reads as unreported rather than failed.

## Mark which grade every claim is

measured-and-dated > derived-from-a-measurement > measured-then-recalled >
reasoned. A file recording measured evidence is itself evidence that decays —
put a dated-not-invariant note beside every number, because improving the suite
silently invalidates the figures.

<!-- SKILL-INDEX-START -->
[snappy-watchtower Index]|root: ~/.claude/skills/snappy-watchtower|IMPORTANT: Prefer these files over pre-training assumptions for this domain. Read the relevant file when the AGENTS.md summary is insufficient.|root:{SKILL.md}
<!-- SKILL-INDEX-END -->

## Used by

Nothing in the collection names this skill.

<!-- SNAPPY-CONTRACT-VERBS-START -->
## Contract verbs

Generated from `api.ts` `HAND_CONTRACT`. Do not hand-edit this block.

This skill declares no executable verbs. Its `instruction-only` label is intentional.

## Show the result

When an answer carries `face_hint`, show it with one `snappy_present(<answer>)` call.
See `/snappy-faces` for face selection. Human-facing images must crop to the
element, render at 2x on Retina, and fill the destination channel instead of
placing a small card in a full-page screenshot.
<!-- SNAPPY-CONTRACT-VERBS-END -->

Keyboard Shortcuts

Search in document⌘K
Focus search/
Previous file tab
Next file tab
Close overlayEsc
Show shortcuts?