Skip to content

Releases: parsingk/Astera

v1.3.25

Choose a tag to compare

@github-actions github-actions released this 21 Sep 01:22

New features

  • In Jobs, a task's own session carries out the repair — Auto-fix until the checks pass. Turn it
    on for a job, and a failed build, a failed test or a blocking review finding goes back to that
    session for repair and is checked again.
  • A task's node says how far it has got. It names the check that stopped it and the repair
    attempt or review round it is on, and draws a mark for each check. The same chips appear in the
    Jobs sidebar.
  • Why a task failed is one click away. Its completion block opens the output the failing check
    printed, the blocking review findings with the files they point at, and the files this attempt
    touched that decide what the checks do.
  • You can stop a task's auto-fix. A button on the node asks you to confirm, and says what that
    ends before it does it.
  • A chat session that dies now says why. It shows the exit code and the last words the process
    wrote, where it used to show only "process ended".
  • The start button says why it is not ready. A line underneath names the condition holding it,
    and the one condition that clears itself shows a spinner instead.
  • When a version manager is what refused to run the CLI, the app says so. It offers to retry
    with the toolchain skipped, after telling you what that gives up.
  • You can install or reinstall a CLI from Settings → Info. Each CLI row now carries a button.
  • The rail has a home button for accounts and history. It sits above the file explorer, and
    Ctrl/Cmd+Shift+A does the same.

Fixes

  • A CLI that will not run in one folder no longer locks you out of the whole app. That screen
    now asks whether the programs are installed, not whether they ran where the app happened to start.
  • The CLI check runs in the folder the session will run in. It used to run wherever the app was,
    so a project that breaks the CLI passed the check and only the session died.
  • A repair cut short by a pause, a stop or a crash no longer spends the budget. Those attempts
    never reached a verdict, so counting them ended runs early.
  • Completing a task that has not passed its checks now records why. It asks for a reason and
    writes it into the job's journal.
  • A job says when its own checks changed while a task was being repaired. The reviewer is told
    as well. It does not block the work.
  • "Repair once more" says when it could not start one. Answering that way while another question
    still blocks the task did nothing at all, and the screen reported success.
Every change (91)

merge: 세션이 왜 안 뜨는지 말한다 — 실패 가시성 (F1–F5)

  • 프로세스의 마지막 말을 버리지 않는다 — stderr 꼬리 (e26daa1)
  • 프로세스의 마지막 말을 앱까지 나른다 (30fa13d)
  • 어댑터가 종료 코드와 프로세스의 마지막 말을 상태로 옮긴다 (b94e6a8)
  • 종료 배너가 코드와 프로세스의 마지막 말을 보여준다 (190db60)
  • exitCode·errorDetail·error 를 exit 이벤트에도 실어 이미 열린 pane 에 닿게 한다 (a9a98ed)
  • CLI 검사를 세션이 돌 폴더에서 한다 (d937cc2)
  • CLI 실패 경고 둘 중 하나만 뜨게 한다 (42f3a72)
  • 시작 버튼이 왜 비활성인지 말한다 (81d86d3)
  • CLI 설치 여부와 이 폴더 실행 여부를 따로 묻는다 (a93f11a)
  • 깨진 프로젝트 manifest 가 세션을 막지 못하게 한다 (12ea3d5)
  • 우회 재시도의 정리·죽음 구분·상태 보존을 고친다 (c6faf3a)
  • 설계 §6 을 실제로 생긴 테스트에 맞춘다 (94734db)
  • 전체 브랜치 리뷰 마지막 파동 — Start 게이트가 F5 를 막던 것부터 아홉 개 (fc8aa85)
  • 유예 타이머의 뒷정리와 타이밍 단언의 여유 (c5812b0)
  • 기다리면 풀리는 사유에는 스피너를 붙인다 (5f8d3cf)
  • 대기 문구가 그 칸의 이름을 그대로 부른다 (b34d83c)
  • F5 를 다시 쓴다 — 앱이 우회하지 않고, 설명하고 사람이 고른다 (344ab41)
  • toolchain 우회는 자동 재시도가 아니라 사람이 확인한 버튼으로 (7c499da)
  • F5 리뷰 1차 — 재등록·durable 마크·재오퍼 금지·감지 캐시·롤 승계 (bd1c50f)
  • 근거가 약할 때의 설명도 문장으로 끝나게 (c423abf)
  • 확인 창에서 대시를 빼고 "얼마나/무엇이 바뀌나" 절을 없앤다 (adfef36)

merge: 진입 게이트는 설치 여부를 묻는다 — 실패 가시성 후속

  • 앱 진입 게이트는 설치 여부를 묻는다 — 후속 셋 (85290f8)

merge: 설정 화면에서도 CLI 를 설치한다

  • 설정 화면에서도 CLI 를 설치한다 (02923d6)

merge: 자동 수정 — 실패를 보여 주고, 멈출 수 있고, 명세의 빈 칸을 채운다

  • 자동 수정 두 번째 조각 설계 — 실패를 보여 주고 멈출 수 있게 (0504a7d)
  • "한 번 더 수정" 이 수리를 못 열면 화면이 말한다 (9aace5c)
  • 타임라인이 수리를 수리라고 말한다 (262428f)
  • 자동 수정을 멈출 수 있고, 멈춘 것이 보인다 (5e406d7)
  • 왜 실패했는지 펼쳐 본다 — 완료 상세 블록 (542d691)
  • 백엔드 설계 §17 표를 UI 두 조각 뒤 사실로 갱신 (73f90d9)
  • 명세가 요구하는데 비어 있던 넷 — 설계 (24a7639)
  • 중단된 수리는 예산을 먹지 않는다 (cf1e6d4)
  • 시간 예산 — maxTotalMinutes (15041d5)
  • 완료 강제를 기록한다 — 이유와 함께 (0962d7b)
  • 완료 정책의 지문 — 수리 중에 정책이 바뀌면 말한다 (cef992b)

