Configuration

Local runtimes, tool paths, limits

Everything lives in zecor.config.json (or .zecor/config.json). The full annotated schema is zecor.config.example.json in the repo. Environment variables override the file.

Local model endpoint

Zecor talks to any OpenAI-compatible /v1/chat/completions endpoint. Set local_model.base_url or ZECOR_LM_BASE_URL.

Runtimebase_urlStart
LM Studiohttp://127.0.0.1:1234/v1app, or lms server start
Ollamahttp://127.0.0.1:11434/v1ollama serve, models via ollama pull
vLLMhttp://127.0.0.1:8000/v1vllm serve <model>
llama.cpphttp://127.0.0.1:8080/v1llama-server --host 127.0.0.1 --port 8080

Five roles are configured independently: primary_coder, deep_coder, reasoner, router, embed. Point each at a model your endpoint serves. Local prompts are capped at prompt_token_cap (default 8000); anything larger is a slicing error or belongs one tier up.

Cloud fallback

Credentials come from the environment, never the config file. Set ANTHROPIC_API_KEY / OPENAI_API_KEY in the shell that starts Zecor; they are stripped from every lane subprocess.

Deterministic tools

deterministic_tools holds paths for git, ripgrep, and ast-grep if they are not on PATH. gate.script is the per-repo gate command; gate.wall_clock_cap_s bounds a single attempt.

Autonomy limits

KeyDefaultEffect
max_concurrent_lanes2Parallel builds; also throttled by live RAM/load
local_attempts_before_escalation2Local tries before climbing the ladder
escalations_per_task4Then the task is blocked
spend_daily_usd / spend_weekly_usd00 disables the USD ceiling; the vendor quota table still throttles

CI/CD integration

Point CI at bash .zecor/verify.sh. In guarded mode Zecor blocks its own auto-merge unless that gate — plus type checks and security scanners — passes with no warnings. In hardened mode it only opens draft PRs; merge is always a human action.

Notifications

notify.ntfy_topic (free, works through CGNAT) or notify.pushover_*. Zecor pushes on a stuck goal, a crashed run, or a card that needs a decision.