Repository navigation
v0.2.0
A redesigned overlay, a two-way loop with your agent (per-note results, questions, replies), Sends
from a physical iPhone, and a launcher pill that narrates each Send and keeps off your app's bars.
Added
- Agent loop:
annotation_waitMCP tool: blocks until you Send or answer a question, batches for 10 s and
returns everything, so delivery is hands-free in Cursor, Codex, the Claude desktop app or any
MCP client, with no channels.- Per-note results:
annotation_resolve/annotation_dismiss(CLI:annotate resolve|dismiss <id> <pin> "…"). Each sent pin's badge spins while the agent has it, then shows a check,?
or ×. - Questions: the agent asks about one note with
annotation_ask/annotate askand waits.
You answer on the device from the notes sheet; the reply is saved toreplies.jsonand travels
back from a device too. - Intent per note (Fix or Question) on a chip in the comment card; prompts tag Question notes.
AnnotateOptions.promptDetail:.compact,.standardor.detailed.
- Sends from a physical iPhone or iPad reach your agent with no setup in the app (no network
permission, no Info.plist keys).annotate mcp,watchandruncopy each new bundle from a
paired device's development build over the developer connection (devicectl, USB or Wi-Fi), and
copy status back so the device narrates too. A Send reaches the checkout its build came from, so
two worktrees each get their own.--no-deviceturns this off. - Notes sheet ("My Notes"): the review bar's count opens it. It lists unsent notes (tap to
open, swipe to delete, Clear All) and every Send of the last 48 hours with each note's result
and Reply, filtered by Current, In Progress, Resolved and Failed tags. - Launcher pill: it narrates the last Send in place of the delivery ring and toasts ("4 notes
sent", then each stage the agent reports), and its dot always shows the connection: green while an
agent listens, yellow while its heartbeat is late, red when nothing does. - Launcher collision avoidance: the idle pill keeps off the app's own bottom chrome (tab bars,
toolbars, text inputs, controls outside scroll views, a container's reserved bottom safe area),
lifting above it or moving to a side. A dragged pill stays put, and the keyboard dock still wins. .annotateAvoid(): tags a view the launcher should keep off, for bars SwiftUI draws itself.
An empty stub in Release.- npm package
annotate-ios:npx -y annotate-ios mcpruns the MCP server with nothing
installed; it downloads the release's checksum-verified binary on first run (macOS). - Reference images: the paperclip attaches up to 4 photos per note
(attachments/<pin>-<n>.jpg, listed inprompt.md). - Pins follow scrolled content: back in annotate mode after scrolling, pins move with the scroll
view's content; pins scrolled out of view come back with it. - Agent presence: every
annotateprocess writes a heartbeat to.annotate/agents/, merged
into.annotate/agent.jsonfor the app. - Haptics on every delivery stage: a tick while a Send moves along, success when it's done, a warning
for a question or an unclaimed Send, an error when it failed. SCHEMA.mddocuments every file the app and agents exchange. Schema additions (still v1):
Annotation.intent,Annotation.attachments,SessionStatus.pins,AppInfo.installFile,
replies.json; pins of any kind can carrysketchstrokes.
Changed
- Redesigned overlay. Annotate mode dims the frozen screen and draws a slowly drifting blue edge
glow, which turns green while the agent works. Liquid Glass bottom chrome, Reduce Motion
respected throughout.- Draw, tap or hold: drawing is the default (a white pen, and further strokes join the open
note), a tap selects the element under your finger, and holding drops a spot. - Comment card: docks to the keyboard, with undo and redo for strokes (
⇧⌘Zredoes), a
quote of the selected element's text, the intent chip and ↑. Return types a newline. - Review bar: back, the note count and ↑ in one glass group, with a hint line above it that
starts on the gestures, then shows the connection and narrates each Send with a timer. - Send keeps annotate mode open, with the sent notes and their progress on the frozen screen.
- Draw, tap or hold: drawing is the default (a white pen, and further strokes join the open
- On iOS 26 the overlay's glass materializes in and out; before iOS 26 the bar and cards slide.
- The launcher pill is Liquid Glass and fades in once the app's first screen settles.
- Bundle images keep blue and red markers for contrast, with 4pt strokes, and a crop covers the
note's drawing as well as its frame.
Removed
- The toolbar and its hint, the draw toggle, region dragging, the shape tools, in-place text
retyping, the selection chip and "Send and keep annotating" (keyboard shortcuts stay). - The delivery ring and toasts (the launcher pill narrates instead) and the results card (the notes
sheet lists results). - The Move intent; a saved
moveloads as Fix.
Fixed
- The plugin launcher (
bin/annotate) resolves symlinks before skipping itself on PATH, so a
linked copy (as npm installs it) can't exec itself in a loop. annotate mcpno longer swallows Sends. Claude Code drops channel events silently without
channels enabled, yet each session was marked delivered: a push now counts only once Claude acts
on it, an unanswered push is handed back after 45 s, and other MCP clients no longer get sessions
claimed on their behalf.- Pins disappeared after leaving annotate mode and coming back to the same screen.
- Drawing at the screen's edge shifted the whole overlay sideways, and a thin stroke there sent its
badge to the bottom-trailing corner. - After a relaunch mid-delivery (an agent reinstalling the app to show its change), the pill picks
the newest Send's narration back up, so "Done" still shows. - Return in the comment only closed the keyboard on iOS 26.
- The comment card's placement went stale after the photo picker.
- On iOS 27 devices a tap on the intent menu could be taken by the drawing gesture; the menu is now
drawn inside the overlay.