Skip to content

v0.3.0

Choose a tag to compare

@ka-bear ka-bear released this 17 Sep 02:19
· 204 commits to main since this release

[0.3.0] - 2026-09-17

Added

  • Three modes: full auto, ask before compute, structured. --mode,
    OPENREYNOLDS_MODE, the config file's mode, or /mode <name> mid-session
    (openreynolds/modes.py). auto is the default and is today's behaviour byte for
    byte: the briefing is unchanged and no tool call is ever held. partial puts every
    job_start and mesh call to the person before it runs (/yes, /no [reason],
    /all), and a declined call goes back to the model as an error result carrying the
    person's reason verbatim. structured offers a checkpoint tool that shows the
    person a summary and what comes next and waits for their answer, and holds
    job_start and mesh until a checkpoint has been approved since the mode began.
    Its stage names are the guided pipeline's own phases (toolbox/study_state.py).
    The question and its answer live in openreynolds/approval.py; the one place a call
    is held is Loop._consult. A resumed study keeps its mode unless one is given.
    -p with a non-auto mode is a usage error (exit 2), because nobody is there to
    answer.
  • Change the model or effort mid-study. /model shows the provider, model, effort,
    mode and the models this provider is known to have; /model <model>,
    /model <provider>:<model> and /model <provider> switch
    (openreynolds/switch.py). A candidate is probed, image included, before it is
    accepted, and applied only between turns. Earlier thinking blocks are dropped when
    the model changes, and a thread too big for the new model's window (known per model
    where it differs from the preset's, as for claude-haiku-4-5) is refreshed on the
    current model first. /effort low|medium|high applies from the next request, and
    --effort sets it at the start. The mesh desk and the front desk follow the switch.
    A resumed study carries on on the model it was last running: session.json now
    records the provider and the endpoint beside the model, and --study <id> restores
    the record unless --model or OPENREYNOLDS_MODEL names a model, or this machine
    cannot serve it -- in which case the configured model runs and the session says why.
    Serving it means a key for the recorded provider here, switching provider if the
    record says another one (it brings that provider's key, endpoint, window and desk
    model with it), and on the configured provider the same endpoint as well, because a
    gateway or router in front of one family answers to other vendors' ids and a pair
    restored across endpoints fails a turn later with the vendor's 400. A study that
    recorded no provider or no endpoint is refused rather than guessed at, and starts as
    it did before. A refused restore does not rewrite the study's record: the run that
    cannot serve the pair is the last one that should forget it, and the next resume
    where the key is set carries on there. The record is the local session.json, so a
    study resumed where it has never run starts on the configured model, and
    OPENREYNOLDS_PROVIDER on its own does not hold a resume to that provider.
  • /help with topics. /help commands, /help modes, /help model,
    /help tools and /help keys. Every command lives in one registry,
    commands.COMMANDS, which the parser, the help text, the terminal's completion and
    the hosted app's suggestion list are all read from.
  • Completion in the interface. Typing / in the prompt opens a list of matching
    commands above it with a grey completion in the prompt itself; Up and Down move,
    Tab takes the suggestion, Esc closes the list. After /mode , /model , /effort
    and /help the list offers that command's choices. The session bar shows model,
    effort, provider and mode.
  • New stream events. approval, approval_done, model and mode on
    --output-format stream-json. A question is answered by sending /yes, /no ... or
    /all as an ordinary user line.
  • The moving-mesh benchmarks are in the repository. benchmarks/moving_mesh/
    carries the two prompts run end to end on 2026-09-12 -- a cyclicAMI sliding
    interface through a circular-Couette annulus, and a cylinder on a spring free to move
    at Re = 100 -- and grade.py, which grades a rerun the same way. What was graded
    lived outside this repository, so nobody could reproduce it. The grader reads only
    raw solver output and never the run's own analysis, because grading those two by hand