Repository navigation
Releases
Backlight 0.9.2
Download: Backlight-0.9.2.zip, with Backlight.app inside: unzip, move it to Applications. A release is the build with the agent tools (Settings › Agents, off until you turn it on); the plain build is ./build.sh from the source.
It is self-signed, not an Apple Developer ID, so the first time macOS refuses to open it: open it once, then System Settings › Privacy & Security › Open Anyway.
Requires: macOS 27 on Apple silicon.
Updates. Backlight updates itself: Backlight menu › Check for Updates…, and once a day by itself unless Settings › General turns that off. Update and Restart downloads the zip, checks it against its SHA-256 and the app in it against this app's identifier, then replaces the old app (which goes to the Trash) and opens the new one. Nothing is installed without your say.
New since 0.9.1
- Responsive design keeps your window. The page stands in a frame instead: iPhone, iPad or any size, by the fields under it or by dragging its edges. The frame belongs to its tab, ⌘+ and ⌘− work inside it, and the agent's
resizeuses it too. A frame that doesn't fit the window is drawn smaller; the page is told the size you set all the same. - Settings is a panel over the page, like History and Downloads, and its texts are shorter.
- A pop-out from an extension is a panel too, not a window of its own. Bitwarden's "pop out" is one; a click outside puts it away.
- A download shows itself. The list comes out under the downloads button when one starts and goes away by itself after the last one is done.
- Local servers. The address keeps its port (
localhost:3000), and a JSON document opens as a tree that folds, with Raw and Copy. - The empty window shows the sites you use most, on the desktop blurred.
- The update box lists what changed in a line each.
After updating, quit and reopen Backlight if it did not restart itself, and start a new chat in your agent.
SHA-256: Backlight-0.9.2.zip 0815f24c6f0d7124d50f8d28b0ada4487c2570723b58701ab5b74573b39aa886
Backlight 0.9.1
Download: Backlight-0.9.1.zip, with Backlight.app inside: unzip, move it to Applications. A release is the build with the agent tools (Settings › Agents, off until you turn it on); the plain build is ./build.sh from the source.
It is self-signed, not an Apple Developer ID, so the first time macOS refuses to open it: open it once, then System Settings › Privacy & Security › Open Anyway.
Requires: macOS 27 on Apple silicon.
Updates. Backlight updates itself: Backlight menu › Check for Updates…, and once a day by itself unless Settings › General turns that off. Update and Restart downloads the zip, checks it against its SHA-256 and the app in it against this app's identifier, then replaces the old app (which goes to the Trash) and opens the new one. Nothing is installed without your say.
New since 0.9.0
- The icon file is a tenth of its size. 0.9.0's was 1.4 MB, a quarter of the app, because macOS's own tool stores every picture in it uncompressed. The large sizes now use a 256-colour palette (the glow looks the same) and there is no 1024 px one (macOS scales the 512 px). The app is 4.8 MB, not 6.1, and the download 2 MB, not 3.3.
Coming from BasicShell: quit BasicShell, then open Backlight; it brings your tabs, sign-ins and settings along (0.9.0's notes say what and how). BasicShell can't update itself to Backlight, since it has a different identity: download once, and Backlight updates itself from there.
After updating, quit and reopen Backlight if it did not restart itself, and start a new chat in your agent.
SHA-256: Backlight-0.9.1.zip 5608e0e1e570d9091a7fff23b6da0f4b49d19e5c7f8ea10b44b4648c39fe185a
Backlight 0.9.0
BasicShell is now Backlight. The same browser under a name that says what it does: the page is lit from behind, and what sits in front is yours. A new icon, and everything that carried the old name has the new one.
Download: Backlight-0.9.0.zip, with Backlight.app inside: unzip, move it to Applications. A release is the build with the agent tools (Settings › Agents, off until you turn it on); the plain build is ./build.sh from the source.
It is self-signed, not an Apple Developer ID, so the first time macOS refuses to open it: open it once, then System Settings › Privacy & Security › Open Anyway.
Requires: macOS 27 on Apple silicon.
Coming from BasicShell
- Quit BasicShell, then open Backlight. At its first launch Backlight copies what BasicShell kept: your tabs, history, bookmarks, profiles, extensions, settings, and your sign-ins and site data. It only copies, so BasicShell and its data stay as they were until you delete them (
~/Library/Application Support/BasicShell,~/Library/WebKit/com.mbahakeskin.basicshell,~/Library/HTTPStorages/com.mbahakeskin.basicshell*,~/Library/Preferences/com.mbahakeskin.basicshell.plist). If BasicShell is still open, Backlight says so and waits. - What macOS keeps by the app's identity is asked again: location, camera and microphone for pages, notifications, and being your default browser (System Settings › Desktop & Dock › Default web browser).
- BasicShell can't update itself to Backlight: an update has to be the same app, and this one has a new identity (
com.mbahakeskin.backlight). Download this zip once; Backlight updates itself from here on. - Agents: the server is called
backlightnow (toolsmcp__backlight__…in Claude Code) and the skill isbacklight. Settings › Agents › Add to Claude Code (or the others) adds the new entry and takes the oldbasicshellone out; the skill is written again from the same page. - The agent tools, the extension and page scripts, the folder in Application Support and the repository (github.com/mbahakeskin/Backlight; the old address redirects) are renamed too.
New since 0.8.2
- A new name and icon (a dark glass disc with a crescent of light behind it).
- The first launch brings BasicShell's data along (above), tested against a copy of a real install: 30 tabs, 1,584 history entries, bookmarks, profiles, extensions, settings and cookies all came across.
Known limits
- A keyword's prompt reaches Claude only if claude.ai still fills its box from
?q=; sources disagree, socl hellomay open an empty chat. - Add as Search Engine… needs a search form that uses GET; one that posts is refused with a message.
- Not saved: DRM-protected video, live streams, video described by a DASH .mpd with segment templates, and the adaptive streams of YouTube.
- Passkeys and Apple Passwords need an Apple Developer ID and so don't work yet.
- Extensions run in the main profile only.
After updating, quit and reopen Backlight if it did not restart itself, and start a new chat in your agent.
SHA-256: Backlight-0.9.0.zip ae30bf701af69c1d13525a8b8caa0b560034dffb529408e4a19e06be6261f653
BasicShell 0.8.2
Download: BasicShell-0.8.2.zip, with BasicShell.app inside: unzip, move it to Applications. A release is the build with the agent tools (Settings › Agents, off until you turn it on); the plain build is ./build.sh from the source.
It is self-signed, not an Apple Developer ID, so the first time macOS refuses to open it: open it once, then System Settings › Privacy & Security › Open Anyway.
Requires: macOS 27 on Apple silicon.
Updates. BasicShell updates itself: BasicShell menu › Check for Updates…, and once a day by itself unless Settings › General turns that off. Update and Restart downloads the zip, checks it against its SHA-256 and the app in it against this app's identifier, then replaces the old app (which goes to the Trash) and opens the new one. Nothing is installed without your say.
New since 0.8.1
- Bitwarden no longer asks for Touch ID at every launch. An extension's popout that had opened as a tab (Bitwarden's "view item" from its autofill menu, an address with
?uilocation=popout) was written into the session and brought back at launch; with the vault locked it showed its lock screen, and Bitwarden asked for Touch ID at once, with nothing on screen to explain it. Such tabs are no longer saved, and one left in a session from before is skipped when it is read. - A keyword can be refused. In the address field, going down to the plain "Search" row and then typing on (
claude xyz) is now a search of the engine, and so is Backspace on a chip: it gives back the word you typed (claude, not its key) and keywords stay off for it until the field is emptied. Before, typing a space afterclaudealways put the Claude chip back. - The single-letter keywords are gone. Wikipedia is
wiki, Maps ismap, Reddit isrd(a single letter alone never opened a site anyway). A list you have already edited keeps its own keys; Settings › Search › Restore Built-in List brings these back. - Settings no longer sinks under full screen. Opening Settings from the menu bar in BasicShell's full screen could cover the new window with the full-screen one for a quarter of a second, a flicker. The full-screen window now hides and shows the menu bar by the pointer only while it has the keyboard.
Known limits
- A keyword's prompt reaches Claude only if claude.ai still fills its box from
?q=; sources disagree, socl hellomay open an empty chat. - Add as Search Engine… needs a search form that uses GET; one that posts is refused with a message.
- Not saved: DRM-protected video, live streams, video described by a DASH .mpd with segment templates, and the adaptive streams of YouTube.
- Passkeys and Apple Passwords need an Apple Developer ID and so don't work yet.
- Extensions run in the main profile only.
After updating, quit and reopen BasicShell if it did not restart itself, and start a new chat in your agent.
SHA-256: BasicShell-0.8.2.zip 0dcdaf9c8c1227253731d0ed9c124093da4eedf8306f9f60d083652ed80133b5
BasicShell 0.8.1
Download: BasicShell-0.8.1.zip, with BasicShell.app inside: unzip, move it to Applications. A release is the build with the agent tools (Settings › Agents, off until you turn it on); the plain build is ./build.sh from the source.
It is self-signed, not an Apple Developer ID, so the first time macOS refuses to open it: open it once, then System Settings › Privacy & Security › Open Anyway.
Requires: macOS 27 on Apple silicon.
Updates. BasicShell updates itself: BasicShell menu › Check for Updates…, and once a day by itself unless Settings › General turns that off. Update and Restart downloads the zip, checks it against its SHA-256 and the app in it against this app's identifier, then replaces the old app (which goes to the Trash) and opens the new one. Nothing is installed without your say.
New since 0.8.0
- The address field searches a site by a keyword. Type
ytand a space (or Tab) and a YouTube chip stands in the field: what you type next is searched on YouTube.yt lofiand Return does the same in one go; the keyword alone opens the site's front page (a single letter alone doesn't, so a search for "w" stays a search). A word that is nearly a keyword (yout,clau) is offered as a row, and Tab turns it into its chip; Backspace in the empty field takes the chip off. Built in:ytYouTube,clClaude,gptChatGPT,ghGitHub,wWikipedia,mMaps,rReddit,tlTranslate; Settings › Search edits the list, with %s where the words go.- A site's color, faintly: the chip, the chosen row and the field's glass take a little of the site's color. Settings › Search has an eyedropper beside each keyword to take it from anywhere on the screen.
- Right-click a search box › Add as Search Engine… makes a keyword from the site's own search form (forms that use GET), with its color from the page's
theme-coloror its icon.
- The same field runs commands. The menu bar's items are its commands, read as the field opens, so a new menu item is a new command:
mute,translate,downloads. Start with>to see commands only. Keys are shown where there are any.splitoffers Open Side by Side with each other tab, which had no menu item. The Develop and Debug menus' items come after anything else that fits. - View › Pick Color from Screen opens macOS's eyedropper and copies the color's code (#RRGGBB) to the clipboard.
- Full screen and the macOS menu bar.
- Touching the Dock's edge no longer makes the menu bar jump down and up once.
- A three-finger swipe to another desktop no longer leaves the menu bar black until you click BasicShell.
- Leaving BasicShell's full-screen desktop, the menu bar comes as the window goes, not about a quarter of a second after.
- Settings › General › Debug logging writes
[edges]lines for finding out what a flicker was.
- The Settings window is a little wider, for its seventh tab.
Known limits
- A keyword's prompt reaches Claude only if claude.ai still fills its box from
?q=; sources disagree, socl hellomay open an empty chat. - Add as Search Engine… needs a search form that uses GET; one that posts is refused with a message.
- Not saved: DRM-protected video, live streams, video described by a DASH .mpd with segment templates, and the adaptive streams of YouTube.
- Passkeys and Apple Passwords need an Apple Developer ID and so don't work yet.
- Extensions run in the main profile only.
After updating, quit and reopen BasicShell if it did not restart itself, and start a new chat in your agent.
SHA-256: BasicShell-0.8.1.zip 7f2627c0ff4eda51a866a17c8e8c14a008f39ae8f08172d24d0cf100bf967a60
BasicShell 0.8.0
Download: BasicShell-0.8.0.zip, with BasicShell.app inside: unzip, move it to Applications. A release is the build with the agent tools (Settings › Agents, off until you turn it on); the plain build is ./build.sh from the source.
It is self-signed, not an Apple Developer ID, so the first time macOS refuses to open it: open it once, then System Settings › Privacy & Security › Open Anyway.
Requires: macOS 27 on Apple silicon.
Updates. BasicShell updates itself: BasicShell menu › Check for Updates…, and once a day by itself unless Settings › General turns that off. Update and Restart downloads the zip, checks it against its SHA-256 and the app in it against this app's identifier, then replaces the old app (which goes to the Trash) and opens the new one. Nothing is installed without your say.
New since 0.7.1
- The download button finds the video you pressed. A page keeps several videos loaded ahead (Instagram's reels hold nine at once), and the button used to save whichever file the page had read last. Now the page says how long the pressed video runs and how big its picture is, and each file the page loaded is read for what it says of itself in its first kilobytes (a picture or sound, how long, how big; fragmented files by their
sidxlist, others bymoov). The picture file of that length is saved, with the sound file of that length, and the Mac joins them into one mp4; a playlist is matched the same way by the sum of its pieces. If nothing can be told apart it says so instead of saving the wrong one.- TikTok: a video is one file with picture and sound together, the sound's track first; the whole of its header is now read, so it is found and saved as it is.
- Reddit: its player is a web component with its video in an open shadow root; the button now looks inside those, so it shows on Reddit's own videos and not only on photos.
- Instagram: the right reel, with its sound.
- Settings › General › Debug logging writes
[media]lines (what was pressed, what the page loaded, what each file turned out to be) for finding out why a video didn't save.
- Copy Address leaves out the tracking. ⇧⌘C and Edit › Copy Address drop what only follows you (utm_…, fbclid, gclid, igsh, YouTube's and Spotify's si, Twitter's s and t, Amazon's tag and ref, and the like); a video's t, a search's q and a product's variants are never touched. The pill says how many came off. Hold ⌥ in the Edit menu, or ⌥⇧⌘C, to copy the address as it is. Settings › Privacy › Copied links turns it off. The QR code and AirDrop share the cleaned address.
- BasicShell menu › Keyboard Shortcuts… lists every key the menus answer to, read off the menus as they are, with a search field and what the pointer does with a key held.
- Peek (Shift-click a link) no longer has a grey bar across its top: the page fills the card, and its title and its two buttons sit on glass above it.
- The profile row shows the name of the profile shown, in its colour, at the end of the row (the main one too).
The download button, as it stands
On a site you list (Settings › General › Download button on photos and videos; empty until you add one), a small button comes up over a large photo or video while the pointer is on it, in the page or in a player's frame, even under a transparent layer or inside a shadow root. It saves a photo's largest picture, a video that is a file as it is, a video whose address is a playlist or that a site sends in pieces (blob:) by what the page loaded: an HLS playlist's best quality with its sound, or the picture's and the sound's files, fetched as the page would and joined into one .mp4. It shows in the Downloads panel with progress and Cancel. Play the video for a moment first. Nothing outside macOS is used.
Known limits
- Not saved: DRM-protected video, live streams, video described by a DASH .mpd with segment templates, and the adaptive streams of YouTube.
- A site you list is watched while its tabs are open; a site you don't list is not watched at all.
- Passkeys and Apple Passwords need an Apple Developer ID and so don't work yet.
- Extensions run in the main profile only.
After updating, quit and reopen BasicShell if it did not restart itself, and start a new chat in your agent.
SHA-256: BasicShell-0.8.0.zip fbdd2fae291eb3f15961354c22f1b50aef74ecb8962b5c50f885c3865f9a6305
BasicShell 0.7.1
Download: BasicShell-0.7.1.zip, with BasicShell.app inside: unzip, move it to Applications. A release is the build with the agent tools (Settings › Agents, off until you turn it on); the plain build is ./build.sh from the source.
It is self-signed, not an Apple Developer ID, so the first time macOS refuses to open it: open it once, then System Settings › Privacy & Security › Open Anyway.
Requires: macOS 27 on Apple silicon.
Updates. BasicShell updates itself: BasicShell menu › Check for Updates…, and once a day by itself unless Settings › General turns that off. Update and Restart downloads the zip, checks it against its SHA-256 and the app in it against this app's identifier, then replaces the old app (which goes to the Trash) and opens the new one. Nothing is installed without your say.
New since 0.7.0
- Dark pages (Settings › General, off until you turn it on). A page that stays white while macOS is dark gets dark colours of its own, with pictures left alone; a site that already has a dark look is left alone, which is measured, not read off what the site says. Some pages break (a hero over a picture, say), so the way out is close: the button in the site's tools (the half-filled circle) or ⇧⌘D turns it off for that site, ⌥⇧⌘D pauses it everywhere until pressed again or BasicShell quits. Settings lists the sites you set by hand. The page script and colour engine are adapted from Search (MIT, credited in LICENSE and the README).
- Download button on photos and videos (Settings › General; no sites until you add some). On a listed site and its subdomains, a small button comes up in the corner of a large photo or video while the pointer is on it, even beneath a transparent layer the site lays over its pictures. It works in the page and in the player frames inside it, which is where most players live, including frames that are loaded hidden behind an ad and grow later.
- Pages drawn as fast as the screen (Settings › General, on). WebKit holds a page's own animations and scripted scrolling to about 60 frames a second even on a 120 Hz screen; this lets them go as fast as the screen does. Off puts the limit back. The effect shows only on a faster screen than 60 Hz.
- Tab groups: a tab opened from a link inside a group now shows its place in the tree, indented under the tab it came from, with the lines in the group's colour.
How the download button saves a video
It saves what the site gives, in the order that works:
-
A photo: the largest picture the page offers for it (what its
srcsetlists, or the image a link around it goes to), otherwise what is shown. -
A video that is a file: the file, through the Downloads panel, on the page's own session (its cookies) with the page as referrer.
-
A video whose address is a playlist. Many players give
<video>an HLS playlist address that doesn't end in .m3u8, which WebKit plays itself. The first bytes of the address are read; if it is a playlist, it is saved as in 4, not as that text. -
A video a site sends in pieces (a
blob:address, as most do). On a listed site BasicShell notes what the page asks for that looks like video: playlists and video or audio files (addresses, kinds and sizes only; nothing is put into the page and nothing of what came back is read). When you press the button it takes what the page loaded last:- an HLS playlist: the best quality of the master, and its separate sound if it has one, are fetched piece by piece (six at a time, AES-128 pieces decrypted), as the page would, and put end to end;
- or the video and sound files, as most social sites keep them (the picture's file and the sound's, asked for in byte ranges): each is fetched whole.
The Mac then joins them into one .mp4 (AVFoundation: picture from one, sound from the other; a transport stream is turned into an mp4 on the way). It shows as a row in the Downloads panel with progress and Cancel, and a "Show" button when it is done.
-
Play the video for a moment first: what the page has not yet loaded, BasicShell has not yet seen.
No outside software is used for any of it: no ffmpeg, no packages, only what macOS has (WebKit, AVFoundation, CommonCrypto). It uses two private WebKit calls (_resourceLoadDelegate, _removeAllUserScriptsAssociatedWithContentWorld:), noted in the README.
Known limits
- Tested on files and streams made for the purpose (HLS with transport-stream and fragmented-mp4 pieces, separate picture and sound files read in ranges) and on a public test stream. Not yet tried on Instagram, Facebook or X; if a video there doesn't save, the Downloads panel row or the pill says why.
- Not saved: DRM-protected video, live streams, and video described by a DASH .mpd with segment templates.
- A site you list is watched while its tabs are open; a site you don't list is not watched at all.
- Passkeys and Apple Passwords need an Apple Developer ID and so don't work yet.
- Extensions run in the main profile only.
After updating, quit and reopen BasicShell if it did not restart itself, and start a new chat in your agent.
SHA-256: BasicShell-0.7.1.zip 0465d9421b564ec5c4a16f0f7e24465235bdca63f2d3c08dbdee23fe2759c240
BasicShell 0.7.0
Download: BasicShell-0.7.0.zip, with BasicShell.app inside: unzip, move it to Applications. A release is the build with the agent tools (Settings › Agents, off until you turn it on); the plain build is ./build.sh from the source.
It is self-signed, not an Apple Developer ID, so the first time macOS refuses to open it: open it once, then System Settings › Privacy & Security › Open Anyway.
Requires: macOS 27 on Apple silicon.
Updates. BasicShell updates itself: BasicShell menu › Check for Updates…, and once a day by itself unless Settings › General turns that off. Update and Restart downloads the zip, checks it against its SHA-256 and the app in it against this app's identifier, then replaces the old app (which goes to the Trash) and opens the new one. Nothing is installed without your say.
New since 0.6.2
- Tab groups. Pastel colours, a + on the group's header for a new tab in it, drag a tab onto another to group them, drag it out to leave. Collapse and rename from the header; groups come back after a restart.
- Profiles. A strip of coloured dots above the pinned tabs. Each profile has its own cookies, tabs, history and bookmarks, so two accounts on one site can be open at once.
- Split view. Two pages side by side (right-click a tab › Open Side by Side) with a divider; Find, zoom and the address bar follow the half in focus.
- Page translation. A button in the address bar and in the page's menu. Google's online engine by default (fast, nothing to download); Apple's on-device one can be chosen in Settings › General. The page is translated as you scroll to it, and the agent tools always read the original text.
- Import from Chrome, Brave, Edge, Arc, Vivaldi, Opera, Firefox and Safari: bookmarks, history, and passwords as a CSV file (Settings › Import). Cookies are not imported.
- Hover preview and Peek. Hold ⌘ over a link for a small live preview; Shift-click a link to open it in a Peek over the page, then keep it as a tab or close it.
- Developer settings per site (user agent and more), listed in Settings.
- Settings › Tabs: how long a tab is left running before it is put to sleep (right away, 30 seconds up to an hour). A fresh install starts with the sidebar only; an existing install keeps its layout.
- Also: ChatGPT's icon shows again; the zoom level is in the page's right-click menu; Codex is in the agent list (Settings › Agents); signing in to Claude Code through a Google popup reaches the code screen (the page that opened the popup is no longer frozen meanwhile); Esc closes Find from the page.
Agent tools
arrangeandtabsknow groups, split view and profiles;opencan use a profile, and an optional "Agent" profile is created and chosen by the agent per task (Settings › Agents). Agents work in whichever profile is shown and ask before reaching into another, per site.- New
pick: you point at an element on the page and the agent gets it;selectionreturns the picked element first.
Known limits
- Passkeys and Apple Passwords need an Apple Developer ID and so don't work yet; "We weren't able to sign you in" with a Google passkey is that.
- Extensions run in the main profile only.
After updating, quit and reopen BasicShell if it did not restart itself, and start a new chat in your agent.
SHA-256: BasicShell-0.7.0.zip fc86e90b1659ae84bb7b91cf9aea74e2adea4e05f667b86ae2e862ade78f1127
BasicShell 0.6.2
Download: BasicShell-0.6.2.zip, with BasicShell.app inside: unzip, move it to Applications. A release is the build with the agent tools (Settings › Agents, off until you turn it on); the plain build is ./build.sh from the source.
It is self-signed, not an Apple Developer ID, so the first time macOS refuses to open it: open it once, then System Settings › Privacy & Security › Open Anyway.
Requires: macOS 27 on Apple silicon.
Updates. BasicShell updates itself: BasicShell menu › Check for Updates…, and once a day by itself unless Settings › General turns that off. Update and Restart downloads the zip, checks it against its SHA-256 and the app in it against this app's identifier, then replaces the old app (which goes to the Trash) and opens the new one. Nothing is installed without your say.
Changed since 0.6.1 (all in the agent tools; nothing else in the browser)
- A click that took the page to another address made the agent wait about 3.8 s for a script the page never answered. It now answers in about 0.2 s.
- Calls an agent sends together reach the browser in the order it sent them. Three clicks in one turn sometimes ran out of order.
expectandwaitalso see what a control is called (its aria-label, title or alt). A button that became "Selected colour Black" had madeexpectfail after 3 s although the click worked.read_pagereads a long page in windows (offset) and says which lines it has and where the rest is.findputs the closest names first, says where controls that are called the same are (the card a button is on), takes a regular expression, and lists what the page has when it finds nothing.- The page's language is said when it is not English. Controls behind an open dialog are marked, and a part of the page that scrolls by itself is said, with a point to scroll from.
searchtries once more when the keyboard does not get into the field.- A ref survives a page rebuilding its element; a link that opens a new tab says so; tabs can be closed together; Settings › Agents shows the short summary an agent gave of each call.
- The agent's instructions no longer tell it to start with
tabs, and its skill asks it to say it is done only from what the page shows.
After updating, quit and reopen BasicShell if it did not restart itself, and start a new chat in your agent.
SHA-256: BasicShell-0.6.2.zip 1b020382c04e952821f285946d78f4adfa5e6a77f6635e58969fff1697dcddad
BasicShell 0.6.1
Download: BasicShell-0.6.1.zip, with BasicShell.app inside: unzip, move it to Applications. A release is the build with the agent tools (Settings › Agents, off until you turn it on); the plain build is ./build.sh from the source.
It is self-signed, not an Apple Developer ID, so the first time macOS refuses to open it: open it once, then System Settings › Privacy & Security › Open Anyway.
Requires: macOS 27 on Apple silicon.
Updates. From 0.5.3 on, BasicShell updates itself: BasicShell menu › Check for Updates…, and once a day by itself unless Settings › General turns that off. Update and Restart downloads the zip, checks it against its SHA-256 and the app in it against this app's identifier, then replaces the old app (which goes to the Trash) and opens the new one. Nothing is installed without your say.
Fixed since 0.6.0
- Full screen on a screen with a notch: a click in the strip beside the notch, where the menu bar would be, reaches the page again. macOS kept every click there for the auto-hiding menu bar, so a link or button in the strip did nothing and the menu bar came down. The menu bar and the Dock are now hidden until the pointer presses against the top edge (or the Dock's edge, from where the Dock fills its zone); anywhere else in the strip the click is the page's.
- An extension's native helper that ends at once no longer takes BasicShell with it. Writing to it killed BasicShell with SIGPIPE, with no crash report; now the helper is closed and noted in the debug log. (Apple's iCloud Passwords helper is one that macOS refuses to start for BasicShell, so that extension still can't work here.)
After updating, quit and reopen BasicShell if it did not restart itself, and start a new chat in your agent.
SHA-256: BasicShell-0.6.1.zip 14f0b135a3085dca849bb4e38721b24d91e6be6f832fab7e520235669079258e