Skip to content

Releases: opencinna/cinna-desktop

0.5.2

Choose a tag to compare

@evgeny-l evgeny-l released this 30 Sep 21:02
134a2f2
  • fix(tests): the Jobs sidebar no longer serves a launch-time job list — useReadJobResult now fetches ['jobs'] only while a job page is open, so jobs created outside the renderer and running spinners show when Jobs opens. The desktop-apps offer asks settledByCredential() instead of comparing engine to 'opencode' in two places, bringing the kind-branch ratchet back to zero. The bare-agent removal spec reloads after adopting its folder over raw IPC, since the Chats list now holds the folder-agent list from launch. Unit, typecheck, hub, packaging, contract and the affected E2E specs pass.
  • test(e2e): composer-paste pastes a stubbed clipboard image on the new-chat screen and finds one timestamped PNG under tmp/pasted and a 64×64 thumbnail with Preview and Remove controls. Clicking the thumbnail opens the image preview without Download, and a text-only paste is let through without reading the clipboard image. Sending hands the scripted runtime exactly one image/png block, and the thumbnail under the sent message opens a preview that offers Download. The host clipboard is never touched: main's clipboard readers are stubbed inside the sandboxed app. The E2E notes gain the thumbnail and preview accessible names and the fake agent's image-capability gotcha.
  • feat(chat): pasting an image or a Finder-copied file into the composer attaches it — main reads the clipboard itself, file references win over image data, and a bare image is saved as a timestamped PNG under userData/tmp/pasted (cleared at startup) and allowlisted in the path guard before the usual pick-from-paths pipeline takes it, while text on the clipboard still pastes natively. Images get a preview kind: FilePreviewModal shows them fitted and settles only after decode, read through files:read-image (20 MB cap, MIME sniffed from the bytes) instead of the save dialog. Image attachments render as fixed 64×64 thumbnails in the composer, under user messages and under agent replies, from small files:read-thumbnail images made by a desktop-host nativeImage hook, loaded four at a time newest first and cached per profile; a failed load keeps the box with a broken-image icon. Composer badges and thumbnails open the same preview without Download, including path-held files on the new-chat screen through guarded by-path reads. Drops and pastes during an upload queue instead of vanishing, attach errors sit between + and Send so nothing moves, Cinna file reads time out after 60 s, and the undefined --color-bg-elevated on chips is replaced.
  • test(e2e): file-preview-formats folds an XML tree and jumps through Contents into a folded branch, renders an agent's HTML page with its CSS, fetched data and exact sandbox, and runs Open in browser from the right-click and ⋯ menus against a stubbed launch.
  • feat(chat): file preview renders XML as a collapsible, highlighted tree with a Contents panel four levels below the root (50 entries per parent, then a note), and falls back to highlighted source when the file is malformed or cut at 512 KB. HTML renders like a browser — scripts, remote content and assets beside an agent-folder file — in a sandboxed frame served over a cinna-preview: scheme, with a Rendered/Source toggle. The frame has no same-origin, popup or permission access, reads no dot or credential files, and reaches the browser only through a clicked top navigation, one tab per click. Open in browser joins the right-click menu, the preview's ⋯ menu and the attachment header, and badges are named Preview when a click previews.
  • test(e2e): desktop-apps-offer strips the developer's claude and codex from PATH wherever the offer is expected, and the ChatGPT connect now starts signed out and signs in through a scripted codex. Four new cases show no offer for a signed-in codex, a codex or claude on PATH, and an enabled API key, each with a control that brings it back.
  • fix(ui): the detected desktop apps offer shows only when nothing works yet — no signed-in claude or codex, no installed one whose login is unknown (a PATH copy counts), and no OpenCode default with an enabled credential. The default chat mode no longer keeps it up, so a working setup is not nagged about which engine or key its chats spend. The CLI checks run only when a credential has not already settled it, and a connect in flight or just failed keeps the banner.
  • fix(ui): the On Hover sidebar peeks from a band of half its width at the window's left edge after 60ms, instead of an 8px strip after 120ms. The band takes no pointer events, ignores moves with a button held or a menu or dialog open, and stops at the left edge of the chat or page column so a narrow window keeps the composer's controls clickable.
  • test(e2e): the Active block holds an unread chat under the pointer, returns it to its reopened group, and goes when switched off.
  • feat(chats): Show Active group in the renamed Chats list options menu draws running and unread chats in an Active block above Pinned, off by default. The block holds still under the pointer, during a row menu or rename, and a chat opened from it is revealed in its group when it leaves.
  • fix(ui): a sidebar revealed under a pointer that has not moved stays while the pointer is on it — the close now asks what is under the pointer before trusting the last move, which was over the chat.
  • test(e2e): sidebar-docking spec — On Hover from the button's right-click menu, a peek from the left edge that leaves the chat's width alone and hides once the pointer moves into the chat, Fixed from Settings docking it open, and the mode surviving a restart.
  • feat(ui): Sidebar docking — Settings → Features → Interface and a right-click on the sidebar button choose Fixed or On Hover. On Hover hides the sidebar and slides it in over the chat, without reflowing it, when the pointer rests at the window's left edge; it hides 300ms after the pointer leaves, and an open menu, dialog or a field being edited in it holds it. A click on the sidebar button docks it back to Fixed, and a reveal from code (Show in the Chats list) peeks it for 2.5s unless the pointer goes onto it.
  • test(e2e): desktop-apps-offer specs — the offer stays out of onboarding, Dismiss survives a restart, Use ChatGPT on a signed-in codex switches the Default runtime and chat mode, and a failed setup keeps the banner with its reason. The bare-mac spec plants stub apps in the real /Applications, checks that no system dialog appears, and connects ChatGPT against the real pinned Codex.
  • feat(agents): the new-chat screen offers a detected Claude Desktop or ChatGPT app — after onboarding, a dismissible banner names what is installed with one Use button per app. One click installs the pinned CLI, signs in only when needed (a ChatGPT app login in ~/.codex is reused) and makes that engine the Default runtime, moving the default chat mode off another engine when it has to. Detection reads only each bundle's Info.plist under /Applications and ~/Applications, so it raises no macOS dialog; CINNA_DESKTOP_APP_ROOTS overrides the roots for tests.
  • feat(auth): connecting a Cinna account no longer offers the opencinna.io cloud option — onboarding and Create account go straight to a labelled Server URL field, Enter connects and Connect waits for a URL. auth:register now defaults a missing hosting type to self-hosted instead of cloud.
  • fix(agents): a new agent's first message waits for its draft, and the New agent dialog stays up until Create returns — while the one-shot draft writes the prompts (up to two 90s calls), any new-chat composer with that agent picked, on its page or the main New chat screen, holds Send and Enter, keeps the text and says why in the placeholder and tooltip; example prompts go inert. The drafting ids live in ui.store, written by the draft hook's own callbacks, so the hold survives leaving the page. Escape, outside click, X and Cancel no longer close the dialog mid-call, which dropped the landing and the draft request. Mutations now default to networkMode 'always': they are all IPC to main, and TanStack's online mode paused them while the browser reported offline, leaving Create on "Creating…".
  • feat(agents): creating a local agent no longer asks which tool to build it with — Create closes the dialog onto the new agent's page in chat mode, and Add a folder lands in chat mode too. The in-app runtimes run the agent directly and the page header already has Open in, so the "Build it with…" step only covered the page with a copy of that button; a runtime that is not ready is the readiness strip's and Runs with panel's to explain. The localAgentsAutoOpen setting, the "Create and open in " label and its Settings → Agents checkbox go with it; an old stored row is ignored. The default tool now drives only the header's Open in.
  • feat(engines): log in to Claude Code or Codex from the app — Log in runs the vendor's own claude auth login / codex login on the binary and environment the turns use, which is usually Cinna's managed copy and not on PATH, so "run claude in a terminal" pointed at nothing. Offered on the composer's readiness strip, the Runs with panel and the build page, with Cancel (also during the download), a 10-minute timeout and the re-probed auth status as the verdict. The child's output is discarded and its stdin closed, so the CLI's paste-a-code fallback is never surfaced; a sign-in that does not finish offers the absolute terminal command with Copy.
  • test(bare-mac): a suite that installs the packaged app in a fresh macOS VM (Tart) with no Command Line Tools, Homebrew or uv, and fails on any system dialog it raises, named with the step it appeared in. make bare-mac-image builds the base from Cirrus Labs' vanilla image, which ships the tools and has Gatekeeper off, so both are undone and verified before the image is renamed into place. make bare-mac packages the working tree or installs APP=<.dmg|.zip|.app>, a DMG quarantined and Gatekeeper-assessed like a download. Three specs: first launch, Developer Tools...
Read more

0.5.1

Choose a tag to compare

@evgeny-l evgeny-l released this 29 Sep 06:41
fd5129d
  • fix(agents): agent settings tabs are built from settings sections, and the folder agent's tabs wrap instead of scrolling out of sight.
  • feat(chat): ⌘N starts a new chat, ⇧⌘N one with the same agent, and ⌘1–⌘9 start a chat with the agent bound to that digit on its Interface tab.
  • feat(jobs): a job row shows the unread result of its latest run like a chat row, cleared by opening that run's chat or the job page; opening a job's chat now marks its result read.
  • fix(schedules): a due schedule always runs, a busy agent leaves it for review, and re-running a job's task reopens its run so the outcome settles the run, task and schedule history.

0.5.0

Choose a tag to compare

@evgeny-l evgeny-l released this 28 Sep 06:53
ef3fb14
  • feat(schedules): a narrower schedule editor with a searchable timezone picker, a Prompt or Script card choice before a new agent schedule, and aligned fields. Schedule lists name the template, custom days and hours, or cron that a schedule uses.
  • feat(jobs): the Job page shows the prompt as a card with rendered markdown.
  • fix(ui): the agent and Job page tab strips draw their bottom line inside the strip, so it no longer shows a stray vertical scrollbar.
  • feat(schedules): compact schedule editor for Jobs and local agents, without the Job's details or an enable checkbox; schedule and timezone on one row, days and hours as badge multiselects, a cron cheatsheet behind (?), and the next time with a relative 'in 8 hours 32 minutes'. Lists turn a schedule on and off with a switch instead of the review dialog and refresh on open, and the Job page puts Prompt and Schedules in tabs.
  • test(chats): e2e spec for default-profile chats shared into a local profile, never the reverse, and hidden by the switch. Also pins that creating a local profile makes it active in main.
  • fix(auth): creating a local profile now activates it in main, not only in the renderer, which had kept serving the previous profile's data under the new name. A password set at creation counts as unlocked.
  • feat(chats): chats owned by the default profile are listed and fully usable in every profile, and a new chat bound to a local agent, mode or credential is stored in the default profile so it survives sign-out. Controlled by the "Show local agents and chats in all profiles" switch in Settings → Features → Interface, on by default; off keeps every chat in the profile it was started in.
  • feat(localdev): ask about local development only when the user clicks the sidebar's Local development icon, dropping the unprompted modal and the onboarding step. Not now closes without recording a decline, and Set up hands over to the Local Development page with any refusal shown inline.
  • test(chats): e2e spec for the Chats list row menu, the Pinned block and drag reordering.
  • feat(chats): right-click menu on Chats list rows with Pin, Rename, Open Folder and Delete, a Pinned block at the head of the list, and drag reordering within a group.
  • fix(credentials): count the kit-only .env precedence note in the kind-branch ratchet entry for ServiceCredentialsTab.
  • feat(chats): group the Chats list by agent or chat mode and by last-message day from a header menu, with start-chat buttons on group headers.
  • feat(preview): code block copy on right click.
  • feat(preview): better python code preview in the chat messages view.
  • chore(kit): pin the contract bundle to Core b06af0da now that the schedule guidance is merged upstream
  • docs(kit): describe local static_prompt and script_trigger scheduling in the bundled contract, with the pending Core patch
  • feat(schedules): edit and run static_prompt and script_trigger schedules locally, for agents and Jobs, with one catch-up run after missed times
  • feat(kit): bundle cinna-core's contract 1.5.0 as-is, with make kit-sync, conformance fixtures and runtime.engine as a preference
  • docs(ux): add a same-object-everywhere rule, widen the settings rule to settings-built surfaces, and give the UX reviewer a quick mode, cross-surface checks and a skip condition.
  • feat(credentials): unify credential rows across settings, agent attachments and the attach picker, with status and ownership icons, icon-only Manage links to Core, account headings as Name host, and Move up removed.
  • feat(credentials): deliver credentials from every signed-in account to local agents. Local and bare agents now receive attachments from each Cinna profile that is signed in and unlocked, independent of the current profile, with per-account sync and cleanup when an account locks, logs out or is deleted. Attaching opens a picker grouped by This computer and each account, and Core's list is treated as the complete set of locally usable records.
  • feat(credentials): add settings and agent attachment UI
  • feat(credentials): add encrypted delivery and profile-scoped sync
  • fix(security): redact delivered credentials across runtime outputs
  • feat(kit): adopt the 1.4.0 credential contract

