Everything the lenses do, on one page.

COS Glasses turns your Even Realities G2 into a heads-up chief of staff, powered by the AI agents already on your Mac. Ten minutes here and the glasses feel like muscle memory.

App 6.10.639 · build 639 Server 6.73.1 Control 0.5.289 Even G2 Even app 2.2.10+

This guide describes 6.10.639, the current companion pack. It installs by sideload from the Glasses Hub. Most lens examples on this page were drawn from 587; from 592 on, Home and the Sessions list look different, as the notes below describe. 587 was submitted for marketplace review on October 4, 2026, and approval is pending. 624 includes the 588 total-runtime repair, 590 agent activity and companion animation mirror, a compact Home running-session count with stable companion refreshes, 597’s one status mark per row, the 598 and 599 framed activity reader, 600’s server-described Continue behavior, 601’s header and Home status fixes, 602’s steady working mark and session names, 603’s Home hold for Sessions, 604’s offline dictation in Mac only, 605’s offline words kept, 606’s Home hold ring, 607’s sending arrow and phone status marks, 609’s move to Even SDK 0.0.16 with marks that keep up with a faster Even app, 610’s C, O, S on Home and a mark per session on the Sessions list, 611’s mark column beside the list, 615’s centered question mark, 616’s Haiku polish default, 617’s send and session recovery, 618’s session clock that counts through background work, 619’s sent words that stay sent, 620’s hold that continues a Cursor session, 621’s Scan code on your Mac, 622’s hold to talk that fills a circle first, 623’s Meeting Ask on the phone and the lens, and 624’s model switch in the Ask chat. From 609 on it needs Even App 2.2.10 or newer; on Even App 2.2.9, 607 is the newest build that installs. It has not been submitted for marketplace review. The last confirmed Public store listing is 6.10.629; 635 is delivered through the Hub repo.

Included: native session identity, protected saved turns, phone meeting and speaker review, COS status signals, and automatic queue-receipt refresh. Read the offline boundaries before field use.

639 / server 6.72.0 / Control 0.5.289

Choose the live preview engine: Whisper Turbo (default) or Parakeet Ultra, which runs offline on the Neural Engine and measured 10.7% fewer errors than Turbo on our silver set. Pick it on the phone (Settings, Voice, Mac transcription) or in COS Control (Settings, Transcription), and install Parakeet from COS Control. Saved meetings use timestamped Large-v3 with correct word times; the audio front end is highpass only and quiet chunks are found by a speech detector. Older phones keep Turbo previews. Dictation is unchanged.

637 / server 6.71.13 / Control 0.5.288

The first Fact check covers the whole meeting; later ones cover only what is new, and the answer says which. When a claim leaves its starting point implicit, like flying from here, the check starts from your Home city (Settings on the phone, or the Meeting assistant card in COS Control) and says so; leave it blank to use your phone’s area. City and state only, never a street address. The phone layout lines up with the tab bar on every iPhone and foldable, and a meeting the server already finished no longer shows as Live now in COS Control.

635 / server6.71.12 / Control0.5.287

Tap Fact check to check a recent public claim with readable evidence under the existing public-topic opt-in. Private details stay out of public search. Sonnet is the default for fresh Meeting Ask settings; explicit saved choices are preserved. Draft and grounding review use the selected model. Shorter answers retain useful summaries, omit unclear page counts and distinguish reported labor from verified savings.

Ask follow-ups after saving, tap inline transcript/web/file citations, and review an answer as linked Work. The complete635 package includes Moonshine Tiny/ORT, local phone memory keyword search, phone image text/file context, stable status layout and Android pairing hardening. Physical phone/G2/Android acceptance remains pending. Roof-cost comparison usefulness is limited; no verified average or overpricing ratio is promised. Experimental transcription and automatic cue flags remain off; stable transcription stays unchanged.

Exact phone test script. Builds632/633 omitted offline assets and are withdrawn; use complete635 or complete629 for rollback.

Glasses 623 and 624: ask about a meeting from the phone or the lens

On the phone, the Meetings view starts with Live / recent meeting · Ask when this app has a live or recent recording, and a saved meeting has its Meeting Ask history. Pick Catch me up, Summarize so far, Suggest questions or Action items, or type your own question and tap Ask. One answer runs at a time; Stop answer ends it and Retry answer asks again. COS on your Mac keeps every question and answer, so they are still there after you leave the view or end the recording. Each answer names the model that answered, how far into the meeting it read, and its sources; Show in transcript jumps to the cited line. Since 624 a Model control beside Ask switches the meeting assistant model. It is the same setting COS Control changes, and Sonnet is the default for fresh settings; explicit saved choices are preserved.

On the lens, tap the live transcript while a meeting records. Its menu now also offers Catch me up, Summarize so far, Suggest questions, Action items and Recent answers, and Quick Actions ends with Meeting Ask. A choice opens the MEETING ASK reader with up to 10 recent answers; since 624 its footer names the model that answered. Tap, then tap again at Tap again: live transcript, to go back where you were reading. Ask on the lens never uses the microphone. MEETING AI still only starts and stops recording, and asking never starts or stops one.

Meeting Ask needs server 6.69.0 or newer; with an older server the Ask view says to update COS on your Mac and recording is not affected. Server 6.70.0 lets a plain public question, such as who is, search the web. By default only typed public-topic words go into a search. Server 6.71.12 can also select public-topic words from recent transcript passages after explicit consent; files, calendar, memory and unrelated private details do not lend search words, and a personal detail or a key withholds the search with the reason. Presets never search. The build notes record these views tested against a fake COS, not yet a phone and G2 with a real server. Package rollback is 623 with the same server.

Glasses 622: hold to talk fills a circle first

Keep holding until the circle fills and recording starts; the nav shows ◌ Keep holding, ◐ Keep holding, ● Keep holding, then ● Starting. Let go early, tap, or leave the page and nothing starts. The fill takes half a second by default. Choose Instant, 0.3, 0.5, 0.8, 1 or 1.5 seconds under Settings, Voice, Hold to talk: fill time; Instant is the behavior before 622. A temple hold waits the same time but shows nothing until you speak.

Private candidate 618: the session clock counts the whole run

Build 6.10.618 times the whole run of work at the bottom of a session’s page, not only the current turn, so a background agent reporting back no longer resets it to 0s. When the main turn is done and agents are still working, the footer says Background 12m 04s. When the Mac cannot tell whether an agent is still working, the clock keeps counting with a ? in front, and it stops after 20 minutes with no word. It stops when the Mac reports nothing running for 12 seconds. A session that was already working when the lens opened shows a + after the time, because the real time is longer. Background shell commands run outside an agent are not counted yet. Same servers as 617. Rollback is build 617 with the same server.

Private candidate 617: sends stay with the page that started them

Build 6.10.617 keeps late Continue, queued, phone-saved and fork results with the page visit that started the send. Leaving Sessions or opening another draft is respected, and an old result cannot clear a new draft. Busy or stale-session failures now give steps to recover the same session instead of generic fork advice. Same servers as 616. Rollback is build 616 with the same server.

Private candidate 616: Haiku polishes dictation by default

Build 6.10.616 polishes dictation with Haiku 5.5 by default, to cost less. Voice settings also offers Sonnet 5.5 for higher-quality polish and GPT-5.6 Luna Fast through Cursor. A model you already chose is kept, and if polish fails the original transcription stays. No new server install is needed. Same servers as 615. Rollback is build 615 with the same server.

Private candidate 615: the question mark sits centered

Build 6.10.615 centers the question mark in the lower Sessions rows and keeps it in place as the cursor moves. It is built on 611 and replaces the withdrawn 614; 612 and 613 were not released. Same servers as 611. Rollback is build 611 with the same server.

Private candidate 611: marks no longer slide behind the list

Build 6.10.611 puts the Sessions mark column beside the list instead of on top of it. In 610 a swipe moved the list’s text under the column, so a row’s glyph slid behind the marks until the list redrew. Same servers as 610. Rollback is build 610 with the same server.

Private candidate 610: Home writes C, O, S, and Sessions shows each session’s mark

Build 6.10.610 traces C, then O, then S through the working mark on Home; other screens keep the mark as before. The Sessions list shows each session’s mark in a column on the left: the moving working mark while it writes, pulsing waiting bars and its 1q count while a follow-up waits, a dim mark when it is open on your Mac, and a ? ring when COS could not check it. While any row has a mark, a long quiet title shows about 6 fewer characters. If the glasses refuse the column, the list falls back to text glyphs. The phone list keeps its glyphs. Same servers as 609. Rollback is build 609 with the same server.

Private candidate 609: Even SDK 0.0.16, and marks that keep up

Build 6.10.609 moves to Even SDK 0.0.16, which newer Even apps will require; what it sends to the glasses is unchanged. It needs Even App 2.2.10 or newer and will not install on 2.2.9, where 607 is the rollback. On a faster Even app the marks draw twice a second without skipping frames, and the Home hold ring draws all 12 steps on a 4 second hold. On a slower Even app nothing changes. It replaces 608, a device-test build. Same servers as 607.

Private candidate 607: a sending arrow, and status marks on the phone

Build 6.10.607 shows a moving sending arrow on a prompt’s page while the Mac has not taken it yet, for up to 45 seconds, then the waiting mark. Held sends still wait, a gone Mac still pulses, and a running reply still shows the COS working mark. The G2 preview on the phone now shows the small status mark from the top right of the lens (saved turns, the thread queue, questions, the Mac waiting page and meetings), in the phone theme’s text colour. Dictation itself is unchanged. Same servers as 606. Rollback is build 606 with the same server.

Private candidate 606: a ring for the Home hold

Build 6.10.606 shows the Home hold filling: while you hold the ring on Home, the COS mark becomes a ring that fills clockwise over the hold, and Sessions opens when it is full. Letting go early brings the mark back. The footer countdown stays, the hold is still 3 seconds by default (2, 3 or 4 in Settings), and it is still ring only. Same servers as 605. Rollback is build 605 with the same server.

Private candidate 605: offline dictation keeps your words

Build 6.10.605 no longer throws away words you already saw: when the phone’s final text of an offline dictation comes back empty, the live preview is used if it is believable (two or more words, not a silence phrase, covering the recording), and the review says Preview text so you check it first. Silence still says No speech. With the Mac already gone as a dictation starts, the phone takes over after 1.5 seconds instead of 10. Same servers as 604. Rollback is build 604 with the same server.

Private candidate 604: dictation works offline

Build 6.10.604 transcribes dictation on the phone when the Mac is unreachable, also with Transcription set to Mac only: the phone’s built-in Tiny takes over instead of the audio waiting for the Mac, and a reachable Mac still transcribes. After a hold switches to a tap recording, the recorder’s top line keeps the pulsing Let go, tap to confirm whole, and the battery moves to the footer until you let go. The Home hold that opens Sessions now takes 3 seconds, and Settings offers 2, 3 or 4. Same servers as 603. Rollback is build 603 with the same server.

Versioned meeting test packs

Companion 625 and 626 are preserved as versioned device-test packs in the Hub repository. 626 adds ended-meeting questions, phone file attachment and COS search settings with server 6.71.1 or newer. The public canonical companion remains 624. Companion 627 is a private hardware acceptance candidate and is not promoted by this server and Control update.

Control 0.5.287 and server 6.71.12: meeting evidence and compact setup

Meeting answers include a qualitative confidence note with a reason. COS accounts for incomplete G2 transcription, keeps evidenced test scenarios separate from real commitments, and distinguishes a clear correction from an unresolved contradiction. New questions about saved meetings can read accepted finalized passages; previous answers retain their original quotations. Model qualification details are collapsed until expanded. Optional Jev setup no longer holds the setup reminder open. Labeled answers and the COS-styled What’s New view from Control 0.5.283 are included.

Meeting context on compatible companion builds lets you confirm a domain and calendar suggestion for COS lookup. Calendar metadata does not prove what was said. Timestamp and progressive-refinement canaries remain disabled; no raw-ASR accuracy or 30-second refinement claim is made. With explicit public-topic consent, server 6.71.12 can retrieve a claim from the recent transcript and a cost benchmark, cite linked evidence, and distinguish an average from a comparable project. The setting defaults off. Companion 628 exposes that choice and a native bridge error-loop fix; it remains a private device-test candidate. Public companion 624 stays supported.

Control 0.5.282 and server 6.70.0: ask about a live meeting

The menu-bar icon and a REC badge in the Dock show when a meeting records. Open the live transcript from the menu-bar panel, the Dock menu, a Dock click or Command-Shift-L. Live COS Ask sits beside it with Catch me up, Summarize so far, Suggest questions, Action items and a question box. A model runs only when you ask. Answers start from the current meeting and cite the lines they used; a question you type can also look in COS memory and earlier meetings, and with server 6.70.0 a plain public question can search the web using only the words you typed.

Questions, answers and sources are saved with the meeting, and unsent questions are saved too. Stop or retry an answer yourself; nothing reruns on its own. Saved meetings show their Ask history, and sources open where they came from: the transcript line, an earlier meeting, a memory, the file or the web page. Add files under Files shared in this meeting, or drop or paste a screenshot on the Ask box: text is read on your Mac and shared with Ask, and files that look like they hold credentials are held back. Pick the Meeting assistant model under the Ask box or in Settings; Sonnet is the default for fresh settings; explicit saved choices are preserved. Copy full context adds every answer, its sources and file text to the transcript, and Copy transcript on a saved meeting copies only the transcript. Ask keeps saving while the Mac is locked during a meeting.

Ask needs server 6.69.0 or newer. On an older server, Ask and Settings say to update the COS server, and the live transcript keeps working. Includes the 0.5.278 Live now transcript and the 0.5.277 panel changes. Pairs with server 6.70.0.

Control 0.5.278: follow a live meeting on your Mac

While a G2 meeting records, Meetings pins a Live now row with a red dot and elapsed time. Open it to read the transcript a few seconds behind the conversation. It follows the newest line until you scroll up; Jump to live catches up, and Copy transcript copies all text so far with speaker names and times.

Live text is preliminary, and speaker names are voice matches rather than certainties. Saving opens the saved meeting, whose text can change as it is finalized. Discarding shows that the meeting ended without saving. A hidden window stops checking for new text. Show live meeting transcript in Settings turns the view off. Pairs with server 6.67.0.

The menu-bar panel also includes the 0.5.277 changes: the standing version card is gone, the version appears beside Control, and the top-right refresh button refreshes status and checks for updates. Available updates open What’s New before you choose Download and install.

Control 0.5.277: a tidier panel

The standing version card is gone from the menu-bar panel; updates still arrive as the gold Update available banner. The refresh button at the top right refreshes status and checks for updates, and the line under Control says Checking for updates, then Up to date or Couldn’t check for updates. The version shows next to Control, and Settings in Activity has the same refresh and check button.

Control 0.5.276: Messages answers are formatted

COS answers in Messages (Recent, archived chats and session chat replies) now render bold, lists, headings, quotes, code and links instead of raw Markdown, the same way Meetings does. Row previews show clean text. Copy turn and Copy + images still copy the original text. Only web links are clickable in any pane that renders Markdown, and italic text now draws as italic.

Control 0.5.275: What’s New before you update

When an update is ready, Update in the menu-bar panel (or Check for updates) opens a What’s New window with the release, a summary and what changed. Download and install shows each step, and COS Control quits and reopens by itself while the glasses server keeps running. After an update, What’s New opens once on its own. An update that cannot be staged now stays open and says why, instead of closing COS Control.

Control 0.5.274: connect your glasses in one scan

Setup guide, Glasses: COS checks Tailscale on your Mac and on your iPhone, then shows a pairing code. In COS Glasses 6.10.621 tap Scan code on your Mac, photograph the code (or use a screenshot, or type it), then tap Allow on the Mac. Codes last 5 minutes and work once, and the Allow card names the device and warns when it is not on your Tailscale account. Pairing on home Wi-Fi is an opt-in 10-minute switch. When a new COS Control is ready, the menu-bar glasses turn gold and the panel opens with an Update available banner.

Server 6.67.0 adds the pairing routes. Pasting the pairing token still works everywhere.

Control 0.5.273: setup and Settings in Activity

Open COS Control from the Dock and choose Settings in Activity. It shares the menu-bar controls and saved preferences. The setup guide distinguishes missing AI tools from tools that need sign-in, guides macOS permissions, and resumes where you left off. Local voice downloads a checksum-verified, Developer ID signed and Apple-notarized Whisper runtime without Homebrew. It benchmarks your Mac and keeps an existing Balanced or Max choice. Recommendations for smaller Macs remain provisional.

Server 6.66.0 adds the managed Whisper path and reliable Claude detection outside your shell. Haiku is the server default for final dictation polish when the client does not send an explicit choice; saved client selections still win. This is separate from your local Whisper transcription tier.

Glasses 619: device-test candidate

The versioned Hub package includes session-clock and dictation recovery fixes. Physical G2 acceptance is still pending. This does not change the confirmed Even Hub listing or submitted companion version.

Server 6.65.0: Work search and task dates

The server adds optional search by meaning for Work and source or git-history dates for task cards. Meaning search needs a TypeSafe key; it removes URLs, email addresses and secrets from card text before sending it, and has its own daily budget. Task dates do not change task files. Server 6.64.0 also added exact meeting context keys for linked files. Control 0.5.266 includes the newer Work search and meeting-file client features. Existing glasses keep working.

Private candidate 603: hold Home for Sessions

Build 6.10.603 opens Sessions when you hold the ring on Home for 4 seconds; from 1 second the footer counts down from 3, and letting go early does nothing. It works with the phone locked. Sessions opens on the session that is writing, or the latest. Ring only: a temple hold on Home does nothing. A session page keeps its status row, so a session that starts writing animates at once; it says when COS could not check. Session list marks: ◐ writing, ○ open, ● a follow-up you queued, ? could not check. Home weather comes back after a missed lookup and keeps the last good copy for up to 3 hours, near where it was fetched. Server 6.63.1 also keeps the last good weather across a server restart. Tap, scroll and double-tap are unchanged. Same servers as 600. Rollback is build 602 with the same server.

Private candidate 602: the mark keeps moving

Build 6.10.602 keeps the working mark moving while a reply streams; slow screen writes no longer freeze it. A session page’s top line now names the session you are in, and a session with no name keeps Sess. Same servers as 600. Rollback is build 601 with the same server.

Private candidate 601: the clock stays on Messages

Build 6.10.601 keeps the clock and date on the Messages nav line: when the line is full, the page position the footer already shows gives way first. The battery is shown in the nav only, not again in the footer (the recorder keeps it in the footer). Home no longer reads “status unknown”: until a fresh session check arrives it shows Chief of Staff, and a Mac that cannot be reached still says so. Same servers as 600. Rollback is build 600 with the same server.

Private candidate 600: Continue tells you what will run

Build 6.10.600 shows the server’s Continue note on the phone and glasses. With server 6.62.1, Cursor continuation uses the session settings the server reports; older glasses retain Ask behavior unless they explicitly support this note. Claude, Codex and Cursor cancellation remains subject to verified provider capabilities. The framed reader, COS animation and familiar Home gestures are retained.

Server 6.62.1 also identifies failed fork copies and distinguishes usage limits, sign-in failures and conversations that are too long. Server 6.63.0 can run a fork in the background: a client that sends a fork id gets an answer at once and reads the outcome later, a repeated id never makes a second copy, and a fork interrupted by a server restart reads back as possibly made, never as failed. A private, short-lived request binding helps prompt hooks retrieve memory from the user’s actual question. This does not add a new Control app release. Still open: Home uses a capped session history and can display a lower-bound running count; it is not yet a precise mirror of the desktop pet. Build 600 is available for sideload testing, not submitted to the marketplace; physical G2 acceptance remains pending. Rollback is frozen build 599 with server 6.61.7.

Private candidate 599: Activity inside the reader frame

One navigation row, one framed reader. 599 keeps the COS animation, state, agent count, steps and last-step age inside the reader’s border, separated from the scrolling reply by a thin divider. Session navigation drops the repeated provider tag; the provider and elapsed runtime remain in the footer. The reply keeps its own scroll area, so it cannot run behind the activity row. The phone G2 mirror uses the same monochrome grouping. Home and gestures are unchanged.

599 native simulator: one Session navigation row, COS working strip inside a bordered reader, reply below a divider, Codex and elapsed runtime in footer
Official simulator capture with fictional content and production reader geometry. Scrolled simulator proof and phone browser transition proof. These are simulator/browser checks, not physical G2/iPhone acceptance. The user confirmed the overlap repair in 598; physical 599 acceptance remains pending.

599 also carries forward 597’s single-mark and reader-stability fixes:

A row with the COS mark carries words only. On a 596 device, the still mark sat beside “○ OPEN on your Mac”. The same doubling affected idle, waiting, failed, cancelled, queued, sending, last-seen and Mac-unreachable rows on Home, Sessions and Messages. The mark now carries the state. Text-only fallbacks have no mark, so they keep their glyph. A Session’s mark follows live work, not history: a thread whose child agents finished hours ago reads like any quiet thread, and an active thread with no children animates. A stale check of finished children no longer turns OPEN into “status unknown”. A live Session row that loses the Mac reads “ACTIVITY unknown” with the offline mark.

Background polls never add or remove a Session’s status row under you, so the reader keeps its scroll. A row already up settles in place, and presence changes wait for a page you open, a chunk you move to, or a held update you release. Closing the Session action menu or a return confirmation resumes the working animation; it no longer stays frozen until the trail changes. The phone mirror shows the lens row’s own words, and shows a row and mark only when the lens has one. The Messages text fallback and last-resort text page no longer bring back the solid running dot. Gestures, history, storage and model routing are unchanged.

The COS mark, Chief of Staff · 3 running, share one Home row. Version moves to the footer; provider detail belongs inside Sessions. Tap still opens the latest message. Swipe up opens Messages; swipe down opens Menu. Sessions remains a menu item, with no new shortcut. Blank lines separate activity, weather/calendar, and navigation. All three hints now share one closing row: Tap=Latest · ↑ Messages · ↓ Menu. Calendar entries use “Next:” rather than a directional arrow. First-use recording behavior is unchanged.

Home keeps the COS identity visible during checking, stale or unknown sync data, and Mac-unreachable states. A still logo accompanies uncertain status; only fresh confirmed activity animates. The phone Home preview uses the same still brand during native refresh gaps. Sessions and Messages show a still COS mark while waiting for accepted working frames; offline and completion retain distinct signals. A rejected animated layout retries on normal owned renders with a bounded 2–30-second backoff, instead of staying disabled until app relaunch. If native image rendering remains unavailable, the readable working fallback does not add a completion-like solid circle. The monochrome phone G2 mirror keeps its status row through step and trail refreshes, using accepted HUD frames. It no longer replaces the COS mark with a solid dot during each text repaint. Genuine connection loss still shows “Last seen working”; a new state cannot borrow an old state's animation pixels. Steps, last-step age and total runtime remain visible in Sessions.

An open idle window does not count as work. Child agents count under their parent; capped or degraded scans show a lower bound (+). Cached or expired evidence reads unknown, and losing contact with the Mac never means zero. Parent counts use the existing server 6.61.6 API. Child-agent and compaction observations require server 6.61.7 and refreshed Claude/Cursor hooks. Server 6.63.1 is published on npm. Refresh hooks through COS Control after updating, and reopen native sessions if needed. Codex live compaction-start telemetry is not claimed. 599 pairs with the same server 6.62.1, with no API or storage migration and no server restart. A Codex thread counts as writing only when its transcript changed in the last 30 seconds, so long reasoning or tool calls can read OPEN while it is still working. That is a server follow-up, not part of 597.

The 596 animation preview remains an illustration of the underlying animation, not the new scroll layout. Frozen 598 stays in the Glasses Hub as the rollback package. Physical G2 and iPhone acceptance remain pending. 599 has not been uploaded or submitted for marketplace review, and it does not change the marketplace status above.

Your ring. The HUD in context.

Tap and hold for shortcuts, scroll to Messages, then read and reply without taking out your phone. Follow the steps to see which part of the HUD changes.

Your dictation setting

The default. Tap starts a message, tap finishes it, tap sends it. The steps and tables on this page read that way.

