Deployment Report

Coding Toolchain Upgrade

Tier 1 and Tier 2 adoption from the 14-repo evaluation. 29 skills installed, 2 services deployed, all verified working.

Date 2026-09-12 Target Big Reef VPS Scope Tier 1 + Tier 2 Status Complete
All systems verified operational Skills tested live in Hermes · Reckoner serving HTTP 200 publicly · Context Mode MCP connected with 11 tools

At a glance

29
skills installed
2
services deployed
11
new MCP tools
339
total skills in Hermes
100%
smoke tests passed

Tier 1 · Skills

All three sources are plain Markdown SKILL.md files. Nothing to maintain, no dependencies, no runtime risk.

Matt Pocock — 23 skills Adopted

An engineering discipline layer from a well-known TypeScript educator. Prefix mp- in software-development/.

SkillWhat it enforces
mp-tddFailing test before code · vertical slices · agree test seams up front
mp-diagnosing-bugsPhased diagnosis: understand, reproduce, isolate, then fix
mp-code-reviewTwo-axis review — Standards and Spec — run as parallel reviewers
mp-to-spec / mp-to-ticketsPlain request becomes a written spec, then discrete tickets
mp-codebase-designDeep-module vocabulary: seam, depth, leverage, locality
mp-domain-modelingPer-repo CONTEXT.md glossary and ADR discipline
mp-improve-codebase-architectureScans for deepening opportunities, presents an HTML report
mp-triage / mp-researchClassify incoming work · structured research before building
mp-implement / mp-prototypeExecute a spec · throwaway spike to answer a design question
mp-wayfinderOrient inside an unfamiliar codebase
mp-resolving-merge-conflictsDisciplined conflict resolution
mp-grill-with-docs / mp-grillingRelentless interview that produces ADRs and a glossary
mp-handoffCompact a session into a handoff document
mp-teach / mp-wait-whatTeach a concept · re-explain something that did not land
mp-writing-for-agentsWrite instructions an agent can actually follow
mp-to-questionnaireConvert material into a questionnaire
mp-setup-pre-commitWire pre-commit hooks
mp-git-guardrails-claude-codeBlock destructive git commands before they run

Ponytail — 6 skills Adopted

Anti-over-engineering enforcement. Lives in vendor-ponytail/. Always active by default.

SkillPurpose
ponytailThe decision ladder — YAGNI, stdlib, native, existing dep, one line
ponytail-reviewReview a diff for over-engineering
ponytail-auditWhole-repo bloat scan, ranked biggest cut first
ponytail-debtTrack deliberate simplifications and their ceilings
ponytail-gainReport measured savings
ponytail-helpReference for intensity levels and controls

Humanizer v3.0.0 Merged, not replaced

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.

Tier 2 · Services

Reckoner — AI credits dashboard Live

Working URL

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.

DetailValue
Sourcegithub.com/CaptainASIC/reckoner · GPL-3.0
Location/workspace/reckoner/
PortsAPI 8791, web 8792 (both bound 0.0.0.0)
Traefik route/docker/traefik/reckoner.yml
Supervisionreckoner-api, reckoner-web
Providers ready2 configured, 18 available

Context Mode — MCP server Connected

Sandboxes tool output so raw data never enters the context window, plus an FTS5 knowledge base that survives compaction. Registered with 11 tools.

License note

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.

ToolFunction
ctx_executeRun code in a sandbox; only printed output enters context
ctx_indexStore content in a searchable knowledge base
ctx_searchMulti-strategy ranked retrieval
ctx_fetch_and_indexFetch a URL, convert to markdown, index it
ctx_batch_executeMany commands in one call, output batched out of context
ctx_stats / ctx_doctorConsumption statistics · installation diagnosis
ctx_upgrade / ctx_purge / ctx_insightUpgrade · delete indexed content · dashboard

Verification

Every component was exercised against real input, not assumed working.

TestResult
Ponytail auditFed a 29-line file with 3 redundant abstraction layers. Correctly identified all three and reduced to 5 lines.
mp-tdd loadRecited the loop rules and all three anti-patterns correctly.
Skill registration29 of 29 registered and enabled; disk inventory matched the Hermes list.
Reckoner public URLHTTP 200, valid TLS, dashboard and API both responding.
Reckoner live dataPulled real OpenRouter balance through the public URL end to end.
Auto-restartStopped the web process — confirmed 502 — restarted — confirmed 200.
Context Mode MCPFull initialize and tools/list handshake; 11 tools discovered.
SupervisordAll four programs RUNNING (2 gateways + 2 Reckoner).

