truffile convo uses one-shot mode: the
command performs the request, writes its result, and exits. A prompt without a
target creates a new side thread on first send. Use --main only when the user
explicitly wants Main.
Prompt sources and targets
Positional text,--prompt-file, and --stdin may be combined; Truffile joins
their non-empty contents with blank lines. With piped stdin and no positional
or file prompt, stdin is read automatically.
The target flags are mutually exclusive. Omitting all of them selects a new
side-thread draft.
--thread title matching is case-insensitive and must be
unambiguous.
Actions and output controls
Without
--json, final response content goes to stdout. Diagnostics, durable
thinking requested by --show-thinking, and text-mode errors go to stderr.
Use --json --quiet when another program will parse stdout.
--timeout is opt-in. When it expires, Truffile requests an interrupt, emits
the durable result it has, marks it timed out, and exits 124.
JSON contracts
Turn result
thinking and tool_calls are arrays when present. status can be ok,
error, interaction_required, interrupted, timeout, or fence_lost.
Setup, OAuth, and action nodes that need a supported client set
pending_user_response and return interaction_required.
Thread list
tasks alias contains the same rows as threads.
History
Local hide and restore
thread_id, title, and backend. Interrupt returns
thread_id and interrupted: true. App listing returns an apps array whose
rows contain name, bundle_id, and uuid. JSON failures contain backend,
device, status, and error when those values are available.
Exit codes
If exit code
75 is returned, do not retry or resend automatically. Durable
output was retained, but the lost completion fence means the caller cannot
prove that the original turn finished.
Compatibility aliases and Task cutoff
--task-id, --list-tasks, /tasks, and the task_id JSON key are
one-release compatibility aliases. Their values are decimal Convo thread IDs;
they do not expose the retired Task backend. /resume and /switch are also
temporary interactive spellings for the Convo thread picker.
A legacy Task UUID fails with this migration error:
--app and dynamic /<app> requests
fail, interactive /apps does not exist, and no app is attached or restricted.
Use truffile convo --list-apps or truffile list apps for discovery only.
