Skip to content

Releases: Datum-Collective/RIFT-coding-agent

v0.3.0 — All That Is Gold Does Not Glitter

Choose a tag to compare

@github-actions github-actions released this 23 Oct 18:41
b40a449

"All that is gold does not glitter, not all those who wander are lost." A research report is only worth reading if you can check it, so this one checks itself.

v0.3.0 is the release that announces /deep-research. The command shipped inside v0.2.3 without a word in its notes. This is the word.


The Seeing-Stone: /deep-research

Type /deep-research and a topic:

/deep-research how well do LLM-as-judge scores agree with human ratings

RIFT writes a short brief first, then splits the question into angles and sends one subagent down each. They read papers (OpenAlex, Semantic Scholar, arXiv), code, and what practitioners say in public. Every claim a subagent notes has to come with a verbatim quote from a source it actually opened.

The part that makes it worth running comes after the reading. RIFT goes looking for what is not already common knowledge: sources that contradict each other, gaps nobody has filled, work that got overlooked, a method from one field that fits another. Each candidate then gets a kill test, a search for prior work that already says it. Only what survives goes into the findings.

You get three files in research/<topic>/: report.md, report.tex, and a compiled report.pdf.

  • It proves its citations before it calls the report done. A checker matches every citation key across the notes, both reports and the bibliography, resolves every DOI, arXiv id and URL, spot-checks quotes against their sources, and builds the PDF.
  • The report argues instead of listing. It is organised by theme, not by source, and every factual sentence carries a citation. Opinion is marked as the report's own.
  • It needs two things on your machine. Python 3 for the checker, and tectonic for the PDF (brew install tectonic). Without tectonic you still get the Markdown and LaTeX.
  • The home screen tells you about it. There is a new tip for it in the rotation, and /deep-research is listed in the README next to /share, /mcp and /remotion.

The workflow is inspired by Deep-Research-skills.


Already in your hands

If you are on v0.2.3 you have /deep-research today, and the koi from that release. The pond when you go quiet, the logo turning into koi, and the small koi that swim past the composer while you type are all in the v0.2.3 notes. Nothing about them changed here.

The minor version moves because a command that writes a cited report is a new capability, not a patch.


Install

curl -fsSL https://raw.githubusercontent.com/Datum-Collective/RIFT-coding-agent/main/opencode/install | bash

Already on RIFT? rift upgrade.

v0.2.3 — The Time That Is Given Us

Choose a tag to compare

@github-actions github-actions released this 23 Oct 18:34
4edc533

"All we have to decide is what to do with the time that is given us." Stop typing for ten seconds and RIFT finds something to do with yours.

v0.2.3 adds koi in two moments: the RIFT logo turns into a pond when you go quiet, and small koi swim past the composer while you type. It also fixes one flag and puts the licence files in the downloads.


Still Water: the logo turns into koi

Leave the startup screen alone for ten seconds. The banner holds still while the blue behind its letters drains away. Then the chrome letters break into specks, the specks stream across the screen and build the koi, and the koi swim off. That takes about six seconds. After it, a pond fades in behind the interface: koi drifting between lily pads, or two of them circling one pad. Which scene you get is random.

  • Typing ends it, nothing else does. The first key or paste sends the pond away on the next frame, and the logo is back exactly as it was. The mouse neither stops it nor delays it, so you can scroll up through a conversation while the koi swim.
  • It sits behind everything. The pond is only painted into cells the interface left empty. Text, the composer and the panels are never covered, and the logo stays hidden for as long as the pond is out.
  • RIFT's colors only. The black canvas, the neutral greys, and the azure from the logo. There is no other hue anywhere in it, and it follows the theme if the theme changes while it plays.
  • It costs nothing while you work. Until the ten seconds are up there is one timer. While the pond plays, a frame takes roughly 1 to 3 ms of the 16 ms a 60 fps frame allows. It is not redrawn at all while the terminal is in the background, and a long idle session does not grow in memory.
  • It needs a 60 by 14 terminal. Anything smaller stays as it is. Resize a pond that is playing and it is rebuilt for the new size once you let go of the window edge.
  • If anything inside it ever fails, it stops for good for that session and the interface carries on. It cannot freeze the screen.

Turn it off with the "Disable animations" command, the animations_enabled setting, or RIFT_NO_ANIMATION=1.

The way the koi move, their shapes, and the logo-to-koi intro are a port of koi-screensaver by Erik Johansson, MIT licensed, redrawn in terminal cells and RIFT colors. His copyright notice and the licence text are in THIRD_PARTY_NOTICES.md. Thank you for making something worth porting.


Ripples: koi while you type

