Skip to content

v1.18.51

Choose a tag to compare

@github-actions github-actions released this 20 Oct 12:10
· 0 commits to 2b283c0d45e561033727470dfa5326a5040e9dd7 since this release

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". --json prints results and refusals for scripts, and --yes skips the
    confirmation. /account now 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 type delete to 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, /logout and /account (plan, organisations, devices, sign out everywhere, delete the
    account) work at any time, and /settings has an Account entry. Self-hosted, offline and CI use
    need no account: managed "auth": { "required": false }, an organisation's own cloud.issuer,
    LUNOS_OFFLINE=1, lunos run, non-interactive terminals, CI=true and builds from source skip
    it and contact no Lunos service. In CI, cloud features take a token from LUNOS_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 @2 or @
    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, and t in 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 delete are written to the audit log as session.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 list shows the same line. Change your
    answer in /settings → External sessions or with lunos external share. external.share.*
    chooses what's shared, and an organisation can lock it. Your ~/.claude and ~/.codex settings
    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. Press c to 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 .env file, 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 --yes and --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, /models lists 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. /compact has the tool compact its own
    session, and /cost shows 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 the hooks in 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 refuses rm -rf refuses 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 with external.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 (bind dialog.sessions.stop_all and
    dialog.sessions.clear in tui.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] and lunos session unarchive <id|--all>, each with --yes. Bulk actions are
    written to the audit log as session.stop, session.archive and session.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. /account shows 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 org and /account explain 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 carry owner_required or admin_required instead of forbidden: scripts matching
    forbidden should switch to code; legacyCode is 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,
    /memory and 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 (/status shows based 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. /share now uploads only
    to enterprise.url; to share with your organisation's Lunos console, set "share": "cloud" and
    run lunos 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 import refuses
    opncd.ai links with a clear message, and the GitHub action logs it and carries on. Share links
    from your own console or enterprise.url import as before.

Fixed

  • Claude Code's own commands appear in /claude autocomplete 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 another memory.model when 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 --json returns the same fields, the
    engine's output is kept in the memory folder's logs/, and lunos memory status shows 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

  • 56d98dd leave Claude Code's internal and removed /commands out (@pminev1)
  • f1f28ea read Claude Code's /commands from its initialize response (@pminev1)
  • 83fba96 relayed server shapes: verification 200 { sent, remainingToday } and 409 already_verified; --json keeps legacyCode for one release (@pminev1)
  • 33bbe93 a signed-in start never waits for GET /v1/legal (@pminev1)
  • 4ff59b6 match the server branch's shapes (e0842eb): top-level code wins, owners named in the message, details.retryAfterSeconds (@pminev1)
  • 678dce1 account client on the go-live contract: refusal codes, plan from /v1/account, Terms from /v1/legal, rate-limited Resend, Admin (@pminev1)
  • 84a22b1 lunos org accept/decline take no --org; the signed-out test's HOME is cleaned up (@pminev1)
  • 9a384ac Organisations and roles docs, account docs, outbound calls, CHANGELOG (@pminev1)
  • e975a1b pty tests for lunos org, /account roles and invitations, account deletion and Terms (@pminev1)
  • d268ea5 account and organisation client against lunoshq #13; fake lunoshq (@pminev1)
  • f40e16c the sign-in asked for at start leaves session sync off; nothing opens over the Welcome screen (@pminev1)
  • bb74415 docs for the account and for using Lunos without one; checks on the compiled build (@pminev1)
  • 48ca734 the Welcome screen, /login, /logout and /account in the TUI (@pminev1)
  • ee0fa39 one sign-in for lunos login and the TUI; the official build's gate and its exemptions (@pminev1)
  • 1ad057f name the setup that actually enables sharing (@pminev1)
  • e94cb35 stop falling back to opncd.ai for sharing (@pminev1)
  • 38a7c4a no disk work on deletes with nothing queued; the TUI list shows the whole note (@pminev1)
  • b1556f0 deleting a session also deletes the prompts queued for it, from every peer file (@pminev1)
  • 7e445f9 the session view asks to take over before the first prompt when a closed Lunos left prompts queued (@pminev1)
  • c0b8838 compare the resumed model itself; unit-test the login guard (@pminev1)
  • fb75de2 durable monitor queue with take-over, and the Sessions rail remembers its view (@pminev1)
  • f385909 Lunos plugin hooks on Claude Code and Codex sessions' own tool calls (@pminev1)
  • 9d82a44 Lunos bridge for Claude Code and Codex sessions, with consent and a status line (@pminev1)
  • 593a6b4 setup check drops a dev run's --cwd so it runs in the project (@pminev1)
  • 65232f4 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 (@pminev1)
  • 97d7783 a failed ask rejection fails the stop; archived view keeps collapsed rows; footer focus by command (@pminev1)
  • b9e65eb docs (Where memory is stored, Memory templates), CHANGELOG, Compare wraps, Move runs in the project (@pminev1)
  • 73b5bf2 memory 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)
  • 656f63e unit tests for storage words, templates, Postgres gate, probe and {env:} settings (@pminev1)
  • aecbe9a switching storage: Move my facts through the bundle (migrate --from-bundle) (@pminev1)
  • 63fb135 Agent Monitor route, rail model, @ tags and keys (@pminev1)
  • 74f1ed0 storage step in lunos memory setup, templates, test connection, setup endpoints (@pminev1)
  • fbb96d4 peer.prompt and the session prompt queue for the Agent Monitor (@pminev1)
  • 6d3614f PostgreSQL memory backend, vendor contract suite, storage labels and templates data (@pminev1)
  • 0a6543f sync release versions for v1.18.50
  • d12161e feat(opencode): build variants from configured reasoning options (anomalyco#55854)
  • e03feec sync release versions for v1.19.2
  • bc7c890 sync release versions for v1.19.1
  • dfb56f7 sync release versions for v1.19.0

Bugfixes

  • 74b0394 recorder, redaction and replay harness for real Claude Code / Codex fixtures (@pminev1)
  • cfec8b9 review fixes (no agent for external sessions, approvals never interrupted, shell/attachments refused, new sessions audited)
  • 3be0395 fix(opencode): keep OpenCode 1 updates on 1.x using npm discovery (anomalyco#54904)
  • d320177 fix(opencode): discontinue session sharing (anomalyco#55718)

TUI

  • 0ecf8eb load the memory modules lazily from the CLI, as memory-setup does (@pminev1)

Desktop

  • 6241ae0 Take over a closed Lunos's queued prompts from the row, without a new prompt (@pminev1)
  • 270a913 side-by-side layout from 720px, wider default Sessions window, positive control for the session-route opening test (@pminev1)
  • f5a429b translate the Sessions window's monitor strings in all app locales (@pminev1)
  • 572a240 Agent Monitor layout in the desktop/web Sessions window (English strings) (@pminev1)
  • 7e59676 Stop 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: