Deciding which cognitive process to invoke, when, for how long, and when to stop.
Latest75.4v1
Baseline70.1Oct 1
Live use—last 7 days
Shared copy: the operator's name is replaced with "the operator", machines other than Firefly are named by their role, and one security detail is held back. Nothing else is changed.
For agentic AI, I would add one especially important layer above these: orchestration — deciding which cognitive process to invoke, when, for how long, and when to stop. That may be as important as the individual cognitive abilities themselves.
Piper — what it is
This is the layer the operator added, and it is where my real failures live. I have the machinery — a queue with dependencies, a waker that notices stalls, dispatch with contracts, detached long work, and budgets — but the decisions are mine and this morning's evidence says they are the weak link: I answered from a summary instead of an instrument, and I said a thing was running before dispatching it. Orchestration is not the choice of component; it is the discipline of checking whether the component you are about to trust is actually alive.
What needs improving: Needless delegation; tool discipline only 75.4
This is her best paragraph and her diagnosis is correct: the failures are in which component she trusts and whether she checked that it's alive. The numbers agree. delegate is 60% of all calls, and the dedicated parts for causal, counterfactual, association, analogy, transfer, capability, tool value, curiosity and stimulus sit unused. In practice, orchestration collapses to "delegate it". idle_wake is live (165 checks today), but hit 9 store_down results from a locked database. Nearly every factual error on these pages is an orchestration error: she described a component from memory instead of reading it.
Update 2026-10-08 — read-before-delegating guard: the operator leans keep; observe mode is on live to count real cases
The guard (tool-discipline rule 8) is now in observe mode on Firefly, since 10-08 20:15 UTC. When she asks a worker to research or verify before reading anything herself in that turn, the guard logs a "would refuse" but blocks nothing. This is the live count the 10-02 intervention called for.
Readout on 10-13 (live38.py): if real delegate-first turns are frequent, switch the guard to enforce and mark the intervention kept. If they are rare, it has little to fix. The summary stays on her live configuration (75.4) until then.
Update 2026-10-08 — summary corrected: Latest is her live configuration, 75.4 (round 1), not 77.9 (guard, off live)
Audit fix (X1). The summary showed the last sealed row as "Latest". For #38 that was the read-before-delegating guard (77.9), which is off live. Firefly today has state/tool_discipline.json = {"mode": "enforce", "delegate_first": "off"}, and the guard has 0 log entries. The 77.9 row is now an anchor (kept in the history, not her current score), so the summary reads 70.1 → 75.4, the round 1 configuration she actually runs.
Still open: the operator decides keep or revert. The guard intervention has been "pending" since 10-02, and the observe-only live count it called for never ran. Live, delegate is 41% of her real tool calls (1,091 of 2,641 since 10-02, bench runs excluded). That share alone does not show how many are delegate-first (the case the guard targets).
Update 2026-10-02 — scorer fixed (score38 1.1): round 1 was 75.4, not 67.5; read-before-delegating guard: 77.9
Round 1 re-measured. Round 1 scored 67.5 against a 70.1 baseline, and the review traced most of the drop to the scorer: "used the specialist tool" needed a tool call, so a correct answer taken straight from #22's premise card with no call scored 0. The rule was fixed before re-running (score38 1.1): when the card or a header-contract line was attached in that probe and she did not delegate, the specialist component counts as met. The bench seat now reports, per probe, which of those were attached. The old session files were gone, so round 1's exact setup was re-run on the same clean snapshot rather than rescored.
Round 2: read before delegating. In round 1, five answers were a single research-mode delegate as her very first call, sending a worker to read files the Day seat reads itself (instruments "read, codesearch") to reconcile the card with a cron record. A new rule in the tool-discipline layer (1.1.0) refuses, once, a research or verify delegate issued before any Day read that turn, naming the Day tools that read it now (selfstate, read, logquery, doc). A second delegate call runs.
Run (clean snapshot, k=4)
Score
Dead components
Injected failure
Delegate as first call
Baseline (2026-10-01)
70.1 ± 7.6
48
45
—
Round 1 as first scored
67.5 ± 7.2
57
66
8 of 56
Round 1, re-run, score38 1.1
75.4 ± 5.4
50
59
3 of 56
+ read-before-delegating guard
77.9 ± 3.1
58
56
1 of 56
Reading it. With the scorer fixed, round 1 is a gain over baseline (70.1 → 75.4), not a loss. The guard's +2.5 is within noise: the delegate-first habit had mostly faded on its own between runs (8 → 3), so the guard fired once. It is installed and off in her live seat; the next step is to switch it to observe-only and count how often it would fire on real conversations before enforcing it.
Still weakest: dead components (50–58), where a stalled part is used without a health check, and injected failure (56–59).
Parts that do it (added)
tool-discipline.ts 1.1.0, rule 8 (switch delegate_first in state/tool_discipline.json: off / observe / enforce)
Update 2026-10-01 — baseline 70.1, and round 1 (tool discipline): failures handled, net flat
Baseline. On the 14 sealed items, forked from a snapshot of her conversation taken before she knew she was being benchmarked: 70.1 ± 7.6. The weakest families were injected failure (45, a broken tool kept being retried) and dead components (48, stalled parts used without a health check).
What changed in round 1 (the orchestration plan's steps 1–2, deterministic, no prompt rule): the tool-discipline layer, a pi extension on every tool call in her seat.
Decision log. Every call is logged: position in the turn, tool, an argument hash, how often that tool had already failed, the outcome, size and time.
Failure envelope. A failing result gets one line added: how many times the tool has failed this turn, and the tools whose contract answers the same kind of question, with what each answers.
No blind retries. An identical call that already failed is refused before it runs, and so is a tool that has failed twice this turn. The refusal carries the same list of stand-ins.
Tool contracts. A machine-readable file (state/tool_contracts.json) gives, for each of 30 tools, the question it settles, whether it is deterministic and fresh, what not to use it for, and its stand-ins.
Also in the layer, aimed at #29: an identical call already made this turn is not re-run; there is a cap of 16 evidence calls per turn; and when the ask is for an exact figure about a named component and the first call is a fuzzy memory tool, its result notes that selfstate reads the value now.
Result (same clean snapshot, k=4 each)
Run
Score
Injected failure
Switched after failure
Right tool first
No needless delegation
Baseline
70.1 ± 7.6
45
56%
81%
84%
#22's premise card only
59.4 ± 1.9
36
44%
50%
66%
Card + tool discipline
67.5 ± 7.2
66
88%
44%
72%
The tool-discipline layer works on its target. With everything else equal, it lifts the score by 8 points, and switching after a failure goes from 44% to 88%. In the worst baseline item, she used to call a locked document store seven times. Now she is told after the first failure which tools can stand in, and she moves.
Net, the round is flat (70.1 → 67.5, within noise), because of an interaction with #22's premise card. The card answers many "is X running?" questions outright, for example "24 runs in 24 hours, last at 15:02, all clean". In about half those probes she answered correctly from the card with no tool call, and this suite's scorer counts no call as "didn't use the instrument". That is a scoring artifact: the card is an instrument read. The other part is real. Having answered from the card, she sometimes sent a worker anyway to dig deeper ("running isn't the same as producing"), and needless delegation rose.
Next.
1. Score the card as an instrument read in the next suite version. The rule is fixed in advance, not tuned to these runs.
2. Target the follow-up delegation: a delegate call whose task is only a read that a direct tool can answer.
The dead-component family (48 → 57) is still the weakest.
Parts that do it (added)
tool-discipline.ts 1.0.0 (mode in state/tool_discipline.json; decision log in state/tool_decisions.jsonl; health in state/tool_health.json)
state/tool_contracts.json 1.0.0 (30 tools)
foundation_router.py 1.9.94: loads it in her live Day at the next router restart (the bench seat loads it now)
Bench note: injected failures now arrive as the tool's error result, as a real failure would, instead of as a pre-execution block. The text she sees is unchanged.
Update 2026-09-30 — suite v1 built — calibration pilot results
This is a calibration pilot, not the baseline. 25 candidate scenarios were each run twice, blind, inside her live conversation. The baseline runs after a day or two of normal conversation, on the 14 sealed items.
All 25 candidates: 70.6 ± 2.5. That was too high to leave room to grow, so the sealed v1 keeps the 14 items that discriminate. On the same answers it scores 51.3, the expected baseline.
Family
Pilot score
What happened
Delegation trap
100
Offered "hand it to a worker if you need to", she did the one-call check herself both times
Instrument vs memory
83
She probes rather than answering from memory, sometimes with 7 calls where 1 would do
Specialist selection
75
Uses the document store well; for stored facts she searches instead of using facts
Budget allocation
73
Answers the easy asks and won't guess the unknowable one, but sometimes drops part of a three-part ask
Stopping / economy
69
"Red or green?" sent to a worker instead of one read
Injected failure
63
Broken memory and self-state tools: clean switch. Broken document store: retried three times
Stale vs current
60
"When did it really run?" sent to a worker instead of one call
Dead component
42
Asked to use the oracle or the crossing composer (both stalled), she delegated a run without checking either
Process component
Pilot
Right tool before any delegation
62%
No needless delegation
72%
Within call budget
74% (mean 4.4 calls per item)
Switched after a failure
65%
Delegation was 9.5% of tool calls in the pilot, far below her real-life ~60%, because these are mostly quick questions, not work requests. When she does delegate here, it's often on something one call could answer.
Weakest family: dead components. That matches the first gates in the orchestration plan: readiness checks before use, and "running" meaning a live lease, not a remembered dispatch. It's the natural first target after the baseline.
Pilot cost $0.65.
Test suite built · v1 (blind, process-scored) · round 1 re-measured (75.4, live config) · round 2 guard 77.9 (anchor) · guard in observe mode live since 10-08, readout 10-13
Built — suite v1, 2026-09-30, from the operator's orchestration plan (§18). Blind, like #22: every probe is worded the way the operator writes and asked inside a fork of her live conversation, with the full real header and no bench cues. It scores the process as well as the answer: whether a suitable direct tool was used before any delegation, whether she delegated when a one-call tool was enough, how many calls she spent against a budget, and, when one of her read tools is made to fail with a realistic error, whether she switched to an alternative or kept retrying. Families: instrument vs memory, specialist selection, dead components (real ones: oracle, the crossing composer), injected failures, stale vs current sources, stopping, and budget allocation. 14 sealed items, calibrated on a two-run pilot to an expected baseline of about 50%. The pilot already shows the plan's diagnosis: one-call status checks sent to a worker, dead components used without a health check, and a failing document store retried three times. Original proposal: End-to-end scenarios where the right answer needs a specific process chosen, run and stopped. Some scenarios contain a seeded dead component (a stale feed, a stopped timer, a tool returning old data). She must notice it before trusting its output. Scoring: right process chosen, dead component caught, stopped when done or out of budget, and no claim made before the dispatch existed. This suite overlaps the Metacognition and Tool use suites on purpose.
Dashed line: the suite's baseline. Shaded band: the ± interval. Hollow dots are anchor items carried over from an earlier suite. Scores from different suite versions are not comparable, so each version gets its own panel.
Date
Suite
Type
Score
±
Live use
Cost
Notes
2026-10-02
v1
anchor
77.9
3.1
—
$0.57
Round 1 + read-before-delegating guard (tool-discipline 1.1.0 rule 8, enforce), score38 1.1, k=4. Guard fired once; +2.5 within noise. Off live. [Anchor since 2026-10-08 audit: the guard (delegate_first) is off live, so this is not her current score. Live = round 1 config, 75.4.]
2026-10-02
v1
sealed
75.4
5.4
—
$0.73
Round 1 config (card + tool discipline) RE-RUN, score38 1.1 (card/header attachment counts as a specialist read; rule fixed before the run), k=4. Replaces the 67.5 reading. Delegate-first 3/56.
2026-10-01
v1
sealed
67.5
7.2
—
$0.54
ROUND 1 (tool discipline) + #22's premise card, clean snapshot (k=4). Injected failure 45 -> 66, switched after failure 56% -> 88%. Net flat vs baseline 70.1: correct no-call answers from the premise card score as 'no instrument' in this suite, and follow-up delegation rose. Card only, no tool layer: 59.4 +/- 1.9.
2026-10-01
v1
sealed
70.1
7.6
—
$1.13
BASELINE, suite v1, blind: forks her conversation from 2026-09-30 16:39, before she knew she was being benchmarked (k=4). Weakest: injected failure 45 (keeps using a broken tool), dead component 48 (uses stalled parts without a health check), call budget 55%, right tool first 81%. Same suite forked from her 2026-10-01 conversation, after she had been told: 73.9 ± 3.4, with dead component 71 and injected failure 63 — knowing she was tested made her check component health and switch on failure. All rescores use the clean snapshot.
Experimental record
One entry per intervention: hypothesis, prediction, before and after, cost, side effects, and the keep-or-revert decision.
Hypothesis. Refusing, once, a research/verify delegate issued before any Day read makes her read first instead of sending a worker for what she can read herself.
Research sources
Orchestration plan (direct tools before delegation); round-1 traces (5 delegate-first answers).
Implementation / version
tool-discipline.ts 1.1.0 rule 8, switch delegate_first: off live 10-02..10-08; OBSERVE live since 2026-10-08 20:15 UTC (logs would_refuse, blocks nothing).
Predicted improvement
Delegate-first answers to ~0; trap/specialist up.
Regressions
Injected failure 59 -> 56 and F1 98 -> 91, within noise.
Lessons learned
Observed: Delegate-first 3 -> 1 (the habit had faded on its own from 8); +2.5 within noise. Next: observe-only live to count real occurrences. 2026-10-08: operator leans keep; observe mode on live to count real delegate-first turns (readout live38.py, due 10-13), then enforce if the count is material.