foundry · oracle · trivium-forge · what is left · 2026-09-23

Foundry Build Ledger

Updated 2026-09-23 20:27 UTC from GitHub. 6 components in your words, each broken into the parts that produce it, in the owner's order. Yellow edge = the part a builder picks up now. Red edge = it moves only when you act. Finished work is folded away at the bottom.

44 open
Moves on Peter10 parts
Moves on the builder25 parts
Moves on Claude6 parts
With Gage / Astra / Grok11 parts

Six components

Your level is the component; mine is the part. Bars show parts landed out of parts listed. "Next" is the one part that unblocks the most.

1 · Speed

A plain chat turn on the live route answers fast, every time. Prompt length is the latency, not thinking: a one-word greeting was carrying 33 tool schemas and 7.8k prompt tokens. Speed is a merge gate of Class A standing; new-tool work halts while it is red.

Your rule · 9/15 and 9/18Always keep speed a high priority. Core as light as possible; when a tool is called the wire carries core plus that one schema and everything else is dropped. Every PR states its cost to the turn.
No.PartStateRefNext moveDone when
1.1Tiered tools: core on the wire, the rest behind open_toolsCategories listed as one-line index entries; a category loads only when opened.merged#926Claude measureCore schema count and bytes reported; a chat turn under 4k prompt tokens.
1.2Drop everything but core + the called schema for the rest of the turnYour 9/18 evening ruling. Index lines go too once a tool is open; reset to core + index between turns.done#847 B.3BuilderDeployed 9/20 evening (#956 line).
1.3Zero prefix-cache hits on the Sparks routeThe core is stable at the front so the cache should hit; it does not. --prefix-match-unit 8 was a no-op.done#927Claude + BuilderWarm-turn prefill drops and the server counter shows hits.
1.4Snappy-turn SLO as the merge gateA plain chat turn on the live route, timed in CI against the lane budget. Red blocks the merge.open#870BuilderA PR that adds latency to Hal's chat turn fails its check.
1.5Reply first, work in the backgroundA drafting question gets an immediate answer while the tools run as a job.done#956Claude deployDeployed 9/20 evening; reply-first live on both lanes.
1.6Standing bakeoff: Foundry vs DeepSeek harness vs Hermesdone#872Same tasks, same endpoint; if Foundry is 5× slower the harness is the bug.
1.7Long Telegram reply splits; a streamed turn shows oncedone#965Claude deployDeployed 9/20 evening.
1.8Thinking off on chat; keepalive; streaming; self-knowledge cachemerged#809 #867Landed 9/15.
1.9Fast front + specialist lanes as toolsOne fast Hal in front; engineering, accounting and design as specialist lanes with their own models.live#624Specialist registry, picker and delegation on main.
1.10Gage 4.7 audit · Oracle greeting sends 37 schemas, 9,063 tokens, 3.7 s before a wordTier Oracle's tools the way Hal's are tiered.next#991BuilderAn Oracle greeting carries the same 4 core schemas Hal does; measured on the Sparks route.
1.11Gage 4.7 audit · Thinking at the server default eats the output cap and returns nothingnext#991BuilderChat routes force thinking off; a greeting returns text every time.
1.12Gage 4.7 audit · Hal greeting is 4,893 prompt tokens: a core file and a page of memory it never usesopen#991BuilderGreeting under 3k tokens; the cut blocks named and lazy-loaded.
1.13Gage 4.7 audit · Prefix cache is on but a repeated chat prompt is not fasteropen#991Builder · Claude measureSecond identical greeting measurably faster than the first, or the reason written down.

2 · Capabilities

A Foundry agent is fully capable the moment it is spun up: shell, files, brokered network, helpers that persist, skills that load, memory that writes, tool results that survive a turn. Opt-out per agent later. Money, sends and credentials stay the only gates.

