spar-cli 0.1.20

Two AI coding agents alternate implementing and reviewing GitHub issues until a PR converges.
Documentation
# Claude Code. Model and effort are per-invocation flags.
command = [
  "claude", "-p",
  ["--model", "{model}"],
  ["--effort", "{effort}"],
  ["--permission-mode", "acceptEdits"],
  # Equals form on purpose: --allowedTools is variadic, so the separate
  # form swallows the following positional prompt unless another flag
  # happens to sit between them.
  ["--allowedTools=Bash,Read,Write,Edit,Glob,Grep,WebFetch"],
  # Native structured output. Claude Code takes the schema as an argument rather
  # than a path, hence {schema} and not {schema_file}. The group drops when
  # there is no schema, which is every call that wants prose back.
  #
  # Without this, spar asked for JSON in the prompt and parsed whatever came
  # back, and a long review hit the output limit: the response stopped before
  # its outer object closed, the last complete thing in it was a nested finding,
  # and half the review was lost.
  ["--json-schema", "{schema}"],
  ["--append-system-prompt", "{system}"],
  "{prompt}",
]
system_via = "placeholder"
output = "text"

# Hints for `spar init`. Never validated against, only written as comments, so a
# value missing from this list still works. Reported by `claude --help`.
# The first entry of each list is what `spar init` writes as the suggested
# value, so the sensible default goes first rather than the CLI's own ordering.
models = ["fable", "opus", "sonnet"]
efforts = ["high", "low", "medium", "xhigh", "max"]
options_note = "Model takes an alias or a full name like claude-fable-5. Check the current sets with: claude --help"