The first character you type on the home screen opens a strip of water just above the composer, and small koi swim through it. They come in from one side, drift between lanes and leave by the other. The faster you type, the more they dart, and now and then one touches the surface and leaves a ring. About two and a half seconds after your last keystroke no more come, and the ones still there fade out.

Only typing calls them. The mouse, shortcuts, arrow keys and Enter do not. The strip is painted behind the logo, the tagline and the composer, in the same empty-cell way as the pond, and it follows the same switches: animations_enabled and RIFT_NO_ANIMATION=1.


Odds and ends

  • RIFT_NO_ANIMATION=0, false, no and off now leave animations on. Until now any value at all, even 0, turned off the rift upgrade walk. Empty and these four count as "not set"; any other value still turns animations off, for the upgrade walk and the pond alike.
  • Release archives and npm packages now include LICENSE and THIRD_PARTY_NOTICES.md. Shipping code from koi-screensaver means shipping its licence next to it.

Install

curl -fsSL https://raw.githubusercontent.com/Datum-Collective/RIFT-coding-agent/main/opencode/install | bash

Already on RIFT? rift upgrade. Then wait ten seconds.

v0.2.2 — A Light in Dark Places

Choose a tag to compare

@shiv207 shiv207 released this 22 Oct 18:35
fc99fad

"May it be a light to you in dark places, when all other lights go out." The graph that used to light up only at the end now lights up as you work, and the updater has somewhere to walk.

v0.2.2 is a patch release. The side-panel graph builds live, the "Invalid prompt" error is closed off at the last step before the request, and rift upgrade is a walk to Mount Doom.


The Phial of Galadriel: the graph lights up as the agent works

  • It appears the moment work starts. The panel was drawn from the plan, the session diff and graphwrite. The diff only arrives after the turn, and models rarely write a plan or call graphwrite, so in an ordinary run it stayed empty until the very end. The task is now the root from the first second.
  • Files show up as they are written. They are read from the edit tools while they run, and merge with the finished diff without duplicates.
  • Each edit lands under the step that was active. RIFT replays the todowrite calls in order, so an edit is credited to the todo in progress when it happened, not the one in progress now.
  • No plan, still a shape. Edited files are grouped by directory, with the directory of the newest edit marked active.
  • A graph the agent declared keeps moving. Edits none of its nodes list yet appear under it as "Edited since the last graph update". The agent's own nodes are never changed.

The Black Gate stays shut: "Invalid prompt" is closed off

  • One last check before the request. RIFT keeps its own markers in part metadata, and one reaching providerOptions ends the session with "Invalid prompt: The messages do not match the ModelMessage[] schema". v0.2.1 stopped one route in. That marker has now come through two routes, so the final message list is checked just before it goes to the SDK and anything that is not a record is dropped. A marker added later cannot end a session either.
  • Run against the real failing prompt from a session log, it had one invalid message before the check and none after.
  • A TUI that was started before v0.2.1 keeps its old code until it is restarted.

The Road to Mount Doom: updating is a journey

On a real terminal, rift upgrade shows a marker walking from the Shire while it installs:

  ━━━━━━━━━━━━━━━━━━━━━━━━◆───────  Lothlorien
  • Real places on the way: The Shire, Bree, Rivendell, Moria, Lothlorien, Rauros. The marker never reaches the end before the install does, and finishes the last stretch to Mount Doom when it completes.
  • A line from the books for every release, chosen from the version number, so a release always gets the same one and the next release gets a different one. The TUI's update dialog shows it too.
  • Plain where it should be. Piped output, CI, TERM=dumb and RIFT_NO_ANIMATION=1 keep the plain spinner. A failed install shows no arrival and prints the same error as before.

Install

curl -fsSL https://raw.githubusercontent.com/Datum-Collective/RIFT-coding-agent/main/opencode/install | bash

Already on RIFT? rift upgrade.

v0.2.1 — The Road Goes Ever On

Choose a tag to compare

@shiv207 shiv207 released this 22 Oct 17:29
3774007

"The road goes ever on and on." v0.2.0 made RIFT light and fast. v0.2.1 keeps it on its feet: the errors, stalls and dead links that got in the way on the road.

v0.2.1 is a patch release. It fixes the prompt error that ended long sessions, the browser tool, Vibe Mode stalls and /share.


The Black Gate stays shut: a long session no longer dies

  • No more "Invalid prompt: The messages do not match the ModelMessage[] schema". After a session's first compaction, RIFT's own marker on the summary was passed to the model as provider options, and the AI SDK rejected the whole request. Only real provider metadata is forwarded now. I replayed a real 443-message session through the fix and it validates.

