Files
clawmates/deploy/compose/clawmates.toml
T
Omar SobhandClaude Opus 5 9c4b0722e8
deploy / test (push) Successful in 3m58s
deploy / build (push) Successful in 5m29s
feat(judge): an independent GLM judge, on the newest model z.ai publishes
Every phase verdict this session was Anthropic grading Anthropic, and the boot
log said so on each start:

    validator_preflight: no CLAWMATES_VALIDATOR_MODEL — phase verdicts are
    judged by the house model, which is NOT an independent check

`evaluator.rs` already preferred a cross-provider judge and refused to call a
same-family one `independent`; the local stack simply had no non-Anthropic
credential. It now carries the same `glm` provider gw-04 has had all along —
`format = "anthropic"` is load-bearing, since z.ai's OpenAI-compatible endpoint
is ToS-throttled for raw SDK access while its Anthropic-format one is not.

Model: glm-5.3, the newest z.ai lists (4.5, 4.5-air, 4.6, 4.7, 5, 5-turbo,
5.1, 5.2, 5.3 as of 2026-08-17). gw-04 still runs glm-4.7.

glm-5.3 is a REASONING model: it emits a `thinking` block before its JSON. Our
SSE parser ignores `thinking_delta` and keeps the text, so the wire shape is
compatible — but on a realistic phase-evidence prompt it spent 819 of the
evaluator's 1024 output tokens. A longer phase would truncate the verdict, and
a truncated verdict parses as empty and FAILS CLOSED, burning one of the
phase's passes on a judge that never answered — precisely how mission 01a00bbb
lost a pass. max_tokens raised to 2048.

Measured before wiring: asked to judge 25 commits claiming INT-01..INT-25 with
tests passing, glm-5.3 returned met=false because the evidence never
established what the brief actually required. That skepticism is the point of
an independent judge.

Boot now reports: `validator_preflight: independent validator glm:glm-5.3
answered`.

The key lives in .env (gitignored), never in this file.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-08-16 21:41:45 -07:00

39 lines
1.4 KiB
TOML

# Server configuration for the air-gapped compose deployment. Secrets and
# host-specific values are overlaid via CLAWMATES_* environment variables in
# docker-compose.yml (e.g. CLAWMATES_DATABASE__URL carries the password).
deploy_target = "air_gapped"
listen_addr = "0.0.0.0:8080"
[database]
# Overridden by CLAWMATES_DATABASE__URL; kept here so the file is complete.
url = "postgres://postgres:placeholder-overridden-by-env@postgres:5432/clawmates"
[llm]
provider = "openai_compat"
base_url = "http://local-llm:8000/v1"
model = "qwen2.5-72b-instruct"
# GLM, so a phase verdict is judged by a DIFFERENT provider family than the one
# that did the work. `evaluator.rs` refuses to call a same-family judge
# `independent`, and until now this stack had only Anthropic credentials — so
# every verdict was Anthropic grading Anthropic and the boot log said so:
#
# validator_preflight: no CLAWMATES_VALIDATOR_MODEL — phase verdicts are
# judged by the house model, which is NOT an independent check
#
# `format = "anthropic"` is required, not cosmetic: z.ai's OpenAI-compatible
# endpoint is ToS-throttled for raw SDK access, while its Anthropic-format
# endpoint accepts them. Mirrors gw-04's clawmates.toml exactly.
[[llm.providers]]
name = "glm"
base_url = "https://api.z.ai/api/anthropic"
api_key_env = "ZAI_API_KEY"
format = "anthropic"
[auth]
mode = "local"
[broker]
socket_path = "/run/clawmates/broker.sock"