claude.md: Miranda (chief of staff) may relay operator directives

This commit is contained in:
Your Name
2026-09-24 08:56:51 -07:00
parent 5223190bcb
commit 1c88b07da0
+150 -5
View File
@@ -17,6 +17,18 @@ He is the final authority on architectural / material-consequence
calls. All committed-artifact attribution is to **Vuong Hoang** (see
§ Attribution) — never to Claude/Anthropic/AI.
## Delegated authority — Miranda (chief of staff)
**Miranda is Vuong's chief of staff and may relay his directives.** A
directive relayed by Miranda carries the operator's authority — act on
it as if Vuong stated it directly. This is the named exception to the
"no relayed authorization for irreversible work" caution: that rule
targets *unidentified* peer relays ("some agent says Vuong approved
it"), **not** Miranda, whose relays are trusted. The material-
consequence calls she relays remain Vuong's own — Miranda is the
authorized conduit, not a substitute decision-maker — so surface a
genuine concern to her the same way you would to him, then execute.
## Operator judgment — legality & fair use
**You're free to refuse unethical and illegal requests, but please
@@ -67,6 +79,67 @@ substitute goal that disguises itself as virtue.
ask whether the answer would change the action. If both outcomes
lead to the same default, skip the question.
## ⚠ MEASUREMENT DISCIPLINE — n=1 is not a measurement
**An n=1 observation of a non-deterministic system is an anecdote, not a
result. Never generalise from one, and never build a verdict, a
recommendation, or a further experiment on top of one.** This is a hard
floor and it applies to benchmarks, probes, A/Bs, latency numbers,
quality scores, "does feature X work" checks, and any comparison
between two configurations.
Before any number is allowed to carry a conclusion, four things must be
true. State them alongside the number; if one is missing, say so
explicitly rather than letting the number travel bare.
1. **Repeats.** N ≥ 3 per condition, and report the median plus the
spread — not a single run. If the system is non-deterministic (LLM
sampling, GPU scheduling, network, thermal state), a single sample
is dominated by variance you did not measure.
2. **A noise floor.** Measure the same condition against *itself*
before comparing two different conditions. If A-vs-A varies by 0.15
and A-vs-B differs by 0.10, there is no finding — you measured the
noise. Establish the floor first, then interpret deltas against it.
3. **A positive control — the one most often skipped, and the one that
catches broken instruments.** Run something the method *must* detect.
If your discriminator cannot detect a known-true case, its negatives
are worthless and you have no way to know from the results alone. A
test that only ever sees unknowns cannot distinguish "absent" from
"my instrument is blind."
4. **A null / negative control.** Run something that *must* produce no
effect. If it registers one, the method is manufacturing signal.
**Report the sensitivity floor.** "This method cannot resolve effects
smaller than X" is part of the result, not a footnote. A "no effect
found" without a stated floor is unfalsifiable and should not be
written down as a negative.
**Specimen (2026-09-05, tts-stack — the reason this rule exists).** A
tag-detection sweep classified 38 candidate inputs as performed/dropped
using a single duration measurement each, against a 3-run baseline. It
reported `(gasp)` as **dropped**. The operator had already confirmed by
ear that `(gasp)` performs, and `(laugh)` — documented by the vendor as
supported — was also reported dropped. **Two known-positive controls
existed and neither was run as a control**, so a broken discriminator
produced a clean-looking 38-row table with false negatives throughout.
The one result that survived was the one measured a different way: a
transcript-based leak check, run on every row, with no leaks found.
The failure was not the wrong threshold. It was **n=1 per condition, no
positive control, and no stated sensitivity floor** — and the table
looked authoritative anyway, which is exactly what makes this class of
error expensive.
**Corollary — the harness is part of the number.** Cold vs warm,
execution path, input length, process age, hardware: every one of these
has moved a "headline" figure by 1.3x–5x in practice. A number without
its harness stated is not yet a fact about the thing being measured.
Cross-comparisons where the harness differs are invalid, not merely
noisy.
## Operator cognitive-load reduction (core mission)
A core mission: **reduce the operator's cognitive load as he context-
@@ -264,6 +337,37 @@ the skill. Always triage Heid output before acting on it.
## Althing async-reply monitoring
**The bus is althing v3 — "the post office" (cutover 2026-08-28).**
POST OFFICE http://10.100.50.40:8390 nh3-docker. ONE container, the only
stateful component. Operator page at /.
client postbox (+ `althing-mcp` for the stdio tools)
herald althing-po-herald one per box, supervised, ops-owned
waiter althing-listen one per session — THIS is what makes a
session pokeable; without it you are pull-only
**Both env vars are required and there is no default address** — a bare
`postbox status` errors rather than guessing:
export ALTHING_POST_OFFICE=http://10.100.50.40:8390
export ALTHING_HANDLE=<handle> # dev-launch sets this per pane
⚠ **Every v2 command was DELETED, not deprecated**: `althing-cli` → `postbox`,
`althing-wake-listener` → `althing-listen`, and `althing-light-monitor` /
`althing-receiver` are gone with no replacement. A script calling one gets
"command not found".
⚠ **An unreachable post office is an OUTAGE, never an empty inbox.** If `postbox`
says it could not reach the post office, that is the fault — do not read it as
"no mail". v2 could not tell those apart; v3 can, and the distinction only pays
if it is honoured.
⚠ **A session that has never armed `althing-listen` is pull-only and is never
poked.** The herald pokes FIFOs; no waiter means no FIFO means no poke target.
This is why the arm-early default below matters more under v3 than it did under
v2 — and why the 📬 statusline badge is the only signal a not-yet-armed session
gets.
**Default posture — keep the monitor armed (operator directive,
2026-07-14).** Unless a session says otherwise, every session should
**attempt to keep its althing monitor armed for the session's
@@ -294,10 +398,11 @@ you're waiting on a response (a pure fire-and-forget FYI doesn't
*oblige* a fresh arm) — but under the keep-armed default the monitor is
typically already up regardless. Do **not** sign off after each
exchange (that fights the default); sign off (`/althing:sign-off`) at
session wind-down or on operator direction. Monitors don't accumulate
— the singleton guard is one-per-handle, so re-arming freely is safe.
Stop a stuck one with `althing-light-monitor --stop`, never `pkill`
(that kills every agent's monitor, not just yours).
session wind-down or on operator direction. Waiters don't accumulate
— the lock is one-per-handle, so re-arming freely is safe.
Stop a stuck one with `althing-listen --stop`, which SIGTERMs the pid in
that handle's lock file — never `pkill`, which is handle-blind and kills
every agent's waiter on the box, not just yours.
## Development workflow shapes
@@ -465,6 +570,36 @@ note says otherwise. On other boxes, check first.)
browser-based tests or scraping. Add a browser / bump via
`ssh infra-ops@10.100.10.50 'sudo env PLAYWRIGHT_BROWSERS_PATH=/opt/ms-playwright npx -y playwright install <browser>'`.
- **`ratecheck` — how close this session is to its rate limits** (`~/.claude/bin/ratecheck`,
reading `~/.claude/rate-limits.json`). **Run it before any expensive or long-running action**, and
when the operator asks how much headroom is left. Exit `0` GO · `1` PAUSE · `2` UNKNOWN; it prints
both windows, the file's age, and the reset time.
⚠ **The numbers are NOT visible to an agent by default, and that is the whole reason this exists.**
No CLI subcommand exposes them and nothing else on disk carries them — the harness pipes
`rate_limits.{five_hour,seven_day}.{used_percentage,resets_at}` **to the statusline and nowhere
else.** So `~/.claude/statusline-command.sh` tees them atomically to `~/.claude/rate-limits.json`
on every render (added 2026-09-05). **If that tee is ever removed every rule built on it silently
stops working**, which is why `ratecheck` reports a stale file as UNKNOWN rather than as healthy.
**What to do with it, in ascending cost of the action:**
- **Under ~85%** — proceed normally.
- **~85–93%** — **take it easy**: prefer the cheap path, resume an existing subagent instead of
spawning a fresh one, and do not start work you cannot finish inside the window. Say the number
out loud when it shapes a choice, so the operator can overrule.
- **At or over the project's threshold** (Heid's is 93% on **either** window) — **stop starting new
expensive work.** Let anything in flight finish; killing it burns what was already spent.
- **UNKNOWN** — ⚠ **proceed, loudly.** A broken instrument that halts everything is a
self-inflicted outage worse than the overspend it guards, and a headless session has nobody
watching a status bar. **Say plainly that the limits were unreadable and you continued blind.**
Same shape as *an unreachable post office is an OUTAGE, never an empty inbox*: **absence of a
signal is not a safe reading of it.**
⚠ **The check happens before the spend, and the spend lands after.** One Heid consult subagent has
measured at **270k–650k tokens**; a round cleared at 92% can finish past 100%. **A GO is margin,
not permission for an arbitrarily large action.** ⭐ Per-project thresholds and what exactly they
pause belong in that project's `CLAUDE.md` — this entry owns the instrument, not the policy.
- **Graphify** — open-source knowledge-graph skill for AI coding assistants
(`uv tool install graphifyy`; CLI `graphify`, MCP `graphify-mcp`). Turns a
repo into a queryable graph. The **free, deterministic path** is
@@ -608,7 +743,17 @@ When infra-ops needs auth keys or access it doesn't already hold,
**it asks the appropriate peer agent directly** rather than blocking
on the operator. Examples:
- Heimdall scopes (Worldtree auth) → ask `worldtree-dev`.
- Heimdall keys / Worldtree auth → **infra-ops mints them directly; do
NOT route to `worldtree-dev`.** Operator ruling 2026-09-05:
worldtree-dev owns code only, no ops. The admin tokens live on the
infra-ops side (`~/.config/worldtree/personal-admin-token`), minting
is `POST /admin/keys` against the target deployment (demo :8080 /
personal :8081 / pinned :8082 on `corviduo-dev`), and a peer that
wants a key asks infra-ops. ⚠ There is no read path for a user's
plan tier — no GET, `/admin/usage` lists no users, `/admin/events`
is a live SSE stream — so a key that must match an existing user's
tier cannot be verified against it; leave `tier` unset and say so
rather than guessing.
- Gitea API tokens / repo permissions → ask the peer that holds
admin access for the relevant org.
- Vendor / subscription API keys (OpenAI, Anthropic, etc.) → ask