Not on a branch

  • the fs.watch test waits the way the rest of the suite does (74c3fdf)
  • completion convergence design — the app owns the repair loop, not the coordinator (4817316)
  • convergence policy types and the pure helpers that count repairs and rounds (7593a34)
  • correct ALLOWED comments that the new dispatched edges falsified (e2e9780)
  • parse the reviewer's issues file and let policy, not the reviewer, decide what blocks (5554ea4)
  • a failed check opens a repair on the same worker instead of failing the Task (62d544e)
  • a refused repair-open becomes a Gate instead of discarding the verdict (c9cab7a)
  • review issues decide the verdict; a convergence Run reruns an interrupted check instead of asking (72ae805)
  • report the real repair count on both exhaustion routes; stopped/paused beat the review round cap (7b1b9a2)
  • the validator runs a Task's checks in order, stops at the first failure, and times each one out (f505b3a)
  • close the settling latch's async-start window and stop empty checklists from reading as a pass (0dc03c3)
  • the spec file carries the repair request; the reviewer writes a structured verdict (14a6170)
  • the repair and review spec prose stop contradicting itself and the loop it drives (ac1970b)
  • perform a repair — write the request into the live worker session, or start a fresh one (74389b4)
  • repair recovers from a re-gate failure, checks liveness at the point of use, and stops re-injecting (e4b2d1f)
  • run-create --convergence, task-create --validate lists, the reviewer's file, and the exhausted Gate's two answers (3bc1e6e)
  • openDispatch refuses a validating/reviewing Task again, gate-resolve closes its ready-window, and the review verdict path stops guessing (9981bd5)
  • a lost repair is the app's to restart; a convergence Run reruns interrupted checks at boot (46c9e4f)
  • repair round 1 — extra/knowledge on rebuilt repair spec, boot's own Run gates, and the design doc's reuse ruling (2ee51aa)
  • wire the repair loop — checks run as a list, verdicts open repairs, reviewers get the convergence sections (eb3c6e5)
  • gate suspicious files on convergence, fix the diff baseline, stop dropping boot lists silently (dd7eb8c)
  • the journal derives review verdicts, repair attempts and convergence exhaustion (8223668)
  • a convergence-blocked Gate out of validating/reviewing is a verdict too (3e899d7)
  • tell the coordinator that a converging Task is the app's to repair (b918fef)
  • fix round 1 on Task 13 — the guide named a bypass edge that cannot happen (d3c29bd)
  • fix round 2 on Task 13 — the message-text bullet quoted subjects that never fire on convergence (ad23f4e)
  • the convergence loop end to end — repair, review, roll, crash, exhaustion, and the untouched old path (254fc01)
  • round 1 on Task 14 — pin properties 1/2 against production, add the ipc.ts wiring guard (f55f249)
  • round 2 on Task 14 — wire deps.log, make setState genuinely discriminate, tighten the guard (582776b)
  • convergence design — what the backend actually shipped, with the tests that pin each criterion (f89a556)
  • round 1 on Task 15 — the acceptance-table constant name and a citation that understated coverage (974bce4)
  • final review wave — the five findings before merge (3a7ce37)
  • close Finding 3's second site — repair.ts still lied about extra (c8a3de1)
  • 한국어에서 코드는 수리하지 않고 수정한다 (771ef2f)
  • 자동 수정 UI 첫 조각 설계 — 켜기와 보이기 (00faf48)
  • 자동 수정 UI 설계 — JobCheck 에 exitCode 한 칸 (ff1d1dc)
  • 검사 결과를 모든 Run 에 기록한다 — 통과한 검사의 출력 꼬리는 뺀다 (5c830bc)
  • Gate 질문의 언어 테스트가 문구가 아니라 언어를 고정하게 (0d7350d)
  • JobTask 에 검사 결과·자동 수정 진행·Gate 종류를 싣는다 (ae14a96)
  • 노드 meta 줄과 사이드바 칩의 판정을 core 에 둔다 — nodeMeta.ts (b43eaf5)
  • 자동 수정 UI 의 문구 — 켜기, 검사 고르기, 노드 meta 와 칩 (96a881c)
  • 새 작업 모달에서 통과할 때까지 자동 수정을 켠다 (90a5697)
  • 새 Task 폼에서 완료 검사를 순서대로 고른다 (efb9f3b)
  • Task 노드에 막힌 검사와 검사 칩 줄을 그린다 (e62017b)
  • 사이드바 도는 줄과 Gate 줄에 자동 수정 칩 (134d812)
  • 자동 수정 UI 설계 §6 을 실제 테스트 이름으로 (c8a09fd)
  • metaText 의 switch 를 exhaustive-check 로 잠근다 (5d2409f)
  • 전체 브랜치 리뷰 마지막 파동 — docstring 정정·수정 칩 클램프·CSS 오버플로/명세·재검사 칩 일치 (1d3452f)
  • 설계 §6 에 수정 웨이브가 더한 테스트 둘 (4431d17)
  • 세션이 왜 안 뜨는지 말한다 — 실패 가시성 설계 (3535d7b)
  • 깨진 package.json 이 세션을 막지 못하게 — F5 추가 (aa135ac)
  • 결정 표의 S6·S7 순서를 번호대로 (9afa6f1)
  • run-create 가 --max-total-minutes 를 받는다 (e25d306)
  • 통과할 때까지 자동 수정을 네 언어 README 에 반영 (074a932)
  • 레일에 계정·히스토리 버튼 (ae30c7c)
  • 계정·히스토리 버튼을 집 모양으로 (18406e9)
  • 홈 버튼에 단축키 — Ctrl+Shift+A (48f7258)

Installing

macOS — the build is not notarized yet. It is ad-hoc signed, so it runs on Apple Silicon, but Gatekeeper blocks the first launch: after dragging the app to Applications, clear the quarantine flag with xattr -cr /Applications/Astera.app. System Settings → Privacy & Security → Open Anyway works too. Auto-update stays off on macOS until the build is notarized, so a new version means downloading the dmg from this page again. The Windows installer is unaffected.

Linux — the AppImage needs the executable bit before it will run: chmod +x the file you downloaded. The deb installs with sudo apt install ./<file>.deb, which pulls its dependencies; dpkg -i on its own does not. The supported floor is Ubuntu 22.04 / Debian 12, and the deb declares it, so apt refuses an older system rather than installing something that cannot start.

Windows 1.1.0 or earlier — this one has to be installed by hand. Those builds shipped without the file the updater reads to find releases, so their update check fails and no notice from inside the app can reach you. Download the installer below and run it — whatever you install from here on updates itself normally.

Full Changelog: v1.3.24...v1.3.25

v1.3.24

Choose a tag to compare

@github-actions github-actions released this 19 Sep 06:03

New features

  • A session is a terminal or a chat, and which one is settled when you make it. The toggle at a
    session's top right is gone. A terminal session's chat view had no protocol behind it and rebuilt
    the CLI's questions, its choices and its model menu by reading the terminal's screen, so the same
    feature behaved differently depending on which way the session had been opened. What a new session
    opens as is still yours to choose, in Settings, General.

  • The composer's Plan button became a mode picker. A Claude session offers default, accept edits
    and plan; a Codex session offers the two its own CLI lists, under the names it gives them. The
    button says which one is in force and opens the rest.

  • Earlier messages load as you scroll up. Reaching the top of a chat fetches the window before
    it, the way the history list already pages. The load earlier button is gone.

  • A chat session fills the three usage figures in the status bar. Context, the five hour window
    and the weekly one. They were blank for every Claude chat session, because all three were only ever
    read from a terminal's status line and a chat session has no terminal.

  • The status bar says when the background Host is waiting to be replaced. A Host that outlived an
    app update goes on running the previous build, and no chat session can start until it is replaced.
    It replaces itself the first moment it is holding nothing, which for anyone who keeps sessions open
    never comes. Pressing the notice replaces it now, after telling you what that ends.