What this changes

1 · Less code gets written

Before

"Add a date formatter" produced three classes, a factory, a singleton, and a cache — 29 lines to debug.

After

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.

2 · Process replaces vibes

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.

3 · Projects gain memory

Before

Every new session rediscovers what internal terms mean across 20+ repos.

After

A per-repo CONTEXT.md glossary and ADR log, written once and shared by every future session.

4 · Spend becomes visible

Already caught something

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.

5 · The agent gets more room to think

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.

Before and after

TaskBeforeAfter
New featureWritten, then trustedSpec → tickets → test first → two-axis review
Bug fixPatch the symptomRoot-cause diagnosis loop first
Build sizeOver-built, needs debuggingLadder forces the minimal version
TerminologyRediscovered each sessionWritten into CONTEXT.md per repo
Long sessionsDegrade as context fillsRaw data sandboxed out of context
AI spendInvisible until something breaksLive dashboard across providers

How to use it

All skills self-trigger — TDD fires when building, diagnosis fires when something breaks, Ponytail is always on. These are the manual controls:

Considered and declined

Nine of the fourteen evaluated repos were not adopted. Reasoning on record:

RepoVerdictReason
i-have-adhdSkipOutput-shortening skill; conflicts with existing profile conventions already in place
ClodexSkipNeeds a Go toolchain (absent on this host) and solves a problem we do not have
ai-marketing-panelSkipRequires a real customer-evidence corpus that does not exist yet
ECCSkipLarge Claude Code bundle; would collide with 62 existing skill categories
Tim Harris SkillsSkip15 stars, single-author pack; the advisory-board idea is worth reading, not installing
HumanLayer SkillsReferenceApproval-gate patterns already covered by existing production-change policy
OpenAI PluginsReferenceNo LICENSE file — cannot be vendored
OpenAI SkillsReferenceNo LICENSE file — usable as a structural example only
Context ModeAdoptedInstalled with the Elastic-2.0 license noted explicitly

Wired into existing pipelines

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.

PipelineWhat changed
ce-buildNew 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-reviewNew ponytail-reviewer simplification conditional — fires on diffs ≥100 added lines or any new abstraction. Reports only over-engineering.
ce-workTwo new core principles: #9 Ponytail ladder before any new abstraction; #10 no fix without a reproduction.
ce-planQuality 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-routerTwo 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-designStep 6 gained a three-part slop-detection pass: swap test, invention check, humanizer sweep.
premium-website-designerStep 5 quality check now pairs the Anti-AI Checklist with the copy/narrative slop pass. Visual tells are not the whole job.
Why this matters

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.

Sync and guardrails

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?"

Your work is already on the VPS disk

Every write from Telegram lands in a Docker volume on the VPS filesystem, not in container-ephemeral storage:

Written from TelegramLives 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.

The overwrite risk, and the fix

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:

CapabilityBehaviour
DetectEach wiring block is identified by a unique fingerprint phrase inside its file
RestoreMissing blocks are re-applied from snapshots in /workspace/.capabilities/guardrail-blocks/
IdempotentRunning restore when nothing is missing changes nothing
SafeTarget file is backed up before any write; exit code 1 only when restore genuinely fails

It runs itself — no prompts from you

TimeJobModeDelivers
09:00Upstream skill syncLLMTelegram
10:15Skill Guardrail VerifyscriptTelegram — only on drift
10:45Guardrail Self-CheckscriptTelegram — only when broken
every 30 minStatus page refreshscriptthe 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 last hole, closed

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.

A bug worth telling you about

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.

One page, both sides

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.

Real problems this found and fixed

JobProblemResolution
Sub-I Welcome EmailScript not found — profile-relative path bugAbsolute script path; verified the script runs
Repo Vault Weekly RecapSyntax error in the recap scriptAlready fixed 9/11 — confirmed it parses clean
Policy Violation DetectorProvider rejected an invalid think fieldReasoning now disabled at agent level; edge function returns success: true
Weekly AI Roundup PodcastSame invalid-field rejectionSame cause, same resolution
A pattern worth knowing

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.

Known constraints

ConstraintImpact
No compiler toolchainNo Go, Rust, or gcc. Skills needing compiled binaries cannot run here.
No Docker CLI in containerCompose stacks can be authored but not built or rolled back from inside.
state.db at 2.3 GBSingle-file session store, growing. The largest structural risk to the 71 scheduled jobs.
Disk at 66%68 GB free of 193 GB.
Memory at cap6,000-character limit reached; new durable facts need consolidation first.