Gandalf at the Bridge: Vibe Mode keeps moving

  • Tools work on the last plan step. The "tools are disabled" prompt was injected there, so a one-step plan, or a resumed session, could never act.
  • A step that is still unfinished after 40 turns counts as failed and goes back to the planner instead of looping.
  • The engine logs unhandled errors instead of swallowing them, so a hang leaves something in the log to read.

The Eyes of the Eagles: the browser tool

  • It recovers. A browser that died, or a tab that crashed, is replaced on the next call. DevTools runs over a pipe, so Chrome exits when RIFT does, and every command times out after 30 seconds instead of hanging.
  • Calls no longer overlap and report each other's page.
  • action: "steps" runs a whole check (open, click, type, read, screenshot) in one call.
  • type fills React-style inputs, text marks elements the page hides, click waits for a navigation it starts, and a missing favicon is no longer reported as a console error.
  • A cold start gets 45 seconds, and the launch retries if Bun fails to wire the pipes.

Beacons of Gondor: /share links open

  • A link no longer sits on "still uploading". The upload looked up every model the session had used and gave up if one had since been renamed or removed, leaving an empty placeholder behind the link. Missing models are skipped now. A session already stuck repairs itself on its next change.
  • A share that fails to create is logged with its cause.

Speed, carried over from the road

  • A fresh-context tester subagent, a lean compaction mode with a context cap, hedged requests for slow providers, stuck-loop detection, and verification that runs in the background while the agent works.

The Shire, tidied

  • main requires a pull request and a passing typecheck. Merged branches delete themselves, and prototypes, datum-internal and external-fixes exist for the rest. See docs/branching.md.
  • Generated caches, vendored skills and rendered videos are no longer tracked, and the README and landing page are rewritten.

Install

curl -fsSL https://raw.githubusercontent.com/Datum-Collective/RIFT-coding-agent/main/opencode/install | bash

Already on RIFT? rift upgrade.

v0.2.0 — Show Us the Meaning of Haste

Choose a tag to compare

@shiv207 shiv207 released this 13 Oct 08:19
fde2648

"Show us the meaning of haste." Gandalf asked it of Shadowfax. We asked it of RIFT, and then took everything off its back that it didn't need to carry.

v0.2.0 is RIFT, lighter and faster. A third smaller, ready in a fraction of the time, a third of the prompt it used to send, MCP that behaves the way Claude Code's does, a redesigned terminal UI, and /remotion for making videos with Remotion's own skills.


Shadowfax: the meaning of haste

v0.1.13 v0.2.0
Download (macOS arm64 binary) 146 MB 97 MB
rift --version 0.46 s, 197 MB memory 0.03 s, 34 MB memory
Prompt overhead on every request 8,724 tokens 2,901 tokens
Five MCP servers, 58 tools, in every request 10,400 tokens 328 tokens
  • It starts sooner. Commands load only when you run them, --version answers without starting the engine, provider data is prepared only for the providers you use, and the full model catalogue loads after the screen is up.
  • It sends less. One compact system prompt instead of ten model-specific ones, shorter tool descriptions, and skill names instead of skill bodies. Fewer tokens per turn means faster replies and lower bills.
  • It carries less. The web UI, desktop app, console, Slack bot, ACP, stats, code mode, OpenTelemetry, 22 unused provider SDKs and a second interactive mode are gone. RIFT is a terminal coding agent, and now that is all it ships.

The Fellowship of the Ring: MCP, the Claude Code way

  • Your .mcp.json just works. Project .mcp.json, user ~/.rift/mcp.json, and the mcp key in rift.json, in the same mcpServers shape other clients use, with ${VAR} and ${VAR:-default}.
  • Asked before it runs. A server from a project's .mcp.json waits for your approval (once, always, or deny), remembered per project.
  • Commands, not a wizard. rift mcp add, add-json, get, list, remove, with --scope, --transport, -e and --header.
  • Out of the way until needed. Servers start on first use, and with many tools RIFT sends only their names plus one search tool, loading a tool's full schema when the agent asks for it.
  • The rest: a /mcp panel (status, tools, sign-in, on and off, reconnect), tools named mcp__server__tool so permission rules can target a server, a 25k-token cap on one result, and automatic reconnects for remote servers.

Mithril: a new coat for the terminal