Press and hold the ring to talk, let go to review, tap to send. Turn it on in the Even app under COS Glasses, Settings, Voice, Record a message: Hold to talk, release to finish (glasses 6.9.474 and later). The steps and tables on this page now read that way; where a hold works lists every page.

Ring to lensEven G2 · simulated
COS [O] 9:16a 9/4/26 3msg 2m 82%
Chief of Staff v6.10.639 72° Clear • Austin → in 44m: Design review Tap=Latest ↓ Menu ↑ Messages "reference message 104" • "review meetings"
Ready on Home
1 of 9 · Home

Illustrative HUD with fictional data. Navigation, body content, footer labels, and gesture behavior follow the app. The green frame, typography, spacing, animation timing, and system-menu appearance are illustrative, not an optical capture. The three-second waits are the app’s real timeouts. Each ring gesture plays once per step; use Replay gesture to watch it again.

Tap and hold. Your shortcuts, wherever you are.

Tap, release, then press and hold. Keep the second contact down until the shortcut window appears above the HUD. Scroll to a row, then tap to select it. Choose Close to reveal the same page underneath. You do not have to return Home first.

The animation slows down the contact phases for teaching. It is not a stopwatch for the firmware's recognition threshold.

  • Home is first in the default COS menu and returns Home while recording and jobs continue.
  • Ask COS opens a new voice prompt.
  • Model: Opus shows the current model. Choose a model, then its reasoning effort. Practice the two-stage picker.
  • Start Meeting begins Meeting AI. While recording, Resume Meeting and Stop Meeting take its place.
  • Messages, Sessions, Tasks, and Home jump straight to that view.

What changes while recording

The menu has room for seven COS rows. Home, Resume and Stop lead in the default order while a meeting is active, so Tasks is omitted from the hold menu during recording. It remains available in Quick Actions.

Even also supplies Display off above the COS rows, with Brightness and Close below. Those system controls are separate from COS. Your saved menu order may differ from this default example.

The SDK 0.0.14 context menu is distinct from a single tap's reader-footer actions and from the Quick Actions page reached by scrolling down on Home.

Three pieces, one loop.

Ask from the glasses. The G2 relays over Bluetooth to the Even app on your iPhone, the iPhone reaches your Mac over Wi-Fi or Tailscale, and the server runs your prompt through your own signed-in Claude Code, Codex, or Cursor CLI. The answer renders on the lens. The history stays on your Mac.

2. Setup

Live in about ten minutes.

Three moving pieces: the server on your Mac, the app on your glasses, one paste to connect them. The wizard walks you through all of it. This is the short version.

  1. Download the Mac app

    Download COS Control for Apple silicon and macOS 14 or later. Move it to Applications and open it. The app is signed with Developer ID and notarized by Apple, and includes its own Node/npm runtime. You need internet access and a signed-in Codex app, Claude Code or Cursor Agent. Keep the Mac awake while using the glasses.

  2. Choose Get started

    The welcome window checks for your AI provider, downloads the COS server and starts it automatically. No Homebrew, npm or npx installation is required for this step. When ready, choose Open Sessions. For glasses, use Copy Pairing Token and your Mac’s network address in the next step.

    Developer alternative and optional local voice setup
    $npx --yes @gotcos/glasses-server@latest --setup-transcription --transcription-tier balanced

    First run writes its config to ~/.cos-glasses/.env, then prints your server URLs and an API token. The token is saved, so it stays the same across restarts.

    Required for Mac voice transcription: run brew install whisper-cpp once and keep about 6 GB free. An interrupted model download keeps its partial file and resumes on the next Guided Setup run.

    TierPreview while dictatingLive transcriptPolish on save
    Balanced (recommended)Small.enLarge-v3-TurboLarge-v3
    MaxLarge-v3-TurboLarge-v3Large-v3
    • Canonical transcription preempts cosmetic preview instead of competing for Metal. Missing Max weights fall back visibly to Turbo.
    • Phone-local Moonshine is optional: Tiny ships inside the app and Base downloads on the iPhone. It gives rolling provisional text in Messages and Meetings; Mac Whisper stays authoritative for speaker-attributed meetings and saved-work polish.
    • Optional spoken replies on Apple silicon: run brew install python@3.12 ffmpeg espeak-ng (Python 3.11 or 3.12). The first normal start provisions the private Kokoro environment in the background. Text chat works without either voice dependency.

    Running the full COS? Add the /cos-glasses skill from the Starter Kit and your agent will start the server, confirm it's healthy, keep it on the latest release, and troubleshoot connection issues on request — so you never babysit the terminal. Pair it with /glasses-day to pull a day of glasses questions and answers into your desk session and pick up what was top of mind.

  3. Install the app

    In the Even Realities app, open Even Hub and install COS Glasses.

  4. Connect once

    Open the setup wizard on your phone. Paste the server URL and the API token. COS saves the pair only after it proves the server’s authenticated API identity and a live stream, so a reachable-but-not-ready server is never stored as connected. It remembers both from then on.

Same Wi-Fi or anywhere. On the same network, use the http://192.168.x.x:3141 address the server prints. To use COS away from home, install Tailscale on the Mac and iPhone with the same account and use the http://100.x.x.x:3141 address instead. The server rejects any request that does not come from your private network or mesh; it never answers the public internet.

Local and hosted COS are separate. This guide describes the self-hosted server and COS Control. The authenticated app.gotcos.com service has its own tenant storage, source permissions and releases; local memory settings and deletion receipts do not govern hosted copies.

