galaxyproject / galaxyproject/loom

Orbit: agent asks "Shall I proceed?" instead of pointing at the plan card's Approve/Edit/Reject buttons

Open
#400 0 comments 1 reaction 0 assignees View on GitHub
enhancement
Dominant language
TypeScript
Stars
14
Forks
12
Avg merge
6d 5h
Merged PRs (30d)
17

Description

**Reported via beta feedback (v0.5.1, Linux).**

The agent proposed a plan, and Orbit rendered it as a plan draft card with **Approve / Edit / Reject** buttons -- but the agent's prose ignored the card entirely and closed with "Shall I proceed with the plan?". The user is left with two competing affordances (type "yes", or click a button) and no signal about which one the app actually wants.

**Why it happens:** `extensions/loom/context.ts` tells the model that the buttons exist ("Orbit renders ```plan fences as an interactive card with Approve / Edit / Reject buttons"), but the approval-gate guidance right below it is written entirely in terms of typed replies -- "The user must signal approval with words like 'yes', 'go', 'approve'...". Nothing steers the closing sentence toward the card, so the model defaults to conversational phrasing.

There's also a plain-drift problem: the card is attached to the fence, so once a long plan scrolls past, the buttons scroll away with it and the user has no way back to them short of scrolling.

**The ask:** make the plan-approval interaction structurally consistent instead of leaving it to the model's phrasing. Two directions, not mutually exclusive:

1. **Shell-side (preferred, and shell-neutral for the brain):** when a message contains a plan card, Orbit always renders the action row -- Approve / Edit / Reject plus a **"Scroll to plan"** button -- pinned at the end of that message (or sticky while the plan is the open gate). The affordance stops depending on what the model chose to say.
2. **Prompt-side nudge:** in the plan-lifecycle block in `context.ts`, steer the closing line to point at the card ("use the Approve / Edit / Reject buttons below") rather than asking an open question. Should stay conditional on a UI shell being present so the CLI wording doesn't reference buttons that don't exist there.

Typed approval should keep working either way -- this is about making the buttons the obvious path, not the only one.

_(Beta tester feedback; details anonymized.)_

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with extensions/loom/context.ts and trace where plan fences become interactive cards and where the approval-gate guidance is assembled. Compare the shell-side action-row request with the conditional prompt-side wording, then verify that Approve, Edit, Reject, Scroll to plan, and typed approval remain available without making CLI text reference unavailable buttons.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
ai, frontend
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.