Skip to content

Releases: grainulation/bean

v2.1.0

Choose a tag to compare

@github-actions github-actions released this 21 Jun 05:06

bean v2.1.0 — Rust runtime (gate + verify + driver + native Stop hook).

Prebuilt binaries per platform are attached. Or build from source:
git clone … && ./install.sh (requires Rust; the binary itself has no runtime deps).

What's Changed

Full Changelog: v2.0.2...v2.1.0

v2.0.2

Choose a tag to compare

@github-actions github-actions released this 21 Jun 03:33

bean v2.0.2 — Rust runtime (gate + verify + driver + native Stop hook).

Prebuilt binaries per platform are attached. Or build from source:
git clone … && ./install.sh (requires Rust; the binary itself has no runtime deps).

Full Changelog: v2.0.1...v2.0.2

v2.0.1

Choose a tag to compare

@github-actions github-actions released this 20 Jun 16:04

bean v2.0.1 — Rust runtime (gate + verify + driver + native Stop hook).

Prebuilt binaries per platform are attached. Or build from source:
git clone … && ./install.sh (requires Rust; the binary itself has no runtime deps).

Full Changelog: v2.0.0...v2.0.1

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 20 Jun 14:58

bean v2.0.0 — Rust runtime (gate + verify + driver + native Stop hook).

Prebuilt binaries per platform are attached. Or build from source:
git clone … && ./install.sh (requires Rust; the binary itself has no runtime deps).

What's Changed

  • bean 2.0: Rust runtime (a gate with an oracle, ported home) by @aid-ninja in #1

New Contributors

Full Changelog: v1.2.0...v2.0.0

v1.2.0 — test the interpretation, not just the execution

Choose a tag to compare

@aid-ninja aid-ninja released this 19 Jun 13:37

The "not quite there" release. The core failure was satisficing: the loop under-delivered
its promised transparency and stopped to ask instead of driving, and a clean internal ledger
read as a correct answer even when the task had been misunderstood. The fix is test the
interpretation, not the execution
, plus tighter enforcement.

Measured on the AppWorld benchmark: on a task where the baseline misread the spec — it synced
all 27 phone contacts instead of the 8 phone friends — the discipline took the result
2/5 → 5/5. A four-task cross-test shows the effect is real but narrow: decisive on
tasks where the baseline misinterprets, and a no-op (no regression) on the three of four where
it already read the spec correctly. Treat it as insurance against interpretation errors, not a
general per-task accuracy lift.

Loop discipline (the validated fix)

  • Test the interpretation, not the execution (verify.md): the dangerous failure is
    code that runs cleanly against the wrong success criterion. Probe the load-bearing
    ambiguous term against the real system; manufacture an external check at all costs rather
    than self-asserting "I verified"; if the reading can't be pinned down, it is a residual.
  • Relentlessness recalibration (convergence.md): asking the human is the consult move
    of last resort (a genuine blocker), not a default off-ramp — don't punt what's
    investigable. Proportion ≠ satisfice. Plus goal-persistence: re-anchor on the goal each
    round; a detour must close a blocker on the goal or be deferred, never silently become it.
  • Internal convergence ≠ correctness (convergence.md): the gate certifies the ledger
    is self-consistent; it has no oracle for whether the task was understood right. Gate on an
    external signal where one exists; otherwise name the interpretation as a residual.

bean-check enforcement

  • E_STALE_DEPENDENT — a claim with depends_on: [...] blocks if any dependency is
    superseded/inactive (mechanical belief-revision propagation; truth-maintenance).
  • residual requires a reason — tagging a front residual discharges it only when the
    claim states why it's unreachable; a reasonless residual is a silent punt and still blocks.
  • New depends_on field in the claim schema; three new behavioral fixtures (24 checks total).

Deferred

  • Saturation / state-v2 and the agent-authored round trace — Codex flagged these as the
    riskiest to mechanize and they are not what produced the win; slated for a later release.

bean 1.1.2 — bean-check robustness pass

Choose a tag to compare

