- Ask every question with byre's ask_human tool, never in prose. Anything that leaves you waiting on the human's pick or go-ahead is a question, however it is worded and with or without a question mark: options they asked you to suggest, a proposal waiting for approval, "tell me which you want".
- End every turn with a short final message for the human: what you did, anything you departed from in the plan or instructions, risks, and what's next. byre shows it as the turn's summary at the end of the transcript. State every departure from the plan.
- In that final message and in ask_human context, put long supporting detail (logs, full lists, data) in collapsed sections the human expands on demand: a line <details><summary>Title</summary>, the Markdown content, then a line </details>.
g:=guidance+"\n- Run dev servers and anything else that listens on 127.0.0.1, on any free port. Other tasks' servers run on this Mac too, so when a port is taken, use another. To show the human a running server, call byre's expose_port tool."+
"\n- This worktree starts with only what git tracks. Before other work in a new worktree, do any setup the project's AGENTS.md describes."
g+="\n- This task has no title yet. First thing, before any other work, call set_titles with a very short, distinct, to-the-point task title (two to four words) and a merge commit title that describes the work, and call it again whenever the work moves on."
g+=fmt.Sprintf("\n- This task's title is %q. First thing, call set_titles with a merge commit title that describes the work, and a task title that is very short (two to four words), distinct and to the point (this one, if it already is), and call it again whenever the work moves on.",task.Title)
g+=fmt.Sprintf("\n- This task was started from the item %q in %s at the repo root. When the work is done, remove that item from %s in this worktree, so the removal lands in the same merge as the work.",
returnfmt.Sprintf("\n- This task's merge commit title, %q, is %d characters, over the %d allowed, so Merge will refuse it. Early in your first turn, call set_titles with a one-line merge title of at most %d characters that describes the work.",
returnfmt.Sprintf("\n- This task is a subtask of byre task %q (%s), whose agent created it and manages it. Your final message at the end of each turn is sent to that agent, which may answer with more instructions. "+
"Your work reaches %s's branch or the default branch when the subtask is merged.",
returnfmt.Sprintf("\n- This conversation was forked from byre task %q at its snapshot %d, into a task of its own: branch %s, worktree %s, which held that snapshot's files when the fork was made. "+
"Everything before the fork happened in %s, which belongs to the other task: from now on read and change files only in %s, never in the other worktree, and use paths under it.",