Composer · final review

Round 3. Locked: W2 field width, S4 micro labels on the shield and the effort meter, R1 cycle everything, P2 picker. No bubble: tap cycles, hold opens the menu. Open: V1 icons vs V3 words (both get built, switchable in Settings), and how V1 stops crowding the field.

Every phone is live. Tap +, the logo, the meter, and the shield. Hold the meter or the shield for its menu. Notes go in the box under each section, then Copy feedback gathers them.

Theme
Controls
Field width (V1)
Safe area

Field width · keeping V1's icons from crowding the text

The problem: + │ field │ logo │ meter │ shield │ send leaves the text about 120px, so a sentence wraps into a narrow column, and "Reply to steer…" gets cut off. Three fixes, each shown in the cases that broke. All three follow one rule: text that can't fit on one line always gets the full width. The captions show each composer's measured height, so you can compare the cost.

The Field width choice in the top bar also drives all 25 states below. V3 follows the same rule automatically, which matters when stop and send both show.

My pick
W2. It costs nothing when idle, and your text gets the full width the moment it needs it. The grey placeholder can never be cut off, because "doesn't fit" is measured, not guessed. ChatGPT's iPhone app does the same, so it already feels familiar.
Runner-up
W1 if the one-time jump in W2 bothers you. It's calmer and simpler to build, and it's always 34px taller.
Build note
W2 measures with the real text box, which is cheap, but it needs one check on every keystroke and on resize.

V1 icons and V3 words · switchable in Settings

Both get built, so you can live with each before deciding. The setting sits under Settings › Composer, and the mock on the right really switches this page.

V3 gotcha
The words sit near the home-bar swipe zone. Taps work, but an upward flick from that row goes home. Fine for settings. Send and stop stay out of it.

Shield and effort · micro labels, tap to cycle, hold for the menu

Each mode has its own colour and word. Only Ask is grey, so any colour means "not the default". The approvals menu and desktop chip use the glyph shield instead, since a text label already sits beside it.

Order
Plan → Ask → Edits → Auto → Full access → Never ask. OpenCode cycles only Ask → Edits → Full access.
Risk
One stray tap from Auto lands on Full access. You picked this knowingly. The red shield and its FULL label make it obvious, and one more tap moves on to Never ask.

Picker · P2 drill-down, pick effort directly

Effort shows every level the model has, xhigh included, and you tap the one you want. Context, with only two sizes, toggles in place. Harness and Model drill in because they're real lists. The OpenCode logo is now the real mark from opencode.ai.

The final composer · every state

All 25 states plus 2 extras, built from your picks and the top bar's Controls and Field width choices.

All picks

Live status
A1 header inside the composer while it works
Goal
Goal paused in violet in the header (orange shown as an extra) · B5 subtitle under the title · B2 violet border · B5 details pull down, with C5 check history
Controls
V1 icons and V3 words, both built, switchable in Settings
Effort
Five-bar meter with an S4-style micro label (low, med, high, xhigh, max), tap to cycle, hold for the effort menu
Context warning
User setting: 60 / 70 / 80 / 90% or Never. Drives the Compact bar and the amber %
Approvals
S4 micro-label shield, R1 cycle everything, hold for the A4 menu
Field width
W2 two rows only when the text or placeholder won't fit
Harness & model
In the composer, opening the P2 drill-down: pick effort directly (all 5 levels), context toggles in place
Add-ons
B1 Set goal tile · C4 violet send on /goal · A2 outcome stays visible
B5 crowding. The title opens conduit's title menu (with Views). The goal line under it is its own tap target. The top bar grows about 16px, only while a goal exists.

Copy this and paste it back to me: