Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions docs/changes/unreleased/1834-home-hints-match-keys.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
kind: fixed
title: Home's ask-here hints, the pane's box and /help's place numbers say only what the keys do
pr: 1834
surface: [chat, docs]
invalidates:
- "An errand row's foot on home said `enter or tab answer this ask here`, and `tab` there goes to the next place. It says `enter or → answer this ask here`, or `enter answer this ask here · esc clear` over a draft."
- "The manual and home.go called `alt+enter` a second spelling of `ask here` on home. It opens the composer layer and its second press sends a task; `ctrl+enter` is the only ask-here chord, and home's unreachable `alt+enter` arm is gone."
- "At 60 columns the ask-here pane's foot dropped `tab or esc back to the list` first, and with a card up it lost it up to 140 columns. It is the last clause and always kept; `/ commands` is no longer named while the pane has the keyboard."
- "While the ask-here pane held the keyboard its box said home's `type to search or start something new`. It says `type a follow-up`, or `type the change` after `o` on a card."
- "On a phone-width window only `enter` on the row raised an errand's sheet, so after `ask here` typed letters went into a box that was not drawn. The sheet now shows whenever the pane has the keyboard."
- "The manual said home's `←`/`→` cross to the next column. They have not since 2026-09-17: every stop is in the field, `→` opens the row's verbs and `←` closes them."
- "The keys page said home's `ctrl+e` closes a conversation tab and reopens a closed row. Since #1750 it opens the delete confirmation; `enter` reopens a dimmed row."
- "/help said the alt digits run in the tab bar's own order. They follow placeOrder: memory is the fifth word on the bar and `alt+8`. /help now pairs each digit with its place, and the manual no longer says memory is off the bar."
---
12 changes: 4 additions & 8 deletions internal/e2e/tmux_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -496,16 +496,12 @@ func (r *rig) lit(text string) {

// ctrlEnter is `ask here` without leaving the box.
//
// TWO SPELLINGS, BOTH SENT AS THE BYTES A TERMINAL SENDS. home.go binds
// "ctrl+enter" and "alt+enter" to one call and says why: ctrl+enter only
// reaches the app on a terminal that can tell it from a plain enter. Bubble Tea
// v2 asks for the kitty protocol and modifyOtherKeys unconditionally, so
// CSI 13;5u decodes as ctrl+enter — this suite sends that one, and alt+enter
// (ESC CR) is the fallback every terminal delivers.
// IT IS SENT AS THE BYTES A TERMINAL SENDS. ctrl+enter only reaches the app on
// a terminal that can tell it from a plain enter. Bubble Tea v2 asks for the
// kitty protocol and modifyOtherKeys unconditionally, so CSI 13;5u decodes as
// ctrl+enter, which home binds to `ask here`.
func (r *rig) ctrlEnter() { r.lit("\x1b[13;5u") }

func (r *rig) altEnter() { r.lit("\x1b\r") }

// mouseTo moves the pointer to a 1-based cell with an SGR motion report, which
// is what the all-motion mode the app turns on in View() asks for.
func (r *rig) mouseTo(col, row int) {
Expand Down
5 changes: 3 additions & 2 deletions internal/e2e/tuiwords_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -344,8 +344,9 @@ var tuiWords = map[string]tuiWord{
why: "both ways out of the pane, named because on a narrow frame the pane is the whole screen",
},
"homeAnswerHint": {
screen: "enter or tab answer this ",
why: "the hint while the cursor stands on an errand row that is asking something",
screen: "enter or → answer this ",
why: "the hint while the cursor stands on an errand row with an empty box. It said `enter or tab` " +
"until `tab` on the row had long been the next place; `→` is the way into the pane that replaced it",
},
"standRemindYes": {
screen: "Remind me",
Expand Down
89 changes: 69 additions & 20 deletions internal/manual/chat/asking-from-home.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,14 @@ done**. They sit at the very **top of home's `threads` panel**, above every
conversation — an errand is a thing you asked for a minute ago.

`enter` or `→` on the row hands the keyboard to the pane. The hint under the box says so:
`↑↓ move · enter or tab answer this ask here · esc close`. (`tab` on the row was the way in
until the places arrived and took that key for the next place; `→` points at the column the
pane is drawn in, which is where the gesture went.)
`↑↓ move · enter or → answer this ask here · esc close`. With something typed in home's box
it reads `↑↓ move · enter answer this ask here · esc clear` instead, because `→` then moves
the caret and `esc` clears what you typed before it closes anything.

**`tab` on the row is not a way in.** It goes to the next place, as it does on every place.
`tab` was the way in until the places arrived and took that key; `→` points at the column
the pane is drawn in, which is where the gesture went. The hint went on saying
`enter or tab` long after, and it was wrong.

## How do I know ask here is doing something — the spinner, the clock and the live strip

Expand Down Expand Up @@ -182,8 +187,8 @@ it:
in; **`→` on the exchange's row** takes it back in. (Both directions used to be `tab`; a
place's `tab` is the way to the next place, and a box that has taken the keyboard keeps
its own keys, which is why one half of the toggle stayed and the other moved to the arrow
that points at the pane.) It works from
`continue as a conversation` row, an open card. It never loses what is in the pane.
that points at the pane.) It works from the box, the `continue as a conversation` row
and an open card alike. It never loses what is in the pane.
- **`esc`** in the pane hands the keyboard to the list. One layer at a time: if you have
half a follow-up typed, the first `esc` clears that and the second one leaves.
- **`enter`** on the exchange's row in the list hands the keyboard to its pane.
Expand All @@ -198,10 +203,22 @@ column exactly as they do with no exchange on screen, and `enter` opens the row
cursor. **The pane follows the cursor** — walk off the exchange and the row you land on
draws its own card again, where the frame is wide enough to have one.

## What the line under the ask here pane says — the box, the answers, a follow-up and the way back

While the pane has the keyboard the hint reads `enter sends a follow-up · tab or esc back to
the list`, with the card's own answers in front of it when a card is up — or
`1 allow once · 3 deny` when a command is waiting for your ok — and
`↓ continue as a conversation` after it when that row is on screen.
`↓ continue as a conversation` before the way out when that row is on screen. Home's
`/ commands` is not on it: a `/` typed in the pane starts a follow-up and opens no list.
`tab or esc back to the list` is always the last clause, approval or not, and on a narrow
window it is the one that stays (*Ask here on a narrow window*, below) — except while a
change is being typed after `o`, when the line is `type the change and press enter · esc clear`.

**The box above that line says what typing there does**: `› type a follow-up`, and
`› type the change` once `o` on a card has asked for a correction. Home's own
`› type to search or start something new` belongs to home's box and comes back the moment the
list has the keyboard. The pane's box used to wear home's sentence, which promised a search
and a new conversation that typing in the pane does not do.

**The answers in that line are the ones the card actually drew, and never one more.** A
card that offers all three reads
Expand All @@ -225,7 +242,18 @@ of sat side by side:
- the **exchange** is the screen while it holds the keyboard — the same pane, the same card,
the same live strip, drawn at the full width;
- **`esc`** or **`tab`** brings the list back, with the exchange's row still on it wearing
its tail, and **`enter`** on that row opens it again.
its tail, and **`enter`** or **`→`** on that row opens it again.

**The way back is always on the line under the box**, at the narrowest width this layout
has, sixty columns, except while a change is being typed after `o` (that line ends
`esc clear`). `tab or esc back to the list` is the last clause of that line and the
one that stays; the clauses in front of it give way first, nearest first — home's chords
such as `alt+e effort`, then `↓ continue as a conversation`, then `enter sends a follow-up`,
then the card's answers from the last one back — so a card at sixty columns reads
`1 Remind me at 6 today · tab or esc back to the list`, and its other answers are still on
the card's own rows. It used to be the other way round: the way back
was the first thing a narrow window dropped, and the stacked pane, which is the whole
screen, never said how to leave it.

`ask here` itself opens straight into the stacked pane, because it selects the new row and
gives it the keyboard. Everything answers the same keys it answers on a wide frame.
Expand All @@ -234,6 +262,19 @@ Resizing between the two shapes costs nothing: it is the same exchange and the s
keyboard, drawn in whichever geometry fits. Drag a window narrow with the pane open and the
pane fills the frame; drag it wide again and it goes back beside the list.

## Ask here on a phone-width window — the errand is a sheet

Under 60 columns, where home is an inbox, the stacked pane is a **sheet** over the whole
frame: `‹ back` on the top row, the exchange under it, its box, and `‹ back · send · more`
as the bar. **The sheet is up whenever the pane has the keyboard**, so `ask here` opens
straight into it, and so does anything else that hands the pane the keyboard — its chord,
`enter` or `→` on the errand's row. `tab` or `esc` puts the inbox back, with the errand's
row still on it and anything half-typed still in its box.

It used to open on `enter` alone. `ask here` on a phone-width window left the inbox drawn
while the keys went into the pane's box, so what you typed appeared nowhere, under a box
that still said `type to search or start something new`.

## Why can't I click a row while asking — you can, and it opens it

You can, and it does. A click on any row of the list puts the cursor on it, gives
Expand All @@ -246,14 +287,6 @@ A click on one of the card's answers in the pane answers the card, the same way
answers it in a conversation. Each answer owns its whole row, so there is no gap between two
of them to miss.

**There is a chord for it and the foot does not name it.** `ctrl+enter` is still bound to
`ask here`, and it only reaches codeaf on a terminal that can tell it apart from a plain
`enter` — the kitty keyboard protocol, Windows terminals. `alt+enter` is **not** a second
spelling of it: on home as on every place, that chord opens the composer layer and sends
what you typed off as a **task** (the places page). So the arrow is the gesture the foot
names, because the arrow is the one every terminal has. This page used to say `alt+enter` was
bound to the same thing, and it was not.

If this window was launched with no way to open a second session, the row refuses in one
line: `this window cannot ask from home`, and nothing is created. The window that gets that
line is one attached to another machine — `--host` or `--at`: the errand's folder and the
Expand All @@ -262,6 +295,22 @@ them on a server's disk. An ordinary `codeaf` in a folder asks from home whether
project's engine is holding the conversation, because that engine is a process on the same
machine as the folder.

## Is there a shortcut for ask here — ctrl+enter, and what alt+enter does on home

**`ctrl+enter` asks what you typed here without walking to the row**, and the foot does not
name it: it only reaches codeaf on a terminal that can tell it apart from a plain `enter` —
the kitty keyboard protocol, Windows terminals. Elsewhere it usually arrives as a plain
`enter`, which on the typing rows starts a new conversation. So the gesture the foot names
is `↑ ask here`, because every terminal has the arrow.

**`alt+enter` is not a second spelling of it.** On home it opens the **composer layer**,
where you check the project, the model the work runs on and the spending cap; a second
`alt+enter` sends it off as a task, and the task lands as the same kind of `?` row with its
pane, carrying those three settings (the places page). On every other place the chord does
nothing. This page once said `alt+enter` was bound to `ask here` itself, and home's own key
handler listed it beside `ctrl+enter` — but the layer always took the key first, so that
line never ran, and it is gone.

## What is ask here — and how is it different from starting a conversation

They send the same words to the same kind of model. The difference is **what is left behind
Expand Down Expand Up @@ -290,11 +339,11 @@ the pane with your own words, when it would wake, and what it would cost per run
created until you answer it:

- `1` — yes. It stands as proposed, and the keyboard goes back to the list.
- `o` — change it. The pane says `type the change and press enter`; write the correction in
your own words ("make it 8pm", "every weekday") and the model proposes again. Nothing is
created by a change. While you write it every key is text, digits included. (This was `2`
before the card's answers moved onto the question every screen here draws; `o` is that
question's own key for "not as it stands".)
- `o` — change it. The pane says `type the change and press enter` and its box
`type the change`; write the correction in your own words ("make it 8pm", "every
weekday") and the model proposes again. Nothing is created by a change. While you write
it every key is text, digits included. (It was `2`, and this page called it `c` long
after the key became `o`.)
- `3`. Once. The action runs now and nothing standing is created. On a repeating
check the button reads `Only now, don't repeat`. **Not every card offers it**: a
one-off reminder draws no once chip, because doing "remind me at six" now says the
Expand Down
8 changes: 4 additions & 4 deletions internal/manual/chat/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,7 @@ Under the table `/help` prints the keys that have no slash command, including
rows, directly under the `tab` row:

```
alt+1…8 go to a place · established shortcut order: home · AI teams · chats · activity · spend · settings · standing · memory
alt+1…8 go to a place · 1 home · 2 AI teams · 3 chats · 4 activity · 5 spend · 6 settings · 7 standing · 8 memory
alt+. on a place: what else is here · every key that place has, drawn
on a place, tab is the next place · esc back
```
Expand Down Expand Up @@ -1299,7 +1299,7 @@ box, opens it on a one-conversation machine and on an empty one alike, and over
it opens the far machine's.

There is no argument form. There are three other ways in: **`alt+1`**, home being the first
of the six words on the tab bar; **`space` twice** on an empty box; and **`tab`** from any
of the seven words on the tab bar; **`space` twice** on an empty box; and **`tab`** from any
other place.

**It is seven panels**, in one column under 110 cells, two from 110 and three from 170,
Expand All @@ -1313,8 +1313,8 @@ at the left, and the **rail** at the right holds `projects` and `spend` at its t
quiet panels under them. An empty panel keeps its heading and one dim line naming what
arrives there.

`↑`/`↓` walk a column, `←`/`→` cross columns, `enter` opens, `esc` closes back into the
conversation you came from. **Typing does two things at once**: what you type is a new
`↑`/`↓` walk the field, `→` opens a row's verbs and `←` closes them (no arrow crosses
columns), `enter` opens, `esc` closes back into the conversation you came from. **Typing does two things at once**: what you type is a new
conversation waiting to be sent AND a live search over every project on the machine — the
panels give way to the matches, with `start a new conversation: "…"` directly above the box
holding the cursor, so type-and-enter still starts a chat. **A line that starts with `/` is
Expand Down
Loading
Loading