Default file:
sift.json
Sift treats $schema as editor metadata. init writes a schema URL pinned to the installed Sift version, but runtime config loading does not reject older, future, relative, or missing schema references:
{
"$schema": "https://raw.githubusercontent.com/vitorsreis/sift/v2.4.3/resources/schema.json",
"output": {
"format": "terminal",
"size": "compact",
"pretty": true,
"show_process": false,
"colored": true
},
"history": {
"enabled": true,
"path": ".sift/history",
"max_files": 50,
"max_age_days": 30,
"max_bytes_per_run": 1048576,
"redact_secrets": true
},
"tools": {
"*": {
"enabled": true
},
"phpstan": {
"binary": "vendor/bin/phpstan",
"blocked_args": [],
"timeout": 0
}
}
}- Relative paths inside
sift.jsonresolve from the config file directory. - Runtime defaults such as history and locks resolve from the project root.
- Global scope uses
SIFT_HOMEor~/.sift. history.max_age_daysis optional.initwrites30; omitting the field disables age-based retention.output.formatacceptsterminalorjson. The default isterminal.output.coloredenables ANSI styling for terminal output. Set it tofalsefor plain terminal text by default.- Tool timeouts default to
1800seconds. Settimeoutto0to disable the timeout. --jsonand--no-jsonoverrideoutput.format.--no-colordisables ANSI styling for one command, regardless ofoutput.colored.help,version,tools list, and the rootcomposer skillshelp always render terminal output.output.prettyaffects JSON output only.
composer sift validate checks the document against the bundled JSON Schema and then applies semantic runtime rules. Missing config is valid because runtime defaults are valid.
Invalid config exits with code 3. Errors are terminal text by default and JSON with --json.