Latest release package: Control 0.5.289, glasses 6.10.639, server 6.73.1. COS Control 0.5.289 is the public Mac download. COS Glasses 6.10.639 is the current companion pack: it installs by sideload from the Hub repo, and the last confirmed Even Hub listing is 6.10.629. Server identity is 6.73.1, which npx --yes @gotcos/glasses-server@latest installs and COS Control’s Update Server brings in. Builds 6.9.539 to 6.10.623 are in the Hub repo as versioned packs between the Even Hub build and the companion pack, beside the earlier sideload builds from 6.9.476 on (6.9.507 to 6.9.509 and 6.9.514 were not released; 6.9.542 replaces 6.9.541 and 6.9.544 replaces 6.9.543; of the two 6.9.554 packs, tap-at-30 is the release; 6.9.565, 6.9.567, 6.10.572, 6.10.579 and 6.10.581 are not in the Hub repo). 6.10.587 is the build submitted for marketplace review; 6.10.588 to 6.10.623 lead up to the companion pack (6.10.612 and 6.10.613 are not in the Hub repo, 6.10.615 replaces the withdrawn 6.10.614, and 6.10.608 was a device test that 6.10.609 replaces). The version list below describes the user-visible changes among them.

  • 623 and 624: ask about a meeting. The phone’s Meetings view and the lens’s live transcript menu offer Catch me up, Summarize so far, Suggest questions and Action items; the phone also takes typed questions and keeps the history COS saves on your Mac. 624 adds a Model control beside Ask and names the answering model in the lens reader. Needs server 6.69.0; public web search needs 6.70.0. Details.
  • 622: hold to talk fills a circle first. Recording starts only once the circle is full; let go early and nothing starts. Settings, Voice, Hold to talk: fill time sets it, from Instant to 1.5 seconds.
  • 620: hold continues a Cursor session. A hold on a Claude, Codex or Cursor session continues it. To ask COS about a Cursor session, tap and pick Ask COS.
  • 587: queued does not cover an existing reply. Normal Sessions polling checks the Mac receipt for queued turns. Once delivery is confirmed, its temporary queued page clears without opening Queue first. Delivery is not model completion; missing receipts remain pending and history keeps its reading position.
  • 586: phone review matches the companion. Meeting notes and speaker review use the Even app's monochrome theme. Open Views, then Review meetings on phone. Read formatted notes, play retained evidence, search saved voices and explicitly confirm a correction.
  • 582 to 585: status has a shape. Working moves through the connected COS nodes. Explicit completion fills a circle. Offline uses separated dots, waiting uses pause bars, questions use a speech bubble and approvals use a hollow shield. Temporary display delays pause decoration and retry; the readable trail keeps priority.
  • 580 and 582: protect session identity and unsent work. Sessions names its native platform independently of the Messages model. Saved on phone requires verified storage. Full queues retain existing turns and preserve the new draft; older instructions need review instead of being silently deleted. Reopening Messages also reconciles duplicate local/server copies by message identity.
  • See and edit the queue Codex still owns. Glasses 6.10.577 with server 6.61.6 keeps native Codex waiting messages visible after handoff. Open a session, tap for actions, then choose Queue. Plain-text waiting messages can be read and edited in place without losing their position. An unavailable queue reads as unknown; a message already starting cannot be replaced. Attachment-bearing native messages remain managed in Codex.
  • One direction for history; Home within reach. Glasses 6.10.576 aligns live Meetings with Messages and Sessions: up for older content, down toward live. Build 578 keeps the parent list first and puts Home last in footer actions; scroll to select, then tap to confirm. Meeting actions retain Bookmark or Nudges. The default tap-then-hold side menu starts with Home, below Even’s Display off; recording also keeps Resume Meeting and Stop Meeting. Custom menu arrangements stay intact. Home leaves recording and jobs running. Navigation shows known battery percentage alongside ◈ Msg or ↔ Sess; full recording controls take priority in a crowded header.
  • Choose Sonnet or Luna for final dictation polish. Glasses 6.10.573 with server 6.61.5 adds Settings, Voice, Polish model: Sonnet (default) or GPT-5.6 Luna Fast. Luna uses your Cursor CLI sign-in; Sonnet uses your Claude CLI sign-in. If cleanup is unavailable, the transcript remains available. Messages and Sessions also keep history and Ask in their footers instead of repeating battery; active timers and cancellation controls remain. Build 573 introduced these choices. They are included in 587, submitted for marketplace review on October 4, 2026.
  • Send opens the job you just started. Glasses 6.10.571 opens the job page before the network answers. It distinguishes Sending, Not sent yet, Running, Queued and Held. Server 6.61.3 can hold an accepted prompt behind an earlier run; a held prompt has not started. Continue opens its session or queue and keeps the ask visible.
  • Up for conversation history, down for the latest. Glasses 6.9.568 opens Sessions on the newest reply and Work cards on Progress, with older context above. Background changes wait while you read a long page; down at the last page brings in waiting text. Header and footer clocks do not reset the reader. Since glasses 6.10.576, live Meetings uses the same direction: up for earlier transcript, down toward live. Saved documents open at the beginning.
  • Offline status and saved turns. Glasses 6.9.563 marks an unreachable Mac, labels cached session data with its age, and saves a Continue turn on the phone when delivery cannot finish. Saved turns in Quick Actions lets you inspect or retry it. Reconnect drains turns in session order. A failed save keeps the draft visible. Since 6.9.570, an unreliable wearing flag no longer blocks dictation or question polling; real input supplies presence.
  • Questions can wait for you while you are away. Server 6.60.0 with glasses 6.9.563 can hold a desk question for up to ten minutes when the desk is idle and the glasses or phone reported recent presence. Reinstall hooks in COS Control once after updating; a client that has not reported presence in thirty minutes does not gain this extended hold.
  • Speaker names stay on the live lens. Glasses 6.9.567 with server 6.61.0 starts a new named line when the speaker changes inside a chunk. Glasses 6.9.569 gives committed speaker lines priority over a single provisional preview, keeping the live body within seven rows.
  • Merged meetings keep their review identity. Server 6.61.4 resolves the merged meeting even if an older source file survives, and guards corrections against a changed revision. The task writer can save a name and finish line together without replacing its identity or links. Control 0.5.266 includes the responsive branded task editor, draft protection, atomic name/finish-line saves, and review/resize hardening.
  • Work on the glasses: progress, Working now, and Start work. Server 6.59.0 with glasses 6.9.561 and Control 0.5.252. A Work card on the lens and the phone opens with its progress: the stage and what the session reported, with the time, the session’s own words (up to 280 characters, never the prompt or the result), what the session is doing now, and why the card last moved. When anything is open, Work starts with Working now: every open handoff across your cards, questions and blocked work first, in the order the Mac gives. Start work, Reply by voice and Not done yet leave a request on the server. COS Control on your Mac looks for requests every 30 seconds, checks the task again, sends each one exactly as its Agent workspace would, with every guard it has, and tells the glasses what happened. The server never runs an agent for a request, only COS Control on the Mac itself can claim one, and a request nobody claims expires after 10 minutes with nothing sent. On the lens, Start work appears on a card with no handoff yet, offers only your saved destination or a Continue or Fork that Jev picks with 60% confidence or more, and opens a confirm page that starts on Cancel; the phone lists Jev’s pick, your saved destination, recent sessions and a new session per model. Reply by voice and Not done yet answer a session that asked a question or said it was done. A New session started from the glasses stays in the background on the Mac so the glasses can keep replying to it; Open in Claude or Codex in Work hands it to that app. Work progress needs server 6.59.0; Start work, Reply and Not done yet also need COS Control 0.5.252.
  • Only the ring starts hold to talk, and a hold turns into a tap sooner. Glasses 6.9.561: in Settings, Start hold to talk from is Ring only by default, so a stray temple long press does nothing from press to release, and its release no longer ends a ring dictation. Temple taps still confirm and stop. Ring or temple brings the temple hold back; a temple hold shows nothing until you speak or 1.5 seconds pass, and one that ends in silence before then is dropped. Settings, Glasses dictation, Switch a ring hold to tap after sets 10, 15, 20 or 30 seconds, 15 unless you change it (a fixed 30 from 6.9.554).
  • A copy that lost its audio lets the next one record. Glasses 6.9.560, server 6.58.1 recommended: a COS window whose meeting audio stops arriving while the glasses stay connected stops telling the Mac it is recording, so the window you open next is not told to stop. The silent copy steps aside and stops answering the ring; it saves its meeting once the new window records, and takes the ring back if its audio returns first.
  • Every control in COS Control wears the gotcos theme. Control 0.5.251, first public in 0.5.252: dropdowns open as a card list with a gold rule on the chosen row, view switches such as Board and Focus or Recent and Archive are words with a gold rule under the current one, settings are switches that fill gold, filters and confirm steps are checkboxes, and fields, buttons, steppers and progress share the same card, hairline and gold. Space or Return opens a dropdown, the arrows move, a letter jumps and Escape closes. Behaviour is unchanged.
  • A new session is named after its task and shows while it runs. Control 0.5.250 with server 6.58.2: a Claude session started from Work (New session, Start work, or Fork to Claude) carries the task’s title as its name, and Claude’s sidebar shows it. The server names it as the run starts, so the card links the session while it runs and shows its live status, and Sessions and the pet list it as Work under that name. Until its first turn ends only the server writes to it: Continue and Open in platform wait, and say so. Since 0.5.251 the name is the task’s whole title, up to 100 characters. Codex, Cursor and Ollama sessions carry no name; an older server runs the session unnamed and shows it once it finishes.
  • Historical Even Hub build: 6.9.538. The store build carries every build since 6.9.470. Its own additions: a new user’s home says what to do and a tap does it; with no Mac, Sessions says Needs your Mac instead of reporting a broken server; a running session shows how long its turn has run (6.9.536); and the last eight sessions and meetings you opened open without the Mac (6.9.537). Sideload 6.9.539 from the Hub repo and Sessions opens at once from the list on your phone.
  • Work connects tasks, meetings and sessions. Control 0.5.240 with server 6.56.0 adds domain boards with Mentioned, Planned, Draft, Built, QA and Complete. Existing task IDs and checkboxes are preserved. Select a saved meeting for a manual follow-up review, then Continue, Fork or start a new agent session with the context you approve. Recorded handoffs link back to the work. This release does not automatically prepare or publish work. Fresh Mac installations use a packaged canonical task runtime; an existing configured COS task bridge remains authoritative. Work needs Python 3.10 or newer. If it is missing, install Python 3.12 with Homebrew (brew install python@3.12) and restart the server; COS Control keeps an explicit Python path through updates.
  • Intake, session suggestions and exact session links. Control 0.5.241 with server 6.57.0 adds an Intake view to Work: what your meetings produced that is not on the board yet (suggested meeting links, your items to review, and other people’s asks), each answered in place. Tasks show who their source meetings involved. With a Jev (TypeSafe) key saved in Control Settings, the Agent workspace suggests whether to continue, fork or start a session; it only suggests, and nothing is selected or sent. Open in platform now opens the exact Claude Desktop session, and imports a finished session Work ran on the server as a Claude tab; a session started from Work links back to its item.
  • Fork to another platform, and suggestions for meeting reviews. Control 0.5.243 adds a Fork to choice in Work’s Agent workspace. Same platform copies a Claude or Codex conversation as before. Picking Claude or Codex (OpenAI) instead starts a new session there with the context you reviewed and the conversation so far, read from the original session’s transcript; the original session is unchanged. Claude, Codex and Cursor sessions can be the source. With server 6.57.1, a saved meeting under review also gets a suggestion to continue, fork or start a session, as tasks already did.
  • Work becomes a dashboard, with drag to start. Control 0.5.244 adds Board and Focus layouts to Work and remembers your choice. Board shows the sessions Work sent above the board, each running, waiting on you, with a reply ready or needing attention, with the reply or the reason and Open session, Mark reviewed or Acknowledge. The counts open their work. Drag a card between columns to change its stage (Complete asks first), or onto Start work: nothing runs until an overlay confirms where it goes, in one click when a confident suggestion or a saved destination already says so. Focus opens an item with its Agent workspace pinned beside it. Finished replies can be marked reviewed, failures acknowledged with their reason kept, and a stuck unconfirmed delivery cleared after you check the session.
  • Sessions move their own tasks. Control 0.5.247 follows every Work handoff from sent to done. Each handoff asks the session to make its first reply line COS-WORK <task id>: done: <evidence>, or needs input, or blocked. When the session has the work its card moves to Draft, and when it reports done with evidence the card moves to QA. Nothing moves to Complete by itself, and every move can be undone. Needs input and blocked move nothing: they notify you and put the session’s question on the card. With server 6.58.0 and a Jev key, a finished session that wrote no status line is checked against its task, and only a confident done moves the card. The session row lists the tasks it holds, the Agent workspace shows a Progress timeline, and Not done yet sends a task back to the same session with your note. Handoffs sent before 0.5.247 are not tracked.
  • New sessions start on the Mac and open in their app. Control 0.5.249 replaces 0.5.248’s prefilled tab, which waited for you to press Send. New session, Start work and Fork to another platform now run on the COS server, and once the first reply is done the session opens in its app: Claude and Codex in their own apps, Cursor in a Terminal window running cursor-agent --resume. Continue there, beside COS, and Work follows the session as before. Nothing opens while the run is going; a run that failed opens nothing and the card says why, and one that ended more than an hour before Control saw it offers Open in Claude, Open in Codex or Open in Terminal instead. Continue and Not done yet on a session its app owns take your note to that app: Codex fills it in, Claude and Cursor put it on the clipboard. With Settings, Open new sessions in the app, turned off the session stays in the background; Ollama always does.
  • A COS window that lost its audio no longer holds the ring. Server 6.58.1: on 2026-09-29 a hidden COS window stopped receiving meeting audio and went on telling the Mac it was recording, so the window opened to record the meeting was told to stop, and about 12 minutes were never captured. The Mac now trusts a window’s own word that it is recording only while its audio chunks back it up (for 150 s after its newest chunk, the start of its recording, or one grace after a gap), and a window that says it is not recording is believed over the chunks it is still uploading. What each window has said is kept when the ring moves, so it moves once. It works with every glasses build.
  • The prompt floats over what you were reading. Glasses 6.9.541 to 6.9.549, sideloads: a hold on a session or a message keeps that page on the lens, dimmed, with your words in a box docked under it. Behind the box a card says what the page is. A finished session shows Outcome, So what and You asked, written by your Mac (server 6.54.0; the two-row lines need 6.55.0) with Claude, Codex, Cursor or a local Ollama model. Meetings, threads, memories and messages get their own cards, and only finished turns are summarized. Settings, Glasses dictation, Behind the prompt box can show the page as it is instead, which asks the Mac for nothing. If the glasses refuse a page, the app falls back to a simpler one.
  • Long recordings on the ring. Glasses 6.9.550 to 6.9.555, sideloads: at 30 seconds a ring hold becomes a tap recording, so you let go, keep talking and tap once to finish. The header pulses a square until you let go, and says Tap temple to confirm if the ring’s release has not arrived 10 seconds after the switch. After the switch there is no 90 second limit. One temple touch still ends a recording stuck on a dropped ring, and a late release from an earlier hold can no longer turn a new recording’s microphone off.
  • Work on the phone and the lens. Glasses 6.9.556 to 6.9.558, sideloads, with server 6.56.0: the phone’s Work tab groups your tasks by domain and stage, and on the glasses you open Work, pick a domain and a stage, then read a task with its source meetings and recorded handoffs. Work and a task open at once from what the phone has and refresh when the Mac answers. Browsing never starts an agent. Older servers keep the Tasks view.
  • A message for a busy thread stays with that thread. Glasses 6.9.559, sideload: a message sent to a thread just as its turn ends goes into that thread instead of starting a new COS session, and if the thread cannot be reached, Send retries it there. While a job or a session has written nothing yet, the lens shows your ask where it used to say Nothing written yet.
  • The app ships no built-in glossary. Glasses 6.9.540, sideload: phone transcription is left as heard unless your own Mac, or a vocabulary file you uploaded, says otherwise. The last glossary your Mac sent is kept for offline use, and a disconnect or a different Mac clears it.
  • Cancel a run from the glasses or phone. Server 6.53.0 with glasses 6.9.529: a session’s menu gains Cancel run while the Mac can name a run to stop, with a two-tap confirm on the lens and the same button on the phone. A turn COS started stops at once, a Claude run at the desk stops at its next tool call, and a Codex app or Cursor run says it has to be stopped where it runs. Server 6.53.4 is recommended: a cancel stops every process the run started, lands even while a message is being handed to a busy session, and a thread a cancel left locked unlocks itself once the stopped process is confirmed gone. After updating the server, press Install hooks in COS Control once, or run npx --yes @gotcos/glasses-server@latest --hooks install; until then --hooks status reads script_outdated with a line saying what to do.
  • Builds 6.9.513 to 6.9.534 harden the glasses. Lists fill the lens with seven rows and nothing is written that the lens cannot draw. The microphone opens the instant a hold starts, and one copy of COS answers the ring. First run leads with Start here before asking for a Mac. A large session opens on a weak connection and reopens instantly, a thread that moved on your Mac offers Send anyway, and the first question after a break shows the readable trail. The version list below has the detail.
  • Answer session questions and approvals from the glasses or phone. Server 6.52.0 with glasses 6.9.512: when a Claude session asks a question or requests a tool approval while you have been away from the Mac, COS can hold it for the worn glasses or visible phone. Read every option or the exact printable command, choose with a two-tap confirm, dictate Other text, or Leave for the Mac so its native dialog appears immediately. A stale card never sends, the first answer wins, and a retry reports what the server actually recorded.
  • A running Messages reply stays readable. Server 6.52.0 with glasses 6.9.512: the running card and job page can show the agent’s own words, short tool steps, and outcomes as one durable trail, with whole-word paging through the full run. Reconnect and retry rebuild the trail without gaps; Tool activity and Phone only still govern what appears, and secrets and local paths are redacted before the trail is stored. Glasses 6.9.535 makes this the one view while you watch: every running message draws the same view as Sessions, including runs the Mac sends no trail for, which show the answer’s words as they stream. The old tool log appears only under Raw log, and a finished message shows the answer alone.
  • Codex writes appear while the session runs. Server 6.52.0 with glasses 6.9.512: a Codex session streams its new words, tool steps, and short reasoning status onto the session page instead of showing only a spinner until the turn ends. A reconnect resumes from the last event, and Claude and Cursor session streams keep their existing behavior.
  • Continue reaches busy Claude, Codex, and Cursor work. Server 6.51.0 with glasses 6.9.511 and Control 0.5.238: a Continue that meets a busy thread is parked and delivered when the turn ends instead of being refused. Codex messages enter the Codex app’s own visible queue, Cursor messages leave through that composer’s Stop hook, and COS Control’s Sessions pane and pet use the same queue contract. Right-click the pet for Full, Calm, or No motion, or hide it.
  • Control keeps the server switches you set. Control 0.5.239 preserves the live Continue, Codex queue, session-hook, glasses question and approval, and Messages-trail switches through Update Server, repair, and adoption instead of replacing hand-set values with defaults.
  • Your Mac decides which COS window has the glasses, and a recording keeps them. Server 6.50.3 and 6.50.4 with glasses 6.9.510: the 6.9.505 check lived in the Even app’s storage, and a hidden copy could stop answering it while it kept recording, so one meeting was still recorded twice. Now every copy checks in with your Mac, which picks one owner per phone. A window that is recording keeps the glasses: its check-ins say so, and every meeting chunk names the window that sent it. Reopening COS mid-meeting, reopening it while offline, or losing the network mid-meeting no longer stops the recording; a newer window waits and says so on the phone. If two windows really are both recording, the one that had the glasses keeps them and the other stops (saved). Offline, a recording window never steps aside, and the storage check is the fallback when the Mac is out of reach. Needs server 6.50.1; the Mac decides from 6.50.3, and the recording hold needs 6.50.4.
  • Meeting sync lists each meeting and where it is. Control 0.5.237: under Meeting sync, one line per meeting the Mac is polishing or saving, with its start time and its stage (HQ polish with a percent, saving to the library, or waiting with its length of audio), the one being worked on first. A long meeting polishing ahead of short ones no longer reads as a stuck sync. HQ prefill reads Ready between recordings instead of 0/0.
  • The Turbo preview comes back on its own. Server 6.50.2: one failed Turbo preview request (the Mac under load) used to switch the fast ~ line off until the server restarted; on 2026-09-17 it stayed off for 34 hours while Turbo itself answered in a quarter of a second. Now a failure is a 10 second pause and the next request tries again; five in a row restart the Turbo worker; a worker that exited is restarted with a backoff that grows to 15 minutes while restarts keep failing. A missing model or someone else’s process on the preview port is never restarted, and nothing restarts it after the server shuts down. The committed transcript was never affected. The same release keeps coming back to a Claude Desktop tab from blocking a Continue for 30 seconds (the away summary Desktop writes on return is its own bookkeeping, not a turn).
  • Offline text stays on the lens until the Mac replaces it. Glasses 6.9.506: offline, the lens used to show the phone’s text one ~ line at a time and drop each as the next arrived. Now the phone’s text stays on the lens as one ~ run after the transcript, newest words kept, and on reconnect it gives way to the Mac’s [Speaker] lines one moment at a time, as the Mac’s transcription of the offline audio arrives. Unlocking the phone keeps it. A reply saved before a crash no longer leaves Reply saved · reconnecting in the header after it finishes. Needs server 6.50.1; with 6.50.2 the Turbo ~ line recovers on its own.
  • One COS window owns the ring. Glasses 6.9.505: when the Even app keeps an older copy of COS Glasses running behind the one you reopened (it did on 2026-09-18, after the companion page went blank), both copies used to answer every ring event, one Start Meeting became two recordings, and the WebView died. Every copy now claims the ring in the Even app’s own storage; the newest boot wins, the copy behind it stops recording (saved), stops answering the ring, and never touches the lens or the microphone again; if the newer copy dies, the older one takes the ring back within a minute. If a copy that has stepped aside is the one on screen it reads Another COS window is open. Close and reopen COS. Every diagnostic row now names its instance and the phone reports its own screen state. Needs server 6.50.1.
  • The Hub whitelist names xAI speech. Glasses 6.9.504: the manifest’s network whitelist lists the xAI speech endpoints the Even Hub review asked for on 6.9.501; nothing in the app calls them, and nothing else changes. This is the build submitted to the Even Hub. Needs server 6.50.1.
  • The queue edits in the reviewer and opens its session. Glasses 6.9.503: Edit on a queued message opens it in the prompt reviewer, the same page a queued G2 prompt opens in (Re-record, Cancel, Send original, Edit, Preview, Change Model) instead of starting the edit recording at once; Cancel returns to the queue, an unchanged Send original leaves the turn where it is (Unchanged. Still queued.), and Edit then Send revised replaces as before. The glasses now keep 2,000 characters of a dictation they park (400 before), so Edit is offered for a spoken message; one the Mac or the phone parked still reads as the server’s first 80 characters and says to edit it there. Double-tap on the queue opens its session (Continue, Fork, Ask COS), the mirror of the Sessions list; the queue footer reads n/N · Tap=options · Dbl-tap=session · ▲▲=Sessions and an empty queue reads Nothing queued. Dbl-tap opens the session. 6.9.502 named the tap on the Sessions footer. Needs server 6.50.1.
  • The queue behind a session, on the lens. Glasses 6.9.501: double-tap a row on the Sessions list and its queue opens, one row per message parked behind that thread: Next, 2nd, Deliv for the one the engine already holds, Refused or Expired for one the server gave up on. A row shows the whole message when the glasses parked it and the server’s first 80 characters when the Mac or the phone did. Tap a row for Back, Read, Edit and Cancel on the same rolling footer the session menu uses: Read opens the message on a reader page; Cancel asks the server and repeats its answer (Cancelled, or Too late: the session has it); Edit opens the message for editing (in 6.9.501 it started the edit recording at once; since 6.9.503 it opens the reviewer) and, on Send revised, cancels the old turn and parks the new text, which goes to the back of the line, since the server has no edit route. Edit is offered only when the whole message is on the glasses (400 characters of a lens dictation in 6.9.501, 2,000 since 6.9.503), so a message parked from the Mac can be read or cancelled but says to edit it there. Scroll up twice at the top to return to Sessions. Rows with parked turns lead with 2q on the Sessions list and the footer reads Tap=open · Dbl-tap=queue (6.9.502 named the tap; 6.9.501 read Dbl-tap=queue alone, which made the shortcut look like the row’s only action). Every queue fetch also settles the glasses’ own ledger, so a lens-parked message reads Done or Refused on the Messages list once the server says so. Needs server 6.50.1.
  • The edit frame and the session history, after three device passes. Glasses 6.9.497 to 6.9.500, each built on the one before: a one-word Continue finds its own turn in the session history instead of an older message that starts the same way, and a window with nothing before the current turn says that earlier messages are on your Mac (6.9.497). While an edit is dictated the LISTEN meter stays in the header instead of trading places with the date line (6.9.498). The ring pages the original prompt during every edit, whichever dictation mode is set, with the position in the footer (6.9.499). The tap-and-hold menu offers the COS rows over the inbox glance, and a row chosen there runs once the glance has cleared (6.9.500). Every build needs server 6.50.1.
  • Scroll back through a running session on the glasses. Server 6.50.0 serves the conversation behind a session on its detail route, the same history COS Control shows (who said what, tool calls left out), read backward from the end of the transcript so a 40 MB session answers in tens of milliseconds. Glasses 6.9.496 puts it above the live page: scroll up past the turn’s words and the context page to YOU and ASSISTANT pages with the time on each, back through the prompts before the current one. The prompt before the current one always fits, the turn on screen is never repeated, and after a Continue from the glasses the history catches up within seconds. Finished sessions keep their summary. Server 6.50.1 keeps rows nobody typed out of it: another agent’s message, an interrupt marker, a Codex instructions block.
  • A follow-up no longer waits out the lease. Server 6.49.1: a Continue binding used to hold its thread for the whole 30 minute lease after its turn completed, and every surface attaches per send, so the second follow-up on a thread inside half an hour was parked behind a binding nobody was using. An idle binding now yields 90 seconds after its last turn; a turn in flight still refuses. The turn ledger is read across every binding of a thread, so a draft re-sent through a new binding replays instead of repeating. The live transport reads acceptance from the transcript’s size at the send, so a large tool result written after it cannot hide the proof; a connect that never opened is nothing sent, not a 60 second hold; the newest window is chosen by start time, not pid. A live Continue reaches the session as a peer message (Claude Code’s own framing, “not typed by your user”): the feed and the list show your words, and an approval belongs at the desk. Seeded steps carry their results, paired by the tool call’s own id, and the stream-json path (a COS-spawned turn) reports outcomes at all. One turn timing line per request at every exit.
  • A Continue lands in the session you left open. Server 6.49.0 writes a follow-up from the glasses, the phone or COS Control into the running Claude session itself, a Desktop tab or a claude in a terminal alike, so the window you left open shows the turn and answers it with its own context instead of a resume child writing to the transcript behind it. It counts as delivered only when the session’s own transcript shows the message accepted; anything else takes the previous path unchanged, and a frame that was written but not confirmed is held and never sent twice. Off until COS_CONTINUE_LIVE=1 in the server’s environment; /api/health reports continueLive. The live session feed also carries the result of each tool (235 lines, +14 -2, exit 1) for the next glasses and Control builds to show.
  • A Claude session shows what it is doing right now. Control 0.5.233 opens a session with a live Activity block above the stored turns: the state with a clock (Working 4m 12s, Waiting · Permission: Bash git push, Failed · rate limit), the prompt it is on, and the last eight things it did as one line each, streamed from the COS server (6.48.1 and later) the moment the hooks see them. A dropped connection reconnects three times and asks for only what was missed; a server that cannot stream leaves the stored turns in charge and says so in one line. The composer says a reply to a session another app holds lands in the transcript, and counts the follow-ups queued behind the current turn. When the server reports Claude Code’s hooks missing or drifted, Sessions offers Install hooks from a banner; before server 6.48.0 it offers Update Server.
  • Hold to talk on the glasses. Glasses 6.9.474 to 6.9.485: set Settings, Voice, Glasses dictation to hold and a long press on the ring starts a message while letting go opens the review; a tap then sends. While you hold, the footer reads Release: review; a tap while you hold reads Tap again to finish, and a second tap ends the recording, so a release the ring never reported still has a way out (6.9.485). It listens in Messages, in an open message and in Message History; hold on a meeting, thread, memory or session to ask COS about that record in one motion, and the recorder says Ask COS or Continue so you know which it is. Home stays a reading screen: tap opens the latest message and a hold there does nothing. The message status line reads Tap: actions and Hold: ask so both gestures are always in view, and the session id it used to show is off unless you turn it back on. Tap to start, tap to finish remains the default.
  • The Mac transcribes first. Glasses 6.9.485: with Transcription set to Mac + phone model, dictation and live meeting text go to your Mac while it answers, with your vocabulary corrections and speaker context, and the phone model takes over the moment it does not, with no prompt. Until 6.9.484 a loaded phone model took every dictation, online or not. Settings, Voice has a new choice under the phone model, Use the phone model: When the Mac is unreachable (default) or Always. The per-hold Phone Tiny footer flash is gone; the Transcribing footer names the route instead. A hold too short to hold speech ends as No speech detected on the phone, with no upload and no Retry loop.
  • The inbox glance leaves on its own. Glasses 6.9.485: the COS mark with the list of waiting replies, shown on a return or a reopen, hands off to the inbox 2.5 seconds after it lands instead of waiting for input. The hold menu opened over it sends the app no event, so the first tap on a menu item used to land on the glance. A tap inside the 2.5 seconds still opens the inbox at once.
  • Live captions are back in Meetings on the glasses. Glasses 6.9.480 removes the iPhone WhisperKit beta option, which never transcribed on the phone and quietly took every meeting off the live preview lane; a phone that still had it selected is switched back on its first open, and 6.9.479 logs which capture path every meeting start takes.
  • Meetings, threads and replies read as documents, and Sessions reads the server’s state. Control 0.5.232 renders a meeting, a thread, a memory and a Claude reply as a document instead of raw Markdown: headings with a rule, the metadata table, lists, task items, code, and the transcript as a disclosure that names its speakers. The pane’s actions come in three weights, with Copy as context first and filled. On server 6.48.0 and later the Sessions list and the pet read the state the server derives from Claude Code’s own hooks: a permission prompt shows as waiting with its command the second it appears, a rate limit shows as failed, and a queued follow-up is counted on the row.
  • Continue works on every session again. Server 6.48.2 fixes Continue and Fork on a session whose transcript opens with a large first prompt, such as one with pasted screenshots: the server read a fixed slice of the transcript for the session’s working directory and found none there, so the lens and the phone said the session could not be continued. It now reads as far as it needs to, and a session whose shell moved into a subfolder mid-turn is no longer treated as two workspaces.
  • A queued follow-up lands the moment Claude finishes, and the live feed says what every row says. Server 6.48.1 delivers a follow-up queued at a busy Claude session when the engine closes the turn: its Stop hook has fired and every Stop hook has returned, which the server reads from Claude’s own process registry, so a follow-up never lands inside a turn or while a prompt you typed at the desk is still queued (before, it waited for a 30 second idle window, 35 seconds or more). The session stream carries the same state the session rows carry on every status line, a Continue you start from the glasses streams as working for as long as it runs, and a reconnect replays what it missed instead of starting over. Nothing changes on the phone, the lens or COS Control until their next builds read the new fields.
  • Session state comes from Claude Code itself. Server 6.48.0 installs Claude Code’s own hooks with npx --yes @gotcos/glasses-server@latest --hooks install: every session started after the install reports its start, prompts, turn ends and permission prompts through a file spool, and every session row carries one derived state with its source (agent_state, state_source, state_since, the waiting kind and detail, the last reply). A permission prompt shows as waiting within a second instead of after fifteen minutes. Nothing changes on the phone, the lens or COS Control until their next builds read the new fields; --hooks status and --hooks uninstall report and remove the hooks, and removing the package does not remove them. When a server update ships a new hook script (6.53.3 did), --hooks status reads script_outdated with a line saying what to do until Install hooks runs once.
  • Threads open with their full context. Control 0.5.231 shows a thread’s stakeholders, meetings, milestones and sources in thread detail, and Copy as Context copies all of it.
  • Session names match your Claude tabs. Control 0.5.226 names each Claude session on the Session Pet and in Sessions with the title Claude Desktop shows on its tab, and an idle pet row says idle.
  • The Session Pet shows what Claude sessions are doing. Control 0.5.225 reads each live Claude session from its newest message: working while a turn or a subagent runs, waiting when Claude asks you something or a turn stalls, and idle the moment a turn ends. Since 0.5.214 the pet could read idle a few minutes after Activity last refreshed the Sessions list.
  • Name held voice samples, then apply the meeting labels. Control 0.5.223 and server 6.46.0 add individual sample suggestions, a preview before every Apply, and Undo. Preview separates samples used for training from transcript positions, shows wider matches only within each sample’s meeting, and asks you to listen when a large match needs review. Results keep per-sample and per-meeting outcomes; interrupted naming waits for your decision.
  • Fireflies meetings join the library, and one meeting becomes one record. Server 6.47.0 imports Fireflies meetings through the API on a Mac with no COS pipeline, and a deterministic engine merges a G2 recording with the Fireflies meeting it shares the most unique three-word phrases with. A merge is additive: the merged record holds both transcripts, the union of attendees, the vendor summary and action items, and a Sources table, and the source files are never modified. High confidence merges apply with Undo; lower confidence pairings wait as suggestions. On a Mac with the COS pipeline the engine starts in advise mode and writes nothing into the operations folder. Update the server from COS Control, or run npx --yes @gotcos/glasses-server@latest.
  • Connect Fireflies and review merges in COS Control. Control 0.5.230 adds an Import meetings card for the Fireflies key, the backfill window and every import state, a Suggested merges list showing both meetings and how many phrases they share, Undo on a merged meeting and Revert on a split piece with a preview before either runs, and an engine status row with the mode and the first run’s counts. It needs server 6.47.0; on an older server the card says to update the COS server and offers Update Server.
  • Ref a message from the lens. Glasses 6.9.474 adds Ref to the reader’s footer menu, behind Messages and Reply, so the message you are reading rides your next spoken prompt and the recorder shows its number. Message History opens Chats, Ref and View image on one tap and selects on a second, so a photo now takes two deliberate taps instead of one. Ref refuses and says why rather than guessing, and a Ref is always a question for COS, never a write into an agent thread.
  • G2 recordings show in a multi-folder Meetings library. Server 6.46.1 lists the G2 recordings a Mac saved beside a multi-folder operations library when that Mac has no COS pipeline to file them, so the Meetings window no longer shows an empty month. A recording that also reached the operations folder is listed once. With a working pipeline the list is unchanged. Update the server from COS Control, or run npx --yes @gotcos/glasses-server@latest.
  • COS Control shows its own background Claude runs as scheduled jobs. Control 0.5.229 names each Claude run that COS starts itself, such as the meeting watcher's sync, by the job that started it instead of a folder name. The Session Pet keeps one finished row per job with today's run count, and Sessions lists today's finished runs with their script and duration. Opening a job shows those facts; there is no transcript to open and no conversation to continue.
  • COS Control tells you when meeting audio stops reaching the Mac. Control 0.5.228 posts a macOS notification when a G2 meeting has sent no audio to the Mac for 60 seconds while the phone kept sending heartbeats for at least 30 seconds after the audio stopped. A phone that goes quiet on both channels at once, or whose upload queue is still growing, does not notify. Pause notices say whether phone storage paused the recording. Replayed over five days of meetings it posts 3 notifications where 0.5.227 posted 17. The alert shows on this Mac only, so allow COS Control in any Focus you use during meetings.
  • Meeting audio that stops at a phone lock is logged. Glasses 6.9.473 records within about 20 seconds when meeting audio stops reaching the phone, what the Even bridge answered and whether the glasses were connected. It is a diagnostic: nothing new appears on the glasses, and audio missed during a drop is not recovered. If the lens freezes during a meeting, or COS Control's meeting audio alert fires, unlock the phone and open COS.
  • Tiny proves itself, and meeting audio counts as saved only when it is. Glasses 6.9.472 reads Tiny ready only after it transcribes a short test clip on the phone. A meeting chunk the phone could not store is held and retried while the app stays open, never counted as saved. Stop retries the same audio, says plainly if any is lost, and ends with the microphone off even if the phone comes back to the foreground during it.
  • Continue, Fork and Ask COS on the phone. Glasses 6.9.471 ends a session’s detail in Views, Sessions with the lens’s own actions, and the Sessions and Archive lists scroll up and down only. An action chosen on the phone never captures a question spoken on the glasses.
  • Sessions say what they are doing. On the phone, Views, Sessions labels every Claude, Codex, and Cursor session Working now, Open, Status unknown, or Idle, with its last activity and, while it is held, its last tool. Tap one for a live detail that refreshes while it is open, with or without glasses. Server 6.45.5 dates sessions by their last real message, so a Claude Desktop relaunch no longer floats old sessions to the top or reads as work.
  • Ask progress and truthful Meeting sync. Ask the graph shows elapsed status while it runs. Graph rail labels stay readable. Meeting sync names library save and live recording instead of Idle, and Update/Restart stay blocked until that work finishes.
  • Ask first, explore next. Memories follows the Mac’s light or dark appearance. Knowledge opens with Ask the graph, then a populated overview. When a compatible model pipeline is connected, your question selects validated points and hops; manual controls remain under Advanced investigation. A late answer cannot replace your intervening canvas edits.
  • Choose who COS is for. Enter your name during onboarding and edit it later in Memory settings. This profile name is separate from the Mac that indexes knowledge or holds memory write authority.
  • Retained audio has a clear state. Control distinguishes a usable transcript, processing audio, and audio with no usable speech detected. Save appears only for a recoverable transcript, with one Save action for a single capture. Retained server audio does not imply that a meeting is waiting on the phone.
  • Control stays responsive after helper timeouts. Closed helper pipes no longer leave background monitors spinning. Requests clean up their output and progress streams after success, timeout or cancellation.
  • Reviewed memory and multi-hop investigation. Keep captured candidates separate from active recall, inspect revisions and evidence, select anchors and waypoints, save investigations, and record identities that must stay separate. Connections express associations, not demonstrated causation. The optional owner-local runtime supplies document links and keyword search; advanced inferred graphs still require a compatible pipeline.
  • Forked sessions keep their identity. Explicit Desktop-to-CLI mappings open the correct local transcript; continuing a fork opens its exact child. Missing or ambiguous mappings stay unavailable.
  • Meetings survive the phone’s storage layer. Glasses 6.9.456 reads the real storage error instead of a bare “transaction failed”, so a full disk stops the mic with its reason instead of retrying forever; chunks are pruned during the meeting, a stuck transaction times out instead of hanging Stop, and a meeting that loses the network keeps every chunk and saves without gaps once it returns.
  • Memories and Knowledge in COS Control. Advanced graph, model-answer and curation capabilities in the published release require a compatible Python pipeline configured through COS_SCRIPTS_DIR; plain-file notes remain available without it. A Memories tab with what COS learned, what is waiting for review, and your knowledge graph: focus on any entity, ask the graph in plain language, accept or prune a captured memory, set your own guardrails, merge duplicate people from a preview, and set up the graph from zero with your own embedding choice.
  • Voice profiles and speaker review are honest. Server 6.44.15 repairs a profile that was named after a spoken sentence into a placeholder you can rename; 6.44.16 keeps a recording’s session id when its sidecar lives only in the server’s recordings folder, and Control 0.5.206 names the meetings it cannot review and why.
  • Tasks with a finish line, and a morning brief in your inbox. Capture a task, schedule it, and Run now from Activity; a scheduled start-of-day brief lands in Messages as an ordinary numbered reply. Every run the Mac started says where it came from.
