Repository navigation
Releases: syalia-srl/aegis
Release list
v2.21.0
Known at release: the canary fails on codex-cli 0.166.0 (open canary issues; 0.164.0 is the tested maximum), and OpenCode scenarios time out at random at every version tested (#540), so OpenCode's tested range did not move. Claude Code's tested maximum moves to 2.1.316.
What's Changed
- feat(monitors): a click on a monitor goes to the tool call it waits on by @apiad in #871
- fix(journal): read a quiet commit from its command by @apiad in #873
- feat(handoff): /handoff, and a handed-off session refuses messages by @apiad in #876
- feat(handoff): session_handoff lets an agent hand off its own session by @apiad in #878
- feat(handoff): continue on a linked server by @apiad in #879
- feat(schedules): an agent's schedule tools reach a trusted server as name@server by @apiad in #877
- Notices reach Claude Code at its next tool call of any kind (#880) by @apiad in #882
- A session is told a repository's know-how when it first touches it (#881) by @apiad in #883
- test: three tests no longer depend on timing (#884) by @apiad in #885
- test(quota): wait for the held message's record, not only its turn by @apiad in #888
Full Changelog: v2.20.0...v2.21.0
v2.20.0
Known at release: the canary fails on codex-cli 0.166.0 (open canary issues), and its two OpenCode scenarios time out (see #540). The tested harness range did not move.
What's Changed
- fix: a linked server's workflows and schedules show and act from the linking server by @apiad in #868
Full Changelog: v2.19.0...v2.20.0
v2.19.0
A trusted link can be an exit: with exit_via: <link> in .aegis.yaml, or Exit here in Settings, what aegis starts reaches the internet from the far server's address, with no VPN (#862). See the links help page.
Known: the canary fails on Codex (22 scenarios, with a provider error) and on 2 OpenCode scenarios, all open before this release. A nightly browser test is flaky (#867). An exit has not yet been measured on a real network path between two machines.
v2.18.0
What's Changed
- turn_end says what the person has seen this turn (#679) by @apiad in #744
- fix(artifacts): artifact_send says whether a browser was watching by @apiad in #765
- feat(load): each session's CPU and RAM, in notices, session_list and the UI by @apiad in #766
- Point aegis at syalia-srl/aegis and aegis.syalia.com by @apiad in #769
- docs(changelog): 2.17.1 on main by @apiad in #775
- CI: slow shards nightly, flaky tests quarantined, until the fair release by @apiad in #777
- test: quarantine test_a_restart_mid_run_finishes_the_run (#778) by @apiad in #779
- fix(recap): pass native model id to Codex by @dvaldes8128 in #749
- Dock attached and linked files beside the transcript by @dvaldes8128 in #753
- fix(multi-user): signal member processes as their owner by @dannyward630 in #734
- Claude sign-in with a setup-token, a card when it fails, quota from the stream (#361) by @apiad in #658
- Dictation keeps its model in Cache Storage (#751) by @apiad in #786
- On a phone, Fleet joins the buttons and the session tabs get their own row (#752) by @apiad in #787
- On a phone, the first tap on a reply or handoff chip works (#428) by @apiad in #790
- A file Android reports as 0 bytes arrives whole (#697) by @apiad in #791
- A one-line agent message is as tall as its line (#743) by @apiad in #792
- On a phone, a secret card's title stays beside its icon (#633) by @apiad in #793
- fix(cgroups): cap sessions together, give the server memory and CPU of its own by @apiad in #783
- feat(client): Alt+P session switcher across servers (#781) by @apiad in #789
- fix(cgroups): one work/ tree for sessions, terminals and browsers, task caps, server disk priority by @apiad in #795
- feat(sessions): pause every session at once, and start paused by @apiad in #796
- help_read opens a ### subsection (#760) by @apiad in #797
- A session_spawn prompt that starts with an aegis command runs it (#545) by @apiad in #798
- The command menu shows nothing inside /spawn's prompt (#764) by @apiad in #800
- fix(client): top bar icon buttons one size and on one line with the version by @apiad in #802
- An open tab takes the new client by itself after an upgrade (#499) by @apiad in #803
- fix(map): require wayfind 0.1.1 (#618) by @apiad in #805
- perf(serve): listen before importing fastmcp (#519) by @apiad in #806
- fix(client): a narrow window keeps the header buttons on one row (#807) by @apiad in #808
- test: workers import fastmcp at collection (#811) by @apiad in #812
- test(browser): spawn helpers wait for the open socket (#809) by @apiad in #810
- fix(workflows): stamp workflow message headers in UTC by @apiad in #813
- revert: serve listens before importing fastmcp (#806, #812) by @apiad in #817
- test: read the interrupted label from the DOM and lift its quarantine (#693) by @apiad in #818
- test(multiuser): wait for both exit codes before reading the second (#773) by @apiad in #820
- fix(queues): complete a task whose flushed turn ends before its send returns by @apiad in #821
- fix(workflows): show a spent loop as done so its session closes (#741) by @apiad in #822
- test(browser): read the phone archive row layout in one task (#774) by @apiad in #825
- test(agents): wait for the callback's turn before closing the worker (#445) by @apiad in #828
- fix(btw): free the side note's slot before its block settles (#826) by @apiad in #827
- feat(quota): project a window from its rate and its history by @apiad in #830
- fix(session): do not publish a closed session's row again by @apiad in #857
- feat(artifacts): take dictation and files inside a page by @apiad in #859
- fix(artifacts): tell the agent an answer was dictated on a linked server too by @apiad in #860
New Contributors
- @dannyward630 made their first contribution in #734
Full Changelog: v2.17.0...v2.18.0
v2.17.1
v2.17.0
What's Changed
- feat(sessions): a rename can take an archived session's handle (#673) by @apiad in #676
- feat(client): a Waiting on row shows its session's tab card (#667) by @apiad in #672
- Keep the landing film current: release review, longer cut, logo cards, music (#669) by @apiad in #677
- fix(client): open the tab bar's session menu under its button by @apiad in #681
- fix: a clean exit between turns is not an error; a spent step's lock names who may continue it by @apiad in #683
- OpenCode servers end with what started them (#620) by @apiad in #685
- feat(workflows): a progress bar for sh and check steps (#682) by @apiad in #687
- feat(menu): complete /spawn's agent, agent@server, flags and values by @apiad in #686
- feat(links): trusted links reach both ways between servers one person uses (#684, 1/3) by @apiad in #688
- feat(links): agents read across a trusted link (#684, 2/3) by @apiad in #689
- feat(links): agents act across a trusted link as at home (#684, 3/3) by @apiad in #690
- feat(sessions): autoclose closes a session once its agent ends done (#691) by @apiad in #692
- feat(knowledge): native memory store, BM25 hint on every send (slice 1 of #694) by @apiad in #698
- feat(transcript): draw Claude Code's task notices as inbox rows by @apiad in #700
- feat(knowledge): native skills, slash commands, skill_run and skill tools (slice 2 of #695) by @apiad in #701
- feat(knowledge): proposals, Undo cards, expiry and staleness flags (slice 3 of #694) by @apiad in #703
- feat(knowledge): the Knowledge view (slice 4 of #694) by @apiad in #704
- feat(knowledge): import through /setup and the per-user native switch (slice 5 of #694) by @apiad in #705
- feat(knowledge): /consolidate, duplicate and never-recalled signals, optional embeddings (slice 6 of #694) by @apiad in #706
- fix(client): open the phone message box two lines wide on focus by @apiad in #708
- fix(client): keep the new tab inside a phone when the tip is long (#711) by @apiad in #713
- feat(workflows): fold the card's inputs and show elapsed, ETA and cost by @apiad in #714
- docs(agents): ask before merging, and start from the pinned vision issue by @apiad in #726
- test(knowledge): read a queue worker's cards once it is archived by @apiad in #729
- ci: cache Chromium's apt packages so a slow mirror cannot time out a shard by @apiad in #727
- fix(knowledge): the usage log's first connect waits out a held lock by @apiad in #733
- feat(client): share target and links that open a filled New session form by @apiad in #736
- fix(fleet): cut a long waiting label instead of widening the Fleet by @apiad in #739
- Journal outcomes: --repo merges name their repo, closed issues are rows (#737) by @apiad in #742
- feat(notices): the disk notice names another disk with room by @apiad in #746
- Usage view: live tables, page, subscriptions, links and import (#737) by @apiad in #747
- feat(client): a Usage button in the top bar (#759) by @apiad in #761
Full Changelog: v2.16.0...v2.17.0
v2.16.0
What's Changed
- feat(client): one icon set in the theme, with harness, effort and permission icons and an Icons help page by @apiad in #649
- feat(library): run aegis in-process with a typed API (slice 1 of #646) by @apiad in #654
- docs(help): wait on CI again after a re-run or a push by @apiad in #659
- fix(client): the tab card wears the theme (#657) by @apiad in #660
- feat(library): queues, workflows and schedules as typed handles (slice 2 of #646) by @apiad in #663
- feat: /quiet and Alt+Shift+[ ] to move tabs (#661, #662) by @apiad in #664
- fix(canary): run the range's ends again, and test Claude Code 2.1.309 and Codex 0.164.0 by @apiad in #671
- fix(fleet): keep a workflow step's badge inside its card (#670) by @apiad in #675
- fix(transcript): a streaming reply no longer jumps the view up and back by @apiad in #674
Full Changelog: v2.15.0...v2.16.0
v2.15.0
Known issues:
- The canary fails three OpenCode scenarios on opencode v2.1.4 (#651, #652, #653): a queue worker's result, a read session, an agent's spawn. v2.1.4 is newer than the tested range (max 2.1.2), so aegis asks before a session starts on it.
browser_entry_p50_msrose from 1.27 to 1.63 ms in CI's bench with the one-row phone header (#636).- Open from the 2.14.0 smoke test: #633 (the secret card's title wraps), #634 (dictation can append "Thank you."), #635 (
crontab -lfails under the multi-user unit).
What's Changed
- fix(client): on a phone the header is one row (#631) by @apiad in #636
- New tab: hints from the help pages, /feedback, and a doctor row with /doctor by @apiad in #582
- fix(client): typing / in the new tab opens the command list (#632) by @apiad in #639
- fix(recap): one quiet line, and an ask only while the session needs its person by @apiad in #640
- fix(commands): pass the caller to the menu listing by @apiad in #643
- feat: read agent replies aloud, built-in voice by default and Phonon opt-in (#637) by @apiad in #638
- docs(feedback): show the issue draft as a rendered page by @apiad in #648
- fix(handoff): the new session takes the old one's place in its group by @apiad in #645
Full Changelog: v2.14.0...v2.15.0
v2.14.0
Added
-
Cursor Agent is a fourth harness:
harness: cursor. aegis could run
Claude Code, OpenCode and Codex only, so a Cursor workspace had to be driven
in a terminal beside the rest. A cursor agent now runs through
cursor-agent acpwith its own model catalog, its model, effort and
permission applied while it runs, the aegis MCP endpoint handed to each
session throughsession/new(each with its own token), permission requests
answered by the configured level and never "allow always", streamed text,
tools and the harness's own generated title in the transcript, prompts typed
mid-turn queued instead of cancelling the run, and an interrupt that closes
the turn and resumes the conversation withsession/load.aegis doctor
probes its version and catalog like the other harnesses, and an untested
version is named with the command that installs a tested one. Cursor reports
no cost or token counts through ACP, so those sessions show neither.
help: config#add-an-agent -
Several people on one server, each as their own Linux user. With
multi_user:in.aegis.yaml, every token names a Linux user, and each person's harness, terminals, monitors, workflow steps and the git calls made for them run as that user with no capabilities, so git and GitHub record each person's own work. The server needsCAP_SETUID,CAP_SETGIDandCAP_SETPCAPfrom its unit (aegis service install --multi-user), andaegis doctorchecks the setup.
help: tokens#linux-users -
In multi-user mode, files are read and written as their person. The Files view, Alt+O, the editor, downloads,
file_send, attachments and artifact drafts open each file with the Linux credentials of the person it is for, so the kernel checks every access. A member's Files view shows their home, and their attachments and artifact drafts live under~/.aegisthere, where their agent can reach them.
help: tokens#linux-users -
Secrets that never enter the transcript.
secret_sendhands the person a password, token or key from a file: the server keeps a random pad in memory and only the XOR on the card, and the person reveals it once before it expires.secret_requestasks the person for a secret in a password field on a card and writes it 0600 to a new file the agent uses by reference, removed when the session closes. Both work through linked servers, and the agent's priming steers it to them for credentials.
help: secrets -
An agent's browser docks beside its transcript.
browser_openplaces the browser in the session's canvas (dock=, right by default), where the person watches, takes over and gives it back without leaving the session; a browser the person gives to a session docks there too. When control reaches the person, the view they see fits the page's viewport to itself.
help: browsers#opening-one -
Browsers the agent and the person share. A Chromium runs on the server, held like a terminal and streamed live into a tab. The person clicks and types into it; an agent reads and drives it with the
browser_*tools, hands the page over for a captcha, a sign-in or a step to try, and is woken with what the person did when they give it back. Profiles keep sign-ins between opens. Needs thebrowserextra.
help: browsers -
In multi-user mode, a member sees only its own. Its sessions, terminals, workflow runs, schedules, queue tasks, archive and journal are the only ones it or its agents can list or address, and someone else's answers as a thing that does not exist. An admin still sees everything; without
multi_usernothing changes.
help: tokens#linux-users -
A dictated message tells the agent it was dictated. Dictation gets about three words in ten wrong (29% WER, measured), and the agent read the result as if it were typed. Now a message whose box got dictated text carries a line asking the agent to read it by context and ask about what it cannot make sense of; the person's row shows a small "dictated" mark instead of that line.
help: sessions#dictate-a-message -
The Fleet shows a group of sessions as one stack. A session and those it started take one cell: the head's card with the edges of two more behind it in the group's colour, a badge with the group's size, and a row with each member's state. A member that needs you marks the stack and is named on it, and under "Needs you first" the stack ranks by its most urgent member. A click unfolds the group across the grid with every member's card and who started it; Stack folds it again. Queue workers and quiet sessions keep cards of their own, and the Fleet's unfolding is kept apart from the bar's folds.
help: sessions -
A session tab shows its card on hover. Resting the pointer on a tab opens that session's Fleet card under it, with the tab menu's actions as icon buttons (open, quiet, interrupt, sleep, restart, hand off, rename, archive), and the pointer can move onto it. On a phone a long press on a tab opens the same card as a sheet from the bottom edge; cards in the Fleet keep their menu.
help: sessions -
Sessions started from another session gather in one group. A session spawned by an agent, a queue worker, a session an agent started on a linked server, and a session a person started from another one's transcript or with
/spawnall join the group of the session that started the chain, fixed at spawn so it outlives that session. The tab bar draws each group as one block in its own colour, headed by its oldest open member, whose count folds the group to one tab and blinks when a hidden member needs you. Dragging a head moves its group, a member moves only inside its group, and Alt+J unfolds a group to reach a hidden member. A head's menu archives the whole group after one question.
help: sessions
turn_end takes close: an agent the person told to close when it finishes ends its last turn done with close: true, and aegis archives it and every session it or they started once the turn ends. It is refused, with what still runs, while a monitor, background task, queue task, workflow run or any session in that tree is not finished.
help: handoffs#close-yourself-when-you-finish
-
Alt+Q quiets the session in front. It runs the Quiet button, so the tab hides until the turn ends, only for a working or waiting session; it works from the message box and shows in the ? list and the palette.
help: sessions -
/multiuserwalks you through setting up several people. An admin types it, and the session's agent reads the new help page multi-user, looks at the host, asks who the people are and which folders they share, and shows every command (users, groups, the pool file, the unit, the tokens) before it runs one. On a server already in the mode, it starts at adding a person.
help: multi-user -
Alt+A archives the session in front. It runs the Archive button, so a session that is not done still asks first; it works from the message box and shows in the ? list and the palette.
help: sessions -
Phone width for every artifact. Each artifact's bar, on its card, in the viewer and in a docked pane, has a Phone width button that narrows the page to 390 px, so you can see on a desktop how it looks on a phone. Agents are told to lay every page out for both widths.
help: artifacts -
An agent can suggest a change to
.aegis.yamlthat you apply from a card.config_suggestputs the diff in the transcript with Apply and Not now; Apply writes exactly that text, and a file changed since makes the card stale instead of overwriting it. Only an admin applies.
help: config -
/setupmoves how you already work into aegis. Type it in any session: the agent reads your harnesses, skills, instruction files, cron jobs and, after you say yes, your past transcripts, proposes on one page what each becomes (agents, queues, schedules, workflows), and applies what you tick. Run it again whenever you like; it proposes only what is new since the last run.
help: setup -
A busy agent learns who is waiting, and an urgent handoff reaches it mid-turn. A message held for a working session's turn to end is now announced on its next aegis tool result, with its sender and first line, so the agent can finish early when it changes the work.
peer_handoff(urgent=true)skips the wait on Claude Code and Codex and reaches the running turn at its next tool step, markedsteered inin the transcript; the reply sayssteered into.
help: handoffs#hand-work-over
Changed
-
The Host rows list every disk the server mounts. They showed only the filesystem holding aegis, so a second disk with room to spare (
/mnt/databeside a full/) was invisible. Each disk now has its own row in the Fleet band and the session sidebar, thedisktile shows the fullest, and ahost:block hides mount points or adds ZFS and NFS ones.
help: config#disks -
plan_updateanswers with the plan it saved. The reply lists each item with its state and reminds the agent to call again when an item starts or finishes or the work changes, so the plan on the card stays true without waiting for the stale-plan nudge.
help: sessions -
Recaps and side notes work with every configured harness.
recap:and
btw:no longer require Claude Code; they use the selected Claude Code,
OpenCode or Codex agent through a read-only one-shot call.
help: config#recaps -
The quota warns only when you are over pace. A window turns amber, and sessions get the quota notice, when its spend projects past 100% at reset with half of it already spent; it turns red at 90% spent. Before, a projection of 80% was already a warning, so a week ending with 15% unused told every agent to cut back.
help: sessions#notices -
Agents are primed for browsers only where browsers run, and told to point the person at the tab. The primer's browser paragraph now appears only when the
browserextra is installed and the server is not in multi...