---
name: spt-shell-send-takes-arg-not-stdin
description: "spt shell send reads its payload as a CLI ARG, not stdin — a piped payload is silently ignored while --file still stages, so the verb you thought you sent never fired"
metadata: 
  node_type: memory
  type: feedback
  originSessionId: f9ff00da-3693-48bc-96be-b7ae5cb8fb67
  modified: 2026-08-07T01:40:57.451Z
---

`spt shell send <ref> [text] [--file <path>]` takes the payload as an **argument**. Piping the payload (`printf ... | spt shell send alchemy-0 --file x`) does NOT error when `--file` is present: the file stages successfully (ack arrives), the piped verb+title is **silently discarded**, and the create/comment you believe is in flight never fired. Without `--file` the same pipe at least fails loudly (`USAGE: shell send <ref> [text]`, exit 2).

**Why:** the stage-ack reads like progress, so the missing create-ack is easy to read as latency. Caught 2026-08-04 only because the ack said "your NEXT create reads its text" — future tense.

**How to apply:** always pass the payload as one quoted argument with embedded newlines (`spt shell send alchemy-0 "create --type bugfix\n<title>"` shape — real newlines in the quoted string, `$body` var expansion works). `spt send` (agent messages) is the opposite: stdin. Two send verbs, two conventions — don't transfer either habit. If an alchemy write-verb ack has not arrived, the verb did not run; re-send the text arg (a staged file survives for the next create/comment).

**Second face (paid 2026-08-06): staging is a persistent QUEUE, not a slot.** A `--file` whose text begins with verb lines does NOT execute them — the whole file stages as body-material for the next create/comment. Multiple stages ACCUMULATE, and the queue survives a REFUSED create (the 1600-char body cap refuses, not truncates — my create failed at 4019 then 4355 chars as the queue glued three stale drafts onto every attempt). There is no unstage verb. **Flush:** a `comment #N` consumes the whole queue as ATTACHMENTS (never body) — burn it on one of your own requests with a self-documenting "disregard attachments" note, then mint clean. Correct flow for a long filing: text-arg create with the ask (<1600), then text-arg `comment #N` with the analysis (comments uncapped).

Kin: [[send-body-from-file-not-inline]] (spt send), [[exit-code-after-a-pipe-is-the-tails]].


**alchemy `comment` shape, two refusals in one post (doyle 2026-09-09 06:45Z, #272 r3):** (1) a ` -- ` INSIDE the body is parsed as a flag (`error: unknown flag --`); strip double dashes from prose before sending. (2) the verb takes ONE positional: line 1 = `comment #272` alone, the body starts on line 2 (`error: comment takes 1 positional arg (got 'Golden')`); a body on the same line as the verb is read as extra positionals. Compose the payload as a file whose first line is the bare verb, then `spt shell send alchemy-0 "$(cat file)"`.