Fixes

  • No two accounts wear the same colour. Colours were handed out by counting accounts, so a
    seventh account took the first one's blue, and removing an account handed its colour to the next
    one made while another still wore it. That colour marks a session's tab, its pane border and its
    row in history, so a repeat cost the distinction in four places at once. Accounts that already
    share one are given new colours on the next launch, oldest keeping what it has.

  • The restart button in Settings, Info stays in one place. The Host row's facts were one long
    line with the button at the end of it, so where the button sat depended on how much the Host
    happened to be holding. They are separate lines now and the button is at the row's edge.

Every change (12)

Not on a branch

  • the hello-without-features test creates its socket directory (f3046f3)
  • the v1.3.23 notes are all English (1405531)
  • no two accounts wear the same colour (1ae8404)
  • earlier turns load on their own at the top of the thread (1d838d5)
  • a claude conversation session fills the status bar's three usage chips (44691b8)
  • pin the context chip to a result frame captured from a live turn (6721c14)
  • a session's kind is fixed when it is made, and the tab bar says which (1657cd3)
  • drop the screen-reading half of the conversation pane (2c34a95)
  • drop the note under the 대화 choice (04a5ee7)
  • the composer's Plan toggle becomes a permission-mode picker (2c868d4)
  • the status bar says when the Host is waiting to be replaced (c98184a)
  • the conversation view is a session's kind, not a switch on it (a638a2d)

Installing

macOS — the build is not notarized yet. It is ad-hoc signed, so it runs on Apple Silicon, but Gatekeeper blocks the first launch: after dragging the app to Applications, clear the quarantine flag with xattr -cr /Applications/Astera.app. System Settings → Privacy & Security → Open Anyway works too. Auto-update stays off on macOS until the build is notarized, so a new version means downloading the dmg from this page again. The Windows installer is unaffected.

Linux — the AppImage needs the executable bit before it will run: chmod +x the file you downloaded. The deb installs with sudo apt install ./<file>.deb, which pulls its dependencies; dpkg -i on its own does not. The supported floor is Ubuntu 22.04 / Debian 12, and the deb declares it, so apt refuses an older system rather than installing something that cannot start.

Windows 1.1.0 or earlier — this one has to be installed by hand. Those builds shipped without the file the updater reads to find releases, so their update check fails and no notice from inside the app can reach you. Download the installer below and run it — whatever you install from here on updates itself normally.

Full Changelog: v1.3.23...v1.3.24

v1.3.23

Choose a tag to compare

@github-actions github-actions released this 17 Sep 08:47

New features

  • A chat session can be scheduled, can notify Slack, and can resume itself on another account.

  • Auto resume skips an account that is not logged in. A Claude account whose refresh token has
    expired counts as logged out, so a chain no longer stops on one that cannot answer. The account
    slots in the new session dialog leave those accounts out too.

  • A question from the CLI arrives as a card. When you are reading a terminal session in the
    conversation view, its multiple choice question is drawn as a form and answering it there answers
    the terminal.

  • The approval banner names what it is about. It says which command, or which file, rather than
    asking about nothing in particular.

Fixes

  • A schedule fires on its unit's boundary. One set in minutes fires at the top of the minute, and
    one set in hours at the top of the hour.

  • The working mark is shown on the line after the output.

  • A chat session shows what you typed straight away. Your message used to be nowhere on screen
    until the CLI wrote it down, which for one of the two CLIs is several seconds after you press Enter.

  • A conversation that showed nothing at all now shows its messages. When a session's record began
    with something other than a message, the pane read the whole session as a helper file rather than a
    conversation and drew not one line of it.

  • A Claude chat session named the wrong model, and now names the right one.

  • The model readout no longer changes on its own. Two more causes, both fixed: an update carrying
    no reasoning effort erased the one already known, and a model you picked was thrown away when the
    session moved to another account.

  • The question card keeps its send button. It is disabled when the answer has to be finished in
    the terminal, instead of disappearing and looking like a missing feature.

  • Pressing a view's key again puts the sidebar away.

Every change (128)