0.4.7

Choose a tag to compare

@evgeny-l evgeny-l released this 21 Sep 07:08
63cf973
  • fix: stop treating every self-created Cinna agent as a catalog install, and stop deleting server-hosted agents from the desktop. cinna-server stamps a non-null bundle_id on every agent at creation, so isBundleAgent reading bundle_uuid or bundle_id labelled an agent the user had just made "Uninstall agent" and, through canDevelopAgent, hid Develop from its own author; the predicate now requires bundle_uuid with an explicit is_publisher_install false, and canDevelopAgent calls it rather than restating it. The agent page's menu now offers Open on the server and nothing destructive, Delete agent stays for the direct connections this app really owns, and the unreachable agent:delete-remote channel, its preload binding, hook and service are removed rather than left as a destructive path no surface exercises.
  • fix: give a build workspace that belongs to a different Cinna account its own attention reason and a way out of it. Reconnect renames /Cloud/ aside with a timestamp and sets the signed-in account up fresh, running on the shared operation chain and re-reading the state after the wait so a workspace that has since recovered is never archived, while a rename the filesystem refuses comes back as state instead of a throw the Settings card swallowed silently. Re-authenticate runs the in-place OAuth round trip from the build page and the detail modal, and per-action pending state replaces the single busy flag so the button row cannot re-wrap under the user's own click.
  • docs: define which behavior belongs to Hub core and which belongs to desktop UI in the developer and reviewer instructions. Document platform and event injection, runtime ownership, handler boundaries and the moved desktop integrations. Record the offline and packaged validation results while keeping the remaining Linux and macOS SSH, authentication and supervision checks explicitly unverified.
  • test: update two stale offline E2E assumptions reproduced on the unchanged baseline. Select OpenCode explicitly and check its approval control alongside the independent delegation controls, then distinguish task-list discovery from legitimate Inbox detail reads. The full offline suite passes with 146 tests and three live-only skips.
  • test: guard the Hub boundary and exercise the shared runtime under plain Node. The offline spike activates a fixed profile, detaches a viewer, parks and answers a permission through Inbox, and verifies the completed transcript after reopening SQLite through a diagnostic adapter. Add import and bundle checks, a Linux CI job and a dedicated test target without introducing a production daemon or headless keystore.
  • refactor: extract the shared Hub runtime behind explicit platform services while keeping the desktop in process. Core startup, shutdown, readiness and event delivery no longer depend on Electron windows or IPC registration, and desktop integrations live behind injected host capabilities. Preserve desktop behavior with a transport-neutral handler registry, packaged adapter resolution and updated unit coverage.
  • test: E2E specs for folder Run All Jobs, Delete task, Show in the Chats list, Delete run on an orphaned row and Open on the server. A loopback A2A agent holds each run open until the test releases it, so running-run refusals and skips are exercised for real. The E2E guide lists the new fixture and the dialog strings.
  • feat: job page rebuilt like the task page — Run, Edit and a ⋯ with Delete job, Prompt and Tasks history on the left, a Details card on the right with the agent's location as the routing badge. Tasks history uses the Inbox row style, pages ten at a time with new runs on top, and only runs whose task is gone get a ⋯ with Delete run. The task page gains a ⋯ with Open on the server, Show in the Chats list (which reveals the row in the sidebar) and Delete task. Both Details cards take turns in the secondary buttons' border glow.
  • feat: deleting a job-run task removes its run and chat in one transaction, and task:delete-preview tells the dialog exactly what will go. Both task and run deletes refuse while the chat's run is still going, and share the full hard-delete cleanup with permanentDelete. Job runs carry taskLive, so a run whose task is gone can be told apart.
  • feat: job folder ⋯ menu replaces the gear — it opens beside the row, outside the sidebar, with Run All Jobs above Edit and Delete. Run All starts the folder's runnable jobs one at a time, re-checking each just before it starts so none runs twice. The menu closes on a scroll that moves its row, and the folder delete dialog is anchored at the top.
  • fix: frosted surfaces actually blur — lightningcss kept only the -webkit-backdrop-filter line when it followed the standard one, and Chromium ignores it. Popovers, dialogs and the dark sidebar now list the prefixed property first, so the standard blur survives the build.
  • feat: chat row summary tooltip takes the blurred floating-panel look and an occasional border glow — the same translucent, blurred shell as the routing badge's popover instead of a solid background. About one opening in three gets a single pass of the secondary buttons' border glow from a random corner, decided when it opens so a sweep down the list is not a row of lights. It follows the Extra UI animation preference and the existing reduced-motion rule, and is not part of the buttons' one-at-a-time scheduler.
  • chore: UX reviewer learns the hover tooltip pattern — the sidebar chat-row summary is the reference for any list the user scans for one row among similar ones. A scanning tooltip opens with no delay, complete or not at all, leads with what tells the rows apart and is not shown when it would only restate the row. One the user may act in or copy from sits adjacent to the block that opened it, takes pointer events and closes only after the pointer has left both. The reviewer drives it with the real mouse: sweep, straight and edge travel at several speeds, return to the row, diagonal aim, what it covers while rested on, what moves the trigger, and nested native titles.
  • test: E2E for the chat row summary tooltip — an agent chat's tooltip beside its row with the other agent, Started and Lasted, and a mode chat naming its mode. It stays open while the real pointer moves from the row onto it and goes once the pointer leaves both. An empty chat shows none, and a click on a hovered row still opens the chat with no tooltip left behind. The E2E guide lists the tooltip's accessible names and notes that chats seeded over IPC get summaries only after a relaunch.
  • feat: summary tooltip on sidebar chat rows — hovering a chat opens, at once and just right of the row, who it is with (agent type icon and name, or the chat mode, or the model), the other agents that took part, when it started and how long it lasted. It is hoverable: it stays open while the pointer moves onto it, closes shortly after leaving both, only one is ever open, and a chat with nothing to say beyond its start time shows none. Summaries are resolved in main and travel on their own un-polled chat:list-summaries channel, refreshed with the chat list's invalidations and when a background run ends, because chat:list is polled every second and the message scans must never ride on it. usePopover gains a right placement with a vertical clamp and now measures before paint.
  • test: E2E for the markdown Contents panel, and the file-refs spec reaching Open and Open folder through the ⋯ menu
  • feat: Contents panel for long markdown previews — H1–H4 headings, click to scroll, current section followed, the card widening to the right or the panel overlaying in narrow windows. Open and Open folder move into a ⋯ menu in the preview header.
  • test: E2E for bare, kit and cloud delegations and their permission settings, and the file-handover spec for the shared gate
  • feat: handover bus — any folder agent can delegate to a bare folder, a kit agent or a cloud agent through the cinna handover tools, with one delegation record, depth cap, gate and wake across the file, local and cloud channels; contract clauses for out-of-folder writes and folder-session MCP
  • feat: render markdown frontmatter as a key/value card, and JSON previews as a collapsible tree
  • switch default theme to system instead of a dark theme
  • test: drop the Claude whole-flow placeholder, which no test change can unblock
  • test: let the tool-loop reattach spec accept the open round's in-flight draft row
  • fix: publish a conductor's Cinna tool block only after the engine's own tool_call notice, so it no longer lands above the text before it
  • test: expect a streamed failed A2A task to keep its answer as a row above a generic error
  • test: update E2E specs for the wire-only turn header and the chat mode form redesign
  • fix: keep a Claude subagent's work in its own lane, nested under its Agent call, so it no longer cuts the agent's reply mid-word or speaks as the agent, and keep single newlines in user bubbles
  • fix: check the accent-tinted file reference fill in the stylesheet test, matching 85aee61
  • fix: show on Settings → Features what AI Functions actually run on, decided in main
  • fix: allow a conductor's Cinna tool asks only for tools Cinna offered it, and keep short Codex titles that prefix the prompt
  • feat: allow Cinna tool asks on conducting sessions, name Codex chats by their thread title, and close runtime follow-ups
  • feat: add the whole-flow level for the pinned runtimes
  • feat: run Claude Code on a pinned CLI too, reuse an exact-version install, and contract it
  • feat: run Codex on a pinned CLI that Cinna installs, with an interface contract
  • fix: give a Codex conductor a new session when its tools change
  • fix: close runtime conductor review findings
  • feat: enable restricted Codex chat and utility sessions
  • fix: preserve runtime function instructions and pause rate-limited conductors
  • feat: run chat coordination through local ACP runtimes
  • Add file handovers: any adopted bare fo...
