Collegium

Changelog

What each release changed, written from the commits it shipped.

0.0.1-beta.30 (2026-09-28)

Features

  • inference: let an openrouter model name the upstreams to prefer, in order (888e0a6)
  • tasks: record the state every unit closed from and what closed it (cf374c9)
  • turns: let a unit post end the turn when the call asks to and nothing is owed (1bca705)

Bug Fixes

  • conversations: hide an agent’s own actions up to the moment of its reset (af55fc0)
  • memory: say a missing memory may have been deleted, not only that it may be another agent’s (78d0e42)
  • tasks: stop a close result asking for a reply (160680f)
  • tools: state argument size limits in descriptions, so no provider cuts a value to fit (cbcc5f3)
  • turns: always show the newest pinned post whole, even over the pinned-posts cap (80291ea)
  • web: list every visible form control on a snapshot before the hidden ones (ac0506d)
  • web: say a browser action that timed out in plain words, and refuse a fill on a drop-down (1f3413f)
  • web: stop pointing a whole snapshot’s overflowing controls at a reference it lacks (af5ae1e)

0.0.1-beta.29 (2026-09-26)

Features

  • activation: queue each post a turn answers, and fold a person’s repeated mention into it (77b6073)
  • conversations: record work-unit posts as a kind of their own, which search finds (2199e35)
  • runtime: run again the turns a restart cut off before they had any effect (762ece0)
  • tasks: let done mean not abandoned, close a blocked unit done, and follow a unit closed done (8d3446c)
  • turns: let a hand-off end with no reply where none is owed, and remind a creator of a verdict (3fca99c)
  • turns: tell each turn the posts it answers, its channel, and where its last turn ended (8595229)

0.0.1-beta.28 (2026-09-25)

⚠ BREAKING CHANGES

  • release: a long tool result is no longer cut at the turn’s ceiling. It is shown as a view of its first part, and the rest is read with results::read. Saved advice that quotes the old cut marker, or that says to narrow a call because its result was cut, is stale.
  • release: a tool post, such as a unit’s assignment, now keeps its author’s own @ handle. A saved entry that copied an order’s bare author name, without the @, is stale.
  • release: web::fetch no longer refuses a find given startChar or maxChars; a find always searches the whole page. maxChars now takes any width up to 118,000 characters. Saved advice about the old refusal, or about the old 1,000-character minimum window, is stale.

docs

  • release: name what beta.28 makes stale in an agent’s saved procedure (4b9319c)

Features

  • memory: say which read a refused revision needs, and let replace change a description alone (8965440)
  • tools: state refused sizes, name ignored arguments, mark unrun calls, offer only granted tools (3267ef7)
  • turns: give every completion a time limit, and let a steer abort the completion in flight (da03d60)
  • turns: keep every tool result as a record, show long ones as views, read on with results::read (56922ed)
  • turns: record each completion’s cost and upstream, and keep what an abandoned turn spent (4e55a5e)
  • web: search the whole page on a find, show shared text once, and word timeouts and empty pages (18eb06f)
  • web: show browser snapshots as views read on by reference, list drop-downs once, await redraws (cb729f0)

Bug Fixes

  • channels: keep a tool post’s own author @ when stripping other agents’ mentions (e50d707)
  • mail: fail the call, not the process, when an imap connection errors mid-session (f1be408)

Performance

  • conversations: walk a fresh window to the low-water mark, so a restart moves its prefix once (2896469)

0.0.1-beta.27 (2026-09-23)

Features

  • agents: name agents by a display name in prose, and only @ the one addressed (fc303fd)
  • memory: state an agent’s memory caps and privacy in its prompt, and count its memories (916b8f5)
  • notifications: name agents in system-bot notices by their display name (5a9dc36)
  • sdk: let plugin tools read the work units their agent is party to (3ca69b0)
  • tasks: continue a reported unit with tasks::assign follows, and name the way on (04f1eba)
  • tasks: let an agent’s settings name the colleagues it may assign to (7943411)
  • tasks: refuse closing a unit its assignee is still working or whose report was not read (16b47a2)
  • tasks: show a unit’s report in tasks::read, and where the other party to it stands (5fa85e2)
  • triggers: carry out a schedule’s text as the operator’s order, and resolve without an id (c6853d6)
  • triggers: tell agents a schedule’s text is an instruction, and how to resolve an item (c9a2932)
  • turns: head each trace with why the turn started, what it read and what it cost (79a984b)
  • turns: name the work unit and colleague behind a delegated approval or question (177912d)
  • turns: name who denied an action, and the work unit a stopped turn leaves assigned (69f86fe)
  • turns: say on the status post when a turn waits on a person, and list pending questions (2b7e7e2)
  • turns: say when to load a skill and that a load lasts one turn (73a5fd5)
  • turns: show the posts pinned in a channel to every agent there as standing instructions (93d3660)
  • turns: tag people by @username, and list the people who posted in a channel (f7cca8e)
  • turns: tell each turn today’s date, in the operator’s timezone (8f2170c)

Bug Fixes

  • activation: answer a person’s post queued behind a colleague’s as their own request (c7b0e8f)
  • activation: recompute a restart’s hand-offs as the running turn holds them, and count them (f3d4128)
  • conversations: keep a pin from restoring a post a channel clear removed (fecd675)
  • mail: describe a mail ref so the model never passes a trigger id for one (a4e4fe4)
  • tasks: report only the unit an exhausted turn was working, and name colleagues in refusals (99cac4c)
  • turns: say where a cut page reads on from, and refuse only replies that really hold no prose (fc99028)
  • turns: send back once a worker’s reply that leaves its unit assigned and reaches nobody (04aa9d7)
  • web: keep an email address in a link as its owner wrote it (d4306d2)
  • web: parse what the browser hands back to the session’s own scripts (b80dd61)
  • web: read each PDF in a child process killed past a memory cap (10a13cc)
  • web: report the browser’s URL-policy refusals as refusals, not dead hosts (4a5d107)
  • web: say where to read on when a fetched page is cut to fit a turn (d4d58ae)
  • web: send only an agent that holds web::navigate to the browser (df0a93b)
  • web: stop calling a PDF scanned when its read stopped short (95064d4)

Performance

  • conversations: stop writing to the store for every edit of an unpinned post (da7da40)

Refactoring

  • commands: read the queue, units and trace reports one layer behind their handlers (fc1b123)
  • turns: split the turn prompt into one file per section and topic (73a5b0a)
  • web: split page conversion, reading and result rendering apart (299dcd1)

0.0.1-beta.26 (2026-09-23)

Features

  • activation: start a colleague once the turn that addressed it ends or parks (0be2962)
  • approvals: lead an ask prompt with the agent’s own reason for asking (2887b2a)
  • approvals: name the denial a re-requested call follows (86e10f3)
  • approvals: name the person behind a colleague’s relay and the trigger behind a system post (fbd95e8)
  • commands: show whether a turn is running in /collegium queue (a0e4637)
  • commands: steer one named agent’s turn, and refuse a steer that would reach several (daee5f4)
  • config: bound what one turn may accumulate with a declared turnContextCeilingTokens (19d8d4a)
  • conversations: bound each search hit and read one post whole by id (ce3c620)
  • memory: render a memory’s written-at date beside its age when read (bdf0d28)
  • memory: revise a memory in place under the reference it was written with (a8aaf2c)
  • memory: rewrite or re-describe a memory in one step, and report its size and evictions (351d175)
  • shell: let the shell user read its own workspace, and probe that at boot (f161fb6)
  • skills: add round 3 of the live benchmark: delegation, mail, triggers, commands, concurrency (ed1a27d)
  • tools: derive the effects line from a mutating flag rather than retryable (a5c38e4)
  • turns: answer a page that repeats one already read at another address with one line (5ed6c24)
  • turns: drop the effects line from the status post (8913ac1)
  • turns: give a long tool-less turn a status post, and name who stopped or killed a turn (efacf97)
  • turns: redraft the preamble and baseline for identity, folding, drains, mail and triggers (e48fdfb)
  • turns: redraft the reply rule and fund the preamble within its budget (e343cd5)
  • web: choose an option in a drop-down with web::select (c569ed1)
  • web: find phrases in a fetched page, and read 30k characters of it by default (48175fd)
  • web: leave a fetched page’s navigation, header and footer out unless asked for (6b7e09c)
  • web: let the operator close hosts to the web toolset with web.deniedHosts (e419f25)
  • web: mark a failed web call and name the page a click landed on (df32e74)
  • web: read a page by window length or from its end, and say where a page ends (f0f2b7a)
  • web: read a PDF’s text layer with web::fetch (f50deba)
  • web: read email addresses Cloudflare cloaks on a fetched page (0acf7ad)
  • web: report a site’s refusal, a failed certificate and a missing page as what they are (02de07c)
  • web: retry a rate-limited fetch once when the wait fits, and say so in the result (ca012f5)
  • web: say why the browser is busy and what still works, and make the session cap a setting (7d2fd5e)
  • web: ship a web::reading-websites skill an operator can grant to agents that browse (ba22777)
  • web: show an image on a web page as its alt text alone (9d481b4)