Not on a branch

  • pressing a view's key again puts the sidebar away (3e5bf2d)
  • parse AskUserQuestion input and hold a card's answers (6bd68b9)
  • the measured keys that answer one AskUserQuestion question (671a11b)
  • describe the tool call an approval prompt is about (62ac5fa)
  • read the AskUserQuestion dialog's stage and review off the screen (e7d248f)
  • remember the tool call a session is waiting on, from PreToolUse (3122311)
  • write control-character escapes as source text, not raw bytes (d814564)
  • push the waiting tool call to the renderer (c125367)
  • every session captures AskUserQuestion through the tool hook pair (122d694)
  • drive the AskUserQuestion dialog one screen at a time (255f9c5)
  • a form card for the CLI's questions (932cc95)
  • the approval banner names the command or file it is about (e3c4a19)
  • draw a waiting AskUserQuestion as a card and answer it on the dialog (eac53b2)
  • a declined question yields to the next approval banner, submitAsk survives a throw and a stale generation, and composed answers survive a conversation<->terminal toggle (2be2357)
  • correct a Korean typo in the ask-stopped notices (3b5e33c)
  • replace a raw ESC byte in a cleanOther test with its escape text (47c54ea)
  • proc-* messages and the ProcLike contract for line processes (97503b8)
  • the reattach sweep refuses a chat note on a pty explicitly (f4d28a7)
  • a registry for line processes, with a whole-line replay buffer (67e64ec)
  • a null meta is how the registry test opens a noteless process (5083246)
  • write the last-screen regexes' control characters as escape text (08eac61)
  • the Host spawns, buffers, replays and kills line processes (13a4c4e)
  • a ProcLike over the Host, routed, with a child_process fallback (ea14b7a)
  • a write to a line process that has ended is dropped, never thrown (a033e9c)
  • the fallback line process never throws from a stream, and its test always kills its child (fc0e747)
  • the reattach sweep, holdings and router know line processes (fa4be61)
  • ask a Host about line processes only when it says it speaks them, and not before the pty list is in (a9aebc7)
  • the proc router follows the Host's announced feature, and an unanswered proc-list stays unknown (49a99af)
  • every proc-line carries a seq and proc-attach answers with one proc-attached, so a replay is ordered and never handled twice (a785649)
  • a session has a kind, and the chat session types the adapters and the pane share (166028d)
  • the codex app-server codec — recorded lines in, chat requests and events out, answers back (41d2afb)
  • the Codex adapter drives one app-server over a ProcLike and rebuilds itself from a replay (cb99fdc)
  • the Codex adapter survives a missing collaboration-mode list, emits a re-entrant state change, and reads outlivesApp from its process (308233b)
  • the chat session manager — one Codex adapter per session, adopted back from the Host's note (b9a876a)
  • chat sessions are spawned by kind, answered over chat.*, adopted from the Host, and drive attention and the rollout watcher (7ef6822)
  • every session lookup that guards a path or an account also sees chat sessions, and adoption registers a rollout once (ef90d59)
  • a session is opened as 터미널 or 대화, remembered, and 대화 waits for a Host that speaks line processes (db9eb96)
  • a chat tab mounts only the conversation view and wears a 대화 badge instead of the view toggle (5cd21f0)
  • the chat pane's state hook, the approval card, and questions through QuestionCard (18489b2)
  • the conversation pane drives a chat session over chat.* — no screen read, no key written (51687f1)
  • a chat send clears its draft, a failed stop or model change says so, and the chat model menu has no dead row (28391d9)
  • a live Codex round trip for the adapter — plan-mode question answered, file change declined — behind ASTERA_LIVE_CODEX (7f49adc)
  • the adapter clears its truncated guess, seeds the model, queues requests and remembers every error (164ef9c)
  • one process per thread, an adopted rollout always registered, and the renderer's small chat fixes (1f3ea29)
  • the live test asserts the approval unconditionally, in a throwaway CODEX_HOME it deletes (a09aa65)
  • a turn carries only the model and effort the person picked, and resuming an already-open chat thread says so (a044313)
  • the Plan pill visibly turns on, and the session kind heads the new-session and resume dialogs as its own section (81c1da2)
  • the Claude stream-json codec -- recorded lines in, chat requests and events out, answers back (34c465d)
  • the adapter state machine moves into adapterCore so a second CLI can share it (f3da593)
  • the Claude adapter drives one stream-json claude over a ProcLike, on the shared adapter core (884ceb1)
  • a chat session picks its adapter by the account's provider, and Claude accounts can open one (d3e153a)
  • a Claude chat session's transcript is found by its session id, and the model line comes from the adapter (f7d25dc)
  • a Claude account can open a chat session, and the cards name the CLI that is asking (51da944)
  • the chat cards name the CLI through PROVIDER_META, computed once (1ebb355)
  • a live Claude round trip for the adapter — question answered, resume kept the session, Write declined, turn interrupted — behind ASTERA_LIVE_CLAUDE (bd73551)
  • the Claude codec refuses an answer it cannot encode honestly (ec9d731)
  • the adapter core keeps the card until the answer is on the wire (e10a1ee)
  • a Claude request answered before a restart is not asked again (77fa032)
  • adopt hands the adapter the requests answered before the restart (f2cd145)
  • only a codex chat session registers with the rollout watcher (8c127ce)
  • resume offers a chat session only on the account that holds it (b93c300)
  • endOpenRequests names the note that now catches most of its cases (eea10df)
  • the model slot's comments say when a chat session's CLI is still unknown (6e521f2)
  • a session driver hands one message to a pty or a chat session the same way (a315e9a)
  • the scheduler delivers through the session driver and keys a chat session by its thread id (d263084)
  • a chat session carries its schedule, Slack and rolling settings, and the note brings three of them back (cd17450)
  • a chat session's schedule is registered at spawn, kept busy by its status and re-armed after a restart (e26882a)
  • the scheduler's fire() guards the success continuation against a stale liveId too (11b4e66)
  • a chat session can be scheduled from both dialogs and shows the state banners on its pane (f21840c)
  • a new scheduled round starts with its own full refusal budget (63327c7)
  • deliver rejects for a chat id nobody holds, and a chat resume of an open thread writes nothing (2e44489)
  • the chat pane reserves the banner strip, the dialogs keep their row order, and the 대화 schedule label says prompt (a6529ef)
  • a chat card reads as a Slack message, and a thread reply reads as its answer (5bf111d)
  • the approval reply hints use standard Korean particle spacing (2f9b69d)
  • the refused-send note attaches its particle, and repeated picks are proven deduped (f2af8f3)
  • the Slack notifier hears a chat session's own events — a turn's end, an open card, an error (fd36888)
  • a Slack reply answers a chat session's card or becomes its next turn (be62feb)
  • a chat session with Slack on is registered, fed its own events, and answered from its thread (6418ee7)
  • a chat session can have Slack notifications from both dialogs (74c8a91)
  • a Claude chat session follows the new session id a /clear starts (f73430f)
  • the schedule banner is read once on adoption, so a reload does not lose it (af34894)
  • a stale transcript lookup and a late banner snapshot never overwrite fresher state (51ed087)
  • the chat adopter's rollout registration keeps the watcher's turn callback off, like the ready branch (d40a7fd)
  • the new-session comment now says schedule and Slack apply to a chat session (50a0654)
  • a Claude chat session reports its rate limit -- the event, a rejected turn, an assistant error (83c2120)
  • a chat session...
Read more

v1.3.22

Choose a tag to compare

@github-actions github-actions released this 14 Sep 13:59

New features

  • Quit and end every session. The tray menu has Quit and end sessions. On Linux the same choice
    is in the confirmation shown when you close the window.

Fixes

  • The Host's version now follows the app's on its own. The Host stays running so that sessions
    survive the app closing, which is why an update left it running the previous version. It moves to
    the new one once it has nothing running: no session, no terminal, no run.
  • The Info tab shows the Host and can restart it. It says when the Host is still on an older
    version, and a restart tells you first what it is holding that would end with it.
Every change (1)

Not on a branch

  • an outdated Host is replaced once it holds nothing (84a0de2)

Installing

macOS — the build is not notarized yet. It is ad-hoc signed, so it runs on Apple Silicon, but Gatekeeper blocks the first launch: after dragging the app to Applications, clear the quarantine flag with xattr -cr /Applications/Astera.app. System Settings → Privacy & Security → Open Anyway works too. Auto-update stays off on macOS until the build is notarized, so a new version means downloading the dmg from this page again. The Windows installer is unaffected.

Linux — the AppImage needs the executable bit before it will run: chmod +x the file you downloaded. The deb installs with sudo apt install ./<file>.deb, which pulls its dependencies; dpkg -i on its own does not. The supported floor is Ubuntu 22.04 / Debian 12, and the deb declares it, so apt refuses an older system rather than installing something that cannot start.

Windows 1.1.0 or earlier — this one has to be installed by hand. Those builds shipped without the file the updater reads to find releases, so their update check fails and no notice from inside the app can reach you. Download the installer below and run it — whatever you install from here on updates itself normally.

Full Changelog: v1.3.21...v1.3.22

v1.3.21

Choose a tag to compare

@github-actions github-actions released this 14 Sep 09:10

Fixes

  • On Windows, closing a session tab no longer flashes a terminal window.
Every change (2)

Not on a branch

  • a child process no longer flashes a console window (b6a8055)
  • closing a session tab no longer flashes a terminal window (7d7949a)

Installing

macOS — the build is not notarized yet. It is ad-hoc signed, so it runs on Apple Silicon, but Gatekeeper blocks the first launch: after dragging the app to Applications, clear the quarantine flag with xattr -cr /Applications/Astera.app. System Settings → Privacy & Security → Open Anyway works too. Auto-update stays off on macOS until the build is notarized, so a new version means downloading the dmg from this page again. The Windows installer is unaffected.