Read more

0.4.6

Choose a tag to compare

@evgeny-l evgeny-l released this 18 Sep 04:57
927b598
  • Tint the fill of clickable file references towards the accent — orange on the dark theme, blue on the light one — so they stand apart from plain inline code, deriving the edge from the tinted fill.
  • Centre the example prompts and composer vertically below the header on folder and external agent pages in chat mode, as the New Chat screen does, by letting the page column and chat wrapper fill the remaining height.
  • Let a folder agent with an incomplete credentials/.env chat, start tasks and run schedules, keeping the missing-credentials notice as a warning instead of a refusal; keep refusing a rejected A2A token or a Managed agent with no credential, and still ask Claude and Codex whether they are installed and logged in when the folder lacks credentials.

0.4.5

Choose a tag to compare

@evgeny-l evgeny-l released this 17 Sep 14:12
c215dbf
  • increase timeouts for the acp sessions
  • Add Open credentials/.env to the Open-in menu and make the Folder tab's Credentials header and Files row open that file instead of revealing a folder Finder shows as empty, creating it when missing; report a file-manager fallback as a muted note and a refusal in red, disable the links while the macOS editor fallback runs, keep one note per tab under the clicked card, and drop results that land after an agent switch.
  • Lead Add an agent with Install from catalog and New agent, moving folders and connections under Advanced options; add an Agent catalog dialog with tiles, a detail view and quick install that lands on the new agent and raises setup when credentials are missing; run catalog installs one at a time app-wide so they survive a sidebar tab or profile switch; ignore the click that reveals a new view; and return catalog load and install failures as data so an expired session offers Re-authenticate.
  • Redesign the task page like the local agent page: one title row with a back arrow, status icon and actions, a Details panel with agent and job links and click-to-reveal times, subtasks as Inbox task rows and hidden when empty; report an OS-refused link as its own error, and teach the UX reviewer the detail-page conventions.
  • Keep the activity popover in place while a Stop is refused or retried, keep it open on the stopped row, drop a refusal once its process has ended, and cover background tasks, Stop and the Tasks badge end to end.
  • Ask Claude and Codex to report their background tasks and subagents, show them in the composer's activity badges with a Stop control per background process, and keep a Claude subagent's work inline in the chat.
  • Save a turn a local agent starts on its own after its reply as a run in the chat, with its questions in the Inbox, and show a chat's running subagents, background processes and tasks as badges beside the composer's Send button.
  • Keep listening to a local agent's session between turns and track its background work: an activity hub the composer will read, a reaper that waits while background work runs, recorded ACP fixtures for background tasks and subagents, and a chat filter on the task list.
  • Add a live-backend harness for interactive end-to-end sessions against a running cinna-core: a control server that holds the built app, shell helpers that drive it and read both databases, make live-ctl, and a runbook for running such a session.
  • Recover a remote agent or Managed turn the app was killed or quit under: mark every turn in flight, collect it from the agent on the next launch or when a live stream drops, keep the richer copy of a cut-off reply, confirm a Stop from the agent's task state, and show a Cinna question's real text in the Inbox.
  • Keep what a remote agent or Managed session streamed when the app quits mid-turn, and leave a half-written attachment tag out of any turn saved mid-stream.
  • Keep what a remote agent streamed when its connection fails mid-turn, saving it above the error row instead of leaving only the error.
  • Save a failed agent turn's rows before posting its error, so a write that fails reports one error, and correct the docs on failure order, session saves and the A2A partial-output rule.
  • Keep a local agent's turn when the app is quit under it: save what it streamed before the processes are killed, save the ACP session as soon as it exists so the next message resumes it, and keep a failed turn's output above its error row.
  • Find the composer by role in every E2E spec, so the chat curtain's hidden copy never counts as a second one, and assert the running composer's own name where task-start checks it mid-turn.
  • Find the composer by role in the live-attachment spec, so the chat curtain's hidden copy of the previous screen no longer gives it two message boxes right after a chat switch.
  • Move the task list from the Jobs sidebar to the bottom of the Inbox screen as Recent tasks with status icons, and keep local asks in the Inbox when a bound service cannot be read, naming the unreadable service instead of failing the whole list.
  • Open the transcript's Copy text and Save to Notes only on a right-click that lands on selected text, keeping a whole selected message's Markdown, and let saving move the sidebar to the new note's row while the Chats tab returns to the chat it was left on.
  • Replace the new-chat sparkles with a wireframe of the Cinna logo that draws itself in when its space is clicked and back out on the next click, with an occasional sweep across its lines.
  • Reopen the window at the size and position it was left at, and remember whether the sidebar was open, while still starting on the new-chat screen.
  • Let a project folder with an AGENTS.md or CLAUDE.md be added as a local agent after AGENT.md, without turning a repository of AGENT.md agents into one agent or dropping an agent already added.