Version by version
Control 0.5.282 and server 6.70.0
Live COS Ask beside the live transcript, with presets, typed questions, durable history per meeting, files and screenshots shared in the meeting, the Meeting assistant model under the Ask box and in Settings, Copy full context, and sources that open where they came from. Recording shows in the menu bar and the Dock. Server 6.70.0 keeps the Ask journal on your Mac, reads the current meeting first, and searches the web only for plain public questions, with only the words you typed. Includes Control 0.5.279 to 0.5.281 and server 6.68.0 and 6.69.0, none of which was public on its own.
Glasses 6.10.639
Mac transcription switcher in Settings, Voice: Whisper Turbo or Parakeet Ultra for the live preview, the HQ model, and the engine actually running. Needs server 6.72.0; Parakeet installs from COS Control 0.5.289.
Glasses 6.10.637
Views panels line up with the tab bar on every phone width, the empty status strip is gone, Fact check runs on the lens, the first Fact check covers the whole meeting and later ones only what is new (server 6.71.13), and Settings has a Home city for fact checks that need a starting point.
Glasses 6.10.635
The complete companion pack adds Fact check, clickable citations, saved-meeting follow-ups, local phone memory search and packaged Tiny/ORT. Physical phone/G2/Android checks remain pending. Earlier additions retained: Meeting Ask on the phone and the lens (623), with a Model control beside Ask (624); a circle that fills before hold to talk records (622); Scan code on your Mac (621); hold continues a Cursor session (620). Needs Even App 2.2.10 or newer and server 6.62.1; Meeting Ask needs server 6.69.0.
Control 0.5.269
The Mac download opens again. Since 0.5.263, opening the downloaded zip with a double-click added three small files inside the app, and macOS then said COS Control "is damaged". The download is now packed so nothing is added. If you saw that message, delete that copy and download again. Updates from inside COS Control were not affected.
Control 0.5.268
Fix release for 0.5.267. COS Control now finds Codex on a Mac that has only the ChatGPT app, so Get started no longer says "Connect an AI app first" there. It looks in the same places as the COS server, including a ChatGPT app in your own Applications folder.
Control 0.5.267
Fix release for 0.5.266. Jump to your session works again: COS Control can bring your Claude, Cursor or Terminal session to the front, and macOS asks once per app. Speaker ID works with the bundled Node runtime. If a session jump stops after an update, Reset and add again in Settings > Session pet re-adds COS Control to Accessibility.
Control 0.5.266
Includes the GOTCOS-styled completed-task filter. Link a saved meeting to an existing task directly from Meetings or Speakers. Search across domains, keep the task and its earlier links, and carry the new meeting reference and attached files into the next handoff. Linking does not message a running session.
Control 0.5.264
Open in platform now keeps opening status and actionable failures visible in Sessions. Queued follow-ups show recorded hold reasons. Includes the 0.5.263 onboarding release: Developer ID signed and Apple notarized. First-run welcome prepares the bundled Node runtime and starts the managed server without Homebrew or a separate npm installation. Includes responsive task editing, protected drafts, and Cloud Puff as the bundled default pet. Existing pet choices stay intact. Voice models and feature permissions remain separate.
Control 0.5.252
Takes Work requests from the glasses through the server’s inbox: lists them every 30 seconds (every 5 while it holds one), claims each once, reads the task, its sessions and the model catalog again, and refuses with the reason (a task gone, complete or changed, a list it could not read, a session or model not on this Mac, a request type it does not know) before anything is sent. A Start sends the task’s own prompt with the note under it, never a half-typed Mac draft. Reply by voice and Not done yet go back to the session that asked or reported done. A New session from the glasses stays in the background. Results reach the server even across a relaunch. Includes 0.5.249 to 0.5.251, none of which was a public download on its own, with 0.5.251’s controls after their QA round: the open dropdown is a card under its face, and switches, checkboxes and chips take Space. Pairs with server 6.59.0; with an older server nothing changes and nothing is shown.
Glasses 6.10.587 and server 6.61.6
Submitted for marketplace review October 4, 2026. Queue receipts refresh during normal session polling. Includes 586 monochrome phone review, 585 recoverable Working animation, 584 speaker search/playback polish, 583 workflow signals, and 582 protected Sessions turns and phone review.
Glasses 6.10.580
Native session platform in navigation and footer; verified saved-turn writes. Model metadata is displayed only when the session reports it.
Glasses 6.10.578 and server 6.61.6
Page actions come before Home in Messages, Sessions and Meetings footers. Home remains first in default side shortcuts and is one upward wrap from the first footer choice. Includes the queue fixes from build 577.
Glasses 6.10.577 and server 6.61.6
Sideload queue fix: native Codex waiting counts and rows, full text after reconnect, in-place edits that preserve position, and Queue in the open-session actions. Failed reads show unknown; edits that cannot be confirmed keep your draft.
Glasses 6.10.576 and server 6.61.5
Sideload testing pair. Adds consistent meeting history direction, Home in reader actions and first in default shortcuts, navigation battery, and distinct Messages/Sessions marks. Includes Sonnet and GPT-5.6 Luna Fast final dictation choices, with Sonnet default and explicit old-server compatibility handling. Includes build 572’s history/Ask footer changes and server 6.61.4’s merged-review identity and revision-guarded task editing support. Task-name editing in Control still requires the corresponding Control build; this release does not update Control.
Glasses 6.9.561
The companion pack, a sideload. Work shows progress on a card (the stage, the report and its time, the session’s words, its live state, the last move) and starts with Working now. Start work on the phone and, with a sure destination and a confirm that starts on Cancel, on the lens; Reply by voice and Not done yet; Mark complete asks first on the lens. The phone’s Work tab uses words with a rule instead of pill rows. Settings gain Start hold to talk from (Ring only, the default, or Ring or temple) and Switch a ring hold to tap after (10, 15, 20 or 30 seconds, 15 by default). Work progress needs server 6.59.0; Start work, Reply and Not done yet also need COS Control 0.5.252. Requires server 6.55.0.
Server 6.59.0
Work progress for the glasses on /api/work-board/activity (the report, evidence up to 280 characters, the last move, the live flags, the task’s revision, the saved destination), /api/work-board/activity/open for Working now, and the handoff request inbox /api/work-board/handoff-requests: the glasses leave a request, COS Control lists, claims and reports it (those routes answer only on the Mac itself), and the server never runs a provider for it. One request per card, 40 a day, and a request not claimed in 10 minutes expires.
Control 0.5.251
Every stock macOS control wears the gotcos theme: 28 pickers become dropdowns and view switches, 23 toggles become switches, checkboxes and chips, and fields, buttons, menus, steppers, progress and disclosure follow. A Claude session from Work is named after the task’s whole title. Shipped inside 0.5.252.
Control 0.5.250
A Claude session started from Work is named after its task and, with server 6.58.2, linked while it runs: the card shows its live status, and Sessions and the pet list it as Work under its name. Until its first turn ends only the server writes to it. Sessions reads a name written near the top of a long transcript.
Server 6.58.2
A query job may carry sessionName; the server cleans it (up to 100 characters) and starts its own Claude session with claude --name, never on a Continue, a dispatch or the warmed session, and only when the installed CLI takes --name. The job records the Claude session id from the first stream event, so Work can link it while it runs. A title near the top of a long transcript is found.
Control 0.5.249
New session, Start work and Fork to another platform run on the COS server and open in their app once the first reply is done: Claude and Codex in their apps, Cursor in Terminal with cursor-agent --resume. Each session opens once. Continue on a session its app owns takes your note to the app. Removes 0.5.248’s prefilled tab; a tab 0.5.248 opened and never linked reads as not started and no longer blocks the item.
Glasses 6.9.560
Sideload. A copy whose meeting audio stops while the glasses stay connected tells the Mac at once that it is not recording, and holds that until a frame arrives. Told to yield by an owner that is recording, it saves and stops its meeting; by one that is not, it steps aside, keeps capturing and takes the ring back when its audio returns. Server 6.58.1 recommended; requires 6.55.0.
Server 6.58.1
The ring referee: a copy’s own recording word holds only while its chunks back it (150 s after its newest chunk, the start of its recording claims, or one grace after a gap in its claims, renewed only after a chunk of its own); a copy that reports recording: false is believed over its trailing chunks while it claims; what each copy has said is kept across changes of owner.
Control 0.5.248
Start a new session and Start work open a tab in Claude, Codex or Cursor with the handoff filled in; nothing sends until you press Send there, and Work then links the session. A Cursor handoff too long for its link goes through a file the tab names. Settings, Open new sessions in the app, turns it off. Pairs with server 6.58.0.
Control 0.5.247
Work follows each handoff: the session having the work moves its card to Draft, a COS-WORK done line with evidence moves it to QA, never to Complete, and each move can be undone. Progress timeline, notifications for received, done and needs input, and Not done yet. A New session sent from Work is findable within seconds and keeps its own title in Sessions.
Server 6.58.0
POST /api/work-board/completion-check asks Jev whether a session finished its task when its newest reply carries no status line. The answer is advice: Control moves a card only on a confident done. One check is at most about 2,500 input tokens, inside the shared daily Jev cap.
Glasses 6.9.559
Sideload. A message for a busy thread that frees as you send is delivered into that thread as a Continue; if the thread does not answer, the message stays with it and Send retries there. The Messages job page and a Sessions page show --- ask --- and your ask while nothing has been written. Server 6.55.0 recommended.
Glasses 6.9.558
Sideload. The Work tab’s Domain picker uses the theme’s own field colors, so the selected domain reads in the light theme.
Glasses 6.9.557
Sideload. Work and a task open at once from what the phone has. The list repaints only if the Mac’s answer changed it, and a task says Loading recorded handoffs... until they arrive.
Glasses 6.9.556
Sideload. Work on the phone and the lens: tasks by domain and six stages (Mentioned, Planned, Draft, Built, QA and Complete), a task’s source meetings and recorded handoffs, and stage changes checked against the task’s current revision. Needs server 6.56.0; older servers keep the Tasks view.
Glasses 6.9.555
Sideload. The 30 second switch pulses a square in the header, LISTEN · ▣ Let go, tap to confirm, until the ring lets go.
Glasses 6.9.554
Sideload, the tap-at-30 pack. At 30 seconds a ring hold becomes a tap recording: let go, then one tap finishes. If the ring’s release has not arrived 10 seconds after the switch, the header says Tap temple to confirm. The listening meter stays on the header for the whole recording.
Glasses 6.9.553
Sideload. From 45 seconds a ring hold shows Let go, still recording; letting go any time after it keeps recording, and the header says Still recording · Tap to confirm until you tap. 6.9.554 moves the switch to 30 seconds.
Glasses 6.9.552
Sideload. Once you let go at the note there is no 90 second limit. A hold still down at 90 seconds stops, and its review sends on the next tap however late it comes.
Glasses 6.9.551
Sideload. At 45 seconds a ring hold asks you to let go, and the recording keeps going until a tap. A stop you did not make never sends on one tap, and after a release that stopped nothing, taps are ignored for 800 ms.
Glasses 6.9.550
Sideload. One temple touch still ends a recording stuck on a dropped ring, and a late release from an earlier hold no longer turns a new recording’s microphone off. Each connection change the Even app reports is logged to your Mac as device.status, with no serial number.
Glasses 6.9.549
Sideload. The card’s labels (Continue, Outcome, So what, You asked, and each card’s own) are drawn bright and a pixel bolder over the dimmed card. If the glasses refuse the page with labels, it shows without them.
Glasses 6.9.548
Sideload. With Behind the prompt box set to The page as it is, the frame shows the page row for row as the lens painted it, and the header says what letting go does.
Glasses 6.9.547
Sideload. Settings, Glasses dictation, Behind the prompt box: a summary from your Mac, the default, or the page as it is, which asks for no summary. Fixed: a hold let go at once could leave the box on the lens.
Glasses 6.9.546
Sideload. The prompt box docks under the card, which gets six rows, and slides in on a healthy link. Outcome and So what get two rows each (server 6.55.0). A hold on a meeting shows Gist, So what and Open; a thread shows its two newest updates; a memory shows itself. Scrolling sends the glasses only the newest page.
Glasses 6.9.545
Sideload. The card behind the box reads Outcome (Answer on a message), So what and You asked, written by your Mac with Claude, Codex, Cursor or a local Ollama model. Only finished turns are summarized, once per reply. Needs server 6.54.0; an older server keeps the 6.9.544 card.
Glasses 6.9.544
Sideload, replaces 6.9.543. The card uses the page’s own state, so a run you watched finish says done, and it says sent, waiting, waiting on you or status unknown when that is the case.
Glasses 6.9.543
Replaced by 6.9.544. Behind the box is a labelled card instead of the page’s last rows.
Glasses 6.9.542
Sideload, replaces 6.9.541. No box after you let go, and the box never floats over a different message.
Glasses 6.9.541
Replaced by 6.9.542; do not sideload. A hold on a session or a message keeps the page on the lens, dimmed, with your words in a box at the bottom.
Glasses 6.9.540
Sideload. The app ships no built-in glossary: phone transcription is left as heard unless your Mac or a vocabulary file you uploaded says otherwise. The last glossary your Mac sent is kept for offline use.
Glasses 6.9.539
Sideload. Sessions opens at once: the lens shows the list already on the phone, then refreshes it in place when the Mac answers, and the cursor stays on the session it was on. Until the Mac answers, a row saved more than 15 seconds earlier shows ? instead of ● or ○; if the Mac does not answer, the footer says Mac not answering. Saved list. A disconnect or a different Mac empties the list. The first open ever still waits for the Mac. Server 6.53.4 recommended.
Glasses 6.9.538
Historical listing. First run ends at a first win: with no messages, home says Tap: say something, see it here (no Mac) or Tap: ask your Mac, try "brief me" (a Mac), and a tap records. Right after you connect a new Mac, home says Connected. Tap: ask, try "brief me" until your first question. With no Mac, Sessions says Needs your Mac and asks nothing of the network, Meetings shows your phone recordings, dictation uses the phone model or says it is still loading, and the review finishes with Done instead of Send. Empty lists say how to fill them. A tap on the setup screens does nothing. Setup explains Tiny (built in, offline right away) and Base (downloads 74 MB each time COS opens). Server 6.53.4 recommended.
Glasses 6.9.537
The last eight sessions and eight meetings you opened are saved on the phone, in the Even app’s storage, and open with the Mac out of reach and after the app closes. A saved copy shows at once and says Saved 14m until the Mac’s copy replaces it; if the Mac does not answer, it stays. The meetings list is saved too. Meetings keep their summary, decisions, action items, attendees and the first 6,000 characters of the transcript. Nothing is kept longer than seven days, and a disconnect or a different Mac wipes them. Server 6.53.4 recommended.
Glasses 6.9.536
A running session shows how long its current turn has run in the footer, for example 7/7 · 12m 04s, even when you open it mid-turn. It counts the turn, not the session, keeps counting through an approval, and stops when the turn ends. It needs Claude Code hooks installed; Codex and Cursor sessions keep the clock from the stream. Server 6.53.4 recommended.
Glasses 6.9.535
A running message always draws the same view as Sessions: a status line, then the answer’s full words as they arrive, and the steps when the Mac sends them. Runs the Mac sends no trail for (a hand-off pickup, a Mac not taking jobs, an older server) show the words and no steps instead of the tool log, which now appears only under Raw log. A finished message shows the answer alone: Completed activity trail is renamed Tool log on finished answers and is off by default, including for messages saved earlier. A retry starts clean, and a failed run with nothing written shows its reason. Server 6.53.4 recommended.
Glasses 6.9.534
A request gets 10 seconds to start answering and 30 more to finish, so a large session on a weak connection opens instead of showing Detail unavailable. The last eight sessions you opened stay in memory: reopening one shows its last copy at once while the fresh one loads, and a failed refresh keeps the copy on screen. The first question of a session now runs as a Mac job and shows the readable trail. A session that moved on your Mac while you dictated offers Send anyway on the glasses and phone. Server 6.53.4 recommended.
Glasses 6.9.533
Phone session controls, Cancel run included, stay visible and tappable in the iPhone’s WebKit with the keyboard open or closed. An open session stops rebuilding its transcript while you read it. Past days is back on the phone. Opening COS never offers Start here to a phone that is already set up, local starter mode exits cleanly, and Meeting Stop finishes on the first press.
Server 6.53.4
A thread a cancel left locked is released only when every stopped process is confirmed gone, never when the process check itself fails. A desk cancel re-arms only on the exact prompt it was sent to stop. The session hook drains its input on every event. Press Install hooks in COS Control once after updating.
Server 6.53.3
A cancel stops every process the run started and settles as soon as they are gone. A cancel during the hand-off to a busy session still lands. A thread locked by an earlier cancel unlocks itself once the stopped process is gone. Closed meetings age out after four hours. The session hook is about 40 percent faster; --hooks status reads script_outdated until Install hooks runs once.
Glasses 6.9.532
First run leads with Start here, no account or Mac needed, followed by Connect a Mac and I have a username. Start here boots the real app on the phone model instead of a sample shell.
Glasses 6.9.530 and 6.9.531
On the phone, a session keeps Back in a fixed header with its controls pinned below the scrolling detail, and Views shows six destinations instead of eight. Every wall clock on the glasses carries its AM or PM, so a time never reads as elapsed time.
Glasses 6.9.529
Cancel run: a fifth row on a session’s menu while the Mac can name a run, confirmed with a second tap, and the same button on the phone, which prints the Mac’s reason when it cannot stop the run. Dictation goes to the Mac again after 6.9.525 sent every hold to the phone model. Requires server 6.53.0.
Server 6.53.0
Cancel run. A turn COS started stops at once, a Claude run at the desk stops at its next tool call through the session hook, and a Codex app or Cursor run answers that it must be stopped where it runs. POST /api/agent-sessions/:provider/:threadId/cancel, and attachability reports what a cancel would do.
Glasses 6.9.525 to 6.9.528
The microphone opens the instant a hold starts and stops the moment you let go, and a very short silent hold is thrown away. Lens text is fitted by measured pixels, nothing is written that the lens cannot draw, and lists show seven rows instead of five or six.
Glasses 6.9.513 to 6.9.524
The running job footer names its controls and how far back you have scrolled. Sessions sort newest write first. One copy of COS answers the ring, a copy that stepped aside sleeps, and a slow lens link is paced and named once. A meeting starts at once offline.
Glasses 6.9.512
Messages gains a readable running trail with whole-word paging, status and tool-activity controls, and gap-safe reconnects. Session questions and approvals appear as lens and phone cards only while the client is live; every choice takes two taps, Other can be dictated, Leave for the Mac hands the native dialog back immediately, and stale or expired cards cannot send. Codex sessions show their live words, steps, and short reasoning line. Requires server 6.52.0.
Glasses 6.9.511
A Continue that meets a busy thread after recording is parked under the same turn key and delivered when the turn ends instead of being refused. Hold on a Codex session is Continue and reaches the Codex app’s queue; a Cursor composer mid-turn can take a queued message through its Stop hook. Requires server 6.51.0 for Codex and Cursor.
Control 0.5.239
Update Server, repair, and adoption preserve the hand-set launch switches for live Continue, the Codex queue, session hooks, glasses questions and approvals, and the Messages trail.
Control 0.5.238
The Session Pet discovers Codex threads the Activity cache has not listed and reads their current turn state, and it discovers active Cursor composers. The Sessions pane parks a message when its probe or attach finds a busy thread. Right-click the pet for Full, Calm, or No motion, or hide it.
Server 6.52.0
Messages jobs can publish an opt-in, redacted trail of prose, tool steps, and outcomes with its own reconnect cursor. Session questions and tool approvals can be held for an away user and answered from a live glasses or phone client, with idempotent answers and immediate hand-back to the desk. Codex session streams include new words, steps, and short reasoning status as the rollout writes them.
Server 6.51.0
Continue into a Codex thread held by the Codex app uses the app’s own visible queue, and a queued Codex turn drains on the engine’s completion marker. A Cursor composer that its hooks show mid-turn can take one queued follow-up through its Stop hook, and Cursor rows carry hook-grounded state.
Glasses 6.9.510
Every claim to the Mac carries recording and every meeting chunk carries ?clientInstance=, the id the window claims with; a recording window refuses a step-aside when the Mac says the owner is not recording (captureLive: false, logged as instance.yield.refused). Builds 6.9.507 to 6.9.509 were not released.
Glasses 6.9.485
Mac first: with Transcription set to Mac + phone model, dictation and live meeting text go to the Mac while it answers and the phone model takes over when it does not, including a Mac that reads reachable but refuses the recording or a live-text chunk; Use the phone model: Always keeps the 6.9.484 behaviour. The per-hold Phone Tiny flash is replaced by the route on the Transcribing footer (Tiny on phone, Mac fallback). The inbox glance hands off after 2.5 seconds. A tap while the ring is held arms Tap again to finish and a second tap within two seconds ends the recording. With a meeting, memory, thread or session attached, the recorder footer shortens the title to the row’s width so Ask COS · Release: review stays on the one visible line. Under 0.4 seconds of audio, or an empty transcript, ends as No speech detected on the phone. Tap: actions · Hold: ask shows only on a message; a hold on the dashboard says Hold to talk not available here. A reply starting while you record leaves the recorder’s footer alone. Requires server 6.45.3.
Glasses 6.9.484
While you record a plain message the footer reads the control (Tap: review, or Release: review while a hold is down) instead of the message reader’s Tap: actions · Hold: ask, which named two gestures the recorder does not have; it showed whenever a timed footer note cleared during a recording. A message still shows its own line. Requires server 6.45.3.
Glasses 6.9.483
While a hold is down the recorder reads Release: review, and Tap: review in tap mode, with the intent still in front (Ask COS · Release: review); the nav row shows the control alone behind the LISTEN meter instead of a cut-off Release to. A click while the ring is still held no longer ends the recording: on 6.9.482 a click mid-hold, most likely a firmware phantom, moved the recorder to review under your finger, so letting go found nothing to finish and a second tap was needed. In 6.9.483 and 6.9.484 the hold owns the stop outright; 6.9.485 replaces that with a two-tap finish, since a release the ring never reported left no way out until the 90 second failsafe. Every stop names its cause in the diagnostics.
Control 0.5.237
Meeting sync lists the server’s meeting_sync.meetings rows: start time and stage, the one being worked on first, up to four and a count. HQ prefill reads Ready between recordings.
Control 0.5.236
A queued message opens to its whole text on the pet card and can be edited while it waits, on the card and in the Sessions composer; a replace is a cancel and a new park.
Control 0.5.235
What is queued behind a session is listed under the pet card and the Sessions composer, with place and text, and can be cancelled while waiting.
Control 0.5.234
Message a session from the Session Pet: a paperplane on each live row, a card that names the target, live hand-off to a running Claude session, queue-and-deliver for a thread mid-turn (pane and pet). Meeting times read 12-hour, with a 24-hour pick under Settings, Advanced.
Control 0.5.233
The session pane’s live Activity block reads the server’s event stream through a new helper command (session-stream), one process per open pane, cancelled when the pane closes; reconnect is bounded to three tries with backoff and resumes from the last event id; a 404, a full server or a dead socket falls back to the polled turns with one line saying which. The composer shows the queued follow-up count and names the fork mode. session-hooks-status and session-hooks-install back the Sessions banner, and installed is the server’s word after the merge, not the app’s guess.
Control 0.5.232
One Markdown renderer for the meeting, thread, memory and session panes: ATX headings, pipe tables, bullet and numbered lists with nesting, task items, fenced code, quotes, rules, details blocks and the scribe’s speaker lines, in Control’s own type. The meeting file is the pane body once; the title in the header is not repeated, and Copy summary, Copy transcript and Copy as context still copy the stored Markdown. Three action weights: one filled primary per pane (Copy as context, ⌘C), quiet outlines for the rest, and a featured outline with a NEW pill for Review voices while a meeting is new. The helper carries the server’s eight derived state fields on every session projection and lets a hook- or registry-sourced state decide the row; the chip reads the waiting kind and detail, Failed with its reason, and the queued count; a failed turn sits in the pet’s WAITING ON YOU section. Against a server older than 6.48.0 nothing changes.
Server 6.50.4
The referee holds the glasses for a window that is recording: by its own tagged chunks (the live upload, and an iPhone offline chunk replayed; not the preview), or by its claim’s recording while it keeps checking in (45 s). A recording claimant takes them from an owner that is not recording. One owner per device address; a boot time more than an hour ahead is refused.
Server 6.50.3
POST /api/client-instance/claim referees between copies of the glasses app: the newest live boot owns the ring, an older one takes over after 45 s of quiet, and check: true asks without taking. Behind the API token.
Server 6.50.2
The meeting Turbo preview no longer latches off: a failed request against a running Turbo worker is a 10 s cooldown (PREVIEW_FAILURE_COOLDOWN_MS), five in a row recycle the worker, an exited worker restarts from the request path with a 60 s backoff doubling to 15 min and reset by any answer, and stopWhisperPreviewServer({ final: true }) at shutdown prevents any revive. Preview log lines carry an ISO timestamp. Occupancy: SubagentStop and Notification after a Stop (Desktop’s away summary) vouch for an idle thread instead of holding it for 30 s.
Server 6.50.1
History rows are what a person typed or read: a peer-inbox row is the user only when its origin.kind is peer (a live Continue), so a teammate’s report or another session’s message is dropped; [Request interrupted by user] and Codex’s AGENTS.md instructions row are dropped; an injected row (isMeta, a compaction summary) never replaces the stream’s prompt. ?turns above 40 is clamped rather than refused.
Server 6.50.0
GET /api/agent-sessions/:provider/:id?turns=N adds recent_turns (role, text, at) and recent_turns_more, the newest N messages (up to 40) with sidechains, tool results and wrapper prompts left out. The transcript is read backward in 2, 8 and 24 MiB windows, one byte before each so a record starting on the boundary is kept; past 24 MiB the answer is what was found, marked as more. Without ?turns the response is unchanged. A read failure is logged and the detail still answers.
Server 6.49.1
Registry: an unpinned binding idle for IDLE_LEASE_YIELD_MS (90 s) is superseded and detached by the next attach; the queue drainer’s attachable probe uses the same predicate; findTurn reads every binding of the target. Transport: socket rejections carry the phase (connect means nothing was written); reads start from the transcript size at the send plus 64 KiB slack; one verify constant (4 s); the suspect memo is keyed by the client’s draft key; records sort by startedAt and dead pids are dropped. Stream: tool events carry call (the tool_use_id) and, when seeded, outcome; tool_outcome carries call; both toolUseResult and tool_use_result are read; Grep content mode counts hits. The peer-message frame is stripped for the prompt draft and the list treats a peer-origin row as the turn’s query. COS_CONTINUE_LIVE belongs in ~/.cos-glasses/.env; Control’s allowlist does not carry it through 0.5.237.
Server 6.49.0
The turn route tries the running session first: it writes the prompt to the inbox socket Claude Code publishes per process (~/.claude/sessions/<pid>.json, the two-line format its help text documents), pinned to the full session id, and verifies acceptance from the transcript’s queue-operation row before answering via: live. A COS-spawned resume child sharing the id is never the target. Unverified frames hold the turn as live_unverified (retryable) for up to 60 s before the resume child runs. Each tool result on the session stream now emits a status draft with tool_outcome, derived from the result’s shape, never its content; clients that predate it take the frame as a no-op.
Server 6.48.2
The attach route reads a session’s working directory from the head of its transcript. It read a fixed 512 KiB; a first prompt with three pasted screenshots is one row of about 1 MB, so the window held only bookkeeping rows and every Continue and Fork on that session was refused as unresolvable. The read now widens up to 16 MiB while the window keeps ending inside a row with no directory seen, and the first recorded directory is the workspace: a shell that moved into a subfolder inside a turn used to count as a disagreement and refuse. On the release Mac 738 of 758 transcripts resolve; the rest are scratch sessions whose temporary directory no longer exists.
Glasses 6.9.481 and 6.9.482
The home screen leaves the hold-to-talk allowlist: a hold there refuses with Hold off here. Tap: messages once per visit, and tap opens the latest message. The session id leaves the lens status line by default; its slot reads the gesture hints instead, Tap: actions · Hold: ask when Glasses dictation is set to hold and Tap: actions otherwise, the same words a session page shows, fitted to the line so the battery never leaves the right edge. Settings, System, Session ID brings the id back and survives a close.
Server 6.48.1
The end of a Claude turn is the engine’s own: the Stop hook followed by the process registry flipping idle at or after it, which happens only when every Stop hook has returned; a prompt typed during the hooks is queued by Claude and dequeues first. The follow-up queue drains on that signal through one in-flight guard shared with the 20 second sweep, so a burst of turn ends folds into one pass and nothing is delivered twice; the attach gate reads the same signal, so a Desktop session whose turn just ended accepts a Continue at once. Where the hooks did not see a session, the transcript decides: a terminal stop reason with no tool awaiting its result, read from a 512 KiB tail so a large bookkeeping row after the reply cannot hide it, and positive evidence that a turn is open holds ahead of the idle backstop. Every status line on the session stream carries agent_state, its source and time, the waiting kind and detail, and on an idle state the last reply; a change of state is a line of its own; a COS Continue outranks the hooks while it writes. Each streamed session keeps a ring of its last 500 events with a cursor and the server’s epoch, so a reconnect with ?after= replays what it missed and seeds afresh when there is nothing to replay. Session rows and peers carry queued_turns; run listings carry the registry’s entrypoint and remember it across a restart. COS_SESSION_HOOK_SSE=0 omits the extra stream fields.
Server 6.48.0
A POSIX sh hook script writes one file per Claude Code event into ~/.cos-glasses/data/hook-spool and exits 0 on every path; it never talks to the server except for a permission request after the desk has been idle, which on this release is refused and shows the native dialog as before. The server drains the spool, keeps a projected ledger, and reduces the events into one record per session: hook events win, the process registry answers next, the transcript last, and a dead registry pid on two scans five seconds apart ends the row. Fifteen subscriptions are merged into the user-level ~/.claude/settings.json with every foreign hook block and key preserved, a backup of the file, and an atomic write; the same install and uninstall are on the API for COS Control. /api/health gains sessionHooks. Off with COS_SESSION_HOOKS=0, which still drains the spool and leaves every row as 6.47.0 wrote it.
Glasses 6.9.475 to 6.9.480
Hold to talk is scoped to an explicit list of pages (6.9.475), so a hold on a thread or a list can never start a recording by accident. A hold on a meeting, thread, memory or session detail picks that record up and records in one motion, after a 300 ms gate that ignores a brush (6.9.476). The recorder header and footer say Ask COS or Continue for the whole recording, and Cancel returns to the list you came from (6.9.477 and 6.9.478). Every meeting start logs which capture path it took and why (6.9.479). The Live meeting ASR setting no longer offers the iPhone WhisperKit beta; it never transcribed on the phone and took every meeting off the live preview lane, and a stored beta value heals itself on the first open (6.9.480). Requires server 6.45.3.
Server 6.47.0
Fireflies imports arrive through the API only, never from the desktop app’s files, with a 7, 30 or 90 day backfill that resumes across the plan’s daily limit, a 6 hour poll that uses at most half of a day’s budget, and a ledger that reconciles what the vendor listed against what was written. The merge engine runs on a worker thread: it pairs on shared unique three-word phrases at a consistent time offset, refuses a pairing whose clocks disagree by more than 15 minutes, collapses duplicate recordings of one meeting, and groups every G2 recording of a meeting into one merged record. No language model is involved in import, pairing, alignment, splitting or merging. Lists, detail, search, day counts and speaker review understand imported and merged records; both are read only for speaker mutations and neither trains a voice profile. On a Mac with the COS pipeline the mode starts at advise and is switched in COS Control. The contract is in docs/meeting-merge-contract.md.
Control 0.5.231
Thread detail shows every section the server sends for a thread: its note, target date, topics, stakeholders, meetings, milestones and sources. Copy as Context copies all of it. Through 0.5.230 the pane showed only the first note. The server sends up to 30 sources and 30 milestones per thread.
Control 0.5.230
An Import meetings card holds the Fireflies key, the backfill window, keep importing, and a line for every import state, including one that says to update the COS server to 6.47.0 when the routes are missing. Suggested merges lists both meetings with their start, length and source and how many phrases they share, with Merge or Not the same meeting; on a pipeline Mac in advise mode it lists what would merge automatically and keeps your answers. A merged meeting offers Undo and a split piece offers Revert, each showing the preview first, and a failed action offers Retry and Copy diagnostics. An engine status row shows the mode, the first run’s progress and counts, and the last run.
Glasses 6.9.474
Ref is the third row of the reader’s footer menu on today’s messages, behind Messages and Reply. Choosing it attaches the message you are reading to your next spoken prompt, and the recorder shows that message’s number. On Message History one tap opens Chats, Ref and View image starting on Chats and a second tap selects, so the footer hint reads Tap: actions and a photo needs the second tap. A refusal names its reason: no message on screen, a row with no number, a reply that never finished, a message past the durable query caps, or something already attached. Imported and merged meetings from server 6.47.0 are understood as meeting sources. Gestures are otherwise unchanged since 6.9.458.
Server 6.46.1
On a multi-folder library (COS_OPERATIONS_DIR), GET /api/meetings lists the server’s own G2 recordings with their months and day counts when no COS pipeline can file them: no COS_SCRIPTS_DIR, or no venv Python or sync_meetings.py in it. An operations copy with the same session id wins and is counted once. With a working pipeline the response is unchanged.
Control 0.5.229
Claude runs that COS starts itself read as scheduled jobs in the Session Pet and Sessions, named by walking the process tree to the COS LaunchAgent that started them: Meeting watcher, COS server, or From a Claude session. One finished row per job on the pet with today's run count, a Scheduled jobs today list in Sessions, and job facts in place of a transcript. Meeting audio alert logs are readable with log show --predicate 'subsystem == "com.gotcos.control"'.
Control 0.5.228
The meeting audio alert needs a phone heartbeat that arrived at least 30 seconds after the last audio chunk, counts a heartbeat as recent for 3 minutes as the server does, and reads a growing phone upload queue as Phone catching up rather than a drop. Pause notices name a storage limit or a storage error, the notification leaves Notification Center when audio returns, and during a live meeting the panel shows when macOS is not showing COS Control's alerts. Replayed over the 29 meetings with heartbeats from 2026-09-10 to 09-14: 3 notifications, down from 17.
Control 0.5.227
A Meeting audio row and a macOS notification when a live meeting has received no audio chunk for 60 seconds while the phone's newest heartbeat (under 90 seconds old) says it is recording with the microphone on. One notification per drop. It reads the glasses data folder, so it needs no server change. On 2026-09-14 two phone locks stopped meeting audio for 8 and 9 minutes while the Mac kept receiving heartbeats.
Control 0.5.226
The Session Pet and the Sessions tab name each Claude session with its Claude Desktop tab title, read from the transcript and the Desktop session index. The pet showed a derived name such as mu-chief-staff-bc for sessions started after Sessions last refreshed, and Sessions showed the first prompt for newer sessions. An idle pet row without a summary says idle instead of working.
Control 0.5.225
The Session Pet reads each live Claude session from its transcript’s newest user or assistant message, the timestamp rule the server uses for the phone’s Sessions list, so it tracks work without Activity open. A finished or interrupted turn reads idle at once. A running tool call or subagent reads working. A pending question or plan approval reads waiting, and so does a turn with no new record for fifteen minutes, which is usually a permission prompt. Local commands and bookkeeping writes do not read as work. A session that appeared after Activity last refreshed no longer counts a false finish, and Activity’s Sessions list reads the same records.
Control 0.5.223 · server 6.46.0
Samples to review gives each loose sample its own row and can suggest an existing voice with a score. Name and Add to a person open a preview before Apply. It lists the samples, each meeting’s label changes and wider matches, and any listening or owner acknowledgment needed. Apply refuses a changed meeting and reports each sample and copy. Undo restores this batch’s labels while keeping enrolled voice samples and deleted audio deleted. An interrupted naming remains available to resume from a fresh preview or revert explicitly.
Glasses 6.9.473
While a meeting records with the microphone on and capture not paused, the phone checks when the last audio frame arrived. After 12 seconds with none it asks the Even bridge one read-only question with a 3 second limit, locked or not, and logs the answer with the glasses connection state. On 6.9.472 a lock that stopped meeting audio was logged only as a stalled lens and transcript for 8 to 9 minutes.
Glasses 6.9.472
Tiny reads ready only after it transcribes a bundled test clip on the phone, and a readiness failure says why instead of Download failed. A meeting chunk counts as saved only when the phone store confirms it. Held audio is capped, and capture pauses before the cap. A foreground return seals the audio received before it. Stop runs once at a time, retries the same audio, gives it up with a report only after repeated refusals, and ends with the microphone off. A start the phone store cannot admit is refused instead of recording upload-first.
Glasses 6.9.471
Views, Sessions on the phone: a session’s detail ends with Continue, Fork and Ask COS, with the lens’s labels, order and enabled state. Lists scroll vertically only and wrap long tokens; summaries read as plain text. The phone passes its own target, so it cannot capture a question spoken on the glasses. Continue needs server 6.29.0 or newer with thread attach on (default since 6.37.0).
Glasses 6.9.470 · server 6.45.5
Views, Sessions on the phone says what each session is doing: Working now, Open, Status unknown, or Idle, with its last activity and, while it is held, its last tool. Tapping a session opens a live detail that refreshes while it is open. Server 6.45.5 reads the last activity and the last tool from the transcript itself, so a Claude Desktop relaunch no longer reads as work.
Control 0.5.222 · server 6.45.4
Speakers has three views: Meetings to review, Samples to review, and Voices. Voices lists every enrolled speaker with their sample count and confidence: the share of their scored speech the server matched confidently, with the average match under it. While naming a held voice, Control says whether the name adds to an existing person or creates a new voice. Samples to review is the Add a voice card on its own. Before this release the card sat above the voice list, hid it, and pushed the toolbar and breadcrumbs off the window.
Control 0.5.221 · server 6.45.4
Add a voice uses the COS theme in light and dark. The blue system links are gone: Name this voice and Add to a person are quiet chips, a high-confidence Add, Save, and Confirm use the gold primary button, and Discard becomes a red chip only when it asks you to confirm. Listen is a round play button with previous and next around a sample counter. How voices are grouped, suggested, and named does not change.
Control 0.5.220 · server 6.45.4
Naming a held voice is turned off when the Mac has no speaker model: Add a voice says the model is not loaded and keeps Listen and Discard. In 0.5.219, Name and Add to a person stayed on, and every click was refused by the server with nothing changed. With the model loaded, nothing changes.
Control 0.5.219 · server 6.45.4
Add a voice lists voices, not sessions: held samples grouped by who they sound like across meetings, with a suggested name where an enrolled profile vouches for the group, Add to that person, and Discard for the loose samples that match no voice. Server 6.45.4 also ends a dictated prompt where you stopped talking: a closing sentence the decoder invented, such as "Thanks for watching", is dropped, and a real one is kept.
Control 0.5.218 · server 6.45.3
Listen to a held voice before naming it from Add a voice. Server 6.45.3: Recent is a rolling window of the newest 30 turns, the archive is filed at every day rollover, the skills list comes live from the Mac, and held voices can be played by chunk.
Control 0.5.210 · server 6.45.1
Ask the graph shows elapsed status. Graph rail labels stay readable. Meeting sync names library save and live recording instead of Idle, and Update/Restart stay blocked until that work finishes.
Control 0.5.209 · server 6.45.1
Fixes blocked internal command output so a healthy managed server is correctly recognized and can be updated.
Control 0.5.208 · server 6.45.1
Native appearance in Memories, Ask the graph first, a preloaded overview, optional advanced controls, editable owner identity, and accurate retained-capture states without duplicate Save actions.
Control 0.5.207 · server 6.45.0
Versioned memory review, multi-hop investigations, identity separation and explicit fork transcript mapping. Optional owner-local runtime; no claim of observed long-term error reduction.
Control 0.5.206
The Speakers empty state names the meetings it cannot review and why: how many came from Fireflies or another source, and any G2 recording saved without its speaker sidecar, by title and date.
Control 0.5.191 to 0.5.205
The Memories tab: recent learning, a review queue, and the knowledge graph explorer on your own data. Set up Knowledge from zero (sources, owner, sample, embedding choice, extraction tier, schedule), Index now with live progress, ask the graph in plain language with entity cards, accept or prune a memory, guardrails that prune nonsense for you, and Merge from the Manage sheet with the owner Mac’s preview plus a Possible duplicates list that only proposes.
Control 0.5.189
Every open task shows, not only what is due. Domains come from your server, not a list baked into the app. Run now from a seventh Activity pane.
Control 0.5.185
Morning brief card: sources, order, windows, time, and days. ROUTINE or TASK label on Activity rows and detail lines, with the model that answered.
Glasses 6.9.456
The local-first meeting store reads the real IndexedDB error, retries briefly and logs each recovery, times out a stuck transaction instead of hanging Stop, prunes confirmed chunks during the meeting, renews the upload lease, and keeps every chunk through a lost connection until it can save without gaps.
Glasses 6.9.454 and 6.9.455
The board is reachable on the glasses; the task action menu wraps at both ends.
Glasses 6.9.453
The WORK board is writable: tap a task for Ask COS, Done, Today, To inbox, Unschedule, Reopen, or Open run. Ask COS starts a restricted session for that task on the same durable path as the morning brief.
Glasses 6.9.450
ROUTINES reads the routine ledger, so an enabled brief shows its schedule, last fire, and next fire.
Glasses 6.9.449
WORK becomes a full board: Inbox, Today, Scheduled, Running, and Done lanes with live counts and visible empty lanes.
Glasses 6.9.448
TASKS page on the lens, WORK tab on the phone, Tasks on the hold menu.
Glasses 6.9.447
Origin label as a chip on the phone and a star mark on the lens. A G2 stamp survives a reload. Settings → AI → Morning brief shows what is behind each source.
Glasses 6.9.443 to 6.9.446
A run the Mac started shows as a running row with a live job log. A reply this phone did not ask for shows once under one number. A brief that lands while COS is open appears without a relaunch; one that lands while COS is closed shows on the splash as #NNN Morning brief. Inbox splash and display-stream ticket hardening.
Server 6.44.16
A G2 recording keeps its session id when its sidecar lives only in the server’s recordings folder.
Server 6.44.15
A voice profile named after a spoken sentence is renamed at load with its training kept and flagged for rename.
Server 6.44.5 to 6.44.14
The learning, knowledge and curation routes behind COS Control’s Memories tab: review decisions, graph status, search, entity, passages, index build, bounded ingest with progress, the Knowledge setup path, embedding and extraction choices, memory review and guardrails, ask the graph, and merge with a preview, a worker and a receipt.
Server 6.44.4
Every job carries an origin label on its exchange, the display bus, and the today and archive views. Request fingerprints are pinned to sixteen identity keys, so journals hydrate across the upgrade and back. Task titles strip Markdown and cut on a word boundary.
Server 6.43.0 to 6.43.4
Scheduled morning brief (6.43.0). Per-source coverage and section outcomes on GET /api/morning-brief (6.43.1). Update proof returns a failure code, a vendor limit is provider_quota, and Cursor is a proof provider (6.43.3). Origin stamps at submission (6.43.4).