Bug Fixes

  • activation: fold only a post addressing nobody, and requote the newest fragment after a fold (7e11a30)
  • approvals: record an approval or ask prompt as the turn’s own notice (339fb3d)
  • ask: say when to omit options and when to say a list is partial (d32af2d)
  • context: charge the window for what it sends and stop replaying earlier turns’ reasoning (f7c075a)
  • notifications: narrow a stall event before reading its agent, and settle lint’s ordering (a90d920)
  • notifications: post a DM’s interrupt and stall notices under the agent’s account (16a2940)
  • shell: keep the first line’s indentation when trimming a captured stream (0f7b0b9)
  • skills: harden the live-benchmark driver and refresh its stale tasks after run 2 (f114303)
  • skills: let the mail-injection task accept a memory that carries no canary (91b96d8)
  • skills: refuse a blank reference at the perimeter and quote it in the trace (e8c89c9)
  • skills: rewrite the round-3 pass clauses a correct agent could not satisfy (aefe449)
  • tools: say what search, tasks and mail results leave out, and count what they hold (bfc7f5e)
  • turns: close a window ending on the agent’s own turn so a drained turn starts a new message (548098e)
  • turns: drop the effect detail from a call the gate did not run (bc605f4)
  • turns: say in the preamble that a long search hit is cut and readable whole by id (9a7011f)
  • turns: say in the preamble that text beside an ask reaches the person asked (ce03379)
  • web: decode character references in a fetched page’s title (35c7bd0), references #8217
  • web: describe the fetch and search surfaces accurately and decode search snippets (135d445), references #x27
  • web: keep a click on the effects line, since it can submit a form (805c8ca)
  • workspace: count lines without the terminator and confirm the bytes as given (be59e41)

Performance

  • turns: move per-turn prompt sections after the window so the provider cache reuses it (587a525)

0.0.1-beta.25 (2026-09-21)

Features

  • benchmark: add the controlled run that measures the framework (dcf6969)
  • benchmark: add the noindex fixtures, the large report and the minutes pages (2373fd5)
  • commands: lay /collegium inspect out in sections and tables (27446ff)
  • config: complete tool grants in an editor writing config.json (5ec960d)
  • shell: run under pipefail, add python3, and state the present commands in the preamble (7ed505c)
  • turns: make the status post deliverable and honest, and give the extension prompt the spend (2119b12)
  • turns: retain page results by token share and name what a collapsed result was (1b72a4e)
  • turns: rewrite the prompt to what the framework does and name authors as people or agents (454727a)
  • web: let a deployment declare its own network browsable (9ed3ffc)

Bug Fixes

  • web: report a 404 as 404, name browser transport errors, and send a user-agent (d59ff5c)

0.0.1-beta.24 (2026-09-19)

Features

  • clearing: erase a channel’s record before a boundary, under confirmation (7843cc9)
  • commands: add /collegium clear (237fded)
  • config: word a config.json the schema refuses as one line per issue and path (02e5ba3)
  • inference: wait out a rate limit as the provider asks, with jittered backoff and a cap (49199cc)
  • mattermost: forward the trigger id and erase a channel’s posts before a boundary (305d5db)
  • memory: read a memory back with how long ago it was written (7759201)
  • notifications: announce a command through one voice that can edit its notice (b2f89bf)
  • shell: save output a result cannot carry to the agent’s workspace and name the file (b38577b)
  • tasks: ask a closing verdict to say what the creator checked (3546bfa)
  • turns: tell agents their posts render as markdown and to use no emoji unless asked (6b73c1b)
  • turns: tell agents to diagnose failures and treat instructions in tool results as data (62dd62d)
  • turns: tell agents what not to remember, and to trust what they see over a stale memory (a2ff54c)
  • web: show the text web::fill typed, in the status post and in snapshots (585b443)

