hooks — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited hooks (Hook) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<div align="center">
A ground-first reflex for coding agents. On a complex or irreversible request, the agent stops, reconstructs the domain's reality, treats its own training as a stale hypothesis, probes the live system, and is hard-blocked from the destructive step until it has grounded.
The trigger is the agent's own judgment, not a hand-authored keyword list — so it works in any domain. The plugin's thesis is its mechanism: trigger the model's training, don't encode static rules a human guessed at.
</div>
[!IMPORTANT] The core insight, after an adversarial review that killed the naive version: an agent's training is always stale. So the reflex does not use recall as the answer — it uses recall to generate the list of things to verify, then runtime overrides recall. That one reframing is what makes grounding help instead of hurt.
# load locally from a clone (no marketplace needed)
claude --plugin-dir /path/to/trigger-my-trainingOr install from the marketplace:
/plugin marketplace add 88plug/trigger-my-training
/plugin install trigger-my-training@trigger-my-trainingOptional status-line badge (⏚ TMT:armed / :grounded):
bash /path/to/trigger-my-training/install.shAsk an agent to "deploy a VM to Proxmox" and it tends to barrel into qm create — encoding stale defaults and skipping the prerequisites that actually break the deploy. This plugin intercepts that pattern:
ground-first skill, model-elected) — the agent judges, fromits own understanding, whether a request is complex/irreversible enough to ground — in any domain, not a keyword list. (Measured: precision 1.0 / recall 0.97 across infra + diverse domains, vs a keyword classifier's 0.28 recall off-infra.)
Grounding Brief (decision points, silent failure modes, unknowns tagged PROBE / ASK / ASSUME), and verify your three riskiest assumptions.
PreToolUse hook, self-arming) — a destructive action isdenied until grounding is recorded with tmt-ground commit. No detector arms it; read-only probes and ordinary file edits are never blocked.
[!NOTE] The trigger is the model's judgment (no hand-authored keyword list — that would be the very static domain knowledge this plugin exists to replace). The gate stays deterministic, because a safety floor must not depend on the model it is gating.
| Component | Surface | Role |
|---|---|---|
ground-first | skill (+ 6 reference packs) | the soft trigger — model-elected from a keyword-free policy description; holds the Grounding Brief procedure |
tmt_enforce.py | PreToolUse hook | hard deny on the irreversible step |
tmt_reconcile.py | PostToolUseFailure hook | on a tool failure, reconcile the falsified assumption (predict-then-check) |
tmt_log.py / tmt_session.py | PostToolUse / SessionStart | record probes / prune stale state |
tmt-ground | bin CLI | release the gate after probing |
grounding-investigator | agent | isolated live-probing pass for CRITICAL tasks |
tmt_statusline.sh | status line | ⏚ TMT:armed / ⏚ TMT:grounded badge |
/status /ground /reset /brief /explain /doctor | commands | inspect / force / disarm / brief / explain / health-check |
The advisory/hard split is deliberate: the nudge raises the odds the agent grounds; the PreToolUse deny is the lever that actually holds.
| option | default | effect |
|---|---|---|
gate_mode | full | full (brief + gate) · gate (gate only) · brief (nudge only) · stale · off |
hard_gate | true | false makes the gate advisory-only (keeps the nudge, drops the block) |
The status line ships in bin/ but plugins can't register a main statusLine, so add it to ~/.claude/settings.json yourself — see docs/architecture.md.
Built falsification-first. See EXPERIMENTS.md for the full ledger; headline:
edit-intent on a 28-task labelled corpus — precision/recall 1.0, 0 false positives (in-sample; real-world calibration is the known debt).
edits, releases after grounding — 7/7.
replicated result on claude-haiku-4-5 —
| arm | catch-rate | vs baseline |
|---|---|---|
| no plugin | 0.181 | — |
| compact Pre-Mortem Brief | 0.386 | ~2.1× |
| + Staleness Axiom alone | 0.156 | worse (axiom alone does nothing) |
| enriched (4 composed inventions) | 0.258 | worse than the plain brief |
The campaign falsified its own maximalist hypothesis: a one-line "your training is stale" axiom does nothing, and composing more proven cognitive scaffolds (Tetlock calibration tags + Deming predict-then-check + Deutsch hard-to-vary) regressed the gain. The active ingredient is one 3-line structural trigger — Klein's pre-mortem + Popper's "enumerate how it breaks." Adding cognitive mass crowds it out. That result survived replication across 12 domains; an exciting single-run "win" for the enriched slate did not (Twyman's law). Honest accounting of "10×": the replicated grounding number is ~2.1×; the only literal ≥10× is the poka-yoke gate taking irreversible-action interception from ~0 to ~1.0. Full ledger: EXPERIMENTS.md, invention slate: INVENTIONS.md.
bash evals/run.sh # all three experiments
python3 evals/detector_eval.py # just the free deterministic oneThree independent refuters killed the maximalist pitch, and the design reflects it:
stale; that is the whole point.
it grounds the understanding layer.
preflight prior art) — the contribution is the packaging and the harness-enforced gate.
.claude-plugin/ plugin.json, marketplace.json
bin/ detector, enforcer, probe-log, tmt-ground state machine, lib
hooks/ hooks.json (SessionStart, PreToolUse, PostToolUse, PostToolUseFailure)
skills/ground-first/ SKILL.md + reference/{proxmox,general}.md
agents/ grounding-investigator.md
commands/ status, ground, reset
evals/ harness.py, detector_eval.py, gate_unit_test.sh, tasks.jsonl
EXPERIMENTS.md the falsification ledgerCONTRIBUTING.md — dev/test workflow and the bin/hook architecturedocs/architecture.md — detect→brief→gate→release flow + findingsdocs/userconfig-design.md — the tunable optionsCHANGELOG.md · SECURITY.mdbash tests/run.sh # unit tests (26 cases)
bash evals/run.sh # the three experiments
claude plugin validate . # manifest checkFSL-1.1-ALv2 © 2026 88plug — Functional Source License; converts to Apache 2.0 two years after each release.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.