The ?? Syntax

Inline intent → editable text → you stay in control. Hash never executes without your approval.

Three patterns

1. Full command generation

?? <prompt>

?? find all Go files modified today
# → find . -name "*.go" -mtime 0

2. Pipe transforms

cmd | ?? <prompt>

cat logs.txt | ?? summarize failure
# → Analysis: Connection refused on port 80...

3. Inline fill

cmd ?? <prompt> or --flag=?? <prompt>

git log --format=?? oneline with hash
# → git log --format="%h %s"

find . -name ?? all test files
# → find . -name "*_test.go"

Turn-by-turn conversations

A full ?? <prompt> request doesn't have to end after one answer. When the agent's response ends in a question, Hash automatically opens a conversation prompt so you can reply:

?? help me pick a postgres index for this query

Is the query mostly reads, or does the table also see heavy writes?

╭─ conversation Enter sends · Esc/Ctrl+C leaves · /exit ends
│ you › mostly reads, writes are batched at night
│ agent › Then a covering index fits: CREATE INDEX ... ON orders (user_id, created_at)

Each reply is sent as a new turn in the same agent session, so the agent keeps its context. You can also redirect mid-conversation ("pause that and list my kubernetes contexts"), and the agent can request tool calls as usual.

Replying when there's no question

If the response doesn't end in a question, Hash shows the normal confirmation hints with a reply action: [Enter: done] [Tab: copy] [r: reply] [Esc: cancel]. Press r to continue the conversation anyway.

Leaving a conversation

  • Press Esc or Ctrl+C, or submit an empty line
  • Type /exit
  • Natural exits work too: "done", "quit", "that's all", "never mind"

Command suggestions still go through the run/edit/cancel flow, and pipe transforms (cmd | ??) stay single-turn.

Detection order

  1. ?? at line start → full command
  2. | ?? (pipe with space) → pipe transform
  3. |?? (pipe no space) → pipe transform
  4. ?? mid-line → inline completion
  5. ?? after text (like =??) → inline completion

When NOT to use ??

  • For simple commands you know — just type them
  • When offline with no local agent configured
  • For destructive commands — always review carefully