@aid-ninja aid-ninja released this 15 Jun 18:27

1.1.2 — 2026-06-15

A robustness pass on bean-check from an independent cross-model (Codex) review that
re-ran against 1.1.1.

Fixed

  • A partial run.json could silently disable the evidence gate — a run.json with
    only evidence_bar.load_bearing clobbered the default recommendation tier, making it
    undefined so below-bar claims passed as ready. run.json is now deep-merged and its
    tiers validated (an invalid/missing tier falls back to the default).
  • Malformed claims no longer crash the compiler — a null entry or a non-array
    conflicts_with raised a raw TypeError; such claims are now recorded as E_SCHEMA
    and excluded.
  • The certificate is JSON-encoded over status + each admitted claim's (id, evidence, content), so ids/values can't collide via delimiters.
  • Dry-round tracks content, not just ids — an in-place revision (same id, new content)
    correctly counts as progress and increments the round.
  • budget-exceeded now takes precedence over blocked (CLI contract: exit 2 = stop),
    with the blockers still reported. --dir with no value exits 3 instead of a stack trace.

Verified

  • The three 1.1.1 fixes (symmetric conflict pairing, valid-resolver discharge, content
    certificate) were independently re-confirmed correct by the same review.

bean 1.1.1 — bean-check hardening + operating guide

Choose a tag to compare

@aid-ninja aid-ninja released this 15 Jun 18:07

1.1.1 — 2026-06-15

Hardens bean-check and its docs after a blindspot + independent cross-model review.

Fixed

  • Conflict detection was unsound — a one-directional conflicts_with link from the
    higher-lexical-id side was silently dropped (the gate exited "ready" on a real conflict).
    Pairing is now symmetric: a link from either side registers the conflict.
  • A risk or conflict could discharge itself — a resolved_by pointing at a dangling or
    self id cleared the gate. It now discharges only when it references a real, active,
    different claim.
  • The certificate now covers status + claim content, not just the id set, so two
    different ledgers no longer collide on one certificate.
  • --dir with no value exits cleanly (3) instead of a raw stack trace; duplicate ids raise
    E_DUP_ID; empty / over-budget ledgers are noted.

Added / Changed

  • New references/bean-check.md — the operating guide for the default compiler: the
    .bean/ file layout, the claim shape, a worked example, and the blocker-code → next-move
    table. Linked from SKILL.md and runtime.md.
  • Regression fixtures + tests for the asymmetric-conflict and self-discharge cases.
  • Docs: scrubbed "confidence" (a wheat-only signal) from the default-compiler descriptions;
    reframed grainulator as the optional richer backend; documented that bean-check detects
    only conflicts_with-linked conflicts.

bean 1.1.0 — bean-check, a zero-dep convergence compiler

Choose a tag to compare

@aid-ninja aid-ninja released this 15 Jun 17:38

1.1.0 — 2026-06-15

Adds bean-check — bean's own convergence compiler — so convergence is a thing that can
fail, not just a discipline you are trusted to follow.