Light, plain to look at, and harder than it looks.

  • Black, quiet, readable. A new default theme on a true black canvas, neutral greys, and the RIFT logo's azure as the only accent.
  • One line per step. Each tool call is a single line with a symbol in the margin: $ for shell, ± for file changes, ≡ for the plan, grouped reads and searches, and a checks block that shows what RIFT actually verified.
  • The RIFT logo is home. Logo, tagline, the input box and one tip. Everything else is a keypress away: ? for shortcuts, ctrl+x l for sessions.
  • A side panel worth opening. Status, context use with a bar, plan progress, changes, checks, the engineering graph, MCP and LSP.
  • Approvals you can answer with one key, dialogs that float, and a shortcut sheet built from your own keybindings.

The Mirror of Galadriel, reforged: /remotion

/remotion 30-second vertical launch video for this project, for developers

/video now runs on Remotion's official Agent Skills. RIFT still storyboards first, renders a still from every scene and looks at it before the final render, and checks the MP4's resolution, frame rate and length.

  • rift remotion setup installs Remotion's skills (-g for your user). rift remotion new creates a project and rift remotion studio opens Remotion Studio. /video and rift video still work.
  • Claude Code plugins work in RIFT. RIFT reads the skills from plugins you've installed for Claude Code, so claude plugin install remotion@remotion lights up RIFT as well.

Things that changed under you

  • Sessions open on the conversation; ctrl+l switches to the task view, and RIFT remembers your choice.
  • rift --mini, rift run --interactive and rift video init are gone. rift run is still the plain, scriptable printer.
  • Providers that used to be bundled (xAI, Azure, Bedrock, Vertex and others) still work: RIFT installs their SDK on first use. Their special login flows are gone.
  • Requests to providers are byte-for-byte what they were in v0.1.13; tests guard that.

Upgrade

rift upgrade

or reinstall with the install script in the README.

v0.1.13 — Speak, Friend, and Enter

Choose a tag to compare

@github-actions github-actions released this 29 Sep 06:29
4392bf9

The door opens for whoever speaks the word. Now your share link is the word, and nothing else opens it.

v0.1.13 is the biggest RIFT release yet. Share any session as a RIFT link in about two seconds. Turn one sentence into a checked, rendered video. A TUI that reads like a Unix tree. And a safety pass so that a link is the only way anyone sees your work.


There and back again: share a session with one link

A shared RIFT session: the question, RIFT's steps, the fix, and the checks RIFT ran

Type /share and the link is on your clipboard in about two seconds, however long the session. It opens in the new RIFT viewer:

  • The conversation, readable. Your prompts on the right, RIFT's replies on the left, and every run of tool calls folded into one card of steps you can open.
  • The proof, up front. A green ✓ 3 of 3 checks passed (or a red count of failures) that RIFT ran itself. The agent's word isn't taken for it.
  • The change. Real diffs, and the files changed with their line counts.
  • Yours. The session lives in a secret Gist on your GitHub account. /unshare deletes it.
  • Round trip. rift import <link> pulls a shared session into your own RIFT, and rift pr 42 finds a RIFT link in a pull request description and opens the session with the code.

Sharing uses your GitHub login. If you haven't already, run gh auth login or set GITHUB_TOKEN.

The Doors of Durin: only the link opens them

