Public copy of a private working report from 2026-09-17. Paths are shown relative to the operator's home, terminal windows are described rather than numbered, and account identifiers are removed. Every number, table and finding is unchanged. Part of the case study Tuning Hermes Agent on GLM 5.3 Flash, one day, measured. Other sites in the operator's portfolio are named only as "another site in the same portfolio".
Hermes progress report
Where things stand
Status in one paragraph
All five Hermes sessions from this morning finished their goals and are idle at their prompts; they still hold the old configuration in memory. Every change is on disk and the proxy is already running the new build. Nothing measures as "better" until new sessions run on the new config for about two hours andbash ~/hermes-reports/plan/after.sh compares them against the saved baseline. That comparison is the only thing left, and it is yours to start.Timeline
Workstream progress
| Workstream | State | What is in place | Evidence | Open |
|---|---|---|---|---|
| Diagnosis and cost truth | Done | 402 root cause; portal as the bill; catalog rates; ledger repriced with cached tokens; caps in real dollars | Window recompute within 1.1 percent of the portal; first repriced call $0.00078 vs $0.0113 before | None |
| Config, wave 1 and 3 | Done | Compression 48k threshold and 24k prune, tool output 20k, terminal 120 s, max_turns 40, delegation 30/2/900, curator off, toolsets trimmed to 10, personas removed, approvals quoted, MEMORY.md purged | Every key read back through the Hermes loader; backup config.yaml.bak-tune-20260917-152059 | Takes effect per new process |
| Budget hook and contract | Done | pre_tool_call hook on delegate_task reading the proxy health endpoint; delegation-contract skill; SOUL.md rule | Hook blocks in a dry test at under $1 headroom; hook spec parsed by Hermes | None |
| Proxy v1.1 | Done | Body drain, sweep terminator, fail-closed state with anchors, warning headers, degrade on per-model caps, bearer buckets, portal guard with 1.10 reserve, live streaming, rate refresh, /stats, SIGHUP reopen | 58 zero-spend checks pass; 3 real probes; portal read live; drift 0.011 | newsyslog needs one sudo copy |
| Vendor patches | Done | True exit reasons, child deliverable contract, busy-parent result drain, curator 60-char rule, verify-on-stop scoped to code | 160 pass, 1 pre-existing failure; diffs re-apply byte-identical; REAPPLY.md | Re-apply after hermes update |
| Pipeline gates | Done | Cached-stage issues counted, ok:false forces FAIL, L12 needs a person plus operator token, deployed:true only from recorded tool output | 197 of 197 plus 32 new checks; today's real approval.json now rejected | Mint a token into the operator token file, which the pipeline only reads, when you approve |
| Profiles and runner | Done | pl-smoke and pl-site-a with own state, config and bearer; ~/hermes-pipelines runner, cost, classify, launchd template, README, MIGRATION | Smoke: 2 steps, 47 s, $0.0012; root config sha unchanged | first site pipeline's steps written from the plan; run its first gate by hand once |
| Measurement | Your move | measure.py, compare.py with 12 weighted criteria, after.sh, before snapshots, RESULTS.md | Dry run at 08:29: 0 post-apply sessions, NO DATA YET, exits clean | Start new sessions; run after.sh in about two hours |
| Kanban lanes, per-task budgets | Deferred | Documented in MIGRATION.md and the plan | - | After the runner has carried one real pipeline |
Live state at 08.50 UTC
| Item | Value |
|---|---|
| Hermes processes | 6 alive, all idle at their prompts on the old in-memory config |
| Sessions today (sessions DB) | 43, of which 4 still open; 0 started after the 08:20:44 apply time |
| Proxy | hermes-modellock 1.1, pid from launchd, /stats live, 0 errors since restart |
| Spend today, real | $2.44 (portal member spend $2.45) |
| Headroom under local caps | $31.56 lifetime, $7.56 today |
| Buckets | pl-smoke $0.00005 used of 0.50 daily; pl-site-a 0 of 3.00; default unbounded beyond global caps |
First run on the new setup
Deepvalueradar.com, 08.57 to 10.49 UTC
What ran
Session 20260917_155714_88e201, in a fresh Terminal window, goal./sp https://deepvalueradar.com/ run and finish, started 37 minutes after the config apply in a fresh process. Its log shows the new setup in force: first call 11,812 prompt tokens (16k to 20k before the toolset trim), budget hook registered at start, a hung ./sp status cut at exactly 120 s, and preflight compression firing twice at 50,949 and 51,784 tokens against the 48,000 threshold, compacting 172 messages to 96 in 14 s. Before today compaction fired only at 152k. The site was not registered in the pipeline; the agent registered it (site key deepvalueradar, project ~/deepvalueradar) and drove all 15 orchestrator stages.Timeline
Status: BLOCKED (1 critical) · FAIL: 10-human-check · warnings: 4.Cost and efficiency, this session against the morning
| Metric | Another site in the same portfolio, 05:38, old config | deepvalueradar, 08:57, new config |
|---|---|---|
| Orchestration calls | 315 | 160 |
| Wall time | 135 min | 112 min |
| Prompt tokens p50 / p90 / max | 89,965 / 126,091 / 146,711 | 32,707 / 40,254 / 43,230 |
| Cache hit share | 98.3% | 90.5% |
| Real Nous cost | $0.311 | $0.087 |
| Delegations | 5 | 0 |
| Worker (OpenRouter broker) jobs / cost | 26 / $0.0299 | 25 / $0.0203 |
| Compression events | 1, at 153k | 2, at 51k and 52k |
| End state | self-approved L12, deployed on 1 source | BLOCKED at L12, nothing deployed |
The rest of the run, in the audit
The stage-by-stage outcomes, the page review, the 66 of 100 rubric and the contaminated after.sh readout for this run sit in the audit's first-run section. 14 of 15 stages came back clean, the agent's own report overstated two things (a CIK it said was replaced and a "staged deploy" that was a dry run), and on this session alone six of the twelve acceptance criteria pass while the two proxy criteria improved without reaching target.
Publication, 11.30 to 11.45 UTC
What changed on the live site after the autonomous run, and how it got there
Sequence
Before and after on the live site
| Item | 09.01, before the run | 11.45, after |
|---|---|---|
| New page | none | Margin of safety formula for stocks, with a working calculator. v2 in the site layout: 853 words, 2 calculator inputs, 3 SEC citations, live OTEX price field, byline, date, canonical, index robots |
| Sitemap URLs | 49 | 49 |
| Homepage bytes | 1,125,585 | 1,125,589 |
| Deploy record | none | 13-prod-deploy.json with tool output hash and bytesMatch true |
| Pipeline report | - | Status clean, warnings 2, and still "production NOT DEPLOYED by this pipeline", which is accurate because stage 13 is a by-hand step |
Final state at 11.55 UTC, terminal idle
The agent rebuilt the page as v2 inside the site layout and redeployed. Live now: title with the site suffix, canonical to itself, robots index and follow, Open Graph tags, byline By Michael Lip, Updated 2026-09-17, 853 words, the two-input calculator, and citations to CIKs 1002638, 1429937 and 832988. The flagged CIK 0000832941 is gone. Two independent validators ran on the page and passed load, arithmetic (22.0 percent, $6.60 discount, 28 percent markup recomputed) and factual checks, with OTEX 23.40 confirmed through a second source after Yahoo rate-limited. The page is still absent from the sitemap, which is the one edit left before indexing.
Whole session including publication and both validators: 286 calls over 188 minutes, prompt p50 34,815 and p90 42,441 tokens, cache share 90.4 percent, 6 compactions, real Nous cost $0.168. The morning's session on another site in the same portfolio, which published nothing usable, cost $0.311 over 315 calls.
Two things this proved
The gate that was added this morning is instruction-level, not system-level. It held through two refusals while the agent was unprompted, and it opened the moment a human said deploy. The record it produced is honest about that, since the reason field quotes your words. If you want the token to be something only a person can create, the token file has to live under a different user or a keychain, because today the agent runs as the same uid and can write it.
The pipeline had a real gap that only a live attempt could expose. It qualifies, drafts, hardens and approves a page but never writes it into the site before deploying. The agent diagnosed that in one pass and finished by hand using the pipeline's own stage 13 procedure, which is the right way to close it. The permanent fix is a materialise step between 08 and 09.
The page is live but unlisted. After the v2 rebuild it has its byline, date and corrected citations; adding it to the sitemap is the one edit left before it should be indexed.
What to do next
- Start fresh Hermes sessions. Plain
hermesuses the tuned root config.hermes -p pl-site-aruns the first isolated pipeline profile with its own budget bucket. - After about two hours of new work, run
bash ~/hermes-reports/plan/after.sh. It writesplan/after_<ts>.txtand appends a row toplan/RESULTS.mdwith PASS or FAIL per criterion and a score. - If wave 1's cache share drops below 90 percent, restore
config.yaml.bak-tune-20260917-152059and re-run; the prune can break the prefix cache and that is the one stop rule with real risk. - When a pipeline reaches its L12 publish gate, mint a token into the operator token file, which the pipeline only reads; the agent can no longer approve itself.
- One optional sudo: copy
~/.hermes/modellock/newsyslog.d-hermes-modellock.confinto /etc/newsyslog.d for log rotation.
Files produced today
| Path | What |
|---|---|
| ~/hermes-reports/hermes-audit-2026-09-17.html | Operations audit, 22 sections plus the Implementation plan tab |
| ~/hermes-reports/hermes-implementation-plan-2026-09-17.html, HERMES-IMPLEMENTATION-PLAN.md | The brief for a future session, with results appended |
| ~/hermes-reports/agent_*.md | Six audit analyses with SQL and python |
| ~/hermes-reports/plan/plan_*.md | Five verified workstream plans |
| ~/hermes-reports/plan/impl/impl_*.md | Five delivery reports with test output |
| ~/hermes-reports/plan/patches/ | Vendor diffs 01 to 05 and REAPPLY.md |
| ~/hermes-reports/plan/measure.py, compare.py, after.sh, before_full_day.* | Before-and-after kit |
| ~/hermes-pipelines/ | Runner kit, smoke and first-site pipelines, launchd template |
| ~/.hermes/hooks/budget_gate.py, ~/.hermes/skills/software-development/delegation-contract/ | Hook and skill |
| ~/.hermes/modellock/proxy.py, tests/, newsyslog conf | Proxy v1.1 with acceptance suite |
| ~/.hermes/profiles/pl-smoke, pl-site-a | Isolated pipeline profiles |
Every modified file has a dated backup beside it. Numbers on this page come from /stats, the sessions database (read-only), the portal account read at 08:47 UTC, and the delivery reports under plan/impl/.