Repository navigation
Raven 0.2.6 is a patch release. This release changes how a long conversation stays inside the model's context window: the new compacting history strategy is the default, and the previous Curator is one setting away. It also reads portable Agent Plugins packages, strengthens multi-task management, ships the EverOS Cloud memory plugin with Raven, and falls back to mirrors when a download host cannot be reached. MiniMax image and video, Keenable as a keyless web search and the Opper gateway join the model and provider choices.
Review the upgrade notes: the context history default and its reply budget change, the Claude Code, Codex and Pi adapter pins move, Shift+Enter and Ctrl+Shift keys change in the TUI on native Windows, Raven's own ACP server reports a running cost total, and a playbook route that names an undeclared param is refused.
Highlights
Compacting context history
context.history.strategy now defaults to compacting. A long session is kept verbatim until the window nears a trigger that scales with its size; then large tool results are shortened to a one-line record, older messages are dropped, and past that a summary is written that survives a restart. Set context.history.strategy to "curator" to restore the previous behaviour (#1031).
-
Read a shortened result back: the new
context_retrievetool reads a shortened tool result in full, and runs without asking. Tool results are kept up tocontext.toolResultMaxChars(default 1,000,000 characters, previously 16,000), so session files grow. Copies that leave the session -- thesession.resumetranscript, a memory backend's turn and the consolidator's prompt -- carry at most 16,000 characters of each result, and the model reads the rest back withcontext_retrieve(#1031). -
Memory and skills move: recalled memory and routed skills now go at the end of the turn's user message instead of the system prompt (
context.cache.turnScratch, defaulttrue), which keeps the cached system prompt stable (#1031). -
A reply budget beside the prompt: a request near the window asks for no more reply than fits beside its prompt, never below
context.headroom.minTokens(4,096), so a reply near the window can be shorter (#1031). -
A stable context ring: the web composer's context ring shows the same number after a reload or a conversation switch as it did when the turn finished, read from the window the last model call measured. Conversations from before the upgrade keep the old estimate until their next reply (#1119).
-
Tuning and rollback:
context.history.compacting.summary.mode = "off"keeps the fold and writes no model summary,context.history.compacting.prune.enabled = falseturns the one-line tool records off, andcontext.cache.turnScratch = falsereturns memory and skills to the system prompt (#1031).
Agent Plugins packages
Raven reads portable Agent Plugins 1.0 packages: a directory with a plugin.json, plus optional skills/ and mcp.json (#1110).
-
raven agent-plugins list | inspect | import | remove | check(each with--json) validates a package and imports its skills into<workspace>/skills/<package>/. The import is tracked inagent-plugins.jsonin the Raven home, soremovedeletes only what was imported andcheckreports a package that changed since. Imported skills lose theiralwaysflag, and a skill onskillForge.blocklistor one whose body points at another product's home is refused (#1110). -
List package locations in
agentPlugins.packagesand opt-outs inagentPlugins.disabled. A package's MCP servers start only for packages named inagentPlugins.mcpPackages(empty by default); they appear as<package>__<server>, run from the package root withPLUGIN_ROOTandPLUGIN_DATAset, and MCP server entries gain acwdfield. A package server never replaces an operator-configured one: a name collision is reported and the host's entry wins (#1110).
Multi-task management
Raven often works on several tasks at once, and each result comes back as its own turn. This release keeps the decisions from those tasks in the conversation and gives every task a section of its own in a reply (#1050, #1070).
-
Open decisions stay open: when you settle only some of the questions Raven put to you, it acts on those and ends each later reply with the decisions still open, one line each, until you make, drop or postpone them. The reminder rides on every dispatch receipt (#1050, #1070).
-
One section per task: a reply that covers more than one task gives each task its own
### <task>heading, even when the section is one sentence, and the open decisions stay one list after the last section. A channel that does not render Markdown shows the headings literally; WeChat is one (#1050, #1070).
EverOS Cloud memory plugin ships with Raven
- The
everos-cloud-memoryplugin now installs with Raven and is kept byraven upgrade: the release plugin list, both install scripts and the Docker image default all carry it. It stays inactive untilmemory.backendis set toeveros-cloud, andraven onboardnow asks which memory backend to use. This closes the 0.2.5 limitation where a manually installed copy did not survive the next upgrade (#1030).
Downloads fall back to mirrors
-
When a download host cannot be reached at all,
install.sh,install.ps1,raven upgrade,raven resourcesand theuvx/npxlaunches of ACP agents, CLI agents and MCP servers fall back to a mirror (hf-mirror.com, jsDelivr, the Tsinghua PyPI mirror, npmmirror) and print a warning when they do. An HTTP error from the default host stays final, a host you chose yourself (such asHF_ENDPOINT, a uv index or an npm registry) is never replaced, andRAVEN_NO_MIRROR=1turns the fallback off. Raven's own release files on GitHub have no mirror (#1053). -
The installers also fetch uv itself, Python and Node from their mirrors, retry Chromium through npmmirror, and take the macOS LibreOffice dmg and the Linux CJK font from theirs. The LibreOffice dmg and the CJK font are the exceptions to the warning and HTTP-error rules above: they try their mirror after any failure, including an HTTP error, and do so quietly because their contents are pinned by digest.
install.ps1now runs uv's installer in a Windows PowerShell child, so a failed download no longer ends the whole install (#1053). -
Installing the Raven node on a registered machine first times that machine's package index. If it cannot be reached or serves slower than 256 KB/s, the install uses the faster of the Tsinghua and Alibaba Cloud PyPI mirrors and falls back to the machine's own index; the printed plan names the mirror and why.
RAVEN_NO_MIRROR=1on the computer running Raven turns this off. A step that runs out of time says it did not finish within 15 minutes, and the Machines tab keeps polling until the install ends (#1068). Agents started on a registered machine make the same mirror choice on that machine (#1053). -
The first connect to an npx-launched agent (the Claude Code, Codex and Pi presets) downloads the adapter before the handshake starts, so a slow first download no longer times out and leaves npm's cache broken with
exit 254on every later connect. If an entry is already broken, the connect, Test and verify errors give the command to remove it,npm cache npx rm <key>. An agent on a registered machine is started by that machine's Raven node, which prefetches nothing, so its first connect there still downloads inside the handshake (#1089).
For Windows users: Shift+Enter no longer inserts a newline through extended keys, Windows Terminal may submit instead, and Ctrl+Shift+ keys are no longer distinguishable in the TUI. raven upgrade still starts a separate helper; wait for its completion message before restarting Raven. After installing or upgrading, run raven resources once if you have not run it since 0.2.5.
Upgrade notes
-
Breaking - context history:
context.history.strategynow defaults tocompacting. Recalled memory and skills move from the system prompt to the end of the user message (context.cache.turnScratch, defaulttrue), tool results are kept up to 1,000,000 characters instead of 16,000, a near-window request asks for no more reply than fits beside its prompt (never below 4,096), and acontext_retrievetool appears on every default tool face. Copies that leave the session carry at most 16,000 characters of each tool result; the model reads the rest back withcontext_retrieve. Setcontext.history.strategyto"curator"for the previous behaviour, or tune the new strategy withcontext.history.compacting.summary.mode = "off"andcontext.history.compacting.prune.enabled = false(#1031). -
Breaking - agent adapter pins: the Claude Code, Codex and Pi presets launch
@agentclientprotocol/claude-agent-acp@0.94.0,@agentclientprotocol/codex-acp@2.2.2andpi-acp@0.0.34. Rows still on the previous stock commands move to them at the next start, which downloads the new adapters; edited commands are left alone. A Pi row moves only when the localpiis 0.81.0 or newer; otherwise it stays on 0.0.33 and a one-time notice givesnpm install -g @earendil-works/pi-coding-agent@latest. A row on a registered machine stays on 0.0.33, and a row the migration kept is moved by hand after pi is upgraded: change its command tonpx -y pi-acp@0.0.34(#1090). -
Breaking - TUI keys on native Windows: Shift+Enter no longer inserts a newline through extended keys; Alt+Enter, Ctrl+Enter and Ctrl+J still do, Windows Terminal may submit instead, and the VS Code terminal setup still sends Shift+Enter itself.
Ctrl+Shift+<letter>is no longer distinguishable on native Windows. In return, typing with a Chinese IME no longer doubles characters, and leaving with Ctrl+C no longer draws the last frame over the shell prompt. WSL is unchanged (#1095). -
Breaking - ACP server usage: Raven's own ACP server sends the session's running total in
usage_update.costinstead of the last turn's cost, and answersstopReason: max_turn_requestsfor a turn its own budget ended. Third-party ACP agents' turns are now counted under the delegating conversation: claude-agent-acp turns book both token counts and cost; codex-acp sends no cost, so its turns book counts and an unknown cost, and spend does not rise for them (#1121). -
Breaking - playbook route params:
${params.X}in a decision node's route condition is filled in before the condition is judged, with secret params withheld as in prompts. A playbook whose route names an undeclared param now fails validation and drops out of the library when it is saved or loaded (#1058, #1064). -
No command, flag or config key is removed.
Other improvements and fixes
Agents and sub-agents
-
A sub-agent or DAG node whose reply is blank is no longer recorded as completed with an empty answer: it is asked once more, and if it answers nothing again the run fails saying its reply was empty. In a direct chat, an answer the backend had to wait for -- the wrap-up after a blank reply or after the rounds run out, or the one it asks again for after a cut stream -- now streams like any other reply; before, it was recorded but never shown (#1047).
-
A sub-agent turn that its own budget cut short (tool-call cap, wall clock or a stalled tool) is reported as partial instead of finished, a GitHub Copilot run whose reply is a provider refusal fails instead of returning the refusal as its result, and a reply after a lost session resume carries a
[raven]note (#1121). -
An ACP agent's model picker is refreshed from the reply to each dispatch, so its card stops offering models the agent no longer serves (#1038). On the agents page, picking a model for a third-party agent you have not connected yet no longer fails; the pick is sent with the connect (#1098).
-
The
<agent>-Mirasimpresets connect again to Mirasim hosts from 0.0.571 on, which had refused them with a 401, and a token the host turns away is reported as a Mirasim token problem with "Start Mirasim again" as the fix (#1039). The presets no longer read as Not installed on a computer that has Mirasim: a row is checked as soon as a Mirasim host is running, and when Mirasim is installed but no host is running it says to open the Mirasim app (#1040). -
An on-call campaign driven over ACP returns its result when its last wake turn schedules no further wake, instead of holding the prompt open indefinitely (#1011).
-
When the agent asks for a
local/skill id that does not exist, the error lists up to three close ids and the directories local skills come from (the agent'sskills/folder, eachskillForge.localDirsentry, then the built-in skills) (#1051).
Sub-agent runs in the trajectory
-
In the web UI's Trajectory view, each sub-agent run opens in its own closable tab: the main tab lists only the main session, and a run's tab lists that run's steps with its agent, task, state, duration and dispatching turn. Open a run by double-clicking its entry, pressing Enter on it, or using Open trajectory in the details pane; Show in main leads back. A tab is marked while its run is running, failed or was cancelled (#1100, #1096).
-
A spawned sub-agent shows as running from the moment it starts, and its entry shows how it ended: a failed or safety-aborted run is an error, a cancelled run is cancelled, and a run left on a registered machine is unknown. Previously the entry appeared only after the run finished and always read as successful (#1091).
-
Each attempt of a DAG node has its own entry, with the node's steps grouped under it, so nodes running side by side are no longer mixed together. A re-run after its judge's follow-up gets a new entry, and an attempt that did not complete -- failed, waiting on a decision, or sent back by its judge -- is an error span (#1094).
-
After a sub-agent reports into an idle conversation, your next message is no longer drawn as a sub-agent turn and appears again in the export and bug-report turn picker. A report that arrives while a turn is running now carries that turn's dispatch link, so it is exported with the turn that dispatched it instead of being listed on its own, and a report turn acts in the session's own browser tab rather than the finished run's (#1071).
Playbooks and DAGs
-
When a stuck DAG node is continued with a message that changes what it should deliver, its later attempts are judged against that message as well as the original prompt, and a node with no conversation of its own gets every continue message on its next attempt, oldest first (#1024, #1084).
-
In the web UI, a DAG node row waiting on a decision opens to what the node returned, up to 20,000 characters, with a separate notice when it was cut; an expanded delivery scrolls inside a box at most half the window tall and accepts keyboard focus. A node that has already failed reads "Failed"; the web UI reads a running or cancelled node as "Still running" or "Stopped" instead of "Finished", and the TUI labels a stall notice "Still running" in live and replayed rows (#1063, #1081).
-
Hand-written playbooks with route names such as
yes,no,on,off,true,falseor a bare number now load instead of dropping out of the library, andraven playbook validatereports a YAML syntax error as a finding instead of a traceback. Generating a DAG playbook can now produce a branch: the generator's instructions describe a decision node (routes,select) and the rule that a node depending on one names it in itswhen. On the tasks board, a decision node's chosen route stays visible on a crowded card (#1064). -
The TUI's DAG panel no longer shows a
0sduration for a node that was skipped, and skipped nodes no longer stretch the run's total time (#1056).
Models and providers
-
MiniMax image and video: connect MiniMax under Settings > Model and pick a MiniMax model for the image or video role, or set
tools.media.image.provider/tools.media.video.providertominimaxorminimax_cn_api. The key comes from that provider's section, a video can start from afirst_frame_image, and Raven-PPT decks can draw on a provider of their own withPPT_IMAGE_PROVIDERandPPT_IMAGE_MODEL. Aproviderwritten by hand intotools.media.videois honored now (it was ignored before) (#1013). -
Keenable: a new
web_searchandweb_fetchvendor that works without an API key, at a lower rate limit. Select it withtools.web.search.provider: keenableortools.web.fetch.provider: keenable; an optional key intools.web.providers.keenable.apiKeyorKEENABLE_API_KEYmoves requests to the keyed endpoints. The research sub-agent's tools route through it too, and its launcher starts with Keenable selected and no key. The defaults stayserperandjina(#1088). -
Opper: a gateway provider. Set its key under
providers.opperor pick Opper in onboarding; Raven reaches it athttps://api.opper.ai/v3/compatand lists its models once a key is entered. A bare model id lets Opper route across providers, and aprovider/modelid pins one (#869). -
An empty reply that the upstream itself ends with
stop, as OpenRouter reports it, is no longer treated as a transport failure and retried for minutes. A reply made only of an end-of-turn token such as<|im_end|>counts as empty instead of being delivered as the answer, and a streamed reply no longer shows the sentinel on screen first: the opening is held back while it could still be only a sentinel (#1042). -
Switching a conversation from another vendor's model to a Codex model, or to the
openaiprovider on the Responses protocol, no longer makes every later request fail with "Expected an ID that begins with 'fc'" (#1075).
Registered machines
-
A machine registered by password under an alias from your ssh config, a
HostKeyAliasor a non-canonical address now logs in, because Raven answers the password prompt for the host ssh actually resolves. A prompt that is not the account's password is reported as such instead of as a wrong password. A password machine at a name that is another machine's ssh alias is refused at registration and on connect when that alias sends ssh elsewhere, with the password unsent, and password connections no longer canonicalize the host, so a short name that relied onCanonicalDomainsmust be registered in full (#1023). -
Connecting an agent on a registered machine shows a seconds counter and a Cancel button; after ten minutes with no answer the form asks the run to stop and says which of cancelled, too late to cancel, not stopped or not confirmed the outcome was, and then points you to the Agents page. A machine card at rest reads "Not connected; the link opens when work is sent" instead of "No link" (#1043).
-
Cancelling a sub-agent while it is still being launched on a registered machine ends that agent once the machine confirms the launch, instead of leaving it running there (#992).
Web UI and TUI
-
Editing a scheduled job in the web settings keeps its channel, recipient, topic tag and missed-fire setting, so a Telegram or Feishu reminder no longer moves to the local app after an edit (#968).
-
Stop now ends the turn in which a delegated sub-agent's result re-enters the conversation (#981), and pressing stop just as a turn finishes no longer sends your queued message under the next turn that is already starting (#1078).
-
After a reload or
/resume, a tool call's preview shows only the tool's own result, without the system's note to the model or the untrusted-data markers, and a call that failed reads as failed again (#1072, #1082). -
On Windows, choosing a conversation's working folder in the web UI opens the page's own folder browser instead of a native dialog that opened behind the browser. At a drive root a Drives button lists the host's other drives, you can type an absolute path into the path bar, and a folder name outside ASCII is listed and entered unchanged (before, it failed as "not a directory") (#1067).
-
On a wide window, the assistant's replies use the same column width as the composer, up to 1112px, so their edges line up (#1062). Renaming a conversation with a long name keeps the edit box inside the row with the cursor in view (#1054). Widening the desk palette by its corner grab no longer makes it jump above the composer (#1055). In the desk's Tasks tab, a row's error tag comes before its graph tag and both line up across rows (#1080).
-
Conversation text in the web UI is one step larger: replies, your messages and the composer go from 14px to 15px, with the session list, title, headings, code and tables rising with them. The settings dialog's navigation, inputs and selects use 14px (#1049, #1074).
-
A conversation with two or more turns shows a turn nav at the chat column's right edge, one dash per turn; pointing at or focusing a dash shows its number, how long ago it was asked and the question, and clicking it scrolls there. A Previous user message button under the header jumps back one question at a time, and the down pill now follows the last scroll direction instead of the distance from the tail; any upward scroll releases tail-follow (#1114, #1120).
-
The Skills and Plugins pages in Settings have an Add button that closes the dialog and starts a message in the chat for you to finish and send. The Plugins page notes that a server the catalogue does not list goes into
tools.mcpServersby hand (#1124). -
While the agent waits on a question, a message typed into the main composer answers it and closes the question sheet when it carries no attachment; one with an attachment is queued as a side note as before (#1048).
-
In the TUI, text after an emoji made of several code points is no longer overwritten on terminals that draw such emoji wider than expected, such as Terminal.app (#1046).
-
The Usage page reads each day's usage file once, and a damaged record no longer stops the count of the tool calls after it (#1021).
Reliability and safety
-
Security: a DAG node's
@nodes/reference can no longer escape the node artifact folder through a Windows-style..\or a drive path (GHSA-8mqc-c629-9qc8); such references are refused on every host. On native Windows, file references into the session working directory and sub-agent history, which were all refused before, now resolve (#1066). -
A tool call that reads one of Raven's own OAuth token files under
oauth/in the Raven home has the access and refresh tokens redacted before they reach the model, the session record or the provider, when the path is spelled in full -- absolute,~,$HOMEor${HOME}, with either separator and.segments. A relative path, acdfollowed by a relative path, andworkspace/../oauth/...are still not caught, as before. Reads underworkspace,tmp,pluginsandagentsin the Raven home stay unredacted; on POSIX a backslash spelling names a different file and is redacted (#917, #1083). -
Two different reminders for the same chat are both kept, even when they fire minutes apart or at the same time; only a shared
topic_tagor an identical message updates an existing job (#982). -
A WeChat message the server refuses with a non-zero
retis no longer reported as delivered, and a refused send is logged instead of retried, so the earlier parts of a long reply are no longer sent again (#988).
Install and upgrade
-
A source checkout is no longer offered the page's upgrade button, by any route. When an upgrade is refused, the card shows the recovery for that case: for a checkout,
git pulland./install.sh(.\install.ps1on Windows) inside the checkout -- on Windows afterraven web --stop; for a Raven started by hand,raven web --stopandraven upgrade, thenraven webon Linux and macOS, with the Windows command ending atraven upgrade(#1003, #1086, #1087). -
On Windows,
raven upgradestops with "Nothing was changed." when its check for processes still running from the current install fails, instead of going ahead, and the check works for a user folder whose name contains a curly apostrophe (#1086).
Install
New install on Linux, macOS, or WSL2:
curl -fsSL https://raven.evermind.ai/install.sh | bashNew install on native Windows, in PowerShell:
irm https://raven.evermind.ai/install.ps1 | iexWindows PowerShell 5.1 (the version built into Windows) cannot follow that URL's
redirect and stops with (308) Permanent Redirect. If you see that error, use the
direct one instead:
irm https://raw.githubusercontent.com/EverMind-AI/Raven/refs/heads/main/install.ps1 | iexThe installer sets up uv, Node.js 22, Raven and its plugins, downloads the
browser runtime, installs or offers LibreOffice, and opens Raven in your
browser. On Linux, macOS and WSL2, it also downloads the knowledge reader's
PDF models and word dictionary (about 110 MB). First-run setup happens on that page.
When a download host cannot be reached, the installer falls back to a mirror and
says so, except for Raven's own release files, which come from GitHub Releases
and have no mirror; RAVEN_NO_MIRROR=1 keeps every download on its default host.
The installer holds the terminal while the page is up; press Ctrl-C to stop it, then start Raven
again with:
raven webThat keeps Raven running in the background and opens the page; raven web --stop
stops it. Bare raven does the same, and opens the TUI only where no browser
can be opened. Prefer the terminal? raven tui runs the same first-run setup and
opens the TUI, and raven onboard stays the explicit way to reconfigure later.
Set RAVEN_MINIMAL=1 to skip the browser, model and LibreOffice downloads, or
RAVEN_NO_LAUNCH=1 to have the installer return without opening the page. The
Windows installer does not download the dictionary and models; there, and after
RAVEN_MINIMAL=1, raven resources fetches them.
Upgrade
Already running Raven? Upgrade in place -- configuration, sessions, and memory
are preserved. On a raven web install whose page is served by 0.2.3 or later,
the update row at the bottom of the sidebar does this for you, and the page
reloads itself, still signed in, once the new version is up. A page served by
0.2.2 or earlier refuses it; from the command line, stop the page first, then
upgrade:
raven web --stop
raven upgradeOn Linux and macOS, raven upgrade returns after installation completes.
On native Windows, it starts a separate helper and returns immediately. Wait
for the helper's completion message before restarting Raven. Then run:
raven webNeither raven upgrade nor the update row downloads the knowledge reader's
PDF models and word dictionary (about 110 MB). If you have not run it since
0.2.5, run this once after upgrading:
raven resourcesraven upgrade installs the latest stable release together with the plugin
wheels its plugin list names, which from this release include everos-cloud-memory.
It never picks up a pre-release unless this install has joined the beta channel
(a ~/.raven/beta.json that only the beta installer writes).
raven upgrade --check reports whether a newer release exists without
installing it. Editable source checkouts are never overwritten, and a page
served by one refuses the update row as well: raven upgrade reports the
checkout path and how far it is ahead of or behind origin/main, and the remedy
is git pull && ./install.sh in the checkout. Rerunning the one-line installer
also upgrades, and ends on the running page.
Release Status
- Version:
0.2.6 - Tag:
v0.2.6 - Release type: patch
- Assets: the
ravenwheel and source distribution, four plugin wheels
(everos_memory,everos_cloud_memory,design_engine,ppt_engine), the
locked constraints fileraven-constraints.txt, and the plugin list
raven-plugins.txt, which installs every plugin wheel the release carries
Notes
- PyPI publishing is not enabled yet; the supported public install path uses the GitHub Release wheel asset.