# CLI Reference
## Shortest Useful Command
```bash
go run ./cmd/scriptorium render \
--config ./examples/config.yml \
--prompt generic.markdown_summary \
--input transcript=./examples/fixtures/transcript.md \
--input glossary=./examples/fixtures/glossary.yml
```
`render` prepares the prompt, loads input artifacts, resolves the execution
profile, and prints the prepared request without calling an LLM.
## Command Overview
- `scriptorium run`: prepare a prompt, call the configured LLM, write generated output, and print a run summary.
- `scriptorium render`: prepare a prompt only; write prepared-run output as `text` or `json`.
- `scriptorium serve`: start the HTTP server for `POST /v1/runs`.
Canonical related references:
- [Configuration reference](config.md)
- [HTTP API reference](api.md)
- [Subprocess integration](integrations/subprocess.md)
## Common Rules
- `--config` is supported by `run`, `render`, and `serve`.
- Positional arguments are rejected.
- `run` and `render` require `--prompt`, at least one `--input`, and an effective `prompt_dir`.
- `serve` requires an effective `prompt_dir`.
- `profile_dir` is optional. Without it, only built-in profiles are available.
- If `profile_dir` is set, custom profiles override built-in profiles with the same ID.
- Prompt cache control, `session_id`, structured output, and provider-specific profile fields are configured in YAML, not with CLI flags.
Config precedence is:
1. built-in defaults
2. config file values
3. CLI flags
## Flag Reference
### `scriptorium run`
```bash
scriptorium run [flags]
```
Required through flags or config:
- `--prompt-dir
`: prompt definition directory.
Required as flags:
- `--prompt `: prompt ID to execute.
- `--input name=path`: input file mapping. Repeat or use comma-separated mappings.
Optional flags:
- `--config `: application config file.
- `--profile-dir `: custom profile definition directory.
- `--schema-dir `: schema base directory for `json_schema` validation.
- `--profile `: execution profile override. If omitted, the prompt `default_profile` is used.
- `--var name=value`: template variable mapping. Repeat or use comma-separated mappings.
- `--out `: write generated artifact body to a file instead of stdout.
- `--llm-base-url `: runtime endpoint override.
- `--model `: runtime model override.
- `--api-key-env `: runtime API-key environment variable name override.
- `--temperature `: runtime temperature override.
- `--max-tokens `: runtime max tokens override.
- `--top-p `: runtime top-p override.
- `--timeout `: runtime timeout override using Go duration syntax, such as `30s` or `2m`.
Deprecated aliases:
- `--prompt-id `: alias for `--prompt`.
- `--profile-id `: alias for `--profile`.
Runtime override notes:
- Omitted numeric override flags preserve the selected profile/default value.
- Explicit zero values override the selected profile/default value.
- `--timeout 0s` disables the outbound HTTP client timeout for that request.
- There is no raw API-key flag; use `--api-key-env`.
### `scriptorium render`
```bash
scriptorium render [flags]
```
Required through flags or config:
- `--prompt-dir `: prompt definition directory.
Required as flags:
- `--prompt `: prompt ID to render.
- `--input name=path`: input file mapping. Repeat or use comma-separated mappings.
Optional flags:
- `--config `: application config file.
- `--prompt-dir `: prompt definition directory.
- `--profile-dir `: custom profile definition directory.
- `--profile `: execution profile override.
- `--var name=value`: template variable mapping. Repeat or use comma-separated mappings.
- `--out `: write prepared-run output to a file instead of stdout.
- `--llm-base-url `: runtime endpoint override for the prepared request.
- `--model `: runtime model override for the prepared request.
- `--api-key-env `: runtime API-key environment variable name override.
- `--temperature `: runtime temperature override.
- `--max-tokens `: runtime max tokens override.
- `--top-p `: runtime top-p override.
- `--timeout `: runtime timeout override using Go duration syntax.
- `--format text|json`: prepared-run output format. Defaults to config `defaults.render_format`, then `text`.
Deprecated aliases:
- `--prompt-id `: alias for `--prompt`.
- `--profile-id `: alias for `--profile`.
Notes:
- `render` resolves profiles, loads schemas for `json_schema` prompts, and validates `api_key_env`.
- `render` does not accept `--schema-dir`; use config `schema_dir` for render-time schema lookup.
- `render` does not call the LLM.
### `scriptorium serve`
```bash
scriptorium serve [flags]
```
Required through flags or config:
- `--prompt-dir `: prompt definition directory.
Optional flags:
- `--config `: application config file.
- `--addr `: HTTP listen address.
- `--prompt-dir `: prompt definition directory.
- `--profile-dir `: custom profile definition directory.
- `--schema-dir `: schema base directory for `json_schema` validation.
- `--artifact-root `: base directory for HTTP `file` input references.
- `--max-request-bytes `: maximum HTTP request body bytes; `0` disables the limit.
- `--max-artifact-bytes `: maximum HTTP file artifact bytes; `0` disables the limit.
- `--max-response-bytes `: maximum encoded HTTP response body bytes; `0` disables the limit.
Notes:
- `serve` does not accept runtime model override flags such as `--model` or `--llm-base-url`.
- HTTP request fields and error codes are documented in the [HTTP API reference](api.md).
- HTTP `file` input references are rejected unless an artifact root is configured.
- HTTP size-limit flags affect only `serve`.
## Input And Variable Syntax
- `--input name=path` maps prompt input names to local file paths.
- `--var name=value` maps prompt template variables to string values.
- Both flags can be repeated.
- Both flags also accept comma-separated mappings, such as `--input transcript=./t.md,glossary=./g.yml`.
- Values may contain `=` after the first separator, such as `--var note=a=b=c`.
- Empty names and empty values are rejected.
CLI `run` and `render` convert every `--input` mapping to a `file` artifact
reference. HTTP also supports `inline` input references; see [HTTP API
reference](api.md).
## Output Behavior
`run`:
- Writes generated artifact content to stdout by default.
- Writes generated artifact content to `--out` when provided.
- Prints a success summary to stderr.
- Prints errors to stderr on failure.
`render`:
- Writes prepared-run output to stdout by default.
- Writes prepared-run output to `--out` when provided.
- Does not print a success summary.
`serve`:
- Logs startup and server errors to stderr.
## Exit Codes
- `0`: success.
- `1`: parse, config, load, render, generation, output-write, or runtime error.
- `2`: `run` completed and wrote output, but validation status is `failed`.
## Common Workflows
Render prompt inputs and variables as JSON:
```bash
go run ./cmd/scriptorium render \
--config ./examples/config.yml \
--prompt generic.markdown_summary \
--input transcript=./examples/fixtures/transcript.md \
--input glossary=./examples/fixtures/glossary.yml \
--var session_date=2026-05-04 \
--format json
```
Run a prompt with an explicit profile and file output:
```bash
go run ./cmd/scriptorium run \
--config ./examples/config.yml \
--prompt generic.markdown_summary \
--profile local-fast \
--input transcript=./examples/fixtures/transcript.md \
--input glossary=./examples/fixtures/glossary.yml \
--out ./summary.md
```
Start the HTTP server with example config:
```bash
go run ./cmd/scriptorium serve --config ./examples/config.yml
```
Copyable maintained script:
- `examples/render-markdown-summary.sh`