Linux — the AppImage needs the executable bit before it will run: chmod +x the file you downloaded. The deb installs with sudo apt install ./<file>.deb, which pulls its dependencies; dpkg -i on its own does not. The supported floor is Ubuntu 22.04 / Debian 12, and the deb declares it, so apt refuses an older system rather than installing something that cannot start.

Windows 1.1.0 or earlier — this one has to be installed by hand. Those builds shipped without the file the updater reads to find releases, so their update check fails and no notice from inside the app can reach you. Download the installer below and run it — whatever you install from here on updates itself normally.

Full Changelog: v1.3.20...v1.3.21

v1.3.20

Choose a tag to compare

@github-actions github-actions released this 14 Sep 08:29

Fixes

  • On Windows, installing an update no longer ends your sessions. Astera keeps a Host process
    running so that sessions survive the app closing. That Host ran from the app's own executable, so
    every installer had to kill it first. The Host now runs from a Node of its own. It lives outside
    the install directory, so the installer has nothing of its to close, and terminals carry on
    through an update.
Every change (2)

Not on a branch

  • the v1.3.19 notes say it shorter (8a98668)
  • the Host runs from its own Node, not the app's (8a0155c)

Installing

macOS — the build is not notarized yet. It is ad-hoc signed, so it runs on Apple Silicon, but Gatekeeper blocks the first launch: after dragging the app to Applications, clear the quarantine flag with xattr -cr /Applications/Astera.app. System Settings → Privacy & Security → Open Anyway works too. Auto-update stays off on macOS until the build is notarized, so a new version means downloading the dmg from this page again. The Windows installer is unaffected.

Linux — the AppImage needs the executable bit before it will run: chmod +x the file you downloaded. The deb installs with sudo apt install ./<file>.deb, which pulls its dependencies; dpkg -i on its own does not. The supported floor is Ubuntu 22.04 / Debian 12, and the deb declares it, so apt refuses an older system rather than installing something that cannot start.

Windows 1.1.0 or earlier — this one has to be installed by hand. Those builds shipped without the file the updater reads to find releases, so their update check fails and no notice from inside the app can reach you. Download the installer below and run it — whatever you install from here on updates itself normally.

Full Changelog: v1.3.19...v1.3.20

v1.3.19

Choose a tag to compare

@github-actions github-actions released this 14 Sep 05:56

Fixes

  • Installing an update no longer fails with "Astera cannot be closed". Astera keeps a Host process
    running so that sessions survive the app closing, and that Host process was what stood in the way.
  • On Windows, the update confirmation no longer says running sessions keep going. The Host has to
    end for the new version to be written. macOS and Linux are unaffected — a running binary can be
    replaced there, and sessions carry on through an install.
Every change (1)

Not on a branch

  • an installer can close the app, Host and all (19b58b9)

Installing

macOS — the build is not notarized yet. It is ad-hoc signed, so it runs on Apple Silicon, but Gatekeeper blocks the first launch: after dragging the app to Applications, clear the quarantine flag with xattr -cr /Applications/Astera.app. System Settings → Privacy & Security → Open Anyway works too. Auto-update stays off on macOS until the build is notarized, so a new version means downloading the dmg from this page again. The Windows installer is unaffected.

Linux — the AppImage needs the executable bit before it will run: chmod +x the file you downloaded. The deb installs with sudo apt install ./<file>.deb, which pulls its dependencies; dpkg -i on its own does not. The supported floor is Ubuntu 22.04 / Debian 12, and the deb declares it, so apt refuses an older system rather than installing something that cannot start.

Windows 1.1.0 or earlier — this one has to be installed by hand. Those builds shipped without the file the updater reads to find releases, so their update check fails and no notice from inside the app can reach you. Download the installer below and run it — whatever you install from here on updates itself normally.

Full Changelog: v1.3.18...v1.3.19

v1.3.18

v1.3.18 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 14 Sep 04:47

New features

  • A session can now be read as the terminal it runs in or as an ordinary chat interface, and both
    are the same session.
    Switch it from the top right of any session, and set the default in
    Settings → General.
  • A first run with neither Claude nor Codex installed offers to install them.

Fixes

  • A session spawned while Astera itself runs inside a Claude Code terminal keeps its transcript.
    Every session the app made was taken for a child of that one, and Claude Code answered by writing
    no transcript at all.
  • A session that survives a restart no longer loses its transcript.
  • A session waiting for an answer raises one desktop notification rather than one per event
    underneath it.
    Measured: three where one should fire.
Every change (99)

Conversation view

  • canvas for the conversation view (5ab5494)
  • three structural directions instead of one (d02c79b)
  • add the assistant-ui board, rendered not mocked (2b8fd14)
  • fit assistant-ui to the dark theme, keep its button (ffa7855)
  • tool rows, pending banner and the terminal toggle (934822d)
  • the terminal side is the terminal we already have (0894ae5)
  • the mock covers the conversation view only (06529b1)
  • capture real transcript shapes for the conversation view (e8fc999)
  • reduce transcript entries to turns with tool calls (870caf4)
  • a dropped user record must not close an assistant run (8b37134)
  • keep the real checkout path out of the fixtures (3c10006)
  • read a conversation window and follow it forward (9be5081)
  • widen the window past an oversized line instead of returning empty (ac34424)
  • fix byte/UTF-16 offset mismatch, follow past half-written lines, and endAt bounds (3af385b)
  • a per-session attention state fed by the hook stream (154569e)
  • idle notification with a call outstanding is waiting, matching Slack (84415cc)
  • one attention verdict, read by the desktop notifier (7106149)
  • attention state is the fan-out's only writer, desktop only reads it (3ec2053)
  • fire the desktop toast on the transition into waiting, and pin the fan-out (4f94e39)
  • pin that leaving waiting does not fire a toast (7d9295b)
  • expose the conversation window and its follow to the renderer (44c8d7c)
  • one declaration of Attention, re-exported not copied (c9fb0d9)
  • the conversation follow no longer races itself, outlives a closed session, or drops a call's late result (5f0c9af)
  • per-entry poll guard, did-start-navigation for reload, and a tick's own unhandled rejection (3df8817)
  • pin entry identity on a late read, and which call a result resolves (426bcfb)
  • add assistant-ui with Tailwind and the vendored shadcn components (6c0431d)
  • one-line tool rows and the waiting banner (3c0fc29)
  • resolve @ under vitest and restore the scroll-locked group wrapper (42b97e3)
  • a failed call always says so, a running call stops contradicting itself (c38a1b1)
  • pin the running label and the nameless-kind filter (873c85e)
  • the pane, its runtime and its composer (e3870c7)
  • a one-shot attention read for the conversation view (184bed6)
  • lock the composer for real, seed its state, label load-more (1d40eb0)
  • the composer lock was already real, isRunning wasn't, two blind spots closed (b920816)
  • pin that nextTurnsFor still delegates the merge (c6e7631)
  • toggle between the terminal and the conversation (88fff27)
  • CSS collision, a roll keeps its view, icon toggle, focus race (c354481)
  • say why lastRoll keeps one slot (243b998)
  • a dead follow, a jumping viewport, and margins the reset ate (b74b33c)
  • a session that waits can stop waiting (3f08224)
  • a surviving session keeps its transcript path across a restart (9248aa2)

