diff --git a/docs/tui.md b/docs/tui.md index 9907d5f1..ec07bb7d 100644 --- a/docs/tui.md +++ b/docs/tui.md @@ -136,9 +136,9 @@ instead of failing silently; `Enter` and `1-9` keep working. ### `p` sends exactly one line -The composer is a single line by design, ending in a carriage return: that is the -input contract every Codeman path follows, because multi-line text breaks the -agent's own composer. Pasted newlines become spaces rather than being rejected, so +The composer is a single line by design, ending in a carriage return, because the +server's submit check cannot reliably recognise a multi-line paste: a prompt it cannot +see on the composer line is not re-submitted when the agent ignored the first Enter. Pasted newlines become spaces rather than being rejected, so a paste cannot silently run a different command than the one you read. ## Answering approvals diff --git a/plugins/codeman/skills/codeman/reference/verbs.md b/plugins/codeman/skills/codeman/reference/verbs.md index cda70197..a4f43d5a 100644 --- a/plugins/codeman/skills/codeman/reference/verbs.md +++ b/plugins/codeman/skills/codeman/reference/verbs.md @@ -304,7 +304,11 @@ Codeman types the text and sends Enter **only when the input contains a carriage return**; without it your command sits unsubmitted on the worker's prompt and everything downstream times out. No response field catches this: `delivered:true` means "written to the pane", **not** "submitted". With `useMux`, newlines are kept: the -text goes in as one paste, and the `\r` submits all of it. Build the body with `jq -n` +text goes in as one paste, and the `\r` submits all of it. **`sendwait` takes one line, +though:** its Enter loop and the server's submit check cannot reliably recognise a +multi-line paste, so a multi-line prompt to a freshly spawned worker can sit unsent in +Claude Code's Enter-ignore window. Join the lines, or put long multi-line content in a +file ([§5.9](#59-big-input-via-the-workspace)). Build the body with `jq -n` for any prompt you did not author as a literal, because the inline `-d '{"input":"'"$P"'\r"}'` pattern breaks on the first double quote, backslash or `$` in a real prompt: diff --git a/skills/codeman/reference/verbs.md b/skills/codeman/reference/verbs.md index cda70197..a4f43d5a 100644 --- a/skills/codeman/reference/verbs.md +++ b/skills/codeman/reference/verbs.md @@ -304,7 +304,11 @@ Codeman types the text and sends Enter **only when the input contains a carriage return**; without it your command sits unsubmitted on the worker's prompt and everything downstream times out. No response field catches this: `delivered:true` means "written to the pane", **not** "submitted". With `useMux`, newlines are kept: the -text goes in as one paste, and the `\r` submits all of it. Build the body with `jq -n` +text goes in as one paste, and the `\r` submits all of it. **`sendwait` takes one line, +though:** its Enter loop and the server's submit check cannot reliably recognise a +multi-line paste, so a multi-line prompt to a freshly spawned worker can sit unsent in +Claude Code's Enter-ignore window. Join the lines, or put long multi-line content in a +file ([§5.9](#59-big-input-via-the-workspace)). Build the body with `jq -n` for any prompt you did not author as a literal, because the inline `-d '{"input":"'"$P"'\r"}'` pattern breaks on the first double quote, backslash or `$` in a real prompt: