{"id":51708643,"url":"https://github.com/88plug/trigger-my-training","last_synced_at":"2026-07-20T13:03:58.855Z","repository":{"id":369607577,"uuid":"1276382947","full_name":"88plug/trigger-my-training","owner":"88plug","description":"Ground-first reflex for Claude Code: the agent judges complexity from its own training, grounds before acting, and is hard-blocked from the irreversible step until it has.","archived":false,"fork":false,"pushed_at":"2026-07-17T14:44:49.000Z","size":151,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-17T15:22:28.916Z","etag":null,"topics":["agent-safety","ai","ai-agents","anthropic","automation","claude","claude-code","claude-code-plugin","claude-skills","cli","developer-tools","grounding","guardrails","infrastructure","irreversible-actions","llm","preflight","productivity","reasoning","safety"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/88plug.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-21T23:06:58.000Z","updated_at":"2026-07-17T14:45:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/88plug/trigger-my-training","commit_stats":null,"previous_names":["88plug/trigger-my-training"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/88plug/trigger-my-training","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/88plug%2Ftrigger-my-training","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/88plug%2Ftrigger-my-training/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/88plug%2Ftrigger-my-training/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/88plug%2Ftrigger-my-training/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/88plug","download_url":"https://codeload.github.com/88plug/trigger-my-training/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/88plug%2Ftrigger-my-training/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35686949,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"ssl_error","status_checked_at":"2026-07-20T02:08:09.736Z","response_time":111,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-safety","ai","ai-agents","anthropic","automation","claude","claude-code","claude-code-plugin","claude-skills","cli","developer-tools","grounding","guardrails","infrastructure","irreversible-actions","llm","preflight","productivity","reasoning","safety"],"created_at":"2026-07-16T19:00:21.316Z","updated_at":"2026-07-20T13:03:58.847Z","avatar_url":"https://github.com/88plug.png","language":"Python","funding_links":[],"categories":["Source Catalog"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Trigger My Training\n\n**Ground-first reflex for Claude Code \u0026 Grok** — agent safety and grounding.\nThe agent judges complexity from its own training, grounds before acting, and\nis hard-blocked from irreversible steps until it has.\n\n[![plugin-validate](https://github.com/88plug/trigger-my-training/actions/workflows/plugin-validate.yml/badge.svg)](https://github.com/88plug/trigger-my-training/actions/workflows/plugin-validate.yml)\n[![License: FSL-1.1-ALv2](https://img.shields.io/badge/license-FSL--1.1--ALv2-blue?style=flat)](LICENSE)\n[![Docs](https://img.shields.io/badge/docs-online-blue?style=flat)](https://88plug.github.io/trigger-my-training/)\n[![Claude Code plugin](https://img.shields.io/badge/Claude%20Code-plugin-8A2BE2?style=flat)](https://github.com/88plug/claude-code-plugins)\n[![DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/88plug/trigger-my-training)\n\n\u003c/div\u003e\n\n\u003e [!IMPORTANT]\n\u003e The core insight, after an adversarial review that killed the naive version:\n\u003e **an agent's training is always stale.** The reflex does not use recall as the\n\u003e *answer* — it uses recall to generate the *list of things to verify*, then\n\u003e runtime overrides recall. That reframing is what makes grounding help instead\n\u003e of hurt.\n\n## Install\n\n### Claude Code\n\n```text\n/plugin marketplace add 88plug/claude-code-plugins\n/plugin install trigger-my-training@88plug\n```\n\n### Grok Build\n\n```text\ngrok plugin marketplace add 88plug/claude-code-plugins\ngrok plugin install trigger-my-training@88plug --trust\n```\n\n\nThe hard gate and the `ground-first` skill work immediately. Optional status-line\nbadge (`⏚ TMT:armed` / `:grounded`):\n\n```bash\nbash /path/to/trigger-my-training/install.sh\n```\n\nFull install and config: [docs](https://88plug.github.io/trigger-my-training/).\n\n## What it does\n\nAsk an AI coding agent to *\"deploy a VM to Proxmox\"* and it tends to barrel into\n`qm create` — stale defaults, skipped prerequisites. This plugin intercepts\nthat pattern with agent guardrails and live verification:\n\n1. **Recognize** (`ground-first` skill, model-elected) — the agent judges, from\n   its *own understanding*, whether a request is complex/irreversible enough to\n   ground — in any domain, not a keyword list. (Measured: precision 1.0 / recall\n   0.97 across infra + diverse domains, vs a keyword classifier's 0.28 recall\n   off-infra.)\n2. **Reconstruct** — split what you **KNOW** from what you're **ASSUMING**, emit a\n   **Grounding Brief** (decision points, silent failure modes, unknowns tagged\n   **PROBE** / **ASK** / **ASSUME**), and verify your three riskiest assumptions.\n3. **Enforce** (`PreToolUse` hook, self-arming) — a destructive action is\n   **denied** until grounding is recorded with `tmt-ground commit`. No detector\n   arms it; read-only probes and ordinary file edits are never blocked.\n\n\u003e [!NOTE]\n\u003e The *trigger* is the model's judgment (no hand-authored keyword list — that\n\u003e would be the static domain knowledge this plugin replaces). The *gate* stays\n\u003e deterministic: a safety floor must not depend on the model it is gating.\n\n| Component | Surface | Role |\n| --- | --- | --- |\n| `ground-first` | skill (+ 6 reference packs) | Soft trigger — model-elected, keyword-free; holds the Grounding Brief procedure |\n| `tmt_enforce.py` | PreToolUse hook | Hard deny on the irreversible step |\n| `tmt_reconcile.py` | PostToolUseFailure hook | On tool failure, reconcile the falsified assumption (predict-then-check) |\n| `tmt_log.py` / `tmt_session.py` | PostToolUse / SessionStart | Record probes / prune stale state |\n| `tmt-ground` | bin CLI | Release the gate after probing |\n| `grounding-investigator` | agent | Isolated live-probing pass for CRITICAL tasks |\n| `tmt_statusline.sh` | status line | `⏚ TMT:armed` / `⏚ TMT:grounded` badge |\n| `/status` `/ground` `/reset` `/brief` `/explain` `/doctor` | commands | Inspect / force / disarm / brief / explain / health-check |\n\nThe advisory/hard split is deliberate: the nudge raises the odds the agent\ngrounds; the `PreToolUse` deny is the lever that actually holds.\n\n### Gate modes and self-arm\n\n| `gate_mode` | Hard gate | Typical use |\n| --- | --- | --- |\n| `full` (default) | **on** | production — brief + gate |\n| `gate` | **on** | gate only (eval / ablation) |\n| `brief` | off | soft reflex only |\n| `stale` | off | eval ablation arm |\n| `off` | off | hard path disabled |\n\n| option | default | effect |\n| --- | --- | --- |\n| `hard_gate` | `true` | `false` makes the gate advisory-only (keeps the skill, drops the block) |\n\n\u003e [!WARNING]\n\u003e Defaults are the hard deny. Self-arm is **lazy and detector-free**: the first\n\u003e mutating tool call is denied and marks the session `required`. Read-only probes\n\u003e and local file edits always pass. `tmt-ground commit` refuses without probe\n\u003e evidence (use `--force` only when probing is impossible). Details:\n\u003e [Architecture — self-arm](https://88plug.github.io/trigger-my-training/architecture/)\n\u003e · [Configuration](https://88plug.github.io/trigger-my-training/userconfig-design/).\n\nPlugins can't register a main `statusLine`, so the badge ships in `bin/` and is\nwired via `install.sh` — see [docs](https://88plug.github.io/trigger-my-training/).\n\n## Does it work?\n\nBuilt falsification-first. Full ledger: [`EXPERIMENTS.md`](EXPERIMENTS.md).\n\n- **Detector (Exp 2, deterministic):** clean separation of operational vs\n  edit-intent on a 28-task labelled corpus — precision/recall **1.0**, **0**\n  false positives (in-sample; real-world calibration is known debt).\n- **Hard gate (Exp 3, unit):** blocks the mutation, allows probes + local\n  edits, releases after grounding — **7/7**.\n- **Landmine-catch (Exp 1, A/B + ablation, powered to 12 domains):** replicated\n  on `claude-haiku-4-5` —\n\n  | arm | catch-rate | vs baseline |\n  | --- | --- | --- |\n  | no plugin | 0.181 | — |\n  | **compact Pre-Mortem Brief** | **0.386** | **~2.1×** |\n  | + Staleness Axiom alone | 0.156 | worse (axiom alone does nothing) |\n  | enriched (4 composed inventions) | 0.258 | worse than the plain brief |\n\n  The campaign **falsified its own maximalist hypothesis**: a one-line \"your\n  training is stale\" axiom does nothing, and *composing* more proven cognitive\n  scaffolds (Tetlock calibration tags + Deming predict-then-check + Deutsch\n  hard-to-vary) **regressed** the gain. The active ingredient is one 3-line\n  structural trigger — Klein's pre-mortem + Popper's \"enumerate how it breaks.\"\n  **Adding cognitive mass crowds it out.** That result survived replication\n  across 12 domains; an exciting single-run \"win\" for the enriched slate did\n  not (Twyman's law). Honest accounting of \"10×\": the replicated grounding\n  number is **~2.1×**; the only *literal* ≥10× is the poka-yoke gate taking\n  irreversible-action interception from ~0 to ~1.0. Full ledger:\n  [`EXPERIMENTS.md`](EXPERIMENTS.md), invention slate: [`INVENTIONS.md`](INVENTIONS.md).\n\n```bash\nbash evals/run.sh                 # all three experiments\npython3 evals/detector_eval.py    # free deterministic detector eval\n```\n\n## What this is not\n\nThree independent refuters killed the maximalist pitch; the design reflects it:\n\n- It does **not** claim the model \"already knows\" the domain — training is\n  stale; that is the whole point.\n- It does **not** replace human-authored skills for must-be-exact execution —\n  it grounds the *understanding* layer.\n- The reasoning mechanism is **not** novel (step-back / generated-knowledge /\n  preflight prior art) — the contribution is the packaging and the\n  harness-enforced gate.\n\n## Layout\n\n```\n.claude-plugin/   plugin.json, marketplace.json\nbin/              enforcer, probe-log, tmt-ground state machine, lib\nhooks/            hooks.json (SessionStart, PreToolUse, PostToolUse, PostToolUseFailure)\nskills/ground-first/   SKILL.md + reference packs\nagents/           grounding-investigator.md\ncommands/         status, ground, reset, brief, explain, doctor\nevals/            detector_eval.py, gate_unit_test.sh, tasks.jsonl\ndocs/             MkDocs Material site (this repo's GitHub Pages)\nEXPERIMENTS.md    the falsification ledger\n```\n\n## Docs\n\n- Site: [https://88plug.github.io/trigger-my-training/](https://88plug.github.io/trigger-my-training/)\n- [Architecture](docs/architecture.md) — detect→brief→gate→release + self-arm\n- [Configuration](docs/userconfig-design.md) — `gate_mode` / `hard_gate`\n- [Research](docs/research.md) — headline results + reproduce commands\n\n## Development\n\nLocal checkout (no marketplace):\n\n```bash\nclaude --plugin-dir /path/to/trigger-my-training\n```\n\n```bash\nbash tests/run.sh          # unit tests\nbash evals/run.sh          # the experiments\nclaude plugin validate .   # manifest check\nmkdocs build --strict      # docs site\n```\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the bin/hook architecture,\n[`CHANGELOG.md`](CHANGELOG.md), and [`SECURITY.md`](SECURITY.md).\n\n## License\n\n[FSL-1.1-ALv2](LICENSE) © 2026 [88plug](https://github.com/88plug) —\nFunctional Source License; converts to Apache 2.0 two years after each release.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F88plug%2Ftrigger-my-training","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F88plug%2Ftrigger-my-training","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F88plug%2Ftrigger-my-training/lists"}