Audit of a2de021
This commit is contained in:
+3
-2
@@ -10,8 +10,9 @@ The app joins the tailnet as its own node with libtailscale and reaches byre's H
|
||||
|
||||
## Stack
|
||||
|
||||
- Swift 6, SwiftUI, Observation. Minimum macOS is the major version byre's host runs (`sw_vers --productVersion` prints it); there is no back-deployment.
|
||||
- AppKit where SwiftUI falls short (see "Gaps in SwiftUI"), and for `NSAlert`, the update progress panel, key and window monitoring, and Core Animation layers for the transcript's scanner and spinner, which animate in the render server so SwiftUI never redraws around them.
|
||||
Minimum macOS is the major version byre's host runs (`sw_vers --productVersion` prints it); there is no back-deployment.
|
||||
|
||||
The transcript's scanner and spinner animate in the render server so SwiftUI never redraws around them.
|
||||
|
||||
The project is a Swift package built with `swift build`, not an Xcode project. It builds with Xcode's toolchain: `xcode-select --print-path` must print `/Applications/Xcode.app/Contents/Developer`. With the Command Line Tools selected while Xcode is installed, Swift Build finds two toolchains for the Command Line Tools path and picks one at random on each run; the pick is part of the build request, so every change of pick rebuilds every target.
|
||||
|
||||
|
||||
+2
-3
@@ -74,7 +74,7 @@ A model's name picks its vendor: `gpt-*` runs on Codex, `gemini-*` on Antigravit
|
||||
- Claude Code records `--append-system-prompt` on a session's first request and reuses it on resume, so a running session keeps the guidance it started with; the `UserPromptSubmit` hook re-attaches the guidance to every turn so existing sessions see changes. On a fork Claude Code can reuse the system prompt recorded for the source conversation, the source's cwd included, so the hook's copy is what reliably tells a fork where it is.
|
||||
- A Claude `result` with `num_turns` 0, no `result` text and no error, outside an interrupt, isn't a turn end: the CLI emits one on its own, for example after a resume when it reports a background shell left over from the previous process. byre logs `ignored result with no model turns` and keeps the turn running.
|
||||
- stream-json doesn't expand `@path` the way the interactive CLI does, so the composer has no `@`-file mentions; the agent reads any file a message names with its own tools.
|
||||
- A snapshot always sits on a turn boundary, the only place a Codex conversation can be forked. Older snapshot rows also carry the triggers `message`, `tool_call` and `timer`.
|
||||
- A snapshot always sits on a turn boundary, the only place a Codex conversation can be forked.
|
||||
|
||||
## Agent behavior
|
||||
|
||||
@@ -102,10 +102,9 @@ byre never signs with a key on the machine it runs on. When a project checkout's
|
||||
|
||||
## Client Macs
|
||||
|
||||
Task agents use the Macs the human has byre's app open on, through the app's WebSocket to `/api/clients/connect`.
|
||||
Task agents use the Macs the human has byre's app open on.
|
||||
|
||||
- The app pings every 10s and reconnects after 25s with no pong. That catches a socket byre dropped while the Mac slept: the close never reached the Mac, and without something sent on it the app would wait on it indefinitely.
|
||||
- Messages are allowed up to 256 MiB each way, so file contents fit in one message; `client_read` refuses files over 64 MiB so the base64 reply stays well under it, past which byre would drop the connection.
|
||||
- `log show --info --last 10m --predicate 'subsystem == "run.fc.byre.mac"'` on a client shows `client request <id>: <op>` lines and `byre-hands` starts and exits, which are info level and kept only in memory, so they cover the last few minutes at most; connection drops (`client connection closed`, `client connection got no pong`) are notices, kept on disk, so `log show --start` reaches much further back for them. byre's log shows `client connected` and `client disconnected`.
|
||||
|
||||
## Screen and app control
|
||||
|
||||
Reference in New Issue
Block a user