Full notes: the server changelog and the COS Control changelog on GitHub.

2A. COS Control for Mac

The server, without the terminal babysitting.

COS Control is a native menu bar companion for the same public npm server. It starts COS at login, keeps one server owner, shows which Whisper model is doing what, and runs updates, restarts, and rollbacks that prove themselves first. Read the chapters on the right; the panel shows each one.

Desktop session tabs and pet controls are covered on the COS Control page. For the glasses footer, see Sessions on the lens.

See what is actually running, not what you hope is running.

See what is actually running.

One panel. One server owner.

  • Starts COS at login and holds the managed LaunchAgent. Control refuses to replace a process it does not recognize, so the port never has two owners.
  • Reports the real agent CLI versions and the effective transcription tier, with the Whisper model behind each stage.
  • Run Doctor is one coordinated check. Restart Safely waits for meetings and jobs to finish.
  • Your existing ~/.cos-glasses configuration, recordings, meetings, messages, and token stay compatible.

Updates prove themselves before they switch.

Staged, proven, then live.

  • The refresh button at the top right refreshes status and checks for updates. The line under Control reports Checking for updates, Up to date or Couldn’t check for updates; an available release opens What’s New.
  • An update stages a complete new generation, runs one real query on each installed provider (Claude, Codex, and Cursor when its agent is present), and only then commits. A vendor session limit is recorded as a skip, not a rollback.
  • A short notice at the top of the panel says when a new capability lands, whether or not an update is waiting. Dismiss it once and it stays gone.
  • Restart and update are blocked while a meeting or job is active. Rollback is verified the same way.

Your morning brief waits in the inbox.

Scheduled inside the server. Delivered as a message.

  • Weekdays at 07:00 in your Mac’s timezone by default: calendar, decisions and deadlines from recent meetings, tasks due this week, and what is waiting on you. It lands in Messages as an ordinary numbered reply.
  • Turn on more sources (knowledge graph, reflection, health, an opening reading, a metrics pulse, or your own skill such as /good-morning), reorder them, and set their windows from the Morning brief card.
  • Run now fires one immediately, capped at five a day. A Mac asleep at the slot still fires within three hours. Nothing runs while Background jobs are off.
  • The card shows what is behind each source and why the last brief failed, on its own line. The brief is read-only by contract.

Every message says where it came from.

A stamp, never a guess.

  • A run the Mac started is stamped at submission: ROUTINE for the scheduled brief, TASK for agent tasks.
  • Activity → Messages shows the label on the row and on the detail line, with the model that answered and the routine or task named in the hover.
  • The glasses show the same label as a chip on the phone and a star after the number on the lens. Rows from a server before 6.43.4 carry no label, and nothing is inferred from a bare row.

Work with a finish line.

The task, its source, and the session doing it.

  • Activity → Work keeps your existing tasks and groups them by domain across Mentioned, Planned, Draft, Built, QA, and Complete. Scheduling and session activity remain separate from the work stage.
  • Board shows the sessions working on the board above it; Focus opens one item with its Agent workspace pinned beside it. Dragging a card onto Start work asks where it goes before anything is sent.
  • Each task carries a Done when line. Run now is refused until the task says what finished looks like.
  • Domains come from the COS you actually run, not a list baked into the app. Glasses 6.9.556 and later, with server 6.56.0, show Work on the phone and the lens; the older 6.9.538 build kept the Tasks view.
  • Since Control 0.5.252 the glasses can start work here too: Start work, Reply by voice and Not done yet arrive as requests through server 6.59.0, and Control checks each against the task again and sends it through the same guards as the Agent workspace. A New session started from the glasses stays in the background so the glasses can keep replying.

Meetings, previews, and replay.

