Skip to content

Releases: oratis/LISA

Lisa v0.19.0

Choose a tag to compare

@github-actions github-actions released this 15 Jul 08:18
7aa7103

Lisa v0.19.0

The "put a record on" release. The headline is a gramophone in the Room
click it and her space fills with music, from a small in-client player with a
real playlist. Plus a nav-launcher tidy-up.

Typecheck green · full test suite green (1018 tests) · no breaking changes.

✨ A gramophone in the Room (#256)

Design + a 7-point pro/con debate: docs/PLAN_GRAMOPHONE_v1.0.md.

  • The object. A pixel-art gramophone sits on the floor by the armchair.
    Click it and a music player slides up — same self-contained DOM/CSS as the
    rest of the Room, no browser window, no new deps. While it plays, the
    gramophone glows and drifts musical notes.
  • The player. Play/pause · prev/next · seek · volume/mute · a
    mood-filtered playlist (古典 / 轻音乐 / 经典, plus 我的 for your own
    files) · shuffle and repeat (off / all / one) · a gentle fade in/out ·
    and it remembers where you were (track + position + volume) between visits.
    The now-playing footer credits each track's license.
  • Honest by design. It never autoplays (audio starts only from a tap), and
    it's a user affordance you operate in her room — not a readout of her mood.
    The glow/notes just reflect the real fact that sound is on.
  • Bring your own. Drop any *.mp3 into ~/.lisa/music/ and it appears
    in the playlist under 我的 / mine — her room can play your music.

Music & licensing. Ships 6 curated instrumental tracks (~19 MB, re-encoded
to 112 kbps), every one CC0 / public-domain / CC-BY — 2 classical (Chopin via
Musopen, Canon in D), 2 light (a lo-fi pair), 2 lounge. The three CC-BY tracks
(Kevin MacLeod / incompetech) show attribution in the player and in
music/CREDITS.md. No
standard-copyright audio is bundled.

Backend: GET /api/room/music merges the bundled manifest with your
~/.lisa/music/; tracks stream by opaque id with HTTP Range support (so
seeking works) and a path-traversal-safe resolver.

🔧 Also

  • Nav launcher locked to a clean 3×3 and Mail moved back to a sidebar card
    (#253); README brought up to date (#254, #255).

Notes

  • No breaking changes; soul / mood / heartbeat / Reve untouched. The gramophone
    is a read-only user affordance layered onto the existing Room.

Lisa v0.18.1

Choose a tag to compare

@github-actions github-actions released this 15 Jul 03:36
644bb39

Lisa v0.18.1

A hardening patch on the desire-evolution arc that v0.18.0 shipped — two
review follow-ups so a closed desire truly stays closed, and so intra-session
focus can't latch onto a stale conversation after a restart.

Typecheck green · full test suite green (1014 tests, 1013 pass) · no breaking
changes.

🔧 Fixes

A closed desire actually stays closed (#251)

v0.18.0's desire_close was a soft close — it only flipped actionable off,
which is indistinguishable from a merely dormant wish. So closed desires kept
coming back into reflection's "revise or close these" block and could be
re-closed on every pass (duplicate [DESIRE_CLOSED] journal noise), and the
list she was asked to tend never actually shrank.

  • Persisted closed marker. desire_close now records a distinct closed
    state (kept on disk for the record + git history) and is idempotent — an
    already-closed desire is a no-op, so no duplicate journal / progress entries.
  • Clean re-open. Closing now preserves heartbeatPrompt / pursuit, so
    a later desire_revise that makes it actionable again restores her
    auto-pursuit intact (previously the prompt was silently dropped).
  • Closed desires are filtered out of the reflector's block (the list finally
    shrinks) and are never surfaced as her current / focused desire — in the
    room, the island ping, or lisa status.

Intra-session focus survives a restart (#251)

The "what the conversation is about" focus was gated on the process idle clock,
which reads fresh immediately after a launchd restart — so a stale resumed
chat could pin a focus onto an old topic for up to 15 minutes. It's now gated on
the last real user message (reset across restarts), so focus only applies
while the conversation is genuinely live.

📝 Notes

  • Soul / mood / heartbeat / Reve are untouched; existing desire files round-trip
    byte-stable (the closed: line only appears once a desire is actually closed).
  • New store tests cover the closed-marker round-trip, heartbeatPrompt
    retention, idempotent re-close, and re-open clearing closed.

Lisa v0.18.0

Choose a tag to compare

@github-actions github-actions released this 15 Jul 03:29

Lisa v0.18.0

The "her wish finally moves" release. v0.17 gave web conversations the power
to trigger reflection (PR1 of the desire-evolution plan); v0.18 completes the
arc — Lisa's desires can now evolve, close, and follow the conversation
instead of only ever piling up. Plus a reworked 九宫格 nav with real Mail and
Settings homes.

Typecheck green · full test suite green (1011 tests, snapshot refreshed) · no
breaking changes.

✨ Desire evolution — the arc completes (PRs 2–4)

Root cause of "the wish never changes no matter what we talk about" was three
independent gaps (docs/PLAN_DESIRE_EVOLUTION_v1.0.md).
v0.17 closed the first (web conversations now reflect, #242). v0.18 closes the
rest:

Reflection can revise & close desires, not just append (#249)

Reflection is the path that turns a conversation into a desire — but it could
only desire_add, and it was never shown the desires Lisa already had, so it
appended near-duplicates blind and the set only grew. Now:

  • Reflection sees its own desires (a compact list in the reflector prompt).
  • desire_revise — read-modify-write by slug; only supplied fields change,
    an undefined never wipes an existing value, bornAt/slug are immutable,
    and it throws (never silently creates) on an unknown slug.
  • desire_close — a soft close: actionable off + a [CLOSED] progress
    note + a [DESIRE_CLOSED] journal line. The file is retained and
    git-tracked
    — reversible, nothing destroyed. This is the guardrail that lets
    reflection prune without violating soul sovereignty.

The surfaced desire tracks what's actually active (#250)

The "current desire" ticker read desires.find(d => d.actionable) over
fs.readdir order — an arbitrary static pick. Now pickCurrentDesire prefers
actionable desires and, within those, the most recently active (authored or
pursued), falling back to most-recently-born. Because the key is a stored
timestamp, the pick is stable between real events and only moves when something
actually happens.

…and follows the conversation, turn by turn (#248)

The finest-grained version: when a conversation is live and clearly about one
of her desires, the surfaced desire is that one. A pure lexical-overlap
pickFocusedDesire (no per-turn LLM call, no persisted state, display-only) —
cross-lingual (latin tokens + CJK bigrams, so it works in Chinese too),
behind a 15-minute freshness gate, and strict: a weak (< 2 shared tokens) or tied
match returns null and falls back to the recency pick, so it can never invent
focus
.

✨ Web — 九宫格 nav with Mail + Settings (#245)

The left-rail nav is now a tile grid with unified line-SVG icons, growing two
real destination views:

  • Mail — reuses the /api/mail/* endpoints and the guided connect modal from
    v0.17, and adds per-account enable/disable/remove plus a "needs-you" badge.
  • Settings — API-key management (/api/config/*, localhost-only), and the
    Proactive-autonomy and Compact-mode switches, relocated out of the sidebar
    footer.

The Knowledge (kb) tile is retained, so the grid holds all ten destinations.

🛡️ Review hardening

Every PR was reviewed before merge; the fixes folded in:

  • desireActivity no longer aborts lisa status (#250) — it built file paths
    (which run assertSafeSlug) outside its try/catch, so a stray unsafe-named file
    (e.g. a macOS ._x.md AppleDouble in the git-synced soul dir) rejected the whole
    scan. /api/island/ping swallowed it; lisa status didn't. Fixed + regression
    test; plus a deterministic tie-break so an exact recency tie can't fall back to
    readdir order.
  • Locked the desire revise/close read-modify-write (#249) under withSoulLock,
    matching the other soul RMW paths — now that web idle-reflect can race a CLI
    reflect on the same slug.
  • Skip desireActivity's fs.stat on an island-ping focus hit — the ??
    short-circuits the recency pick, so its per-desire stat work is only done when
    actually needed.

📝 Notes

  • No breaking changes; the desire files stay plain Markdown, closing is soft +
    reversible, and focus is display-only (it chooses which existing desire to show,
    never creates one).

Lisa v0.17.0

Choose a tag to compare

@github-actions github-actions released this 15 Jul 01:42

Lisa v0.17.0

The "legible and connected" release. v0.16 gave Lisa a life inside her Room;
v0.17 makes the parts you actually read and touch every day behave: her replies
render as real Markdown instead of raw ###/**/```, connecting a
mailbox is a guided, verified flow instead of a bare form, and — the big one
web conversations finally evolve her desires (they never did before). Plus
the lisa mail CLI works again, and she stands centered on the rug.

Typecheck green · full test suite green (984 tests, snapshot refreshed) · no
breaking changes.

✨ What's new since v0.16.0

Web — Lisa's Markdown renders as styled HTML (#238)

Lisa emits standard Markdown, but the web client dropped her replies in via
textContent, so every ### / ** / - / ``` / table showed up as a
literal symbol. A new source-injected renderMarkdown() (src/web/md-render.ts)
now renders headings, bold/italic, inline + fenced code (with a language label +
copy button), nested lists, blockquotes, rules, tables, and links restricted to
http/https/mailto. It's wired into every surface that shows her prose — the
streaming chat bubble (re-rendered once per animation frame), history bubbles, and
the idle reflection cards on the Room and Island.

Escape-first by design: her output is model-generated and untrusted, so every
text run is HTML-escaped before any tag is introduced — no javascript:/data:
hrefs, no attribute breakout, no raw-HTML passthrough (19+ unit tests cover the
XSS and link-scheme surface).

Mail — guided connect modal + verify-before-save (#234)

Connecting a mailbox used to drop you in front of a bare Email / App-password /
IMAP-host form with no hint what an "app password" is, and the web endpoint stored
whatever you typed without checking it — so a wrong password produced a
silently empty digest. Now both ends explain themselves:

  • A provider picker (Gmail / iCloud / QQ / 163 / Outlook / Other) with
    per-provider numbered setup steps and a prominent "Open App Passwords ↗"
    link; labels, placeholders, and IMAP host adapt to the provider, and typing an
    address auto-detects it from the domain.
  • The backend probeAccount() does a single-message fetch to confirm the
    credentials actually sign in, and POST /api/mail/connect verifies before
    storing
    — returning a plain-language hint ("Gmail rejected the sign-in. Use a
    16-character app password…") instead of persisting an unusable mailbox.

Still read-only, still IMAP + app-password.

🔧 Fixes

  • lisa mail connect works again (#233). mail was missing from the CLI's
    raw-subcommand set, so --email / --pass / --client-id were rejected as
    "unknown flag" and --provider / --host / --port were silently swallowed as
    global flags — the whole lisa mail connect command was unusable in 0.16.0.
    Its trailing flags now reach the handler verbatim, while autostart /
    heartbeat keep parsing their own recognized global flags.
  • Web conversations now evolve Lisa's desires (#242). reflectOnSession — the
    only automatic way a conversation turns into or updates a desire — was wired to
    the CLI and channel router only; the web POST /reflect endpoint existed but no
    client ever called it, so web chats never touched her desires at all. A
    debounced reflection scheduler now reflects once after a quiet stretch with new
    user input (default 5 min), independent of the hour-long "dream" idle.
  • Lisa stands centered on the rug (#228). Re-anchored #lisa-wrap so she's
    centered and grounded on the rug in both room themes, in every pose.

🛡️ Review hardening

Every PR in this release was reviewed before merge; three latent defects were
caught and fixed as part of it:

  • Markdown renderer infinite loop (#238). The fenced-code opener was stricter
    than the fence detector, so an ordinary ```c# / ```c++
    / ```objective-c block wedged the render loop forever and froze the
    tab mid-stream. The opener now accepts any info string (first token = lang), with
    a regression test and a forward-progress guard.
  • IMAP session leak (#234). probeAccount closed the connector when the 20s
    timeout won the race — while the connection was still opening, so the close was a
    no-op and the later-succeeding session leaked. Cleanup now chains onto the probe
    actually settling.
  • CLI flag regression (#233). The first cut of the mail fix also swallowed
    autostart install --port/--channels/--imessage and heartbeat run --model;
    the two behaviors are now split so both work.

📝 Notes

  • No breaking changes; soul / mood / heartbeat / Reve are untouched.
  • The web Markdown renderer is the same function in the browser and the unit
    tests (source-injected via .toString()), so what's tested is what ships.

Lisa v0.16.0

Choose a tag to compare

@github-actions github-actions released this 14 Jul 04:44
cfe6264

Lisa v0.16.0

The "she has a life now" release. v0.15 gave Lisa a home (the Room); v0.16
gives her a life inside it — she looks up when you arrive, drifts through
her own at-home activities, changes into pajamas at night, and leaves notes on
the desk. Every room widget now closes its loop inside the app (no more
stray browser window), and the room is re-decoratable. Alongside it: a
Haiku 4.5 provider fix and a website ops runbook.

Typecheck green · full test suite green (920 tests, snapshot refreshed) · no
breaking changes.

✨ What's new since v0.15.0

Lisa Room v2 — a living space, not just a wallpaper (#225)

Design + deep research on BSide (miHoYo's Olivia Lin) + a pro/con debate:
docs/PLAN_ROOM_v2.0.md. The through-line: BSide buys its
"aliveness" with photoreal rendering but leaves the simulation axis empty
(3 idle scenes, no clock, no weather). Lisa can't win on pixels-vs-photoreal, so
v2 doubles down on the axis BSide left open — a life driven by her real self.

  • In-client interactions — no browser. Every room widget ("Talk to her",
    clicking Lisa, the bookshelf, the letter) closes its loop inside the same
    WKWebView via a same-origin {type:'lisa-room', action, prefill} bridge to
    the parent GUI (lisaShowView / composer prefill). window.open is gone —
    it used to spawn a browser window because the Room iframe couldn't see the
    Island's native bridge. The service-worker shell also went network-first,
    so a GUI update shows on the next refresh instead of the second.
  • Presence beat. She looks up and meets your eyes when you open the room,
    refocus the window, or hover — BSide's single most-praised "aliveness" moment,
    and cheap in pixel art.
  • Autonomous ambient life. When idle she drifts on her own through at-home
    activities — reading, tea, headphones, a stretch, gazing out the window —
    time-of-day weighted. Honesty held: captions stay neutral and she never
    performs work she isn't doing or a mood she doesn't have; any real signal
    (a real working-* mood / thinking / Reve) takes over immediately.
  • The room remembers her day. Her ★ while-you-were-away notes pile up on
    the desk (with a count badge), she changes into pajamas at night, and the
    bookshelf is clickable — it surfaces her real current_desire.
  • 换景 — re-decorate. A second full room theme (a warm plant-filled
    sunroom) and a ❖ switcher; the choice persists. Themes are data-driven, so
    adding one is three images + a line.
  • A slimmer, more feminine figure. The full-body sprite was rebuilt with a
    slender hourglass silhouette (defined waist, fitted hoodie); every pose —
    idle, look-up, sit, sleep, read, tea, stretch, listen, window-gaze, pajamas —
    regenerated from one anchor for consistency, and sit/sleep switched to
    contain so no pose is ever stretched.
  • Perf. The parallax loop pauses when the room is hidden; the letter pile
    is capped.

All eleven+ character poses and both room themes are generated pixel art
(gemini-2.5-flash-image via an anchor → keyframes → chroma-key + foot-anchor
pipeline, cf. Ludo.ai / chongdashu/ai-game-spritesheets).

Providers — gate output_config.effort by model (#218)

Claude Haiku 4.5 hard-400s on output_config.effort. Subagents and
idle/reflect calls default to effort "low", so every one of them routed to
Haiku failed outright. modelSupportsEffort() now drops the param for the Haiku
family so those calls succeed, with tests covering the gate and the matcher.

Docs — website ops runbook (#226)

docs/WEBSITE_OPS.md: Cloudflare deploy, cache, and fonts/OG playbook for
meetlisa.ai.

🔧 Notes

  • No breaking changes; soul / mood / heartbeat / Reve are untouched (the Room
    is a read-only projection of real state).
  • Room v2 was developed as a stack of four PRs (#221 core, #222 lived-in,
    #224 themes, #225 figure); because v0.15's Room v1 was squash-merged, the
    stack was consolidated into one clean integration (#225) onto latest main.

Lisa v0.15.0

Choose a tag to compare

@github-actions github-actions released this 12 Jul 13:03
6f66f94

Lisa v0.15.0

The "she has a home now" release. The headline is the Lisa Room — an
ambient pixel-art living space where the full-body Lisa lives, every layer a
read-only projection of her real state. Alongside it: ElevenLabs-first voice
transcription and a hardened Anthropic relay for Cloud Run.

Typecheck green · full test suite green (915 tests) · no breaking changes.

✨ What's new since v0.14.0

Lisa Room — an ambient, state-driven living space (#214)

  • GET /room + a ⌂ Room tab in the GUI (lazily-loaded iframe): a cozy
    pixel room rendered as a layered DOM/CSS 2.5D diorama — no canvas, no WebGL,
    no bundler, zero new deps, same self-contained pattern as the Island.
  • Everything is driven by her real state (read-only — soul / mood /
    heartbeat / Reve untouched): mood → pose (sitting at her glowing laptop while
    working-*, curled asleep while napping or Reve-dreaming, standing idle
    with breathing + blink otherwise), chat_start → pulsing monitor glow,
    Reve → the room falls into night with floating Z's, and her ★
    while-you-were-away note appears as a glowing letter on the desk.
  • Full-body animatable spritesheet (idle blink frames / sit / sleep),
    generated via an anchor → keyframes → chroma-key + foot-anchor pipeline —
    she finally stands on the floor instead of floating as a bust.
  • Day / dusk / night crossfade by her local clock; weather-flavored moods
    bring rain/snow particles; fireflies at night.
  • Review hardening: ambient particles only rebuild when the mode actually
    changes, the parallax loop idles when the tab is hidden (and stays off under
    prefers-reduced-motion), honest state mapping (sleepy ≠ asleep, a
    raincoat doesn't make it rain indoors), and in-GUI "Talk to her" switches
    back to chat in place instead of spawning a duplicate tab.
  • Design + build notes: docs/PLAN_ROOM_v1.0.md.

Voice — ElevenLabs-first transcription (#174)

  • Transcription now prefers ElevenLabs Scribe (ELEVENLABS_API_KEY),
    falling back to OpenAI Whisper; the no-key error names both providers.
  • Composer + / 🎙 glyphs became line-style SVG icons matching the function bar.

Infra — Anthropic reverse-proxy relay for Cloud Run (#209)

  • packaging/gcp-relay/: a ~110-line zero-dep Node relay forwarding /v1/*
    (streaming included) to api.anthropic.com, for reaching Claude reliably
    from behind flaky networks by pointing ANTHROPIC_BASE_URL at it.
  • Key-swap gate: the real Anthropic key lives only in Secret Manager and is
    injected server-side; clients present a revocable RELAY_TOKEN instead.

Docs

  • Lisa Pocket (iOS) surfaced in the README, extracted OSS repos cross-linked,
    and an App Store 4.1(a) response kit (#213).
  • The no-clone gh api Homebrew-tap bump used for v0.14.0 is now the
    documented path (#212).

Install / update

  • Mac: download Lisa-Suite-v0.15.0.dmg below, or let the in-app updater pull it.
  • CLI: npm i -g @oratis/lisa@0.15.0 (or the lisa-*-bundle tarballs below).
  • iOS: via TestFlight (ships separately from this release).

Lisa v0.14.0

Choose a tag to compare

@github-actions github-actions released this 02 Jul 05:34
f91e90e

Lisa v0.14.0

The App-Store-readiness release. Since v0.13.0, the iOS companion (Lisa Pocket)
went from "connects and chats" to a polished, submission-ready app: it now pairs
reliably off Wi-Fi, never leaves a chat in a dead end, and has a redesigned home /
chat / agents surface. Alongside it: a hardened LISA Cloud M0, and a small,
model-appropriate provider tune-up.

Typecheck green · full test suite green · swift build green · no breaking changes.

✨ What's new since v0.13.0

iOS — reachability you can trust

  • Tailscale-first pairing + honest errors (#202): the pairing QR/flow prefers a
    reachable address, and connection failures now say what went wrong instead of
    masking everything behind a -999 "cancelled".
  • Off-Wi-Fi recovery (#203): a "same Wi-Fi?" banner when a paired LAN IP is
    unreachable on cellular, an "Anywhere (Tailscale)" toggle, and one-tap switch to
    LISA Cloud
    when your Mac isn't reachable.
  • The Mac backend now binds LAN-reachable by default, token-gated (#169), and the
    menu bar has native "Pair iPhone…" QR pairing (#171, #173) — no terminal needed.

iOS — chat that never dead-ends

  • Retry / Stop / empty-turn handling (#206): an empty or failed turn becomes a
    tappable Retry instead of a silent "(no response)"; Stop cancels a
    streaming turn (and aborts the agent server-side); clearer error vs. empty states.
  • Full UI redesign: card-dashboard Home + 4-tab IA (#196, #198), chat bubbles
    with code blocks / tool chips / typing / history (#194, #200), needs-you-first
    Agents action cards (#199), onboarding polish (#195), accessibility pass (#191),
    and haptics + toasts on mutating actions (#190).

iOS — App Store submission

  • Sign in with Apple gated off for v1 to avoid the 5.1.1(v) in-app-account-deletion
    requirement while the cloud is still single-tenant (re-enable via LISA_ENABLE_SIWA).
  • TestFlight pipeline fixes: build number must be < 2³² (date +%s, not a 12-digit
    stamp), MARKETING_VERSION must be ≥ the ASC version, and CFBundleVersion is now
    stamped into the generated Info.plists — so uploads actually appear in TestFlight.
  • Privacy policy page (en + zh-CN) for submission (#165).

LISA Cloud (M0)

  • Connect Lisa Pocket to an HTTPS cloud URL, not just a LAN Mac (#161).
  • Durable soul via a GCS volume at /data (#162); provider-aware birth/run gates
    with a GLM-powered demo (#158); Sign-in-with-Apple env plumbing through
    deploy.sh (#177).

Providers — model-appropriate tuning

  • 1-hour prompt caching on the stable system prefix (soul + skills + memory) so it
    stays warm across think-time gaps instead of a cold re-write every 5 minutes;
    conversational tail stays 5-minute. LISA_CACHE_TTL=5m opts back out.
  • Thinking-effort lever (output_config.effort): dispatched subagents default to
    low (cheap parallel work); LISA_EFFORT overrides globally. See
    docs/PLAN_MODEL_TUNING_v1.0.md for the plan + debate (most OpenClaw-style knobs
    were dropped — 1M context is already native on Sonnet 4.6, the rest are Opus/Sonnet-5
    only).

Install / update

  • Mac: download Lisa-Suite-v0.14.0.dmg below, or let the in-app updater pull it.
  • CLI: npm i -g @oratis/lisa@0.14.0 (or the lisa-*-bundle tarballs below).
  • iOS: via TestFlight (build ships separately from this release).

Lisa v0.13.0

Choose a tag to compare

@github-actions github-actions released this 23 Jun 15:27

Lisa v0.13.0

A small, mostly-infrastructure release on top of v0.12.0. The headline features —
the multi-agent control plane (see every agent; command managed agents;
PTY-spawn and adopt real claude/codex sessions) and the iOS companion
— already shipped across v0.11.x–v0.12.0. This release packages the iOS
TestFlight delivery pipeline and cuts a clean, current build to install.

824 tests, typecheck green, swift build green, no breaking changes.

✨ What's new since v0.12.0

iOS — TestFlight release pipeline

  • packaging/ios-companion/testflight.sh + .github/workflows/release-ios-testflight.yml:
    archive with xcodebuild, upload to App Store Connect via an API key — so Lisa
    Pocket can ship to TestFlight from CI.
  • packaging/ios-companion/RELEASE.md documents the signing/credentials setup.

📦 Already in v0.11–v0.12 (recap, for anyone upgrading from an older build)

If you're coming from an older install (e.g. v0.8.x), you also get everything
from the control-plane line:

  • See every agent — GUI sidebar, island, and Mac menu bar show all agents
    (claude-code / codex / managed / …) with live progress: turns, tokens, last
    tool·file, ⚠ pending-permission, ✗ error.
  • Command managed agents — delegate a task, then approve/deny each mutating
    step, send follow-ups, cancel.
  • PTY agents (flagged LISA_PTY_AGENTS=1) — spawn real claude/codex
    under a pseudo-terminal, and adopt idle sessions you started yourself via
    claude --resume (guarded so a live session is never corrupted).
  • iOS companion (Lisa Pocket) — pair by QR, watch + steer agents, APNs push,
    widgets, Live Activity.

Install

  • CLI / backend: npm install -g . from the repo (or the published package)
    lisa serve --web.
  • Mac app: the notarized Lisa-Suite-v0.13.0.dmg is built by CI on the tag;
    drag Lisa.app to /Applications. (The app spawns lisa serve --web from your
    PATH.)

Lisa v0.12.0

Choose a tag to compare

@github-actions github-actions released this 20 Jun 06:53

Lisa v0.12.0

Lisa Pocket goes real. The iOS companion stops being a skeleton and becomes a
proper phone app — pair by QR, watch and steer your Mac's agents, get pushed when
something needs you — backed by real APNs delivery. Everything builds on the
v0.11 backend control plane; this is the native surface on top of it.

823 tests (804 → 823), typecheck green, no breaking changes.

✨ Highlights

Lisa Pocket — the iOS companion app

  • Pair by QR. lisa pair shows a QR on your Mac; the app scans it with the
    camera and mints a per-device token (revocable, hash-only on disk).
  • Watch & steer. Live agent roster (SSE, auto-reconnect with backoff +
    foreground resync), chat with a live mood portrait (real server art), and a
    dispatch ledger view with per-entry log tails.
  • System surfaces. A home-screen Widget (active / stuck agent counts),
    lock-screen accessories, and a Live Activity for a pinned agent that
    refreshes remotely over APNs — progress on your lock screen without opening
    the app.
  • The rest of her, read-only on your phone. Soul / Memory / Skills / Tools
    inspection, a Reve tab (recap · "while you were away" · desires · advisor),
    and a Sense tab (consent — revoke-only — + recent events).
  • Private by default. Optional Face ID / passcode lock; lisapocket://
    deep-links route notification taps to the right session/tab; paired-devices
    list in Settings.

Push notifications (APNs)

  • Real APNs delivery with token auth — done / error / permission agent
    transitions push to your phone. Inert without a push key (no key → no-op, no
    errors), so it ships safely.
  • ntfy notifications now deep-link to the originating session.

CLI

  • lisa pair [--host H] — show a QR to pair a phone with a running
    serve (localhost), minting a per-device token.

Fixes

  • Codex resume-adopt now refuses explicitly instead of silently downgrading.
  • Plus the v0.11.1 first-run polish (single title bar, never-silent boot) carried
    forward.

Notes

  • The push path is opt-in and inert without an Apple push key — nothing tries
    to reach Apple until you provision one.
  • iOS surfaces (Widget / Live Activity / camera / Face ID) build with Xcode from
    packaging/ios-companion/; they can't be compile-verified in this repo's CI
    (no Xcode), but the backend halves (pairing, push, dispatch, SSE) are unit-tested.

Install

npm install -g @oratis/lisa
lisa serve --web
lisa pair            # then scan the QR with Lisa Pocket

Mac app: download Lisa-Suite-v0.12.0.dmg from the GitHub Release.

Lisa v0.11.1

Choose a tag to compare

@github-actions github-actions released this 19 Jun 09:08

Lisa v0.11.1

First-run polish for the Mac app. Three things that bit a fresh install of
the v0.11.0 DMG — fixed. No new features, no breaking changes.

🐞 Fixes

  • Title bar no longer shows "Lisa Lisa". The hosted page draws its own
    branded title strip, and the native macOS window also showed its title under
    the transparent titlebar — two "Lisa"s. The native title is now hidden
    (titleVisibility = .hidden); only the page's branded bar shows.

  • The first-run UI never dead-ends silently. If the backend isn't reachable
    or onboarding hits a snag, the boot used to catch { return } and leave a
    blank, unresponsive window with no explanation. Now:

    • a banner surfaces any uncaught error or unreachable backend instead of
      nothing — e.g. "Cannot reach Lisa backend on localhost:5757. Start it:
      lisa serve --web (install once: npm i -g @oratis/lisa). Retrying…"
      ;
    • startupGate retries /api/config/status so a page that loads a hair
      before the backend's routes are ready still reaches onboarding;
    • the API-key overlay (SET·API·KEY) and birth ritual reliably appear
      for a fresh user, and birth errors are shown rather than swallowed.

Note on setup

Lisa.app is a thin client — it loads the chat from a local backend. If you only
downloaded the DMG, install the backend once:

npm install -g @oratis/lisa     # or: brew install oratis/tap/lisa

Lisa.app auto-starts lisa serve --web on launch (and shows install guidance if
it can't). First launch then walks you through the API key + birth ritual.

Install

npm install -g @oratis/lisa     # CLI + backend

Mac app: download Lisa-Suite-v0.11.1.dmg from the GitHub Release.