v2.18.2
Oct 25, 2026
Fixed Skills that ship files beside their SKILL.md (references, scripts, templates) now work in agent sessions.
opendray updateReadable release notes from GitHub, designed for humans.
Oct 25, 2026
Fixed Skills that ship files beside their SKILL.md (references, scripts, templates) now work in agent sessions.
opendray updateFixed Skills that ship files beside their SKILL.md (references, scripts, templates) now work in agent sessions.
SKILL.md (references, scripts,
templates) now work in agent sessions. opendray skill describe <id>
printed only the SKILL.md, so an agent could not find the files it
referenced. It now ends with the skill's directory for vault skills.
Built-in skills print as before.Fixed Claude sessions no longer die on every start when their stored conversation id has no transcript.
/clear (and on some resumes), so the stored
id could point at an older conversation or at no file, and
claude --resume exited at once. Before resuming (restart, the
auto-resume after an upgrade, or an account switch), opendray now finds
the transcript the session is actually writing and resumes that one. When
no transcript exists at all, the session starts a fresh conversation
instead of failing. An account switch carries the correct transcript too./clear (and on some resumes), so the stored
id could point at an older conversation or at no file, and
claude --resume exited at once. Before resuming (restart, the
auto-resume after an upgrade, or an account switch), opendray now finds
the transcript the session is actually writing and resumes that one. When
no transcript exists at all, the session starts a fresh conversation
instead of failing. An account switch carries the correct transcript too.Added Sessions remember their last terminal size and (re)spawn at it instead of the fixed 80x24 floor.
CODEX_HOME) under Providers → Codex, pick one per session, and switch a
live session between them. The switch copies the conversation rollout into
the new account and resumes it (codex resume <id>), so the chat keeps its
full history. Codex credentials (auth.json) are never copied between
accounts — refresh tokens rotate, so copies would invalidate each other.OPENCODE_AUTH_CONTENT; adding one is refused when no backup key is set
rather than storing it in plain text. Live sessions can switch accounts and
resume the same conversation (all accounts share opencode's session DB).--resume, instead of restarting into an empty
conversation with only a short recap. The "carry over conversation" toggle
(on by default) still controls whether prior content is sent under the new
account; if the transcript can't be carried, the switch falls back to the
recap.grok --resume <id>) instead of starting fresh with a recap.CODEX_HOME) under Providers → Codex, pick one per session, and switch a
live session between them. The switch copies the conversation rollout into
the new account and resumes it (codex resume <id>), so the chat keeps its
full history. Codex credentials (auth.json) are never copied between
accounts — refresh tokens rotate, so copies would invalidate each other.OPENCODE_AUTH_CONTENT; adding one is refused when no backup key is set
rather than storing it in plain text. Live sessions can switch accounts and
resume the same conversation (all accounts share opencode's session DB).--resume, instead of restarting into an empty
conversation with only a short recap. The "carry over conversation" toggle
(on by default) still controls whether prior content is sent under the new
account; if the transcript can't be carried, the switch falls back to the
recap.grok --resume <id>) instead of starting fresh with a recap.Fixed Terminal sessions recover from a corrupted render on (re)connect. opendray replays its output ring buffer to a new connection, which for a full screen (alt screen) TUI like grok could begin mid escape sequence and
--strict-mcp-config, so a session uses only opendray-managed MCP servers
(the --mcp-config set) and ignores the account's claude.ai connectors and
user ~/.claude.json. Those connectors require interactive OAuth that a
headless gateway session can't complete, so they only produced noise.--strict-mcp-config, so a session uses only opendray-managed MCP servers
(the --mcp-config set) and ignores the account's claude.ai connectors and
user ~/.claude.json. Those connectors require interactive OAuth that a
headless gateway session can't complete, so they only produced noise.Added [session] gains env dotenv files — a list of dotenv style files (KEY=VAL per line) whose every entry is injected into each spawned session.
[session] gains env_dotenv_files — a list of dotenv-style files
(KEY=VAL per line) whose every entry is injected into each spawned
session. This is the modular way to feed a whole bundle of host secrets
(e.g. a secrets.env) into sessions with one config line, instead of one
file per variable via env_files. Blank lines and # comments are
skipped, a leading export is stripped, and surrounding quotes removed.
Precedence, lowest to highest: env_dotenv_files < env < env_files.Fixed The install wizard now actually installs the Grok Build CLI when you opt in.
@xai-official/grok,
so it now installs the same way as Claude Code and Codex, in both the Linux
and macOS wizards.opendray providers list / opendray providers update now include grok
(@xai-official/grok) alongside claude and codex.npm install -g opendray ships the gateway
binary only — it does not provision PostgreSQL, a service user, the AI CLIs,
or a system service. It points to the curl installer for a fully-managed
setup and documents installing at least one AI CLI (claude/codex/grok) for
the npm route. Also removed the stale "Gemini" reference.@xai-official/grok,
so it now installs the same way as Claude Code and Codex, in both the Linux
and macOS wizards.opendray providers list / opendray providers update now include grok
(@xai-official/grok) alongside claude and codex.npm install -g opendray ships the gateway
binary only — it does not provision PostgreSQL, a service user, the AI CLIs,
or a system service. It points to the curl installer for a fully-managed
setup and documents installing at least one AI CLI (claude/codex/grok) for
the npm route. Also removed the stale "Gemini" reference.Added Grok accounts now show the signed in account holder (name and email) as a tag in the Grok Accounts panel, read on each list from the on disk grok login (<GROK HOME /auth.json).
<GROK_HOME>/auth.json). This mirrors the Claude accounts panel's
oauth_email tag so you can tell which xAI account each row authenticates
as. Derived on every read, never persisted; empty when logged out.Fixed Web terminal now sizes the session to the browser window automatically on open.
Fixed Grok sessions stay working across account switches and are never bricked by a logged out account.
Changed Reworked the Jev (TypeSafe) integration into a generic, modular session environment mechanism.
[jev] config section
baked into the core, sessions now inherit operator-defined env vars from
[session.env] (inline) and [session.env_files] (value read from a
file, keeping secrets out of config.toml). This injects any host tool's
credentials into every provider's agent with no per-provider setup and
nothing tool-specific in the codebase. Jev is now just one consumer:
point TYPESAFE_API_KEY at a key file under [session.env_files]. The
[jev] section is removed.[jev] config section
baked into the core, sessions now inherit operator-defined env vars from
[session.env] (inline) and [session.env_files] (value read from a
file, keeping secrets out of config.toml). This injects any host tool's
credentials into every provider's agent with no per-provider setup and
nothing tool-specific in the codebase. Jev is now just one consumer:
point TYPESAFE_API_KEY at a key file under [session.env_files]. The
[jev] section is removed.Fixed The one line installer no longer crashes or hangs when there is no controlling terminal (LXC / pct exec, Docker without t, CI, cloud init).
pct exec, Docker without -t, CI,
cloud-init). It aborted at startup trying to open /dev/tty, and a
menu prompt could spin forever on end-of-input. It now reattaches to a
terminal only when one can actually be opened, and menu prompts fail
fast with guidance instead of looping. Interactive curl … | bash
installs are unchanged; automated installs now work or fail cleanly.
(install-linux.sh, install-macos.sh)Added Grok sessions keep their conversation across a stop and restart. On a same account restart opendray now resumes the current working directory's most recent grok session instead of starting a blank one, matching how
Operator polish, reconnect stability, memory improvements, and clearer docs.