Added

  • bin/bean-check.js — a zero-dependency, type-checked (// @ts-check + JSDoc) Node
    CLI built from the Bran-IR core. Reads .bean/claims.json (+ optional .bean/run.json)
    and exits nonzero until the loop converges: 0 ready, 1 blocked, 2 budget-exceeded.
  • Hard gates (where a single-snapshot compiler only warns): undischarged risks
    (notice→act), load-bearing claims below the evidence bar, and load-bearing abstentions all
    BLOCK; plus temporal checks — dry-round, budget, and rejected-claim reappearance.
  • Conflict resolution = evidence-driven belief revision, fail-closed. A conflict always
    blocks; when one side strictly out-evidences the other, bean-check emits a belief-revision
    hint (supersede the weaker) but never edits the ledger — the agent records the auditable
    supersede. No Schulze: bean has no voters, and Fable revises beliefs rather than holding
    elections (the Bran paper itself proves Schulze is correctness-neutral).
  • Deterministic certificate (sha256 over sorted admitted-claim ids), ported from Bran.
  • schemas/ (claim / run / result), curated test/fixtures/, and test/bean-check.test.js
    (11 behavioral checks). tsc --noEmit typechecks the JS via JSDoc; CI runs it.

Changed

  • bean-check is now the default control plane; grainulator/wheat is an optional richer
    backend. Docs updated to match.
  • Abstention is a tag (needs-input / unknown) on a normal claim, not a status —
    fixes a 1.0.1 doc bug where the named status would be rejected by the runtime.
  • Added an assess-vs-mutate boundary to the skill, and an MCP compile parse-status
    caveat (the --check nonzero exit is CLI-only).

bean 1.0.1 — sharper convergence loop

Choose a tag to compare

@aid-ninja aid-ninja released this 15 Jun 14:11

1.0.1 — 2026-06-15

Sharpens the loop with lessons drawn from documented model behavior on agentic and
self-correction tasks. No structural changes — all refinements to existing references.

  • Notice→act gate — the dominant failure isn't missing a problem, it's noticing one and
    proceeding anyway. A concern is now recorded at find-time and blocks convergence until
    it's a confirmed non-issue, a verified fix, or a named true residual. Recording is not
    resolving. (convergence.md, self-critique.md, SKILL.md)
  • Abstention is first-class — an honest unknown / needs-input is a valid claim state,
    scored as cheaper than a confident wrong answer; fabricating under missing context is the
    failure to avoid. (verify.md, runtime.md)
  • Corroborate across independent methods — verification signals correlate less than they
    seem; a load-bearing claim earns a high tier from methods that fail independently, not one
    check run twice. (verify.md)
  • Effort is a budget to allocate — pour high effort and fan-out on the one or two most
    decisive fronts; single-pass the rest. (convergence.md)
  • Persistent context beats respawn — prefer a long-lived loop over the shared ledger to a
    blocking orchestrator that re-hydrates context per step. (delegate.md, runtime.md)
  • Realism reduces gaming — brief delegated work as the real task, not as a check to pass;
    grade the final artifact, not the reasoning narration. (delegate.md, codex-blindspot.md)
  • Tool/subagent output is untrusted input — treat retrieved content and worker reports as
    claims to verify, never as instructions; quarantine injected directives. Ground before the
    first run of any side-effecting command. (verify.md)

v1.0.0

Choose a tag to compare

@aid-ninja aid-ninja released this 15 Jun 05:55

bean — a recursive convergence loop for large tasks, for Claude Code and Codex.

bean runs a task the way the Fable model worked: investigate the most decisive open front, record what you learn as typed evidence in a claim ledger, let a compiler score what's still weak or contradictory, revise the beliefs that don't hold, and loop until it converges — then deliver. It shapes the procedure a model follows, not its capability ceiling.

Highlights

  • Convergence loop, not a fixed checklist — Frame → Survey → Investigate → Record → Compile → Revise → Converged?, repeating until there's nothing decisive left to learn.
  • Runs on a runtime — a claim ledger + a compiler that scores convergence. grainulator/wheat is the primary runtime; a minimal built-in ledger (bean-stalk.md) is the fallback for Codex and bare installs.
  • Belief revision is first-class — including respectfully revising the user's stated beliefs when grounded evidence contradicts them (counter-sycophancy).
  • Ground before you assert; verify by running or rendering — read the source / run the test / render the artifact; "looks right" is not a check.
  • Persistence with proportion — drive every open front to a confirmed non-issue, a verified fix, or a true residual; but don't over-engineer trivial tasks or refuse to ask the human when asking is cheaper.
  • Cross-model Codex blindspot lane for independent verification on high-stakes work.
  • Dual packaging — Claude Code (.claude-plugin/) and Codex (.codex-plugin/), plus install.sh. /bean in both.

Install

claude plugin marketplace add https://github.com/grainulation/bean.git
claude plugin install bean

Doc-only (Markdown + JSON), no runtime dependencies. MIT. Verified by a structural smoke test (manifests, frontmatter, link resolution) and CI on Node 20 + 22.