0.4.4

Choose a tag to compare

@evgeny-l evgeny-l released this 15 Sep 14:14
c293305
  • Repair code fences a model nested inside another fence before a chat message renders, and give code blocks a visible box and readable token colours in the light theme.
  • Let a local agent switch itself into building mode when the person asks it to change how it works, following the folder's own builder guide for the rest of the conversation.
  • Keep a running turn's live blocks when the chat on screen is selected again from the sidebar.

0.4.3

Choose a tag to compare

@evgeny-l evgeny-l released this 15 Sep 04:50
d859ee7
  • Make file paths a folder agent names in chat clickable: preview them from the click point, copy the path, open or reveal them, and ask before touching anything outside the agent folder.
  • Fold a Claude agent's AskUserQuestion call and its restated answer into the question block, matched by the call id the elicitation names.
  • Let a running tool finish before a mid-turn message reaches the agent: queue it while tool calls run and hand it to the turn once they end.
  • Show one composer button during a turn: Stop on an empty input, a blue Send once there is text.
  • Queue or steer messages sent during a turn, recall and edit them with arrow keys, and keep long agent transcripts readable.
  • Target the active composer in the stop E2E specs.
  • Keep tool steps in live replay when a long agent turn fills the cache.

0.4.2

Choose a tag to compare

