Repository navigation
v1.18.51
Added
-
Manage your organisation's people with
lunos org, and see your role in/account. Owners
and admins list members and pending invitations, invite by e-mail (invitations last 7 days), revoke
invitations and remove people; owners also make or remove owners and transfer ownership. Anyone
can list their organisations, see whom to ask, leave, and accept or decline the invitations
waiting for them. Lunos Cloud checks every action against your role, and when yours can't do it
you're told whom to ask, such as "Only an organisation owner can do this. Ask:
owner@acme.example".--jsonprints results and refusals for scripts, and--yesskips the
confirmation./accountnow shows your role in each organisation ("Owner · Acme GmbH"), your
plan, and your invitations with Accept and Decline. Delete my account now deletes the account
itself 30 days later, after you typedeleteto confirm, and signs you out; the only owner of an
organisation is told to transfer ownership first. When the Terms or the Privacy notice change,
Lunos Cloud records which version you accepted, and the next start asks you to accept the new one.
See "Organisations and roles" in the docs. -
Sign in with a free Lunos account, from inside the TUI. The official build now opens on a
Welcome screen the first time: tick the Terms and Privacy notice, choose Create a free account or
Sign in, and confirm the code shown in large letters (with a QR code) in your browser. New
accounts confirm their e-mail address, and the screen moves on by itself. No card is ever asked
for, and every local feature stays free. Each failure (an expired code, a denial, being offline,
the sign-in service unreachable, an unconfirmed address) says what happened and offers Try again.
/login,/logoutand/account(plan, organisations, devices, sign out everywhere, delete the
account) work at any time, and/settingshas an Account entry. Self-hosted, offline and CI use
need no account: managed"auth": { "required": false }, an organisation's owncloud.issuer,
LUNOS_OFFLINE=1,lunos run, non-interactive terminals,CI=trueand builds from source skip
it and contact no Lunos service. In CI, cloud features take a token fromLUNOS_TOKEN. -
Watch and steer all your agents from one screen. Press ← on an empty prompt (or type
/monitor) to open the Agent Monitor: every session on this computer on the right, grouped into
waiting for you, running, completed and failed, with what each waiting one asks. Approve or deny
from the list, or stop a session. The prompt in the centre starts a new session and keeps you in
the monitor, or sends to the sessions you tag, as in@2 run the tests. A busy session gets the
prompt when its turn ends, and a session another Lunos runs gets it through that Lunos. A prompt
never approves a tool call. -
The same Agent Monitor in the desktop app and the web UI. The Sessions window now lists
every session by status on the right (waiting for you with what each asks, running, completed,
failed, each counted and numbered), with Approve and Deny on the row. The prompt in the centre
starts a new session in the project you pick, or sends to the sessions you tag with@2or@
and part of a name, shown as chips; sending to several asks first. "By group" still shows your
groups. -
Prompts you queued for a busy session survive its Lunos closing. If the Lunos running a
session quits or crashes with prompts still queued for it, the session shows "2 queued (owner
closed)" in the Agent Monitor and the Sessions window. Nothing sends them until you take the
session over: the confirmation says how many there are, and offers to send them first, in order,
or discard them. A prompt is never sent twice. The Sessions window also remembers whether you
last arranged the list by status or by group. -
Send a closed Lunos's queued prompts without writing a new one. A session showing "2 queued
(owner closed)" now has Take over on its row in the Sessions window, andtin the Agent
Monitor's list. It sends just those prompts, in order, or discards them. -
Typing in a session a closed Lunos left prompts queued for asks first. In the session itself
(terminal, desktop app and web UI), your first prompt asks "Take over this session here?", as the
Agent Monitor does: send the queued prompts first and then yours, discard them, or cancel and keep
what you typed. Sessions with nothing queued are sent to as before. -
Deleting a session also deletes the prompts queued for it. Prompts that were queued for a
session and never sent no longer stay on disk after you delete it, whichever way you delete it.
The confirmation says how many go with it. Archiving keeps them. -
Deleting a single session is now audited. Deletes from the app, the terminal UI, the API or
lunos session deleteare written to the audit log assession.delete, with how many queued
prompts went with them. -
Claude Code and Codex sessions can use your Lunos MCP servers, skills and memory. Only if
you agree: the first time per tool and project, Lunos asks Share, Not now, or Never for this tool.
Their results are sent to Anthropic or OpenAI with your prompts, so nothing is offered until you
choose Share. Each call asks in Lunos unless your permission rules allow that tool by name, and
follows your residency policy and plugin hooks. Every call is written to the audit log. The
session's header and prompt show what's offered ("Lunos bridge: 2 servers, 3 skills, memory on")
and warn when the tool didn't connect;lunos external listshows the same line. Change your
answer in/settings→ External sessions or withlunos external share.external.share.*
chooses what's shared, and an organisation can lock it. Your~/.claudeand~/.codexsettings
are never changed. -
Memory setup explains where your memory is stored, and lets you keep it in PostgreSQL. The
"Where should memory be stored?" step shows each option as a card, with a "What this means" panel
that uses your real memory folder, model and region. The panel says what is stored where, what
leaves your computer, who it's shared with and what it needs. Presscto compare the options
side by side, or?for two questions that recommend one. Your team can now share memory in a
PostgreSQL database it already runs, as well as Neo4j. "Test connection" writes, reads and
deletes a probe and tells you which step failed and what to do. A region your residency policy
doesn't allow is refused right there. Memgraph is shown as coming soon. -
Memory templates set memory up in one step. Choose "Just me, on this computer", "Just me,
fully local" (when you run a local model), "Neo4j in Docker" or "PostgreSQL in Docker" on this
computer, a team database you host, or a managed cloud database. The Docker templates show every
file before writing it, never replace an existing file without asking, and keep the generated
password only in a private.envfile, never in your config. They bind the database to this
computer only, and start it only after you confirm the command. Organisations can add their own
templates and hide built-in ones in managed config. In the CLI:lunos memory templates, and
lunos memory setup --template <name>, with--yesand--start. -
Changing where memory is stored asks what happens to your facts. "Move my facts" copies every
fact, with where it came from, to the new storage. "Start empty" leaves the old facts where they
are. -
Choose Claude Code's or Codex's model from Lunos. In a Claude Code or Codex session in the
terminal app,/modelslists the tool's own models, and the one you pick is used from your next
message on, after a resume too; the prompt shows it./compacthas the tool compact its own
session, and/costshows the cost Claude Code reported (Codex reports tokens, so its cost shows
as "not reported", and its turns no longer show $0.0000). -
Your Lunos hooks also guard Claude Code and Codex. Your plugins' before- and after-tool hooks,
and thehooksin your config, run on the calls Claude Code and Codex make with their own tools.
They see the calls as they would in Lunos:bash,edit, with Lunos's argument names. A hook
that refusesrm -rfrefuses it in both tools, before you're asked. Hooks run on your computer
and send nothing to Anthropic or OpenAI, so they work even if you don't share anything. Turn
them off withexternal.share.hooks: false. Before hooks see the calls the tool asks you about,
not the ones it allows by itself. -
A recorder for Claude Code's and Codex's real traffic, run with a dedicated test key in a
throwaway HOME and redacted before anything is written, plus contract tests that replay the
recordings against the adapters. They are skipped until the recordings are added. -
Stop every session at once, and clear finished ones out of
/sessions. "stop all" stops every
running or waiting session in the current view (state filter and search), including Claude Code
and Codex sessions and those running in another Lunos window, after one confirmation that counts
them; pending approvals are rejected with "Stopped from /sessions" so no tool is left waiting.
"clear list" archives the finished, idle and failed ones: they're hidden from/sessions, the
session list and quick switch, but nothing is deleted, and "undo" or "show archived" → "unarchive"
brings them back. "stop all & clear" does both, and "delete archived" removes archived sessions
for good after you type their count. Both ship without a key (binddialog.sessions.stop_alland
dialog.sessions.clearintui.json); they're always in the view's footer, reachable with Tab.
From scripts:lunos session stop --all [--project],lunos session archive --finished [--older-than 7d]andlunos session unarchive <id|--all>, each with--yes. Bulk actions are
written to the audit log assession.stop,session.archiveandsession.delete. -
The same Stop all and Clear list in the desktop Sessions window and on the web. The Sessions
window has Stop all, Clear list and Stop all & clear buttons, with the same counts and the same
confirmation as/sessions; when the sessions in view span several projects, Stop all can be kept
to one of them. Rows that couldn't be stopped say why. Undo brings back what Clear hid, Show
archived lists archived sessions with Unarchive on each, and Delete archived asks you to type the
count first.
Changed
-
Your plan is back in the sign-in line, and Lunos Cloud's refusals say what to do. Signing in
shows "Signed in as you@example.com · Plan: Free" again. The plan comes from your account, and
signing in still makes no billing call./accountshows Free, Pro, Team or Enterprise, and whose
plan covers you, and shows Admin as a role alongside Owner and Member. When Lunos Cloud refuses
something,lunos organd/accountexplain it by its code, not its wording. An Admin trying an
Owner-only action is told that only an owner can, and whom to ask. The only owner of an
organisation is told which organisations, by name, to hand over first.lunos org --json
refusals now carryowner_requiredoradmin_requiredinstead offorbidden: scripts matching
forbiddenshould switch tocode;legacyCodeis kept for one release. The Terms and
the Privacy notice, with their versions and links, now come from Lunos Cloud instead of being built
into the app, and the last ones are kept so an offline start still works. Resend e-mail on the
Welcome screen sends the confirmation again and, if you ask too soon, says when to try again. -
Memory names where it's stored in plain words. Setup, settings,
lunos memory status,
/memoryand the status line say "On this computer" or "Team database: PostgreSQL". Each of them
also repeats what leaves your computer. Your config file is unchanged. -
Merged upstream opencode up to 1.19.3 (
/statusshowsbased on opencode 1.19.3). Lunos keeps
its own session sharing, update check and install script; upstream's removal of session sharing
and its OpenCode 1 update pinning are not included. -
Sharing no longer sends sessions to a service that has shut down. Upstream opencode closed its
share service (opncd.ai), which Lunos used when nothing else was set./sharenow uploads only
toenterprise.url; to share with your organisation's Lunos console, set"share": "cloud"and
runlunos login. Without either, nothing is uploaded and Lunos says so, in the terminal, the CLI
and the desktop app; with"share": "auto"you see it once per project.lunos importrefuses
opncd.ai links with a clear message, and the GitHub action logs it and carries on. Share links
from your own console orenterprise.urlimport as before.
Fixed
-
Claude Code's own commands appear in
/claudeautocomplete again with Claude Code 2.1.292.
That release lists them in its answer to Lunos's opening request instead of in its first session
message, so Lunos found none. Older Claude Code releases still work. -
The memory setup check says what went wrong. A failed check no longer stops at "Memory
remember failed:" with nothing after it. It names the step that failed (for example extraction or
the embedding model), why, and what to do: choose anothermemory.modelwhen the model returns
invalid output, is rate limited or isn't allowed by your residency policy; check the network
when the embedding model can't be downloaded; free or fix the memory folder on a disk or
permission error; close the other Lunos when the database is locked. The wizard adds Details
(stage, error type, cause, model and log file) and Copy diagnostics, a block for a bug report
without your facts, keys or tokens.lunos memory check --jsonreturns the same fields, the
engine's output is kept in the memory folder'slogs/, andlunos memory statusshows where. -
In a run from source, the memory setup check runs in the opened project, not in the Lunos
checkout, so its test fact no longer lands in the checkout's memory. -
Settings and memory setup can save
{env:…}references such as{env:NEO4J_PASSWORD}.
Before, saving one failed, so a team database couldn't be set up from the wizard. -
Every published release notifies lunos.tech with the tagged CHANGELOG.md, and a daily check fails
when lunos.tech/changelog falls behind the latest release.
Last release: v1.18.50
Target ref: 2b283c0
Core
Improvements
56d98ddleave Claude Code's internal and removed /commands out (@pminev1)f1f28earead Claude Code's /commands from its initialize response (@pminev1)83fba96relayed server shapes: verification 200 { sent, remainingToday } and 409 already_verified; --json keeps legacyCode for one release (@pminev1)33bbe93a signed-in start never waits for GET /v1/legal (@pminev1)4ff59b6match the server branch's shapes (e0842eb): top-level code wins, owners named in the message, details.retryAfterSeconds (@pminev1)678dce1account client on the go-live contract: refusal codes, plan from /v1/account, Terms from /v1/legal, rate-limited Resend, Admin (@pminev1)84a22b1lunos org accept/decline take no --org; the signed-out test's HOME is cleaned up (@pminev1)9a384acOrganisations and roles docs, account docs, outbound calls, CHANGELOG (@pminev1)e975a1bpty tests for lunos org, /account roles and invitations, account deletion and Terms (@pminev1)d268ea5account and organisation client against lunoshq #13; fake lunoshq (@pminev1)f40e16cthe sign-in asked for at start leaves session sync off; nothing opens over the Welcome screen (@pminev1)bb74415docs for the account and for using Lunos without one; checks on the compiled build (@pminev1)48ca734the Welcome screen, /login, /logout and /account in the TUI (@pminev1)ee0fa39one sign-in for lunos login and the TUI; the official build's gate and its exemptions (@pminev1)1ad057fname the setup that actually enables sharing (@pminev1)e94cb35stop falling back to opncd.ai for sharing (@pminev1)38a7c4ano disk work on deletes with nothing queued; the TUI list shows the whole note (@pminev1)b1556f0deleting a session also deletes the prompts queued for it, from every peer file (@pminev1)7e445f9the session view asks to take over before the first prompt when a closed Lunos left prompts queued (@pminev1)c0b8838compare the resumed model itself; unit-test the login guard (@pminev1)fb75de2durable monitor queue with take-over, and the Sessions rail remembers its view (@pminev1)f385909Lunos plugin hooks on Claude Code and Codex sessions' own tool calls (@pminev1)9d82a44Lunos bridge for Claude Code and Codex sessions, with consent and a status line (@pminev1)593a6b4setup check drops a dev run's --cwd so it runs in the project (@pminev1)65232f4organisation templates read as written; explicit on-this-computer block for Move and the check; Move or Start empty in the CLI; no 'embedded' left in the UI (@pminev1)97d7783a failed ask rejection fails the stop; archived view keeps collapsed rows; footer focus by command (@pminev1)b9e65ebdocs (Where memory is stored, Memory templates), CHANGELOG, Compare wraps, Move runs in the project (@pminev1)73b5bf2memory check failures say which step failed, why and what to do (@pminev1)e73fc2e/models asking doesn't audit; Codex turns say "cost not reported" (@pminev1)f49b5c6/sessions Stop all and Clear list (archive, restorable), Unarchive, Delete archived, CLI and audit (@pminev1)db97117/models, /compact and /cost act on the Claude Code / Codex session (@pminev1)656f63eunit tests for storage words, templates, Postgres gate, probe and {env:} settings (@pminev1)aecbe9aswitching storage: Move my facts through the bundle (migrate --from-bundle) (@pminev1)63fb135Agent Monitor route, rail model, @ tags and keys (@pminev1)74f1ed0storage step in lunos memory setup, templates, test connection, setup endpoints (@pminev1)fbb96d4peer.prompt and the session prompt queue for the Agent Monitor (@pminev1)6d3614fPostgreSQL memory backend, vendor contract suite, storage labels and templates data (@pminev1)0a6543fsync release versions for v1.18.50d12161efeat(opencode): build variants from configured reasoning options (anomalyco#55854)e03feecsync release versions for v1.19.2bc7c890sync release versions for v1.19.1dfb56f7sync release versions for v1.19.0
Bugfixes
74b0394recorder, redaction and replay harness for real Claude Code / Codex fixtures (@pminev1)cfec8b9review fixes (no agent for external sessions, approvals never interrupted, shell/attachments refused, new sessions audited)3be0395fix(opencode): keep OpenCode 1 updates on 1.x using npm discovery (anomalyco#54904)d320177fix(opencode): discontinue session sharing (anomalyco#55718)
TUI
0ecf8ebload the memory modules lazily from the CLI, as memory-setup does (@pminev1)
Desktop
6241ae0Take over a closed Lunos's queued prompts from the row, without a new prompt (@pminev1)270a913side-by-side layout from 720px, wider default Sessions window, positive control for the session-route opening test (@pminev1)f5a429btranslate the Sessions window's monitor strings in all app locales (@pminev1)572a240Agent Monitor layout in the desktop/web Sessions window (English strings) (@pminev1)7e59676Stop all, Clear list, Undo, Show archived and Delete archived in the Sessions window (@pminev1)
Community Contributors Input
Thank you to 2 community contributors:
- @pminev1:
- 1.18.42 changelog section, release dispatch to the website, daily drift check
- PostgreSQL memory backend, vendor contract suite, storage labels and templates data
- peer.prompt and the session prompt queue for the Agent Monitor
- storage step in lunos memory setup, templates, test connection, setup endpoints
- Agent Monitor route, rail model, @ tags and keys
- switching storage: Move my facts through the bundle (migrate --from-bundle)
- TUI storage step: cards, Compare, Help me choose, templates, test connection, Move or Start empty; plain labels
- wizard storage step tests (cards, Compare, Help me choose, Postgres, residency, switching, no Docker)
- unit tests for storage words, templates, Postgres gate, probe and {env:} settings
- /models, /compact and /cost act on the Claude Code / Codex session
- monitor docs, changelog, row layout and narrow overlay
- /sessions Stop all and Clear list (archive, restorable), Unarchive, Delete archived, CLI and audit
- /models asking doesn't audit; Codex turns say "cost not reported"
- memory check failures say which step failed, why and what to do
- docs (Where memory is stored, Memory templates), CHANGELOG, Compare wraps, Move runs in the project
- a failed ask rejection fails the stop; archived view keeps collapsed rows; footer focus by command
- load the memory modules lazily from the CLI, as memory-setup does
- organisation templates read as written; explicit on-this-computer block for Move and the check; Move or Start empty in the CLI; no 'embedded' left in the UI
- setup check drops a dev run's --cwd so it runs in the project
- Stop all, Clear list, Undo, Show archived and Delete archived in the Sessions window
- Lunos bridge for Claude Code and Codex sessions, with consent and a status line
- headless tests for the Agent Monitor's TUI scenarios; rail keeps its 40% width
- Lunos plugin hooks on Claude Code and Codex sessions' own tool calls
- Agent Monitor layout in the desktop/web Sessions window (English strings)
- translate the Sessions window's monitor strings in all app locales
- changelog and docs for the Sessions window's monitor layout
- side-by-side layout from 720px, wider default Sessions window, positive control for the session-route opening test
- Merge upstream opencode v1.19.3 into Lunos
- durable monitor queue with take-over, and the Sessions rail remembers its view
- Take over a closed Lunos's queued prompts from the row, without a new prompt
- recorder, redaction and replay harness for real Claude Code / Codex fixtures
- compare the resumed model itself; unit-test the login guard
- the session view asks to take over before the first prompt when a closed Lunos left prompts queued
- deleting a session also deletes the prompts queued for it, from every peer file
- no disk work on deletes with nothing queued; the TUI list shows the whole note
- stop falling back to opncd.ai for sharing
- name the setup that actually enables sharing
- one sign-in for lunos login and the TUI; the official build's gate and its exemptions
- the Welcome screen, /login, /logout and /account in the TUI
- docs for the account and for using Lunos without one; checks on the compiled build
- the sign-in asked for at start leaves session sync off; nothing opens over the Welcome screen
- account and organisation client against lunoshq #13; fake lunoshq
- pty tests for lunos org, /account roles and invitations, account deletion and Terms
- Organisations and roles docs, account docs, outbound calls, CHANGELOG
- lunos org accept/decline take no --org; the signed-out test's HOME is cleaned up
- carry the site's security advisories in CHANGELOG.md
- account client on the go-live contract: refusal codes, plan from /v1/account, Terms from /v1/legal, rate-limited Resend, Admin
- match the server branch's shapes (e0842eb): top-level code wins, owners named in the message, details.retryAfterSeconds
- a signed-in start never waits for GET /v1/legal
- relayed server shapes: verification 200 { sent, remainingToday } and 409 already_verified; --json keeps legacyCode for one release
- --json callout wording: scripts matching forbidden should switch to code; legacyCode kept for one release
- read Claude Code's /commands from its initialize response
- leave Claude Code's internal and removed /commands out
- Release 1.18.51: changelog section
- @pminevp: