Repository navigation
Releases
0.57.2
The chart upgrade guide now applies the CRD of the new release before helm upgrade. The session executor's stderr walk also withholds two more kinds of credential line: a PEM block cut by the tail's window, and a token behind an escape sequence.
Breaking
- No breaking changes.
Changed
- README's
loom-agentsupgrade guide applies the CRD of the release tag withkubectl apply --server-side, then runshelm upgrade; the chart itself is unchanged - The stderr tail of the session error and the failure record withholds a PEM block's body when its window cut the block's opening
- A stderr line whose token follows an escape sequence (lone, joined to a word, or with a parameter) is withheld from the transcript, the observer, the tail and the record
Full entry: CHANGELOG.md, 0.57.2
0.57.1
A fixes-only release. An A2A turn error stays one line on standard error, a single-run Job waiting for a CronJob says so in Available, and a session transcript no longer carries the credential lines of a child's stderr.
Breaking
- No breaking changes.
Changed
agent serveescapes control characters in the A2A turn error it writes to stderr, so it stays one line- A
Commandresource whose Job waits for its CronJob to go readsAvailableFalseWorkloadTerminating, naming the CronJob, notRunNotFinished SessionReport::transcriptand thewith_observerobserver withhold each credential-shaped stderr line of a child that exits without a terminal record
Full entry: CHANGELOG.md, 0.57.1
0.57.0
b10x-loom agent run runs a spec with no loops and reads only the channel binding's write. A scheduled LoomAgent gains a run deadline and reads Available only once its CronJob exists. An A2A turn that cannot run names no host path to its caller.
Breaking
- No breaking changes.
Changed
spec.schedule.runDeadlineSecondsrenders the CronJob job template'sactiveDeadlineSeconds; a run past it is a failedstatus.lastRunwith reasonDeadlineExceededb10x-loom agent runruns a spec with noloopsas aninbound-answer@1turn that never sends;agent servestill refuses itb10x-loom agent runneeds nolist,getorsearchon the channel binding; only itswriteis read- The operator refuses an
AgentServeLoomAgentwhose spec has noloops,Malformedatspec.agent.loops - An A2A turn that cannot run gives its caller a fixed reason per kind (
serve::a2a::TURN_*), naming no host path - A scheduled resource waiting for its Job or Deployment to go reads
AvailableFalseWorkloadTerminating, notScheduled, until its CronJob exists spec.schedule.startingDeadlineSecondsabove 9223372036 (MAX_RUN_DEADLINE_SECONDS), which Kubernetes' duration wraps, isMalformed
Full entry: CHANGELOG.md, 0.57.0
0.56.0
The A2A listener streams a turn (SendStreamingMessage) and records each turn in record.jsonl, answering a repeated messageId without a second turn. LoomAgent admission and b10x-loom agent stage-files are declared in ESS and decided before anything is written.
Breaking
- No breaking changes.
Changed
SendStreamingMessage(aliasmessage/stream) on the A2A listener: atext/event-streamof the task, cut after 10 s for an event not written whole or 300 s idle (STREAM_IDLE)- An A2A turn's line goes to the state directory's
record.jsonl, and a repeatedmessageIdis answered with that line and runs no second turn (loom.agent.RecordA2aTurn) loom.resource.AdmitLoomAgentdeclares each of the 32 reasons the operator refuses aLoomAgentwith as an outcome, each held by an authored fixture intask conformloom.resource.StageFilesdeclares whatb10x-loom agent stage-filesrefuses and the modes it stages with; a refused stage leaves the destination as it was- A
Commandresource whosespec.agenttheloom.agent/1decoder refuses is refused with the decoder's reason at its member, notMalformed at spec.agent - An A2A message needs a
messageId(-32602without one), and its item isa2a:<revision>of it, hashed with SHA-256 loom.agent.AdmitA2aRequestgains the inputstreamand the outcomestreamed- ESS moves from 0.84.0 to 0.86.0
Full entry: CHANGELOG.md, 0.56.0
0.55.2
A turn records each step with its outcome and the budget left, a turn that has read answers on its last step instead of reading again, and an http read whose transport fails is retried once and then goes back to the model instead of ending the run.
Breaking
No breaking changes.
Changed
TurnResult.stepsand the record line'ssteps: each step's action, outcome, refusal and budget left.b10x-loom agent runprints onestep <n>: …line per step on standard error.TurnResultandRecordLine(generated, outside the SDK promise) gainsteps; a struct literal addssteps: Vec::new().- A turn that has read offers its last step only the answer; one that still selects none ends
the turn ran out before answering. - An
httpread whose transport fails is retried once, then is a refused step the model sees, not the end of the run.
Full entry: https://github.com/beyond10x/loom/blob/0.55.2/CHANGELOG.md#0552---2026-11-03
0.55.1
A forced request asks the model for one call, an allowed request the effect port refuses goes back to the model instead of ending the run at the approval gate, a turn the budgets end names the budget that ended it, and ESS moves to 0.84.0.
Breaking
No breaking changes.
Changed
model_selector::requestasks for one call (parallel_tool_calls: Some(false)); equal repeated calls are one answer.- An allowed request the effect port refuses without
ends_runpasses the approval gate: the model sees the refusal and may correct it. - A turn that stops after a refused effect names the refusal in its detail, never only
AwaitingApproval. - A turn the budgets end names the budget that ended it and the two model calls a step.
- ESS moves from 0.82.0 to 0.84.0 (
ess-conformance,ess-primitivesand the CLI CI installs); the generatedjson.rsof each model gainstimestamp_at, an RFC 3339date-timereader, and the commission domain graph names0.84.0.
Full entry: https://github.com/beyond10x/loom/blob/0.55.1/CHANGELOG.md#0551---2026-11-03
0.55.0
A spec runs one turn on a given task text and exits, a Command resource can run on a schedule with its task text declared in the resource, and a write Connectors refuses is never counted as sent.
Breaking
No breaking changes.
Changed
b10x-loom agent run --spec <FILE> --state <DIR> --input <FILE>runs one turn of aloom.agent/1spec on the input's text, records it asagent serverecords an item, performs at most the sendswritesadmits and exits: 0 answered, 4 no answer, 3 refused, 1 input refused.LoomAgentspec.schedule(cron,timeZone,suspend,startingDeadlineSeconds) runs aCommandresource as abatch/v1CronJob,Forbid; a scheduled resource's name is at most 52 characters.status.lastRunand the conditionLastRunSucceededreport a scheduled resource's newest finished run; it staysRunning.spec.schedule.input(textorconfigMapKeyRef) makes each scheduled runb10x-loom agent run --input <file>.loom.resourcecommandObserveScheduledRun, eventLoomAgentLastRunObserved, view memberlast_run.- The chart's Role grants
cronjobs(create, update, patch, get, list, watch, delete). b10x-loom agent resumeof a write Connectors classifiesrefusedornot_attemptedexits 5 with the refusal and counts no send, where it reported success.
Full entry: https://github.com/beyond10x/loom/blob/0.55.0/CHANGELOG.md#0550---2026-11-02
0.54.0
Every release publishes the agent and operator images and the chart to ghcr, the chart defaults to those images at its own version, and ESS moves to 0.82.0.
Breaking
No breaking changes.
Changed
- Every release publishes
ghcr.io/beyond10x/loom-agent:<version>(b10x-loom) andghcr.io/beyond10x/loom-operator:<version>(b10x-loom-operator) forlinux/amd64, each running as user 10001, and the chart asoci://ghcr.io/beyond10x/charts/loom-agents. - The
loom-agentschart'simageandagentImagedefault toghcr.io/beyond10x/loom-operatorandghcr.io/beyond10x/loom-agent, their tags rendered as the chart'sappVersion; a tag or repository set at install still wins. - ESS moves from 0.77.0 to 0.82.0; the generated decoders read a whole number spelt with a fraction or an exponent (
3.0,30e-1) as an integer.
Full entry: https://github.com/beyond10x/loom/blob/0.54.0/CHANGELOG.md#0540---2026-11-02
0.53.0
Command pods are sized for a coding agent, a Claude Code session can reach the model through a keyless loopback endpoint, a session can keep a stable scratch path for the prompt cache, and Connectors writes go out keyed.
Breaking
- A
CommandLoomAgentwith no declared resources, on a controller withoutdefaultCommandResources, is refusedResourcesRequired. A hand-writtenconfig.yamladdsdefaultCommandResources: {cpu: "4", memory: 8Gi}.helm upgrade --reuse-valuesneeds the value set explicitly. - The controller refuses a
config.yamlwhosedefaultResourcesordefaultCommandResourcessizes are not Kubernetes quantities. - A Claude Code endpoint that names a key, is not on loopback, speaks another wire or does not end in one
/v1suspends the stepExternalAvailabilitybefore any copy. ConnectorsInvokersends every write keyed. A Connectors service withoutstanding_grantsanswersErrnaming the missing standing grant, and nothing is resent unkeyed.- A write's idempotency key covers commission, case and run, so a write retried across the upgrade goes out under a new key.
Changed
- The controller configuration gains
defaultCommandResources; theloom-agentschart sets it to{cpu: "4", memory: 8Gi}. SessionExecutor::copy_name: a stable scratch path per name, so the provider's prompt cache holds across steps.- A Claude Code session executor points the session at the root of a keyless loopback
anthropic-messagesendpoint. - A named scratch copy is refused in a scratch others can write without the sticky bit, and a name starting
session-is refused. connectors-clientandconnectors-coremove tov0.62.0.- A number the Connectors host would read as another value is refused before any call.
- Only the host's refusal of the key itself gets the standing-grants remedy.
Full entry: https://github.com/beyond10x/loom/blob/0.53.0/CHANGELOG.md#0530---2026-10-30
0.52.0
A keyless model endpoint on loopback for the credential-free pod, the Connectors v0.60.0 invoke form, and engineering-protocols 0.15.2.
Breaking
ConnectorsClireads and writes throughinvoke <connector>/<instance> <operation>, the target its describe names, in place of theoperations invokeConnectors v0.60.0 removed, so it needs Connectors v0.60.0 or newer (story:connectors-cli-invoke-form)
Changed
SessionExecutoradmits a b10x-harnessEndpointnaming no token file, pointer or secret when itsbase_urlhost is loopback (127.0.0.0/8, ::1, localhost), and launches the loop with no credential; any other keyless endpoint is refused as before (story:session-executor-keyless-loopback)b10x-canon-engineeringmoves to engineering-protocols0.15.2(Canon stays0.8.0):ProtocolCatalog::engineeringand::bundledlistprotocol-adopt@1(story:engineering-protocols-0-15-pin)