@evgeny-l evgeny-l released this 13 Sep 20:53
3ac0f6f
  • Fix packaged agent dependency resolution and add isolated runtime checks.

Bugfix details:

  • Fixed local Claude agents failing before startup in installed builds because required SDK packages could not be found.
  • Package the complete Claude and Codex adapter dependency trees, including required peers and nested dependencies.
  • Fixed Intel macOS native dependency packaging for SQLite and Canvas.
  • Added build-time dependency validation and isolated packaged-app checks for agent startup, document parsing, SQLite, and crypto.

Available for macOS (Apple silicon and Intel) and Linux (x64 AppImage and Debian package). Linux Debian packages require manual installation of updates.

v0.4.1

Choose a tag to compare

@evgeny-l evgeny-l released this 13 Sep 19:34
b97b5f7
  • Fix false local-development CLI blockers and add managed updates.

Bugfix details:

  • Compatible Cinna CLI installations are no longer incorrectly marked as lacking JSON workspace support when a capability check fails in an unwritable directory.
  • “Check again” refreshes the actual managed CLI capabilities on the build page, in Local Development Runtime settings, and in existing build chats. Matching buttons show a refresh icon and visible checking feedback.
  • Compatibility warnings show the required Cinna CLI version (0.4.0 or later) and the installed version, and direct tooling recovery to Default → Local Development.
  • Developer Tools shows the desktop-managed Cinna CLI and offers Update when the connected server advertises a newer version.
  • Failed CLI capability checks remain actionable, and Repair reinstalls affected tooling.

Available for macOS (Apple silicon and Intel) and Linux (x64 AppImage and Debian package). Linux Debian packages require manual installation of updates.