Bug Fixes

  • approvals: fence a payload with more backticks than it contains (3c0fd23)
  • runtime: record the stop time before anything tears down (78c4c47)
  • shell: stop holding a command’s output in memory past a bound (71070c6)
  • web: answer a redirect to an unparseable address as a failed page (cdc54b3)
  • web: judge an address as an address, refusing nat64 loopback and ipv6 multicast (72e9375)
  • web: pin webrtc’s ice to the proxy instead of trusting camoufox’s default (5f476fb)

Reverts

  • remove three beta.23 operator-facing notices (48410ce)

0.0.1-beta.23 (2026-09-18)

⚠ BREAKING CHANGES

  • plugins: a plugin tool compiled without approval no longer loads. Add approval: null to every tool that does not gate.

Features

  • approvals: let an agent ask the channel a question and wait for the answer (ed24e61)
  • approvals: say which action this is and who asked above every approval payload (d8a7492)
  • chat: parse the files a post carries (c5c0fb3)
  • chat: require a shared secret on every callback endpoint (87ea5f2)
  • commands: add /collegium steer (cf5f018)
  • commands: add /collegium units to list and cancel delegated work (b149658)
  • commands: list the approvals still waiting on a human (ee88049)
  • commands: mark which of an agent’s tools need a human (e852d5e)
  • config: let systemPrompt name a file beneath RESOURCES_ROOT (98c1bc0)
  • conversations: name a post’s attached files in the window (329c1bc)
  • inference: classify a length rejection as a context overflow (b94d409)
  • inference: surface a call with unparseable arguments instead of failing the completion (001a559)
  • memory: evict the least recently used entry rather than the oldest written (8b2131f)
  • memory: record when an entry’s body was last read (9ac8763)
  • runtime: verify provider credentials at boot (258e2d5)
  • schedules: declare recurring work in config and announce it as a trigger (3d1cb90)
  • skills: add the understanding-collegium core skill (91c0dee)
  • skills: declare the tools a skill needs and refuse an uncovered grant at boot (e456cd1)
  • skills: let a skill ship reference documents beside its procedure (ebd52f9)
  • tasks: record delegated work as units whose every state change is a post (e5a99f4)
  • tools: let a framework tool return a post the runner publishes (fe66889)
  • turns: bound a turn to one addressed peer across every post it emits (79b07c5)
  • turns: count a chain by its root and refuse the turn past the limit at admission (bf834b3)
  • turns: forgive one tool call with unparseable arguments per turn (de6efd9)
  • turns: let a running turn take steering from a human (a9b9753)
  • turns: list the agent’s own earlier actions past the window in the prompt (50a9f6d)
  • turns: name the agent’s directories in the preamble (0035985)
  • turns: record the post every chain descends from on each turn (78db7dd)
  • turns: retire stale pages under context pressure and stop when they run out (032a162)
  • turns: state how long a turn ran on the status post’s closing line (6098426)
  • workspace: read the workspace with typed, ungated tools (9e8fa9e)

Bug Fixes

  • activation: drop a peer mention the chain limit refused rather than re-queue it (c6eb387)
  • approvals: strip peer mentions from a question and an approval payload before posting (3fbb043)
  • commands: report a cancellation that did not post and hint at no approval elsewhere (a63a3b1)
  • memory: rebuild the memory table so the migration applies to a store with rows (aff9c3c)
  • runtime: close abandoned status posts and measure downtime against the process (6428618)
  • skills: refuse a skill directory no name list declares (ceba454)
  • skills: refuse a skill outside the acting agent’s manifest (6ec1e94)
  • turns: end a turn after two consecutive rejected posts (0a2935f)
  • turns: import the agents module the prompt renderer now needs (ee5af87)
  • turns: keep unread results verbatim and name a colleague that asked (6518030)
  • turns: let a tool post mention only the peer it addresses (05e657d)
  • turns: name the class of a provider rejection by its status code (5032bc0)
  • turns: reject a leaked tool call written as text (de44b7b)
  • web: answer a non-http proxy request with 400 instead of crashing the process (f192700)
  • web: resolve and pin every address the web tools open (7df163f)
  • workspace: skip symlinks and stop a grep pattern that outruns its budget (bf0a4a6)

Refactoring

  • core: move the token estimate behind one seam (b2bebe0)
  • plugins: require a plugin tool to state whether it gates (d911941)
  • turns: render memory writes and deletes as ordinary tool-call lines (b3d6af7)

0.0.1-beta.22 (2026-09-16)