Not on a branch

  • settings no longer arrive as one undivided general tab (01b12e1)
  • a session with nothing to show yet is not a dead end (72b568d)
  • the composer's own text was drawn in the browser's black (97360f6)
  • the composer's text reaches the CLI as a paste, and markdown keeps its shape (fcc0ab6)
  • say where a slash command went, and what model is answering (bd0f377)
  • the model sits in the composer and changes from there (0605c3b)
  • the model menu no longer closes itself (74cedd8)
  • effort has its own command, and a switch that stalls says so (af0ddac)
  • typing a slash offers the skills and commands that exist (d75fcd2)
  • a codex session's rollout reads as turns too (121e3bc)
  • the model control draws only what the CLI has told us (d2e8b98)
  • codex gets the same readout, and its own way to change it (27201a1)
  • codex model list, prefix-first matching, and a click that puts the caret back (b07a25c)
  • an @ offers the project's files (19e4ff7)
  • the banner slot stops churning while someone types (a0995e2)
  • a drag that ends outside the composer keeps its selection (bffb8fd)
  • typing no longer races the menu's own rendering (2f201f3)
  • codex lists its own commands, and the notice waits for silence (8804280)
  • codex asks for a skill the same way it asks for a file (50c2333)
  • a slash command reads as it was typed, and PowerShell is a run (d1e7a7d)
  • answer the CLI's prompt without leaving the conversation (e3fbf2f)
  • the waiting banner quotes the question the CLI is asking (5a9b406)
  • the CLI's choices are answerable where they are read (7cd4a82)
  • a limit notice reads as one, and the composer draws one box (a180ab2)
  • reasoning effort is set from the composer, on both CLIs (bd47496)
  • the model menu is the CLI's own list, and codex gets one too (f125099)
  • codex is offered only the levels its picker can be answered on (64e5e80)
  • the model readout follows codex instead of trailing a turn behind it (43dbfe9)
  • the model readout follows the screen instead of a clock (56961f8)
  • codex marks its choices with the character its prompt starts with too (e9a191a)
  • an unsent message survives leaving the composer (0b7b913)
  • a message sent into a busy session says it is waiting its turn (1dba566)
  • a dropped file or a pasted image goes into the message as a path (ce422f5)
  • the queued notice says what it is rather than counting (bfb4cae)
  • the turn's action bar drops Refresh (b2ffad0)
  • a codex session taken back from the Host is not left mute (c130774)
  • a session spawned from inside a Claude Code terminal keeps its transcript (96bae84)
  • a window with an answer and no question keeps looking (75d9efc)
  • your own message appears as you send it, and says the CLI is thinking (5f52c66)
  • codex's exec rows say what ran and how it went (b7fbc0f)
  • the screen that says no CLI is installed can install one (c2d2199)
  • the first screen is written for someone who has never opened a terminal (cca81d3)
  • after installing, the app finds the CLI and carries on by itself (2f771ea)
  • a first run is asked once what a new session should open on (08e2f2d)
  • the first-run question says where to change it, once (fd808da)
  • the README says a session can be read as a conversation (215bd11)
  • /clear moves the session to a new file, and the view follows it (b391355)
  • the conversation screenshot is framed like the hero, sidebar and all (8d23c4a)
  • the first question a CLI asks is answerable from the conversation view (9c6e7b4)
  • the folder-trust question names itself and closes the composer (44db7bb)
  • app shortcuts work from the composer, and the caret follows the pane (223dfbf)
  • the trust step is drawn from what it is, not from what the screen gave up (e1e6820)
  • the rows to answer a prompt with are always there to press (768c74b)
  • nothing typed can be swallowed by a dialog that ignores typing (2956013)
  • the rows to press are found on the screen, not in a window cut out of it (da68a9e)
  • read the marker Claude Code actually draws, and shut the box until it asks (7326f1e)
  • what the view says the CLI is doing comes from the CLI (3fb070a)
  • a message carries no edit button (e7de8ea)

Installing

macOS — the build is not notarized yet. It is ad-hoc signed, so it runs on Apple Silicon, but Gatekeeper blocks the first launch: after dragging the app to Applications, clear the quarantine flag with xattr -cr /Applications/Astera.app. System Settings → Privacy & Security → Open Anyway works too. Auto-update stays off on macOS until the build is notarized, so a new version means downloading the dmg from this page again. The Windows installer is unaffected.

Linux — the AppImage needs the executable bit before it will run: chmod +x the file you downloaded. The deb installs with sudo apt install ./<file>.deb, which pulls its dependencies; dpkg -i on its own does not. The supported floor is Ubuntu 22.04 / Debian 12, and the deb declares it, so apt refuses an older system rather than installing something that cannot start.

Windows 1.1.0 or earlier — this one has to be installed by hand. Those builds shipped without the file the updater reads to find releases, so their update check fails and no notice from inside the app can reach you. Download the installer below and run it — whatever you install from here on updates itself normally.

Full Changelog: v1.3.17...v1.3.18

v1.3.17

Choose a tag to compare

@github-actions github-actions released this 11 Sep 04:28

New features

  • Astera now runs sessions under a Host process, so closing the app no longer ends them.
    Terminals, agent sessions and Jobs keep running, and reopening picks them back up with their
    output and their conversation.
  • Settings → Info says what the Host is holding. How many sessions, terminals and runs are alive
    inside it.
  • The quit and update confirmations say how many sessions are kept. They used to say every
    session would end.

Fixes

  • Reconnecting a session no longer opens a second Slack thread. It keeps the thread it already
    had, and the tool call still waiting for an answer.
  • Losing sight of a session is no longer reported as the session ending. A session still running
    under the Host is no longer posted as exited, and its Work Unit is no longer marked interrupted.
  • A rolling chain picked up mid-chain now rolls off the account it is actually on. It used to go
    back to the first account in the rotation.
  • The file editor's find bar no longer throws off scrolling.
Every change (166)

