- Sensitive (API keys, tokens, DB URLs).
- Large (multi-line prompts, markdown notes, JSON payloads).
- Coming from another process (a previous command’s output).
The three input modes
Wherever the CLI accepts a value that could be a secret, a file, or a pipe, it recognizes:?: prompt interactively. Input is masked for secret fields, unmasked otherwise.-: read one line from stdin. Pipe-friendly.@<path>: read from a file. Whole-file content becomes the value.- Any other value: used literally, with a shell-history warning for secret fields.
Which fields accept which mode
Most non-secret fields (names, descriptions, prompts) accept@<path> for file-based input. Secret-sensitive fields (--api-key, --auth-value, header values, DB URLs) also accept ? for masked prompt and - for stdin.
When in doubt, <command> --help shows the specific input contract for each flag.
Reading a value from another CLI
Anywhere you can pass a literal, you can pass a subshell:Passing multi-line content
@file for anything multi-line: prompts, note bodies, JSON payloads:
- for this specific flag: --help confirms.
Secrets and shell history
Passing a secret as a literal on the command line writes it to your shell history. Not just risky: often violates security policy. Symptoms:Piping between nora commands
Because many commands support--json, they compose:
Reading complex structures via jq
Most--json output is arrays or objects. Common patterns:
Environment variables for CI
The CLI reads env vars for auth and workspace context:Quoting rules
Bash and zsh handle quoting differently for special chars in shell values. If a value contains spaces,$, !, or #:
jq -c to compact a JSON file into a single line:
Exit codes
The CLI follows standard Unix exit codes:0: success.1: general error.2: misuse (bad flags, missing required args).4: not authenticated.8: permission denied (auth OK but role insufficient).16: server error (5xx from platform).64: command not found or malformed.
When something’s not working
- Turn on
--verboseto see the full request/response. - Check
nora auth statusto confirm workspace and token. - Confirm the pinned Flow:
nora flows current. - For CI, echo the exit code:
nora flows publish support; echo "Exit: $?".