Weekly recap
Opal · Hermes · Mar 30 – Apr 5
Product · Design · Prototype · Infra

Everything we shipped last week.

Seven workstreams across Opal and Hermes. The throughline: make everything more concrete, more embodied, and more obviously real. Screenshots below.

7 workstreams
5 live prototypes
14 screenshots
2 iOS apps
02 · Onboarding

A stronger soul — and a clearer usability problem.

We audited the chat-onboarding prototype, pushed it toward an ancient-tech / Sheikah direction, then pressure-tested it through a Sally walkthrough. The aesthetic got more distinctive; the practical gaps also got easier to name.

What landed

  • Chat is good for compressing boring intake steps.
  • Full-screen beats work better for permission asks, reveals, and the "pact" moment.
  • The oracular / artifact framing makes Opal feel singular vs. standard SaaS.

What broke through

  • Mythology is memorable, but practical users need product value earlier.
  • Family / kids device setup flow is the biggest missing piece.
  • ~17 screens in one version — real drop-off risk.
03 · iOS vs Android parity

Real product drift.

Cross-platform Figma audit showed iOS materially further ahead in onboarding, settings, and core surfaces.

Largest gaps

  • Onboarding and Autofocus significantly more mature on iOS.
  • Settings, Rules, Apps, Profile, Stats, Timer showed structural mismatch.
  • Some differences were IA/product differences, not design tokens.

Why it matters

  • Harder to talk about "the product" as one coherent system.
  • Autofocus is a clear parity watchpoint.
04 · Opal Focus v2

The model should actually see the page.

Autofocus simplified into screenshot-driven inference. Vision-based is the real unlock.

What's running

  • Worker: opal-focus-v2-worker.anton-6cb.workers.dev
  • Model: x-ai/grok-4.20-beta via OpenRouter
  • Pipeline: blur, meme detection, allowlist, pre-viewport, per-platform rules

Direction

  • Keep distraction-removal as foundation.
  • Make Autofocus LLM-native and screenshot-aware.
  • Vision-based inference = the real unlock.
05 · OpalOS Android

Demo-able. Not yet daily-drivable.

The prototype runs in the Android emulator with four modes (Utility, Entertainment, Focus, Sleep), an agent chat wired to OpenRouter with vision support, and a glowing gem orb UI. But overlay loops and incomplete image wiring block real use.

What advanced

  • Builds, installs, launches in Android emulator.
  • Four modes: Utility, Entertainment, Focus, Sleep.
  • Agent chat wired to OpenRouter with vision support.
  • Image attach button added to agent chat UI.

Current rough edges

  • Overlay persistence and app reopen loops are blockers.
  • Image sending: backend exists, frontend picker missing.
  • Java 17 setup was needed for builds.
  • Demo-able but not frictionless for daily use.
OpalOS Android — Utility mode
06 · Hermes Sovereign (iOS)

Embedded agent. No server required.

Python 3.13 runtime bundled inside a native Swift app via PythonAppleSupport xcframework. SwiftTerm provides the terminal UI. Hermes agent source ships in the app bundle. The bridge mediates between Swift and Python.

Architecture

  • Embedded Python 3.13 via Python.xcframework
  • SwiftTerm for terminal UI + custom keyboard bar
  • Hermes agent bundled at Resources/EmbeddedPython/app/hermes-agent/
  • Bridge: sovereign_hermes_bridge.py
SwiftUI Python 3.13 SwiftTerm XcodeGen

This week

  • Task 3: Designed sandboxed Hermes home/workspace seeding. SovereignBootstrap.swift spec done.
  • Task 4: vendor-hermes-minimal-deps.sh wires openai, anthropic, pydantic, rich, httpx. Host-only validation.
  • Blockers identified: pydantic_core, jiter, pyyaml, markupsafe, charset_normalizer — macOS .so files that can't ship on iOS.
  • App builds and runs in iOS simulator.

Unresolved

  • site-packages-ios-sim/ and site-packages-ios-device/ are placeholder .keep files
  • No iOS-compiled Python packages yet — host validation only
  • Bootstrap wiring not yet applied to ProjectSovereignApp.swift
  • Task 3 designed but not implemented in code
07 · Hermes Tabs (iOS)

Tab-per-conversation chat client for Hermes.

Native SwiftUI app. Each tab is a conversation. Streams responses from the public Hermes proxy. Like Safari, but each window talks to the agent.

Architecture

  • Native SwiftUI, iOS 17+
  • POST /v1/chat/completions with SSE streaming
  • Endpoint: opal-agent.decemberclaw.com
  • Local persistence: Application Support/HermesTabs/state.json
SwiftUI SSE streaming iOS 17

Known issues

  • Jank: Draft text bound to @Published store on every keystroke. Fix: local @State in composer view.
  • Composer oversized: TextEditor → TextField with .lineLimit(1...4)
  • Tab close: Detached sibling button, not Safari-like integrated X
  • Tabs = local history only. Path: migrate to /v1/responses with conversation param
  • Image upload blocked — not supported through Hermes API yet
08 · Throughlines

The week's learnings, compressed.

01 Make Sally the user, not just the subject. That insight sharpened both Home Journey and onboarding critique.
02 Myth only works if utility lands fast. The Sheikah direction is strong, but it can't obscure what Opal actually does.
03 Platform drift is product drift. iOS/Android gaps are structural enough to matter strategically.
04 Autofocus should see the page. Screenshot-aware is the real unlock, not just metadata-aware.
05 Two iOS paths diverging. Sovereign = embedded agent, full terminal, no server. Tabs = thin client, chat UI, API-backed. Both real. Both have open questions.
06 OpalOS is demo-able but not daily-drivable. The Android prototype runs, the agent chats, but overlay loops and incomplete image wiring block real use.