Job continuity p0

  • the Job Continuity setting, coupled to Smart Resume as the spec says (45e7843)
  • plant the handoff stub when enabling Job Continuity turns Smart Resume on (1c2d14e)
  • the Continuity group — Job Continuity beside Smart Resume, with the coupling visible (bdf6f9a)
  • read the picker's current value after the confirm, and leave the Korean comment as it was (4ef8d3c)
  • a Dispatch remembers the provider's own session id (83ced7d)
  • derive run and task journal events from a state diff (cca2e71)
  • a check that passes into review is a passed check (d5af9c3)
  • derive worker-attempt journal events - start, end, limit, roll, native session (9ba4e8c)
  • the checkpoint trigger policy — one per worker per write (a8590f9)
  • the checkpoint priority test now proves priority beats arrival order (66ba65c)
  • the journal - an append-only SQLite file via node:sqlite, no new dependency (4f80c46)
  • cite the Task-less Dispatch case by name, not by line number (42abf42)
  • the journal's doc matches its SQL, and a failed rollback cannot hide the real error (d8b4f3d)
  • the recorder, one object that journals a transition, checkpoints it, and reads it back (f39046f)
  • a checkpoint never rejects, and a failed close is logged like every other failure (3574a10)
  • load() also returns the state as read, so a restart's losses can be journaled (35440b1)
  • the coordinator reports when a worker's prompt is about to leave and when it has (a0b3d5c)
  • report the provider's session id when it is learned, for Job Continuity to keep (b06ac8d)
  • a runtime-lost line for a worker the restart could not find (d2bb8f7)
  • wire the journal into the save funnel — intent before spawn, losses at boot, runtime-lost in the Timeline (c836691)
  • a journal that cannot open does not stop orchestration, and four review nits (3eca444)

Job continuity p1

  • hand every agent a real Git Bash, so its hooks and statusLine can run (7f13d2a)
  • parse the Git Bash lookup with Windows semantics on every host (f72741a)
  • a Dispatch records the person who closed it, so recovery leaves it alone (9f8b983)
  • the decision that turns three observations into one strategy (36372e3)
  • read the worktree facts a recovery decision needs (d2d14e0)
  • an unreadable worktree stops recovery instead of looking clean (706fde5)
  • journal schema 2 with recovery actions, a version check and an orphan sweep (67b6c05)
  • a check can start without a report, and a lost worker's Task can be gated (737160d)
  • update canTransition test for dispatched -> blocked P1 recovery path (21532ec)
  • the transition comment stands on its own, and the refusal path is tested (c5ae888)
  • a worker can be started as a resume of the provider's own session (095553b)
  • carry out a decision - resume, re-dispatch, re-check or ask (56fb4d8)
  • the reconciler that finds lost workers and decides for each one (08fa2d0)
  • re-check a candidate against fresh state before acting on it (452340f)
  • one line per recovery decision, and the events behind it (fa08b4c)
  • run recovery at boot and whenever a worker is lost (56d3aaa)
  • recovery review round 1 — orchestration guard, boot order, live-reconciler gate (4463d8c)
  • the onDispatchLost comment says what the wiring actually does (c9e8b70)
  • deleting a Run drops its recovery actions too (aff508b)
  • the latest attempt decides, not the latest lost one (db67d24)
  • an unreadable journal is not evidence that nothing started (8d4db4f)
  • the re-dispatch row needs a clean tree, as the spec says (bfc9747)
  • do not recover an attempt the journal never saw (9493d58)
  • drop the startWorker argument nothing reads (72f504c)
  • drop the event type nothing emits (e61750f)
  • two comments about the dispatched -> blocked edge (d1185cf)
  • the Timeline names the recovery strategy in the reader's language (918e62b)
  • one reader behind the two Timeline lookups (12c492c)
  • candidates honours the pendingStart gate too (86f0af1)
  • read the schema version before applying the schema (d01667e)
  • unquote the recovery key (7078297)

Job continuity p1 5

  • the question a person is asked is written in their language (99f9246)
  • a recovery line opens to show why that strategy was chosen (adab1dc)
  • the mid-operation reason reads as Korean, not as a form field (89335f9)

Astera host slice1

  • the address the Host listens at and the lines it speaks (4390030)
  • the log file the Host explains itself in (5a35e93)
  • listen, shake hands, and leave when nothing needs the Host (363e17f)
  • close() no longer re-arms the idle timer after it has run (3859fdb)
  • the Host's entry point, built beside the app and the CLI (3bccb57)
  • the shape of the call that starts the Host (50f65e1)
  • the app finds a Host, or starts one, and keeps the line open (5ab7d18)
  • stop() actually stops the client (cbb0dd2)
  • the app starts the Host at launch and says so in Settings (3fc6e29)
  • a spawn that fails must not take the app down (f296cc2)
  • the Settings row gives the reason it is not connected (0807d09)
  • refuse an address directory that is not private to this user (9d2e45e)
  • will-quit stops the Host client with the other subsystems (248c79e)
  • the Host client writes its own log, not orchestration's (fb79559)
  • two comments that no longer match the code (6c83a72)
  • both sides put a deadline on the handshake (31d7695)
  • the probe's fallback timer is cleared when the probe answers (a0ff5cd)
  • the Host runs from the profile directory, not the app's (98484fd)
  • the host-client log line ends with an escape, not a raw newline (aa55b81)

Willow

  • the find bar's hidden panel no longer throws off scrolling (b5858d6)

Astera host slice2

  • the registry that owns the Host's sessions and their scrollback (cf7fd1c)
  • registry review round 1 — honest zero scrollback, dead-session refusal test, RegistryPty rationale (eced4e8)
  • the Host owns terminals, and stays while one is alive (73674f8)
  • a handler that threw is not a malformed line (8d6c148)
  • a pty that lives in the Host, behind the interface the app already had (c8b7d75)
  • carry a string args through the wire instead of refusing it (dee0751)
  • cover the pending-state gap and the real fan-out, tighten the exit guard (e94f80f)
  • one pty factory for the app's life, routed to the Host when there is one (7cdd1f7)
  • each manager records what its pty is, for the Host to hand back (86913c6)
  • carry the run's startedAt, and correct two review comments (88cf981)
  • a manager can adopt a pty the Host was already running (ec4c4bd)
  • an adopted pty keeps its own id, and a run keeps the directory it started in (4107a1a)
  • adoption resumes the pty, and refuses a note of another kind (cee6c48)
  • the app takes its terminals back when it starts (a134187)
  • review round 1 — the pty-spawn window is closed, and an adopted session gets a tab (006ae99)
  • review round 2 — the codex rollout branch is removed, not half-fixed, and the ready budget covers both phases (ebd1a0a)
  • review round 3 — an adopted codex session's rolling chain no longer locates, and the ready sum lives where the constants do (69b781a)
  • the Host's own diagnostics go to the Host log, not the orchestration one (632d9d2)
  • a session that ends lets go of its scrollback (d83455d)
  • a worker the Host still runs is not a worker we lost (1d0870e)
  • a still-open Dispatch keeps its spec file (756eb12)
  • a Host we could not ask is not a Host with nothing (a9e026e)
  • the boot comment no longer claims a silent Host answers like no Host (0eefa46)
  • the address says which protocol lives there, and an older Host is asked to leave (15ca3a6)
  • name the single-instance lock as retirement's safety net, and correct protocol-mismatch's own comment (7623387)
  • the outer catch settles what sawPeer knows, and v1 probes the address v1 actually bound (6ae5c87)
  • a Host asked to leave actually leaves (324890f)
  • a quit leaves the Host's terminals running (e15a06f)
  • a dropped connection no longer duplicates an agent (967dd43)
  • an adopted session gets its schedule back (e84bea1)
  • nodePtyFactory really does ignore the Host's note (7cabbb5)
  • the ptyRouter comments say what actually calls use() (3bea181)
  • the comments this branch added are English, like the rest of it (7e38184)
  • the first-handshake branch names the case it does not fix (e0a915c)
  • the kept-sessions quit text says "다시 열면" rather than naming Astera twice (a723709)
  • registering over a live id cancels the exit notification it replaces (b7d5821)
  • losing sight of a coordinator does not empty its slot (22c5e64)
  • a validation run lost sight of is not a failed validation (9877bfa)
  • the Host factory is installed on every handshake, not only the first (1aede7e)
  • the sweep leaves alone a pty the app already holds live (98661d2)

