Tier 1 and Tier 2 adoption from the 14-repo evaluation. 29 skills installed, 2 services deployed, all verified working.
All three sources are plain Markdown SKILL.md files. Nothing to maintain, no dependencies, no runtime risk.
An engineering discipline layer from a well-known TypeScript educator. Prefix mp- in software-development/.
| Skill | What it enforces |
|---|---|
| mp-tdd | Failing test before code · vertical slices · agree test seams up front |
| mp-diagnosing-bugs | Phased diagnosis: understand, reproduce, isolate, then fix |
| mp-code-review | Two-axis review — Standards and Spec — run as parallel reviewers |
| mp-to-spec / mp-to-tickets | Plain request becomes a written spec, then discrete tickets |
| mp-codebase-design | Deep-module vocabulary: seam, depth, leverage, locality |
| mp-domain-modeling | Per-repo CONTEXT.md glossary and ADR discipline |
| mp-improve-codebase-architecture | Scans for deepening opportunities, presents an HTML report |
| mp-triage / mp-research | Classify incoming work · structured research before building |
| mp-implement / mp-prototype | Execute a spec · throwaway spike to answer a design question |
| mp-wayfinder | Orient inside an unfamiliar codebase |
| mp-resolving-merge-conflicts | Disciplined conflict resolution |
| mp-grill-with-docs / mp-grilling | Relentless interview that produces ADRs and a glossary |
| mp-handoff | Compact a session into a handoff document |
| mp-teach / mp-wait-what | Teach a concept · re-explain something that did not land |
| mp-writing-for-agents | Write instructions an agent can actually follow |
| mp-to-questionnaire | Convert material into a questionnaire |
| mp-setup-pre-commit | Wire pre-commit hooks |
| mp-git-guardrails-claude-code | Block destructive git commands before they run |
Anti-over-engineering enforcement. Lives in vendor-ponytail/. Always active by default.
| Skill | Purpose |
|---|---|
| ponytail | The decision ladder — YAGNI, stdlib, native, existing dep, one line |
| ponytail-review | Review a diff for over-engineering |
| ponytail-audit | Whole-repo bloat scan, ranked biggest cut first |
| ponytail-debt | Track deliberate simplifications and their ceilings |
| ponytail-gain | Report measured savings |
| ponytail-help | Reference for intensity levels and controls |
The installed skill is v2.9.1 (47 KB) — already a Hermes adaptation with delivery modes, voice calibration, and a client-work placeholder workflow. Upstream v3.0.0 (28 KB) is a tighter rewrite, not a feature upgrade: same 25 patterns, but reorganized into five root causes, fuller before/after pairs, and "weak alone" markers on patterns that need corroboration.
Replacing would have been a downgrade. Upstream is now wired in as references/upstream-v3-patterns.md and referenced from the skill body as the precision source for pattern boundaries.
https://reckoner.srv1738752.hstgr.cloud
Password stored at /workspace/reckoner/DASHBOARD_PASSWORD.txt
Tracks account balances across 20 AI and cloud providers in one dashboard, auto-refreshing every 60 seconds. Currently pulling live data from OpenRouter and Gemini.
| Detail | Value |
|---|---|
| Source | github.com/CaptainASIC/reckoner · GPL-3.0 |
| Location | /workspace/reckoner/ |
| Ports | API 8791, web 8792 (both bound 0.0.0.0) |
| Traefik route | /docker/traefik/reckoner.yml |
| Supervision | reckoner-api, reckoner-web |
| Providers ready | 2 configured, 18 available |
Sandboxes tool output so raw data never enters the context window, plus an FTS5 knowledge base that survives compaction. Registered with 11 tools.
Elastic License 2.0 — source-available, not OSI open-source. Free to use locally as a tool. It cannot be relicensed or resold. Flagged here so the distinction is on record.
| Tool | Function |
|---|---|
| ctx_execute | Run code in a sandbox; only printed output enters context |
| ctx_index | Store content in a searchable knowledge base |
| ctx_search | Multi-strategy ranked retrieval |
| ctx_fetch_and_index | Fetch a URL, convert to markdown, index it |
| ctx_batch_execute | Many commands in one call, output batched out of context |
| ctx_stats / ctx_doctor | Consumption statistics · installation diagnosis |
| ctx_upgrade / ctx_purge / ctx_insight | Upgrade · delete indexed content · dashboard |
Every component was exercised against real input, not assumed working.
| Test | Result |
|---|---|
| Ponytail audit | Fed a 29-line file with 3 redundant abstraction layers. Correctly identified all three and reduced to 5 lines. |
| mp-tdd load | Recited the loop rules and all three anti-patterns correctly. |
| Skill registration | 29 of 29 registered and enabled; disk inventory matched the Hermes list. |
| Reckoner public URL | HTTP 200, valid TLS, dashboard and API both responding. |
| Reckoner live data | Pulled real OpenRouter balance through the public URL end to end. |
| Auto-restart | Stopped the web process — confirmed 502 — restarted — confirmed 200. |
| Context Mode MCP | Full initialize and tools/list handshake; 11 tools discovered. |
| Supervisord | All four programs RUNNING (2 gateways + 2 Reckoner). |
"Add a date formatter" produced three classes, a factory, a singleton, and a cache — 29 lines to debug.
The ladder asks whether the feature needs to exist, then whether the standard library covers it. Result: one line.
Ponytail's authors report roughly 54% less code, 20% cheaper, 27% faster against a no-skill baseline. For a non-programmer the benefit compounds: less code means less that can break and less that needs reading.
The real risk in AI-assisted development is not obviously-bad code. It is confident, clean-looking code that was never verified. These skills attack that directly: a test must fail before it can pass, diagnosis precedes fixes, and every change faces two independent reviewers — one asking "does this follow our standards", the other asking "does this actually match what was requested". That second reviewer catches the most common failure: well-built work on the wrong problem.
Every new session rediscovers what internal terms mean across 20+ repos.
A per-repo CONTEXT.md glossary and ADR log, written once and shared by every future session.
Reckoner's first live pull showed the OpenRouter balance at −$0.14 — $110.14 spent against $110.00 purchased. That is exactly the class of problem that silently kills a scheduled job at 5 AM.
When raw file contents or logs enter the context window, they consume the same capacity needed for reasoning. Reading a 700 KB log spends 700 KB of that capacity on raw text. Context Mode inverts this: rather than reading the data, the agent writes code that processes it and prints a short summary. Reported reduction is up to ~98%. In practice this means longer sessions before the thread is lost, and lower cost per run.
| Task | Before | After |
|---|---|---|
| New feature | Written, then trusted | Spec → tickets → test first → two-axis review |
| Bug fix | Patch the symptom | Root-cause diagnosis loop first |
| Build size | Over-built, needs debugging | Ladder forces the minimal version |
| Terminology | Rediscovered each session | Written into CONTEXT.md per repo |
| Long sessions | Degrade as context fills | Raw data sandboxed out of context |
| AI spend | Invisible until something breaks | Live dashboard across providers |
All skills self-trigger — TDD fires when building, diagnosis fires when something breaks, Ponytail is always on. These are the manual controls:
Nine of the fourteen evaluated repos were not adopted. Reasoning on record:
| Repo | Verdict | Reason |
|---|---|---|
| i-have-adhd | Skip | Output-shortening skill; conflicts with existing profile conventions already in place |
| Clodex | Skip | Needs a Go toolchain (absent on this host) and solves a problem we do not have |
| ai-marketing-panel | Skip | Requires a real customer-evidence corpus that does not exist yet |
| ECC | Skip | Large Claude Code bundle; would collide with 62 existing skill categories |
| Tim Harris Skills | Skip | 15 stars, single-author pack; the advisory-board idea is worth reading, not installing |
| HumanLayer Skills | Reference | Approval-gate patterns already covered by existing production-change policy |
| OpenAI Plugins | Reference | No LICENSE file — cannot be vendored |
| OpenAI Skills | Reference | No LICENSE file — usable as a structural example only |
| Context Mode | Adopted | Installed with the Elastic-2.0 license noted explicitly |
The new skills are not a separate toolbox — they are now steps inside the pipelines already in use. Verified by running each pipeline skill and confirming it reports the new gates.
| Pipeline | What changed |
|---|---|
| ce-build | New B3.5 Scope Gate (Ponytail ladder — cut scope before planning). B4 now loads mp-to-spec + mp-to-tickets + mp-tdd + mp-diagnosing-bugs. B5 keeps Ponytail active. B6 runs mp-code-review + ponytail-audit + mp-diagnosing-bugs into ce:full. B8 writes an mp-handoff. Two new hard rules (#13, #14). |
| ce-review | New ponytail-reviewer simplification conditional — fires on diffs ≥100 added lines or any new abstraction. Reports only over-engineering. |
| ce-work | Two new core principles: #9 Ponytail ladder before any new abstraction; #10 no fix without a reproduction. |
| ce-plan | Quality bar now requires a Ponytail scope ruling and test seams agreed up front. Spec-heavy work drives from mp-to-spec / mp-to-tickets; mp-grilling stress-tests weak plans. |
| code-task-router | Two new routes (13 architecture audit, 14 explain/teach). Ponytail added as an always-on companion. Build-order now starts with the scope gate and ends with mp-handoff. |
| no-slop-design | Step 6 gained a three-part slop-detection pass: swap test, invention check, humanizer sweep. |
| premium-website-designer | Step 5 quality check now pairs the Anti-AI Checklist with the copy/narrative slop pass. Visual tells are not the whole job. |
Installing a skill that nothing calls is the same as not installing it. Before this pass, all 29 sat idle — zero references from any pipeline. Now every one has a defined moment where it fires.
Two questions this layer exists to answer: "does what I do on Telegram actually persist on the VPS?" and "can something delete or overwrite it without anyone noticing?"
Every write from Telegram lands in a Docker volume on the VPS filesystem, not in container-ephemeral storage:
| Written from Telegram | Lives on the VPS at |
|---|---|
/workspace | /var/lib/docker/volumes/hermes-webui-gsga_hermes-workspace/_data |
~/.hermes | /var/lib/docker/volumes/hermes-webui-gsga_hermes-home/_data |
Verified, not assumed. A marker file written inside the container was read back from the host filesystem at the volume path. Nothing written from Telegram is container-local.
Seven of the pipeline skills are upstream GitHub adaptations tracked by commit SHA. A daily 9 AM sync pulls updates into them — and the wiring added in the previous section lives inside those same files. Without protection, the next sync silently deletes it.
Nine protected integration points are now fingerprinted and auto-restorable:
| Capability | Behaviour |
|---|---|
| Detect | Each wiring block is identified by a unique fingerprint phrase inside its file |
| Restore | Missing blocks are re-applied from snapshots in /workspace/.capabilities/guardrail-blocks/ |
| Idempotent | Running restore when nothing is missing changes nothing |
| Safe | Target file is backed up before any write; exit code 1 only when restore genuinely fails |
| Time | Job | Mode | Delivers |
|---|---|---|---|
| 09:00 | Upstream skill sync | LLM | Telegram |
| 10:15 | Skill Guardrail Verify | script | Telegram — only on drift |
| 10:45 | Guardrail Self-Check | script | Telegram — only when broken |
| every 30 min | Status page refresh | script | the page itself |
Why the guardrail jobs are plain scripts, not AI jobs: the protection layer must not depend on a model call. If the AI provider is down, an AI-based guardrail would silently not run — which is the exact failure it exists to prevent. Scripts run regardless.
Why they're spaced apart: the 09:00 sync is an AI job that can run for several minutes. The verify fires 75 minutes later, so it always inspects the finished sync rather than catching it mid-flight. My first attempt scheduled it at 09:15 — too tight to be safe.
Silent when healthy. These only message you when something needs attention. A daily "all clear" trains you to ignore the channel, which defeats the purpose of having it.
The guardrail protected the skill wiring — but nothing protected the guardrail. If its own job stopped running, every check would go quiet and the system would look healthy precisely because nothing was watching.
A self-watchdog now verifies the watchers themselves: are the jobs still enabled, have they run within their window, are the scripts intact, can a restore still happen. Verified by disabling the guardrail job and confirming the watchdog catches it, and by backdating a run timestamp 50 hours to confirm it detects a stopped watcher.
The first version of the guardrail could not detect its own failure. The fingerprint was "B3.5 SCOPE GATE" — a phrase that also appears in ce-build's pipeline diagram. So when the real wiring section was deleted, verification still passed.
How it was caught: by deliberately simulating the clobber and watching the test pass when it should have failed. A guardrail that reports success while the thing it guards is gone is worse than no guardrail. Fixed: every fingerprint is now a full sentence verified to appear exactly once.
https://status.srv1738752.hstgr.cloud — refreshed every 30 minutes. Shows Hermes services, guardrail state, skill inventory, scheduled-job health, VPS host containers, cross-environment drift, and disk headroom.
It deliberately separates stale failures from active ones. A weekly job that failed five days ago and hasn't been retried is not a live problem; showing it as one makes resolved issues read as broken, which is its own kind of wrong.
| Job | Problem | Resolution |
|---|---|---|
| Sub-I Welcome Email | Script not found — profile-relative path bug | Absolute script path; verified the script runs |
| Repo Vault Weekly Recap | Syntax error in the recap script | Already fixed 9/11 — confirmed it parses clean |
| Policy Violation Detector | Provider rejected an invalid think field | Reasoning now disabled at agent level; edge function returns success: true |
| Weekly AI Roundup Podcast | Same invalid-field rejection | Same cause, same resolution |
Cron failure state is sticky. A job that failed last Monday still reads error on Friday even if the cause was fixed on Tuesday. Always check when it last ran and when it runs next before treating a failure as live — that single habit prevents chasing problems that no longer exist.
| Constraint | Impact |
|---|---|
| No compiler toolchain | No Go, Rust, or gcc. Skills needing compiled binaries cannot run here. |
| No Docker CLI in container | Compose stacks can be authored but not built or rolled back from inside. |
| state.db at 2.3 GB | Single-file session store, growing. The largest structural risk to the 71 scheduled jobs. |
| Disk at 66% | 68 GB free of 193 GB. |
| Memory at cap | 6,000-character limit reached; new durable facts need consolidation first. |