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.
| Runtime | base_url | Start |
|---|---|---|
| LM Studio | http://127.0.0.1:1234/v1 | app, or lms server start |
| Ollama | http://127.0.0.1:11434/v1 | ollama serve, models via ollama pull |
| vLLM | http://127.0.0.1:8000/v1 | vllm serve <model> |
| llama.cpp | http://127.0.0.1:8080/v1 | llama-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
| Key | Default | Effect |
|---|---|---|
max_concurrent_lanes | 2 | Parallel builds; also throttled by live RAM/load |
local_attempts_before_escalation | 2 | Local tries before climbing the ladder |
escalations_per_task | 4 | Then the task is blocked |
spend_daily_usd / spend_weekly_usd | 0 | 0 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.