Host note updates

  • a pty's note can be patched after the spawn (8dfc8e6)
  • PtyLike can be told to remember something about itself (2b27868)
  • a renamed session keeps its name across an app...
Read more

v1.3.16

Choose a tag to compare

@github-actions github-actions released this 08 Sep 07:39

New features

  • Ctrl/Cmd+F in the file editor opens a find bar that belongs to the app. It floats at the
    top right instead of pushing the document down, so the line you were reading stays where it is, and
    it says how many matches there are and which one you are on once you move to it. Match case, whole
    word and regular expression are toggles inside the field, Ctrl/Cmd+H opens the replace row,
    and a pattern that does not compile now says so instead of quietly finding nothing. Each file
    remembers what you were looking for, so switching tabs and coming back brings that search and its
    highlights with it, and a read-only file gets no replace row at all.
  • Smart Resume passes along a memo the agent left while it was working. With Smart Resume
    selected, sessions get an astera-handoff skill that writes down what the work is for, what is
    done, what is stuck, what comes next, which decisions were made and why, and what you asked for in
    your own words. That last one is the reason the feature exists: nothing else in the app can observe
    a constraint you stated in conversation. The app adds what only it can vouch for, the branch and
    the commit, and when the conversation is resumed from a blank start the memo rides along with the
    checkpoint, so the next session starts from what the last one knew instead of from the code alone.
  • When the agent is driving a page, the screen shows it. Esc stops it. The tab the agent is
    working in gets a violet frame that glows inward, a banner saying the agent is using your
    computer, and an arrow that slides to each click, fill and key press and stays where it landed.
    Esc stops the script whether you press it on the tab or inside the page itself, and a modal, a
    menu or a text field still gets the key first when one of those is open. The agent also reads a
    field's value and a checkbox's state.
  • Copying a file in the tree copies the file, not its path. Ctrl/Cmd+C in the file tree puts
    the file itself on the clipboard, so it pastes into Explorer, and a file copied in Explorer pastes
    into the tree, by Ctrl/Cmd+V or from the menu. The paths still travel as text alongside, so
    pasting into a session terminal is unchanged. Windows only for now, and copy only: Explorer tells a
    move from a copy by a format this route cannot write, so a cut pasted outside would silently copy
    while the app still showed the items as cut. macOS and Linux keep the text they had.

Fixes

  • File name sorting in the file tree is fixed. The tree compared names character by character, so
    the order was not the one you would expect. It now matches what Explorer and Finder do, and what
    the names people give files assume.
Every change (37)

Agent tab in use ui

  • snapshot() reports a control's value and a checkbox's state (61a1e1a)
  • click, fill and press report the point they acted on (c581f29)
  • tell the renderer where the agent acted (43d741b)
  • check the pointer event's payload against its type where the two shapes meet (85b026b)
  • frame and banner on the agent's tab while its script runs (ea0e998)
  • the agent's pointer slides to each click, fill and key press (6e5cdc7)
  • Esc on the agent's tab stops its script, as the banner says (b034cef)
  • let a modal, a menu or a text field own Escape before the agent's script does (2bba562)
  • clear the agent's pointer when its run starts, and pin the banner to the frame (d502cbd)
  • an input's snapshot text is empty; its content is its value (699db47)
  • Esc typed inside the agent's page also stops its script (24aa6d0)
  • the agent's frame glows and its pointer stays, like the reference (91056bc)
  • the guest Escape filter is checked for every modifier (5ed23a3)
  • the frame glows and the pointer glows along its own outline, both in violet (1ce25e8)
  • the banner names the agent, not Astera (65663eb)

Maple

  • the guide catches up with the code, and says which language to write in (fb0a069)
  • the Compound run kind was missing from all four lists (9785f4e)

Smart resume handoff memo

  • the memo types and a parser that refuses rather than coerces (c4c374e)
  • render the memo as one briefing section, facts before hints (c29c0b9)
  • clamp the memo section to its cap even when the fixed parts alone exceed it (4ed7f64)
  • the tab briefing carries the memo section after CURRENT STATE (3b9112b)
  • a per-session memo store that answers unknown until it has read its file (2375778)
  • the blank-start briefing consults the memo store, never blocks on it (f542592)
  • astera handoff --memo - stores a validated memo for the calling session (6c4987c)
  • wire the memo store, the CLI command and Smart Resume as the fourth toggle (69c496e)
  • plant the astera-handoff skill and say so in the Smart Resume hint (6b5c65d)
  • log the skip when the memo store answers unknown (3720395)
  • require the memo's list fields to be arrays before trusting the file (2b1defe)
  • fix two stale counts in the handoff toggle comments (b7410e0)
  • keep the memo file out of the project and name the setting correctly (92e0f27)

Reef

  • episode_2 sorts before episode_11, not after (3f477dc)
  • copy and paste carry the files, not only their paths (031a275)

Editor find bar

  • count how many times a query matches in the open file (1d00b6e)
  • find and replace as the app's own bar, not CodeMirror's panel (84cebee)

Not on a branch

  • assert the win32 spelling of a project root only where win32 holds (f24279d)
  • what an agent can and cannot isolate when it drives the screen (a48291e)
  • what an isolated desktop can and cannot do, measured (747a981)

Installing

macOS — the build is not notarized yet. It is ad-hoc signed, so it runs on Apple Silicon, but Gatekeeper blocks the first launch: after dragging the app to Applications, clear the quarantine flag with xattr -cr /Applications/Astera.app. System Settings → Privacy & Security → Open Anyway works too. Auto-update stays off on macOS until the build is notarized, so a new version means downloading the dmg from this page again. The Windows installer is unaffected.

Linux — the AppImage needs the executable bit before it will run: chmod +x the file you downloaded. The deb installs with sudo apt install ./<file>.deb, which pulls its dependencies; dpkg -i on its own does not. The supported floor is Ubuntu 22.04 / Debian 12, and the deb declares it, so apt refuses an older system rather than installing something that cannot start.

Windows 1.1.0 or earlier — this one has to be installed by hand. Those builds shipped without the file the updater reads to find releases, so their update check fails and no notice from inside the app can reach you. Download the installer below and run it — whatever you install from here on updates itself normally.

Full Changelog: v1.3.15...v1.3.16