Your rule · 9/17 and 9/18Tear down the limitations… reimplement once we have a really usable product. When we spin up a foundry agent, I need it to be fully capable from the start by default.
No.PartStateRefNext moveDone when
2.1Default-on lanes: kernel posture and the profile resolverA new lane manifest gets every registered tool unless its forbidden: block says otherwise.in review#909 #936Gage then PeterA lane file with no grants list prints every tool at start-up.
2.2A · workspace_run works on the live hostThe OS sandbox refused every command since 9/13.open#890 foundry-hal#7BuilderHal runs a script in his workspace and gets the output back.
2.3B · Skill loader: load and keep procedures before filing a ticketopen#962GagePart B never merged (#962, six Gage rounds). Re-scope or close.
2.4C · Helpers persistA script the agent wrote and that worked is callable next time.done#890 CBuilderMerged #978, deployed 9/21.
2.5D · durable_memory_write granted to the front lanesdone#890 DBuilder · Peter recordMerged #981, deployed 9/21 (hal v7 / oracle v6).
2.6E · Brokered egress for the workspacedone#890 EBuilderMerged #982, deployed 9/21.
2.7F · One capability envelope, wired to a lanedone#890 FBuilderMerged #980, deployed 9/21.
2.8G · Rewrite the self-model sentenceStop teaching "a capability the lane does not grant is silence".done#890 GBuilderMerged #976, deployed 9/21.
2.9H · stuck.py improvises before it escalatesWrite a helper and try again before asking a bigger brain.done#890 HBuilderMerged #976, deployed 9/21.
2.10N · Tool results survive into the next turnBounded rows on the trace message; +325 prompt tokens, +0.16 s p50, per-lane dial.merged#933Peter Class AHal quotes yesterday's tool result without re-running the tool.
2.11Host file search: host_find / host_readRead-only over what the foundry account sees; secret paths refused.open#836Builder"Find anything about X on this machine" returns the file.
2.12Skills: mine repeats, promote at 10 days, retire with a tombstonemerged#672 #702Nothing uses a mined skill yet; that is 2.3.
2.13Memory seeded from OpenClaw, 5,080 lines livemerged#843 #845 #848 #858Landed 9/15.
2.14Gage 4.7 audit · Engineer, finance and coding are not three running agentsRegistered ≠ granted: the pump calculator (foundry-hal #6) was built and left off the lane.next#992BuilderThe calculators are granted, the books are registered, and each role answers on its own lane.
2.15Gage 4.7 audit · A request does not become a tool in 90 minutesopen#992Anvil · Hammerfoundry-hal #15 (open since 9/20) lands as a tool; the intake loop (4.2) closes the gap by itself.
2.16Gage 4.7 audit · The model is still told a closed worldopen#992BuilderSelf-knowledge says what the lane holds and how to get more, never what it cannot do; verified on a live turn.

3 · Last mile

Every ability that is built and green but not yet on the runtime. Three audits found the same thing: capability built in one PR, armed in a second PR that never opened. This component is the list of second PRs, records and deploys. It is the shortest road to a more capable Hal, and most of it moves on you.

Your rule · 9/17Report exceptions only. So this table is the exception list: each row is one thing standing between a merged PR and a live lane.
No.PartStateRefNext moveDone when
3.1Schedule tools: register, grant Foundry-wide, fire from each lane's daemonOracle's four report times are launchd jobs I install. This lets any lane set its own. Oracle asked for it again today (oracle#159).done#941PeterDeployed 9/20 evening.
3.2Deploy the merged speed workReply-first (#956), tiered tools (#926), long-reply split (#965) are on main and not on the runtime. Merge hold lifts when #941 lands.done#956 #926 #965ClaudeRuntime on 81725e0e, 9/21.
3.3Grant the coms bus: Hal, Oracle and the builder message each otherInbox, delivery, receipts and ratchet exist; no lane grants message_agent.your record#835Builder PR · PeterOracle asks the builder for something and it lands as a job.
3.4Oracle engine gate binds to merged main; one deploy script; hourly pin checkEnds the record-per-engine-bump churn you ruled out this morning.done#967PeterMerged #967 + one deploy script; engine at 8c25d293.
3.5Scout gets live X: Grok /responses with x_search + web_searchA Foundry-wide ability behind a route flag; add the grok-search route to the operator env at deploy.done#968PeterMerged #968; grok-search route live 9/20.
3.6Standing preferences: an owner-set file loaded with the core context every turndone#955Gage"Never sign off with a summary" sticks across sessions on every adult lane.
3.7Email tool family: each agent reads and sends from its own mailboxSends stay behind the hard stop.in review#959Gage then PeterHal reads a vendor reply from his own inbox.
3.8Every agent's keychain unlocks itself at bootToday's outage: two locked keychains took Claude Code and Oracle's broker keys down. foundry, grok and codex now unlock via a boot daemon; secrets re-entered. Claude Code has NOT been shown to unlock unattended at boot. Only hal is left, and that is your login.nextlocal-first #37Claude · Peter yes on halLive for foundry, grok, codex; not done for claude until a boot brings Claude Code up with nobody at the keyboard; hal is Peter's login (left alone).
3.9Rotate the printed secretsHal Telegram token (8/16), Anvil Telegram token + S128 key (9/03), Cerebras key (9/15), Cloudflare + Hostinger passwords (9/14).yoursPeterEach one rotated; I stop reminding.
3.10Builder route + gate livesparks-builder route READY, gate recorded, dry-run proven.done#837 #854Done 9/20.
3.11Live board on jobs.egyed.ioYou: add the two Cloudflare repo secrets (API token, account id), move ledger/ledger.workflow.yml → .github/workflows/ledger.yml, add the domain to Pages project foundry-ledger.yours#975PeterPage renders every 15 min from ledger/parts.yaml and GitHub state.
3.12Gage 4.7 audit · Anvil's mission loop has no deadline and its lock is a lienextlocal-first#38AnvilA cycle past its budget is killed and journaled; measured 85 min past a 30-min lock.
3.13Gage 4.7 audit · Class A approval dies on a rebase that changed no bytesopen#992Builder · GageApproval binds to the tree hash; a no-byte rebase keeps the stamp and the record. 30 of the last 40 merges were Class A.
3.14Gage 4.7 audit · Oracle pin drift can sit for hours; two Colima VMs for two small listenersopenlocal-first#38BuilderPin checker alerts within the hour; one VM.
3.15Post-close review carries the engine's numbersopenoracle#169Builder (oracle#169)The engine writes the review block at the daily close and the cadence renders it. Not a clock bug: #993 closed, live plist restored.

4 · Coding agent

Anvil moves off Hermes and onto Foundry: his brain on the Sparks route, a loop that turns an accepted request into a job by itself, his own Telegram seat, and one shadow job to prove it. Hermes stays the fallback until two Foundry-built PRs merge clean.

Your rule · 9/20Make sure the abilities we create for the builder are foundry wide abilities. Always keep speed a high priority. No builder-only branch of the harness; each PR states cost to the turn.
No.PartStateRefNext moveDone when
4.17.08 · A real brain on the builder laneReadback: builder-foundry brain route sparks-builder → qwen38-flash-next-sparks: READY.done#837Proven 9/20 11:4x with the gate recorded.
4.27.09 · Intake loop: a request issue becomes a job by itselfAny lane's own-repo [request] issue, not just the builder's. The 90-minute rule.open#833AnvilAnvil picked it up 9/21 06:35.
4.34.08 · The bus grantSame part as 3.3; it sits in the builder's order because the builder is the first consumer.your record#835Anvil PR · PeterA request travels agent → builder with no relay.
4.47.10 · Anvil's own Telegram seat on Foundry, with the envelopewaiting#834AnvilParked 9/21: Hammer gets the Telegram lane instead if wanted.
4.57.11 · Shadow job: one issue on both buildersopen#838Anvil + Claude compareTwo Foundry-built PRs merge and you say "stop building on Hermes".
4.67.12 · What the builder loses leaving Hermes: shell, memory, watcherWiden only for what the shadow job proves he needs.open#839AnvilThe shadow job runs without a tool he does not have.
4.7Mission-cycle guard: every cycle writes a ledger lineHermes-side hygiene while he is still there.in review#891GageNo unreviewed merge and no silent cycle.
4.8Hammer: a second builder seat on Foundry, run beside AnvilPlan change filed 9/21 (#994): Anvil stays as is. You create the blinc-hammer GitHub App.next#994Peter App · Builder wiringBoth builders pull one queue for 2 weeks or 20 jobs; one table; you pick the harness.

5 · Forge

The kids out-earned the eleven-recipe catalog in two weeks. Crafting Overhaul Map v1 is signed: a full-width Smithy around the tutor, metal as tier, shape as a craft-time choice, then depth and learning in the temper step. Build order S0 → S1 → S3, then temper and grades, then smith level and runes.

Your rule · 9/20Signed Map v1 with three yeses, plus: kids want more things to craft: swords, tools, weapons, shields. Viking set is the product; the 3-boy/6-girl split stays.
No.PartStateRefNext moveDone when
5.1S0 · The slot SmithyStructural goal picker, per-slot chain, full-width forge page. Gage approved round 1; Astra's blocker fixed in round 2.donetrivium-forge#297Claude mergeMerged 9/20.
5.2S1 · Metal as a compositor input, the cape row, the forward-upgrade ruledonetrivium-forge#299Claude merge after S0Merged 9/21.
5.3S3 · Forge scene and strike FX behind the Smithy (CSS/SVG only)donetrivium-forge#300Claude merge after S1Merged 9/21.
5.4Deploy S0–S3 to the minidonemini deploy procedureClaudeDeployed 9/21 morning; public path 200.
5.5Art wave: metal layers, cape, sword, spear, kite and tower shields, nasal helmDispatched to Grok on #294; no reply yet. Buzz relay was down before the reboot; it is up now.waitingtrivium-forge#294GrokLayered PNGs committed and referenced by the compositor.
5.6S2 · Temper step and quality gradesThree live-plan questions in the metal's discipline; misses never cost ingots; stars from mastery, server-graded.yoursMap v1 §CPeterGage and Astra both: a finish from lesson questions is a quiz under Map §1. Hold, or accept the seam until S4 with one record on #301.
5.7S4 · Smith level upgrades the forge scene; runes and named gearopenMap v1 §D–EClaudeLevel 3 smith sees a bigger forge; a quest line names a sword.
5.8Two open advisoriesCross-slot banner order; full-set portraits ignore metal cuts (Astra).opentrivium-forge#294Astra · ClaudeBoth folded into S1 or filed as their own parts.
5.9Gage 4.7 audit · A failed drill still mints an ingot, and the screen never says sonexttrivium-forge#305BuilderA failed drill mints nothing and says why.
5.10Gage 4.7 audit · A lesson check waits up to 60 s on the model after the grade is savednexttrivium-forge#305BuilderGrade shows at once; the model's note arrives when it arrives.
5.11Gage 4.7 audit · Smithy discards a finished reply, then loads an 800×1280 portrait into an 11-rem frameopentrivium-forge#305BuilderOne reply used; portrait sized to the frame.
5.12Gage 4.7 audit · History: 20 of 50 stories drafted; keep-forging has no daily capopentrivium-forge#305Grok stories · Builder30 more stories drafted; a per-day cap.

6 · Oracle on Coinbase

About $600 of BTC plus $500 of USDC you added 9/20 in your Default portfolio is Oracle's live-test money before real money. Oracle places the orders, never the builder. BTC is the savings account; USD and alts are working capital. At roughly 0.9% a side, a round trip costs about 2%, so the monitor's default action is to do nothing. Rails proposed: 25% per position, 10% daily stop, 20% weekly kill, every fill journaled and one Telegram line.

Your rule · 9/20Turn it on and turn him free. Grow it any way; convert half to all of the BTC to USD as his first act; the LLC account is the real-money phase, and the 50/50 hardware deal starts there.
No.PartStateRefNext moveDone when
6.1Oracle's keys back in the rebuilt foundry keychainCoinbase CDP (new key, also in the CLI), Alpaca paper and live pairs, FRED, Telegram. Each verified against its API 17:20. Live pair is stored only; the engine still refuses live writes.donelocal-first #37Landed 9/20 17:20. Paper equity reads; live account reads $0.
6.2Read-only Coinbase Advanced Trade driver: market kinds, provider switch, trading gateYour record is posted at head cc904eb7; Gage re-stamps after the reboot.doneoracle#160Gage then Claude merge + syncMerged #160 9/20; engine synced.
6.3Coinbase market kinds (cb_*) on the oracle-voice argv allowlistdone#970GageMerged #970 9/21.
6.4Execution: Oracle's order path, rails, first act, sleeves, gateRecord line handed at cb20f58d. First real order path, so Class A.doneoracle#163 oracle#161PeterMerged #163 9/21 at your record.
6.5Your word: trading_enabled: trueOracle's first act converts half to all of the BTC to USD; a done state needs a confirmed fill.donePeterYour word 05:06 MST 9/21; flag committed as #164. A fill waits on a coinbase_fill record.
6.6Crypto 24/7 monitor + local Jev in the loopTeam brainstorm: Claude, Grok, Astra lenses in; OMP pending. Trend state, volatility regime and "when not to act" per pair from one WebSocket.openoracle#162Claude fold into one mapOne map for your signature, then a builder PR.
6.7Astra: BTC-first momentum research and the evaluation contractResearch-only branch astra/crypto-momentum-research-20260920: strategy spec, offline detector and cost lab, tests. Compares the Jev API against the local model. Not a live activation.researchREADME @ b5447abeAstraA strategy with a backtest and a fee model, filed as a proposal Oracle can run as a sleeve.
6.8Local Jev: Laya behind the decision seam, in shadow beside TypeSafe23 ms per choice; zero-shot weak; fine-tune on the shadow-route rows is part D. Jev never places, cancels or flattens.Class B#969 #964GageShadow log shows Laya and TypeSafe side by side on real ticks.
6.9Oracle's own requests: Coinbase connector, schedulerFiled by Oracle on his repo today; answered by 6.2/6.4 and 3.1.your recordoracle#158 oracle#159OMP · GageOMP's #986 (foundry): read kinds live on the lane — approval on ea4c2990, PR open.
6.10Coinbase CLI live, Default portfolio readdone9/20Landed this morning; key re-import is 6.1.
6.11Gage 4.7 audit · The 10% daily and 20% weekly halts block buys but never sellnextoracle#167OMPOn a halt the trend and swing positions are sold; the week baseline is never replaced with a lower equity.
6.12Gage 4.7 audit · first_act.done, trend, and swing_rebalanced_on flip without a confirmed fillnextoracle#167OMPAll three flip only on a confirmed fill; a lost response retries under the same client id; a response that cannot be read flips nothing.
6.13Gage 4.7 audit · Savings BTC in Default blocks the whole trend sleeve at the 25% railnextoracle#167PeterRemove BTC-USD from coinbase.trend_products in config/oracle3-foundry.json; do not raise max_position_pct; leave the savings alone.
6.15Gage 4.7 audit · an unreadable coinbase_exec.json sells half the BTC againA missing or half-written state file reads as a fresh book, so the first act fires a second sale nobody ordered.nextoracle#167OMPIf coinbase_exec.json exists and does not parse: place no order and run no first act.
6.14$500 USDC added to the test bookdone9/20Landed 9/20; book is ~$300 BTC + ~$300 USD + 500 USDC.

Moves only when you act

  1. Record on #835 — Grant the coms bus: Hal, Oracle and the builder message each other (3.3). Inbox, delivery, receipts and ratchet exist; no lane grants message_agent.
  2. Your call — Rotate the printed secrets (3.9). Hal Telegram token (8/16), Anvil Telegram token + S128 key (9/03), Cerebras key (9/15), Cloudflare + Hostinger passwords (9/14).
  3. Record on #975 — Live board on jobs.egyed.io (3.11). You: add the two Cloudflare repo secrets (API token, account id), move ledger/ledger.workflow.yml → .github/workflows/ledger.yml, add the domain to Pages project foundry-ledger.
  4. Record on Map v1 §C — S2 · Temper step and quality grades (5.6). Three live-plan questions in the metal's discipline; misses never cost ingots; stars from mastery, server-graded.
  5. Record on oracle#158 oracle#159 — Oracle's own requests: Coinbase connector, scheduler (6.9). Filed by Oracle on his repo today; answered by 6.2/6.4 and 3.1.
  6. Yours: blinc-hammer GitHub App (4.8); the S2 temper call (5.6); BTC savings vs the trend sleeve (6.13); Cloudflare secrets + workflow move + domain for this page (3.11); the printed-secret rotations (3.9).
  7. Gage's Grok 4.7 audits, 9/21: foundry #991 speed, #992 capability, oracle #167 money path, trivium-forge #305, local-first #38. Their asks are the parts marked 'Gage 4.7 audit'. The board marks the parts I verified; it is not the whole of any audit issue.
Finished since the 9/14 ledger — 57 parts landed
  • Tiered tools: core on the wire, the rest behind open_tools (#926)
  • Drop everything but core + the called schema for the rest of the turn (#847 B.3)
  • Zero prefix-cache hits on the Sparks route (#927)
  • Reply first, work in the background (#956)
  • Standing bakeoff: Foundry vs DeepSeek harness vs Hermes (#872)
  • Long Telegram reply splits; a streamed turn shows once (#965)
  • Thinking off on chat; keepalive; streaming; self-knowledge cache (#809 #867)
  • Fast front + specialist lanes as tools (#624)
  • C · Helpers persist (#890 C)
  • D · durable_memory_write granted to the front lanes (#890 D)
  • E · Brokered egress for the workspace (#890 E)
  • F · One capability envelope, wired to a lane (#890 F)
  • G · Rewrite the self-model sentence (#890 G)
  • H · stuck.py improvises before it escalates (#890 H)
  • N · Tool results survive into the next turn (#933)
  • Skills: mine repeats, promote at 10 days, retire with a tombstone (#672 #702)
  • Memory seeded from OpenClaw, 5,080 lines live (#843 #845 #848 #858)
  • Schedule tools: register, grant Foundry-wide, fire from each lane's daemon (#941)
  • Deploy the merged speed work (#956 #926 #965)
  • Oracle engine gate binds to merged main; one deploy script; hourly pin check (#967)
  • Scout gets live X: Grok /responses with x_search + web_search (#968)
  • Standing preferences: an owner-set file loaded with the core context every turn (#955)
  • Builder route + gate live (#837 #854)
  • 7.08 · A real brain on the builder lane (#837)
  • S0 · The slot Smithy (trivium-forge#297)
  • S1 · Metal as a compositor input, the cape row, the forward-upgrade rule (trivium-forge#299)
  • S3 · Forge scene and strike FX behind the Smithy (CSS/SVG only) (trivium-forge#300)
  • Deploy S0–S3 to the mini (mini deploy procedure)
  • Oracle's keys back in the rebuilt foundry keychain (local-first #37)
  • Read-only Coinbase Advanced Trade driver: market kinds, provider switch, trading gate (oracle#160)
  • Coinbase market kinds (cb_*) on the oracle-voice argv allowlist (#970)
  • Execution: Oracle's order path, rails, first act, sleeves, gate (oracle#163 oracle#161)
  • Your word: trading_enabled: true
  • Coinbase CLI live, Default portfolio read (9/20)
  • $500 USDC added to the test book (9/20)
  • Oracle trading ON at your word 05:06 9/21 (6.5)
  • Coinbase execution #163 + flag #164 merged, engine 8c25d293
  • Tear-down parts C–H merged and deployed (2.4–2.9); runtime 81725e0e
  • Forge S0–S3 + S1 follow-up live on the mini (5.4)
  • Scout X search live (#968); schedule tools live (#941)
  • Gage on Grok 4.7; five broad audits filed 9/21
  • Oracle memory: OpenClaw account line retired; engine-is-live fact added
  • Shared-folder GitHub App keys moved to their owners
  • Live board tooling merged (#975)
  • Speech fix deployed (#867)
  • Importer dry-run dedupe (#861)
  • Egress-proxy CI flake (#855)
  • report_issue routed to the agent's own repo (#825)
  • draft_package: customer-approval package (#826)
  • Memory reindex hygiene (#937)
  • Oracle: watchlist persistence + daily review (oracle#143)
  • Oracle: macro list gains VIX and oil (oracle#139)
  • Oracle: flatten unblocked on non-numeric stop (oracle#138)
  • Oracle quotes fixed, pin and evidence rule: no record per engine bump
  • Forge Crafting Overhaul Map v1 signed
  • Forge crafting table + painted gear live on the mini
  • Studio36 recovery: Claude Code login restored (local-first #37)
Source: GitHub state on azhodl/foundry, azhodl/oracle, azhodl/trivium-forge at 2026-09-23 20:27 UTC (55 refs read from GitHub, 0 unreachable), ledger/parts.yaml, and the owner's rulings of 9/15–9/20. Component names are the owner's; part numbers, ordering and "Done when" come from the data file. A merge on any of the three repos flips its row within 15 minutes; nobody edits HTML.
SHEET 1/1