A share link is the key, so nothing in RIFT hands that key to anyone you didn't choose.

  • The key never touches a server. The Gist id lives after the #, which browsers never send anywhere: not to the viewer's host, a CDN, or a referrer. Secret Gists are unlisted and unsearchable, and their ids are 128 random bits.
  • Secrets stay home. Before anything uploads, RIFT removes API keys and tokens (OpenAI, Anthropic, GitHub, AWS, Slack, Stripe, Google), JWTs, private keys, passwords in .env lines and connection strings, your home folder path, and image attachments such as screenshots and frames. It catches what it recognises, so still read what you share.
  • No surprise broadcasts. rift github run no longer shares a session into a PR comment just because the repo is public. That comment emails every subscriber. It shares only when you set SHARE=true.
  • Honest pages. Every share shows who shared it (taken from GitHub, so it can't be faked), says RIFT didn't write or review it, and shows where each link really goes. Pages are kept out of search engines and AI-training crawlers, can't be framed by other sites, and run no third-party scripts.

The Mirror of Galadriel: /video

/video 20-second vertical short: a generic agent claims the tests pass, RIFT runs them

versus: one agent claims the tests pass, RIFT runs them

One sentence becomes an MP4 that has already passed its own checks:

  1. Storyboard. A scene-by-scene plan (seconds, purpose, on-screen text, transition) before any code.
  2. Spec. The video is a small typed spec, not hand-written animation code.
  3. Validate. Catches copy that would clip, captions too fast to read, durations that don't add up, and missing assets.
  4. Look. Renders a still of every scene and reads them, because compiling isn't the same as looking right.
  5. Render. Writes the MP4, then checks its resolution, fps, duration, codec and blank frames against the spec.

/video is built in, in every project, with 19 scene types, 3 themes, and vertical, horizontal or square output. New this release are manga panels and ansi CGA art:

manga ansi
manga ansi

The map of Middle-earth: a TUI that reads like a tree

The engineering graph is now a real tree, and status is one glyph per node:

Engineering graph
└── ● Product · build
    ├── ● Authentication · build
    │   ├── ✓ Database · build
    │   ├── ○ API · build
    │   │   waiting on: Frontend
    │   └── ○ Frontend · build
    └── ● Tools · build
  • A two-line sidebar footer: the project and branch, then tokens, cost and version.
  • b closes the sidebar when you're not typing. ctrl+x b still toggles it.

Riddles in the dark: new tips

The home-screen tips were rewritten. Each teaches a real feature with your own keybindings, and some of them are honest about working with agents:

● Tip Press ctrl+x d to read the diff. The agent is confident. Confidence is not a test

● Tip /compact summarizes a long session to free up context. It keeps the decisions and drops the arguing

Leaving Moria

  • opencode's share server is gone. RIFT no longer sends anything to opncd.ai, and old opencode share links on your sessions are cleared, so the next /share makes a RIFT link.
  • /unshare now actually clears the link. Clearing a session's link never worked before, so unshared links lingered in the sidebar.
  • RIFT_DISABLE_SHARE turns sharing off. OPENCODE_DISABLE_SHARE still works.

Upgrade

rift upgrade

Full changelog: v0.1.12...v0.1.13

v0.1.12 — let the plant keep growing !

Choose a tag to compare

@github-actions github-actions released this 23 Sep 14:50
477807a

Worktrees

  • Verify no longer runs the wrong project's checks when every edited file sits outside the project directory. Files outside the project are checked where they actually are. This covers edits spread across checkouts, for example a second worktree.
  • The turn diff includes files with no git history to diff against (outside the project, or the project is not a repo), rendered as current contents, so those files still get checked.

Browser check

  • The browser tool opens local pages over file://. A local page goes through the same read permission as the read tool.
  • With no verify URL configured, the check opens the page the turn built: index.html first, else the first edited HTML file. A plain static site is checked with nothing set up.
  • file:// pages never get an HTTP response, so a missing status on its own no longer reads as a failed load.

Engineering graph

  • Per-session graph nodes: status, owner, dependencies, files, tests, decisions, evidence. Stored in sqlite, updated through graph tools, listed over the API, shown in the sidebar.
  • Sidebar footer links to the graph view.

Types

  • Schema and generated types for the graph (schema.json, SDK types, event manifest) are updated alongside the code that reads and writes them.

Verification

  • Typecheck passes.
  • New tests: graph store, sidebar component and util, verify editedPage fallback, browser file:// permission.

v0.1.11

Choose a tag to compare

@github-actions github-actions released this 23 Sep 02:01

Fixed

  • Fixed Vibe Mode failing with OpenCode Zen Responses models such as Muse Spark 1.3 Free.
  • Vibe's internal planner, reviewer, revision, and claims calls no longer send unsupported static tool_choice values to the Zen Responses transport.
  • Tool-choice handling is now capability-aware and scoped to the OpenCode Responses transport rather than specific model names.

Verification

  • Reproduced the original Zen gateway rejection.
  • Verified the patched Vibe planner successfully executes.
  • Verified Vibe executor execution with Big Pickle.
  • Verified the complete free-model Vibe flow end-to-end.
  • Added regression coverage for Responses vs Chat Completions transports.
  • Typecheck passes.

Other

  • Improved Windows installer architecture detection and installation verification.
  • Updated the platform-aware download links in the README - thanks @shiv207

v0.1.10 — Free Vibe

Choose a tag to compare

@danvraz danvraz released this 21 Sep 16:58

Vibe Mode

  • Fixed Vibe Mode with OpenCode free-tier models
  • Vibe planner and reviewer calls now use the proper SessionTools definitions
  • Added fallback handling for non-JSON planner responses
  • Verified Big Pickle planner + Ling 3.0 Flash Fin Free executor end-to-end

Verification

  • Typecheck passes
  • Lint passes
  • Free-model Vibe execution verified on Windows

v0.1.9 — One Key

Choose a tag to compare

@github-actions github-actions released this 20 Sep 21:48

One key to switch views.

Changed

  • ctrl+l switches between the task view and the full chat. No chord to time. ctrl+o and ctrl+x then v still work, and the hints and the switch message name ctrl+l.

Everything else is unchanged from v0.1.8. To update, run the install one-liner or accept the in-app prompt.