Fast text first. The canonical record wins.

  • Balanced or Max decides which Whisper model previews while you dictate, commits the live meeting, and polishes on save. The panel names all three.
  • Fast meeting preview shows Turbo text before the speaker-attributed Large-v3 chunk lands and replaces it. On by default; Control owns the machine-wide switch.
  • Adaptive replay is a default-off canary. Play may build a cleaned copy for review; the raw WAV stays authoritative and one click away.
  • Meetings Library points Control at the folder you already use, months of YYYY-MM/*.md. COS browses it in place and never moves or rewrites a file. Activity → Meetings adds a day calendar, transcript, summary, and keyword plus meaning search.
  • Since Control 0.5.232 a meeting, a thread, a memory and a Claude reply read as documents: headings, the metadata table, lists, task items, code, and the transcript as a disclosure that names its speakers. Copy as context is the one filled button on the pane and takes ⌘C; every copy still copies the stored Markdown.
  • Since Control 0.5.234 meeting times read 1:02 PM in Meetings and in Speakers’ Meetings to review. The 24-hour clock is under Settings, Advanced, Clock. The server still sends 24-hour times; only the drawing changes.
  • Since Control 0.5.282, Live COS Ask sits beside the live transcript: presets, your own questions, files and screenshots shared in the meeting, and the Meeting assistant model under the Ask box or in Settings. Every question and answer is saved with the meeting. On a meeting the filled button is now Copy full context (⌘C on a saved meeting), which adds the answers, their sources and file text to the transcript. Needs server 6.69.0 or newer.

Sessions, memory, and the archive.

The threads on this Mac, readable and writable.

  • Activity → Sessions lists Claude, Codex, and Cursor chats from the last 7 days, plus pinned ones at any age. Click a row to read the transcript; type under it and the reply lands in the real thread.
  • A thread that is mid-turn queues your message and delivers it the moment the engine closes its turn (server 6.48.1 and later, Control 0.5.234 and later, in the pane and in the pet); earlier Controls refused and offered Retry or Fork with this message, which remain for what the queue will not take. Since Control 0.5.235 the queue is listed under the composer with each message’s place and text (the full text for a message this Mac queued, the server’s 80-character preview for one the glasses or the phone queued), with Edit and Cancel while it is waiting (since 0.5.236, Send reads Replace while editing); a message the session already holds cannot be recalled and Control says so. Cursor sessions accept messages but do not queue or fork.
  • With server 6.48.0 and later, Control 0.5.232 reads the state Claude Code reports itself: a permission prompt reads Waiting with its command the second it appears, a question or plan approval reads Waiting with its kind, a rate limit reads Failed, and a queued follow-up is counted on the row.
  • Since Control 0.5.233 an open session shows a live Activity block above its turns: the state with a clock, the prompt, the last eight tool lines (Read, Edited, Ran, Searched, Delegated), a missed N chip when frames were lost and a queued chip while a follow-up waits. It streams from server 6.48.1 and later; against an older server the block says so and the stored turns stand.
  • Recent / Archive lists every stored day and searches months of history by text. It is a real scan on your server, not a filter.
  • COS Data connects Memory and Threads through the authenticated bridge and never creates, moves, or rewrites your stored data. A message carrying video, photos, or files says so before you open it.

The session pet is the live map.

Running, waiting, done, at a glance.

  • Running and Waiting sessions stay on the desktop as a figure when Activity is closed. The ledger under it turns amber for waiting (a permission prompt, a question, or since Control 0.5.232 a failed turn), green for running, and gold for finished work.
  • Open in platform jumps to Cursor, Claude Desktop, or ChatGPT. Choose a bundled character, a gallery pet, or your own sprites.
  • Since Control 0.5.234 a live row also carries a paperplane: a card names the session, Return sends into the real thread over the routes the glasses use. A running Claude session takes it into its own window; a Codex or Cursor session, or any session mid-turn, queues it and it lands when the turn ends. The card says which, then closes itself; a refusal keeps your text and opens the session view. Typing in the pet never brings Control forward. Since Control 0.5.235 the card lists what is queued behind the session, with its place and its text, and an × cancels a message that is still waiting. Since 0.5.236 a tap opens a row to the whole message and Edit puts it in the field: Return replaces it (a cancel and a new park, so with several waiting it goes to the back of the line and the card says so), Escape keeps it as it was; a message the session already took cannot be replaced and stays in the field to send fresh.
  • Sprite packs, sizes, speeds, and the Accessibility grant are covered on the COS Control page.
Version notes for this section
Control 0.5.206 · server 6.44.16
Speakers names the meetings it cannot review and why. A recording’s session id survives when its sidecar lives only in the recordings folder.
Control 0.5.189
Every open task shows, not only what is due. Domains come from server 6.44.4. Run now from a seventh Activity pane.
Control 0.5.185 · server 6.43.4
Morning brief card with sources, order, windows, time, and days. ROUTINE or TASK label on Activity rows and detail lines, with the model that answered.
Server 6.43.0 to 6.43.3
Scheduled start-of-day brief. Per-source coverage on the card. Update proof returns a failure code; a vendor limit is provider_quota; Cursor is a proof provider.
Control 0.5.107
Signed with a stable identity, so the macOS Accessibility grant survives updates. If a session jump cannot use Accessibility, the pet opens that Settings pane and says the fix.
Control 0.5.87 to 0.5.154
Desktop session pet: live states, Open in platform, custom sprites, character size and speed, bundled Jedi with idle, walk, and combat animations. Exact-stock packs upgrade automatically; custom art stays intact.
Control 0.5.85
Rich media in messages: a type mark on the icon, a row badge with a count, a poster frame for video, and a hand-off to QuickTime or Preview.
Control 0.5.75 and 0.5.76
Text composer under every session detail, gated by the Continue agent threads toggle. Busy threads offer Retry or Fork with this message.
Control 0.5.73 and 0.5.74 · server 6.39.0 to 6.40.1
Ollama as a fourth model family, loopback only, with read-only COS tools when the pulled tag advertises tool support. Control keeps COS_OLLAMA_MODEL and COS_OLLAMA_HOST across updates and shows an Ollama row in About. Setup steps live under Models.
Control 0.5.72 · server 6.38.0 and 6.38.1
Recent / Archive switch with text search across stored days. 6.38.1 dedupes the daily archive in place; one install held 1.2 GB that was 99% duplicates. A bundled repair tool, npx tsx server/scripts/repair-archive-duplicates.ts, is dry-run by default.
Control 0.5.67 and 0.5.71
Check for updates in the panel footer. Short publisher notices at the top of the panel.
Control 0.5.41 · server 6.27.6
Meetings Library and COS Data folder pickers. Control verifies the bridge, the workspace Python environment, and the authenticated server response before saving. Lookup Recency sorts Newest, Oldest, or Best match across Meetings, Memories, Threads, and Sessions.
Control 0.5.11 · server 6.21.32
Adaptive review audio, default off. Cleanup never enters live capture, transcription, speaker attribution, save, HQ polish, or meeting sync.
Server 6.21.22 · app 6.8.315
Fast meeting preview on by default. Introduced default-off in 6.21.7.

Full notes: the COS Control changelog and the server changelog on GitHub.

Migrating from Terminal? Stop the foreground server with Control-C first. Then install COS Control and run Guided Setup. You can return to the npx command later without converting your data.

2B. Sessions on the lens

One thread. Home within reach. A rolling footer.

Open Sessions from Quick Actions or the hold menu, then tap a thread. Keep its context in view while the ring moves through Back to list, Queue, Continue, Fork, Ask COS, and Home. The last row is not the end: another downward scroll takes 6 of 6 back to 1 of 6 in this idle example.

On the phone. Views, Sessions shows the same list and says what each session is doing: Working now, Open, Status unknown, or Idle, with its last activity and, while it is held, its last tool. Tap a session for a live detail that refreshes while it is open, with or without glasses. Last activity and the last tool need server 6.45.5. Since glasses 6.9.471 a session’s detail ends with Continue, Fork and Ask COS, the same actions as the lens footer.

Clock, saved copies, no Mac. A running session shows how long its current turn has run in the footer, for example 7/7 · 12m 04s, when Claude Code hooks are installed (glasses 6.9.536). The last eight sessions you opened are saved on the phone and open without the Mac, marked Saved 14m until the Mac answers (6.9.537). With no Mac set up, Sessions says Needs your Mac instead of reporting an error (6.9.538). With 6.9.539, a sideload, the list opens at once from the phone and a row shows ? until the Mac confirms whether it is working.

The session owns its model. In 587 the header and footer name Claude, Codex or Cursor for the open session. The Messages model applies to Messages. Continue resumes through the session's own platform and settings. Expanded detail shows the last reported model only when supplied; server 6.61.6 may say Model: not reported by this session. A historical model is not a guarantee of the next turn.

Read first. Act from the footer.

Open Sessions from Quick Actions and tap a row to read it. From the detail page, a single tap opens the action menu: the short list of things COS can do with that thread. It arrived in its current home in 6.8.364, when Continue and Fork moved off the list row and into the session itself, so you read the context before deciding to write into it.

Two taps, never one. The first tap opens the menu. The second tap selects the highlighted row. This guards against occasional phantom ring touches. Continue and Fork open dictation; a real model turn starts only after you finish, review, and send that prompt.

Sessions: one footer, a rolling menu.

Tap to open, scroll through Back to list, Queue, Continue, Fork, Ask COS, and Home, then tap to confirm. Scroll past the last row and the cursor returns to the first; scrolling up from the first returns to the last.

The body stays at its reading position. Menu input resets a three-second timeout; waiting dismisses the footer actions. Double-tap instead asks for confirmation to leave for Quick Actions. The hold menu is a separate window above the page.

GestureWhat happens
TapOpen the menu. Tap again to run the highlighted row.
↑ ↓Move the ▶ cursor. The list wraps, so scrolling past Home returns to Back to list instead of dead-ending.
Double-tapLeave for Quick Actions, behind a confirmation. The footer reads Double-tap again for Quick Actions and you have three seconds. An open menu closes on the way out.
WaitThe menu retires itself after three seconds of no input and the normal footer returns.
HoldWith Glasses dictation set to hold (see the switch at the top of the page): press and hold on the session to act on it in one motion.Press and hold on the session to act on it in one motion, let go to review. On a Claude session the hold is Continue: the footer reads Tap: actions Hold: continue, the recorder says Continue, and if the session is busy your words are queued and land when it goes idle (glasses 6.9.486 and later). A Codex session continues the same way since 6.9.511, and a Cursor session since 6.10.620; to ask COS about a session instead, tap and pick Ask COS. A 300 ms gate ignores a brush.

The cursor opens on Back to list, the one row that cannot change anything, so a phantom double touch lands somewhere harmless. Queue is one downward scroll away and Continue is two. Home is last; one upward scroll from Back to list wraps directly to it. Selecting Home leaves a running job active.

RowWhat it does
Back to listReturn to Sessions. Nothing is written, and it is always present, so the menu can never trap you.
HomeReturn Home while the session keeps running.
QueueRead the waiting messages behind this session, including those Codex already accepted into its own queue. Available before the Continue check finishes.
ContinueAttach to the original thread and start recording a turn. Selecting it only opens the microphone. Nothing enters the conversation until you send, which is its own confirmed step.
ForkRecord against a copy of the thread and leave the original untouched. This is what every refusal points you to.
Ask COSAsk a question about the session without writing into it at all.

When Continue is unavailable

COS asks the server whether the thread is free before it offers to write into it, and it fails closed. Anything short of a clear yes disables Continue rather than guessing: a check that has not run yet, a reply it cannot read, or another process already holding the thread. The footer marks Continue as unavailable. Selecting it shows the reason in the footer without replacing the reader body.

The refusal is spelled out in the footer rather than implied by a greyed word. If the thread is merely busy rather than refused, the row instead reads Continue (queue): COS takes the dictation now and sends it when the thread frees.

The menu only appears for a session whose provider COS has a write path for, which today means Claude, Codex, and Cursor. Any other provider leaves the page exactly as it reads, with no menu at all, rather than offering an action that cannot run.

After a queued turn is delivered. Build 587 refreshes its receipt on the normal poll. The temporary queued page clears, exposing the conversation. You do not need to open Queue or restart the app. A delivery receipt says the thread received the turn, not that its response is finished. Missing or unreadable receipts remain pending.

The queue behind a session

On the Sessions list, a row with waiting messages leads with 2q. Double-tap the row to open its queue, or open the session, tap for actions, and choose Queue. Since glasses 6.10.577 with server 6.61.6, this includes messages still waiting in Codex after COS hands them off. A ?q marker means the native count could not be read; it does not mean empty. A failed queue read shows unavailable. The queue lists messages in order, with Next, 2nd and 3rd, and keeps refused or expired COS rows briefly for inspection. Plain-text waiting messages read whole even after reconnect or loss of the glasses' local copy. Native messages with attachments or structured content remain managed in Codex. Double-tap on the queue opens its session. The queue footer reads n/N · Tap=options · Dbl-tap=session · ▲▲=Sessions. An empty queue reads Nothing queued. Dbl-tap opens the session.

RowWhat it does
BackCloses the menu. The cursor opens here, so a phantom double touch changes nothing.
ReadOpens the message on a reader page that scrolls with the ring; scroll up twice at the top to return to the queue.
EditOpens the whole plain-text waiting message in the prompt reviewer. Cancel leaves it untouched. Send original with unchanged text keeps its position. Since glasses 6.10.577 and server 6.61.6, Send revised updates the same queue slot in place. It does not cancel and resend or move the message to the back. If the message starts, disappears, or the update cannot be confirmed, COS keeps your draft and says the edit was not confirmed. Structured native messages are not editable here. An older server needs updating for in-place edits.
CancelAsks the server and repeats its answer: Cancelled. It will not be sent., or Too late: the session has it. A row the engine is already delivering cannot be recalled and says so.

Same rules as every footer menu: one tap opens it on Back, the ring moves the cursor and wraps at both ends, a second tap selects. Scroll up twice at the top of the queue (or down twice at the bottom) to return to Sessions on the row you came from. Queue availability follows the provider and connected server. A server older than 6.48.1 has no queue route and the page says to update it; native Codex queue management and in-place edits need 6.61.6.

3. Ask anything

Voice in. Context out.

From Home, one tap opens your latest answer. Scroll up for the Messages list, tap ● Record Message, and talk.

Answers scroll natively inside the bordered body. The navigation and footer stay in place. Long replies are split into reader chunks: Pg 1/2 identifies the chunk, not the visible screenful. At a chunk boundary, the next scroll advances it. The footer keeps the model, message number, chunk count, session reference, message age, and battery.

◈ Msg [O] #411 Pg 1/1 9:16a 9/4/26 82%
? What changed for the design review? ───── → The design review moved to 10:00. Bring the revised control states and the mobile navigation pass. The open decision is whether the setup path stays inside Docs or moves into the guided wizard. Dana owns the navigation review. Sam will confirm the final setup copy before the meeting.
The reader · scroll to read, tap for the footer menu

Reading controls

↑ ↓Scroll the message. The glasses handle it natively, so it feels like the firmware because it is.
TapOpens the footer menu: Messages | Reply. Tap again to confirm the highlighted choice; scroll to switch between them.
Double-tapReply straight away: dictate a voice follow-up to the open message.
Tap and holdOpen the context menu for model, meeting, Ask COS, and navigation shortcuts without first leaving the reader.
HoldWith Glasses dictation set to hold: press and hold to dictate about this message, let go to review (since 6.9.474). The status line says so: Tap: actions  Hold: ask. This is a bare long press; the menu gesture above is a tap, then a second press you keep holding.

The two-tap footer menu is deliberate. G2 firmware occasionally reports phantom ring taps, and the confirmation step means a stray tap never throws you out of a message.

Ask COS: start fresh or reply with context.

Use the hold shortcut to start a fresh prompt from wherever you are. Double-tap an open, idle message for a new prompt in the same session instead. Finish the recording, read the transcript, and confirm Send; a recording is not an automatic submission.

Tap, release, then press and hold to bring the shortcut window above the HUD. Select Ask COS. Tap once to finish recording and read the transcribed prompt. Tap=Send confirms it; scroll down from the final transcript page to open review choices instead. Double-tap during capture or review leaves the draft intact. During an active run, cancellation is two separate double-taps: arm, then confirm within three seconds. Waiting lets the confirmation expire.

4. Rich media

Show it. Share it. Ask from the lens.

Tap + to attach photos, text files, Markdown, CSV, JSON, PDFs, MP4, or MOV. COS keeps the source durable through upload and retry, then gives Claude Code, Codex, or Cursor bounded text and representative visual frames instead of a fragile temporary link.

Capture on the phone. Read the answer on the lens.

One attachment menu

Tap +, then choose Photo Library, Take Photo, Take Video, or Choose Files. Add an optional prompt, then tap Ask or Queue. Choosing media only stages it; nothing sends until you explicitly submit. The G2 has no camera, so capture is always on the phone.

Documents become useful context

Plain text, Markdown, CSV, and JSON remain bounded text. PDFs become bounded extracted text plus page previews, so the agent can reason over both the words and layout without receiving an unbounded document.

Videos become representative frames

Attach a clip from Photos or record one on the iPhone. The original MP4 or MOV is stored; the agent receives sampled stills, not a live stream. Large uploads use resumable 1 MiB chunks with two pieces in flight, a status line such as Uploading clip.mov 12/237 (5%), and resume from the server’s confirmed offset after a drop. Meeting audio keeps priority, with a 20-second cap so video is not starved. Settings → Recovery Center has Clear stranded video uploads for leftovers that have not received bytes for 60 seconds.

Keep useful answer images

Generated images, research images, and email images the agent explicitly used can follow the completed answer into its phone gallery. Turn on Lens images to open a private 288×144 grayscale preview on G2. COS does not crawl arbitrary URLs or scan your mailbox for pictures.

Durable and bounded. Attachments retain their retry, cancellation, and recovery state. Size and type are checked before processing; identifiers cross the message ledger instead of private filesystem paths. Nothing auto-paints over what you are reading, and lens images stay blocked during meetings or microphone-critical flows. Install ffmpeg on the server Mac for image and video processing: brew install ffmpeg.

5. The lens

Tap, double-tap, scroll, tap-and-hold, and, if you choose it, hold to talk.

Tap selects. Scroll moves a cursor or reads the body. Double-tap depends on the page. Tap and hold opens the SDK context menu for direct access to your model, meeting controls, Ask COS, and navigation. A bare hold is a different gesture: off by default, and with Settings, Voice, Glasses dictation set to hold it starts a message wherever one can start (glasses 6.9.474 and later). The footer changes with the active action.

Home

Shows the version, your latest message number and age, weather, and your next calendar event. Hint line: Tap=Latest  ↓ Menu  ↑ Messages. Before your first message the hint says what to do instead, Tap: say something, see it here with no Mac or Tap: ask your Mac, try "brief me" with one, and a tap starts a recording (glasses 6.9.538). Right after you connect a new Mac, home says Connected. Tap: ask, try "brief me" until your first question.

GestureWhat happens
TapOpen the latest message.
↓Open the Quick Actions menu.
↑Open the Messages list.
Double-tapAsk to exit COS. Home is exit-only by design, so you can always find your way out.
HoldNothing. Home is a reading screen; with Glasses dictation set to hold the footer says Hold off here. Tap: messages once (since 6.9.481).

Quick Actions

The main menu. Scroll moves the ▸ cursor, tap runs the highlighted item:

HomeBack to the idle screen.
Review MeetingsSummaries, topics, decisions, and action items from past recordings.
Start Meeting AIBegin a live-transcribed recording. While recording, this slot becomes Resume Meeting and Stop Meeting AI, and Quick Actions ends with Meeting Ask (6.10.623 and later).
MessagesThe live list of recent conversations.
Message HistoryThe full archive, back to day one.
ThreadsOngoing work with stable IDs, meetings, milestones, sources, and status. Double-tap a detail to attach its refreshed context to a new prompt.
MemoryRecent stored context with full-store type totals, summary, stable ID, and bounded detail. Double-tap a detail to attach its refreshed context to a new prompt.
SessionsClaude, Codex, and Cursor chats from this Mac. Updated and Opened look back 7 days. Pinned lists ChatGPT pins, Cursor sidebar pins, and Claude Desktop stars at any age. On 6.8.360, list rows and the first detail page show a DISCUSSION gist when the server sends discussion_summary. Opening a session gives you the action menu below.
NetworkConnection status.

Messages list

Rows read ▶ #4 09:14 what did we decide… with the newest activity on top.

TapOpen the highlighted message in the reader. Tapping ● Record Message at the top starts a new dictation.
↑ ↓Move through the list.
Double-tapReturn to Quick Actions. To start a new transcription here, select Record Message. Inside an open message, double-tap instead starts a new prompt in the same session.
HoldWith Glasses dictation set to hold: press and hold to start a new message, let go to review (since 6.9.474). A tap while you hold reads Tap again to finish; a second tap ends the recording (since 6.9.485).

Running, queued, and ✓ Done rows appear in this list while jobs work. Jobs covers those.

Messages: read, choose, then confirm.

Finish reading the body, tap to open the footer, scroll to a choice, then tap again to select. Those are two deliberate single taps separated by reading the menu, not the quick double-tap that starts a reply.

Messages and Reply lead the idle reader menu; Ref appears for numbered messages. Home follows all available actions. View image is conditional on an attachment, enabled lens preview, and no meeting-critical capture. Scrolling past the last row returns to Messages, and scrolling up from Messages reaches the last row. A tap can open the menu before you reach the bottom, too. Double-tap in an open, idle message starts the same prompt without opening the menu. After you finish recording, the transcript waits for review; nothing is sent until you confirm. Once a reply is running, double-tap to arm cancellation, then double-tap again within three seconds to cancel it.

Reader-menu wrapping ships in the glasses build after 6.9.455. Older builds stop at the last row; scroll upward to return.

Legacy Tasks: a cursor move is not a command.

This lesson covers the legacy Tasks view used with older servers. Current servers open Work with domain boards and progress. In Tasks, read the task and its finish line. Tap to open its actions, scroll to the row you want, and make a separate confirming tap. The safe first row is Back to list. Task and run state determine which other rows appear.

The example shows six choices for a ready Inbox task: Back to list, Ask COS, Done, Today, To active, and To review. Nothing runs when you simply highlight a row. The menu times out after three seconds without input.

Task-menu wrapping requires glasses 6.9.455 or later. On an older build, scroll upward from the last row to return. This lesson shows the newer interaction without changing the public release package listed above.

Same ring, different context: the quick reference
Where you areDouble-tap when idle
HomeRequest the system exit dialog, not a new recording.
Messages listGo to Quick Actions. Tap Record Message for a fresh transcription.
Open messageStart a reply in the same session. Say “reference message 411” first to attach that specific message as context.
Quick ActionsStart recording a new command.
Session detailAsk to leave; double-tap again within three seconds for Quick Actions.
Task detailGo to Quick Actions. Single tap owns the task action menu.
Voice promptProtect the draft. A double-tap does not send or discard it.

While a query is running, cancellation takes priority: double-tap to arm, then double-tap again to cancel. A watched job that explicitly says a reply is ready can instead open that reply. Image preview, saved meetings, memory, and threads also have context-specific actions. Read the active footer before repeating an input.

Meetings: the same path through history.

Scroll up for earlier speech, down toward live. Tap for actions, scroll to Home, then tap to select. Recording continues when you go Home.

The footer starts on Meetings, with Home last. Scroll up once from Meetings to wrap to Home. Nudges is available when Live Cues is on; otherwise choose Bookmark. The tap-then-hold side menu also puts Home first in its default COS order, followed by Resume Meeting and Stop Meeting. Custom arrangements are preserved.

Read the live HUD.

See what changes after Send, where your original ask lives, and how to get back to live. Examples use fictional content. Existing gesture lessons follow native formatters; the status examples use 587’s actual 24-pixel signal frames with shortened teaching copy. Motion is illustrative and never indicates a real job.

◈ Msg [O] Thinking 1s 9/4/26 82%
SENDING --- ask --- "Summarize the pilot thread."

Send opens the job page immediately. SENDING means the Mac has not acknowledged the prompt yet.

Illustrative screen, not an optical capture. Navigation, body and footer remain separate regions. Messages, Sessions and live Meetings put history above live: scroll up for older content and down for newer content. Tap opens footer actions; Home is last in the footer menu and first in the default side menu; it leaves recording or jobs active. Use the buttons to compare without an automatic slideshow.

6. Jobs

Watch it work.

Every prompt is a job that lives on your Mac. Watch it, queue it, or cancel it, and once it starts it keeps running even if you close the app. Nothing ever hijacks your screen.

Send takes you here immediately. You do not need a second tap to watch. Scroll up to the original ask and history; scroll down to the newest page. While reading history the footer counts how many scrolls return to live. Messages and Sessions keep their active clock and controls in this row instead of repeating battery. A long clock may shorten the hint to ▲ history + Ask.

◈ Msg [O] Thinking 66s 9/4/26 82%
00:00 ASK Summarize the pilot thread. 00:09 TOOL Searching web... 00:21 OUT 5 results · vendor pricing 00:34 TOOL Reading page... 01:05 LIVE The pilot is on track. Two 01:06 LIVE items need a decision…
Optional Raw log · newest seven lines, scroll back anytime

Queue, watch, cancel

Ask while a reply is streaming and the new prompt queues: up to five wait in line, first in, first out. Rows in Messages show the state as … Queued 1/2, Running · Searching web..., and ◆ Done #4 09:14 summarize the pilot.

Tap a running row to watch. The default Trail view shows the status, full reply and available steps. The optional Raw log view, illustrated here, uses mm:ss stamps and SENT, TOOL, OUT, LIVE, DONE tags. The lens shows the newest seven lines; scroll back through the last 80 events, all the way to the complete original request pinned at the top. If a reply finishes while you are watching, double-tap opens it before the two-step cancel gesture. Hidden phone-only or tool activity never shifts a history window you scrolled to by hand. LIVE lines are the answer being written. OUT lines are bounded, redacted tool output, shown only if you opt in under Settings.

The job lives on your Mac

The moment your Mac accepts a prompt, the job belongs to the server, not the phone connection. Closing or backgrounding Even Hub, losing Wi-Fi, or switching networks does not stop it. Reopen COS and it reattaches to the same job, replays the activity you missed, and delivers the finished reply. Only an explicit Cancel ends the work.

A send moves through Submitting, Accepted, Running. A dropped connection shows Reconnecting · job still running, never a false Failed. If the Mac server itself restarts, COS shows Interrupted · prompt preserved and offers a one-tap retry; it never silently reruns.

Catch up when you return

Updates while away reconstructs accepted, running, finished, and interrupted work from the server ledger after the app reopens. Resume always targets the original job and model settings, so a reconnect cannot create a silent duplicate.

Restored photo-and-message rows verify their attachments before they run. If a photo still needs to be recovered, the row waits and explains why; it never submits the text alone or loses the queued prompt.

CancelA deliberate two-step: double-tap arms it (Double-tap again to cancel, three-second window), a second double-tap cancels. Canceling pauses the queue; nothing auto-fires until you tap a queued row.
Close or disconnectNot the same as cancel. An Accepted job keeps running on your Mac; closing the app, losing Wi-Fi, or switching networks shows Reconnecting · job still running, then reattaches the moment you reopen. Only Cancel ends the work on purpose.
Done rowsFinished jobs leave a short ◆ Done #4 09:14 summary trail in Messages (the last three). Tap one to jump straight to the reply; the row retires itself after the jump.
No-yank ruleIf you are reading, browsing a list, or viewing a photo when a job finishes, the reply never steals the screen. You get a ✓ Reply #4 ready flash instead; double-tap when you want to open it. Only idle Home may open a finished reply automatically.
Edit a waiting promptTap a queued G2 row and it opens in the prompt reviewer instead of firing: read the full request, edit with undo, re-record, keep the original, or save it for now or next. Photos, references, and model choice are preserved, and abandoning the edit leaves the original queued row intact.
Empty replyIf a model finishes with no answer, the job does not become a blank Done. It stays a visible, retryable empty_response row with your original prompt intact, and a blank reply can never be armed as a reference.

7. Recall

Never lose an answer.

Every reply gets a stable short number in the current message era. Your full archive remains intact when a fresh era starts again at #1.

The Messages list keeps a recent window; the complete record lives in Message History. Numbers stay stable inside an era, so you can say “reference message 4” instead of repeating a prompt. A blank, incomplete, or no-longer-current reply cannot be armed as a reference; COS preserves the new prompt for a clean retry instead. If an operator starts a fresh era, old messages keep their original numbers in the dated archive while ordinary voice references resolve only within the new short list. No deletion, no collision.

8. Meetings

Record the room. Then talk to it.

Start Meeting AI from Quick Actions and the HUD becomes a live, speaker-labeled transcript with a single meeting-owned recording indicator. Audio is written to private phone storage first, so a network interruption does not become a lost meeting. A saved meeting is not a document you go back and skim. Double-tap a processed meeting and it opens as a conversation in Messages, grounded in the full transcript, and it keeps answering follow-ups.

Double-tap a saved meeting
Review Meetings
▸ Pilot scope · 41m
  Roadmap sync · 28m

Open Review Meetings and double-tap any idle, processed meeting.

Ask it anything, out loud
MEETING CONTEXT ATTACHED

“What did we actually commit to, and who owns it?”

Record a voice follow-up with that exact meeting attached as context.

It answers from the record
Two commitments. Maya owns the pilot ship date, Friday. Sam owns the data import, one day of work, and it is the only blocker.

Grounded in the full transcript, not a summary. Follow-ups keep the thread.

■■□□ REC 12:08 ★1 82%
[Maya] We can ship the pilot Friday. [Sam] The data import needs one day. [Maya] Then Friday holds. ~ I will check the final rollout notes
Live meeting HUD · fictional example
TapOpen footer actions: Meetings, then Nudges if Live Cues is on (otherwise Bookmark), then Catch me up, Summarize so far, Suggest questions, Action items and Recent answers (Meeting Ask, 6.10.623 and later), then Home. Scroll to choose and tap to confirm. Bookmark flashes ★ Bookmarked and stamps the elapsed time.
↑Read earlier transcript history. New speech continues recording while this page stays still.
↓Move toward newer transcript and live. The footer counts the remaining steps to live.
HomeTap for footer actions, scroll up once to Home, then tap. Or select Home in the tap-then-hold side menu. Recording continues; the REC indicator remains in navigation.

Stop Meeting AI ends the session. Review Meetings then holds the transcript, summary, topics, decisions, and action items, readable right on the glasses.

Connection dropped? Keep talking. Every audio chunk enters a local write-ahead log before upload. Each meeting is pinned to the Mac that admitted it, and raw audio receipt, transcription completion, and the final canonical transcript are tracked separately — so a silent stretch counts as complete without being mistaken for transcript text, and a delivered-but-not-yet-transcribed chunk stays retryable. When the server returns, COS reconciles those ledgers, sends only the ranges that are missing, and keeps the phone copy until the Mac has durably stored both the audio and its received-range record. A retryable server response never discards the local chunk.

Ask about the meeting while it runs

Tap the live transcript and pick a preset, or open Meeting Ask at the end of Quick Actions. COS answers from this meeting first and opens the MEETING ASK reader with up to 10 recent answers, each with its sources and the model that answered in the footer. An answer still running shows as running; open Recent answers again to read it. Ask on the lens never uses the microphone, and Meeting AI still only starts and stops recording. Type your own questions, read the full history and switch the model on the phone. Needs glasses 6.10.623 or newer and server 6.69.0 or newer. More on Meeting Ask.

Turn a saved meeting into a question

A saved meeting is also the starting point for a new question. Open it in Review Meetings and double-tap an idle meeting to record a voice follow-up with that exact meeting attached as context. A compact Meeting context attached indicator replaces the usual message-reference label, and the finished answer is stamped with the meeting so you can see what it was grounded in, both on the lens and in phone message review.

The grounding is the real record, not a summary. The paired server hands the Mac agent a bounded, UTF-8-safe copy of the canonical meeting so it can read the full transcript for decisions, outcomes, sentiment, details, or related topics. This needs server 6.12.7: an older server fails closed for this one action with a truthful update-server message, and COS never silently sends an ungrounded meeting question. A follow-up you queue or recover re-fetches the exact meeting before it runs, and survives the automatic post-meeting rename.

Connect an existing meeting library

In COS Control, choose Meetings Library. The recommended choice is the folder you already use: its immediate children are months such as 2026-08, containing Markdown meetings. COS browses it without moving, renaming, or rewriting anything. If you already organize meetings into several libraries, choose their parent instead; each custom-named folder only needs meetings/YYYY-MM/*.md inside.

Your COS role never determines these names. The same setup works for executives, marketers, engineers, product and people leaders, attorneys, chiefs of staff, clinicians, and other roles. The Blueprint adapts COS behavior to the person; your existing filesystem remains yours.

A direct library can coexist with a separate operations pipeline. Review Meetings merges direct, enriched, and standalone G2 records, then prefers the enriched writable copy when the same session exists more than once. Direct-only records show as read-only for speaker edits. If the picker finds an incomplete shape, it names both valid layouts and offers Choose Again or Skip for Now.

The lens catches up

The phone can keep receiving transcript chunks while the G2 display bridge is busy or disconnected. COS retains the newest unpainted transcript body and catches the lens up through one ordered display lane after reconnection. Scrolling into history intentionally pauses the live reveal; choose Resume Meeting to return to the newest text.

Stopping is durability-aware

A normal stop is one tap, and it returns within a bounded five-second foreground budget. If storage or connectivity is changing at that instant, COS shows Meeting paused · tap Stop again instead of claiming the recording was saved — a slow network returns a truthful pending state while your audio and retry ledger stay intact in phone storage. The second tap finishes the durable close; message recording unlocks only after the meeting reaches idle.

The live transcript remains canonical. A higher-quality post-meeting pass replaces it only when coverage and repetition checks pass; a bad rewrite is rejected without touching the complete streaming transcript.

Early Sync: the meeting arrives before the polish

Since server 6.21.9, COS separates when a meeting becomes findable from when its highest-quality transcript is finished. Previously a saved meeting waited for the whole post-meeting Large-v3 pass before it reached your Operations pipeline, and a long batch could hold it for many minutes. With COS_MEETING_EARLY_SYNC=1 in ~/.cos-glasses/.env, the saved meeting claims its stable session identity immediately, then the same artifact is enriched in place when the polish lands. Fireflies and Granola match that one meeting instead of racing it, so you never get two owners for the same conversation. The switch is I/O only: it changes when identity is written, never what gets transcribed.

Progressive HQ: polish while you talk

Also since 6.21.9, and off by default: COS_MEETING_PROGRESSIVE_HQ=1 lets Large-v3 work through sealed 30-second windows during the meeting on one preemptible CPU-only worker, so Stop mostly has the unfinished tail left rather than the whole recording. Admission is tier-aware. Balanced is capped at two background threads for fanless M1/M2-class Macs; Max defaults to six and is still capped by available CPUs. COS_MEETING_PROGRESSIVE_HQ_THREADS can lower that but never raise the tier cap. Checkpoints are reused at Stop only when audio, context, model, and session identity all still match, so provisional text can never become canonical on its own, and an abandoned recording cannot monopolize the worker.

Leave progressive HQ off for now. It is compute that runs beside your live transcription, and it stays default-off until the latency and thermal gate passes across more hardware. Early Sync is the safer of the two and is deliberately independent, so you can enable it alone. Either switch can be turned off on its own, and a restart returns you to the established behavior.

Idle Metal HQ: GPU for the polish, never against a live meeting

Since 6.14.1 the post-meeting Large-v3 polish has run on CPU so it can never fight a live meeting's ASR for the GPU — going meeting to meeting, the polish of one call overlaps the capture of the next, and two Metal workloads degrade each other. The tax was that idle polish stayed slow too. COS_BATCH_HQ_METAL=1 opts into GPU-when-idle: each segment picks Metal only when nothing live is contending, and a meeting starting mid-batch preempts the GPU immediately. The interrupted segment is discarded and retried on CPU, so a truncated transcript is never saved.

Measured on a real mixed workload, post-stop batches ran 6.1× faster per word on Metal than CPU (30.5 ms/word against 187.4). Note what this does not change: progressive checkpoints during a meeting still run on CPU by design, so the during-meeting path is unchanged. This is off by default — run a meeting-to-meeting smoke on your own machine first. COS_BATCH_HQ_FORCE_CPU=1 is the blunt rollback and wins over everything.

Named speakers need the voiceprint model

Telling one voice from another uses a ~26 MB voiceprint model that is deliberately not bundled in the npm package. Server 6.37.3 fetches it during ordinary setup. Without it nothing breaks and nothing warns you on the glasses: every voice is simply recorded as Me or Ext.

If speakers are not being named, install it and restart the server: npx --yes @gotcos/glasses-server@latest --setup-speaker-model. Set SKIP_SPEAKER_MODEL_DOWNLOAD=1 to opt out on a metered connection. COS Control (0.5.70 and newer) shows a banner on Review speakers with a Guided Setup button whenever the model is missing.

Name held audio or review a meeting. In Activity window, Speakers, Samples to review, listen to audio the server is still holding (72 hours), then choose a name or an existing voice suggestion. Since Control 0.5.223 with server 6.46.0, both Name and Add to a person open a preview before Apply. The preview separates samples used for training from transcript positions and shows matching segments only inside the samples’ own meetings. Review speakers still renames a voice inside a saved meeting; a new name with the “Just this meeting” scope also creates the profile.

Review the result, and undo labels when needed. Apply reports each sample and meeting copy, including samples enrolled without a transcript position and any copy it could not safely change. Listen before applying a large set of matches, and acknowledge owner samples when asked. Undo restores this batch’s labels; enrolled voice samples stay kept and deleted audio stays deleted. Interrupted naming offers a fresh preview or an explicit revert. A labels-newer-than-graph badge means the graph still needs to catch up; search refreshes at up to 10 meetings per sync.

Enrolment does not reach back past the model install. Voice evidence is only banked while the model is loaded, so meetings recorded before you installed it can be relabeled but cannot produce a voice profile. Record a fresh meeting after setup, or enrol from held audio inside the 72-hour window.

Import and merge meetings

Since server 6.47.0 with COS Control 0.5.230, meetings recorded by Fireflies can join the same library as your G2 recordings, and a meeting you both wore the glasses for and let Fireflies record becomes one record instead of two rows that each look canonical.

Connect Fireflies once. In COS Control, open Import meetings and paste your Fireflies API key. The server stores it on this Mac, checks it, and reports one state: ok, invalid key, rate limited, vendor down, unreachable, or no key. The key is never displayed and never returned, and it does not enable voice training. On a server older than 6.47.0 the card says to update the COS server to 6.47.0 and offers Update Server.

What comes in. Imports arrive through the Fireflies API only, never from the desktop app’s files. Choose a backfill of 7, 30 or 90 days; a run that reaches your plan’s daily limit stops there and resumes from where it left off, and on the free Fireflies plan that limit is 50 requests a day. Keep importing polls every 6 hours and spends at most half of a day’s budget. Each run reconciles what Fireflies listed against what was actually written, every failure has its own state, and a run that imported nothing and failed reads as the failure rather than as success. An imported meeting carries Fireflies’ overview and action items.

What merges by itself, and what asks you. The merge engine is deterministic, and no language model is involved anywhere in import, pairing, alignment, splitting or merging. It pairs a G2 recording with the Fireflies meeting that shares the most unique three-word phrases at a consistent time offset, refuses a pairing whose clocks disagree by more than 15 minutes, collapses duplicate recordings of one meeting, and groups every G2 recording of a meeting into one merged record. High confidence merges, and content-anchored splits of a long recording, apply on their own. A lower confidence pairing becomes a suggestion in Suggested merges, which shows both meetings and how many phrases they share, for you to Merge or mark Not the same meeting. Anything recorded before the engine was installed only ever becomes a suggestion.

A merge adds, it never takes away. A merged record holds the Fireflies transcript, the full G2 capture, any alternate transcript, the union of attendees, the vendor summary and action items, and a Sources table. Where the two recordings align, a G2 voice match labels a generic Fireflies speaker and shows its score, and the original label is kept. Source files are never modified. In the library the merged row replaces the rows it merged, and its sources stay reachable from its detail. For a merged meeting carrying its G2 session marker, server 6.61.2 resolves review across domain folders. Server 6.61.4 keeps review and corrections on that canonical merged meeting even if the original file still exists. Voice training still requires eligible G2 audio; an imported transcript alone is not voice evidence.

Undo and Revert. Every automatic action can be taken back. A merged meeting offers Undo and a split piece offers Revert, each showing a preview of exactly what it would change before it runs. A merge you undo is never repeated by automation. If you are rolling back to an older server with merged records present, revert them first, then downgrade.

If you run the COS pipeline. A Mac whose pipeline already files meetings starts in advise mode: your pipeline keeps bringing in Fireflies meetings, an import run from the server is refused as duplicate work, and the engine only shows what it would merge, plus its suggestions. It writes nothing into your operations folder, and the answers you give are kept. Switching to apply in COS Control hands each decision to the pipeline, which copies the original to its own archive path and verifies it, splices the merge into the existing meeting file so the title, summary, decisions and action items survive, and can restore it byte for byte. One mode file is read by every pipeline process; there is no environment variable to set.

Retries do not duplicate meetings

Saving is idempotent: repeating the same save request returns the original receipt and filename instead of creating another meeting. Closed-session markers also prevent delayed uploads from recreating a meeting after it has been saved.

Compatibility: glasses 6.10.639 plus server 6.73.1 is the current companion pair; the last confirmed Even Hub listing is 6.10.629.

  • Server 6.42.0 and newer withhold display content unless the glasses app presents a display-stream ticket. 6.8.441 and 6.9.442 do; older glasses builds get lifecycle events only on the display, while meeting capture and sync keep working.
  • The default Tiny configuration uses Mac Whisper while the Mac answers and the built-in phone model when it does not. Tiny or Base adds rolling provisional text without changing canonical capture, speaker attribution, save, HQ polish, recovery, or sync.
  • Memory and Threads need a compatible full-COS workspace bridge. Standalone installs keep every core glasses feature and show those two surfaces as unavailable. Older persisted meeting references remain valid.

Review the meeting from your phone.

In the companion (586 and newer), open Views, then Review meetings on phone. This is a separate entry from Meetings on the glasses. Open a completed meeting, read its notes, then choose Review voices.

COS GLASSES 6.10.639

< MEETING · SPEAKER REVIEW

Friday pilot review

3 voices · 42 segments

Unidentified voice 1

Needs review

Suggested: Maya Chen

A suggestion still needs your confirmation.

Sample 1 · 02:14

“I will check the rollout notes before Friday.”

Play sample appears here when retained audio is available.

Who is speaking?

Maya
Maya ChenSaved voice

Illustration only. No audio or profile changes on this website.

  1. Read clean meeting notes.

    Headings, lists and tables are formatted. Expand the transcript when you need the detail. Back returns to the meeting list without changing the glasses page.

  2. Listen before naming.

    Play or replay the timestamped meeting phrases. Listen to a retained saved-voice sample when available. Missing audio is shown as unavailable; playback needs retained evidence and a connection.

  3. Choose an existing voice or a new person.

    Search saved profiles by a partial name and choose the matching profile. For someone new, explicitly choose the new name. A saved meeting name becomes a reusable voice profile only when eligible audio can be enrolled; the receipt tells you what happened.

  4. Review, then confirm.

    Corrections stay pending until you select Confirm and apply. Keep pending makes no server change. Changed evidence and uncertain responses require review; reconnect does not silently apply a correction.

The phone companion uses black, white and neutral gray. COS Control on the Mac keeps its separate cream-and-gold theme. Standalone phone voice-profile recording is not included in 587.

When the connection drops.

587 protects unsent Sessions turns and makes pending states visible. Offline is a set of distinct capabilities, with different limits.

What you are doingWhat 587 preservesWhat still needs a connection or device check
Continue a sessionSaved on phone appears only after storage acknowledges and reads back the exact turn. Full queues keep older turns and preserve the new draft. Older instructions become Needs review; held turns block later turns from passing them.Sending and live replies need the Mac. Review stale instructions deliberately. Failed storage reads say Unavailable, not empty.
Read a session or meetingPreviously cached detail can be read as a saved copy. Its date and stale state remain visible.Uncached content, fresh status and retained audio playback need the Mac. A saved copy is not a live status.
Correct a speakerThe pending correction remains on the phone until explicitly confirmed against the current meeting and profile.Recheck existing voices and evidence online before applying. Conflicts and uncertain confirmations require review.
Record a meetingExisting offline capture and retry paths queue audio when storage succeeds. The phone can show provisional text; the Mac supplies authoritative speaker-attributed text after reconnect.Durable long recordings across app termination, phone locking, Bluetooth loss and storage pressure still require device qualification. Do not treat 587 as a guarantee against unsynced audio loss.
Send a Messages jobAccepted jobs continue on the Mac. Reopening reconciles local and server copies so one message identity produces one history entry.Broader unsent Messages/task retention is not included in this pass. Acceptance on the Mac and saved on the phone are different states.

Storage limits and expiry remain for refreshable caches and safely synced media. Before field use, test reconnect and relaunch on your own phone and glasses. Keep the app's save and sync status visible until capture is safely acknowledged.

9. Dictation

Long prompts, hands free or phone local.

Dictate a sentence or a page. Mac Whisper remains the default. English Moonshine Tiny or Base can form and revise text on the iPhone while you speak, in both Messages and Meetings; since glasses 6.9.485 that happens when the Mac cannot be reached, or on every dictation if you set Use the phone model to Always. Nothing sends until you approve a Message transcript, and Meeting preview never becomes the canonical record. Requires server 6.27.4.

  1. Record

    Press and hold the ring on the Messages list, on an open message, on Message History, or on a meeting, thread, memory or session detail; the recorder opens while you hold (see where a hold works). Or tapTap ● Record Message in the Messages list, or choose Ask COS from the hold shortcuts. Double-tap in an open message starts a new prompt in the same session; say “reference message 411” first to attach a specific message as context. A double-tap in the Messages list returns to Quick Actions. Since glasses 6.9.474, set Settings, Voice, Glasses dictation to hold and a long press on the ring starts the message wherever a message can start: Messages, an open message, Message History, or a meeting, thread, memory or session you are reading, which the hold picks up so the recorder says Ask COS. Home is tap-only (since 6.9.481): tap opens the latest message and a hold there does nothing. The lens shows Listening... and fills with warm transcript text while you speak. Moonshine reruns over the still-open phrase, so words may revise as more audio arrives. If COS is speaking an earlier reply, opening the microphone stops playback first so the old answer cannot overlap or enter the new prompt.

  2. Review

    Tap to finish when you started from Record Message or a menu row.Release before the configured switch to finish; after the switch, let go, keep speaking, and tap to finish. Since 6.9.562 the hold control counts elapsed time against the switch, for example Release to confirm 4/15s. Choose a 10, 15, 20 or 30 second switch under Voice; 15 seconds is the default. A hold still down at 90 seconds stops. Once switched and released, recording has no 90 second limit. If the ring misses a release, tap once to arm Tap again to finish, then tap again to end it. COS runs one complete transcription, on the Mac while it answers or on the phone model when it does not (6.9.485; before that the phone model took every dictation), then reuses the same deterministic glossary and optional finalizer used by Mac dictation. Build 6.10.573 offers Sonnet (default) and GPT-5.6 Luna Fast; Luna needs server 6.61.5 and a signed-in Cursor CLI. The Transcribing footer names the route. The complete draft remains reviewable before anything is sent. Final polish is on by default and can be disabled under Voice. The recording remains recoverable on the phone, with a server backup when reachable.

  3. Send, edit, or redo

    The cursor starts on Send, so sending as-is is one tap. Or choose Edit and speak the change (“make the second sentence shorter”), Re-record, or Cancel. After an edit you also get Send revised and Undo edit.

Hold to talk

Turn it on. In the Even app open COS Glasses, then Settings, Voice, Record a message, and choose Hold to talk, release to finish (the default is Tap to start, tap to finish). The setting lives on the phone and takes effect on the next screen you open; the lens says which gesture is live in its footer hints. Glasses 6.9.474 and later. Flip the switch at the top of this page to read every step and table for hold.

What changes. A press held past 300 ms starts a message where a hold works. Release before the configured switch to review, then tap to send. The footer counts the hold, for example Release to confirm 4/15s. At the switch, let go and keep speaking; tap to finish when ready. The default switch is 15 seconds, with 10, 20 and 30 second options under Voice. A hold still down at 90 seconds stops, but switched recording has no 90 second limit once released. If the ring misses a release, tap once to arm Tap again to finish, then tap again. The shortcut menu uses a separate gesture: tap, release, then press and hold.

Long holds and the temple. A ring hold becomes a tap recording after a set time (since 6.9.554): the header pulses a square until you let go, you keep talking, and one tap finishes. Glasses 6.9.561 sets it to 15 seconds unless you pick 10, 20 or 30 under Settings, Glasses dictation, Switch a ring hold to tap after (it was 30). After the switch there is no 90 second limit. Only the ring starts a hold unless you set Start hold to talk from to Ring or temple: with Ring only, the default, a temple long press does nothing, and letting go ends a hold only on the touch that started it. Temple taps still confirm and stop.

A circle fills first. Since 6.10.622 a hold arms before the microphone opens: the nav fills ◌ Keep holding to ● Starting, and recording starts when it is full. Let go early, tap, or leave the page and nothing starts, and the page comes back as it was. The fill is half a second by default; Settings, Voice, Hold to talk: fill time offers Instant, 0.3, 0.5, 0.8, 1 or 1.5 seconds.

Where you holdWhat startsFooter hint
Messages listA new message, recorded in place.—
An open messageA reply into the same session (the reader’s own Reply path).—
Message HistoryA new message; the lens goes to Messages and records.—
Meeting, thread or memory detailPicks that record up and asks COS about it, one motion (6.9.476 and later).Hold: ask
Session detail, ClaudeContinue the session in place; if it is busy your words are queued and land when it goes idle (6.9.486 and later).Tap: actions Hold: continue
Session detail, Codex or CursorContinue the session, the same as Claude (Codex since 6.9.511, Cursor since 6.10.620). Tap and pick Ask COS to ask about it instead.Tap: actions Hold: continue
HomeNothing. Home is tap-only: tap opens the latest message, Messages is where the hold works (6.9.481 and later).Hold off here. Tap: messages
Quick Actions, lists, pickers, an image, a live meetingNothing; a live meeting owns the microphone. Some pages say so once per visit, the rest stay quiet.—
The review pageNothing. A draft in front of you is never overwritten by a hold (edit it with the menu). A draft you left behind on another page no longer blocks a hold (6.9.490).—

Mac Whisper, default

Your durable prompt audio uploads to the paired Mac and uses the established Whisper lane, with your vocabulary corrections and speaker context. Since glasses 6.9.485 this is also where Mac + phone model sends dictation and live meeting text while the Mac answers; the phone model is what takes over when it does not, and it remains the fallback if phone storage, download, model startup, or inference is unavailable.

Moonshine Tiny

The smallest, fastest English phone model. Select Settings, Voice, Transcription, Mac + phone model · Tiny (named Dictation + live preview, On phone: Tiny before 6.9.464). Since glasses 6.9.485 it runs when the Mac is unreachable, or on every dictation when Use the phone model is set to Always. Since glasses 6.9.466 it ships inside the app and needs no download; since 6.9.472 it reads ready only after it transcribes a short test clip on the phone. It powers rolling Message and Meeting preview.

Moonshine Base

The larger English phone model for better accuracy when a little more local processing time is acceptable. Select Mac + phone model · Base. It uses the same rolling-preview and settled-finalizer contract as Tiny, and the same Mac-first rule since 6.9.485. Base downloads while the phone is online, and again after the app closes. Both are optional.

Local audio boundary

After successful phone-local transcription, prompt audio never goes to the Mac. Only the transcript continues through your paired server to the agent you selected. If local inference fails, COS visibly falls back and resumes from the same durable WAV instead of asking you to record again.

Preview is not the record. Moonshine can show fast, unlabeled Meeting text while a phrase is still open. When it settles, the shared finalizer may clean that provisional phrase, but only after the durable audio capture succeeds. Speaker-attributed Large-v3 remains authoritative and atomically replaces it. Preview is never persisted, indexed, saved, sent to HQ polish, or used by recovery and sync. Final polish is on by default; turn it off to keep settled Moonshine text raw.

10. Models

Choose your brain. Keep it current.

Seven entries in Settings under Default chat model, spanning all three agent CLIs: Claude Code, Codex, and Cursor. Every slot resolves the newest model at the moment you send, so the picker never goes stale and the app never needs an update to follow a release. Run a local Ollama daemon and an eighth entry appears: a fourth model family that answers entirely on your Mac.

Opus — always latest (1M)

The newest Opus, resolved through your Claude Code CLI at the moment you send. 1M-token context.

Fable — always latest (1M)

The newest Fable-tier model, same send-time resolution, same 1M context.

Sonnet — always latest (1M)

The newest Sonnet: fast, capable, and cheap enough for the everyday questions.

GPT Frontier — auto latest

The strongest capable model in the newest GPT generation, discovered live from Codex's model catalog. Settings shows the exact model serving today.

GPT Balanced — auto latest

The strong-and-efficient sibling from that same live generation. When the catalog advances, both GPT slots follow it automatically.

Grok — via Cursor

Cursor’s fast reasoning slot. It follows the newest cursor-grok-<ver>-high-fast id from agent models. Low, medium, xhigh, and non-fast SKUs stay out. If the live catalog is empty, the fallback is cursor-grok-4.5-high-fast. CLI DEBUG shows the concrete id that served the last message.

Composer — via Cursor

Cursor’s own model, composer-2.5-fast, tuned for speed on everyday work. Both Cursor slots stay recognized even when the Cursor CLI is absent, so version skew fails closed instead of silently remapping to Opus.

If the live catalog is unreachable, COS falls back to the local catalog cache, then lets the CLI pick its own current default. It never pins a stale model, and economy or hidden variants are excluded from the slots. The CLI DEBUG card in Settings always shows the exact model that served the last message.

Reasoning effort

Four levels ride along with every message: High (default) Extra High Max Ultracode. Higher effort means deeper reasoning with slower, costlier answers. On GPT models that advertise support, Max stays Max and Ultracode maps to Codex Ultra; older models clamp safely to what they can do.

Change the model. Then set its effort.

Follow the ring from Opus + High to Sonnet + Max. Open the left-sliding shortcut window, choose Model, then move through the two full-HUD pickers. Scroll highlights; a single tap selects. These are simulated settings, not changes to your account.

Tap and release, then quickly press and hold. Scroll to Model and tap. In the model list, scroll to Sonnet and tap; that saves the model and opens effort. Scroll to Max and tap to apply it and return to your original page. The > cursor is the highlighted row; * marks the current choice.

Just changing effort?

Open Model and tap the already-starred model. That opens its effort picker without changing the model. X-High is Extra High; Ultra is Ultracode.

Back out deliberately

Scroll up to the first row, then once more to leave a picker. Leaving the model list without tapping keeps the model unchanged. Leaving effort keeps the previous effort, but does not undo the model you already chose. These pickers do not wrap the way the footer menus do.

For your next message

A model tap saves the model; an effort tap applies the effort and returns to where you started. Neither switches an in-flight answer. This example has seven models with Cursor ready; Cursor and Ollama availability can change the rows and count on your device.

Local models via Ollama

Server 6.39.0 adds Ollama as a fourth model family beside Claude, Codex, and Cursor. The model runs entirely on your Mac, so a query never leaves the machine. Install Ollama (the Mac app from ollama.com, or Homebrew) and pull at least one model:

$brew install ollama && brew services start ollama
$ollama pull qwen2.5-coder

That is the whole setup. When the daemon answers on 127.0.0.1:11434 with at least one pulled model, Ollama appears in the glasses and companion pickers. When the daemon is down, the slot hides again, and a saved Ollama choice safely resets to Opus. Since server 6.40.1 a local model can search your meetings and memories and read one meeting, read-only, when the pulled tag advertises tool support and the COS pipeline is configured. Writes, Bash, MCP, web search and web fetch are not on this path. Still no vision, no Continue or Fork, no Live Cues.

Two optional keys in ~/.cos-glasses/.env: COS_OLLAMA_MODEL pins the model COS uses, and COS_OLLAMA_HOST points at an alternate loopback address (LAN addresses and 0.0.0.0 are refused). COS Control 0.5.73 and newer preserves both keys across server updates, so Update Server never drops your local-model settings. Since Control 0.5.74 the About view shows an Ollama row with the live model when the daemon is ready, and Doctor prints a matching line; no row is the correct render for a Mac without a local daemon.

Requires server 6.39.0 or newer; 6.40.1 or newer is strongly recommended.

  • 6.39.1 fixed durable Ollama jobs forgetting their engine.
  • Since 6.40.0 hidden thinking follows the effort you ask for. The default effort keeps local turns instant; xhigh and max raise the thinking budget. In a controlled test a thinking local Qwen matched an Opus 5 reference at 10/10 where the same model without thinking scored 6 to 7.
  • COS_OLLAMA_THINK pins the behavior either way (1/0, or a budget: low, medium, high, max). Control 0.5.79 adds a Local model picker in Settings that pins COS_OLLAMA_MODEL, so pulling a new model no longer silently repoints selection.

11. Privacy

Private by architecture.

This self-hosted setup keeps COS history on your Mac. Signed-in Claude, Codex and Cursor CLIs send model requests to their providers; an Ollama model runs locally. Hosted COS is a separate service.

Your Mac is the brain

Queries spawn your local claude or codex CLI and bill to the subscription you already have. Conversation history is a JSON file per day under ~/.cos-glasses/data on your Mac.

Off means off at the source

With Tool activity set to Off, previews are never transmitted to the phone, not merely hidden, and tool status flattens to a generic Processing...

Safe output is actually safe

Preview lines are capped at about 180 characters, control codes are stripped, bearer tokens, API keys, passwords, and JWTs are redacted, and opaque blobs are hidden. Raw tool payloads never reach the phone.

Choose what stays in view

Running-message trails can be journaled on the Mac for reconnect and recovery. Since glasses 6.9.535, Tool log on finished answers is off by default. That setting controls the finished view; turning it off does not promise deletion of server records.

Rich media stays opaque

Messages and ledgers carry random attachment IDs, never raw attachment bytes or private filesystem paths. Photos, documents, PDFs, and videos are size/type checked, bounded for model context, and served only through the authenticated server.

Phone-local means audio stays local

When Moonshine Tiny or Base succeeds, the iPhone turns audio into text before contacting the Mac. Rolling inference stays on the phone. At a settled Message or Meeting boundary, only bounded text may reach the authenticated finalizer; raw phone audio does not. A visible Mac fallback is the only path that uploads the durable Message WAV. Meeting audio continues through its existing local-first capture contract.

Offline meeting audio is temporary

Meeting chunks wait in private phone storage only until the Mac acknowledges the complete canonical recording. Exact missing ranges are retried idempotently; acknowledged audio can then be removed without risking an un-uploaded tail.

No hidden reasoning

COS surfaces observable work only. Model thinking appears as a generic Reasoning... status, never as text on your lens or phone.

You choose what shows

Four Activity Visibility controls in Settings decide what job detail appears, and where. Defaults below.

ControlOptionsDefault
Tool activityOff / Status only / Status + safe outputStatus only
Live response linesOn / OffOn
Tool log on finished answersOn / OffOff
Detailed output locationPhone + G2 / Phone onlyPhone + G2

From glasses 6.9.535, Completed activity trail is named Tool log on finished answers and defaults to Off: a finished message shows the answer alone, and the running trail is for watching a run. An On you set earlier is kept.

12. Settings

Three tabs, one place.

Open the phone companion and tap the gear. Build 336 groups controls under System, AI, and Voice. Every preference, including dictation + live preview, final polish, the spoken-reply engine, and local voice, persists through Even Hub storage.

SectionWhat it holds
SYSTEM · CONNECTIONStatus, server URL, and Disconnect. Disconnect wipes the saved URL and token; reconnect through the wizard.
AI · MODELDefault chat model: the always-current entries above, plus Ollama whenever a local daemon is live with a pulled model.
AI · REASONING EFFORTHigh (default), Extra High, Max, Ultracode.
SYSTEM · RECOVERY CENTERApp API, live stream, G2 bridge, local Whisper, transcription policy, Claude CLI, Codex CLI, and Cursor CLI are evaluated independently. Refresh diagnostics checks them together without converting an unsupported optional route into a false system-wide disconnect. Build 228 actively checks current G2 device evidence: definitive attachment is green, a definitive disconnect is red, and transitional or unavailable evidence stays Unknown.
SYSTEM · CLI DEBUGClaude CLI and Codex CLI each show support, last-run status, and whether action is needed. Last run OK describes the most recent run; it is not a live login guarantee. Diagnostic responses are metadata-only: no prompts, answers, tool output, paths, commands, raw session IDs, tokens, or credentials are returned to the phone. Sign-in and credential updates happen on the Mac with claude auth login or codex login.
AI · ACTIVITY VISIBILITYThe four job-detail controls: Tool activity, Live response lines, Completed activity trail, Detailed output location. From 6.9.535 the third is Tool log on finished answers, off by default.
VOICE · TRANSCRIPTIONNamed Dictation + live preview before 6.9.464. Mac + phone model · Tiny is the default and favors speed and Mac + phone model · Base favors accuracy; both are English-only. Tiny ships inside the app; Base downloads verified model assets while the phone is online. Since 6.9.485 a phone model means Mac first: the Mac transcribes dictation and live meeting text while it answers and the phone takes over when it does not; the Use the phone model choice under it, When the Mac is unreachable (default) or Always, keeps the phone on every dictation if you want the on-phone latency or audio that never leaves the phone. Local setup or inference failure falls back visibly. Phone-local Message dictation keeps its audio on the iPhone.
VOICE · FINAL POLISH (AI)On by default. Reuses the existing dictionary and selected finalizer only after a Message or Meeting phrase settles. In glasses 6.10.573, Polish model offers Sonnet (default, Claude CLI sign-in) and GPT-5.6 Luna Fast (Cursor CLI sign-in, server 6.61.5 or newer). Both use subscription CLIs. An unavailable model keeps the transcript; it does not switch models silently. Live preview stays fast; failures keep the transcript. Turn this off to skip the AI cleanup pass.
VOICE · LIVE MEETING ASRServer Whisper remains canonical for Meetings. Balanced uses Small.en for provisional server text, Large-v3-Turbo for committed live text, and Large-v3 for polish. Max uses Large-v3-Turbo for provisional server preview and Large-v3 for authoritative commit and polish. Phone Moonshine preview may appear earlier, but canonical work always replaces it. Add the names, companies, acronyms, and specialist terms you say often in ~/.cos-glasses/.cos-profile.json; factory placeholders are ignored.
VOICE · GLASSES DICTATIONTap to start, tap to finish is the default. Hold: a long press on the ring starts a message and letting go opens the review (glasses 6.9.474 and later). Before the hold switches, its control counts the time held against the switch time, for example Release to confirm 4/15s (since 6.9.562). At the switch, let go and continue speaking; tap to finish. The docked recorder puts this control in the header, while the classic recorder uses the footer. On a message the status line reads Tap: actions and Hold: ask. Since 6.9.561, Start hold to talk from is Ring only (the default) or Ring or temple, and Switch a ring hold to tap after is 10, 15, 20 or 30 seconds, 15 by default.
VOICE · VOICE (TTS)Choose Local, Local-first, or OpenAI. Local uses on-Mac Kokoro and fails closed; Local-first may fall back only after a local failure and only when OpenAI is configured. The voice picker is engine-aware, persists through reinstall, and includes a test button. Connect Bluetooth audio to hear playback.
VOICE · OPENAI KEYOptional server-side key for administrators who deliberately enable cloud transcription fallback. A key by itself does not upload audio. Server 6.12.0 also requires COS_OPENAI_WHISPER_FALLBACK=1; otherwise transcription stays local. The key is never returned to the phone.
AI · LIVE CUESOff unless you set COS_LIVE_CUES=1. Every cue is a model call on your own agent quota, not a free local pass. Bounded at 8 cue pipelines per meeting, one start per 60 seconds, and a 30-second cooldown after a cue fires. Runs on Cursor Composer; any other model fails closed rather than quietly billing one you did not choose.
SYSTEM · SESSION IDOff by default since glasses 6.9.481: the lens status line shows the gesture hints in the slot the session id used. Turn it on to see the id and message index again. Persists through Even Hub storage.
SYSTEM · Reset preferencesRestores every preference to defaults. Your connection is kept.
SYSTEM · ABOUTVersion, build, and the local-data note.

13. Troubleshooting

When something looks stuck.

Almost everything comes back to one question: can the phone reach the Mac?

A capture that recorded only silence

Server 6.37.3 records a silent capture as no_speech and clears it, instead of re-attempting recovery on every pass; earlier builds could retry the same empty capture indefinitely. The audio is not deleted — it stays in the unsaved-audio store until the normal retention clock removes it, so it is still available to enrol a voice from.

“Query failed. Check COS server connection.”

The phone cannot reach the Mac. Confirm the Mac is awake and the server is running (npx --yes @gotcos/glasses-server@latest), and that the phone is on the same Wi-Fi, or that Tailscale is up on both devices. Quick check: open http://YOUR-SERVER-IP:3141/api/health in the phone browser.

Claude Desktop is installed, but COS cannot find Claude

Desktop and Claude Code are separate apps. In Terminal, run npm install -g @anthropic-ai/claude-code on one line without sudo. Then run claude, finish the browser sign-in, and confirm claude --version works before starting COS again.

npm reports EACCES or a root-owned cache

Do not use sudo and do not recursively change system ownership. Start COS with a private user-owned cache: npm_config_cache="$HOME/.cos-glasses/npm-cache" npx --yes @gotcos/glasses-server@latest. Server 6.12.2+ resolves the dependencies npm already installed and never launches a second install from npm's temporary package folder.

@latest started an older server

Compare server_version in /api/health with npm view @gotcos/glasses-server dist-tags.latest. If they differ, stop the old process and rerun with fresh metadata: npm_config_prefer_online=true npm_config_cache="$HOME/.cos-glasses/npm-cache" npx --yes @gotcos/glasses-server@latest. Do not use sudo or delete system caches.

Restarted the server?

Force-quit the Even app and reopen it. Settings and the connection survive. Disconnect in Settings is the last resort: it clears the saved URL and token, so you would re-paste them from the wizard.

Closed the app while it was working?

Once a prompt is Accepted, the job runs on your Mac, not the phone. Reopen COS and it reattaches to the same job and shows the reply. A brief drop reads Reconnecting · job still running, not Failed. If the Mac server restarted, you will see Interrupted · prompt preserved with a one-tap retry. Only Cancel stops a job on purpose.

Voice feels slow or local Whisper is unavailable

Mac Whisper transcribes for free and remains the default. It is a one-time prerequisite for Mac voice and canonical Meetings: run brew install whisper-cpp, stop COS with Control-C, rerun npx --yes @gotcos/glasses-server@latest, then confirm Recovery Center shows Local Whisper ready. Phone-local Tiny or Base can provide Message dictation and provisional Meeting text, but final speaker-attributed Meeting text still requires Mac Whisper. Text chat remains available without either path. COS keeps retryable audio instead of discarding a prompt. Cloud fallback stays off unless the server operator explicitly enables it and configures a key.

Phone dictation says text/html is not a valid JavaScript MIME type

You are running build 334. Its bundled ONNX runtime asked the Even WKWebView for a relative JavaScript loader and received the EHPK document instead. Install COS Glasses 6.10.629 or newer from Even Hub when available; 6.10.629 was observed Public in Miles's October12 screenshot. Build 335 and newer pin the loader URL explicitly and reuse any verified Tiny or Base model already on the phone, so you do not need to redownload the model. Until you update, select Mac Whisper under Settings, Voice, Dictation + live preview.

Base is downloading

Keep the Even app in the foreground while Base downloads; Tiny ships inside the app and never downloads. COS downloads one asset at a time and verifies its expected size and SHA-256 hash. Base downloads again after the app closes. A failed or incomplete setup falls back visibly to Mac Whisper. Retry later on a stable connection; do not reinstall or clear Even app data unless support asks you to.

Recovery Center shows a disconnected component

Build 337 evaluates each layer independently. Server updates means the display-event connection is live; it does not claim that the Mac is transcribing speech. Transcription route reports the route COS will actually use: iPhone Moonshine Tiny or Base, Mac Whisper, or a visible Mac fallback while the selected phone model is unavailable. Since glasses 6.9.485, Mac Whisper with the Mac answering is the intended route under Mac + phone model, not a fallback; fallback means the phone was meant to run and could not. During a Meeting, an iPhone route is labeled preview because canonical speaker-attributed Large-v3 still runs on the Mac. Mac ASR policy separately reports whether the Mac permits local-only or cloud fallback. Tap Refresh diagnostics for one coordinated check.

The COS splash stays over a ready lens

Install build 338 or newer. The splash now hands off automatically when startup and welcome context settle; no swipe is required. Tap or scroll can still skip it, and a 10-second failsafe prevents it from remaining indefinitely if startup never reports ready. A foreground-return inbox glance still waits for your input by design.

Claude CLI or Codex CLI says “Sign in on Mac”

Provider authentication is intentionally managed on the Mac, never from the phone. Run claude auth login or codex login, complete the provider sign-in, then tap Refresh diagnostics. A successful prior run appears as Last run OK; if credentials expire afterward, the next attempted run will safely surface the new sign-in state.

Only the CLI rows say “Update server”

The connected server predates the authenticated metadata-only /api/cli/debug route. Queries, meetings, images, queues, G2 display, and local Whisper remain usable. Rerun npx --yes @gotcos/glasses-server@latest on the Mac to install the current server; COS does not clear drafts or credentials just because this optional route is absent.

Server dropped during a meeting

Keep talking. The phone journals audio locally and reconnects without restarting the meeting. When the server returns, COS reconciles the Mac identity and its audio and transcription ledgers before draining, uploads the exact missing ranges, catches transcription up, and retains local audio until the complete receipt arrives. If Mac storage is unavailable or full, COS returns a retryable error and preserves the phone copy instead of silently accepting the audio.

“Meeting paused · tap Stop again”

The first stop reached a transient storage or reconnect boundary, so COS refused to show a false success. Tap Stop Meeting AI once more. Your audio is retained, and new message recording unlocks after the meeting reaches idle.

Phone transcript is ahead of G2

The recorder is still working. COS keeps the newest unpainted body and normally catches the lens up within the existing display cadence after the bridge returns. If you scrolled through history, choose Resume Meeting. If it persists, check the G2 connection while leaving the meeting running.

Photos unavailable

Run brew install ffmpeg, then rerun npx --yes @gotcos/glasses-server@latest. Lens viewing requires server 6.5.0+ and an exact 288×144 G2 variant. Turn on Lens images and retry outside any active meeting or microphone flow.

Confirm meeting recovery support

Open http://YOUR-SERVER-IP:3141/api/health. Build 337's meeting recovery is ready when the response includes features.localFirstMeetings: true and capabilities.localFirstMeetings.protocolVersion: 1. On server 6.27.2, local speech readiness remains additive under tts_local, the selected transcription policy is reported under capabilities.transcription.live, and retained Adaptive replay reports its exact scope and raw-preservation contract. Phone-local Moonshine is a companion capability, so it does not turn the Mac server health row green or red.

Message numbers are in the thousands

If replies come back numbered #14820 instead of #12, your install predates message eras and is still counting from the whole archive. Check it with your pairing token (this route is token-gated, so a plain curl returns 401 — copy the token from COS Control → Copy Pairing Token):

curl -H "X-Cos-Token: YOUR-TOKEN" http://YOUR-SERVER-IP:3141/api/message-counter

A healthy install returns both a max and an era. If era is missing, update to server 6.16.9 or newer, then start a fresh era once:

npx --yes tsx server/scripts/reset-message-era.ts --confirm

Run it from inside the installed package. For a COS Control managed install that is ~/Library/Application Support/COS Control/runtime/generations/<version>-<hash>/node_modules/@gotcos/glasses-server/. Restart the server afterwards and reconnect the phone. Your archives are not deleted — past conversations stay searchable, and only the short numbering restarts at #1. Fresh installs are unaffected and already start at #1.

Updating

For a Control app update, use the in-app Update action. For a manual download, quit the old Control, replace /Applications/COS Control.app, then open that installed copy. Keep rollback copies outside Applications so macOS does not register one as your login app. Updating Control does not restart the server.

Current supported versions are COS Control 0.5.289, server 6.73.1, and COS Glasses 6.10.629 from Even Hub (last confirmed listing). Sideload 6.10.639 for the newest companion build; the last confirmed Even Hub listing is 6.10.629; 635 is delivered through the Hub repo and has not been confirmed Public in the marketplace. Earlier builds are retained as versioned sideloads from the Hub repo.

  • Update the server: rerun npx --yes @gotcos/glasses-server@latest --setup-transcription --transcription-tier balanced, then compare /api/health with npm view @gotcos/glasses-server dist-tags.latest. The /cos-glasses skill handles server health and updates.
  • Feature rollback: select Mac only under Settings, Voice, Transcription, or turn off Final polish.
  • Package rollback: the package-level rollback is COS Glasses 6.10.629 with the same server 6.73.1. Server 6.67.0 is retained separately for runtime rollback; with it, Meeting Ask on the phone, the lens and the Mac shows an update message and recording keeps working. The complete versioned629 EHPK is preserved in the Hub repository, and on Even App 2.2.9, 607 is the newest build that installs. Builds 580 and earlier cannot read the protected v2 Sessions queue or pending speaker edits. Resolve pending work before an older downgrade; do not clear app storage to downgrade. Choose Sonnet before downgrading: the older picker does not understand the Luna preference. Let Saved turns drain before going below 6.9.563. That older store build lacks Work, the prompt overlay, later reader fixes and the current footer controls.
  • Speaker naming after a server downgrade: server 6.45.5 ignores the new chunk confirmations and does not interpret the newer Undo records. Use server 6.46.0 or newer to review naming history or undo a naming. On an older server, do not re-enrol from a correction that was already undone.
  • Never 6.8.334: that build carries the WKWebView loader defect. Check npm view @gotcos/glasses-server@VERSION version before pinning any server build.

14. FAQ

The short answers.

Which hardware and app versions do I need?

Even Realities G2 glasses with the Even Realities app 2.2.10 or newer for build 6.10.639. The current supported pair is COS Glasses 6.10.639 (the last confirmed Even Hub listing is 6.10.629) and server 6.73.1; COS Control 0.5.289 is recommended on Apple silicon. Control bundles its runtime for core Mac setup. Manual terminal installations on macOS, Windows or Linux need Node.js 20.11 or newer. Phone-local Moonshine Tiny and Base are English-only; Tiny ships inside the app and Base downloads on demand. Mac Whisper remains required for canonical speaker-attributed meetings. Optional Kokoro spoken replies require Python 3.11 or 3.12, ffmpeg, and espeak-ng.

Do I need Claude Code, Codex, and Cursor?

One is enough. COS detects what is installed and signed in. Pick your default under Settings and switch whenever you like.

What does it cost to run?

The server is free and MIT-licensed. Prompts bill to the Claude, Codex, Cursor, or other supported subscription you already use. Mac Whisper and phone-local Moonshine transcription are free. Cloud transcription is disabled by default; administrators who explicitly opt in and provide an OpenAI key pay the provider's current audio-transcription rate.

Does anything leave my network?

Prompts go to the AI provider behind your own signed-in CLI, exactly as they would from your terminal. History, meetings, settings, and indexes stay on your Mac and phone. There is no COS-hosted copy.

What happens if my connection drops during a meeting?

Recording continues into private phone storage. On reconnect, COS uploads only the missing audio ranges and keeps the local copy until the Mac confirms the meeting is complete. The G2 transcript catches up separately, so a paused lens display does not mean recording stopped.

A new GPT or Claude model just shipped. Do I update anything?

No. Claude tiers resolve at send time through your CLI, and GPT Frontier and Balanced follow Codex's live catalog to the newest generation automatically. The picker updates itself.

Where do I report a bug or ask for help?

Need help? Email dev@gotcos.com. You can also open an issue on GitHub, or book a working session and bring the question.

Stay in the loop.

Run the glasses? Leave your email. New feature drops and beta access, nothing else.

Need help with COS? Reach out to dev@gotcos.com.