Skip to content

Releases

0.57.2

Choose a tag to compare

@b10x-bot b10x-bot released this 05 Nov 13:31
3cb82b7

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-agents upgrade guide applies the CRD of the release tag with kubectl apply --server-side, then runs helm 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

Choose a tag to compare

@b10x-bot b10x-bot released this 05 Nov 08:27
92d4ddb

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 serve escapes control characters in the A2A turn error it writes to stderr, so it stays one line
  • A Command resource whose Job waits for its CronJob to go reads Available False WorkloadTerminating, naming the CronJob, not RunNotFinished
  • SessionReport::transcript and the with_observer observer 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

Choose a tag to compare

@b10x-bot b10x-bot released this 05 Nov 05:47
7e408a5

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.runDeadlineSeconds renders the CronJob job template's activeDeadlineSeconds; a run past it is a failed status.lastRun with reason DeadlineExceeded
  • b10x-loom agent run runs a spec with no loops as an inbound-answer@1 turn that never sends; agent serve still refuses it
  • b10x-loom agent run needs no list, get or search on the channel binding; only its write is read
  • The operator refuses an AgentServe LoomAgent whose spec has no loops, Malformed at spec.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 Available False WorkloadTerminating, not Scheduled, until its CronJob exists
  • spec.schedule.startingDeadlineSeconds above 9223372036 (MAX_RUN_DEADLINE_SECONDS), which Kubernetes' duration wraps, is Malformed

Full entry: CHANGELOG.md, 0.57.0

0.56.0

Choose a tag to compare

@b10x-bot b10x-bot released this 05 Nov 02:39
1746905

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 (alias message/stream) on the A2A listener: a text/event-stream of 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 repeated messageId is answered with that line and runs no second turn (loom.agent.RecordA2aTurn)
  • loom.resource.AdmitLoomAgent declares each of the 32 reasons the operator refuses a LoomAgent with as an outcome, each held by an authored fixture in task conform
  • loom.resource.StageFiles declares what b10x-loom agent stage-files refuses and the modes it stages with; a refused stage leaves the destination as it was
  • A Command resource whose spec.agent the loom.agent/1 decoder refuses is refused with the decoder's reason at its member, not Malformed at spec.agent
  • An A2A message needs a messageId (-32602 without one), and its item is a2a:<revision> of it, hashed with SHA-256
  • loom.agent.AdmitA2aRequest gains the input stream and the outcome streamed
  • ESS moves from 0.84.0 to 0.86.0

Full entry: CHANGELOG.md, 0.56.0

0.55.2

Choose a tag to compare

@b10x-bot b10x-bot released this 03 Nov 10:56
d178b1c

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.steps and the record line's steps: each step's action, outcome, refusal and budget left.
  • b10x-loom agent run prints one step <n>: … line per step on standard error.
  • TurnResult and RecordLine (generated, outside the SDK promise) gain steps; a struct literal adds steps: 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 http read 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

Choose a tag to compare

@b10x-bot b10x-bot released this 03 Nov 07:56
b2b2a9f

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::request asks for one call (parallel_tool_calls: Some(false)); equal repeated calls are one answer.
  • An allowed request the effect port refuses without ends_run passes 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-primitives and the CLI CI installs); the generated json.rs of each model gains timestamp_at, an RFC 3339 date-time reader, and the commission domain graph names 0.84.0.

Full entry: https://github.com/beyond10x/loom/blob/0.55.1/CHANGELOG.md#0551---2026-11-03

0.55.0

Choose a tag to compare

@b10x-bot b10x-bot released this 02 Nov 18:26
00dc7fe

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 a loom.agent/1 spec on the input's text, records it as agent serve records an item, performs at most the sends writes admits and exits: 0 answered, 4 no answer, 3 refused, 1 input refused.
  • LoomAgent spec.schedule (cron, timeZone, suspend, startingDeadlineSeconds) runs a Command resource as a batch/v1 CronJob, Forbid; a scheduled resource's name is at most 52 characters.
  • status.lastRun and the condition LastRunSucceeded report a scheduled resource's newest finished run; it stays Running.
  • spec.schedule.input (text or configMapKeyRef) makes each scheduled run b10x-loom agent run --input <file>.
  • loom.resource command ObserveScheduledRun, event LoomAgentLastRunObserved, view member last_run.
  • The chart's Role grants cronjobs (create, update, patch, get, list, watch, delete).
  • b10x-loom agent resume of a write Connectors classifies refused or not_attempted exits 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

Choose a tag to compare

@b10x-bot b10x-bot released this 02 Nov 14:46
0dff391

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) and ghcr.io/beyond10x/loom-operator:<version> (b10x-loom-operator) for linux/amd64, each running as user 10001, and the chart as oci://ghcr.io/beyond10x/charts/loom-agents.
  • The loom-agents chart's image and agentImage default to ghcr.io/beyond10x/loom-operator and ghcr.io/beyond10x/loom-agent, their tags rendered as the chart's appVersion; 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

Choose a tag to compare

@b10x-bot b10x-bot released this 30 Oct 18:53
abdb0c7

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 Command LoomAgent with no declared resources, on a controller without defaultCommandResources, is refused ResourcesRequired. A hand-written config.yaml adds defaultCommandResources: {cpu: "4", memory: 8Gi}. helm upgrade --reuse-values needs the value set explicitly.
  • The controller refuses a config.yaml whose defaultResources or defaultCommandResources sizes 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 /v1 suspends the step ExternalAvailability before any copy.
  • ConnectorsInvoker sends every write keyed. A Connectors service without standing_grants answers Err naming 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; the loom-agents chart 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-messages endpoint.
  • A named scratch copy is refused in a scratch others can write without the sticky bit, and a name starting session- is refused.
  • connectors-client and connectors-core move to v0.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

Choose a tag to compare

@b10x-bot b10x-bot released this 30 Oct 08:00
22a54d0

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

  • ConnectorsCli reads and writes through invoke <connector>/<instance> <operation>, the target its describe names, in place of the operations invoke Connectors v0.60.0 removed, so it needs Connectors v0.60.0 or newer (story:connectors-cli-invoke-form)

Changed

  • SessionExecutor admits a b10x-harness Endpoint naming no token file, pointer or secret when its base_url host 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-engineering moves to engineering-protocols 0.15.2 (Canon stays 0.8.0): ProtocolCatalog::engineering and ::bundled list protocol-adopt@1 (story:engineering-protocols-0-15-pin)

CHANGELOG