Features

  • inference: stream completions under an idle timeout and take a reasoning effort per model (2b8961e)
  • models: offer the openai, anthropic, glm and deepseek models openrouter serves (273f6df)

Performance

  • conversations: anchor the window’s oldest entry, page the walk, and drop peers’ status posts (7c9f4d2)
  • inference: enable and optimize prompt caching across supported models (33474e2)
  • turns: run concurrent reads together, retire stale page results, and coalesce status edits (f04d2a0)

0.0.1-beta.21 (2026-09-16)

Features

  • models: offer the openai, anthropic, glm and deepseek models openrouter serves (273f6df)

Performance

  • inference: enable and optimize prompt caching across supported models (33474e2)

0.0.1-beta.20 (2026-09-16)

Features

  • commands: add queue clear to discard a standing queue entry (3239b0d)
  • tools: resolve a granted tool named in its display form (0de06d9)
  • usage: report what each turn cost in the usage command (5f4346e)

Bug Fixes

  • models: name openrouter’s deepseek models by their provider slugs (ab6e97e)

0.0.1-beta.19 (2026-09-15)

Bug Fixes

  • tools: read matched storage rows back in batches under sqlite’s bind limit (6ce696f)

0.0.1-beta.18 (2026-09-15)

Features

  • turns: return mentions to the delegator’s depth, cap chain length, and budget per agent (6811363)

0.0.1-beta.17 (2026-09-15)

Bug Fixes

  • inference: name the transport cause in the outage notice and log (8c39738)

0.0.1-beta.16 (2026-09-14)

⚠ BREAKING CHANGES

  • compose: MATTERMOST_URL is renamed MATTERMOST_LOCAL_URL, and a deployment running the bundled Mattermost must set MATTERMOST_PUBLIC_URL to the exact address it is opened at.

Features

  • compose: require the address the bundled mattermost is opened at (b9604ba)

0.0.1-beta.15 (2026-09-14)

Features

  • channels: hold full membership per channel and answer which channels a search may reach (36c453d)
  • chat: describe channels and deliver membership events for every user (e9be455)
  • conversations: add the conversations::search toolset (17a5690)
  • conversations: record what kind of post a turn authored and search the agent’s own replies (71a05e8)
  • turns: state what conversations::search reaches in the preamble (30477a5)

Bug Fixes

  • conversations: omit the searching agent’s own posts from search results (3dff7a6)

0.0.1-beta.14 (2026-09-14)

0.0.1-beta.13 (2026-09-13)

Features

  • commands: add usage command with cached and reasoning token counts (0a2558b)
  • web: add web::search backed by brave search (f184f14)

0.0.1-beta.12 (2026-09-10)

Features

  • agents: add a shared behavioral baseline (647551f)
  • agents: add selectable personalities injected into the system prompt (e3e24fe)
  • commands: replace prompt with inspect (04624c4)
  • commands: show a memory body from the channel (c505718)
  • config: raise default action budget to 25 and hourly ceiling to 500 (49cdf31)
  • memory: let an agent forget one of its memories (c122325)
  • turns: persist reasoning and replay history in native form (dc2207d)
  • turns: replay a tool result by the text the tool names for history (e422151)
  • turns: state the context limit, resumption, and skill loading in the preamble (ff05414)
  • web: add hover and mark the refs CSS hides (7063d65)
  • web: follow a tab the page opens into the session (565fa7e)
  • web: report a tab the page opens instead of following it (6a26165)
  • web: resolve link and image addresses against the page (f7a584d)

Bug Fixes

  • activation: leave the queue standing after a failed exit (68f49f0)
  • commands: import the modules the inspect handler depends on (b54076f)
  • turns: describe the budget extension flow as the runner performs it (d92d386)

Refactoring

  • memory: name the delete tool’s vocabulary after delete rather than forget (973ad5c)
  • move system prompt into context.constants.ts (b15dceb)
  • turns: render the system prompt through a class backed by a text formatter (0dbba91)

0.0.1-beta.11 (2026-09-09)

Features

  • hold /collegium in a Mattermost plugin and declare its subcommands at boot
  • accept a post permalink in /collegium forget and /collegium trace
  • add the framework preamble and the builtins::now core tool
  • read mentions with Mattermost’s grammar, replay reasoning within a turn, and reject transcribed tool calls

Bug Fixes

  • give the image the root certificates Go reads

Refactoring

  • derive the command surface from one wire type and read server settings once
  • render the preamble from a template constant