Repository navigation
Releases: Datum-Collective/RIFT-coding-agent
Release list
v0.3.0 — All That Is Gold Does Not Glitter
"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-researchis listed in the README next to/share,/mcpand/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
"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,noandoffnow leave animations on. Until now any value at all, even0, turned off therift upgradewalk. 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
LICENSEandTHIRD_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
"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 callgraphwrite, 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
todowritecalls 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
providerOptionsends 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=dumbandRIFT_NO_ANIMATION=1keep 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
"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.typefills React-style inputs,textmarks elements the page hides,clickwaits 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
mainrequires a pull request and a passingtypecheck. Merged branches delete themselves, andprototypes,datum-internalandexternal-fixesexist for the rest. Seedocs/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
"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,
--versionanswers 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.jsonjust works. Project.mcp.json, user~/.rift/mcp.json, and themcpkey inrift.json, in the samemcpServersshape other clients use, with${VAR}and${VAR:-default}. - Asked before it runs. A server from a project's
.mcp.jsonwaits 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,-eand--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
/mcppanel (status, tools, sign-in, on and off, reconnect), tools namedmcp__server__toolso 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 lfor 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 setupinstalls Remotion's skills (-gfor your user).rift remotion newcreates a project andrift remotion studioopens Remotion Studio./videoandrift videostill work.- Claude Code plugins work in RIFT. RIFT reads the skills from plugins you've installed for Claude Code, so
claude plugin install remotion@remotionlights up RIFT as well.
Things that changed under you
- Sessions open on the conversation;
ctrl+lswitches to the task view, and RIFT remembers your choice. rift --mini,rift run --interactiveandrift video initare gone.rift runis 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
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
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.
/unsharedeletes it. - Round trip.
rift import <link>pulls a shared session into your own RIFT, andrift pr 42finds 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
.envlines 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 runno longer shares a session into a PR comment just because the repo is public. That comment emails every subscriber. It shares only when you setSHARE=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
One sentence becomes an MP4 that has already passed its own checks:
- Storyboard. A scene-by-scene plan (seconds, purpose, on-screen text, transition) before any code.
- Spec. The video is a small typed spec, not hand-written animation code.
- Validate. Catches copy that would clip, captions too fast to read, durations that don't add up, and missing assets.
- Look. Renders a still of every scene and reads them, because compiling isn't the same as looking right.
- 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 |
|---|---|
![]() |
![]() |
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.
bcloses the sidebar when you're not typing.ctrl+x bstill 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/sharemakes a RIFT link. /unsharenow actually clears the link. Clearing a session's link never worked before, so unshared links lingered in the sidebar.RIFT_DISABLE_SHAREturns sharing off.OPENCODE_DISABLE_SHAREstill works.
Upgrade
rift upgrade
Full changelog: v0.1.12...v0.1.13
v0.1.12 — let the plant keep growing !
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.htmlfirst, 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
editedPagefallback, browserfile://permission.
v0.1.11
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_choicevalues 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
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
One key to switch views.
Changed
ctrl+lswitches between the task view and the full chat. No chord to time.ctrl+oandctrl+xthenvstill work, and the hints and the switch message namectrl+l.
Everything else is unchanged from v0.1.8. To update, run the install one-liner or accept the in-app prompt.



